[OPENMEETINGS-1297] svn tree is restructured
diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..6f4c2f2
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+ -->
+<classpath>
+	<classpathentry kind="src" path="src/axis/java"/>
+	<classpathentry kind="src" path="src/db/java"/>
+	<classpathentry kind="src" path="src/doc/java"/>
+	<classpathentry kind="src" path="src/install/java"/>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="src" path="src/test/java"/>
+	<classpathentry kind="src" path="src/main/webapp/WEB-INF/classes"/>
+	<classpathentry kind="src" path="src/screenshare/java"/>
+	<classpathentry kind="src" path="src/util/java"/>
+	<classpathentry kind="src" path="src/web/java"/>
+	<classpathentry exported="true" kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4">
+		<attributes>
+			<attribute name="org.eclipse.jst.component.nondependency" value=""/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.apache.ivyde.eclipse.cpcontainer.IVYDE_CONTAINER/?project=Openmeetings+3.0.x&amp;ivyXmlPath=ivy.xml&amp;confs=*&amp;ivySettingsPath=%24%7Bworkspace_loc%3AOpenmeetings+3.0.x%2Fivysettings.xml%7D&amp;loadSettingsOnDemand=false&amp;propertyFiles="/>
+	<classpathentry kind="lib" path="build/lib/java_16_tools.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/red5-io-1.0.6-RELEASE.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/red5-server.jar" sourcepath="build/red5/server/src/main/java"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/red5-server-common-1.0.6-RELEASE.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/slf4j-api-1.7.9.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/spring-core-4.1.7.RELEASE.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/spring-beans-4.1.7.RELEASE.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/mina-core-2.0.9.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/quartz-2.2.1.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/log4j-over-slf4j-1.7.9.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/commons-collections-3.2.1.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/spring-web-4.1.7.RELEASE.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/commons-beanutils-1.9.2.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/commons-lang3-3.4.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/logback-core-1.1.2.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/logback-classic-1.1.2.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/spring-expression-4.1.7.RELEASE.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/spring-context-4.1.7.RELEASE.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/spring-context-support-4.1.7.RELEASE.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/aopalliance-1.0.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/spring-aop-4.1.7.RELEASE.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/commons-pool-1.5.6.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/ehcache-core-2.6.9.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/plugins/tomcat-embed-core.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/bcprov-jdk15on-1.52.jar"/>
+	<classpathentry kind="lib" path="build/red5/server/dist/lib/cglib-nodep-2.2.2.jar"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
+		<attributes>
+			<attribute name="owner.project.facets" value="java"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="build/classes/eclipse"/>
+</classpath>
diff --git a/.project b/.project
new file mode 100644
index 0000000..0b02fe0
--- /dev/null
+++ b/.project
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<projectDescription>
+	<name>Openmeetings 3.0.x</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.common.project.facet.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.validation.validationbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.springframework.ide.eclipse.core.springbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.zeroturnaround.eclipse.remoting.remotingBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.zeroturnaround.eclipse.rebelXmlBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.springframework.ide.eclipse.core.springnature</nature>
+		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+		<nature>org.apache.ivyde.eclipse.ivynature</nature>
+		<nature>org.zeroturnaround.eclipse.remoting.remotingNature</nature>
+		<nature>org.zeroturnaround.eclipse.jrebelNature</nature>
+	</natures>
+	<filteredResources>
+		<filter>
+			<id>1387965572383</id>
+			<name></name>
+			<type>26</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-name-matches-false-false-.svn</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572384</id>
+			<name></name>
+			<type>10</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-false-false-dist</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572388</id>
+			<name></name>
+			<type>26</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-false-false-build/classes/openmeetings</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572390</id>
+			<name></name>
+			<type>26</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-false-false-build/openlaszlo*</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572391</id>
+			<name></name>
+			<type>6</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-name-matches-false-false-.ant-targets-build.xml</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572392</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-false-false-build/red5/server/target</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572392</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-false-false-build/red5/client/target</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572393</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-false-false-build/api</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572393</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-false-false-build/red5/server/dist/webapps</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572394</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-false-false-build/red5/server/src/main/server</arguments>
+			</matcher>
+		</filter>
+		<filter>
+			<id>1387965572395</id>
+			<name></name>
+			<type>30</type>
+			<matcher>
+				<id>org.eclipse.ui.ide.multiFilter</id>
+				<arguments>1.0-projectRelativePath-matches-false-false-build/red5/server/webapps</arguments>
+			</matcher>
+		</filter>
+	</filteredResources>
+</projectDescription>
diff --git a/.settings/.jsdtscope b/.settings/.jsdtscope
new file mode 100644
index 0000000..f40dd98
--- /dev/null
+++ b/.settings/.jsdtscope
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>

+	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">

+		<attributes>

+			<attribute name="hide" value="true"/>

+		</attributes>

+	</classpathentry>

+	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>

+	<classpathentry kind="output" path=""/>

+</classpath>

diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..93a19d3
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,14 @@
+#   Licensed under the Apache License, Version 2.0 (the "License");

+#   you may not use this file except in compliance with the License.

+#   You may obtain a copy of the License at

+#

+#       http://www.apache.org/licenses/LICENSE-2.0

+#

+#   Unless required by applicable law or agreed to in writing, software

+#   distributed under the License is distributed on an "AS IS" BASIS,

+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+#   See the License for the specific language governing permissions and

+#   limitations under the License.

+eclipse.preferences.version=1

+encoding//src/main/webapp/WEB-INF/classes/rebel-remote.xml=UTF-8

+encoding//src/main/webapp/WEB-INF/classes/rebel.xml=UTF-8

diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..980b98c
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7

+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve

+org.eclipse.jdt.core.compiler.compliance=1.7

+org.eclipse.jdt.core.compiler.debug.lineNumber=generate

+org.eclipse.jdt.core.compiler.debug.localVariable=generate

+org.eclipse.jdt.core.compiler.debug.sourceFile=generate

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.7

diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..b78a010
--- /dev/null
+++ b/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,54 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+sp_cleanup.add_default_serial_version_id=true
+sp_cleanup.add_generated_serial_version_id=false
+sp_cleanup.add_missing_annotations=true
+sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
+sp_cleanup.add_missing_nls_tags=false
+sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
+sp_cleanup.add_serial_version_id=false
+sp_cleanup.always_use_blocks=true
+sp_cleanup.always_use_parentheses_in_expressions=false
+sp_cleanup.always_use_this_for_non_static_field_access=false
+sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
+sp_cleanup.format_source_code=false
+sp_cleanup.format_source_code_changes_only=true
+sp_cleanup.make_local_variable_final=false
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=true
+sp_cleanup.never_use_blocks=false
+sp_cleanup.never_use_parentheses_in_expressions=true
+sp_cleanup.on_save_use_additional_actions=false
+sp_cleanup.organize_imports=true
+sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
+sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
+sp_cleanup.remove_private_constructors=true
+sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces_all=true
+sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
+sp_cleanup.remove_unnecessary_casts=true
+sp_cleanup.remove_unnecessary_nls_tags=false
+sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+sp_cleanup.remove_unused_private_types=true
+sp_cleanup.sort_members=false
+sp_cleanup.sort_members_all=false
+sp_cleanup.use_blocks=false
+sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_parentheses_in_expressions=false
+sp_cleanup.use_this_for_non_static_field_access=false
+sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/.settings/org.eclipse.wst.common.component b/.settings/org.eclipse.wst.common.component
new file mode 100644
index 0000000..bcc91bc
--- /dev/null
+++ b/.settings/org.eclipse.wst.common.component
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId"/>
diff --git a/.settings/org.eclipse.wst.common.project.facet.core.xml b/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..42bce44
--- /dev/null
+++ b/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+  <fixed facet="jst.web"/>
+  <fixed facet="jst.java"/>
+  <installed facet="jst.web" version="2.5"/>
+  <installed facet="jst.java" version="1.7"/>
+</faceted-project>
diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.container b/.settings/org.eclipse.wst.jsdt.ui.superType.container
new file mode 100644
index 0000000..3bd5d0a
--- /dev/null
+++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git a/.settings/org.eclipse.wst.jsdt.ui.superType.name b/.settings/org.eclipse.wst.jsdt.ui.superType.name
new file mode 100644
index 0000000..05bd71b
--- /dev/null
+++ b/.settings/org.eclipse.wst.jsdt.ui.superType.name
@@ -0,0 +1 @@
+Window
\ No newline at end of file
diff --git a/.settings/org.eclipse.wst.validation.prefs b/.settings/org.eclipse.wst.validation.prefs
new file mode 100644
index 0000000..26adfa2
--- /dev/null
+++ b/.settings/org.eclipse.wst.validation.prefs
@@ -0,0 +1,12 @@
+DELEGATES_PREFERENCE=delegateValidatorList
+USER_BUILD_PREFERENCE=enabledBuildValidatorList
+USER_MANUAL_PREFERENCE=enabledManualValidatorList
+USER_PREFERENCE=overrideGlobalPreferencestruedisableAllValidationfalseversion1.2.303.v201202090300
+eclipse.preferences.version=1
+override=true
+suspend=false
+vals/org.eclipse.wst.dtd.core.dtdDTDValidator/groups=0107include04111contentType134org.eclipse.wst.dtd.core.dtdsourceT07fileext03dtdF07fileext03entF07fileext03modF0107exclude0207fileext04.lzxF04file05buildF02
+vals/org.eclipse.wst.html.ui.HTMLValidator/groups=0107include06111contentType136org.eclipse.wst.html.core.htmlsourceT07fileext04htmlF07fileext05xhtmlF07fileext03htmF07fileext04htplF07fileext03wmlF0107exclude0104file05buildF02
+vals/org.eclipse.wst.xml.core.xml/groups=0107include05111contentType128org.eclipse.core.runtime.xmlT111contentType134org.eclipse.wst.xml.core.xmlsourceT111contentType134org.eclipse.wst.xml.core.xslsourceT111contentType134org.eclipse.jst.jsp.core.tldsourceT07fileext03xmlF0107exclude111113projectNature134org.eclipse.jst.j2ee.ejb.EJBNature113projectNature130org.eclipse.jst.j2ee.EARNature04file08.projectT0104file110.classpathT0104file110.settings/T0207fileext04.lzxF04file05buildF0204file114WebContent/srcF0204file116WebContent/swf10F0207fileext04.wmlF04file04testF02
+vals/org.eclipse.wst.xsd.core.xsd/groups=0107include0107fileext03xsdF0107exclude0107fileext04.lzxF
+vf.version=3
diff --git a/.settings/org.springframework.ide.eclipse.beans.core.prefs b/.settings/org.springframework.ide.eclipse.beans.core.prefs
new file mode 100644
index 0000000..3af8ce5
--- /dev/null
+++ b/.settings/org.springframework.ide.eclipse.beans.core.prefs
@@ -0,0 +1,3 @@
+#Sun Aug 28 18:17:40 CEST 2011

+eclipse.preferences.version=1

+org.springframework.ide.eclipse.beans.core.ignoreMissingNamespaceHandler=false

diff --git a/.settings/org.springframework.ide.eclipse.core.prefs b/.settings/org.springframework.ide.eclipse.core.prefs
new file mode 100644
index 0000000..68f57e2
--- /dev/null
+++ b/.settings/org.springframework.ide.eclipse.core.prefs
@@ -0,0 +1,63 @@
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+eclipse.preferences.version=1
+org.springframework.ide.eclipse.core.builders.enable.aopreferencemodelbuilder=true
+org.springframework.ide.eclipse.core.builders.enable.beanmetadatabuilder=true
+org.springframework.ide.eclipse.core.enable.project.preferences=false
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.bestpractices.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.core.springvalidator=false
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.data.core.datavalidator=true
+org.springframework.ide.eclipse.core.validator.enable.org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.autowire.autowire-org.springframework.ide.eclipse.beans.core.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanAlias-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanClass-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanConstructorArgument-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinition-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanDefinitionHolder-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanFactory-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanInitDestroyMethod-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.beanReference-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.methodOverride-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.parsingProblems-org.springframework.ide.eclipse.beans.core.beansvalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.requiredProperty-org.springframework.ide.eclipse.beans.core.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.beans.core.toolAnnotation-org.springframework.ide.eclipse.beans.core.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.AvoidDriverManagerDataSource-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.ImportElementsAtTopRulee-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.ParentBeanSpecifiesAbstractClassRule-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.RefElementRule-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.TooManyBeansInFileRule-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.UnnecessaryValueElementRule-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.com.springsource.sts.bestpractices.UseBeanInheritance-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.bestpractices.legacyxmlusage.jndiobjectfactory-org.springframework.ide.eclipse.bestpractices.beansvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.core.springClasspath-org.springframework.ide.eclipse.core.springvalidator=false
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.data.core.invalidDerivedQuery-org.springframework.ide.eclipse.data.core.datavalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.data.core.invalidParameterType-org.springframework.ide.eclipse.data.core.datavalidator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.action-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.actionstate-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attribute-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.attributemapper-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.beanaction-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationaction-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.evaluationresult-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.exceptionhandler-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.import-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.inputattribute-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.mapping-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.outputattribute-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.set-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.state-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.subflowstate-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.transition-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.variable-org.springframework.ide.eclipse.webflow.core.validator=true
+org.springframework.ide.eclipse.core.validator.rule.enable.org.springframework.ide.eclipse.webflow.core.validation.webflowstate-org.springframework.ide.eclipse.webflow.core.validator=true
diff --git a/.springBeans b/.springBeans
new file mode 100644
index 0000000..c54141b
--- /dev/null
+++ b/.springBeans
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beansProjectDescription>
+	<version>1</version>
+	<pluginVersion><![CDATA[3.3.0.201307091516-RELEASE]]></pluginVersion>
+	<configSuffixes>
+		<configSuffix><![CDATA[xml]]></configSuffix>
+	</configSuffixes>
+	<enableImports><![CDATA[false]]></enableImports>
+	<configs>
+		<config>src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml</config>
+	</configs>
+	<configSets>
+	</configSets>
+</beansProjectDescription>
diff --git a/CHANGELOG b/CHANGELOG
new file mode 100644
index 0000000..36942ef
--- /dev/null
+++ b/CHANGELOG
@@ -0,0 +1,1085 @@
+Apache OpenMeetings Change Log
+
+See http://issues.apache.org/jira/browse/OPENMEETINGS-* (where * is the number of the issue below)
+
+Release Notes - Openmeetings - Version 3.0.7
+================================================================================================================
+
+** Bug
+    * [OPENMEETINGS-1211] - the use of icons in users tab is illogical
+    * [OPENMEETINGS-1213] - Error is shown when contact try to send invitation
+    * [OPENMEETINGS-1218] - Wrong birthday date is displayed on the User datails at Administration->Users page
+    * [OPENMEETINGS-1221] - Language is not loaded after changes
+    * [OPENMEETINGS-1230] - Clustering seems not to work as expected
+    * [OPENMEETINGS-1231] - chat bar on landing page without lable an delete function missing
+    * [OPENMEETINGS-1234] - Unable to take backup using GUI or Admin.sh
+    * [OPENMEETINGS-1238] - Share/record screen: go to HTTP STATUS 404- Apache Tomcat page
+    * [OPENMEETINGS-1239] - Can't import REST URL properly
+    * [OPENMEETINGS-1248] - Clustering not working from external system (for ex. Moodle)
+    * [OPENMEETINGS-1249] - Guest can't enter to the room when room is booked via private message
+    * [OPENMEETINGS-1250] - Video is not availble in the interview rooms
+    * [OPENMEETINGS-1251] - When room is full kicked user not redirected to Rooms list
+    * [OPENMEETINGS-1253] - Crash when searching at language editor.
+    * [OPENMEETINGS-1254] - Crash when adding OAuth2 config
+
+** Improvement
+    * [OPENMEETINGS-954] - Need implement OM client for Android devices.
+    * [OPENMEETINGS-1100] - Seperate video/audio permissions capability 
+    * [OPENMEETINGS-1101] - Live presenter activity (typing , drawing)
+    * [OPENMEETINGS-1212] - Library versions should be updated (3.0.7)
+
+** Wish
+    * [OPENMEETINGS-1214] - LDAP import AD groups
+
+
+Release Notes - Openmeetings - Version 3.0.6
+================================================================================================================
+
+** Bug
+    * [OPENMEETINGS-1202] - Send Invitation error with moodle
+    * [OPENMEETINGS-1203] - Screen sharing is not started when external guest try to start sharing
+    * [OPENMEETINGS-1205] - Invitation is not sent from the toom
+    * [OPENMEETINGS-1207] - Create a poll
+    * [OPENMEETINGS-1208] - default_group_id ...?
+
+** Improvement
+    * [OPENMEETINGS-1197] - Library versions should be updated (3.0.6)
+    * [OPENMEETINGS-1206] - Room service should be updated to be able to generate invitation hash with first and last name
+
+
+Release Notes - Openmeetings - Version 3.0.5
+================================================================================================================
+
+** Bug
+    * [OPENMEETINGS-889] - "Upload new image" button should have the same style with other buttons
+    * [OPENMEETINGS-1161] - Dashboard start widget is not correctly aligned when language is RTL
+    * [OPENMEETINGS-1168] - Request for contact multi-language + RTL issues
+    * [OPENMEETINGS-1181] - Date pickers are not localized
+    * [OPENMEETINGS-1182] - User entered the room from Joomla plugin is displayed with "null" as lastname
+    * [OPENMEETINGS-1183] - It is impossible to change 'chatOpened' room parameter using modifyRoomParameter SOAP call
+    * [OPENMEETINGS-1185] - Appointments returned by SOAP service get wrong start/end time
+    * [OPENMEETINGS-1187] - Send One-Time Invitation does not work if we Generate URL first.
+    * [OPENMEETINGS-1188] - less data for getRoomById
+    * [OPENMEETINGS-1189] - Room' s session seems to expire in less than 1.5 hours when in rooms
+    * [OPENMEETINGS-1190] - keystore file pw is disclosed in the screen sharing log
+    * [OPENMEETINGS-1196] - Meaningless internal error in case OAuth email is in use
+    * [OPENMEETINGS-1199] - Cluster status is missed on admin->connection page
+    * [OPENMEETINGS-1200] - Main menu items shows incorrectly
+    * [OPENMEETINGS-1201] - Header of moderators list box shows incorrectly
+
+** Improvement
+    * [OPENMEETINGS-1133] - Direct sign-in from another site
+    * [OPENMEETINGS-1184] - Library versions should be updated (3.0.5)
+    * [OPENMEETINGS-1198] - Simplify Database Install
+
+
+Release Notes - Openmeetings - Version 3.0.4
+================================================================================================================
+
+** Bug
+    * [OPENMEETINGS-878] - Sign Web-Start application with trusted root cert
+    * [OPENMEETINGS-1041] - It is impossible drag and drop recordings to public folder when recordings list is scrolled
+    * [OPENMEETINGS-1055] - Error is thrown and connection is closed when external user try to generate URL and send email invitation
+    * [OPENMEETINGS-1062] - Contact data of other users are shown not all.
+    * [OPENMEETINGS-1063] - When "Show contact data to contacts only" was selected, contact data are not showing for users from contacts.
+    * [OPENMEETINGS-1074] - Sharing of the screen gives remote access to the other user
+    * [OPENMEETINGS-1075] - system does not save the mark "do not ask me" when choosing a camera and video expansion
+    * [OPENMEETINGS-1079] - Synchronous backup does not work through the web interface with a large volume of data
+    * [OPENMEETINGS-1080] - Connection with the server is canceled after recordings
+    * [OPENMEETINGS-1083] - Impossible to add user to group, moderator to room
+    * [OPENMEETINGS-1084] - cannot remove auto created user by invite for conference room 
+    * [OPENMEETINGS-1087] - X-UA-Compatible should be set as first META tag
+    * [OPENMEETINGS-1088] - error installing with mssql
+    * [OPENMEETINGS-1089] - Spanish installation screens contains bad UTF-8 chars
+    * [OPENMEETINGS-1091] - the attendees can chaange the start and end dates of calendar appointment rooms !!!
+    * [OPENMEETINGS-1092] - users can use the calendar room to make conference after the end-date of the conference room!!!
+    * [OPENMEETINGS-1094] - Ldap authorisation is not working correctly if var ldap_search_scope=SUBTREE
+    * [OPENMEETINGS-1098] - Login via OAuth2 is broken due to redirectUri is wrong
+    * [OPENMEETINGS-1102] - Room web service is broken
+    * [OPENMEETINGS-1103] - Pressing 'play' on the video player while a video is already playing starts a new player
+    * [OPENMEETINGS-1105] - Dereferencing Aliases using LDAP and eDirectory.
+    * [OPENMEETINGS-1109] - Appointment with existing room is displayed as appointment with 'appointment special room'
+    * [OPENMEETINGS-1110] - Audio/video is being broadcasted to the room after room exit
+    * [OPENMEETINGS-1114] - LDAP config is not Unicode aware
+    * [OPENMEETINGS-1117] - RTL is not fully supported by OM
+    * [OPENMEETINGS-1121] - Blank field (invited user)
+    * [OPENMEETINGS-1123] - RedirectLoop while trying to install
+    * [OPENMEETINGS-1124] - Calendar interface bug
+    * [OPENMEETINGS-1126] - Timezone bug
+    * [OPENMEETINGS-1127] - Unexpected behaivor when user enter to the room if room type is udefined
+    * [OPENMEETINGS-1128] - users can not be deleted ("ghost users")
+    * [OPENMEETINGS-1131] - New events are not shown in the calendar
+    * [OPENMEETINGS-1134] - Removed folder shows in the "Move to folder..." dropdown box
+    * [OPENMEETINGS-1137] - Reducing load times of rooms via invitations api
+    * [OPENMEETINGS-1139] - When users are in different timezones, the meeting setup was not shown correctly on invitee's caleander
+    * [OPENMEETINGS-1143] - Recordings list order
+    * [OPENMEETINGS-1146] - RTMPS uses rtmpport
+    * [OPENMEETINGS-1149] - "AVI", "FLV" and "Re-convert" buttons are not visible on recordings panel when recordings list box is scrolled
+    * [OPENMEETINGS-1150] - NullPointerException is thrown when user try enter to the room via calendar
+    * [OPENMEETINGS-1151] - Recording Java Application is blocked by Security Settings
+    * [OPENMEETINGS-1153] - "Record started" remains in upper right corner after record was stoped (interviewroom)
+    * [OPENMEETINGS-1154] - Too big waiting time after pressing the "Stop recording" button
+    * [OPENMEETINGS-1156] - The "Allow recording" flag is not checked when screen sharing is started
+    * [OPENMEETINGS-1157] - Calendar web service is broken
+    * [OPENMEETINGS-1159] - Chat is not correctly aligned then language is RTL
+    * [OPENMEETINGS-1160] - Edit user settings is not correctly aligned when language is RTL
+    * [OPENMEETINGS-1162] - Admin->users is not correctly aligned when language is RTL
+    * [OPENMEETINGS-1163] - Admin->OAuth is not correctly aligned when language is RTL
+    * [OPENMEETINGS-1164] - Admin->Servers is not correctly aligned when language is RTL
+    * [OPENMEETINGS-1165] - Admin->Configurations is not correctly aligned when language is RTL
+    * [OPENMEETINGS-1166] - Admin->Groups is not correctly aligned when language is RTL
+    * [OPENMEETINGS-1167] - Admin->Labels is not correctly aligned when language is RTL
+    * [OPENMEETINGS-1169] - Send Message dialog is not properly aligned when RTL language is selected
+    * [OPENMEETINGS-1170] - Profile page is not updated when user changes settings
+    * [OPENMEETINGS-1173] - The "Internal error" is thrown when uncheck the "Create/Modify appointment special room" flag
+    * [OPENMEETINGS-1174] - Unenrolled user not redirected to Rooms list
+    * [OPENMEETINGS-1175] - It is impossible to send private message from the room
+    * [OPENMEETINGS-1177] - Calendar is not properly aligned when RTL language is selected
+
+** Improvement
+    * [OPENMEETINGS-547] - Deferred recordings converting possibility.
+    * [OPENMEETINGS-623] - OpenMeetings怎么修改发送邮件的格式
+    * [OPENMEETINGS-1082] - Library versions should be updated
+    * [OPENMEETINGS-1099] - Build should be ready for web-start code-signing
+    * [OPENMEETINGS-1130] - Emails should be created using templates, not string concatenation
+    * [OPENMEETINGS-1135] - logback config should be updated to use log rotation and keep old logs
+    * [OPENMEETINGS-1136] - Improving portuguese-brazil installation translation
+
+** New Feature
+    * [OPENMEETINGS-1104] - Enable change first day in the Calendar
+
+** Wish
+    * [OPENMEETINGS-1065] - add ability to minimize screen-sharing video
+
+
+Release Notes - Openmeetings - Version 3.0.3
+================================================================================================================
+
+** Bug
+    * [OPENMEETINGS-270] - MemoryLeak / Dead-Lock in FlvRecorderConverter
+    * [OPENMEETINGS-292] - Inviting people during conference
+    * [OPENMEETINGS-409] - Interview Room (2)
+    * [OPENMEETINGS-452] - LDAP issue. Cannot relogin with user that already was logined before and then logged out
+    * [OPENMEETINGS-532] - Generated hash issue
+    * [OPENMEETINGS-616] - Openmeetings for Drupal got a 500 error
+    * [OPENMEETINGS-680] - The "," symbol is used for the multiple e-mail instead of standard ";" symbol
+    * [OPENMEETINGS-683] - Somtimes vido frame is not visible for other users in the room
+    * [OPENMEETINGS-686] - Recording faild when pause is used
+    * [OPENMEETINGS-697] - Authentification Ldap
+    * [OPENMEETINGS-809] - Global chat issues in rooms
+    * [OPENMEETINGS-888] - Room name is not translated correctly in the "My room" widget
+    * [OPENMEETINGS-915] - Regression in 3.0: Incorrect moderator list update in the room screen.
+    * [OPENMEETINGS-918] - Contacts should not be added to usergroup
+    * [OPENMEETINGS-931] - AD LDAP Authentication on empty install organization choice after first logon: empty list
+    * [OPENMEETINGS-953] - can not upload files while using Tomcat with SSL enabled
+    * [OPENMEETINGS-986] - Oauth2.0 Logon Not Working
+    * [OPENMEETINGS-998] - Audio and Video of recordings are not in sync after a few minutes
+    * [OPENMEETINGS-1007] - Users with externalUserId and externaluserType <> null can't login
+    * [OPENMEETINGS-1012] - Reverted timezone is set by default in invitation window
+    * [OPENMEETINGS-1013] - Profile pictures are not displayed to invited user
+    * [OPENMEETINGS-1015] - Browser time zone is not selected correctly in the invitation window until all java timezones are loaded
+    * [OPENMEETINGS-1019] - RemoteControl: problem with sql
+    * [OPENMEETINGS-1020] - create new user after adding user does not add to DB
+    * [OPENMEETINGS-1022] - cliAdmin is broken (NPE + exclude-files)
+    * [OPENMEETINGS-1023] - ChatMessages are not imported
+    * [OPENMEETINGS-1024] - Add user admin dropdown is broken when postgres is used
+    * [OPENMEETINGS-1026] - Moderator rights are not availble for admin user if enter to the room after simple user
+    * [OPENMEETINGS-1027] - Search button does not work for users
+    * [OPENMEETINGS-1029] - modifyRoomParameter SOAP/REST method is broken
+    * [OPENMEETINGS-1031] - The "New folder" dialogs moves to the bottom of the screen and becomes invisible
+    * [OPENMEETINGS-1032] - search variable in Language Editor produce java.lang.StackOverflowError
+    * [OPENMEETINGS-1034] - openmeetings start always fails with postgresql db on debian
+    * [OPENMEETINGS-1035] - "ant -Ddb=postgres" always fails
+    * [OPENMEETINGS-1037] - LDAP passwords are being printed to the log
+    * [OPENMEETINGS-1038] - PrivateRoom Widget is displayed when dashboard.show.myrooms key is disabled
+    * [OPENMEETINGS-1039] - Interview recording is broken if stop-on-close
+    * [OPENMEETINGS-1042] - .ppt file not open when i upload 
+    * [OPENMEETINGS-1048] - Appointement owner has no moderation rights
+    * [OPENMEETINGS-1050] - User list is missing room users
+    * [OPENMEETINGS-1052] - Room list not displayed after room exit
+    * [OPENMEETINGS-1059] - Language not loaded from user profile.
+    * [OPENMEETINGS-1060] - Strange view of warnings at User editing screen.
+    * [OPENMEETINGS-1061] - Font size list is not visible and availble in the global chat
+    * [OPENMEETINGS-1067] - "Move to folder.." item is not translated correctly on the "Contacts and messages" tab
+    * [OPENMEETINGS-1068] - Error is thrown and connection is closed when move event into Calendar view
+    * [OPENMEETINGS-1069] - Add/remove a user to the default moderator list not working properly
+    * [OPENMEETINGS-1070] - Strange view after auto logout from demo room
+    * [OPENMEETINGS-1076] - Export of localization to file not working.
+    * [OPENMEETINGS-1077] - Max participants in the room work incorrectly
+
+** Improvement
+    * [OPENMEETINGS-96] - Possibility to deny remote control for all when sharing screen
+    * [OPENMEETINGS-360] - Email invited meeting participants to display name not email address
+    * [OPENMEETINGS-942] - Searching for contacts
+    * [OPENMEETINGS-971] - Restrict attendees suggestions
+    * [OPENMEETINGS-984] - Recording auto-repairing should be added
+    * [OPENMEETINGS-1017] - ACLs should be added to the User
+    * [OPENMEETINGS-1021] - Red5 should be updated to the latest stable version
+    * [OPENMEETINGS-1028] - Red5 should be updated to the latest stable version
+    * [OPENMEETINGS-1033] - Improve ldap auth type adding SearchScope variable in config file
+    * [OPENMEETINGS-1036] - Improve User Form for include LDAP domain
+    * [OPENMEETINGS-1040] - Select2 should be used to display/set user groups
+    * [OPENMEETINGS-1049] - no default value for the "Quality of the screen sharing"/default FPS
+
+** New Feature
+    * [OPENMEETINGS-442] - om LDAP users controlled with a group
+    * [OPENMEETINGS-1011] - long time to load openmeetings activity in moodle
+
+** Task
+    * [OPENMEETINGS-964] - LDAP login should be refactored
+
+** Test
+    * [OPENMEETINGS-1025] - Problem with convert recording by ffmpeg
+
+** Wish
+    * [OPENMEETINGS-861] - SOAP user for creating & using om rooms via moodle can log into GUI of OM
+    * [OPENMEETINGS-1066] - re-order fields on screen-sharing applet
+
+
+Release Notes - Openmeetings - Version 3.0.2
+================================================================================================================
+
+** Bug
+    * [OPENMEETINGS-604] - Pop up message remain same after quitting the room created by Book conference room option in the email
+    * [OPENMEETINGS-916] - Selected recording is not highlighted and should not be moved to other folder
+    * [OPENMEETINGS-976] - Cannot restore an erased key in administration\configuration\key
+    * [OPENMEETINGS-978] - It is impossible to start OM in offline mode
+    * [OPENMEETINGS-983] - Verification URL is not generated correctly for self register users
+    * [OPENMEETINGS-985] - Send Invitation functionality is broken
+    * [OPENMEETINGS-990] - error while playing recording
+    * [OPENMEETINGS-993] - Deleted rooms are now excluded from backup
+    * [OPENMEETINGS-994] - AllowRecording option lock normal user interaction in conference Room.
+    * [OPENMEETINGS-996] - send invitation - generate URL
+    * [OPENMEETINGS-997] - error installing with mssql 
+    * [OPENMEETINGS-1002] - OM theming should be consistent
+    * [OPENMEETINGS-1004] - Internal error is thrown when you search a user on the Search Users Tab
+
+** Improvement
+    * [OPENMEETINGS-982] - ApplicationContext recreation should be avoided
+
+
+Release Notes - Openmeetings - Version 3.0.1
+================================================================================================================
+
+** Sub-task
+    * [OPENMEETINGS-937] - Screen sharing application should create recordings with size multiple by 16
+
+** Bug
+    * [OPENMEETINGS-913] - Booking is not working via private message
+    * [OPENMEETINGS-917] - Contacts should not be added as default moderator
+    * [OPENMEETINGS-920] - where are the controls to playback a recorded video?
+    * [OPENMEETINGS-934] - screenrecording without sound
+    * [OPENMEETINGS-935] - Names are mixed in contact request email
+    * [OPENMEETINGS-936] - First frame of the recording has size differs from all other frames
+    * [OPENMEETINGS-943] - OM3.0: login with LDAP user not working
+    * [OPENMEETINGS-949] - Add Whiteboard: untranslated string - hardcoded
+    * [OPENMEETINGS-951] - Command line installer fails if path contains spaces
+    * [OPENMEETINGS-952] - Build should be compatible with latest ant
+    * [OPENMEETINGS-956] - Recording frame is not scrolled
+    * [OPENMEETINGS-957] - Screensharing is broken
+    * [OPENMEETINGS-958] - Calendar event start and end date are not displayed correctly in the month vew for IST time zone
+    * [OPENMEETINGS-959] - "Choose Device" Dialog doesn't show (all) devices from flash-settings
+    * [OPENMEETINGS-960] - Long time without changing progressbar when enter OM
+    * [OPENMEETINGS-961] - Calendar event can be canceled by guest
+    * [OPENMEETINGS-965] - Dashboard is malfunctioning when the user language is set to french
+    * [OPENMEETINGS-966] - Invitation links are not working
+    * [OPENMEETINGS-967] - dashboard.show.myrooms and dashboard.show.rssfeed options are not working
+    * [OPENMEETINGS-972] - Default user database
+    * [OPENMEETINGS-975] - Reminder is not sent for calendar event
+    * [OPENMEETINGS-977] - Import of Appointments and UserContacts was broken
+
+** Improvement
+    * [OPENMEETINGS-938] - Recording length field should be filled by converters
+    * [OPENMEETINGS-939] - Not ready recordings should have special icon
+
+
+Release Notes - Openmeetings - Version 3.0.0
+================================================================================================================
+
+** Sub-task
+    * [OPENMEETINGS-746] - Replace OmTimeZone in User Entity with String tz and fix all dependencies
+    * [OPENMEETINGS-747] - Replace OmTimeZone in Invitations Entity with String tz and fix all dependencies
+    * [OPENMEETINGS-748] - Replace OmTimeZone in MeetingMembers Entity with String tz and fix all dependencies
+    * [OPENMEETINGS-749] - Fix Installer with new timezone handling, default to server timezone in UI
+    * [OPENMEETINGS-750] - Fix Backup importer to be able to import old backups (2.x) to new database schema (3.x) (User, Invitations, MeetingMembers have no OmTimeZone anymore)
+    * [OPENMEETINGS-751] - Remove OmTimeZone Entity and import mechanism for timezones.xml and some cleanup
+    * [OPENMEETINGS-752] - Create Branch and Jenkins Job for Timezone refactoring
+    * [OPENMEETINGS-754] - Fix user admin UI to have timezone as string
+    * [OPENMEETINGS-755] - Fix invitation popup in Flash to not use the OmTimeZones for creating the Invitation
+    * [OPENMEETINGS-758] - Remove OpenLaszlo Admin UI and all related API calls (only if they are not needed somewhere else)
+    * [OPENMEETINGS-759] - Remove Flash UI user settings and related API calls 
+    * [OPENMEETINGS-762] - Callers of TimezoneUtil.getTimezoneByInternalJName should be checked to work as expected
+
+** Bug
+    * [OPENMEETINGS-69] - Conference Room - Chat RTL dosn't function 
+    * [OPENMEETINGS-243] - "Updated" field in Administration -> LDAP panel contains "null" for string for empty value.
+    * [OPENMEETINGS-274] - It is impossible to display "test setup recording" once hidden
+    * [OPENMEETINGS-321] - Recording under OSX throws exception in RecordingConverter
+    * [OPENMEETINGS-337] - interview room - audio does not work when "audio only" is selected
+    * [OPENMEETINGS-348] - zoom synchonization
+    * [OPENMEETINGS-377] - Double clicking in the calendar area create two “Event details” dialog windows not just one window
+    * [OPENMEETINGS-405] - microphoneRateNormal & microphoneRateBest - not change rate
+    * [OPENMEETINGS-410] - whiteboard first color
+    * [OPENMEETINGS-416] - "Hide actions menu" does not work via SOAP in "restricted" room
+    * [OPENMEETINGS-421] - Reminder to conference issue
+    * [OPENMEETINGS-426] - Html Errors/Problems
+    * [OPENMEETINGS-428] - Refactor User administration to Wicket
+    * [OPENMEETINGS-432] - video only room is coming with white board also
+    * [OPENMEETINGS-435] - Help Help Help openmeetings service is not work at the next day
+    * [OPENMEETINGS-437] - Link "...Edit your profile" form de user home page send the control to a user profile view, not to a edit profile view
+    * [OPENMEETINGS-439] - An LDAP user can't change their own profile picture.
+    * [OPENMEETINGS-444] - Create HTML/Wicket admin backup section
+    * [OPENMEETINGS-445] - Backup Export does not work at all
+    * [OPENMEETINGS-451] - Search in user groups Wicket UI does not work
+    * [OPENMEETINGS-473] - Recorded video Display blank at demo.openmeetings.com
+    * [OPENMEETINGS-481] - When I reserve a room by sending an email, users who connected to this link from an email have the same email address as me
+    * [OPENMEETINGS-486] - Sometimes OM stops responding to clicks
+    * [OPENMEETINGS-494] - Recording gives frame rate of 2 fps
+    * [OPENMEETINGS-503] - Openmeetings does not logout on the Recording panel
+    * [OPENMEETINGS-507] - Error message is shown when user save the Profile settings 
+    * [OPENMEETINGS-513] - Participant of poll can vote more than once in the "My conference room"
+    * [OPENMEETINGS-514] - Some extra links are displayed on the "Choose Usergroup" dialog
+    * [OPENMEETINGS-537] - Pop menu  in conference for files shows "Delete folder"
+    * [OPENMEETINGS-544] - some bug with SIP
+    * [OPENMEETINGS-560] - It’s possible to add several records with the same key value in configuration.
+    * [OPENMEETINGS-564] - Types of rooms are not localized
+    * [OPENMEETINGS-566] - No default timezone selection in registration/sign up when user is in timezone +12
+    * [OPENMEETINGS-572] - Empty fields are replaced with string "null" after export&import
+    * [OPENMEETINGS-575] - Name of the restricted and interview rooms is not displayed when user enter to this room
+    * [OPENMEETINGS-579] - In any room not close the video and audio settings windows. Video is not broadcasting.
+    * [OPENMEETINGS-580] - Smslib 3.5.3 should be used.
+    * [OPENMEETINGS-582] - 2.0 RoomPoll and Configs restore failed
+    * [OPENMEETINGS-584] - Main window is scrolled when select value from dropdown box
+    * [OPENMEETINGS-586] - FileItem owner_id is not replaced with new id while system import
+    * [OPENMEETINGS-587] - Exclusive audio by hotkey is broken
+    * [OPENMEETINGS-590] - Useless "SIP Settings" section in the user screen.
+    * [OPENMEETINGS-591] - Whiteboard presentacion from PPT page controll event randomly broken
+    * [OPENMEETINGS-596] - ffmpeg is not work in current version
+    * [OPENMEETINGS-600] - RSS Feed
+    * [OPENMEETINGS-601] - User Profile picture
+    * [OPENMEETINGS-603] - Conference Room Types List doesn't display textual content - Book Conference Room Option Selected while Sending an Email 
+    * [OPENMEETINGS-609] - The end time shown under the Book Conference Room option in New Message is Incorrect
+    * [OPENMEETINGS-617] - Impossible to refresh video using button "(Re) Start audio/video or change device settings"
+    * [OPENMEETINGS-618] - Incorrect translation
+    * [OPENMEETINGS-619] -  Problems with a microphone 
+    * [OPENMEETINGS-620] - Self-Register, Forgot password and login by LDAP should be implemented
+    * [OPENMEETINGS-625] - Profile Pictures not working on LDAP Accounts
+    * [OPENMEETINGS-627] - Private rooms disappear after use
+    * [OPENMEETINGS-628] - Exception is thrown when search user on the Profile->Search users tab
+    * [OPENMEETINGS-629] - Event is not deleted from Calendar
+    * [OPENMEETINGS-630] - Event is not resized in calendar
+    * [OPENMEETINGS-632] - Some links are mistaked in html version of OM
+    * [OPENMEETINGS-633] - Event is not created if title is empty.
+    * [OPENMEETINGS-634] - No menu accessable after file upload, in a special condition
+    * [OPENMEETINGS-635] - Administration / Configuration : default_lang_id documentation
+    * [OPENMEETINGS-640] - Room is not resized in IE
+    * [OPENMEETINGS-642] - The "Import" and "Export" buttons are missed on the Administrator->Language editor tab
+    * [OPENMEETINGS-643] - User details is not updated in the HTML version
+    * [OPENMEETINGS-645] - Can't create installation wizard
+    * [OPENMEETINGS-647] - Drag&Drop Issue Openmeetings 1.8.8 r4555
+    * [OPENMEETINGS-650] - Can't create conference room
+    * [OPENMEETINGS-651] - User can not login
+    * [OPENMEETINGS-654] - Interview room is broken
+    * [OPENMEETINGS-655] - Calendar is not localized
+    * [OPENMEETINGS-657] - can not convert file
+    * [OPENMEETINGS-658] - Event creates in the Calendar with wrong start and end time
+    * [OPENMEETINGS-660] - Types of reminder are not localized
+    * [OPENMEETINGS-661] - Invitation is not implemented in the HTML Calendar
+    * [OPENMEETINGS-663] - OM Installer is not localized
+    * [OPENMEETINGS-664] - OM is not installed in IE 10 browser.
+    * [OPENMEETINGS-665] - File upload in the room is broken
+    * [OPENMEETINGS-666] - Main menu displays incorrectly in the IE browser.
+    * [OPENMEETINGS-667] - Recordings are not viewable on iPad
+    * [OPENMEETINGS-669] - Recording is broken
+    * [OPENMEETINGS-672] - in recordings page ,people cant logout
+    * [OPENMEETINGS-673] - Rooms form is not shown correctly in the HTML version
+    * [OPENMEETINGS-674] - Image is not uploaded on the "Profile" tab in the HTML version of OM
+    * [OPENMEETINGS-676] - User can not login
+    * [OPENMEETINGS-679] - Share/record screen
+    * [OPENMEETINGS-682] - Admin password length is not checked while installing
+    * [OPENMEETINGS-687] - Microphone is unmuted when user refresh video frame
+    * [OPENMEETINGS-688] - Library versions should be bumped
+    * [OPENMEETINGS-689] - Russian installation encoding is broken in Ubuntu.
+    * [OPENMEETINGS-691] - screen sharing / recording couldn't starting
+    * [OPENMEETINGS-693] - Tomcat 7 patch should be removed from OM build
+    * [OPENMEETINGS-695] - Rooms page is not completly in the HTML version
+    * [OPENMEETINGS-696] - Choose device dialog is not availble in the restricted room
+    * [OPENMEETINGS-702] - when uploading file in a room, after click start upload,  return a window with HTTP-ERROR: 500  
+    * [OPENMEETINGS-703] - Invitation is not implemented to the HTML Calendar
+    * [OPENMEETINGS-704] - Calendar UI - Unify button list (Cancel always on right side)
+    * [OPENMEETINGS-705] - Not possible to enter any conference room
+    * [OPENMEETINGS-707] - Calendar UI Creation Popup - clean up UI elements
+    * [OPENMEETINGS-708] - Calender UI Popup shows empty input values when Calendar UI is loaded second time
+    * [OPENMEETINGS-709] - Calendar UI Popup - no need for delete button if you create a new event
+    * [OPENMEETINGS-711] - Calendar UI add external attendee's
+    * [OPENMEETINGS-714] - Calendar does not send any invitations to the attendees
+    * [OPENMEETINGS-715] - Calendar does not send any update email if you change a calendar event to the attendees
+    * [OPENMEETINGS-716] - Calendar does not send any delete email if you delete a calendar event to the attendees
+    * [OPENMEETINGS-718] - Newly created users are unable to login
+    * [OPENMEETINGS-719] - Calendar UI delete button has no confirmation
+    * [OPENMEETINGS-720] - Calendar throws server error if any calendar event is saved (only tested with new events so far)
+    * [OPENMEETINGS-726] - Internal users do not show calendar events of events that you have been added to
+    * [OPENMEETINGS-729] - Empty / null values in email_username/password throws Exception when processing emails
+    * [OPENMEETINGS-730] - Cannot save empty value for configuration key in HTML5 UI (for instance username / pas for email configuration)
+    * [OPENMEETINGS-736] - Calendar UI - Month view does not resize to browser window by default
+    * [OPENMEETINGS-738] - Wrong successful registration message behavior
+    * [OPENMEETINGS-741] - Failed to change password
+    * [OPENMEETINGS-742] - Calendar UI - week and day view pretty useless when you can't select any day
+    * [OPENMEETINGS-743] - HTML Version Forgotten  your password email link does not work 
+    * [OPENMEETINGS-744] - Private message does not send in the HTML version
+    * [OPENMEETINGS-756] - Remove OpenLaszlo/Flash Calendar UI and Server side components API Calls/DTOs
+    * [OPENMEETINGS-757] - Several issues with external and internal meeting members
+    * [OPENMEETINGS-763] - Command line admin: --drop option is broken
+    * [OPENMEETINGS-764] - Plugins should work with OM 3.0.0
+    * [OPENMEETINGS-765] - Wicket should be used for email generation
+    * [OPENMEETINGS-768] - User is not enter to the room when rtmp port is not set correctly
+    * [OPENMEETINGS-769] - Calendar UI - Event details with link to room
+    * [OPENMEETINGS-770] - when i click button  share/recording screen , i get do download [ public 7.jnlp], not working properly
+    * [OPENMEETINGS-771] - Dashboard is not shown correctly when user exit from the room.
+    * [OPENMEETINGS-773] - Deleted users are shown in the Usergroups
+    * [OPENMEETINGS-776] - Contacts should be visible for owner and admin only
+    * [OPENMEETINGS-777] - SOAP/REST API should be fixed to create appointments as HTML5 web client
+    * [OPENMEETINGS-780] - Upload pictures and other documents on the white board, has been in the transition state.
+    * [OPENMEETINGS-784] - SOAP API service "modifyRoomParameter" converts "paramValue" into String
+    * [OPENMEETINGS-785] - Messsage " You have successfully signed up. An email with a verification code will be sent to your mailbox." comes up even if it is not supposed to
+    * [OPENMEETINGS-786] - Loading symbol in Wicket and Flash should look the same
+    * [OPENMEETINGS-787] - top navigation gone
+    * [OPENMEETINGS-788] - As soon as you hit the "start conference" button the video freezes and just nothing happens
+    * [OPENMEETINGS-789] - Interview room recording in 2.1.1
+    * [OPENMEETINGS-796] - Install Wizard displays wrong value for red5SipEnable
+    * [OPENMEETINGS-799] - SOAP methods RoomService.{getRooms,getRoomsWithCurrentUsers} and UserService.getUsersByOrganisation are broken
+    * [OPENMEETINGS-803] - Image files are not visible for attendees on whiteboard
+    * [OPENMEETINGS-804] - updateRoomWithModerationQuestionsAudioTypeAndHideOptions sets isAudioOnly always to true
+    * [OPENMEETINGS-806] - addNewUser SOAP method doe not return valid error code
+    * [OPENMEETINGS-808] - Installation using Derby default database configuration seems to have performance issues
+    * [OPENMEETINGS-810] - Entering interview room doesnt have option to select camera size - it inhetits the last used size
+    * [OPENMEETINGS-815] - Exception in sign up
+    * [OPENMEETINGS-818] - Room login via secureHash is broken
+    * [OPENMEETINGS-819] - Zoom is not synchronyzed on whiteboard
+    * [OPENMEETINGS-821] - Can't upload file
+    * [OPENMEETINGS-822] - Closed room was created by addRoom and addRoomWithModeration REST/SOAP methods
+    * [OPENMEETINGS-830] - Recording is broken without screen sharing
+    * [OPENMEETINGS-832] - SOAP doesn't work
+    * [OPENMEETINGS-835] - no proper db-type option for postgresql db (Command Line Admin)
+    * [OPENMEETINGS-836] - OM layout error  - item from vicket is hide the room chat elements
+    * [OPENMEETINGS-841] - Only the first user in a room is displayed and can be heard by others
+    * [OPENMEETINGS-842] - External users should not be redirected to dashboard
+    * [OPENMEETINGS-844] - Invitations are broken after last refactoring
+    * [OPENMEETINGS-848] - RoomService.getRoomCounters REST/SOAP method is not working
+    * [OPENMEETINGS-849] - some remains after the purge of deleted recordings and a system cleanup via admin.sh
+    * [OPENMEETINGS-851] - There is no way to use uploaded files in an interview room
+    * [OPENMEETINGS-852] - Whiteboard Objects not clickable
+    * [OPENMEETINGS-855] - NPE using ./admin.sh -v -f --cleanup
+    * [OPENMEETINGS-856] - Invitation link is broken
+    * [OPENMEETINGS-859] - Audio and Video in recordings is no more in sync
+    * [OPENMEETINGS-860] - Invite window is opened with long delay
+    * [OPENMEETINGS-864] - Exception is thrown when update event in the calendar
+    * [OPENMEETINGS-865] - Upload buttons has artifacts
+    * [OPENMEETINGS-866] - NPE if frontend register is not allowed
+    * [OPENMEETINGS-868] - User creation via SOAP availability should be controlled by separate option
+    * [OPENMEETINGS-869] - Email subject is not displayed correctly for UTF-8 charset
+    * [OPENMEETINGS-870] - Plugins should work in version 3.0
+    * [OPENMEETINGS-871] - Internal error is thrown when search user on the Search users tab
+    * [OPENMEETINGS-872] - The "to" field is not filed in the "Write new message dialog"
+    * [OPENMEETINGS-873] - Ajax error is thrown when click on the "Show user profile" icon
+    * [OPENMEETINGS-875] - Widgets title are not translated when user change language
+    * [OPENMEETINGS-876] - The "Click here to enter room" link is attached to cancel email notification.
+    * [OPENMEETINGS-877] - New line "<br/>" tag does not applied for invitation message
+    * [OPENMEETINGS-880] - 3.0 regression: "Forgotten your password?" does not work on the login screen.
+    * [OPENMEETINGS-882] - OpenMeetings calendar allows create events with the end date/time earlier than the start date/time
+    * [OPENMEETINGS-883] - Strange behaviour during the external guest entering
+    * [OPENMEETINGS-884] - Regression in 3.0: Drop-down lists in the user registration screen work incorrectly in Google Chrome
+    * [OPENMEETINGS-885] - Record is not played under Chrome browser
+    * [OPENMEETINGS-886] - Impossible to save editable fields in My Profile.
+    * [OPENMEETINGS-890] - The "Login" field is not displayed on the connection panel.
+    * [OPENMEETINGS-891] - Wrong birthday date is displayed on the profile->edit settings panel
+    * [OPENMEETINGS-892] - "Add user" button is disabled when add new group
+    * [OPENMEETINGS-893] - Removed user is not added to usergroup again
+    * [OPENMEETINGS-898] - Time zone is not defined correctly on sign in page
+    * [OPENMEETINGS-899] - Calendar event start and end time are not displayed correctly
+    * [OPENMEETINGS-900] - Deleted contact is selected when user invite external guest to calendar invitation
+    * [OPENMEETINGS-901] - Password is not requested when password protected invitation send to external guest.
+    * [OPENMEETINGS-902] - Records are not created correctly
+    * [OPENMEETINGS-904] - Default landing zone
+    * [OPENMEETINGS-906] - Cannot create new group with users
+    * [OPENMEETINGS-907] - "password is required" message is displayed when "Password protected" checkbox is not  checked
+    * [OPENMEETINGS-908] - Calendar event start and end date are not displayed correctly in the month vew
+    * [OPENMEETINGS-909] - Event owners is not receive email notification
+    * [OPENMEETINGS-910] - Contacts are availble to search on the Search user page
+    * [OPENMEETINGS-912] - Email disappears when move emial to the new folder
+    * [OPENMEETINGS-914] - "Mark unread" action does not work on Contacts and message page
+    * [OPENMEETINGS-919] - Access logs will not be generated
+    * [OPENMEETINGS-922] - Add folder button does not add a folder.
+    * [OPENMEETINGS-923] - Drag and drop of files in the recordings section does not work
+    * [OPENMEETINGS-924] - deleting recordings?
+    * [OPENMEETINGS-925] - Recording details previously showed the room name not the id
+    * [OPENMEETINGS-927] - Memory leak in OM wicket application
+    * [OPENMEETINGS-930] - getInvitationHash method allow creation of invalid users (login too small)
+    * [OPENMEETINGS-932] - SIP dialer menu item is not availble in the OM 3.x
+
+** Improvement
+    * [OPENMEETINGS-167] - Main menu of OM
+    * [OPENMEETINGS-168] - Adding system date on dashboard
+    * [OPENMEETINGS-183] - Replacing "Timezone" column in "Users search" interface with a most important information = "statue" (connected /  absent).
+    * [OPENMEETINGS-273] - calendar time is not updating dynamically
+    * [OPENMEETINGS-280] - Update ATutor Module for OM
+    * [OPENMEETINGS-358] - Remove or hide the "Domian" selection from the "Login" dialog when there is only one "Domain"
+    * [OPENMEETINGS-368] - Allow users to zoom their view of the Whiteboard by default and not being controlled by "Draw on the Whiteboard" permissions
+    * [OPENMEETINGS-375] - Allow an administrative option to control whether to display the "Mute microphone globally" dialog box or not
+    * [OPENMEETINGS-429] - [Wicket] Language admin should be implemented
+    * [OPENMEETINGS-484] - Poor quality of bitmapped pictures in pdf files on the whiteboard.
+    * [OPENMEETINGS-548] - Open meetings in a new window or tab
+    * [OPENMEETINGS-556] - GSOC: Faster screen sharing
+    * [OPENMEETINGS-558] - GSOC: Need wysiwyg editor Wicket component
+    * [OPENMEETINGS-574] - wicket-jquery-ui should be used instead of adding jquery-ui manually to every page
+    * [OPENMEETINGS-578] - Latest Red5 server should be used in OM
+    * [OPENMEETINGS-583] - Ability to disable enhanced microphone should be added
+    * [OPENMEETINGS-589] - Configurable hot key for Mute/Unmute should be added
+    * [OPENMEETINGS-594] - Add translated word in thai language
+    * [OPENMEETINGS-610] - push2talk button
+    * [OPENMEETINGS-612] - Dashboard need to be implemented
+    * [OPENMEETINGS-615] - User Profile panel need to be implemented
+    * [OPENMEETINGS-626] - Recordings panel need to be added
+    * [OPENMEETINGS-631] - Updated French translation
+    * [OPENMEETINGS-637] - Admin: Connections panel need to be implemented
+    * [OPENMEETINGS-638] - Room enter/exit should be implemented
+    * [OPENMEETINGS-639] - Installer should be implemented on Wicket
+    * [OPENMEETINGS-646] - Emotions should be added to the chat
+    * [OPENMEETINGS-685] - Japanese translation update for v2.1.1 / v3.1
+    * [OPENMEETINGS-692] - HTML admin should be improved to highlight record which changes 
+    * [OPENMEETINGS-701] - Wicket HTML templates should be stored unarchived
+    * [OPENMEETINGS-727] - no warning for too short login names
+    * [OPENMEETINGS-772] - Project tree structure should be updated
+    * [OPENMEETINGS-778] - Cannot install simplified Chinese
+    * [OPENMEETINGS-798] - MSSQL support should be added to OM
+    * [OPENMEETINGS-820] - No function to match user groups with rooms via SOAP
+    * [OPENMEETINGS-854] - SOAP/REST call getFlvRecordingByExternalUserId should take into account both external id and type
+
+** New Feature
+    * [OPENMEETINGS-152] - Background image
+    * [OPENMEETINGS-491] - LDAP authentication filter
+    * [OPENMEETINGS-576] - Suggestion about the tunnelling implementation.
+    * [OPENMEETINGS-656] - Callback URL when client drop/log out from room
+    * [OPENMEETINGS-802] - Integration with Chamilo LMS
+    * [OPENMEETINGS-857] - sound/voice warning when disconnected
+
+** Task
+    * [OPENMEETINGS-81] - Unify Upload Components
+    * [OPENMEETINGS-721] - is it possible to add new user from soap method?
+    * [OPENMEETINGS-740] - Login via OAuth2
+    * [OPENMEETINGS-760] - Removing all OpenLaszlo /Flash UI that is no more maintained all all connected server side API calls.
+    * [OPENMEETINGS-767] - Redundant fields should be removed from MeetingMember object
+
+** Wish
+    * [OPENMEETINGS-38] - Default language
+    * [OPENMEETINGS-534] - How to set When the user is registered, need administrator audit to register?
+    * [OPENMEETINGS-607] - Refine the UI
+    * [OPENMEETINGS-622] - Removing the menu items and customizing dashboard
+
+
+Release Notes - Openmeetings - Version 2.2.0 Apache Release
+================================================================================================================
+
+** Bug
+    * [OPENMEETINGS-671] - Calendar is shown incompletely when book conference room
+    * [OPENMEETINGS-763] - Command line admin: --drop option is broken
+    * [OPENMEETINGS-789] - Interview room recording in 2.1.1
+    * [OPENMEETINGS-791] - Backup import is broken
+    * [OPENMEETINGS-799] - SOAP methods RoomService.{getRooms,getRoomsWithCurrentUsers} and UserService.getUsersByOrganisation are broken
+    * [OPENMEETINGS-803] - Image files are not visible for attendees on whiteboard
+    * [OPENMEETINGS-804] - updateRoomWithModerationQuestionsAudioTypeAndHideOptions sets isAudioOnly always to true
+    * [OPENMEETINGS-806] - addNewUser SOAP method doe not return valid error code
+    * [OPENMEETINGS-810] - Entering interview room doesnt have option to select camera size - it inhetits the last used size
+    * [OPENMEETINGS-811] - Recordings does not downloaded via Google Chrome browser
+    * [OPENMEETINGS-819] - Zoom is not synchronyzed on whiteboard
+    * [OPENMEETINGS-832] - SOAP doesn't work
+    * [OPENMEETINGS-835] - no proper db-type option for postgresql db (Command Line Admin)
+    * [OPENMEETINGS-837] - "Choose Device" Dialog stops working after a few Changes
+    * [OPENMEETINGS-842] - External users should not be redirected to dashboard
+    * [OPENMEETINGS-848] - RoomService.getRoomCounters REST/SOAP method is not working
+
+** Improvement
+    * [OPENMEETINGS-368] - Allow users to zoom their view of the Whiteboard by default and not being controlled by "Draw on the Whiteboard" permissions
+    * [OPENMEETINGS-556] - GSOC: Faster screen sharing
+    * [OPENMEETINGS-798] - MSSQL support should be added to OM
+    * [OPENMEETINGS-820] - No function to match user groups with rooms via SOAP
+
+** New Feature
+    * [OPENMEETINGS-491] - LDAP authentication filter
+
+** Task
+    * [OPENMEETINGS-790] - Red5 version in 2.x branch should be bumped
+
+
+Release Notes - Openmeetings - Version 2.1.1 Apache Release
+================================================================================================================
+
+** Bug
+    * [OPENMEETINGS-432] - video only room is coming with white board also
+    * [OPENMEETINGS-439] - An LDAP user can't change their own profile picture.
+    * [OPENMEETINGS-481] - When I reserve a room by sending an email, users who connected to this link from an email have the same email address as me
+    * [OPENMEETINGS-503] - Openmeetings does not logout on the Recording panel
+    * [OPENMEETINGS-507] - Error message is shown when user save the Profile settings 
+    * [OPENMEETINGS-537] - Pop menu  in conference for files shows "Delete folder"
+    * [OPENMEETINGS-586] - FileItem owner_id is not replaced with new id while system import
+    * [OPENMEETINGS-587] - Exclusive audio by hotkey is broken
+    * [OPENMEETINGS-598] - dont build trunk on JDK 1.7 x64
+    * [OPENMEETINGS-608] - Office file are uploaded but not displayed
+    * [OPENMEETINGS-609] - The end time shown under the Book Conference Room option in New Message is Incorrect
+    * [OPENMEETINGS-618] - Incorrect translation
+    * [OPENMEETINGS-625] - Profile Pictures not working on LDAP Accounts
+    * [OPENMEETINGS-634] - No menu accessable after file upload, in a special condition
+    * [OPENMEETINGS-635] - Administration / Configuration : default_lang_id documentation
+    * [OPENMEETINGS-654] - Interview room is broken
+    * [OPENMEETINGS-670] - The webinar is already closed, you wil be rediredcted to some interesting offerings in X sek
+    * [OPENMEETINGS-687] - Microphone is unmuted when user refresh video frame
+
+** Improvement
+    * [OPENMEETINGS-589] - Configurable hot key for Mute/Unmute should be added
+
+----------------------------------------------------------------------------------------------------------------
+----------------------------------------------------------------------------------------------------------------
+----------------------------------------------------------------------------------------------------------------
+
+
+
+Release Notes - Openmeetings - Version 2.1 Apache Release
+================================================================================================================
+
+** Sub-task
+    * [OPENMEETINGS-448] - Test and fix latest trunk to be able to import all old download zip's
+
+
+
+** Bug
+    * [OPENMEETINGS-34] - missing entries in XML language files
+    * [OPENMEETINGS-49] - Synchronisation between Calendar and Dashboard
+    * [OPENMEETINGS-92] - The documents are not deleted from the server after removing them from the system
+    * [OPENMEETINGS-94] - References to the code.google.com need to be updated
+    * [OPENMEETINGS-157] - Registration bug
+    * [OPENMEETINGS-166] - Meeting is created with incorrect start time in the calendar.
+    * [OPENMEETINGS-180] - bug sending invitation
+    * [OPENMEETINGS-196] - Calendar Ical / Simple Mail - double invitation mail
+    * [OPENMEETINGS-212] - Activities and actions: "Deny and remove message " button is not worked
+    * [OPENMEETINGS-243] - "Updated" field in Administration -> LDAP panel contains "null" for string for empty value.
+    * [OPENMEETINGS-251] - Minors layout problems when translating
+    * [OPENMEETINGS-267] - missing translation
+    * [OPENMEETINGS-291] - light does not indicate when the user is speaking
+    * [OPENMEETINGS-310] - Moodle plugin version
+    * [OPENMEETINGS-311] - Language problem after Openmeetings update (accessing from Moodle only)
+    * [OPENMEETINGS-312] - File was null or did not exist: TEST_SETUP_1338945244240.flv
+    * [OPENMEETINGS-314] - Webcam Title of user is username of default OM user
+    * [OPENMEETINGS-316] - ICS attachments for emails not working with Exchange 2003/2007 and Outlook 2003/2007
+    * [OPENMEETINGS-320] - Exception and layout for screensharing/recording client
+    * [OPENMEETINGS-322] - Several Exception in Log
+    * [OPENMEETINGS-327] - Add Restart Save Mail-Queue
+    * [OPENMEETINGS-328] - screen sharing is not closing automatically
+    * [OPENMEETINGS-331] - tooltip for cmd_applyforWhiteBoard room action is not set
+    * [OPENMEETINGS-343] - OM crashes if Inviteв guest with screen sharing rights tries to start screen sharing
+    * [OPENMEETINGS-346] - Screen Sharing does not end with end of meeting
+    * [OPENMEETINGS-362] - Download of profile images broken
+    * [OPENMEETINGS-363] - Some minor bugs in private chat
+    * [OPENMEETINGS-364] - User is not removed from user list when he leaves the room
+    * [OPENMEETINGS-366] - File upload does not show images as options when doing file upload
+    * [OPENMEETINGS-376] - “Notification type” text overflows the drop down data selection area and is partly covered
+    * [OPENMEETINGS-378] - Update Calendar email notification rules to send notification only when data relevant to the users has been changed
+    * [OPENMEETINGS-379] - The Calendar ics format email notification is incorrectly formed
+    * [OPENMEETINGS-380] - Calendar "Add attendee" option has a second option of itself to "Add external" but adding an external attendee does not close this dialog
+    * [OPENMEETINGS-381] - ivy jar in our repository
+    * [OPENMEETINGS-382] - LICENSE file mentions both CDDL and GPL
+    * [OPENMEETINGS-385] - contextmenu  contextmenuitem
+    * [OPENMEETINGS-389] - Create Drupal plugin for OpenMeetings
+    * [OPENMEETINGS-391] - Private and public folder does not appear
+    * [OPENMEETINGS-392] - privateChatTabBottom
+    * [OPENMEETINGS-393] - NumberFormatException while creating user or room
+    * [OPENMEETINGS-394] - save and load whiteboard does not work
+    * [OPENMEETINGS-396] - ICS attachments not recognised in Outlook 2003
+    * [OPENMEETINGS-402] - I cannot open Interview recorded
+    * [OPENMEETINGS-403] - Missing rooms
+    * [OPENMEETINGS-408] - Interview Room (1)
+    * [OPENMEETINGS-415] - NetStream NetStatus event does not work when attached to client object
+    * [OPENMEETINGS-418] - ScreenShare russian charset
+    * [OPENMEETINGS-420] - small problems in the current version
+    * [OPENMEETINGS-422] - Java error: TEST_SETUP_xxx.flv does not exist; javax error : ClientBroadCast Stream; published name=null
+    * [OPENMEETINGS-423] - Installation OM2.0
+    * [OPENMEETINGS-424] - Adjust Stream Volume
+    * [OPENMEETINGS-428] - Refactor User administration to Wicket
+    * [OPENMEETINGS-431] - OpenMeetings behind a proxy doesn't work for screen sharing
+    * [OPENMEETINGS-433] - Add Wicket enabled room administration
+    * [OPENMEETINGS-434] - Create admin area for groups, configurations, ldaps, servers
+    * [OPENMEETINGS-438] - Some bugs
+    * [OPENMEETINGS-440] - Problem in installation process
+    * [OPENMEETINGS-441] - Can't backup
+    * [OPENMEETINGS-445] - Backup Export does not work at all
+    * [OPENMEETINGS-449] - Cannot import backup file
+    * [OPENMEETINGS-450] - Wicket UI locked after accepting download of backup
+    * [OPENMEETINGS-451] - Search in user groups Wicket UI does not work
+    * [OPENMEETINGS-453] - Recordings associated with wrong user after import if already a user was in the database
+    * [OPENMEETINGS-454] - Scrennsharing initiated by invited user ends up in exception report
+    * [OPENMEETINGS-455] - Create RTMPClient to do a load test
+    * [OPENMEETINGS-458] - Missing language string "pluginname"
+    * [OPENMEETINGS-459] - Remove RoomClient from database
+    * [OPENMEETINGS-466] - Screen Sharing window, Chinese Simplified (lang_id=11) text display "?????"
+    * [OPENMEETINGS-467] - No internal user can be selected when planning a meeting
+    * [OPENMEETINGS-469] - Deleted meeting data remains in SIP db tables
+    * [OPENMEETINGS-472] - red5sip rev68 will not run
+    * [OPENMEETINGS-474] - Links to rooms sent via email do not work
+    * [OPENMEETINGS-482] - Network check script hangs after the second "Port" button click 
+    * [OPENMEETINGS-489] - Start recording test hangs if no webcamera connected
+    * [OPENMEETINGS-490] - Wrong directory for test file in "Choose device" window
+    * [OPENMEETINGS-492] - Restoration of backup failed
+    * [OPENMEETINGS-493] - Uploading Libreoffice-format files only results in "Deleted"
+    * [OPENMEETINGS-496] - It's unable to send localized SMS message.
+    * [OPENMEETINGS-498] - Backup fails with Exception
+    * [OPENMEETINGS-502] - Some labels are hardcoded on the System backup tab 
+    * [OPENMEETINGS-504] - Some labels are not translated to russian language
+    * [OPENMEETINGS-505] - Values of the "Unerole User" and "Server Address" fields are mixed on the Administrator -> Connections tab.
+    * [OPENMEETINGS-506] - Localized (russian) file name is not uploaded on the Profile tab
+    * [OPENMEETINGS-509] - Comment is shown incorrectly in the Choose device dialog
+    * [OPENMEETINGS-512] - Files are not uploaded in the rooms
+    * [OPENMEETINGS-515] - Video recording artifacts at the begin of the file
+    * [OPENMEETINGS-516] - After graduation tasks
+    * [OPENMEETINGS-517] - sensSMS flag is not imported/exported by admin.
+    * [OPENMEETINGS-519] - Need to update Configuration page on Openmeetings site.
+    * [OPENMEETINGS-520] - Missing areas on the recorded video
+    * [OPENMEETINGS-521] - The "Show/Copy chat log" and "Delete server chat log" buttons are not available for the Ptivate Chat
+    * [OPENMEETINGS-523] - download manual ghostcript download link is dead
+    * [OPENMEETINGS-524] - Unenroled user is not thrown from the conference room 
+    * [OPENMEETINGS-525] - Font styles icon is enabled for Ptivate Chat if the "Allow font styles" is not enabled for conference room
+    * [OPENMEETINGS-526] - Not enough checking in the screensharing/recording
+    * [OPENMEETINGS-530] - Network testing tool on login page does not work when having OM configured for HTTPS and RTMPS
+    * [OPENMEETINGS-531] - Error Missing[XXXX]
+    * [OPENMEETINGS-536] - In upload dialog "Select file" does not work
+    * [OPENMEETINGS-540] - Uploading of .odt files
+    * [OPENMEETINGS-552] - Release blocking UI issues
+    * [OPENMEETINGS-561] - Video is not removed on Whiteboard closing
+    * [OPENMEETINGS-563] - "Black box" is displayed on test audio/video setup dialog
+    * [OPENMEETINGS-565] - Stackoverflow Exception when you goto your user profile and try to save it.
+    * [OPENMEETINGS-566] - No default timezone selection in registration/sign up when user is in timezone +12
+    * [OPENMEETINGS-567] - If you hit the "start upload" button twice, while the conversion is running, Openmeetings will run into an error
+    * [OPENMEETINGS-568] - OpenMeetings requests access to Cam even if there is none
+    * [OPENMEETINGS-569] - Faulty highperf settings in bat script
+    * [OPENMEETINGS-572] - Empty fields are replaced with string "null" after export&import
+    * [OPENMEETINGS-580] - Smslib 3.5.3 should be used.
+    * [OPENMEETINGS-582] - 2.0 RoomPoll and Configs restore failed
+
+
+
+
+** Improvement
+    * [OPENMEETINGS-93] - Create Openmeetings plug-in
+    * [OPENMEETINGS-119] - New users french manual
+    * [OPENMEETINGS-299] - Language import should be improved to take less time
+    * [OPENMEETINGS-339] - File location detection should be centralized
+    * [OPENMEETINGS-349] - OM should be scalable 
+    * [OPENMEETINGS-356] - Modify Rooms menu to have three options for each of the room types
+    * [OPENMEETINGS-357] - Users should first log into "Private rooms", have as a Admin selectable option for where users first log into
+    * [OPENMEETINGS-361] - It should be available to set logo in OM
+    * [OPENMEETINGS-384] - Mention that the file parameter is optional for the admin setup script
+    * [OPENMEETINGS-386] - Import/Export should be automatic based on Annotations
+    * [OPENMEETINGS-387] - It should be possible to create Appointment and use existent room
+    * [OPENMEETINGS-390] - Openmeetings Plugin for Bitrix need to be implemented
+    * [OPENMEETINGS-395] - Ability to add multiple external attendees should be added to the calendar
+    * [OPENMEETINGS-397] - Private chat with chat disabled
+    * [OPENMEETINGS-398] - Updated french translation for OM 2.1
+    * [OPENMEETINGS-399] - jitsi openmeetings plugin
+    * [OPENMEETINGS-400] - Improve volume slider
+    * [OPENMEETINGS-436] - Ability to moderate room chat should be added
+    * [OPENMEETINGS-470] - SIP meeting extensions
+    * [OPENMEETINGS-477] - Possibility to copy invitation link to the clipboard should be added
+    * [OPENMEETINGS-478] - It should be possible to enable auto videopod selection
+    * [OPENMEETINGS-480] - It would be better to remove confirmation dialog when user turns micro on/off.
+    * [OPENMEETINGS-497] - Confirmation diolog for the turning micro on/off is inconvenient.
+    * [OPENMEETINGS-501] - fresh build fails with class org/jdom/JDOMException not found in anakia build section
+    * [OPENMEETINGS-518] - Sms text sent as a meeting reminder is too long sometime.
+    * [OPENMEETINGS-527] - Confirm an exclusive audio
+    * [OPENMEETINGS-529] - AEC should be utilized in OM
+    * [OPENMEETINGS-535] - an update of the german language file
+    * [OPENMEETINGS-541] - Updated version of French language file
+    * [OPENMEETINGS-562] - To import ppt presentation delete page
+    * [OPENMEETINGS-583] - Ability to disable enhanced microphone should be added
+
+** New Feature
+    * [OPENMEETINGS-111] - Command line admin need to be created
+    * [OPENMEETINGS-342] - Private Chat should be available in the room
+    * [OPENMEETINGS-350] - Hot key should be added to be able to "rearrange" video windows in the room
+    * [OPENMEETINGS-351] - Add a possibility to send sms as an appointment reminder
+    * [OPENMEETINGS-354] - Volume slider
+    * [OPENMEETINGS-383] - Plugin for Joomla should be added to Openmeetings
+
+
+
+
+
+
+** Task
+    * [OPENMEETINGS-41] - OM without private storage area
+    * [OPENMEETINGS-107] - Unify database schema
+    * [OPENMEETINGS-248] - Remove LGPL Icons from Symbol/Cliparts and Emoticons
+    * [OPENMEETINGS-306] - Initial network quality test
+    * [OPENMEETINGS-341] - Update to portugues brasil Language
+    * [OPENMEETINGS-414] - Delete SIP Applet from stack
+    * [OPENMEETINGS-417] - How to add/register SIP extension in OpenMeeting ?
+    * [OPENMEETINGS-446] - Create a Master backup File for last versions (including all generated data)
+    * [OPENMEETINGS-522] - add Redmine Plugin Link to HomePage
+    * [OPENMEETINGS-585] - Clustering documentation
+
+
+
+** Test
+    * [OPENMEETINGS-50] - content of whiteboards
+
+
+----------------------------------------------------------------------------------------------------------------
+----------------------------------------------------------------------------------------------------------------
+----------------------------------------------------------------------------------------------------------------
+
+
+Release Notes - OpenMeetings - Version 2.0-INCUBATING
+================================================================================================================
+Sub-task
+
+    [OPENMEETINGS-8] - Generate CalendarAPI for SOAP/REST WebServices
+    [OPENMEETINGS-9] - Design MockUp for new Calendar UI
+    [OPENMEETINGS-40] - Merge Audio/Video components to trunk
+    [OPENMEETINGS-44] - remove all old audio/video components
+    [OPENMEETINGS-47] - fix ScopeApplicationAdapter / sync and message broadcasting mechanism to not send messages to SWF10 client
+    [OPENMEETINGS-51] - fix url params (invitationHash / secureHash / language_id / roomScopeId / et cetera ) to be forwarded to inner SWF components
+    [OPENMEETINGS-52] - fix icon status in new video components
+    [OPENMEETINGS-53] - Add security mechanism to LocalConnection subscribers
+    [OPENMEETINGS-54] - fix recorder to use new audio/video components and fix recording itself to reference correct streams
+    [OPENMEETINGS-55] - fix testing application (5 second video recording on room enter) to use new a/v components
+    [OPENMEETINGS-61] - fix screensharing player to use the new audio/video components
+    [OPENMEETINGS-62] - Clean up 5-second recordings using a scheduler
+    [OPENMEETINGS-65] - fix whiteboard video player to use the new audio/video components
+    [OPENMEETINGS-71] - fix interview room type to use new audio/video components
+    [OPENMEETINGS-73] - fix mute functionality in new video components
+    [OPENMEETINGS-77] - changeDevice.lzx must be transformed to SWF10
+    [OPENMEETINGS-79] - SharedObject in SWF10 does not store settings
+    [OPENMEETINGS-80] - Some notification windows need to be moved to SWF10
+    [OPENMEETINGS-89] - Fix new option "hideWhiteboard" with layout of video pods
+    [OPENMEETINGS-97] - RTPMSClient for ScreenSharing should be created/tested
+    [OPENMEETINGS-98] - "Borrowed" code should be removed from ScreenSharing client
+    [OPENMEETINGS-105] - Add the license header to all SWF10 files
+    [OPENMEETINGS-170] - When you republish your stream while recording or suddenly leave the meeting, the recording has no audio
+
+Bug
+
+    [OPENMEETINGS-5] - Invitation default language
+    [OPENMEETINGS-15] - Usability problem with login at http://demo.openmeetings.de/openmeetings/
+    [OPENMEETINGS-18] - File upload no work
+    [OPENMEETINGS-26] - Whiteboard error "arrow tool" dragging from right to left in any angle.
+    [OPENMEETINGS-28] - LDAP wrong default mapping for firstname
+    [OPENMEETINGS-31] - Upload files will not convert to SWF.
+    [OPENMEETINGS-48] - Log are either not written or in the wrong logfile
+    [OPENMEETINGS-56] - LDAP authentication is not correct
+    [OPENMEETINGS-64] - whiteboard id
+    [OPENMEETINGS-87] - All DB related JUnit tests are failed
+    [OPENMEETINGS-91] - Fix field type's of comment/description fields to use datatype Text (instead of VARCHAR(255))
+    [OPENMEETINGS-114] - With trunk svn 1307221: LDAP authentication fails because user can't be imported into local DB
+    [OPENMEETINGS-116] - Menu bar shortcuts do not work
+    [OPENMEETINGS-118] - Activity UI: Fix duplicated calls, removal of items does not work
+    [OPENMEETINGS-122] - Fix JUnit tests
+    [OPENMEETINGS-123] - Wildcard on creating WebService docs doesn't work
+    [OPENMEETINGS-127] - Backup\Import Asterisk related tables
+    [OPENMEETINGS-133] - Sources produced by nightly build should be buildable with ant
+    [OPENMEETINGS-135] - Video window can't be maximized
+    [OPENMEETINGS-137] - Loading of stored whiteboards doesn't work (error in loading path)
+    [OPENMEETINGS-138] - Errors and quality of Recording with screensharing application
+    [OPENMEETINGS-139] - Unable to Add User into Usergroups
+    [OPENMEETINGS-140] - Login options/features been reduced in current update
+    [OPENMEETINGS-141] - onMetaData Event not thrown in AS3 Non-Debug version
+    [OPENMEETINGS-142] - 1-2-3-4 buttons on dashboard don't do anything
+    [OPENMEETINGS-144] - When using openLDAP authentication, the source code uses the hardcoded 'uid' attribute to map logins and user DNs instead of the field_user_principal parameter
+    [OPENMEETINGS-145] - Unmuting/exclusive audio doesn't work and icons show wrong status in video pod after entering a room
+    [OPENMEETINGS-149] - Error while installing on MySQL DB openmeetings-2.0.0.r1311115-08-04-2012_2307
+    [OPENMEETINGS-150] - Error restoring password
+    [OPENMEETINGS-156] - UI BUGS?
+    [OPENMEETINGS-158] - Degradation of the sound quality in recordings in the recent release
+    [OPENMEETINGS-161] - UI Bugs in private messages
+    [OPENMEETINGS-162] - Exception in Screensharing
+    [OPENMEETINGS-163] - Recording does no more work if you start to share audio/video AFTER starting the recording
+    [OPENMEETINGS-164] - java.lang.ArrayIndexOutOfBoundsException: 5 in Recording Conversion
+    [OPENMEETINGS-165] - Video freezes as soon as two people have audio/video turned on and you start to record the meeting => Convert FLV writers to act async
+    [OPENMEETINGS-171] - Screensharing notification not showing when already running
+    [OPENMEETINGS-172] - Home drive in recorder UI, minimize the home drive makes the list of files empty, drag and rop file from home drive to public drive
+    [OPENMEETINGS-174] - CLI import of backup does not work
+    [OPENMEETINGS-175] - CLI installer does not create install.xml
+    [OPENMEETINGS-176] - Import of Backup from version 1.9.x fails to import conference rooms
+    [OPENMEETINGS-177] - Meeting Room Invitation Link Not working
+    [OPENMEETINGS-178] - Invited user has access to adminstration panel
+    [OPENMEETINGS-179] - User Not Removed from chat participants window after logout..
+    [OPENMEETINGS-181] - Video Window, Conference room
+    [OPENMEETINGS-182] - OM need to be restarted after fresh installation to get menu list
+    [OPENMEETINGS-187] - Moderator and his room
+    [OPENMEETINGS-188] - Inserting room, horizontal bar does not appear
+    [OPENMEETINGS-190] - Problem with language when invoking OM from Moodle module
+    [OPENMEETINGS-191] - When I enable HTTPS and RTMPS the screen sharing resultant JNLP file has the wrong address = http://servername:443/.... instead of https://servername/..... if I edit the JNLP file by hand on the client level and change the address it works
+    [OPENMEETINGS-193] - Fix timezones that are missing
+    [OPENMEETINGS-195] - Send private message / Show user profile buttons
+    [OPENMEETINGS-196] - Calendar Ical / Simple Mail - double invitation mail
+    [OPENMEETINGS-197] - Calendar Ical / Simple Mail - room language
+    [OPENMEETINGS-198] - Password and dashboard calendar event list
+    [OPENMEETINGS-199] - Screensharing and recording does not work under OSX with Java 64Bit
+    [OPENMEETINGS-200] - Invitation link does not arrive
+    [OPENMEETINGS-203] - two languages are shown
+    [OPENMEETINGS-205] - ReplyTo Field leads to exception when sending emails to external users
+    [OPENMEETINGS-206] - wrong meeting times
+    [OPENMEETINGS-208] - Incorrectly filled "Last name" field on the User details form when created user with "Sign in" form
+    [OPENMEETINGS-209] - Encoding at install OpenMeetings
+    [OPENMEETINGS-210] - Calendar event
+    [OPENMEETINGS-211] - NullPointerException in FLVRecorderService.stopRecordingShow
+    [OPENMEETINGS-214] - When calendar event invitation is sent, invitation_text_from value displays with the name of the person for whom the invitation is being sent to but should be showing the sender's name
+    [OPENMEETINGS-215] - Created date is duplicated where restoring base from backup
+    [OPENMEETINGS-216] - UI problem
+    [OPENMEETINGS-219] - �Delete� button is not visible
+    [OPENMEETINGS-225] - If object on whiteboard of type "freedraw" ("paint") is dragged/moved, the object is gone when you re-enter the room
+    [OPENMEETINGS-229] - "Exit"button is not shown for inviting users from room
+    [OPENMEETINGS-230] - Error in the field name on the form "Add external"
+    [OPENMEETINGS-232] - Rooms are imported with invalid room types
+    [OPENMEETINGS-233] - Font styles in propertyPanel are getting disabled.
+    [OPENMEETINGS-234] - Video and Screen sharing not working with HTTPS and RTMPS - Java Application starts but doesnt connect - java trace logs shows "[WARN] [NioProcessor-2] org.red5.server.net.rtmps.RTMPSMinaIoHandler - Exception caught Keystore or password are null"
+    [OPENMEETINGS-237] - Calender reminder email invitation link fails due to link missing "&language=x" in URL
+    [OPENMEETINGS-238] - Calendar shows incorrect day of week for the actual date when timezone is GMT+10
+    [OPENMEETINGS-239] - Calendar Event details Comment/Description field text can overflow the boundary of the Description field of the Meeting Room's Event details dialog box
+    [OPENMEETINGS-241] - Cannot send emailed Invitations from a Meeting room
+    [OPENMEETINGS-242] - Moodle Plugin
+    [OPENMEETINGS-244] - Calendar doesn't show Day / Week / Month
+    [OPENMEETINGS-246] - Remote Cursor is no more visible
+    [OPENMEETINGS-249] - Using LDAP with latest build fails to login, - after login screen im prompted with "You account is assigned to multiple usergroups... " The drop down list is empty - I have checked the MYSQL DB table "oraganisations" and there are two entries there
+    [OPENMEETINGS-250] - Moderator loses Moderation
+    [OPENMEETINGS-252] - Fix ImportInitValues.java default.timezone not taken from install config and add (optional) mapping "ldap_user_attr_timezone" in the ldap config
+    [OPENMEETINGS-257] - Exception in CLI Installer when installing in a new database
+    [OPENMEETINGS-263] - Missing invitation from calendar
+    [OPENMEETINGS-264] - Spinners in ScreenSharing applet works improperly
+    [OPENMEETINGS-269] - Image Download Issue from the Whiteboard - Naming problem and Deletion.jpg file - Reported by George Kirkham
+    [OPENMEETINGS-270] - MemoryLeak / Dead-Lock in FlvRecorderConverter
+    [OPENMEETINGS-271] - Whiteboad Undo tool does not remove all objects from the Whiteboard
+    [OPENMEETINGS-272] - When entering a room, the "Choose devices" window is behind any attendee video windows.
+    [OPENMEETINGS-275] - "User Speaks" icon in Users list does not indicate when the person is speaking
+    [OPENMEETINGS-277] - Latest build fails to start using RTMPS
+    [OPENMEETINGS-278] - When I enter a room and choose a lower resolution the "Choose Devices" window shrinks but the text at the top doesn't wrap to re-size
+    [OPENMEETINGS-279] - Minimize Video button works improperly
+    [OPENMEETINGS-281] - Enhance Language Editor with search fields
+    [OPENMEETINGS-282] - Video window "Exclusive Audio" causes tool tips message boxes to be left on the screen
+    [OPENMEETINGS-283] - Choose devices - Start test recording - no longer plays back the recorded clip
+    [OPENMEETINGS-284] - Audio is not working
+    [OPENMEETINGS-286] - video/audio broadcast problem with language of japanese
+    [OPENMEETINGS-287] - Unable to connect from moodle. Builde 2.0.0.r1341675-22-05-2012_2319
+    [OPENMEETINGS-288] - Unable to connect from moodle. Builde 2.0.0.r1341675-22-05-2012_2319
+    [OPENMEETINGS-289] - Unable to connect from moodle. Builde 2.0.0.r1341675-22-05-2012_2319
+    [OPENMEETINGS-294] - Cannot install Openmeetings with mysql
+    [OPENMEETINGS-295] - OpenMeetings with rtmp over HTTP Tunneling does not work anymore with Red5 r4374
+    [OPENMEETINGS-296] - Language export works only in english
+    [OPENMEETINGS-297] - Users are imported with invalid country
+    [OPENMEETINGS-298] - Problems with shortcut-key 'Ctrl + Shift + m', Camera/Mic settings-screen pops-up when typing 'M' (Shift+m)
+    [OPENMEETINGS-300] - $APP_NAME placeholder is not correctly handled in some email templates
+    [OPENMEETINGS-302] - Delete massges in Trash
+    [OPENMEETINGS-304] - Can not delete mail in Trash
+    [OPENMEETINGS-307] - Language does not load at login
+    [OPENMEETINGS-312] - File was null or did not exist: TEST_SETUP_1338945244240.flv
+    [OPENMEETINGS-314] - Webcam Title of user is username of default OM user
+    [OPENMEETINGS-316] - ICS attachments for emails not working with Exchange 2003/2007 and Outlook 2003/2007
+    [OPENMEETINGS-317] - Multiple appointments generated when clicking save more than once
+    [OPENMEETINGS-319] - Recordings at demo.openmeetings.com are not downloadble
+    [OPENMEETINGS-320] - Exception and layout for screensharing/recording client
+    [OPENMEETINGS-323] - Update Red5 to latest version (r4380) in both server and client library to test RTMPT and file not found exceptions
+    [OPENMEETINGS-324] - Limit login
+
+Improvement
+
+    [OPENMEETINGS-2] - Modify ANT Build script to create correct Build Artefacts / Integrate into https://builds.apache.org/
+    [OPENMEETINGS-4] - Microphone rooms
+    [OPENMEETINGS-10] - openmeetings_1_9_1_r4707 Default Language Error
+    [OPENMEETINGS-45] - New Audio/Video Components
+    [OPENMEETINGS-46] - Updated German lang file
+    [OPENMEETINGS-59] - Japanese translation update
+    [OPENMEETINGS-63] - Update Sharing RTMPClient with latest Red5 version and test if it works now
+    [OPENMEETINGS-66] - Whiteboard Player should aspect ratio when importing a video to the whiteboard
+    [OPENMEETINGS-83] - multipart.jar should be replaced with implementation compatible with ASF licence
+    [OPENMEETINGS-86] - SVN directory structure need to be optimized
+    [OPENMEETINGS-101] - Linking OpenMeetings tutorials and manuals
+    [OPENMEETINGS-113] - Define a default Login-Domain (ie an Ldap domain) to be automatically selected in the frontend login window
+    [OPENMEETINGS-125] - Text does not fit in the button.
+    [OPENMEETINGS-146] - Add mechanism to debug LocalConnection better
+    [OPENMEETINGS-184] - When we make a mistake or we use the same ID in users add administration menu => all fields become empty !
+    [OPENMEETINGS-185] - There is no sense to have two users / moderator / administrator with the same email
+    [OPENMEETINGS-194] - Command line admin: added parameter "--drop", to drop database before install
+    [OPENMEETINGS-202] - Calendar event
+    [OPENMEETINGS-226] - It should be possible to configure OpenOffice location via OM config
+    [OPENMEETINGS-245] - configuration table is not backup/restored
+    [OPENMEETINGS-247] - Make document conversion quality an administrator changeable option
+    [OPENMEETINGS-253] - Made some changes to the german language deutsch.xml
+    [OPENMEETINGS-259] - English Language Text improvements
+    [OPENMEETINGS-268] - Improvements for english text for 506, "registering_mail_text_head", 507, "registering_mail_text_head2", 512, "register_mail_subject"
+    [OPENMEETINGS-276] - Need a way to select "Exclusive Audio" for attenees who have selected "Audo Only"
+    [OPENMEETINGS-285] - Update for Chinese Language text
+    [OPENMEETINGS-309] - Complete French translation
+    [OPENMEETINGS-313] - Errors with it's types and descriptions should be listed on the site
+
+New Feature
+
+    [OPENMEETINGS-129] - Load Icons dynamically at runtime and replace LGPL licensed icons
+    [OPENMEETINGS-130] - Add mechanism for advanced runtime theming
+    [OPENMEETINGS-134] - Themes: Add Color definitions to default-theme.xml file and enhance with more color definitions
+    [OPENMEETINGS-186] - ReplyTo email address should be set to user email address.
+    [OPENMEETINGS-266] - ScreenSharing need to be enhanced to enable screen publishing
+
+Task
+
+    [OPENMEETINGS-7] - Replace lzCalendar with non CPL implementation
+    [OPENMEETINGS-32] - Replace JOD Library with own implementation
+    [OPENMEETINGS-60] - OpenMeetings Plugin for Atlassian JIRA
+    [OPENMEETINGS-70] - There should be a scheduler the does a check for test-recordings older then 1 hour and delete them.
+    [OPENMEETINGS-74] - Integrate Apache Ivy for dependency management of Libraries
+    [OPENMEETINGS-75] - Remove roomtype audience
+    [OPENMEETINGS-76] - Remove Event Recording
+    [OPENMEETINGS-82] - Atlassian Confluence Integration Plugin
+    [OPENMEETINGS-85] - Fix and improve Chat Layout
+    [OPENMEETINGS-88] - Fix client side modules structure (delete "Plugins" directory)
+    [OPENMEETINGS-99] - Project restructuring (sources, beans, eclipse)
+    [OPENMEETINGS-100] - JabberService should be added to Axis2 services
+    [OPENMEETINGS-106] - JabberService is missing in the API Doclet task that generates the SOAP/REST API Documentation
+    [OPENMEETINGS-109] - Show Number of Unread private messages in the dashboard and upgrade layout
+    [OPENMEETINGS-110] - Refactor menubar layout and tabbuttons in dashboard/rooms/settings section + remove "navisub" table + Fix to use "NamedQuery" for main navigation to enable/disable entries in the mainnavi
+    [OPENMEETINGS-117] - Refactor Conference Coloring and Layout
+    [OPENMEETINGS-124] - Clean Up Splash Screen and unused resources in init
+    [OPENMEETINGS-128] - Remove "doc" folder with partly documentated japanese documention and fix icon resources that are not needed
+    [OPENMEETINGS-147] - The green dot that indicates somebody else is speaking produces too many events and is badly performing
+    [OPENMEETINGS-160] - Enable sending messages to external users from the private messages including invitations to conference rooms and events
+    [OPENMEETINGS-169] - Clean up WhiteBoardService to use proper sync methods
+    [OPENMEETINGS-173] - CLI needs a check on those params that are "must haves" for installation
+    [OPENMEETINGS-222] - Enable Keyboard actions to whiteboard (Arrow Down|Left|Right|Up [+Shift] and Delete) when object is selected
+    [OPENMEETINGS-223] - Hardly anybody knows that you can double click to re-edit the text
+    [OPENMEETINGS-231] - Update website with new screenshots
+    [OPENMEETINGS-236] - Where to put portuguese Brasil.xml.
+
+Test
+
+    [OPENMEETINGS-104] - Error in cyrillic filenames
+    [OPENMEETINGS-115] - Installation error
+    [OPENMEETINGS-120] - Blank screen on Backup
+    [OPENMEETINGS-121] - Share/record screen doesn't work
+    [OPENMEETINGS-136] - Duplicate message in Activity section
+    [OPENMEETINGS-148] - when I click to button of page, that haven't anything content
+    [OPENMEETINGS-155] - record not playing
+    [OPENMEETINGS-220] - main.lzx changes (background)
+    [OPENMEETINGS-221] - problem: recordings with 1 frame/sec
+    [OPENMEETINGS-240] - jod converter error
+    [OPENMEETINGS-303] - Can not Export new language
+
+Wish
+
+    [OPENMEETINGS-11] - Openmeeting use LDAP as default domain
+    [OPENMEETINGS-20] - Add hideWhiteboard attributes in Room Object and make it possible to configure / editable via Administration > Rooms
+    [OPENMEETINGS-21] - Add hideChat attributes in Room Object and make it possible to configure / editable via Administration > Rooms
+    [OPENMEETINGS-22] - Add hideActivitiesAndActions attributes in Room Object and make it possible to configure / editable via Administration > Rooms
+    [OPENMEETINGS-23] - Add hideFilesExplorer attributes in Room Object and make it possible to configure / editable via Administration > Rooms
+    [OPENMEETINGS-24] - Add hideScreenSharing attributes in Room Object and make it possible to configure / editable via Administration > Rooms
+    [OPENMEETINGS-25] - Add SOAP/REST Call
+    [OPENMEETINGS-78] - datatype of externalUserId
+    [OPENMEETINGS-254] - German System Backup garbled text
+    [OPENMEETINGS-255] - Possibility to disable Show Sip Dialer in Meeting Room
+    [OPENMEETINGS-258] - Combine device settings and audio/video test in single UI
+    [OPENMEETINGS-262] - Document conversion Windows / Linux different
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..5b291e6
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,1814 @@
+
+Apache OpenMeetings License:
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   
+======================================================================================================================
+
+Following components are direct work from the Apache OpenMeetings project:
+
+======================================================================================================================
+
+admin.bat
+admin.sh
+network_test.sh
+webapps/openmeetings/conf/om_ldap.cfg
+webapps/openmeetings/css/admin.css
+webapps/openmeetings/css/admin-rtl.css
+webapps/openmeetings/css/calendar.css
+webapps/openmeetings/css/forms.css
+webapps/openmeetings/css/history.css
+webapps/openmeetings/css/jquery.ui.menubar.css
+webapps/openmeetings/css/jquery.ui.menubar-rtl.css
+webapps/openmeetings/css/theme.css
+webapps/openmeetings/css/theme-rtl.css
+
+webapps/openmeetings/docs/*
+webapps/openmeetings/js/openmeetings_functions.js
+webapps/openmeetings/languages/*
+webapps/openmeetings/public/favicon.ico
+webapps/openmeetings/public/config.*
+webapps/openmeetings/public/main.as3.swf11.swf
+webapps/openmeetings/public/main.swf8.swf
+webapps/openmeetings/public/maindebug.as3.swf11.swf
+webapps/openmeetings/public/maindebug.swf8.swf
+webapps/openmeetings/public/networktesting.swf10.swf
+webapps/openmeetings/public/networktestingdebug.swf10.swf 
+webapps/openmeetings/public/theme.*
+webapps/openmeetings/screensharing
+webapps/openmeetings/streams/*
+webapps/openmeetings/upload/*
+
+webapps/openmeetings/WEB-INF/red5-web.properties
+webapps/openmeetings/WEB-INF/red5-web.xml
+webapps/openmeetings/WEB-INF/spring-mvc-servlet.xml
+webapps/openmeetings/WEB-INF/velocity.properties
+webapps/openmeetings/WEB-INF/web.xml
+webapps/openmeetings/WEB-INF/classes/logback.xsd
+webapps/openmeetings/WEB-INF/classes/logback-config.xml
+webapps/openmeetings/WEB-INF/classes/openmeetings-applicationContext.xml
+webapps/openmeetings/WEB-INF/classes/META-INF/db2_persistence.xml
+webapps/openmeetings/WEB-INF/classes/META-INF/derby_persistence.xml
+webapps/openmeetings/WEB-INF/classes/META-INF/mssql_persistence.xml
+webapps/openmeetings/WEB-INF/classes/META-INF/mysql_persistence.xml
+webapps/openmeetings/WEB-INF/classes/META-INF/oracle_persistence.xml
+webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml
+webapps/openmeetings/WEB-INF/classes/META-INF/postgres_persistence.xml
+webapps/openmeetings/WEB-INF/conf/axis2.xml
+webapps/openmeetings/WEB-INF/conf/axis2.xsd
+webapps/openmeetings/WEB-INF/services/openmeetings-*.aar
+webapps/openmeetings/WEB-INF/services/services.list
+webapps/openmeetings/WEB-INF/services/version.aar
+
+webapps/openmeetings/WEB-INF/lib/openmeetings-axis-*.jar
+webapps/openmeetings/WEB-INF/lib/openmeetings-cli-*.jar
+webapps/openmeetings/WEB-INF/lib/openmeetings-core-*.jar
+webapps/openmeetings/WEB-INF/lib/openmeetings-db-*.jar
+webapps/openmeetings/WEB-INF/lib/openmeetings-util-*.jar
+webapps/openmeetings/WEB-INF/lib/openmeetings-web-*.jar
+
+webapps/openmeetings/screensharing/icon.jpg
+webapps/openmeetings/screensharing/splashicon.jpg
+webapps/openmeetings/screensharing/openmeetings-screenshare-*.jar
+
+======================================================================================================================
+
+Further those components are either itself or derivate work from 
+projects licensed under the Apache License 2.0:
+
+======================================================================================================================
+
+red5-*.jar
+webapps/openmeetings/screensharing/red5-*.jar
+commons-cli-jar-1.3.1.jar
+red5.bat
+red5.sh
+red5-highperf.sh
+red5-highperf.bat
+red5-debug.sh
+red5-debug.bat
+red5-shutdown.sh
+red5-shutdown.bat
+conf/access.properties
+conf/build_standalone.properties
+conf/catalina.policy
+conf/context.xml
+conf/ehcache.xml
+conf/jee-container.xml
+conf/keystore.jmx
+conf/logback.xml
+conf/no-jee-container.xml
+conf/password.properties
+conf/quartz.properties
+conf/realm.properties
+conf/red5-common.xml
+conf/red5-core.xml
+conf/red5.globals
+conf/red5.policy
+conf/red5.properties
+conf/red5.xml
+conf/tomcat-users.xml
+conf/truststore.jmx
+conf/web.xml
+webapps/red5-default.xml
+webapps/root/biglogo.png
+webapps/root/crossdomain.xml
+webapps/root/favicon.ico
+webapps/root/favicon.png
+webapps/root/flvdemo.html
+webapps/root/gc.jsp
+webapps/root/index.html
+webapps/root/logo.png
+webapps/root/WEB-INF/red5-web.properties
+webapps/root/WEB-INF/red5-web.xml
+webapps/root/WEB-INF/web.xml
+
+
+webapps/openmeetings/WEB-INF/lib/apache-mime4j-core-jar-0.7.2.jar
+webapps/openmeetings/WEB-INF/lib/api-all-jar-1.0.0-M31.jar
+webapps/openmeetings/WEB-INF/lib/asterisk-java-jar-1.0.0.jar
+webapps/openmeetings/WEB-INF/lib/axiom-api-bundle-1.2.15-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/axiom-dom-bundle-1.2.15-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/axiom-impl-bundle-1.2.15-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/axis2-jar-1.7.0-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/axis2-jaxws-jar-1.7.0-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/axis2-kernel-jar-1.7.0-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/axis2-metadata-jar-1.7.0-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/axis2-saaj-jar-1.7.0-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/axis2-transport-http-bundle-1.7.0-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/axis2-transport-local-bundle-1.7.0-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/batik-anim-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-awt-util-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-bridge-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-codec-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-css-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-dom-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-extension-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-ext-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-gui-util-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-gvt-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-parser-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-rasterizer-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-script-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-slideshow-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-squiggle-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-svg-dom-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-svggen-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-svgpp-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-swing-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-transcoder-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-ttf2svg-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-util-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/batik-xml-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/commons-collections-jar-3.2.1.jar
+webapps/openmeetings/WEB-INF/lib/commons-dbcp2-jar-2.1.1.jar
+webapps/openmeetings/WEB-INF/lib/commons-digester-jar-2.1.jar
+webapps/openmeetings/WEB-INF/lib/commons-httpclient-jar-3.1.jar
+webapps/openmeetings/WEB-INF/lib/commons-lang-jar-2.6.jar
+webapps/openmeetings/WEB-INF/lib/commons-net-jar-3.3.jar
+webapps/openmeetings/WEB-INF/lib/commons-pool2-jar-2.4.2.jar
+webapps/openmeetings/WEB-INF/lib/commons-transaction-jar-1.2.jar
+webapps/openmeetings/WEB-INF/lib/derbyclient-jar-10.12.1.1.jar
+webapps/openmeetings/WEB-INF/lib/derby-jar-10.12.1.1.jar
+webapps/openmeetings/WEB-INF/lib/derbynet-jar-10.12.1.1.jar
+webapps/openmeetings/WEB-INF/lib/fop-jar-1.0.jar
+webapps/openmeetings/WEB-INF/lib/geronimo-activation_1.1_spec-bundle-1.1.jar
+webapps/openmeetings/WEB-INF/lib/geronimo-annotation_1.0_spec-jar-1.1.jar
+webapps/openmeetings/WEB-INF/lib/geronimo-javamail_1.4_spec-bundle-1.7.1.jar
+webapps/openmeetings/WEB-INF/lib/geronimo-jaxws_2.2_spec-bundle-1.0.jar
+webapps/openmeetings/WEB-INF/lib/geronimo-jms_1.1_spec-jar-1.1.1.jar
+webapps/openmeetings/WEB-INF/lib/geronimo-jta_1.1_spec-jar-1.1.jar
+webapps/openmeetings/WEB-INF/lib/geronimo-saaj_1.3_spec-jar-1.0.1.jar
+webapps/openmeetings/WEB-INF/lib/geronimo-stax-api_1.0_spec-bundle-1.0.1.jar
+webapps/openmeetings/WEB-INF/lib/geronimo-ws-metadata_2.0_spec-jar-1.1.2.jar
+webapps/openmeetings/WEB-INF/lib/gson-jar-2.2.4.jar
+webapps/openmeetings/WEB-INF/lib/joda-time-jar-2.7.jar
+webapps/openmeetings/WEB-INF/lib/jqplot4java-jar-1.3.0.jar
+webapps/openmeetings/WEB-INF/lib/jqplot-jar-7.0.0.jar
+webapps/openmeetings/WEB-INF/lib/jsmpp-jar-2.1.0.jar
+webapps/openmeetings/WEB-INF/lib/neethi-bundle-3.0.4-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-bundle-2.4.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-jdbc-jar-2.4.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-jest-jar-2.4.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-kernel-jar-2.4.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-lib-jar-2.4.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-persistence-jar-2.4.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-persistence-jdbc-jar-2.4.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-slice-jar-2.4.0.jar
+webapps/openmeetings/WEB-INF/lib/openjpa-xmlstore-jar-2.4.0.jar
+webapps/openmeetings/WEB-INF/lib/org.apache.servicemix.bundles.antlr-bundle-2.7.7_5.jar
+webapps/openmeetings/WEB-INF/lib/org.apache.servicemix.bundles.dom4j-bundle-1.6.1_5.jar
+webapps/openmeetings/WEB-INF/lib/org.apache.servicemix.bundles.xpp3-bundle-1.1.4c_6.jar
+webapps/openmeetings/WEB-INF/lib/simple-xml-jar-2.7.jar
+webapps/openmeetings/WEB-INF/lib/smslib-jar-3.5.4.jar
+webapps/openmeetings/WEB-INF/lib/stax2-api-jar-3.1.1.jar
+webapps/openmeetings/WEB-INF/lib/velocity-jar-1.7.jar
+webapps/openmeetings/WEB-INF/lib/velocity-tools-jar-2.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-auth-roles-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-core-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-dashboard-core-jar-0.12.1+wicket-7.jar
+webapps/openmeetings/WEB-INF/lib/wicket-datetime-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-devutils-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-extensions-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-ioc-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-jquery-ui-bundle-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-jquery-ui-calendar-bundle-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-jquery-ui-core-bundle-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-jquery-ui-plugins-bundle-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-kendo-ui-bundle-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-kendo-ui-culture-bundle-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-kendo-ui-theme-default-bundle-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-native-websocket-core-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-native-websocket-javax-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-request-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/wicketstuff-html5-jar-7.0.0.jar
+webapps/openmeetings/WEB-INF/lib/wicketstuff-select2-jar-7.0.0.jar
+webapps/openmeetings/WEB-INF/lib/wicketstuff-urlfragment-jar-7.0.0.jar
+webapps/openmeetings/WEB-INF/lib/wicket-util-jar-7.1.0.jar
+webapps/openmeetings/WEB-INF/lib/woden-core-bundle-1.0-SNAPSHOT.jar
+webapps/openmeetings/WEB-INF/lib/woodstox-core-asl-jar-4.2.0.jar
+webapps/openmeetings/WEB-INF/lib/ws-commons-util-jar-1.0.2.jar
+webapps/openmeetings/WEB-INF/lib/wsdl4j-jar-1.6.2.jar
+webapps/openmeetings/WEB-INF/lib/xalan-jar-2.7.0.jar
+webapps/openmeetings/WEB-INF/lib/xbean-asm5-shaded-bundle-3.17.jar
+webapps/openmeetings/WEB-INF/lib/xml-apis-ext-jar-1.3.04.jar
+webapps/openmeetings/WEB-INF/lib/xml-apis-jar-1.0.b2.jar
+webapps/openmeetings/WEB-INF/lib/xmlgraphics-commons-jar-1.4.jar
+webapps/openmeetings/WEB-INF/lib/xml-resolver-jar-1.2.jar
+webapps/openmeetings/WEB-INF/lib/xmlrpc-client-jar-3.1.3.jar
+webapps/openmeetings/WEB-INF/lib/xmlrpc-common-jar-3.1.3.jar
+webapps/openmeetings/WEB-INF/lib/xmlschema-core-bundle-2.1.1-SNAPSHOT.jar
+
+webapps/openmeetings/screensharing/commons-beanutils-1.9.2.jar
+webapps/openmeetings/screensharing/commons-codec-1.9.jar
+webapps/openmeetings/screensharing/commons-collections-3.2.1.jar
+webapps/openmeetings/screensharing/commons-lang3-3.3.2.jar
+webapps/openmeetings/screensharing/ehcache-core-2.6.9.jar
+webapps/openmeetings/screensharing/httpclient-4.3.5.jar
+webapps/openmeetings/screensharing/httpcore-4.3.2.jar
+webapps/openmeetings/screensharing/mina-core-2.0.8.jar
+webapps/openmeetings/screensharing/quartz-2.1.7.jar
+webapps/openmeetings/screensharing/red5-client-jar-1.0.5-RELEASE.jar
+webapps/openmeetings/screensharing/red5-io-1.0.5-RELEASE.jar
+webapps/openmeetings/screensharing/red5-server-common-1.0.5-RELEASE.jar
+webapps/openmeetings/screensharing/spring-beans-4.0.8.RELEASE.jar
+webapps/openmeetings/screensharing/spring-context-4.0.8.RELEASE.jar
+webapps/openmeetings/screensharing/spring-core-4.0.8.RELEASE.jar
+
+lib/cglib-nodep-2.2.2.jar
+lib/commons-beanutils-1.9.2.jar
+lib/commons-codec-1.9.jar
+lib/commons-collections-3.2.1.jar
+lib/commons-daemon-1.0.15.jar
+lib/commons-fileupload-jar-1.3.jar
+lib/commons-io-jar-2.4.jar
+lib/commons-lang3-3.3.2.jar
+lib/commons-pool-1.5.6.jar
+lib/ehcache-core-2.6.9.jar
+lib/geronimo-jpa_2.0_spec-bundle-1.1.jar
+lib/httpclient-4.3.5.jar
+lib/httpcore-4.3.2.jar
+lib/mina-core-2.0.8.jar
+lib/mina-integration-beans-2.0.8.jar
+lib/mina-integration-jmx-2.0.8.jar
+lib/mina-integration-ognl-2.0.8.jar
+lib/quartz-2.1.7.jar
+lib/red5-*.jar
+lib/spring-aop-4.0.8.RELEASE.jar
+lib/spring-aspects-jar-4.0.8.RELEASE.jar
+lib/spring-beans-4.0.8.RELEASE.jar
+lib/spring-context-4.0.8.RELEASE.jar
+lib/spring-context-support-4.0.8.RELEASE.jar
+lib/spring-context-support-jar-4.0.8.RELEASE.jar
+lib/spring-core-4.0.8.RELEASE.jar
+lib/spring-expression-4.0.8.RELEASE.jar
+lib/spring-jdbc-jar-4.0.8.RELEASE.jar
+lib/spring-orm-jar-4.0.8.RELEASE.jar
+lib/spring-tx-jar-4.0.8.RELEASE.jar
+lib/spring-web-4.0.8.RELEASE.jar
+lib/spring-webmvc-jar-4.0.8.RELEASE.jar
+lib/xercesImpl-2.9.1.jar
+
+plugins/tomcat-embed-core.jar
+plugins/tomcat-embed-jasper.jar
+plugins/tomcatplugin-1.7.jar
+
+======================================================================================================================
+
+   
+APACHE OPENMEETINGS SUBCOMPONENTS:
+
+Apache OpenMeetings includes a number of subcomponents with separate copyright notices
+and license terms. Your use of these subcomponents is subject to the terms and
+conditions of the following licenses.   
+   
+======================================================================================================================
+
+For GlassFish components
+
+activation-jar-1.1.jar
+jsr311-api-jar-1.1.1.jar
+
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+1. Definitions.
+
+1.1. Contributor means each individual or entity that creates or contributes to the creation of Modifications.
+
+1.2. Contributor Version means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+1.3. Covered Software means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+1.4. Executable means the Covered Software in any form other than Source Code.
+
+1.5. Initial Developer means the individual or entity that first makes Original Software available under this License.
+
+1.6. Larger Work means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+1.7. License means this document.
+
+1.8. Licensable means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+1.9. Modifications means the Source Code and Executable form of any of the following:
+
+A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+B. Any new file that contains any part of the Original Software or previous Modification; or
+
+C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+1.10. Original Software means the Source Code and Executable form of computer software code that is originally released under this License.
+
+1.11. Patent Claims means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+1.12. Source Code means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+1.13. You (or Your) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, You includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, control means (a)�the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b)�ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2. License Grants.
+
+2.1. The Initial Developer Grant.
+Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+(b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+(c) The licenses granted in Sections�2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+(d) Notwithstanding Section�2.1(b) above, no patent license is granted: (1)�for code that You delete from the Original Software, or (2)�for infringements caused by: (i)�the modification of the Original Software, or (ii)�the combination of the Original Software with other software or devices.
+
+2.2. Contributor Grant.
+Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+(b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1)�Modifications made by that Contributor (or portions thereof); and (2)�the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+(c) The licenses granted in Sections�2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+(d) Notwithstanding Section�2.2(b) above, no patent license is granted: (1)�for any code that Contributor has deleted from the Contributor Version; (2)�for infringements caused by: (i)�third party modifications of Contributor Version, or (ii)�the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3)�under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+3.1. Availability of Source Code.
+
+Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+3.2. Modifications.
+
+The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+3.3. Required Notices.
+You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+3.4. Application of Additional Terms.
+You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+3.5. Distribution of Executable Versions.
+You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipients rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+3.6. Larger Works.
+You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+4. Versions of the License.
+
+4.1. New Versions.
+Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+4.2. Effect of New Versions.
+
+You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+4.3. Modified Versions.
+
+When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a)�rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b)�otherwise make it clear that the license contains terms which differ from this License.
+
+5. DISCLAIMER OF WARRANTY.
+
+COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN AS IS BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. TERMINATION.
+
+6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as Participant) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections�2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+6.3. In the event of termination under Sections�6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+7. LIMITATION OF LIABILITY.
+
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTYS NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+The Covered Software is a commercial item, as that term is defined in 48�C.F.R.�2.101 (Oct. 1995), consisting of commercial computer software (as that term is defined at 48 C.F.R. �252.227-7014(a)(1)) and commercial computer software documentation as such terms are used in 48�C.F.R.�12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+9. MISCELLANEOUS.
+
+This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdictions conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+The GlassFish code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California. 
+   
+======================================================================================================================
+
+For SLF4J:
+
+webapps/openmeetings/screensharing/jcl-over-slf4j-1.7.9.jar
+webapps/openmeetings/screensharing/slf4j-api-1.7.9.jar
+lib/jcl-over-slf4j-1.7.9.jar
+lib/jul-to-slf4j-1.7.9.jar
+lib/log4j-over-slf4j-1.7.9.jar
+lib/slf4j-api-1.7.9.jar
+
+Copyright (c) 2004-2008 QOS.ch
+ All rights reserved.
+
+ Permission is hereby granted, free  of charge, to any person obtaining
+ a  copy  of this  software  and  associated  documentation files  (the
+ "Software"), to  deal in  the Software without  restriction, including
+ without limitation  the rights to  use, copy, modify,  merge, publish,
+ distribute,  sublicense, and/or sell  copies of  the Software,  and to
+ permit persons to whom the Software  is furnished to do so, subject to
+ the following conditions:
+
+ The  above  copyright  notice  and  this permission  notice  shall  be
+ included in all copies or substantial portions of the Software.
+
+ THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
+ EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
+ MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ 
+ ======================================================================================================================
+ 
+ For backport-util-concurrent-jar-3.1.jar
+ 
+ This software is released to the public domain, in the spirit of the original code written by Doug Lea. 
+ The code can be used for any purpose, modified, and redistributed without acknowledgment. 
+ No warranty is provided, either express or implied. 
+
+ 
+ ======================================================================================================================
+ 
+plugins/websocket-1.1.jar
+jaxb-api-jar-2.2.6.jar
+jaxb-impl-jar-2.2.6.jar
+jaxb-xjc-jar-2.2.6.jar
+jaxws-tools-jar-2.2.6.jar
+
+ COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)Version 1.1
+
+1. Definitions.
+
+     1.1. "Contributor" means each individual or entity that creates or contributes to the creation of Modifications.
+
+     1.2. "Contributor Version" means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+     1.3. "Covered Software" means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+     1.4. "Executable" means the Covered Software in any form other than Source Code.
+
+     1.5. "Initial Developer" means the individual or entity that first makes Original Software available under this License.
+
+     1.6. "Larger Work" means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+     1.7. "License" means this document.
+
+     1.8. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+     1.9. "Modifications" means the Source Code and Executable form of any of the following:
+
+     A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+     B. Any new file that contains any part of the Original Software or previous Modification; or
+
+     C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+     1.10. "Original Software" means the Source Code and Executable form of computer software code that is originally released under this License.
+
+     1.11. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+     1.12. "Source Code" means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+     1.13. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2. License Grants.
+
+     2.1. The Initial Developer Grant.
+
+     Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+     (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+
+     (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+
+     (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+
+     (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+
+     2.2. Contributor Grant.
+
+     Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+     (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+
+     (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+
+     (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+
+     (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+     3.1. Availability of Source Code.
+
+     Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+     3.2. Modifications.
+
+     The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+     3.3. Required Notices.
+
+     You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+     3.4. Application of Additional Terms.
+
+     You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients' rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+     3.5. Distribution of Executable Versions.
+
+     You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient's rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+     3.6. Larger Works.
+
+     You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+4. Versions of the License.
+
+     4.1. New Versions.
+
+     Oracle is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+     4.2. Effect of New Versions.
+
+     You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+
+     4.3. Modified Versions.
+
+     When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+
+5. DISCLAIMER OF WARRANTY.
+
+     COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. TERMINATION.
+
+     6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+     6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as "Participant") alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+     6.3. If You assert a patent infringement claim against Participant alleging that the Participant Software directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license.
+
+     6.4. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+7. LIMITATION OF LIABILITY.
+
+     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+     The Covered Software is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" (as that term is defined at 48 C.F.R. ? 252.227-7014(a)(1)) and "commercial computer software documentation" as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+9. MISCELLANEOUS.
+
+     This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction's conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+     As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+----------
+NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
+
+
+
+
+The GNU General Public License (GPL) Version 2, June 1991
+
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+   a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
+
+   b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
+
+   c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
+
+   a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+   b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+   c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+   One line to give the program's name and a brief idea of what it does.
+
+   Copyright (C)
+
+   This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
+
+   Gnomovision version 69, Copyright (C) year name of author
+   Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
+
+   Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+   signature of Ty Coon, 1 April 1989
+   Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.
+
+
+"CLASSPATH" EXCEPTION TO THE GPL VERSION 2
+
+Certain source files distributed by Oracle are subject to the following clarification and special exception to the GPL Version 2, but only where Oracle has expressly included in the particular source file's header the words "Oracle designates this particular file as subject to the "Classpath" exception as provided by Oracle in the License file that accompanied this code."
+
+Linking this library statically or dynamically with other modules is making a combined work based on this library.  Thus, the terms and conditions of the GNU General Public License Version 2 cover the whole combination.
+
+As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module.  An independent module is a module which is not derived from or based on this library.  If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so.  If you do not wish to do so, delete this exception statement from your version.
+ 
+======================================================================================================================
+
+For 
+webapps/openmeetings/WEB-INF/lib/jaxen-jar-1.1.4.jar
+
+ $Id: LICENSE.txt,v 1.5 2006/02/05 21:49:04 elharo Exp $
+
+ Copyright 2003-2006 The Werken Company. All Rights Reserved.
+ 
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+  * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+  * Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+
+  * Neither the name of the Jaxen Project nor the names of its
+    contributors may be used to endorse or promote products derived 
+    from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+======================================================================================================================
+
+For mail-jar-1.4.7.jar
+
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+1. Definitions.
+
+   1.1. Contributor. means each individual or entity that creates or contributes to the creation of Modifications.
+
+   1.2. Contributor Version. means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+   1.3. Covered Software. means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+   1.4. Executable. means the Covered Software in any form other than Source Code.
+
+   1.5. Initial Developer. means the individual or entity that first makes Original Software available under this License.
+
+   1.6. Larger Work. means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+   1.7. License. means this document.
+
+   1.8. Licensable. means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+   1.9. Modifications. means the Source Code and Executable form of any of the following:
+
+        A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+        B. Any new file that contains any part of the Original Software or previous Modification; or
+
+        C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+   1.10. Original Software. means the Source Code and Executable form of computer software code that is originally released under this License.
+
+   1.11. Patent Claims. means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+   1.12. Source Code. means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+   1.13. You. (or .Your.) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, .You. includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, .control. means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2. License Grants.
+
+      2.1. The Initial Developer Grant.
+
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+         (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+
+         (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+
+        (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+
+        (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+
+    2.2. Contributor Grant.
+
+    Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+        (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+
+        (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+
+        (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+
+        (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+      3.1. Availability of Source Code.
+      Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+      3.2. Modifications.
+      The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+      3.3. Required Notices.
+      You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+      3.4. Application of Additional Terms.
+      You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients. rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+      3.5. Distribution of Executable Versions.
+      You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient.s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+      3.6. Larger Works.
+      You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+4. Versions of the License.
+
+      4.1. New Versions.
+      Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+      4.2. Effect of New Versions.
+      You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+
+      4.3. Modified Versions.
+      When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+
+5. DISCLAIMER OF WARRANTY.
+
+   COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN .AS IS. BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. TERMINATION.
+
+      6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+      6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as .Participant.) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+      6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+7. LIMITATION OF LIABILITY.
+
+   UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY.S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+   The Covered Software is a .commercial item,. as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of .commercial computer software. (as that term is defined at 48 C.F.R. � 252.227-7014(a)(1)) and .commercial computer software documentation. as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+9. MISCELLANEOUS.
+
+   This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction.s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys. fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+   As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+   NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+
+   The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
+   
+======================================================================================================================
+
+For wsdl4j-jar-1.6.2.jar
+
+Common Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+    a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+    b) in the case of each subsequent Contributor:
+
+    i) changes to the Program, and
+
+    ii) additions to the Program;
+
+    where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. 
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+    a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
+
+    b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. 
+
+    c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+    d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+    a) it complies with the terms and conditions of this Agreement; and
+
+    b) its license agreement:
+
+    i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; 
+
+    ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; 
+
+    iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
+
+    iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. 
+
+When the Program is made available in source code form:
+
+    a) it must be made available under this Agreement; and 
+
+    b) a copy of this Agreement must be included with each copy of the Program. 
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against a Contributor with respect to a patent applicable to software (including a cross-claim or counterclaim in a lawsuit), then any patent licenses granted by that Contributor to such Recipient under this Agreement shall terminate as of the date such litigation is filed. In addition, if Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. IBM is the initial Agreement Steward. IBM may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
+ 
+======================================================================================================================
+
+For lib/jython-standalone-2.5.3.jar
+
+The Jython License
+A. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING JYTHON
+PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
+
+1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using this software ("Jython") in source or binary form and its associated documentation.
+
+2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Jython alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2007 Python Software Foundation; All Rights Reserved" are retained in Jython alone or in any derivative version prepared by Licensee.
+
+3. In the event Licensee prepares a derivative work that is based on or incorporates Jython or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Jython.
+
+4. PSF is making Jython available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF JYTHON WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
+
+5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF JYTHON FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING JYTHON, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
+
+6. This License Agreement will automatically terminate upon a material breach of its terms and conditions.
+
+7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party.
+
+8. By copying, installing or otherwise using Jython, Licensee agrees to be bound by the terms and conditions of this License Agreement.
+Jython 2.0, 2.1 License
+
+Copyright (c) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Jython Developers All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+        Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+        Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+        Neither the name of the Jython Developers nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+======================================================================================================================
+
+ For Bouncy Castle:
+ 
+ lib/bcprov-jdk15on-1.51.jar
+ webapps/openmeetings/screensharing/bcprov-jdk15on-1.51.jar
+
+ Copyright (c) 2000 - 2011 The Legion Of The Bouncy Castle (http://www.bouncycastle.org)
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
+ documentation files (the "Software"), to deal in the Software without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit
+ persons to whom the Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the
+ Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
+ WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ 
+======================================================================================================================
+
+For XPP3: xpp3-jar-1.1.4c.jar
+
+Indiana University Extreme! Lab Software License
+
+Version 1.1.1
+
+Copyright (c) 2002 Extreme! Lab, Indiana University. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in
+   the documentation and/or other materials provided with the distribution.
+
+3. The end-user documentation included with the redistribution, if any,
+   must include the following acknowledgment:
+
+  "This product includes software developed by the Indiana University
+  Extreme! Lab (http://www.extreme.indiana.edu/)."
+
+Alternately, this acknowledgment may appear in the software itself,
+if and wherever such third-party acknowledgments normally appear.
+
+4. The names "Indiana Univeristy" and "Indiana Univeristy Extreme! Lab"
+must not be used to endorse or promote products derived from this
+software without prior written permission. For written permission,
+please contact http://www.extreme.indiana.edu/.
+
+5. Products derived from this software may not use "Indiana Univeristy"
+name nor may "Indiana Univeristy" appear in their name, without prior
+written permission of the Indiana University.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHORS, COPYRIGHT HOLDERS OR ITS CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+======================================================================================================================
+
+For XStream Components: xstream-jar-1.4.2.jar
+
+Copyright (c) 2003-2006, Joe Walnes
+Copyright (c) 2006-2007, XStream Committers
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this list of
+conditions and the following disclaimer. Redistributions in binary form must reproduce
+the above copyright notice, this list of conditions and the following disclaimer in
+the documentation and/or other materials provided with the distribution.
+
+Neither the name of XStream nor the names of its contributors may be used to endorse
+or promote products derived from this software without specific prior written
+permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
+WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
+ 
+======================================================================================================================
+
+For Red5 Components:
+
+ RED5 Open Source Flash Server - http://code.google.com/p/red5/
+ 
+Copyright 2006-2012 by respective authors (see below). All rights reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+ 
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+ 
+The Red5 Project (red5@osflash.org)
+Luke Hubbard (luke@codegent.com)
+Dominick Accattato (daccattato@gmail.com)
+Chris Allen (mrchrisallen@gmail.com)
+Joachim Bauch (jojo@struktur.de)
+Mick Herres (mickherres@hotmail.com)
+John Grden (johng@acmewebworks.com)
+Grant Davies (grant@bluetube.com)
+Steven Elliott (steven.s.elliott@gmail.com)
+Jokul Tian (tianxuefeng@gmail.com)
+Steven Gong (steven.gong@gmail.com)
+Paul Gregoire (mondain@gmail.com)
+Michael Klishin (michael.s.klishin@gmail.com)
+Thijs Triemstra (info@collab.nl)
+Dan Rossi (electroteque@gmail.com)
+Anton Lebedevich (mabrek@gmail.com)
+Art Clarke (aclarke@xuggle.com)
+
+
+======================================================================================================================
+
+For JDOM
+ Copyright (C) 2000-2004 Jason Hunter & Brett McLaughlin.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions, and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions, and the disclaimer that follows
+    these conditions in the documentation and/or other materials
+    provided with the distribution.
+
+ 3. The name "JDOM" must not be used to endorse or promote products
+    derived from this software without prior written permission.  For
+    written permission, please contact <request_AT_jdom_DOT_org>.
+
+ 4. Products derived from this software may not be called "JDOM", nor
+    may "JDOM" appear in their name, without prior written permission
+    from the JDOM Project Management <request_AT_jdom_DOT_org>.
+
+ In addition, we request (but do not require) that you include in the
+ end-user documentation provided with the redistribution and/or in the
+ software itself an acknowledgement equivalent to the following:
+     "This product includes software developed by the
+      JDOM Project (http://www.jdom.org/)."
+ Alternatively, the acknowledgment may be graphical using the logos
+ available at http://www.jdom.org/images/logos.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED.  IN NO EVENT SHALL THE JDOM AUTHORS OR THE PROJECT
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many
+ individuals on behalf of the JDOM Project and was originally
+ created by Jason Hunter <jhunter_AT_jdom_DOT_org> and
+ Brett McLaughlin <brett_AT_jdom_DOT_org>.  For more information
+ on the JDOM Project, please see <http://www.jdom.org/>.
+ 
+======================================================================================================================
+The following components are BSD Licensed 
+======================================================================================================================
+
+For: dom4j-jar-1.6.1.jar
+
+    Containing Project URL: http://sourceforge.net/projects/dom4j/
+    
+Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
+
+Redistribution and use of this software and associated documentation
+("Software"), with or without modification, are permitted provided
+that the following conditions are met:
+
+1. Redistributions of source code must retain copyright
+   statements and notices.  Redistributions must also contain a
+   copy of this document.
+ 
+2. Redistributions in binary form must reproduce the
+   above copyright notice, this list of conditions and the
+   following disclaimer in the documentation and/or other
+   materials provided with the distribution.
+ 
+3. The name "DOM4J" must not be used to endorse or promote
+   products derived from this Software without prior written
+   permission of MetaStuff, Ltd.  For written permission,
+   please contact dom4j-info@metastuff.com.
+ 
+4. Products derived from this Software may not be called "DOM4J"
+   nor may "DOM4J" appear in their names without prior written
+   permission of MetaStuff, Ltd. DOM4J is a registered
+   trademark of MetaStuff, Ltd.
+ 
+5. Due credit should be given to the DOM4J Project - 
+   http://www.dom4j.org
+ 
+THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS
+``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
+NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL
+METASTUFF, LTD. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+OF THE POSSIBILITY OF SUCH DAMAGE.
+
+postgresql-jar-9.4-1203-jdbc41.jar
+	Containing Project URL: http://jdbc.postgresql.org
+	
+	The PostgreSQL JDBC driver is distributed under the BSD license, same as the server. The simplest explanation of the licensing terms is that you can do whatever you want with the product and source code as long as you don't claim you wrote it or sue us. You should give it a read though, it's only half a page.
+
+Copyright (c) 1997-2010, PostgreSQL Global Development Group
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+3. Neither the name of the PostgreSQL Global Development Group nor the names
+   of its contributors may be used to endorse or promote products derived
+   from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+======================================================================================================================
+
+SERP License
+
+File: serp-jar-1.15.1.jar
+
+Copyright (c) 2002-2007, A. Abram White
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without 
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this 
+  list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice, 
+  this list of conditions and the following disclaimer in the documentation 
+  and/or other materials provided with the distribution.
+* Neither the name of 'serp' nor the names of its contributors may
+  be used to endorse or promote products derived from this software without 
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+======================================================================================================================
+ iCal4j - License
+ 
+webapps/openmeetings/WEB-INF/lib/ical4j-jar-1.0.6.jar
+ 
+======================================================================================================================
+
+Copyright (c) 2012, Ben Fortuna
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+	o Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+	o Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+	o Neither the name of Ben Fortuna nor the names of any other contributors
+may be used to endorse or promote products derived from this software
+without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+======================================================================================================================
+
+
+For the components:
+
+webapps/openmeetings/screensharing/logback-access-1.1.2.jar
+webapps/openmeetings/screensharing/logback-classic-1.1.2.jar
+webapps/openmeetings/screensharing/logback-core-1.1.2.jar
+lib/logback-access-1.1.2.jar
+lib/logback-classic-1.1.2.jar
+lib/logback-core-1.1.2.jar
+lib/jruby-1.6.8.jar
+plugins/ecj-4.4.jar
+
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.
+
+
+======================================================================================================================
+
+For components:
+
+coin-slider-styles.css
+colorbox.css
+jquery.ui.menubar.js
+jquery.ui.menubar.css
+
+coin-slider.min.js	
+jquery.colorbox.js
+jquery-1.11.0.min.js	
+jquery-ui-1.11.4.custom.min.js
+jquery-ui-1.10.4.custom.css
+jquery-ui-1.11.4.custom.css
+
+border.png
+controls.png
+loading.gif
+loading_background.png
+overlay.png
+ui-bg_flat_0_000088_40x100.png
+ui-bg_flat_0_e6b900_40x100.png
+ui-bg_flat_100_eeeeee_40x100.png
+ui-bg_flat_20_000088_40x100.png
+ui-bg_flat_22_1484e6_40x100.png
+ui-bg_flat_25_c5ddfc_40x100.png
+ui-bg_flat_26_2293f7_40x100.png
+ui-bg_highlight-soft_100_f9f9f9_1x100.png
+ui-icons_0a82eb_256x240.png
+ui-icons_0b54d5_256x240.png
+ui-icons_5fa5e3_256x240.png
+ui-icons_ffffff_256x240.png
+
+JQuery: http://jquery.com/
+JQuery UI: http://code.google.com/p/jquery-ui/
+Colorbox Plugin: http://www.jacklmoore.com/colorbox
+Coinslider Plugin: https://code.google.com/p/coin-slider/
+
+https://github.com/jquery/jquery/blob/master/MIT-LICENSE.txt
+
+Copyright (c) 2012 jQuery Foundation and other contributors,
+http://jquery.com/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+======================================================================================================================
+
+For ThreeTen library: threetenbp-jar-1.3.1.jar
+
+ * Copyright (c) 2007-present, Stephen Colebourne & Michael Nascimento Santos
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  * Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *
+ *  * Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ *  * Neither the name of JSR-310 nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+======================================================================================================================
+
+For Json library: json-20090211.jar
+
+Copyright (c) 2002 JSON.org
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+ The Software shall be used for Good, not Evil.
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..5f2e271
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,11 @@
+Apache OpenMeetings

+Copyright 2011-2014 The Apache Software Foundation

+

+This product includes software developed at

+The Apache Software Foundation (http://www.apache.org/).

+

+This product includes icons from FamFamFam Icon Set Silk.

+http://www.famfamfam.com/lab/icons/silk/

+

+This product includes icons from Yusuke Kamiyamane.

+http://p.yusukekamiyamane.com/

diff --git a/README b/README
new file mode 100644
index 0000000..5c2ef07
--- /dev/null
+++ b/README
@@ -0,0 +1,249 @@
+Apache OpenMeetings - README

+Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0

+--------------------------------------------------------------------------------

+

+About

+=====

+Apache Openmeetings provides video conferencing, instant messaging, white board,

+collaborative document editing and other groupware tools using API functions of 

+the Red5 Streaming Server for Remoting and Streaming. 

+

+Release Notes 3.0.7

+=============

+see CHANGELOG file for detailed log

+

+Service release 7 for 3.0.0 contains following improvements and bug fixes:

+

+Clustering:

+* Clustering was tested and fixed, now it works as expected both in OM and plugins

+* Moderator able to restrict video in restricted room from now on

+* Private messages with room booking are now works as expected

+* Crashes in admin are fixed

+* LDAP: group import

+

+Other fixes in admin, localizations, invitations etc.

+

+

+Release Notes 3.0.6

+=============

+see CHANGELOG file for detailed log

+

+Service release 6 for 3.0.0 contains following improvements and bug fixes:

+

+Invitation:

+* Invitation hash sending from the room is fixed 

+* Invitation hash is now enable for plugin users

+* First and last name can be passed to SOAP function for hash geneartion

+

+Other fixes

+

+

+Release Notes 3.0.5

+=============

+see CHANGELOG file for detailed log

+

+Service release 5 for 3.0.0 contains following improvements and bug fixes:

+

+Installer:

+* Database configuration screen is added

+

+RTL:

+* Dashboard and Emails are more RTL friendly

+

+OAuth:

+* OAuth support is improved, crash is fixed

+

+Other fixes in SOAP, localizations, invitations etc. 

+

+

+Release Notes 3.0.4

+=============

+see CHANGELOG file for detailed log

+

+Service release 4 for 3.0.0 contains following improvements and bug fixes:

+

+Screen-Sharing:

+* web application is now signed with trusted certificate (no warnings)

+* RTMPT/RTMPS works as expected

+* audio/video synchronization is improved

+

+Recordings:

+* It is now possible to rename the recording

+* Recordings stability is improved

+

+RTL:

+* Dashboard, Calendar, Settings and Admin are more RTL friendly

+

+Calendar:

+* Time zone support is greatly improved

+

+

+Release Notes 3.0.3

+=============

+see CHANGELOG file for detailed log

+

+Service release 3 for 3.0.0, no new features were added, please NOTE Java7 is required on both client and server from now on.

+

+

+Release Notes 3.0.2

+=============

+see CHANGELOG file for detailed log

+

+Service release 2 for 3.0.0, no new features were added

+

+

+Release Notes 3.0.1

+=============

+see CHANGELOG file for detailed log

+

+Service release 1 for 3.0.0, no new features were added

+

+

+Release Notes 3.0

+=============

+see CHANGELOG file for detailed log

+

+Refactoring main interface (admin, dashboard, etc.) to use HTML5 instead of Flash. 

+All the screens but the room are on HTML5. The room is still on Flash.

+

+The release also includes some bug fixes, timezone refactoring and a lot of 

+localization improvements.

+

+_Known Issues And Limitations_

+* RTMPS seems to be very unstable (will try to fix it in 3.1)

+* Recent version of Adobe Flash still causes crash (please downgrade to 11.5 version)

+https://bugzilla.mozilla.org/show_bug.cgi?id=885188

+* Multi-tabbing (no other flash application should be running in

+different browsers or tabs)

+* Chat clean up and log copying is not implemented

+* Moving recordings between folders does not work

+

+Please not that this is a first HTML5 release, so some minor UI issues are possible

+

+

+Release Notes 2.2.0

+=============

+see CHANGELOG file for detailed log

+

+Bug fix release for 2.1.1

+This release includes lots of UI and command line fixes, as well as some improvements:

+MSSQL DB support, Faster screen sharing, improved SOAP/REST call and LDAP support.

+

+_Known Issues_

+RTMPS seems to be very unstable (will try to fix it in 3.0)

+

+

+Release Notes 2.1.1

+=============

+see CHANGELOG file for detailed log

+

+Bug fix release for 2.1.0.

+This release includes some improvements in user interface, fixes for the 

+interview and video only rooms, and localization issues. 

+Configurable hot key for Mute/Unmute have been added.

+

+_Known Issues_

+Video/audio SIP integration is not a part of this Apache release.

+Check free red5sip product for this integration.

+

+Release passed reliability testing (great job, Vasily Degtyarev!)

+For 1 hour long conferences the following does not work with this release:

+* Recordigs (expected to work in 3.0)

+https://issues.apache.org/jira/browse/OPENMEETINGS-669

+* Recent version with Adobe Flash (please downgrade to 11.5 version)

+https://bugzilla.mozilla.org/show_bug.cgi?id=885188

+* Multi-tabbing (no other flash application should be running in

+different browsers or tabs)

+

+Release Notes 2.1

+=============

+see CHANGELOG file for detailed log

+

+_Integration with Asterisk_

+SIP/VOIP integration with Asterisk was refactored. 

+Confbridge application is now used instead of Meetme for the conferences.

+Sound quality and SIP transport stability was significantly improved.

+Basic support for video is added (is unstable and in beta version stage now).

+See also: http://openmeetings.apache.org/red5sip-integration_2.1.html

+

+_Improving the sound and video quality_

+All the audio/video related components now use SWF11 for broadcasting and 

+receiving audio and video signals. 

+Echo cancellation can be enabled in the config. 

+H264 video codec is now used instead of H263 to enable SIP video support.

+

+_Private and moderated chat_

+Ability to send private chat messages in the room is added as well as the chat 

+moderation funmctionality.

+

+_SMS sending module_

+Possibility to send SMS message as a meeting reminder is added.

+See also: https://cwiki.apache.org/confluence/display/OPENMEETINGS/SMS+Sending+Module

+

+_Network testing tool/script_

+Network testing tool is implemented and its link is added to the login page.

+See also: https://cwiki.apache.org/confluence/display/OPENMEETINGS/Connection+testing+tool

+

+_Improvements in the mail sending process_

+Now e-mails are re-send again in case of unsuccessfull result at the first 

+attempt or OpenMeetings re-start before the sending. 

+SMTP setting updates now takes effect just after they saving whereas previously 

+they started to work after the OpenMeetings re-start only.

+

+_Calendar_

+Messages about the meeting updates are sent only when substantial changes were made. 

+Multiple external attendees can be added as one operation, it's now possible to 

+specify user name for external guests (user will appear with this name in the user 

+list in the room). 

+

+_Room Interface_

+Possibility to get invitation link without sending an e-mail was added. 

+Confirmation dialog for exclusive audio no longer appears.

+Hot key is added to be able to "rearrange" video windows in the room. 

+Volume slider on the video pod toolbar was added.

+

+_Recordings and screen sharing improvements_

+Some improvements for the screen sharing and recordings quality and stability 

+were made.

+

+_Cluster capabilities_

+In the beta stage: OpenMeetings  can be configured in the cluster environment and 

+is ready for the testing, but development has not been fnished yet. 

+See also: http://openmeetings.apache.org/Clustering.html,

+https://cwiki.apache.org/confluence/display/OPENMEETINGS/Cluster+Master-Slave+overview

+

+_Admin/Calendar HTML5 UI_

+Additional HTML5 Wicket based UI (fully customizable with CSS) is added for 

+static screens as a proof of the concept.

+

+Getting Started

+===============

+Please visit the project website for the latest information:

+    http://openmeetings.apache.org/

+    

+Documentation for Installation and Upgrade:

+    http://openmeetings.apache.org/installation.html

+    http://openmeetings.apache.org/Upgrade.html

+

+Along with the developer mailing list archive:

+    http://openmeetings.apache.org/mail-lists.html

+    

+    

+System Requirements

+===================

+You need a platform that supports Sun Java SE 6.

+

+

+Building and running

+====================

+To build from source code:

+

+  - Requirements:

+    Sources compilation require Sun Java SE 6.

+    The project is built with Apache ANT 1.8.6 or later.

+  

+  - To build the OpenMeetings project run ant in the root directory:

+     ant

+    

+For a detailed documentation on how to build from source and options see:

+    http://openmeetings.apache.org/BuildInstructions.html

diff --git a/WebContent/crossdomain.xml b/WebContent/crossdomain.xml
new file mode 100644
index 0000000..f844f20
--- /dev/null
+++ b/WebContent/crossdomain.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="crossdomain.xsd">
+	<site-control permitted-cross-domain-policies="all"/>
+	<allow-access-from domain="localhost" to-ports="20-65535"/>
+	<allow-access-from domain="*.local" to-ports="20-65535"/>
+</cross-domain-policy>
diff --git a/WebContent/crossdomain.xsd b/WebContent/crossdomain.xsd
new file mode 100644
index 0000000..7d7351d
--- /dev/null
+++ b/WebContent/crossdomain.xsd
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

+  <xs:element name="cross-domain-policy">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element ref="site-control"/>

+        <xs:element maxOccurs="unbounded" ref="allow-access-from"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="site-control">

+    <xs:complexType>

+      <xs:attribute name="permitted-cross-domain-policies" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="allow-access-from">

+    <xs:complexType>

+      <xs:attribute name="domain" use="required"/>

+      <xs:attribute name="to-ports" use="required" type="xs:NMTOKEN"/>

+    </xs:complexType>

+  </xs:element>

+</xs:schema>

diff --git a/WebContent/jrebel/red5-debug.bat b/WebContent/jrebel/red5-debug.bat
new file mode 100644
index 0000000..9087e9e
--- /dev/null
+++ b/WebContent/jrebel/red5-debug.bat
@@ -0,0 +1,19 @@
+REM #############################################

+REM Licensed under the Apache License, Version 2.0 (the "License");

+REM you may not use this file except in compliance with the License.

+REM You may obtain a copy of the License at

+REM

+REM     http://www.apache.org/licenses/LICENSE-2.0

+REM

+REM Unless required by applicable law or agreed to in writing, software

+REM distributed under the License is distributed on an "AS IS" BASIS,

+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+REM See the License for the specific language governing permissions and

+REM limitations under the License.

+REM #############################################

+@echo off

+

+if NOT DEFINED RED5_HOME set RED5_HOME=%~dp0

+

+set JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n -javaagent:@jrebel.home@\jrebel.jar -Drebel.remoting_plugin=true -Dproject.root=@project.home@

+%RED5_HOME%\red5.bat

diff --git a/WebContent/jrebel/red5-debug.sh b/WebContent/jrebel/red5-debug.sh
new file mode 100644
index 0000000..b4065b4
--- /dev/null
+++ b/WebContent/jrebel/red5-debug.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+# #############################################
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# #############################################
+
+if [ -z "$RED5_HOME" ]; then export RED5_HOME=.; fi
+
+# Debug options
+export JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n $JAVA_OPTS -javaagent:@jrebel.home@/jrebel.jar -Drebel.remoting_plugin=true -Dproject.root=@project.home@"
+
+# Start Red5
+exec $RED5_HOME/red5.sh
diff --git a/WebContent/lzx.xsd b/WebContent/lzx.xsd
new file mode 100644
index 0000000..3146f4f
--- /dev/null
+++ b/WebContent/lzx.xsd
@@ -0,0 +1,14742 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" 
+  targetNamespace="http://localhost/openlaszlo/lzx" 
+  xmlns:lzx="http://localhost/openlaszlo/lzx">
+  <xs:simpleType name="booleanLiteral">
+    <xs:restriction base="xs:boolean"/>
+  </xs:simpleType>
+  <xs:simpleType name="colorLiteral">
+    <xs:restriction base="xs:string"/>
+  </xs:simpleType>
+  <xs:simpleType name="numberLiteral">
+    <xs:restriction base="xs:double"/>
+  </xs:simpleType>
+  <xs:simpleType name="sizeLiteral">
+    <xs:restriction base="xs:double">
+      <xs:minInclusive value="0"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="inheritableBooleanLiteral">
+    <xs:union memberTypes="lzx:booleanLiteral">
+      <xs:simpleType>
+        <xs:restriction base="xs:token">
+          <xs:enumeration value="inherit"/>
+        </xs:restriction>
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+  <xs:simpleType name="constraint">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="$(style|path|immediately|once|always)?\{.*\}"/>
+    </xs:restriction>
+  </xs:simpleType>
+  <xs:simpleType name="boolean">
+    <xs:union memberTypes="lzx:booleanLiteral lzx:constraint">
+    <xs:simpleType>
+        <xs:restriction base="xs:token">
+          <xs:enumeration value="null"/>
+        </xs:restriction>
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+  <xs:simpleType name="booleanOrNull">
+    <xs:union memberTypes="lzx:boolean">
+      <xs:simpleType>
+        <xs:restriction base="xs:token">
+          <xs:enumeration value="null"/>
+        </xs:restriction>
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+  <xs:simpleType name="color">
+    <xs:union memberTypes="lzx:colorLiteral lzx:constraint"/>
+  </xs:simpleType>
+  <xs:simpleType name="expression">
+    <xs:restriction base="xs:string"/>
+  </xs:simpleType>
+  <xs:simpleType name="reference">
+    <xs:restriction base="xs:string"/>
+  </xs:simpleType>
+  <xs:simpleType name="number">
+    <xs:union memberTypes="lzx:numberLiteral lzx:constraint xs:string"/>
+  </xs:simpleType>
+  <xs:simpleType name="token">
+    <xs:union memberTypes="xs:token"/>
+  </xs:simpleType>
+  <xs:simpleType name="size">
+    <xs:union memberTypes="lzx:sizeLiteral lzx:constraint"/>
+  </xs:simpleType>
+  <xs:simpleType name="numberExpression">
+    <xs:restriction base="xs:string"/>
+  </xs:simpleType>
+  <xs:simpleType name="sizeExpression">
+    <xs:restriction base="xs:string"/>
+  </xs:simpleType>
+  <xs:simpleType name="css">
+    <xs:restriction base="xs:string"/>
+  </xs:simpleType>
+  <xs:simpleType name="opacity">
+    <xs:union memberTypes="lzx:constraint">
+      <xs:simpleType>
+        <xs:restriction base="xs:double">
+          <xs:minInclusive value="0.0"/>
+          <xs:maxInclusive value="1.0"/>
+        </xs:restriction>
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+  <xs:simpleType name="percentage">
+    <xs:restriction base="xs:string">
+      <xs:pattern value="(\d+(.\d?)|.\d+)%"/>
+    </xs:restriction>
+  </xs:simpleType>
+<xs:element name="passthrough" type="lzx:passthrough" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Provides a way to import SWF10 declarations. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="passthrough" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="when" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Provides a way to import SWF10 declarations. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="styledtext" type="lzx:styledtext" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A text subclass which allows use of text styles
+        @START_CODE
+            &lt;styledtext text="hello" style="mytextstyle" /&gt;
+        @END_CODE
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="styledtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="style" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ should be an object of type "textstyle" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="menubutton" type="lzx:menubutton" >
+</xs:element>
+  <xs:complexType name="menubutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:button">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lzeditcombobox" type="lzx:lzeditcombobox" >
+</xs:element>
+  <xs:complexType name="lzeditcombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:lzcombobox">
+      <xs:attribute name="y_offset" type="xs:string" default="2" >
+</xs:attribute>
+      <xs:attribute name="x_offset" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="width_offset" type="xs:string" default="-9" >
+</xs:attribute>
+      <xs:attribute name="height_offset" type="xs:string" default="-3" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="vsliderthumb" type="lzx:vsliderthumb" >
+</xs:element>
+  <xs:complexType name="vsliderthumb" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:button">
+      <xs:attribute name="showvalue" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="drag_min" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="drag_max" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="closebox" type="lzx:closebox" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the closebox class has its own resource </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="closebox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebutton">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="myday" type="lzx:myday" >
+</xs:element>
+  <xs:complexType name="myday" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basedatepickerday">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="radiogroup" type="lzx:radiogroup" >
+</xs:element>
+  <xs:complexType name="radiogroup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselist">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="Test" type="lzx:Test" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+  Test is the abstract interface class for all LZUnit tests.
+
+  It accumulates the results of the test and defines the various
+  assert methods that can be used to implement each test.
+
+  &lt;xref linkend="lz.TestCase"/&gt; and &lt;xref linkend="lz.TestResult"/&gt; extend this class to provide
+  functionality.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="Test" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:DebugObject">
+      <xs:attribute name="formatter" type="xs:string" default="new lz.text()" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseradiogroup" type="lzx:baseradiogroup" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Class baseradiogroup: a class representing the selected radiobutton,
+          that can have many radiobuttons associated with it </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseradiogroup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="event" type="lzx:event" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The sender in Laszlo's point-to-point event system.
+Events underly most of the functionality in OpenLaszlo applications. Unlike events in similar systems, OpenLaszlo's events are point-to-point, meaning that there is no general broadcast mechanism for events, and events do not trickle up or down the instance hierarchy. Instead, objects called &lt;handler&gt;s use LzDelegate.register() to register to receive events.
+
+An event is implicitly declared for every attribute of a class or instance and sent when that attribute is changed. So, for instance, if a class has an attribute foo, you can receive events when foo changes by registering for the onfoo event.
+
+Events are sent with a single argument, which usually conveys information about the property that changed. The default behavior of the LzEventable.setAttribute() method is to set the named property and send the event called "on" + property. This is general mechanism that updates constraints in a OpenLaszlo programs. For instance, when a view changes its x position, it sends the event onx with the new value for its x property.
+
+Example:
+&lt;handler name="onavalue" reference="eventSender" args="v"&gt;
+  this.setAttribute('x' , v);
+&lt;/handler&gt; 
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="event" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="name" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The name of the event </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="inittimer" type="lzx:inittimer" >
+</xs:element>
+  <xs:complexType name="inittimer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tabscontent" type="lzx:tabscontent" >
+</xs:element>
+  <xs:complexType name="tabscontent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetabscontent">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseformitem" type="lzx:baseformitem" >
+</xs:element>
+  <xs:complexType name="baseformitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basevaluecomponent">
+      <xs:attribute name="submitname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The name used when submitting the data of the form item.
+              If no submitname is given before oninit, the 'name' attribute is used.
+              Unlike the name attribute, submitname may be changed at runtime. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="submit" type="lzx:boolean" default="${enabled}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If submit is true, then the value of this element will be submitted
+              with the form.  By default, submit is true when enabled.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rollbackvalue" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Rollback value for the baseformitem. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onvalue" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent whenever checkbox value changes. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onchanged" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when baseformitem is changed. Only sent once when true
+              or once when false. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ignoreform" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the component will not inform its parent form
+             that it has changed. Useful in conjunction with submit=false </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="changed" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Boolean to determine whether the baseformitem was changed. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="emailvalidator" type="lzx:emailvalidator" >
+</xs:element>
+  <xs:complexType name="emailvalidator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basevalidator">
+      <xs:attribute name="toomanyatmarkErrorstring" type="xs:string" default="Too many @ characters in your email address." >
+</xs:attribute>
+      <xs:attribute name="missingperiodErrorstring" type="xs:string" default="The domain in your email address is missing a period." >
+</xs:attribute>
+      <xs:attribute name="missingatmarkErrorstring" type="xs:string" default="Missing the @ character in your email address." >
+</xs:attribute>
+      <xs:attribute name="incorrectlydomainErrorstring" type="xs:string" default="The domain in your email address is incorrectly formatted." >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datapoints" type="lzx:datapoints" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keywords private
+          datapoints for the chart </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datapoints" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="valuepoints" type="lzx:valuepoints" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+       Represents a value point in the chart
+       @access public
+       </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="valuepoints" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tip" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the tooltip value will be display when the mouse over the line </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the label will be display next to the line </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datay" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the y point will be draw </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datax" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the x point will be draw </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="stylishbutton" type="lzx:stylishbutton" >
+</xs:element>
+  <xs:complexType name="stylishbutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebutton">
+      <xs:attribute name="tint" type="lzx:color" default="0xD9DCF5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Control the look of the button. These attributes can and should
+              be controlled with css. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="texty" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ y position of text, for fine tuning </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showrightedge" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="showrightborder" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ whether to show highlight on left side of button </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showleftedge" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="showleftborder" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ whether to show shadow on right side of button </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rightresource" type="xs:string" default="stylishbutton_right_rsc" >
+</xs:attribute>
+      <xs:attribute name="middleresource" type="xs:string" default="stylishbutton_middle_rsc" >
+</xs:attribute>
+      <xs:attribute name="leftresource" type="xs:string" default="stylishbutton_left_rsc" >
+</xs:attribute>
+      <xs:attribute name="icony" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ y position of icon, for fine tuning.
+            if not specified, center the icon vertically. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iconname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ icon resource name prefix </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fontcolor" type="lzx:color" default="0x373B56" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fisheye" type="lzx:fisheye" >
+</xs:element>
+  <xs:complexType name="fisheye" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="start_size" type="xs:string" default="24" >
+</xs:attribute>
+      <xs:attribute name="halo_size" type="xs:string" default="20" >
+</xs:attribute>
+      <xs:attribute name="expanded_size" type="xs:string" default="100" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_scrubstate" type="lzx:_scrubstate" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+   enclosing view must have the following attributes:
+   stream  the stream to control, assume it is paused
+   min     min 'x' value
+   max     max 'x' value
+
+   @keywords private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="_scrubstate" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:state">
+      <xs:attribute name="x" type="xs:string" default="this.__scrubstate_getnewpos(                 this.immediateparent.getMouse( 'x' ) + this.__scrubstate_xdoffset)" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="microphone" type="lzx:microphone" >
+</xs:element>
+  <xs:complexType name="microphone" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:mediadevice">
+      <xs:attribute name="stream" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Mediastream to associate with the microphone, for audio recording. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="silencetimeout" type="lzx:number" default="-1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Silence timeout in ms, the amount of silent time signifying that 
+              silence has actually begun.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="silencelevel" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Silence level, 0-100, the amount of sound required to activate 
+              the microphone.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rate" type="lzx:number" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Rate in khz the microphone is using to capture sound, either 5, 8, 11, 22, or 44.
+              @keywords final  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="level" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Audio level, 0-100, the amount of sound detected by this microphone.
+              Reset to 0 when there is no audio (no activity or not allowed).
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="gain" type="lzx:number" default="50" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The amount the microphone boosts the signal.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="framesperpacket" type="lzx:number" default="6" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Number of Speex speech frames transmitted in a packet.
+              @keywords final  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="encodequality" type="lzx:number" default="6" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The quality of encoded speech quality when using the Speex codec.
+              Possible values are from 0 to 10.
+              @keywords final  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="echosuppression" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the microphone will attempt to use echo suppression.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="codec" type="xs:string" default="NellyMoser" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The codec to use, either 'NellyMoser' or 'Speex'.
+              @keywords final  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="image" type="lzx:image" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ image represents an image that can be loaded at runtime, either by specifying a URL directly or by binding to data</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="image" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="src" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The URL to load the image from.  May be set directly on this attribute or indirectly by specifying a datapath for this tag. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="prefix" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ an optional prefix URL to load from. If specified, the url will be appended to this prefix.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onsrc" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="lastloaded" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The last URL loaded by this image tag.  Used to prevent the same URL from loading twice.  
+              @keywords readonly</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="forcereload" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the same URL will be reloaded.  If false, the same URL will not load multiple times.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tooltipManager" type="lzx:tooltipManager" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      @topic Incubator
+      @subtopic Tooltip Manager
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="tooltipManager" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tooltip_obj" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onMouseOverDelegateArray" type="xs:string" default="[]" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onMouseOutDelegateArray" type="xs:string" default="[]" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="messages" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      @topic Incubator
+      @subtopic Tooltip Manager
+  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="messageMap" type="xs:string" default="[]" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="delay" type="lzx:number" default="1000" >
+</xs:attribute>
+      <xs:attribute name="component_identifier" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="databar" type="lzx:databar" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+    Render a bar or column of data in the chart</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="databar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="totalsets" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Total number of bar sets. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tooltip" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, will display additional information about data
+            in a popup when the cursor is placed over a bar.
+            (Tooltip to be developed in a future version.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="siblingbars" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The number of sibling bars. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drawaxis" type="xs:string" default="x" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The chart's direction.  (Set here as well for easier reference.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataresource" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The image to be loaded over the bar, if any. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bvalue" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Numerical value of bar. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="barspace" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The space between bars. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="barset" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This bar's group's set number. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="barnumber" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This bar's number in its series. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="animationinit" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Animation style for when bars appear. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basevalidator" type="lzx:basevalidator" >
+</xs:element>
+  <xs:complexType name="basevalidator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="trim" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="requiredErrorstring" type="xs:string" default="this field is required." >
+</xs:attribute>
+      <xs:attribute name="required" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isformvalidator" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="iserror" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="innercompornent" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="errorstring" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="autocompletecombobox" type="lzx:autocompletecombobox" >
+</xs:element>
+  <xs:complexType name="autocompletecombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="defaulttext" type="xs:string" default="Type Here" >
+</xs:attribute>
+      <xs:attribute name="contentpath" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="actuallyTyped" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labeledinputtext" type="lzx:labeledinputtext" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        A horizontal container for a right-aligned label and text field.
+        usage:
+            @START_CODE
+                &lt;labeledinputtext label="Title" datapath="details/@title" fieldwidth="50"/&gt;
+            @END_CODE
+
+        datapath should be set to resolve to a text value
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="labeledinputtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="textcolor" type="xs:string" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ color of text </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="multiline" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ set to true for multiline </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxlength" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Maximum length for the editable text field. Default is null
+              (no limit) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelwidth" type="lzx:number" default="68" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ column for right-aligned label </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelsize" type="xs:string" default="${detailslabel_style.fontsize}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ label font size </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelfont" type="xs:string" default="${detailslabel_style.font}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ label font </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelcolor" type="lzx:number" default="${detailslabel_style.textcolor}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ color of label </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the right-aligned label </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fontname" type="xs:string" default="Verdana, Arial, sans" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ font face </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fieldwidth" type="lzx:number" default="128" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ width of editable text field </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fieldheight" type="lzx:number" default="18" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ set this to larger if multiline is true </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dragstate" type="lzx:dragstate" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ this state provides standard 'drag' functionality to its immediateparent when applied </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="dragstate" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:state">
+      <xs:attribute name="drag_min_y" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the minimum value for the y attribute. Default : null, no minimum </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drag_min_x" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the minimum value for the x attribute. Default : null, no minimum </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drag_max_y" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the maximum value for the y attribute. Default : null, no maximum </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drag_max_x" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the maximum value for the x attribute. Default : null, no maximum </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drag_axis" type="xs:string" default="both" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 'x', 'y' or 'both' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetab" type="lzx:basetab" >
+</xs:element>
+  <xs:complexType name="basetab" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselistitem">
+      <xs:attribute name="tabpane" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The tabpane associated with this tab.
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_internalinputtext" type="lzx:_internalinputtext" >
+</xs:element>
+  <xs:complexType name="_internalinputtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:inputtext">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videolibraryicon" type="lzx:videolibraryicon" >
+</xs:element>
+  <xs:complexType name="videolibraryicon" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="over" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="maxHeight" type="xs:string" default="48" >
+</xs:attribute>
+      <xs:attribute name="icon" type="xs:string" default="video_no_icon_rsc" >
+</xs:attribute>
+      <xs:attribute name="aspectRatio" type="xs:string" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="TextTestCase" type="lzx:TextTestCase" >
+</xs:element>
+  <xs:complexType name="TextTestCase" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:TestCase">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="regionstyle" type="lzx:regionstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ style for a region
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="regionstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+      <xs:attribute name="image" type="xs:string" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ image path </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="gradient" type="xs:string" default="none" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 'none', 'linear', 'radial' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="color" type="lzx:color" default="0xFF0000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ RGB color on the axis line </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="view" type="lzx:view" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The &lt;view&gt; is the most basic viewable element in an OpenLaszlo application. Anything that is displayed on the canvas is a view or extends the view class. A view is a rectangle, which can be visible or invisible, and which can contain other views or display "resources" such as images, .swf files, or other supported media. One view controls one displayable resource. The view system is strictly hierarchical; that is, each view has a single parent but can have multiple children.  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="view" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="yscale" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Specifies this vertical scale for this and all child views. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="yoffset" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Specifies a translation point for drawing of this view. If the yoffset is set, then rotation and y position will be calculated by first adding the yoffset.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="y" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The vertical offset of this view's upper left corner from the upper left corner of its container  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="xscale" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Specifies this horizontal scale for this and all child views. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="xoffset" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Specifies a translation point for drawing of this view. If the xoffset is set, then rotation and x position will be calculated by first adding the xoffset.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="x" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The horizontal offset of this view's upper left corner from the upper left corner of its container.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="with" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="width" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The width of the view. Can be set to either a number, or null, to indicate that the view should be sized to hold its content. If the view is set to stretch its resource, the resource will be resized to the new value. When read, reflects the actual size of the view.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="visible" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	A value of true means that this view is shown. A value of false means that this view is hidden. Note that an otherwise clickable view that is not visible will have no click region and will not be clickable.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="visibility" type="xs:string" default="collapse" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	A value of "visible" means that this view is shown. A value of "hidden" means that this view is hidden. Setting this attribute to "collapse" means that the runtime will hide this view when: its opacity is zero, it has a datapath that does not match a node, or it is loading its media. In this case, the the value of the 'visible' attribute of the view will reflect the view's current visible state. 
+	One of: hidden|visible|collapse </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="valign" type="xs:string" default="top" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Sets the vertical alignment for the view to the given value. The alignment is based on the height of this view as compared to the height of the view's immediateparent. 
+	One of: 	"top" | "middle" | "bottom" | constraint </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="usegetbounds" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	True if this view requires a call to getBounds() for accurate width and height measurement. This may be necessary when an offset or rotation are applied.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="unstretchedwidth" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If stretches is not set to none, the width that this view would be if it weren't stretched. This attribute can be used to scale a view by a percentage of its original size, or to determine the aspect ratio for a view.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="unstretchedheight" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If stretches is not set to none, the height that this view would be if it weren't stretched. This attribute can be used to scale a view by a percentage of its original size, or to determine the aspect ratio for a view.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="totalframes" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The total number of frames for this view's resource. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tintcolor" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Sets the color offset, based on a hexadecimal color string, e.g. '#ff00ff'. See setColorTransform() for details. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="subviews" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	An array of the subviews that are children of this view. This is initialized to an empty array for views that have no subviews.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="stretches" type="xs:string" default="none" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Setting stretches causes a view to change its coordinate space so that everything it contains (resources and other views) fit exactly into the view's width and/or height. The default for this property is "none". This is used to resize a view's contents by setting its width and/or height. 
+	One of: 	"width" | "height" | "both" | "none" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="source" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The URL from which to load the resource for this view. If this attribute is set, the media for the view is loaded at runtime.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showhandcursor" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Show or hide the hand cursor for this view, if clickable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shadowdistance" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The distance for the drop shadow, in pixels </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shadowcolor" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The color for the drop shadow </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shadowblurradius" type="lzx:number" default="4" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The blur radius for the drop shadow, in pixels. A negative value will cause the shadow to be inset. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shadowangle" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The angle for the drop shadow, in degrees </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rotation" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The rotation value for the view (in degrees). Value may be less than zero or greater than 360.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resourcewidth" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The width of the resource that this view attached </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resourceheight" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The height of the resource that this view attached </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resource" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+A resource that is presented in the background of this view. The value can be either the name of a resource defined with the resource tag, a URL, or a pathname. If the value is a URL, the resource is requested when the view is displayed. If it's a pathname, the file named by the pathname is compiled into the application, and attached to this view.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ratio" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This element is only available in the splash SWF specific </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="proxyurl" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The url of the proxy server, if the app is running in proxied mode. proxyurl can be null, a URL string, or a function.
+
+    If the value is a string, treat it as a URL to the proxy server.
+    If the value is a function, it should return the URL of the proxy server.
+
+The default proxy policy references the proxyurl of the canvas.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="playing" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, this view is currently playing. Setting to true causes the view to play, false causes playback to stop. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pixellock" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	The view system supports sub-pixel positioning to enable smooth animation. This may be turned off to make the view snap to a pixel boundary by setting pixellock to true.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="opacity" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The opacity of the view's contents. 1.0 is opaque; 0.0 is totally transparent (invisible).  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ony" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+event for changes to view's y property </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onx" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+event for changes to view's x property </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onwidth" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+event for changes to view's width property </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onvisible" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when the view changes visibility (true/false) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ontouch" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The ontouch event is sent when a touch device receives a multitouch event. The value sent with the event is an array of objects with with two properties: clientX and clientY. Currently supported only in iOS on DHTML. Note that Android Webkit doesn't send multitouch events - see http://www.quirksmode.org/mobile/tableTouch.html </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ontimeout" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when the request to load media for the view times out </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onstop" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when a view's resource that is capable of playing is stopped. This is only called if stop is called directly; when a resource hits its last frame, the lz.view event onlastframe is called. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onshadowdistance" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when shadowdistance changes </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onshadowcolor" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when shadowcolor changes </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onshadowblurradius" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when shadowblurradius changes </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onshadowangle" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when shadowangle changes </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onremovesubview" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Event called when this view removes a subview </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onplaying" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when a view begins playing its resource </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onplay" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when a view begins playing its resource </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onopacity" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when a view changes its opacity </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmouseupoutside" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The onmouseup event is sent when the pointing device button is released outside the element it went down on. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmouseup" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The onmouseup event is sent when the pointing device button is released over an element. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmousetrackup" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when the mouse button is released over a view that is registered to an active track group. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmousetrackover" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when the mouse is over a view that is registered to an active track group. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmousetrackout" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when the mouse leaves the visible area of a view that previously sent an 'ontrackover' event. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmouseover" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The onmouseover event is sent when the pointing device is moved onto an element. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmouseout" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The onmouseout event is sent when the pointing device is moved so that is is no longer over an element. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmousedragout" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The onmousedragout event is sent when the pointing device is moved off the element while the button is down. down. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmousedragin" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The onmousedragin event is sent when the pointing device button has moved off the element and back on again while the button is down. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmousedown" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The onmousedown event is sent when the pointing device button is pressed over an element. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onloadratio" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sends a percentage (0-1) reflecting the amount of a media file that's been downloaded. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onload" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Send when the view finishes loading media. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onlastframe" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent when the view sets its frame (resource number) to the last frame. This can be used to find out when a streaming media clip is done playing. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onkeyup" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The onkeyup event is sent when this view has the focus and a key is released. This event is sent with the keycode for the key that went up. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onkeydown" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The onkeydown event is sent when this view has the focus and a key is pressed down. Multiple key down events are sent for a key that is held down. If you want the script executed only once, use onkeyup. This event is sent with the keycode for the key that is down.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onheight" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event for changes to view's height property</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ongesture" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The ongesture event is sent when a touch device receives a gesture event. The value sent with the event is an object with two properties: scale and rotation. Currently supported only in iOS on DHTML. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onframesloadratio" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sends a percentage (0-1) reflecting the number of frames downloaded.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onframe" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sent onidle while view is playing its resource</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onfocus" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The onfocus event is sent when an element receives focus either by the pointing device or by tabbing navigation.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onerror" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sent when there is an error loading the view's resource. The argument sent with the event is an error string.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ondblclick" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The ondblclick event is sent when the pointing device button is double clicked over an element.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oncornerradius" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sent when cornerradius changes</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oncontext" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sent when the drawing context is ready to use, which can take some time in IE DHTML.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onclip" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The onclip event is sent when the clip attribute of a view is changed</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onclickable" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event for changes to view's clickable property</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onclick" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   The onclick event is sent when the pointing device button is clicked over an element.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onblur" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The onblur event is sent when an element loses focus either by the pointing device or by tabbing navigation.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onbackgroundrepeat" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event for changes to view's backgroundrepeat property </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onaddsubview" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Event called when this view adds a subview </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mask" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Reference to closest masked view in the hierarchy at or above this one  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="loadratio" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	For views whose resource is loaded at runtime, ratio of the loaded bytes to the total bytes. This is a number between zero and 1.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="layout" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	A CSS declaration of property: value pairs of layout attributes, which are used to create a layout that is attached to this view. If there is a class property, it names the class of the layout to be created, otherwise &lt;simplelayout&gt; is used. To remove the previously set layout, use {'class': 'none'} Examples: layout="axis: x", layout="class: constantlayout", layout="axis: y", layout="axis: x; spacing: 5".  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="height" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The height of the view. Can be set to either a number, or null, to indicate that the view should be sized to hold its content. If the view is set to stretch its resource, the resource will be resized to the new value. When read, reflects the actual size of the view.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hassetwidth" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, then this view has an assigned or constrained width, and the view will not be sized to its contents.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hassetheight" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, then this view has an assigned or constrained height, and the view will not be sized to its contents.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hasdirectionallayout" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+If true, sprite will use TLF text framework class that supports bidirectional text layout. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="framesloadratio" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	For views whose resource is loaded at runtime, the ratio of the loaded frames to the total frames. This is a number between zero and 1.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="frame" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If this view has a multi-frame resource, this allows setting which resource frame is displayed. Defaults to the first frame (1). See also the resource attribute. Setting this attribute will change the frame that is being displayed by the resource associated with this view. The first frame of the resource is frame 1. Setting a view's 'donttrackplay' option to true will allow the view's resource to play without updating the value of the view's frame property. This can save CPU usage in cases where the application doesn't need to know what frame the resource is showing while it is playing.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fontstyle" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The style to use to render text fields that appear inside of this view. One of "plain", "bold" , "italic" or "bolditalic".  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fontsize" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Pixel size to use to render text which appears inside this view. The default is 8.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="font" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The font to use for any &lt;text&gt; or &lt;inputtext&gt; elements that appear inside this view. Like all the font properties (fontstyle and fontsize too) these properties cascade down the view hierarchy until a new value is specified.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="focustrap" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, this view "traps" the focus, for example in a window or dialog. See focus manager (lz.Focus) for more details.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="focusable" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, this view will receive focus events. See focus manager (lz.Focus) for more details.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fgcolor" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The foreground color of any &lt;text&gt; or &lt;inputtext&gt; elements that appear inside this view. To apply a color transform, see tintcolor. May be set to any valid CSS color specification. When read, will be read as the equivalent numeric value. To retrieve a CSS color specification, use this.presentAttribute('fgcolor', 'color'). Default is 0 (black).  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="cursor" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The cursor to display when the mouse is over this view. Any resource ID can be used as a cursor, or '' for the default cursor. This attribute can be set for any view with clickable=true.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="cornerradius" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The corner radius for the background, e.g. '4' or a list of up to 8 numbers '4 0 0 4 / 2 0 0 2'. Per http://www.w3.org/TR/css3-background/#the-border-radius the 8 values for each radii are given in the order top-left, top-right, bottom-right, bottom-left. If you use the '/' notation, the values before the slash are the horizontal radii, and the values after the slash are the vertical radii.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="contextmenu" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The context menu installed on this view </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="context" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	Contains a reference to the raw drawing context. The oncontext event is sent when the context is ready to use, which can take some time in IE DHTML.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="colortransform" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	color transforms everything contained in the view (except the background) by the transformation dictionary given in o. The dictionary has the following possible keys: o.redMultiplier: multiplier for red component (0 to 1) defaults to 1 o.redOffset: offset for red component (-255 to 255) defaults to 0 o.greenMultiplier: multiplier for green component (0 to 1) defaults to 1 o.greenOffset: offset for green component (-255 to 255) defaults to 0 o.blueMultiplier: multiplier for blue component (0 to 1) defaults to 1 o.blueOffset: offset for blue component (-255 to 255) defaults to 0 o.alphaMultiplier: multiplier for alpha component (0 to 1) defaults to 1 o.alphaOffset: offset for alpha component (-255 to 255) defaults to 0  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="clip" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	Clip the view's contents to its size. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="clickregion" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Setting to a vector-based resource changes the clickable hotspot for the mouse. Check capabilities.clickregion before using to avoid debugger warnings.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="clickable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, this view intercepts click events; otherwise they are passed to its container. This defaults to true if the view defines a mouse event handler or a cursor. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="center" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This element is only available in the splash SWF specific </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="capabilities" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+An object containing properties corresponding to the current runtime's capabilities. For example, capabilities.rotation is true in swf and recent versions of Safari and Firefox.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="cachebitmap" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	A value of true means that this view's bitmap will be cached, if available. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgcolor" type="lzx:color" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The background color of the view. Setting bgcolor to null will make the view transparent. May be set to any valid CSS color specification. When read, will be read as the equivalent numeric value. To retrieve a CSS color specification, use this.presentAttribute('bgcolor', 'color'). Default is null (transparent).  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundrepeat" type="xs:string" default="norepeat" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Setting backgroundrepeat causes a view to repeat its resource to fit the view's width and/or height. Can be 'repeat', 'repeat-x', 'repeat-y' or 'norepeat' per the CSS1 background-repeat style. 
+	One of: 	"repeat" | "repeat-x" | "repeat-y" | "norepeat" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="align" type="xs:string" default="left" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sets the alignment for the view to the given value. The alignment is based on the size of this view as compared to the size of the view's immediate parent. 
+	One of: 	"left" | "center" | "right" | constraint </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="aatabindex" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Set accessibility tab order </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="aasilent" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	Set accessibility silencing/unsilencing </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="aaname" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	Set accessibility description </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="aadescription" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="aaactive" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	Activate/inactivate children for accessibility </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="soap" type="lzx:soap" >
+</xs:element>
+  <xs:complexType name="soap" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:rpc">
+      <xs:attribute name="wsdl" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Required attribute that specifies WSDL to read for the SOAP
+              object. The value for wsdl should be an href. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="service" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The SOAP service to fetch. If not specified, the first service
+              encountered in the WSDL is used. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="responseheaders" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If set, the SOAP response header returned by the last
+              call. The value for this must be a dataset. Default is null. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="requestheaders" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The SOAP header to pass with each request. This can be either a
+              string or a dataset. Default is null. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="proto" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The prototypes that can be used to create objects. 
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="port" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The SOAP port to use. If not specified, the first SOAP port
+              encountered in the WSDL is used. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseform" type="lzx:baseform" >
+</xs:element>
+  <xs:complexType name="baseform" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="onchanged" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when baseformitem is changed. Only sent once when true
+              or once when false. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="formdata" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Holds a reference to each datacomponent contained within the
+              form. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="changed" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Boolean to determine whether the baseformitem was changed. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rangeslider" type="lzx:rangeslider" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="rangeslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:custombaseslider">
+      <xs:attribute name="minx" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="minvalue" type="xs:string" default="this.minlimit + this.leftknob.x * this.valueratio" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxx" type="xs:string" default="${parent.rightknob.x}" >
+</xs:attribute>
+      <xs:attribute name="maxvalue" type="xs:string" default="this.minlimit + this.rightknob.x * this.valueratio" >
+</xs:attribute>
+      <xs:attribute name="isMouseDown" type="xs:string" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mediadevice" type="lzx:mediadevice" >
+</xs:element>
+  <xs:complexType name="mediadevice" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="devicename" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Name of the device. 
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="deviceindex" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Zero-based index of the device, or null for user's default device. 
+              Default is null, which selects the default device. 
+              When the default device is initialized, deviceindex is updated to
+              its actual index. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="debug" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ set to true for verbose debugging messages </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="capturing" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Boolean flag that controls if the media device
+              is currently capturing input. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="allowed" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Tracks whether the user has allowed device access. 
+              True after user has accepted security dialog,
+              false if the user denies access with security dialog.
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="active" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Flag that tracks if there's device activity (audio sound, video motion). 
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="legenditem" type="lzx:legenditem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+    individual legend item </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="legenditem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="textsize" type="lzx:number" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The font size of the label text for this item in the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of the label text for this item in the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="linevisible" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="itemvalue" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The value for this item in the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="itemlabel" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The text label for this item. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="identifier" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+    individual legend item </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iconshape" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The shape of the icon drawn. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iconcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color for the icon. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hlcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The highlight color to be used when this item has been
+            moused over. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="face" type="lzx:face" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Defines a font face or style within the font family that the outer element defines.
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="face" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="style" type="xs:string" default="bold|italic|bold italic|italic bold|plain" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Corresponds to the fontstyle attribute of a view.
+    One of: 	bold | italic | bold italic | italic bold | plain  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="src" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The path of a file that contains the source for this object. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="vslidertrack" type="lzx:vslidertrack" >
+</xs:element>
+  <xs:complexType name="vslidertrack" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simplelayout" type="lzx:simplelayout" >
+</xs:element>
+  <xs:complexType name="simplelayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to use between each view in the layout </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to inset the first view controlled by the layout</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The axis in which this layout operates. One of 'x' or 'y'. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="newvscrollbar" type="lzx:newvscrollbar" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The vertical scrollbar manipulates the y position of a target view that is
+      clipped by its parent, creating a scrolling effect when the user
+      clicks up/down arrows, clicks on the scroll track or drags the thumb. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="newvscrollbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basescrollbar">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="silverstyle" type="lzx:silverstyle" >
+</xs:element>
+  <xs:complexType name="silverstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:style">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="viewspool" type="lzx:viewspool" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+     Represents a pool of view </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="viewspool" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="viewclass" type="xs:string" default="$once{null}" >
+</xs:attribute>
+      <xs:attribute name="used" type="xs:string" default="$once{[]}" >
+</xs:attribute>
+      <xs:attribute name="unused" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+     Represents a pool of view </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="parentview" type="xs:string" default="$once{null}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="param" type="lzx:param" >
+</xs:element>
+  <xs:complexType name="param" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="value" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Value to use for parameter. A &lt;code&gt;getValue()&lt;/code&gt; method can be declared
+              inside param to use its return as the parameter value. If both
+              &lt;code&gt;value&lt;/code&gt; attribute and &lt;code&gt;getValue()&lt;/code&gt; method are declared, param will use
+              &lt;code&gt;getValue()&lt;/code&gt;. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datepickerday" type="lzx:datepickerday" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is the implementation of the datepickerday for 
+          the datepicker </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datepickerday" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basedatepickerday">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="columnchartplotarea" type="lzx:columnchartplotarea" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keywords private
+     plotarea of column chart </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="columnchartplotarea" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:virtualdrawview">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="multiplefileupload" type="lzx:multiplefileupload" >
+</xs:element>
+  <xs:complexType name="multiplefileupload" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="numfields" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ numbers of fileuploadlist   </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="erroroccured" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Error occured</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="newhscrollbar" type="lzx:newhscrollbar" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A scrollbar manipulates the x or y position of a target view that is
+      clipped by its parent, creating a scrolling effect when the user clicks
+      up/down arrows, clicks on the scroll track or drags the thumb. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="newhscrollbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basescrollbar">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="numbervalidator" type="lzx:numbervalidator" >
+</xs:element>
+  <xs:complexType name="numbervalidator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basevalidator">
+      <xs:attribute name="toosmallErrorstring" type="xs:string" default="This number is too small." >
+</xs:attribute>
+      <xs:attribute name="toobigErrorstring" type="xs:string" default="This number is too large." >
+</xs:attribute>
+      <xs:attribute name="notnumberErrorstring" type="xs:string" default="This field contains invalid characters." >
+</xs:attribute>
+      <xs:attribute name="notintErrorstring" type="xs:string" default="Enter integer value." >
+</xs:attribute>
+      <xs:attribute name="minvalue" type="lzx:number" default="null" >
+</xs:attribute>
+      <xs:attribute name="maxvalue" type="lzx:number" default="null" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="real" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetabelement" type="lzx:basetabelement" >
+</xs:element>
+  <xs:complexType name="basetabelement" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselistitem">
+      <xs:attribute name="onopenstop" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sent at the end of the open animation. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onopenstart" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sent at the start of the open animation. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onclosestop" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sent at the end of the close animation. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onclosestart" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sent at the start of the close animation. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minheight" type="lzx:number" default="22" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The height the tab will close to. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="itemclassname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ When creating tabelements via additem, this is the class that gets
+              created. The default value is the class of the first tabelement or
+              its descendant. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hideonclose" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Content is automatically hidden when tabelement is closed. To
+              override, set this attribute to false. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="headerheight" type="lzx:number" default="$once{minheight}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The height of the header. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="contentvisible" type="xs:string" default="$once{! hideonclose}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is set to true when a basetabelement begins to open and is
+              set to false when it finishes its close. Default is the inverse of
+              hideonclose. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetree" type="lzx:basetree" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An abstract base class to build tree controls. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basetree" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="yindent" type="lzx:number" default="20" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Spacing to indent trees on the y-axis. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="xindent" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Spacing to indent trees on the x-axis. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="toggleselected" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Meaningful only in root. Flag to toggle selected nodes.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showroot" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Meaningful only in root tree. If false, the root item is invisible
+              and its children are displayed.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selected" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Check to see if this tree is selected. Default is false, except
+              for the root of a tree, which its selected attribute is set to
+              true. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="recurse" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Meaningful only with data replication. If true, it will
+              recursively follow the datapath's children.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="open" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Check to see if this tree is open. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselected" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event gets triggered whenever this tree is selected. The
+              value of the selection (true or false) is sent with this
+              event.
+              Note the args of this has changed from the previous release. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event gets triggered whenever this tree is selected. This
+              tree is sent with the event. The tree root also receives this
+              event. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onopen" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event gets triggered whenever this tree is open. The open
+              value of this tree is also sent. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onfocused" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event gets triggered whenever this tree is focused. The value
+              of the focus (true or false) is sent with this event. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="multiselect" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Meaningful only in root. Whether to multiselect items.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isleaf" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, this basetree is a leaf node. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="focusselect" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Meaningful only in root. Flag to select a tree on focus.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="focusoverlay" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Meaningful only in root. If focusselect is false and focusoverlay
+              is true, then focus has a visual bracket overlay over the focused
+              tree. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="focused" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, this tree is focused.
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="closesiblings" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Flag to close other siblings when this tree is open. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="closechildren" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Close all immediate children when this tree is closed. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoscroll" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Auto scroll if tree is clipped. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="debug" type="lzx:debug" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+     @lzxname debug
+     @keywords private_constructor
+     @access public
+     @topic LZX
+     @subtopic Debugging
+     @devnote NOTE [2008-11-25 ptw] Dummy class to hold documentation for debug tag
+     @devnote TODO [2008-11-26 ptw] Make this the real class!
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="debug" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datacolumn" type="lzx:datacolumn" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ datacolumn contain a list of values of a series. List of values typically are data for x series,
+        y series, tooltip series and datalabel series.
+        @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datacolumn" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="values" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ array of data representing the series values </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labeldatapath" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the name of the label in the datapath for the series </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datatype" type="xs:string" default="string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ type of data: string or number </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datadone" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ true when data had been loaded at least once </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="columndatapath" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the name of the column in the datapath for the series </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="hsplitpane" type="lzx:hsplitpane" >
+</xs:element>
+  <xs:complexType name="hsplitpane" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sizer_width" type="xs:string" default="5" >
+</xs:attribute>
+      <xs:attribute name="rhs_placed" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="lhs_width_start" type="xs:string" default="180" >
+</xs:attribute>
+      <xs:attribute name="lhs_placed" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="lhs_min_width" type="xs:string" default="10" >
+</xs:attribute>
+      <xs:attribute name="lhs_max_width" type="xs:string" default="${this.width-20}" >
+</xs:attribute>
+      <xs:attribute name="bordersize" type="xs:string" default="1" >
+</xs:attribute>
+      <xs:attribute name="bordercolor" type="lzx:color" default="0x000000" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mediastream" type="lzx:mediastream" >
+</xs:element>
+  <xs:complexType name="mediastream" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="url" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The url of the mediastream, maybe be relative URL, 
+          for example: http://localhost/myvideo.flv, or simply myvideo.flv
+          when type="rtmp" the url is always relative to the rtmpconnection.
+          @type String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="type" type="xs:string" default="http" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Protocol "rtmp" or "http".
+          @type String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="totaltime" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Total length (in seconds) of mediastream currently playing.
+          @type Number
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="time" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Current time of mediastream currently playing or recording (in seconds)
+          @type Number
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="streamname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The rtmp streamname (without .flv suffix).
+          @type String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rtmp" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The rtmp connection to use (defaults to the first one created).
+          @type lz.rtmpconnection
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="recording" type="xs:string" default="${this.mode == 'recording'}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True if recording right now.
+          @type Boolean 
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="progress" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Progress of mediastream currently downloading.
+          (from 0 for none to 1 for all).
+          @type Number
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="playing" type="xs:string" default="${(this.mode == 'playing') &amp;&amp; (!this.paused)}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True if playing right now.
+          @type Boolean   
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="paused" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True to pause playback. Named this way to pun with paused for animators.
+          @type Boolean
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onstop" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when playing or recording stops.
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onstart" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when playing or recording starts.
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmetadata" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when metadata is received, whose parameter is a 
+    dictionary of metadata.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oninsufficientbandwidth" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when insufficient bandwidth.
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oncuepoint" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when a cue point occurs,
+          whose parameter is a dictionary of metadata.
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mutevideo" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True iff video is muted.
+          @type Boolean 
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="muteaudio" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True iff audio is muted.
+          @type Boolean 
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mode" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Mode: "" if doing nothing, "playing" if playing,
+          "broadcasting" if can be received, "recording" if recording.
+          Recording also implies can be received, i.e., broadcasting. 
+          Pausing does not affect the mode, unlike stopping.
+          @type String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mic" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A reference to the microphone. This must be set if broadcasting.
+          This is set automatically if the stream is a child of a videoview.
+          @type lz.microphone
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fps" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The current frames per second for playing video.
+          @type Number
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="debug" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ When true, print extra info to the debugger.
+          @type Boolean
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="cam" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A reference to the camera. This must be set if broadcasting.
+          This is set automatically if the stream is a child of a videoview.
+          @type lz.camera
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="buffertime" type="lzx:number" default="0.1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Amount of time (in seconds) to buffer before starting to display the 
+          stream.  For a publishing stream, bufferTime specifies how long the 
+          outgoing buffer can grow before the application starts dropping 
+          frames.
+          @type Number
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="broadcasting" type="xs:string" default="${(this.mode == 'broadcasting') || (this.mode == 'recording')}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True if broadcasting right now.
+          @type Boolean 
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autorewind" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, video will automatically rewind to the beginning
+          (and remain in a paused state) when playback ends.
+          @type Boolean
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoplayStart" type="xs:string" default="'either'" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Autoplay start argument passed to mediastream.play().
+          See the mediastream.play documentation for its values. 
+          @type String
+          @accesss public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoplayReset" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Autoplay reset argument passed to mediastream.play(). 
+          See the mediastream.play documentation for its values. 
+          @type Boolean
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoplayPause" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Autoplay pause argument passed to mediastream.play().
+          See the mediastream.play documentation for its values. 
+          @type Boolean
+          @access public
+     </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoplayLength" type="xs:string" default="'end'" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Autoplay length argument passed to mediastream.play(). 
+          See the mediastream.play documentation for its values. 
+          @type String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoplay" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, video will start playing as soon as url is set.
+          @type Boolean
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_plainfloatshadow" type="lzx:_plainfloatshadow" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The shadows width and height are set to the width and height of the view
+          it is trying to apply a shadow to.
+          @keywords private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="_plainfloatshadow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="shadowsize" type="xs:string" default="1.5" >
+</xs:attribute>
+      <xs:attribute name="offsety" type="xs:string" default="10" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="scrollbar" type="lzx:scrollbar" >
+</xs:element>
+  <xs:complexType name="scrollbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basescrollbar">
+      <xs:attribute name="disabledbgcolor" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If this is defined, it will be used as the scrollbar's background
+          color when it is disabled. If not provided, the scrollbar will use
+          the bgcolor of its closest parent that has a bgcolor defined.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="setter" type="lzx:setter" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A tag to declare or override attribute setter methods. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="setter" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="name" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A tag to declare or override attribute setter methods. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="args" type="xs:string" >
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="basedatepicker" type="lzx:basedatepicker" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Abstract class for the datepicker.  The basedatepicker class
+          shows the days of the week in a typical month based layout.  Extend
+          this class to create a full featured UI of a datepicker, or just use
+          the datepicker component.
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basedatepicker" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="yinset" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The number if pixels from this.y to show the datepicker days 
+              @keywords public 
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="xinset" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The number if pixels from this.x to show the datepicker days 
+              @keywords public 
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="weekclass" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The weekclass to use for this basedatepicker 
+              @keywords public 
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showingyear" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The year that is currently showing in the datepicker.
+              @keywords public
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showingmonth" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The month that is currently showing in the datepicker.
+              @keywords public
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showingdate" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A Date object which represents the month to be shown. 
+              @keywords public 
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selecteddatepickerday" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The datepickerday which has been selected. 
+              @keywords public  
+           </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selecteddate" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The Date that is currently selected.
+              @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="latestdate" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The latest date that is selectable. 
+              @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hasfocus" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="earliestdate" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The earliest date that is selectable. 
+              @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dayclass" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The dayclass to use for this basedatepicker 
+              @keywords public 
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorbox" type="lzx:colorbox" >
+</xs:element>
+  <xs:complexType name="colorbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="obj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="color" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chartbgstyle" type="lzx:chartbgstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ style for chart background
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chartbgstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="myslider" type="lzx:myslider" >
+</xs:element>
+  <xs:complexType name="myslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:slider">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chartlegend" type="lzx:chartlegend" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A legend for charts and graphs. It is imperative
+        that this is declared at the very end of a chart.
+        (Of beta quality.) Due to a couple bugs in drawview,
+        performance is spotty in DHTML. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chartlegend" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="titletextsize" type="lzx:number" default="12" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Size of the legend title's text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="titleposition" type="xs:string" default="left" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The position of the title: left, right, center. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="titlecolor" type="lzx:color" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of the legend title's text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textsize" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Size of the text in legend items. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textcolor" type="lzx:color" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of the text in legend items. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resizetodata" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to resize the legend to the data.  If not, this will
+            use the specified width and height for the legend, and fit
+            legend items into this size to the best of its ability.  If so,
+            this will use a rough guess at legend item dimensions, and
+            resize the legend.  Accepted values: "tall", "wide", "$once{null}".
+            "tall" will make a taller legend, "wide" will make a wider legend,
+            "$once{null}" will not resize. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="posit" type="xs:string" default="right" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The position of the legend: left, right, top, bottom, manualleft,
+            manualright, manualtop, manualbottom.
+            If left or right, the legend will behave as though
+            resizetodata="tall" is in effect.  If top or bottom,
+            the legend will behave as though resizetodata="wide" is
+            in effect.  If manual, additional values must be set to
+            place and size legend, and the legend will fit the
+            legenditems within the legend to the best of its ability. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pieradius" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Radius of the pie.  This helps determine placement. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="piepieces" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Pie pieces associated with this legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="piececolors" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Respective piece colors. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ltitle" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The legend title, if any. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendy" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If posit is 'manual', this sets the y coordinate of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If posit is 'manual', this sets the x coordinate of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendwidth" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If posit is 'manual', this sets the width of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendvalues" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The values to use in the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendheight" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If posit is 'manual', this sets the height of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="itemnums" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Number of items in the legend. (a.k.a. Number of pie pieces.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hlcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The highlight color of individual legend items. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="charttype" type="xs:string" default="$once{typeof linechart != 'undefined' ?                 (parent instanceof lz.linechart ? 'line' : null) : null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The type of chart associated with this legend.
+            Currently, only needs to be specified if this
+            is used on a piechart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="centery" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Center x coordinate of the pie.  This helps determine
+            placement. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="centerx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Center x coordinate of the pie.  This helps determine
+            placement. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the border around the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="border" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of the border around the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background color of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetabpane" type="lzx:basetabpane" >
+</xs:element>
+  <xs:complexType name="basetabpane" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="tabclass" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The tabclass to use to instantiate its associated tab. This
+              overrides the basetabs tabclass. Leave undefined here so that
+              basetabs can have it.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tab" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The tab associated with this basetabpane.
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selected" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If a basetabpane is selected, then it will be shown.
+              Its associated tab will be also be selected. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_top" type="lzx:number" default="${parent.inset_top}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Top inset for basetabpane in tabs content. Default is basetabs's
+              inset_top. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_right" type="lzx:number" default="${parent.inset_right}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Right inset for basetabpane in tabs content. Default is basetabs's
+              inset_right. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_left" type="lzx:number" default="${parent.inset_left}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Left inset for basetabpane in tabs content. Default is basetabs's
+              inset_left. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_bottom" type="lzx:number" default="${parent.inset_bottom}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Bottom inset for basetabpane in tabs content. Default is basetabs's
+              inset_bottom. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_dbg_lzvdrag" type="lzx:_dbg_lzvdrag" >
+</xs:element>
+  <xs:complexType name="_dbg_lzvdrag" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:state">
+      <xs:attribute name="ydoffset" type="xs:string" default="this.getMouse( 'y' )" >
+</xs:attribute>
+      <xs:attribute name="y" type="xs:string" default="${this.immediateparent.getMouse( 'y' ) - this.ydoffset}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="b" type="lzx:b" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="b" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+  </xs:complexType>
+<xs:element name="scrolledittext" type="lzx:scrolledittext" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Implements visual baseedittext with scrollbar. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="scrolledittext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseedittext">
+      <xs:attribute name="vscrollbarclassname" type="xs:string" default="vscrollbar" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Name of class to instantiate for vertical scroll bar.
+              @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pos" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="maxtextheight" type="xs:string" default="${this.lineheight * this.maxscroll}" >
+</xs:attribute>
+      <xs:attribute name="maxheight" type="xs:string" default="${this.height + this.maxtextheight}" >
+</xs:attribute>
+      <xs:attribute name="border" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Implements visual baseedittext with scrollbar. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="a" type="lzx:a" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="a" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="target" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The value of this attribute determines where the link target will be displayed. The interpretation is the same as in HTML, where the "current frame" is the frame containing the LZX application. The value must be a name beginning with an alphabetic character, or one of the following:
+
+_blank
+    The user agent should load the designated document in a new, unnamed window. 
+_parent
+    The user agent should load the document into the full, original window (thus canceling all other frames). This value is equivalent to _self if the current frame has no parent. 
+_self
+    The user agent should load the document in the same frame as the element that refers to this target. 
+_top
+    The user agent should load the document into the immediate FRAMESET parent of the current frame. This value is equivalent to _self if the current frame has no parent. 
+
+	 </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="href" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	The link target </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="linechart" type="lzx:linechart" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A chart class that renders as lines.
+      Inherits from the chart class.
+      (Warning: Of beta quality.)
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="linechart" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basechart">
+      <xs:attribute name="onminimum" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whenever minimum, maximum, altminimum and altmaximum are changed, the
+            chart needs to be redrawn entirely.  (Normally, tick and data labels aren't
+            redrawn, because it would be far too huge a resource drag to continually
+            break down and rebuild them whenever a person zoomed in.  Instead, they're
+            constrained to scale to the appropriate distances from each other.)  When
+            the mins and maxes are changed, however, the scaling gets thrown off for
+            existing objects.  These handlers ensures that when these values are changed,
+            the labels are broken down and redrawn. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmaximum" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onaltminimum" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onaltmaximum" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="drawready" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Line drawview.  This draws all the lines of the chart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="sessionrpc" type="lzx:sessionrpc" >
+</xs:element>
+  <xs:complexType name="sessionrpc" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:rpc">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="styleparser" type="lzx:styleparser" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+This class complete the chart style class in case the developer has not defined the chart styles </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="styleparser" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="style" type="xs:string" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The user's defined style. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isleaf" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Test if the current style's node has no more children </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="haschildren" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Test if the current style's node has children </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaultstyle" type="xs:string" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The dafault defined style. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tickstyle" type="lzx:tickstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ tickstyle is used by the axis style to render major and minor ticks on a chart.
+     NOTE: tickstyle extends linestyle
+     @access public
+     </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="tickstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:linestyle">
+      <xs:attribute name="position" type="xs:string" default="inside" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ inside | outside | centered | none  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="length" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ length of tick in pixels perpendicualr to the axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="constantboundslayout" type="lzx:constantboundslayout" >
+</xs:element>
+  <xs:complexType name="constantboundslayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="value" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The constant value that is applied to the attribute
+              ( defined in 'axis' as 'x' or 'y' ) of each subview in the layout. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The axis in which this layout operates either 'x' or 'y'.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="printer" type="lzx:printer" >
+</xs:element>
+  <xs:complexType name="printer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="i" type="lzx:i" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="i" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+  </xs:complexType>
+<xs:element name="valuepointstyle" type="lzx:valuepointstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ valuepointstyle is used to set style to the 
+     NOTE: valuelinestyle extends basestyle
+     @access public
+     </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="valuepointstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="u" type="lzx:u" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="u" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+  </xs:complexType>
+<xs:element name="hscrollbar" type="lzx:hscrollbar" >
+</xs:element>
+  <xs:complexType name="hscrollbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basescrollbar">
+      <xs:attribute name="disabledbgcolor" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If this is defined, it will be used as the scrollbar's background
+          color when it is disabled. If not provided, the scrollbar will use
+          the bgcolor of its closest parent that has a bgcolor defined.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="legend" type="lzx:legend" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+     simple legend class
+     @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="legend" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="verticalgap" type="lzx:number" default="4" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="topmargin" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="styleBorder" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the style will be applied tho the border legend box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rightmargin" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="position" type="xs:string" default="right" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates where the legend box will be positioned, default: right </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmouseup" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse up event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmouseover" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse over event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmouseout" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse out event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmousedown" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse down event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmouseclick" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse click event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendborder" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates if legend box will have a border, default: true </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendFontsize" type="lzx:size" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the Font size wiil be used in the legend item text, default: 10px </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendFontcolor" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the Font color wiil be used in the legend item text, default: black </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendFont" type="xs:string" default="serif" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the Font will be used in the legend item text </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="leftmargin" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fillColor" type="lzx:color" default="0xFFFFFF" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Allow to set the fill color from the legend tag </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="direction" type="xs:string" default="vertical" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates how the legend items will be displayed, default: vertical </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="chartClassName" type="xs:string" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="chart" type="xs:string" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Takes the relationship with the chart </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bottommargin" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderWidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Allow to set the line width from the legend tag </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderColor" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Allow to set the color line from the legend tag </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="p" type="lzx:p" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="p" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+  </xs:complexType>
+<xs:element name="library" type="lzx:library" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The &lt;library&gt; tag defines the root element of a library file. An application can use the &lt;include&gt; tag to include the code in a library file.
+
+See the Guide for a complete discussion. Also see the &lt;include&gt; tag. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="library" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="validate" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If false, disables validation against the schema during compilation. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="proxied" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The &lt;library&gt; tag defines the root element of a library file. An application can use the &lt;include&gt; tag to include the code in a library file.
+
+See the Guide for a complete discussion. Also see the &lt;include&gt; tag. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="javarpc" type="lzx:javarpc" >
+</xs:element>
+  <xs:complexType name="javarpc" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:rpc">
+      <xs:attribute name="scope" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ One of 'session', 'webapp', or 'none' to set the scope of the
+              remote object. This attribute must be set before creating or
+              loading the object. If scope is 'session' or 'webapp', name or
+              attributename must be set. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="remoteclassname" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The remote class name associated with the remote object. This must
+              be set if creating the remote object. If loading the object, the
+              classname will be set during onload. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="objectreturntype" type="xs:string" default="pojo" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Used to determine what server-side object member values are
+              returned to the client. One of 'pojo' (returns public member
+              values) or 'javabean' (returns members that have associated
+              getters). Default is 'pojo' (plain old java object). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="loadoption" type="xs:string" default="loadcreate" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ One of 'loadcreate', 'loadonly', or 'create'. 'Loadcreate' tries
+              to load javarpc object if it exists in the server, else it creates
+              it before loading. 'Loadonly' will only load object if it exists,
+              else an error is returned. 'Create' will always create the object
+              in the server. Default is 'loadcreate'. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="createargs" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Used if loadoption='loadcreate' or loadoption='create'. Arguments
+              to construct remote object with. The value passed in must be an
+              array, e.g., [1, 'mystring', 1.45]. Default is null. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="attributename" type="xs:string" default="$once{this.name}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Attribute name of server remote object. Name or attributename must
+              be set when scope is 'session' and 'webapp'. Default is the name
+              of this object. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chart" type="lzx:chart" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        chart is the base class representing a chart. In general,
+        this class is not instantiated directly. A chart contains 
+            at least one dataseries element 
+            at least one axis element 
+        The chart needs to look at its dataseries children and pass 
+        the relevant dataseries to each axis. Relevent dataseries 
+        for the chart must have columns for each of the axes 
+        that the chart cares about.  
+        @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chart" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="zoomEnabled" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable zoom</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="verticalGap" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The vertical blank space between components. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="valueregionsenabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable value region </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="valuepointsenabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable value points </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="valuelinesenabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable value lines </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="topMargin" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The blank space bordering the top of the chart area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rightMargin" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The blank space bordering the right side of the chart area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="plotarea" type="xs:string" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="leftMargin" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The blank space bordering the left side of the chart area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="initdone" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ subview have  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="horizontalGap" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The horizontal blank space between components. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaultstyle" type="xs:string" default="${defaultchartstyle}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The default style to be applied to the chart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaultRightMargin" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The default blank space bordering the right side of the chart area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datatipEnabled" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable tooltip for data </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datatipColumn" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ data column name of the tooltip </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datalabelEnabled" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable data label </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datalabelColumn" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ data column name of the data label </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="databorderEnabled" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="dataPointsEnabled" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable data point(data marker) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bottomMargin" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The blank space bordering the bottom of the chart area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="resizestate" type="lzx:resizestate" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ resizes its immediateparent in response to mouse events, when applied </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="resizestate" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:state">
+      <xs:attribute name="width" type="xs:string" default="${this.immediateparent.getMouse( 'x' )- this.__resize_xroffset}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="height" type="xs:string" default="${this.immediateparent.getMouse( 'y' )- this.__resize_yroffset}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lzcombobox" type="lzx:lzcombobox" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Subclass of basedatacombobox with laszlo mail look. See basedatacombobox for
+          details. Usage:
+          &lt;code&gt;
+          &lt;dataset name="dsHours"&gt;
+              &lt;item value="1"&gt;1&lt;/item&gt;
+              &lt;item value="2"&gt;2&lt;/item&gt;
+              &lt;item value="3"&gt;3&lt;/item&gt;
+              &lt;item value="4"&gt;4&lt;/item&gt;
+              &lt;item value="5"&gt;5&lt;/item&gt;
+              &lt;item value="6"&gt;6&lt;/item&gt;
+              &lt;item value="7"&gt;7&lt;/item&gt;
+              &lt;item value="8"&gt;8&lt;/item&gt;
+              &lt;item value="9"&gt;9&lt;/item&gt;
+              &lt;item value="10"&gt;10&lt;/item&gt;
+              &lt;item value="11"&gt;11&lt;/item&gt;
+              &lt;item value="12"&gt;12&lt;/item&gt;
+          &lt;/dataset&gt;
+
+          &lt;lzcombobox width="50" shownitems="3" itemdatapath="dsHours:/item"&gt;
+              &lt;handler name="onselect" args="dptr"&gt;
+                  Debug.write('value:', this.value);
+                  Debug.write('datapointer:', dptr);
+              &lt;/handler&gt;
+          &lt;/lzcombobox&gt;
+          &lt;/code&gt;
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="lzcombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basedatacombobox">
+      <xs:attribute name="tooltip" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ tooltip text, if any </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="texty" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="textx" type="xs:string" default="8" >
+</xs:attribute>
+      <xs:attribute name="frnum" type="xs:string" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="splash" type="lzx:splash" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Controls the presentation while the application is loading.  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="splash" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="y" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="x" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="resource" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="ratio" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="persistent" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Controls the presentation while the application is loading.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="center" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="ticks" type="lzx:ticks" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="ticks" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="numticks" type="xs:string" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="opttree" type="lzx:opttree" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A keyboard navigable (with arrow keys) tree control that supports 
+         selection and dynamic data loading. This tree must be backed by an
+         XML DOM datastructure and presented within a clipping region. 
+         
+         The datapath for an opttree must resolve to a single LzDataElement
+         which is the undisplayed root of the tree. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="opttree" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="openattrpath" type="xs:string" default="@__OPTTREE_META_open" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ (Protected) An xpath that selects the openattr attribute from
+              a node. This should match openattr but prepend the '@' symbol.
+              This cannot be when=always or when=once because it is used as
+              a reference in a $path expression in baseopttreenode </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="openattr" type="xs:string" default="__OPTTREE_META_open" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ (Protected) The attribute name to use in the data to mark a
+              a node as open.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="nodepath" type="xs:string" default="*" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The xpath expression to use to retrieve nodes out of the 
+              datapath. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="nodelist" type="xs:string" default="nodecollection" >
+</xs:attribute>
+      <xs:attribute name="nodecollection" type="xs:string" default="${ opttreecontroller.nodelist }" >
+</xs:attribute>
+      <xs:attribute name="nodeclass" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The name of the class to use to represent nodes in the tree.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="movedel" type="xs:string" default="$once{ new lz.Delegate( this, '_updatePos' ) }" >
+</xs:attribute>
+      <xs:attribute name="highlighted" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The keyboard nav highlighted baseopttreenode or null. This
+              attribute is read-only. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dragged" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="dragee" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="depthattrpath" type="xs:string" default="@__OPTTREE_META_depth" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ (Protected) An xpath that selects the depthattr attribute from
+              a node. This should match depthattr but prepend the '@' symbol.
+              This cannot be when=always or when=once because it is used as
+              a reference in a $path expression n baseopttreenode </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="depthattr" type="xs:string" default="__OPTTREE_META_depth" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ (Protected) The attribute name to use in the data to mark a
+              a node's depth in the tree hierarchy </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lzedittext" type="lzx:lzedittext" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Implements the laszlo look of baseedittext. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="lzedittext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseedittext">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="piepiece" type="lzx:piepiece" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private 
+   Represents a single pie slice in the chart </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="piepiece" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="yRadius" type="lzx:number" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The y radius of the slice. default = null </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tooltip" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private 
+   Represents a single pie slice in the chart </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="radius" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The length of the radius in pixels </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="piecevalue" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The numeric value of the piece. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pieceradius" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The radius of the whole pie. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pieceopacity" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The opacity of the piece.  Determined by attributes on dataseries. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="piececolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of the piece.  Determined by attributes on dataseries. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onexploded" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The events that handle explosion of pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The data label of this pie slice </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="exploded" type="lzx:boolean" default="${parent.wedgeover == this}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether this piece is moused over or not. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="explode" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to actually move the piece outward when the mouse is over it. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="centery" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The y coordinate of the center of the pie. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="centerx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The x coordinate of the center of the pie. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the border of the piece.  Determined by attributes
+            on dataseries. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordercolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of the border of the piece.  Determined by attributes
+            on dataseries. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="arcvalue" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The segment of the circle that defines the current pie slice </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="angle" type="lzx:number" default="25" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datevalidator" type="lzx:datevalidator" >
+</xs:element>
+  <xs:complexType name="datevalidator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basevalidator">
+      <xs:attribute name="invalidyearErrorstring" type="xs:string" default="Please enter a year between 0 and 9999." >
+</xs:attribute>
+      <xs:attribute name="invalidmonthErrorstring" type="xs:string" default="Please enter a month between 1 and 12." >
+</xs:attribute>
+      <xs:attribute name="invalidformatErrorstring" type="xs:string" default="Please input the date in a valid format." >
+</xs:attribute>
+      <xs:attribute name="invaliddateErrorstring" type="xs:string" default="Please enter a valid date." >
+</xs:attribute>
+      <xs:attribute name="format" type="xs:string" default="mm/dd/yyyy" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="br" type="lzx:br" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="br" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+  </xs:complexType>
+<xs:element name="basescrolltrack" type="lzx:basescrolltrack" >
+</xs:element>
+  <xs:complexType name="basescrolltrack" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebuttonrepeater">
+      <xs:attribute name="direction" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The direction in which the scroll should move. Set to -1 for back,
+             1 for forward. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="vbox" type="lzx:vbox" >
+</xs:element>
+  <xs:complexType name="vbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="inset" type="xs:string" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="remotecall" type="lzx:remotecall" >
+</xs:element>
+  <xs:complexType name="remotecall" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="remotecontext" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If set, this is the remote object context in which funcname is run
+              from. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onerror" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is triggered when an error occurs. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inforeturnvalue" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, a remote response returns an object. The object of a
+             successful response will contain the return value (data), an object
+             containing specific information about the request (info), and the
+             associated unique sequence request number (seqnum), e.g., { data:
+             ..., info: ..., seqnu: ...}. A failure response returns an object
+             that contains the error message (message), the error type (error),
+             an object containing specific information about the request (info),
+             and the associated unique sequence request number (seqnum), e.g., {
+             message: ..., error: ..., info: ..., seqnum: ...}. If false, an
+             error just returns the error message and a successful response
+             returns a value. Default is false. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="funcname" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Name of remote function this remotecall refers. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataobject" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If an LzDataset or an LzDataElement is set, return values will
+              be mapped into the dataobject. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basescrollarrow" type="lzx:basescrollarrow" >
+</xs:element>
+  <xs:complexType name="basescrollarrow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebuttonrepeater">
+      <xs:attribute name="direction" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The direction in which the scroll should move. Use -1 to go
+                  back. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="zoomarea" type="lzx:zoomarea" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ chart zoom area </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="zoomarea" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basezoomarea">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleslider" type="lzx:simpleslider" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="simpleslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:custombaseslider">
+      <xs:attribute name="value" type="xs:string" default="this.minlimit + this.knob.x * this.valueratio" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minx" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="maxx" type="xs:string" default="$once{parent.width}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="hbox" type="lzx:hbox" >
+</xs:element>
+  <xs:complexType name="hbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="inset" type="xs:string" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="timetext" type="lzx:timetext" >
+</xs:element>
+  <xs:complexType name="timetext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="plotstyle" type="lzx:plotstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ style for plot area
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="plotstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+      <xs:attribute name="linesize" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ size of border of the plot area </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="linecolor" type="lzx:color" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ color of the border for the plot area </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fillcolor" type="lzx:color" default="0xFFFFFF" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ bgcolor for the plot area </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="wholepie" type="lzx:wholepie" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is the class that assembles and contains all the elements
+        of an individual pie.  Nearly all of the attributes are set when the
+        object is instantiated by piechart.  There should be one of these
+        for each dataseries.  (Of beta quality.) </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="wholepie" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="wedgeover" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Wedge the mouse is currently over </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showlegendminimized" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to show the legend when the chart is minimized, when
+            there are multiple charts. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="radiusvalues" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of the radius alterations for pie
+            pieces, if any. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="piecevalues" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of the values of individual pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="opacvalues" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of piece opacity values. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ltitle" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Title of the legend, if any. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lhlcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Highlight color of an individual legend element, when
+            moused over. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendy" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If legend is 'manual', this sets the y coordinate of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If legend is 'manual', this sets the x coordinate of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendwidth" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If legend is 'manual', this sets the width of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendvalues" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of the values to use in the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendtitleposition" type="xs:string" default="left" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The position of the title: left, right, center. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendheight" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If legend is 'manual', this sets the height of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legend" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to include a legend, and if so, where to place it. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lborderwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Border width of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lborder" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Border color for the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lbgcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Background color of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelvalues" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of the label values for pie pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labeltsize" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of label text sizes for pie pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labeltcolor" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of label text colors for pie pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelcolors" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of label colors for pie pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelbwidth" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of label border widths for pie pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelborders" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of label borders for pie pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="explode" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether or not to explode the pie pieces onmouseover. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="expanded" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If there are multiple charts, this indicates whether this chart
+            is currently expanded. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drawbgborder" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw the background border around the circle
+            behind the pie pieces, and if so, what color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drawbg" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw the background circle behind the pie pieces,
+            and if so, what color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="colorvalues" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of the colors of individual pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderwidths" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of border widths of individual pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordercolors" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array of border colors of individual pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgborderwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the background border around the circle
+            behind the pie pieces. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="statictext" type="lzx:statictext" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A simple text class that provide default font attributes for
+          Laszlo components. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="statictext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="purplestyle" type="lzx:purplestyle" >
+</xs:element>
+  <xs:complexType name="purplestyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:style">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="custombaseslider" type="lzx:custombaseslider" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="custombaseslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="valueratio" type="xs:string" default="(this.maxlimit  - this.minlimit) / this.width" >
+</xs:attribute>
+      <xs:attribute name="startlabel" type="xs:string" default="this.minlimit" >
+</xs:attribute>
+      <xs:attribute name="minordivision" type="xs:string" default="5" >
+</xs:attribute>
+      <xs:attribute name="minlimit" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="maxlimit" type="xs:string" default="100" >
+</xs:attribute>
+      <xs:attribute name="majordivision" type="xs:string" default="2" >
+</xs:attribute>
+      <xs:attribute name="endlabel" type="xs:string" default="this.maxlimit" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basebutton" type="lzx:basebutton" >
+</xs:element>
+  <xs:complexType name="basebutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="respondtomouseout" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If this button does not respond to onmouseout or onmousedragout
+              events, set this flag to false. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resourceviewcount" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The first 'n' subviews that will respond to mouseevents by
+              changing the frame number of their resource. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="reference" type="xs:string" default="this" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Where to send mouse events (the view that will be "clickable").
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="overResourceNumber" type="lzx:number" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The resource for the mouse over state. 
+              Use 0 if the resource has at least 2 frames, but there is no over
+              state.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onresourceviewcount" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is sent when the resourceviewcount changes. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="normalResourceNumber" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The resource for the mouse up state, and initial state of the
+              button.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxframes" type="lzx:number" default="$once{this.totalframes}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The maximum number of frames to use, defaults to the number of
+              frames for the resource associated with this view. This is useful
+              for a subclass that has no resource for this view.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="downResourceNumber" type="lzx:number" default="3" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The resource for the mouse down state.
+              Use 0 if the resources has at least 3 frames, but there is no down
+              state.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="disabledResourceNumber" type="lzx:number" default="4" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The resource for the disabled state.
+              Use 0 if the resource has at least 4 frames, but there
+              is no disabled state.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="PopupPolygon" type="lzx:PopupPolygon" >
+</xs:element>
+  <xs:complexType name="PopupPolygon" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:polygonhotspot">
+      <xs:attribute name="text" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="parentView" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="text" type="lzx:text" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The basic text display element. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="text" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="yscroll" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The y scroll offset of the content in pixels (a negative number specifying how many pixels the content should be scrolled vertically). Default 0. NOTE: A constraint or handler on onyscroll will automatically enable updating the attribute. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="xscroll" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The x scroll offset of the content in pixels (a negative number specifying how many pixels the content should be scrolled horizontally). Default 0. NOTE: A constraint or handler on onxscroll will automatically enable updating the attribute. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="thickness" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The thickness for this text, between -200 and 200, Flash only</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textindent" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  textindent accepts any number which is interpreted as a px value</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textdecoration" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  text-decoration for this text, either 'none' or 'underline'.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textalign" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  textalign accepts one of [left, right, center, justify]</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The text to display in this text field. If set to a value that is not a string, the value will first be converted to a string as if by String(value). To display nothing, set the value to the empty string "". </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sharpness" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The sharpness for this text, between -400 and 400, Flash only</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selectable" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  If true, the text is selectable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrollwidth" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The total width of the content in pixels. this.setAttribute('width', this.scrollwidth) is equivalent to this.setAttribute('width', null) (for the current content: the former will not follow content changes as the latter does). If this.scrollwidth &gt; this.width, this.setAttribute('yscroll', this.width - this.scrollwidth) will cause the end of content to be visible at the edge of the view. (The rightmost content will appear at the right edge of the view for left-to-right scripts.) NOTE: A constraint or handler on onscrollwidth will automatically enable updating the attribute. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrollheight" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The total height of the content in pixels. this.setAttribute('height', this.scrollheight) is equivalent to this.setAttribute('height', null) (for the current content: the former will not follow content changes as the latter does). If this.scrollheight &gt; this.height, this.setAttribute('yscroll', this.height - this.scrollheight) will scroll the content so that the bottom of the content appears in the bottom of the view. NOTE: A constraint or handler on onscrollheight will automatically enable updating the attribute. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrollevents" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  Use setAttribute('scrollevents', true) to cause scroll events to be sent. NOTE: A constraint or handler on onyscroll, onscroll, onxscroll, onhscroll, onscrollheight, onmaxscroll, onscrollwidth or onmaxhscroll will automatically enable scrollevents. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scroll" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The vertical scroll position (in lines, 1-based). Default 1.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resize" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  If true, the width of the text field will be recomputed each time text is changed, so that the text view is exactly as wide as the width of the widest line. Defaults to true. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pattern" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  regexp describing set of characters allowed in this field Restrict the characters that can be entered to a pattern specified by a regular expression. Currently only the expression [ ]* enclosing a set of characters or character ranges, preceded by an optional "^", is supported. examples: [0-9]* , [a-zA-Z0-9]*, [^0-9]* </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onyscroll" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onxscroll" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="ontextlink" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onselectable" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onscrollwidth" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onscrollheight" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onscrollevents" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onscroll" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onpattern" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onmaxscroll" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onmaxlength" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onmaxhscroll" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onlineheight" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onhscroll" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="ondirection" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="multiline" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  If true, the lines of text are wrapped to fit within the text width. (The name multiline is a misnomer. Unwrapped text can be multiple lines if it contains a &lt;br /&gt; or &lt;p&gt; element, or a line break within a &lt;pre&gt; element. This attribute defaults to true if width and height are explicitly specified. If you set multiline=true, you probably want to explicitly a width for the text also; if multiline=true and you do not specify a width, the system will pick an arbitrary width (100 pixels at the moment). When multiline=true, the text is automatially re-wrapped whenever the content is modified by calls to setText, or whenever the width of the text view is modified. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxscroll" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The maximum vertical scroll position (in lines, 1-based). this.setAttribute('scroll', this.maxscroll) will cause the last line of the content to be visible at the bottom of the view (hence this is the line number of the line that will appear at the top of the view when scrolled all the way to the bottom). NOTE: A constraint or handler on onmaxscroll will automatically enable updating the attribute.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxlength" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  Maximum number of characters allowed in this field </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxhscroll" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The maximum horizontal scroll position in pixels. this.setAttribute('hscroll', this.maxhscroll) will cause the end of content to be visible at the edge of the view. (The rightmost content will appear at the right edge of the view for left-to-right scripts, hence this is the pixel position of the leftmost pixel that will appear in the view when scrolled all the way to the right.) NOTE: A constraint or handler on onmaxhscroll will automatically enable updating the attribute. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lineheight" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The height of a line of text in the current style </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="letterspacing" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  letterspacing accepts any number which is interpreted as a px value </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hscroll" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The horizontal scroll position in pixels. Default 0. NOTE: A constraint or handler on onhscroll will automatically enable updating the attribute. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="gridFit" type="xs:string" default="none|pixel|subpixel" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  Grid fit for this text, Flash only One of:  "none" | "pixel" | "subpixel" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="direction" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  Text direction, either "ltr" (default) or "rtl", Flash only </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="cdata" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  An alias for the text attribute, but with the type cdata, allowing it to be bound to a value that should not be interpreted as markup (when data binding, CSS style binding, or ??? or ???). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="antiAliasType" type="xs:string" default="normal|subpixel|advanced" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Antialias type for this text, Flash only One of:  "normal" | "subpixel" | "advanced" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="submit" type="lzx:submit" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Associates a form with a dataset. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="submit" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="status" type="xs:string" default="ok" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Read-only status of data request. Possible values are 'ok',
+              'requesting', and 'error'. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="error" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Error from most recent response or empty string; cleared to empty
+              string each time a request on the dataset is made. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataset" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The dataset that specifies the request url, which will also hold
+              the result of the query. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetabscontent" type="lzx:basetabscontent" >
+</xs:element>
+  <xs:complexType name="basetabscontent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chartactionhelper" type="lzx:chartactionhelper" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private 
+        class that help with the zoom animation and undo ability
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chartactionhelper" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="chart" type="xs:string" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private 
+        class that help with the zoom animation and undo ability
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="animateProgress" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="actionlist" type="xs:string" default="[]" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="TestResult" type="lzx:TestResult" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+  A TestResult accumulates the results of a test run: the total number
+  of tests run, the number of failures, and the number of errors.  A
+  TestResult is automatically created by a TestSuite and included as
+  its first child view so the results of the test suite will be
+  displayed.
+
+  See the documentation for &lt;xref linkend="lz.TestSuite"/&gt;
+  for an example of this tag.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="TestResult" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:DebugObject">
+      <xs:attribute name="messages" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lzcombobox_item" type="lzx:lzcombobox_item" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Class used as the default item class in lzcombobox. See lzcombobox's
+          itemclassname attribute. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="lzcombobox_item" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basedatacombobox_item">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basesliderthumb" type="lzx:basesliderthumb" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Basesliderthumb expects to be within a baseslidertrack (or its
+          subclass). In other words, its "classroot" should be a slidertrack. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basesliderthumb" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:button">
+      <xs:attribute name="showvalue" type="xs:string" default="${this.parent.parent.showvalue}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Toggles the floating value text when dragging thumb. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="canvas" type="lzx:canvas" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+The canvas is the container for all views within an application.
+
+The lz.canvas class represents the viewable area of the application. There is one instance of lz.canvas, named canvas. The canvas contains all views within an application.
+
+The &lt;canvas&gt; tag is the document root of an LZX application file. It contains class, resource, and font definitions, library includes, and view and other instances.
+
+See the Guide for a complete discussion of the &lt;canvas&gt; tag. 
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="canvas" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="title" type="xs:string" default="string" >
+</xs:attribute>
+      <xs:attribute name="scriptlimits" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   A CSS declaration of property: value pairs used to advise the underlying runtime of desired recursion and timeout limits. Not all runtimes respect this advice. The default value is runtime dependent, but typically recursion is at least 100 and timeout at least 10 (seconds). Example: scriptlimits="recursion: 256, timeout: 15"</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="screenorientation" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   Used to tell what the screen orientation is, 'portrait' or 'landscape' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="runtime" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   A String describing the target runtime. "dhtml" | "swf8" | "swf9" | "swf10" are currently supported. Others are in development.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="proxied" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, requests for data and media are proxied through LPS server. if false, requests are made directly to target URLs. if inherit, inherit from lzproxied query arg. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="percentcreated" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   A number from 0-1 that represents the percentage of the app that has been instantiated.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="medialoadtimeout" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   If present, specifies the default timeout in milliseconds for media load requests </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mediaerrortimeout" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   If present, specifies the default timeout in milliseconds for media errors. An error occurs when no bytes have been received. This is used in Flash to detect media loads that have failed due to the security policy. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lpsversion" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ version number of the LPS that generated this application (for .lzo files, this is the version number of the server that generated the optimized file, not the one that served it). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lpsrelease" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   release of the LPS that generated this application (for .lzo files, this is the release of the server that generated the optimized file, not the one that served it). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lpsbuilddate" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   A String specifying the date and time of the LPS build. "2007-03-05T15:33:42-0800" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lpsbuild" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   A String specifying the LPS build revision and the build directory: e.g. "4075 /Users/maxcarlson/openlaszlo/legals" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="httpdataprovider" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   
+httpdataprovider is bound to the system default HTTP DataProvider.
+This will be an instance of LzHTTPDataProvider, which implements HTTP request transport. The default value of the canvas.defaultdataprovider is initially set to point to this same object. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fullscreen" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   Used to switch into fullscreen display mode or back to normal display. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="framerate" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The framerate that should be used for this application </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaultdataprovider" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+defaultdataprovider is bound to the system default DataProvider.
+By default, this will be an instance of LzHTTPDataProvider, which will also be pointed to by the canvas.httpdataprovider. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="debug" type="xs:string" default="boolean" >
+</xs:attribute>
+      <xs:attribute name="datasets" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   Dictionary of all named datasets. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataloadtimeout" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+   If present, specifies the default timeout in milliseconds for data load requests </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="appbuilddate" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  A String specifying the date and time of the application build. "2008-09-12T14:15:12Z" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="allowfullscreen" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether fullscreen display state is supported for the SWFx runtimes. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="label" type="lzx:label" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      An abstract class that applies all features label.
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="label" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="style" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the style will be applied
+            @keyword private</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rvaly" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The original y value for this label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rvalx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The original x value for this label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ltextsize" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The text size of this label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ltext" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The text of this label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ltcolor" type="lzx:color" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of the text of this label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lbwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the border of this label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lborder" type="lzx:color" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of the border of this label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fadein" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to initially fade this label in. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="enableCache" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rte" type="lzx:rte" >
+</xs:element>
+  <xs:complexType name="rte" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:html">
+      <xs:attribute name="wrapperfile" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Location of the html wrapper file used by the editor.
+          An empty string (default) loads the system wrapper file.
+          If a custom wrapper file is used, the path is relative to where
+          the application runs from.
+          @initarg String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="toolbar_order" type="xs:string" default="undo,redo,|,cut,copy,paste,|,bold,italic,underline,strikethrough,|,insertOrderedList,insertUnorderedList,indent,outdent,|,justifyLeft,justifyRight,justifyCenter,justifyFull,|,foreColor,hiliteColor,|,createLink,unlink,insertImage,|,print,smiley,||,fontName,fontSize" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ dijit.Editor toolbar order. The list of items to show in the editor
+          toolbar. The default is to show all toolbar features.
+          A '|' inserts a separator between blocks of toolbars. 
+          A '||' will force a linebreak in the toolbar.
+          @initarg String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The initial value of the text to edit. The text is updated while
+          the rte is running.
+          @type html
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ontext" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The ontext event is generated whenever the rte text content changes. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oneditorready" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The oneditor event is generated whenever the rte editor is completely loaded. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="on_text" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="on_rte_loaded" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="on_editorready" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="extra_plugins" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Comma-separated list of additional dijit.Editor plugins to load.
+          An empty string (default) will load only the plugins used by default.
+          @initarg String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="editorready" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the rte editor is ready to receive commands
+          @type Boolean
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dojo_theme" type="xs:string" default="tundra" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ dojo theme to use. Default value is 'tundra'
+          Other values in dojo 1.5 are soria, nihilo, claro
+          @initarg String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dojo_root" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ root url where Dojo library is loaded. An empty string (default)
+          will load the library from Google. This path must end with a '/'.
+          For example, if you have a local version located at /trunk, 
+          you would specify something like '/trunk/dojo-release-1.5.0/'.
+          @initarg String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dojo_locale" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ dojo locale to use. Default value is '' which will use the
+          locale from the browser.
+          @initarg String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dojo_js" type="xs:string" default="dojo/dojo.js" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Dojo library to load (relative to dojo_root). This value is
+          ignored if dojo_root is empty. Default value is 'dojo/dojo.js'.
+          If you want to load an uncompressed version of dojo, specify
+          'dojo/dojo.js.uncompressed.js'
+          @initarg String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dojo_css" type="xs:string" default="dijit/themes/" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Dojo stylesheet root (relative to dojo_root). This value is
+          ignored if dojo_root is empty. Default value is 'dijit/themes/'
+          @initarg String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="script" type="lzx:script" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Client executed script </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="script" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="src" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Client executed script </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="datapointer" type="lzx:datapointer" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The binder between data and nodes.
+Datapaths are used to merge data hierarchies with the hierarchy of an OpenLaszlo application. This is done using the the XPath syntax supported by lz.datapointer. When a node is given a datapath attribute, a datapath with the given value as its XPath is created. If the datapath retrieves a node (i.e. it doesn't terminate in an attribute getter or a () operator) then the node is mapped to that data context and all child nodes will implicitly share the datacontext, but no further action is taken. If the datapath retrieves data, rather than just a node, a few extra things happen. First, the node's data property is set and the node's ondata event is sent. Second, the node's applyData method is called with the data as the argument. In cases where a datapath matches more than one data node, the view with the matching datapath is replicated once for each data node that matches, and a lz.ReplicationManager takes over the view's spot in its parent.
+
+When a node is replicated, an LzReplicationManager takes it's place, and an onclones will be sent when the node's clones are updated.
+
+A node can only have one datapath, and datapaths always have the name datapath. Additional options available on datapath such as pooling and replication are specified by writing the &lt;datapath&gt; tag as a separate node. 
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datapointer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="xpath" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="rerunxpath" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	This determines the behavior of the datapointer in response to notification that the dataset the datapointer is mapped to has changed. If rerunxpath is true, the datapointer will always rerun its remembered XPath (set with the xpath property). If it is false, the datapointer will only verify that the node it is pointing to is still in the dataset. If it isn't, the datapointer will rerun its remembered xpath (if it has one) or will print a debug message if any further attempt is made to use its current node as the basis for a relative XPath query.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="p" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The LzDataNodeMixin that the datapointer is pointing to. Calling setAttribute on p calls LzDatapointer.setPointer.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="context" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The reference to a clonemanager from a clone. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="contextmenu" type="lzx:contextmenu" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+A contextual menu </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="contextmenu" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="delegate" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+		Sets the delegate which will be called when a menu item is selected. An onselect event is also sent.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basefocusview" type="lzx:basefocusview" >
+</xs:element>
+  <xs:complexType name="basefocusview" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="target" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ a reference to the view that is currently focused </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="duration" type="xs:string" default="400" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the duration of the animation from one focused view to the next </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="active" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ true during keyboard navigation, when this view is visible 
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="node" type="lzx:node" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The base class for all Laszlo classes.
+JavaScript: lz.node
+The lz.node class provides the basic interface for OpenLaszlo objects: parent/child hierarchy, setters, interaction with the instantiator, and reference resolution. New nodes (and subclasses thereof) can be created by new-ing the class, like this: var mynode= new LzNode( parent , args ); where parent is the parent for the new node, and args is an Object whose name/value pairs are attributes to be set on the new node.  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="node" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="transition" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Allows node attributes to be automatically animated when set. A string of transitions, according to the css3 transition spec http://dev.w3.org/csswg/css3-transitions/#the-transition-shorthand-property- e.g. 'x 2s'. Note that transition-delay is not currently supported. [transition-property || transition-duration || transition-timing-function || transition-delay [, [transition-property || transition-duration || transition-timing-function || transition-delay]]*  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="subnodes" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	An array of all of the LzNodes which consider this LzNode their parent. This list is similar to the subviews list, but it contains all the children of this node, not just the view children.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="styleclass" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	
+A space-separated list of CSS classes that can be used in a stylesheet to select this node.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="placement" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Instructions to this element's container about where it should go within its container's internal hierarchy. See the LzNode.determinePlacement method. Defaults to the container itself.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="parent" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Reference to the node that was passed as this node's ancestor in the constructor. If this node was created by declaring it in a tag, the parent will be its lexical parent. Its lexical parent is the tag that encloses it. Allow a null parent so that nodes can be garbage collected when they are no longer needed. See also, immediateparent.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="options" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	A CSS declaration of property: value pairs that modify the interaction of this node with controllers such as replicators and layouts. For example, setting options="ignorelayout: true" on a view will cause the view to not be controlled by any layout.
+[Note] 	Note
+The options that affect particular controllers and replicators are documented with each controller and replicator.
+[Note] 	Note
+options should not be accessed directly. You must use getOption and setOption to get or set the value of an option.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oninit" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+This event is sent after the node's init method has been called. Simple actions that need to occur after the node's children have been initialized can be assigned to this event. For more complex initialization, see the init method. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ondata" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+The ondata script is executed when the data selected by a view's datapath changes. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onconstruct" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+This is the first event a node sends, right at the end of the instantiation process, but before any subnodes have been created or references resolved </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="nodeLevel" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The depth of this node in the overall node hierarchy </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="name" type="lzx:token" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The name for this subnode. If given, then this node's parent and immediate parent will store a pointer to this node as the given name value.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="initstage" type="xs:string" default="normal" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The execution of a node's init method and sending of the oninit event is under the control of its initstage attribute, as follows:
+
+immediate
+    The init method is called immediately as the last stage of instantiation. 
+early
+    The init method is called immediately after the view and its children have been instantiated. 
+normal
+    The init method is called when the parent is initialized. 
+late
+    The init method is called during idle time. To check whether init has been called, check the inited property. Force calling init using the completeInstantiation method. 
+defer
+    The init method will not be called unless explicitly requested by the completeInstantiation method. 
+
+	 </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inited" type="lzx:boolean" >
+</xs:attribute>
+      <xs:attribute name="immediateparent" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Reference to this nodes's parent in the node hierarchy. This will be different from "parent" when a class uses placement or defaultplacement to assign a subnode a specific place. For example, always use immediateparent to get a mouse position in your views coordinate system.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ignoreplacement" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Overrides placement attribute (and defaultplacement in lexical parent). See the LzNode.determinePlacement method. Defaults to false.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="id" type="lzx:token" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	A unique identifier for this element. Can be used as a global variable name in JavaScript code.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaultplacement" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	An attribute used in container classes. If set to a non-null value, this forces this node to run its determinePlacement method for any node whose parent is this node. If the subnode has its own placement attribute, determinePlacement will be called with that value, otherwise it will be called with this value. Note that a class's defaultplacement attribute only applies to children in subclasses or in instances, not to the children of the class itself. This means that if a class and its subclass both define a defaultplacement attribute, the attribute will be set to one value before the subclass children are created and to a different one after they are created. See the determinePlacement method.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datapath" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	A shorthand version of &lt;datapath&gt;, specifies the data source for this node and its children. You write a string to datapath; reading datapath will yield a lz.datapath. If the value begins with an identifier followed by a colon, the identifier names a dataset, and the portion of the string after the colon is an XPath description of a portion of the data. Otherwise the entire attribute value is an XPath description of the data, relative to the data source of this node's parent element. Examples: "mydata:", "mydata:/a/b", "/a/b".  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="data" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The data context for the node </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="cloneManager" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If this node is replicated due to data replication, the LzReplicationManager which controls this node.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="classroot" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	A reference to the node that is an instance of the &lt;class&gt; where this node is defined. Members of state subclasses do not define classroot. This is convenient to use when you want to access an attribute of the class in a method or event handler that is nested deep in the node hierarchy. For example, to set the bgcolor of the class object, instead of parent.parent.parent.setAttribute(bgcolor, 0xFFFFFF) you can simply use classroot.setAttribute(bgcolor, 0xFFFFFF).  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="frame" type="lzx:frame" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+A frame of a multi-frame resource.
+
+The &lt;frame&gt; tag is used to define a single frame of a multi-frame &lt;resource&gt;. A multi-frame resource contains several images which can be toggled among by script commands.
+
+Multiple frame tags can be declared consecutively to produce a single resource constructed of an unlimited number of frames. Such composed resources are often used to conveniently implement mouse rollovers, button states, or other UI elements where alternate views of a resource are required. Once a multi-frame resource has been defined and presented within a &lt;view&gt;, the developer can designate which frame is actively visible through the use of the view's setResourceNumber method.
+
+Multi-frame resources can be used in conjunction with components such as &lt;basebutton&gt;, which pre-define complex button behavior using frames designated by the user. 
+
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="frame" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="src" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The path of a file that contains the source for this object. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="name" type="lzx:token" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The name of a variable that will be set to this object when the application is started. If this element is directly within a &lt;canvas&gt; or &lt;library&gt; element, the global variable and the canvas property with this name will be set to this object. If this element is within another object, that object's property with this name will be set to this object.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="webapprpc" type="lzx:webapprpc" >
+</xs:element>
+  <xs:complexType name="webapprpc" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:rpc">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseslider" type="lzx:baseslider" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The base class for implementing sliders representing a range of
+              values. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basevaluecomponent">
+      <xs:attribute name="trackheight" type="lzx:number" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The height of the track. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="track" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The base class for implementing sliders representing a range of
+              values. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="thumbwidth" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the thumb. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="thumbheight" type="lzx:number" default="18" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The height of the thumb. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showvalue" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Turns on / off the floating value text when the user
+              drags. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showrange" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Turns on / off the bounding range text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showfill" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Turns on / off the slider's filled area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="precision" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ significant digits of precision </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onminvalue" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onmaxvalue" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="minvalue" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The minimum value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxvalue" type="lzx:number" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The maximum value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="keystep" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ How far to move value when key navigating. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordersize" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border width. This can be set with a style. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chartzoomer" type="lzx:chartzoomer" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Allows users to zoom in on specific areas of the chart.
+        Click or drag right-to-left to zoom back out.  (Of beta quality.)
+        Due to a bug with drawview, this doesn't currently work in DHTML. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chartzoomer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="zoomcolor" type="lzx:color" default="${parent.zoomcolor}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color tint of the zoomer. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="stableborderlayout" type="lzx:stableborderlayout" >
+</xs:element>
+  <xs:complexType name="stableborderlayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="axis" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The axis in which this layout operates. One of 'x' or 'y'. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="windowpanel" type="lzx:windowpanel" >
+</xs:element>
+  <xs:complexType name="windowpanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basewindow">
+      <xs:attribute name="titlearea_inset_top" type="xs:string" default="6" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The top inset for the window title area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="title" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the title of a window : this string appears at the top
+              of the window. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_top" type="xs:string" default="22" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The top inset for the window content area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_right" type="xs:string" default="11" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The right inset for the window content area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_left" type="xs:string" default="6" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The left inset for the window content area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_bottom" type="xs:string" default="20" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The bottom inset for the window content area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="closeable" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the window will have a close control. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="iconradioitem" type="lzx:iconradioitem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the iconradioitem class is a radio button with only an icon
+        @START_CODE
+        &lt;iconradioitem iconname="target" /&gt;
+        @END_CODE
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="iconradioitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselistitem">
+      <xs:attribute name="rightrsc" type="xs:string" default="iconradiobutton_small_right_rsc" >
+</xs:attribute>
+      <xs:attribute name="middlersc" type="xs:string" default="iconradiobutton_small_middle_rsc" >
+</xs:attribute>
+      <xs:attribute name="leftrsc" type="xs:string" default="iconradiobutton_small_left_rsc" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ background resources </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iconname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ icon filename </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="icon_y" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ icon y position. calculated if not specified explicitly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="icon_x" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ icon x position. calculated if not specified explicitly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawview" type="lzx:drawview" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+
+    @copyright Copyright 2001-2010 Laszlo Systems, Inc.  All Rights Reserved.
+               Use is subject to license terms.
+
+    @access public
+    @affects lzdrawview
+    @topic LFC
+    @subtopic Views
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="drawview" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="strokeStyle" type="xs:string" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Represents the colour to use for the lines around shapes.  Specified as a hexadecimal number (0xffffff) or a CSS string ('#ff00ff' or '#f0f').
+        @type String
+        @lzxtype string
+        @lzxdefault "#000000"
+        @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="miterLimit" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Gives the default miterLimit value for lines.
+          @type Number
+          @lzxtype number
+          @lzxdefault 10
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="measuresize" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the size of the drawview will be set dynamically based on its contents, where possible. (swf-only)
+      @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lineWidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Gives the default width of lines, in coordinate space units.
+          Negative values are ignored.  0 draws hairlines in swf - lines that
+          are always 1 pixel wide even when scaled.
+          @type Number
+          @lzxtype number
+          @lzxdefault 1
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lineJoin" type="xs:string" default="miter" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Gives the default lineJoin value for lines. Round for consistency between swf and dhtml.
+          @type String
+          @lzxtype "round" | "bevel" | "miter"
+          @lzxdefault "miter"
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lineCap" type="xs:string" default="butt" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Gives the default lineCap value for lines. Round for consistency between swf and dhtml.
+          @type String
+          @lzxtype "butt" | "round" | "square"
+          @lzxdefault "butt"
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="globalAlpha" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Gives an alpha value that is applied to shapes and images
+          before they are composited onto the canvas. The valid range of
+          values is from 0.0 (fully transparent) to 1.0 (no additional
+          transparency). If the attribute is set to values outside this range,
+          it is ignored. When the context is created, the globalAlpha
+          attribute initially has the value 1.0.
+          @type Number
+          @lzxtype number
+          @lzxdefault 1.0
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fillStyle" type="xs:string" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Represents the colour or style to use for the fill inside the shapes. Can be either a hexadecimal number (0xffffff), a CSS string ('#ff00ff' or '#f0f'), or a CanvasGradient/LzCanvasGradient.
+        @type String
+        @lzxtype string
+        @lzxdefault "#000000"
+        @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="aliaslines" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, lines will be offset by lineWidth / 2 to appear aliased (dhtml-only)
+      @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="slider" type="lzx:slider" >
+</xs:element>
+  <xs:complexType name="slider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseslider">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="resizestatemin" type="lzx:resizestatemin" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Resizes its immediateparent with a minimum size in response to mouse events, when applied. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="resizestatemin" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:resizestate">
+      <xs:attribute name="resize_min_width" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The minimum width to resize to </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resize_min_height" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The minimum height to resize to </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="propedit" type="lzx:propedit" >
+</xs:element>
+  <xs:complexType name="propedit" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:toggletext">
+      <xs:attribute name="prop" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="obj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isnumber" type="xs:string" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="icontogglebutton" type="lzx:icontogglebutton" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the icontogglebutton class is a icon button with two states, no text. the resource passed in should
+          have two frames, one for each state.
+        @START_CODE
+        &lt;icontogglebutton iconresource="resourcename"/&gt;
+        @END_CODE
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="icontogglebutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebutton">
+      <xs:attribute name="statenum" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ button state (either 0 or 1)  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="icony" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ fine-tune the vertical position of icon </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iconresource" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ icon resource name </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="menuseparator" type="lzx:menuseparator" >
+</xs:element>
+  <xs:complexType name="menuseparator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="xinset" type="lzx:number" default="3" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the number of pixels to inset the menuseparartor from the sides of the menu </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetabsbar" type="lzx:basetabsbar" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This class is a container for basetab items. It must be a child of
+          basetabs. The default layout for its subviews is "class: simplelayout;
+          axis: x; spacing: 0". You can pass the name of this class in the
+          'barclass' attribute of tabpane, basetabpane, basetabs, and
+          tabs. Basetabs uses this class as its default 'barclass'. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basetabsbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselist">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="viewlistmanager" type="lzx:viewlistmanager" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private  
+        Manage a hash table of viewslist 
+     </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="viewlistmanager" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="pools" type="xs:string" default="${new Object()}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private  
+        Manage a hash table of viewslist 
+     </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="swatchview" type="lzx:swatchview" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ swatchview is a simple view that is filled with a single color.
+    Either 'fgcolor' and 'bgcolor' may be used to set the color of the view.
+    By default it fills the space of the parent with white </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="swatchview" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="color" type="xs:string" default="0xffffff" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ this is the color that was set (by setting 'bgcolor' or 'fgcolor' ),
+        bgcolor may be different if setColorTransform has been called
+        @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dataselectionmanager" type="lzx:dataselectionmanager" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+   
+    @copyright Copyright 2001-2010 Laszlo Systems, Inc.  All Rights Reserved.
+               Use is subject to license terms.
+   
+    @affects lzdataselectionmanager
+    @access public
+    @topic LFC
+    @subtopic Helpers
+    @devnote TODO: [20080930 anba] (LPP-6080) uncomment typing in method signatures
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="dataselectionmanager" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:selectionmanager">
+      <xs:attribute name="manager" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="horizontalaxis" type="lzx:horizontalaxis" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+     Represents the X-axis on the rectangular chart extends from Axis class
+     @access public
+     </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="horizontalaxis" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:axis">
+      <xs:attribute name="labelLenght" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datacolumn" type="xs:string" default="x" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="constantlayout" type="lzx:constantlayout" >
+</xs:element>
+  <xs:complexType name="constantlayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="value" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The constant value that is applied to the attribute
+          ( defined in 'axis' as 'x' or 'y' ) of each subview in the layout. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The axis in which this layout operates either 'x' or 'y'.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="streamprogress" type="lzx:streamprogress" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An instance of this class will set its width relative to the
+      progress of the given stream and its maxwidth attribute. It is
+      green by default; however, to make it appear with a resource, you may
+      set the bgcolor to null and provde a resource (and don't forget to set
+      stretches attribute).
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="streamprogress" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="totaltime" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ read-only </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="time" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ read-only </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="stream" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ stream for which to show the progress </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="progress" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ a value between 0 and 1 indicating how much of the stream has played
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxwidth" type="lzx:number" default="${parent.width}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ max width that this will grow to (defaults to parent's width </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="multistatebutton" type="lzx:multistatebutton" >
+</xs:element>
+  <xs:complexType name="multistatebutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebutton">
+      <xs:attribute name="statenum" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the current state </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="statelength" type="lzx:number" default="3" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the number of frames in a state </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxstate" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the largest number allowed for the value of statenum </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tabsbar" type="lzx:tabsbar" >
+</xs:element>
+  <xs:complexType name="tabsbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetabsbar">
+      <xs:attribute name="spacing" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Spacing between tab items. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videovolumebutton" type="lzx:videovolumebutton" >
+</xs:element>
+  <xs:complexType name="videovolumebutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="volumeInternal" type="xs:string" default="1.0" >
+</xs:attribute>
+      <xs:attribute name="volume" type="xs:string" default="${this.mute ? 0.0 : this.volumeInternal}" >
+</xs:attribute>
+      <xs:attribute name="trackingDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="tracking" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="over" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="mute" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="adjusting" type="xs:string" default="${             this.button.over ||              this.button.tracking ||              this.adjuster.over  ||              this.adjuster.tracking}" >
+</xs:attribute>
+      <xs:attribute name="adjusterHeight" type="xs:string" default="100" >
+</xs:attribute>
+      <xs:attribute name="adjusterBorder" type="xs:string" default="2" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basescrollthumb" type="lzx:basescrollthumb" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Basescrollthumb expects to be within a basescrollbar (or a subclass).
+          In other words, its "classroot" must be a scrollbar. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basescrollthumb" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="doffset" type="xs:string" default="this.getMouse( 'y' )" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tabslider" type="lzx:tabslider" >
+</xs:element>
+  <xs:complexType name="tabslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetabslider">
+      <xs:attribute name="bordersize" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size of the border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordercolor" type="lzx:color" default="${this.style != null ? this.style.bordercolor : null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border color. Default is constrained to the 
+              &lt;tagname&gt;style&lt;/tagname&gt;'s &lt;attribute&gt;bordercolor&lt;/attribute&gt; 
+              value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="style" type="lzx:style" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ contains style attributes which are applied to components to modify their look </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="style" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="textselectedcolor" type="lzx:color" default="black" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used as the text color with 'selectedcolor' to color the
+        selected item </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="texthilitecolor" type="lzx:color" default="iceblue1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used as the text color with 'hilitecolor' to highlight an item,
+        such as when mouse is over a menu item </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textfieldcolor" type="lzx:color" default="white" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ background color for text areas </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textdisabledcolor" type="lzx:color" default="gray60" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used as the text color when a component is disabled </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textcolor" type="lzx:color" default="gray10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ color for text </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selectedcolor" type="lzx:color" default="iceblue3" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used when an item is selected, such as in a list </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="menuitembgcolor" type="lzx:color" default="textfieldcolor" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ background color for menu items, defaults to the 'textfieldcolor' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isstyle" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ this is a style object
+          @access private
+          @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isdefault" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if true, this style is the default style for components  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hilitecolor" type="lzx:color" default="iceblue4" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used when the background color changes to highlight an item,
+        such as when mouse is over a menu item </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="disabledcolor" type="lzx:color" default="gray30" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used when an item is disabled </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="canvascolor" type="lzx:color" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ canvas color, default: null (will use whatever is specified
+        as the canvas bgcolor, default: white) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordersize" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the line width used in those components that have a visual border </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordercolor" type="lzx:color" default="gray40" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used to color the frame of a component for those that have a visual
+        border </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgcolor" type="lzx:color" default="white" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used for colorizing the backgrounds of content areas, such
+          as the background in tabslider's content, and window's content </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="basecolor" type="lzx:color" default="offwhite" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used for colorizing a component, components will typically use
+        varying shades of this color </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basescrollbar" type="lzx:basescrollbar" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Contains non-visual aspects of a scrollbar. Subclasses are expected to
+          define this.thumb and this.scrolltrack to reference the views that
+          perform those functions. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basescrollbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="usemousewheel" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, this scrollbar listens for mousewheel events </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="stepsize" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The amount that the scrolltarget is moved when the user clicks on
+              the scrolltrack or when the step method is called. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrolltarget" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The view that is controlled by the scrollbar.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrollmax" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The maximum distance to scroll, default: the height or width
+              of the scrolltarget. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrollattr" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The attribute of the scrolltarget that is modified by the scrollbar,
+              default: value of axis attribute.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrollable" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True if the scrolltarget is bigger than the containing view
+              therefore the scrollbar is active. The scrollbar appears disabled
+              when scrollable is false. You can make the scrollbar invisible
+              when there is nothing to scroll by setting visible="${scrollable}"
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pagesize" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The maximum distance to scroll, default: the height or width
+              of the scrollbar.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onscrollmax" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mousewheelevent_on" type="xs:string" default="onfocus" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The event that activates the mousewhen when sent from the focusview </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mousewheelevent_off" type="xs:string" default="onblur" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The event that deactivates the mousewhen when sent from the focusview </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mousewheelactive" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the mousewheel is active for the focusview.
+              @keywords read-only </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="focusview" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The view to which the scrollbar should listen for focus 
+            events. If not set, it will be set to the scrolltarget
+            or the immediateparent of the scrollbar,
+            whichever is focusable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Axis may be "x" or "y", controls the orientation and default
+              scrollattr
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="validatingForm" type="lzx:validatingForm" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      @topic Incubator
+      @subtopic Validators
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="validatingForm" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:form">
+      <xs:attribute name="validators" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      @topic Incubator
+      @subtopic Validators
+  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="errorcount" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="PopupCircle" type="lzx:PopupCircle" >
+</xs:element>
+  <xs:complexType name="PopupCircle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:circlehotspot">
+      <xs:attribute name="text" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="parentView" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baselistitem" type="lzx:baselistitem" >
+</xs:element>
+  <xs:complexType name="baselistitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basevaluecomponent">
+      <xs:attribute name="selected" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether this item is selected. Our containing list will adopt the value
+              of this component when it is selected. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselected" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when this item is selected. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when the user makes a selection. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="piechartplotarea" type="lzx:piechartplotarea" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+         A pie chart plot area where the pie slices are rendered
+         @access public
+         </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="piechartplotarea" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="style" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Defines the pie slice's style </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="formlayout" type="lzx:formlayout" >
+</xs:element>
+  <xs:complexType name="formlayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to use between each view in the layout </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxwidth" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="inset" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to inset the first view controlled by the layout</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="counter" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The axis in which this layout operates. One of 'x' or 'y'. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="align" type="xs:string" default="left" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mred" type="lzx:mred" >
+</xs:element>
+  <xs:complexType name="mred" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="urls" type="xs:string" default="[ 'http://www.openlaszlo.org/images/edsurf.gif',                      'http://www.openlaszlo.org/images/ednpals2.gif',                      'http://www.openlaszlo.org/images/edchess1.jpg',                      'http://www.openlaszlo.org/images/edandalaninbarn.jpg'                    ]" >
+</xs:attribute>
+      <xs:attribute name="urlnum" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="timedel" type="xs:string" default="${new LzDelegate ( this , 'advance' )}" >
+</xs:attribute>
+      <xs:attribute name="running" type="xs:string" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="bluestyle" type="lzx:bluestyle" >
+</xs:element>
+  <xs:complexType name="bluestyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:style">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="axis" type="lzx:axis" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A abstract class that represents one of the axes of a rectangular chart. In general, axis isn't instantiated directly     
+    @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="axis" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="type" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the axis type can be 'linear' or 'categorical' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="titleY" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the placement in Y position of the Axis title </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="titleX" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the placement in X position of the Axis title </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="titleLocation" type="xs:string" default="default" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the placement of the Axis title possible values: 'low','high','default'</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="titleGap" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="title" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Axis title label</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tickmarkLabelMaxDecimals" type="lzx:number" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ticklabelcolumn" type="xs:string" default="$once{''}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Data Column that is used to override the values of Tic Marks labels   </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tickMarksLabelsEnabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable the rendering of tic Marks labels </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tickMarkPositions" type="xs:string" default="[]" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Exposes distances where tickmarks are drawn 
+        @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scale" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ratioPixel" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="offset" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minorTickEnabled" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable minor Tics Marks </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minimumRender" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minimum" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Numerical value that indicates the Minimum value in the axis can be positive or negative value </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maximumRender" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maximum" type="xs:string" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Numerical value that indicates the Maximum value in the axis can be positive or negative value </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="majorTickEnabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable Major Tics Marks </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="majorInterval" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Allows to customize the interval of the Major Tics Marks</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelrotation" type="xs:string" default="horizontal" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the axis title rotation can be 'horizontal' or 'vertical' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelTextArray" type="xs:string" default="[]" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Exposes distances where tickmarks are drawn 
+        @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelReposEnabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Attribute that controls if the labels are vertically repositioned to avoid overlaping </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelArray" type="xs:string" default="[]" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="interval" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the interval of values between the tic marks of the axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fixedRange" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Fix the range of the axis to the maximum &amp;amp; minimum   </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataSeries" type="xs:string" default="[]" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="columnName" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the column name associated to the axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="categoricalArray" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axisEnabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable or disable the axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="adjustmin" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colormenuitem" type="lzx:colormenuitem" >
+</xs:element>
+  <xs:complexType name="colormenuitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="mycolor" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="sliderknob" type="lzx:sliderknob" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="sliderknob" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="minx" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxy" type="xs:string" default="100" >
+</xs:attribute>
+      <xs:attribute name="isMouseDown" type="xs:string" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="custombutton" type="lzx:custombutton" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The custombutton class can include text and/or an icon, with our app-specific background graphic
+        &lt;example&gt;
+          &amp;lt;canvas&amp;gt;
+            &amp;lt;include href="incubator/custombutton.lzx"/&amp;gt;
+            &amp;lt;custombutton iconname="target" text="Hit Me"/&amp;gt;
+          &amp;lt;/canvas&amp;gt;
+        &lt;/example&gt;
+
+        the icon should be a resource with a name ending in "_icon_rsc";
+        the iconname should be that resource name, without the "_icon_rsc"
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="custombutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebutton">
+      <xs:attribute name="texty" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ use to fine-tune text y position </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rightrsc" type="xs:string" default="custombutton_small_right_rsc" >
+</xs:attribute>
+      <xs:attribute name="middlersc" type="xs:string" default="custombutton_small_middle_rsc" >
+</xs:attribute>
+      <xs:attribute name="leftrsc" type="xs:string" default="custombutton_small_left_rsc" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ background resources </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="icony" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ fine-tune the vertical position of icon </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iconstretches" type="xs:string" default="none" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ controls whether the icon stretches (none|both) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iconspace" type="xs:string" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ fine-tune the horizontal spacing of icon to text </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iconname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ icon resource name prefix </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="expandedWidth" type="xs:string" default="$once{this.width}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ max width of button </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="collapsedWidth" type="xs:string" default="30" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ min width of button </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="barchartplotarea" type="lzx:barchartplotarea" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keywords private
+     plotarea of barchart </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="barchartplotarea" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:virtualdrawview">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="xdragstate" type="lzx:xdragstate" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="xdragstate" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:state">
+      <xs:attribute name="xdoffset" type="xs:string" default="this.getMouse( 'x' )" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="x" type="xs:string" default="${limit(minx, maxx,                     this.immediateparent.getMouse( 'x' ) - this.xdoffset)}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basecombobox" type="lzx:basecombobox" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A dropdown list of selectable items. Can either be editable or
+          not. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basecombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+      <xs:attribute name="text_y" type="lzx:number" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the y position of the text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text_x" type="lzx:number" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the x position of the text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text_width" type="lzx:number" default="${this.width - 19}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the width the text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The spacing size ( in pixels ) between items in the pop-up list.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shownitems" type="xs:string" default="-1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sets the height of the combobox to show 'n' items. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selected" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The initial selected item. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is triggered whenever the user makes a selection. It
+              may be used as a script in the combobox tag or as an event method.
+              </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ondefaultselection" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is sent when the default selection is set.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="min_width" type="lzx:number" default="50" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The minimum width this component is allowed to be.
+              @keywords defaultsetter </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="itemclassname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The class that is used to create an item in the list. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isopen" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates whether or not the popup list is showing.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="editable" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Make the text field of this combobox editable. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaulttext" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The text that appears in the text field when no item is selected. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaultselection" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The number of the item that is initially selected. This overrides
+              the value defined in the defaulttext attribute </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataoption" type="xs:string" default="none" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ One of "lazy", "resize", "pooling", "none". </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datacontrolsvisibility" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="bordersize" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border size ( in pixels ) of the popup list.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoscrollbar" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether a scrollbar should automatically show up when there are more
+              items than shownitems. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="attachoffset" type="lzx:number" default="-1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The vertical offset of the floatinglist attached to this
+              combobox. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="audio" type="lzx:audio" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Imports an audio file.
+[Warning]This tag is obsolete. Its functionality has been replaced by the &lt;resource&gt; tag. 
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="audio" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="src" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Imports an audio file.
+[Warning]This tag is obsolete. Its functionality has been replaced by the &lt;resource&gt; tag. 
+ </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="basefloatinglist" type="lzx:basefloatinglist" >
+</xs:element>
+  <xs:complexType name="basefloatinglist" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:list">
+      <xs:attribute name="attachtarget" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The view to which this floatinglist will attach. By default, this
+              will be the lexical parent.  The style of the attachtarget will be
+              inherited. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="attachoffset" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The distance from the attachtarget. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="attach" type="xs:string" default="bottom" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Where this floatinglist should attach to its owner. Possible
+              values: bottom, top, left, right.  In the event of a canvas
+              out-of-bounds, the floating list will attach in a visible
+              location. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basecomponent" type="lzx:basecomponent" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ an abstract class which all components subclass </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basecomponent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the label or title of the component: instead of using this 
+              attribute text may instead be placed withing the tag, for
+              example: &amp;lt;button&amp;gt;OK&amp;lt;/button&amp;gt; </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="styleable" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ whether style should be applied to this component </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="style" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  if null, the style is set to the inherited style from the parent
+               component, if no parent component the style will be the canvas
+               'defaultstyle' attribute </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onstyle" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onisdefault" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event: when isdefault changes
+              @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onfocusable" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="on_enabled" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isdefault" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If set to true, this component will be the default (and will
+              therefore receive the enter key) if it is nearest to the focussed
+              view, and if that focussed view does not have doesenter set to
+              true. "Nearness" is defined to mean the closest common parent
+              with the focussed view that is not excluded from the mode, and
+              which is visible onscreen.
+              </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hasdefault" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ set to true when this component will receive enter key events </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="enabled" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ when false the component should appear as its disabled state and
+              not respond to user events. The component is
+              automatically set to clickable when enabled, and not clickable
+              when disabled.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="doesenter" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if set to true, the component manager will call this component
+              with doEnterDown and doEnterUp when the enter key goes up or down
+              if it is focussed. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="camera" type="lzx:camera" >
+</xs:element>
+  <xs:complexType name="camera" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:mediadevice">
+      <xs:attribute name="width" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width (resolution) that will be captured by the camera. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="show" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, show camera on immediateparent videoview.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="picturequality" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Camera picture quality: a value between 0 and 1, where 1
+              represents the highest quality (no compression). When
+              0 is passed, this indicates to use highest quality that
+              fits into the available bandwidth </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="height" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The height (resolution) that will be captured by the camera. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fps" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The number of frames per second that will be captured 
+              by the camera. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="favorsize" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Often several capture modes are available per camera device.
+              These modes will allow capturing at a specific size (width/height)
+              and framerate.  If you specify both fps and width and height for
+              this camera, this attribute will control which capturing mode
+              for the camera device will be used. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bandwidth" type="xs:string" default="16384" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Camera bandwidth (in bytes per second). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="toggletext" type="lzx:toggletext" >
+</xs:element>
+  <xs:complexType name="toggletext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="editing" type="xs:string" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tickmarklabel" type="lzx:tickmarklabel" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private Represents the tickmark text which appears on a computerized note </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="tickmarklabel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:label">
+      <xs:attribute name="styleSet" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Attribute to handle style set optimization
+        @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="photo" type="lzx:photo" >
+</xs:element>
+  <xs:complexType name="photo" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datamarker" type="lzx:datamarker" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      datamarker for the chart
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datamarker" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorpicker" type="lzx:colorpicker" >
+</xs:element>
+  <xs:complexType name="colorpicker" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:window">
+      <xs:attribute name="selectedColor" type="lzx:number" default="0x000000" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseslidertrack" type="lzx:baseslidertrack" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Baseslidertrack expects to be within a baseslider (or its
+          subclass). In other words, its "classroot" should be a slider. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseslidertrack" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorpot" type="lzx:colorpot" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      @topic Incubator
+      @subtopic Components
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="colorpot" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="mycolor" type="lzx:color" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      @topic Incubator
+      @subtopic Components
+  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="listener" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="pre" type="lzx:pre" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="pre" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+  </xs:complexType>
+<xs:element name="wrappinglayout" type="lzx:wrappinglayout" >
+</xs:element>
+  <xs:complexType name="wrappinglayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="yspacing" type="xs:string" default="${this.spacing}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to use between the views controlled by the layout in
+          the y axis. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="yinset" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to offset the first view controlled by the layout in y
+          axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="xspacing" type="xs:string" default="${this.spacing}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to use between the views controlled by the layout in
+          the x axis. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="xinset" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to offset the first view controlled by the layout in x
+          axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="spacing" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to use between the views controlled by the layout in
+          both axes. By default, both xspacing and yspacing are set to this
+          value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="duration" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If given, a number of miliseconds to use to animate the views in to
+          place.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="x" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The primary axis for wrapping. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="checkbox" type="lzx:checkbox" >
+</xs:element>
+  <xs:complexType name="checkbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+      <xs:attribute name="text_y" type="lzx:number" default="${this.cb.height/2 - this._title.height/2+1}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the y position of the text label. default: centered </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="resizeview_x" type="lzx:resizeview_x" >
+</xs:element>
+  <xs:complexType name="resizeview_x" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="right" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="middle" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="left" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="html" type="lzx:html" >
+</xs:element>
+  <xs:complexType name="html" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="target" type="xs:string" default="$once{this.parent}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sets the view to listen to for x/y/width/height change events.  Defaults to this.parent.
+          @type LzView
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="src" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sets the URL the html tag should load
+          @type String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shownativecontextmenu" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, show native context menus in the iframe.  Otherwise, show OpenLaszlo context menus.  Note that this only works in DHTML because it's not possible to programatically display a context menu in Flash.
+          @type Boolean
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrollbars" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the html tag will have scrollbars.
+          @type Boolean
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rpcmethods" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Contains a list of method names available to call with callRPC().
+          @type Array
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ready" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the html tag is ready to receive commands
+          @type Boolean
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ontarget" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onsrc" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onready" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="mouseevents" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, attempt to listen for mouse events on the iframe.  Cross-domain security restrictions apply, so if the content loaded in the iframe is from a different domain, mouse events won't be sent.
+          @type Boolean
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minimumwidth" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The minimum width of the iframe: embedded swfs won't load with a size less than 1
+          @type Number
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minimumheight" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The minimum height of the iframe: embedded swfs won't load with a size less than 1
+          @type Number
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="loading" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the html tag is currently loading
+          @type Boolean
+          @access public
+          @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iframeid" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="html" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The HTML that the iframe starts out containing.
+          @type String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="history" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the html tag will set browser history.
+          @type Boolean
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="framename" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sets the name/target of the html iframe.
+          @type String
+          @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="frametimer" type="lzx:frametimer" >
+</xs:element>
+  <xs:complexType name="frametimer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="fps" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="delta" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="resizeview_y" type="lzx:resizeview_y" >
+</xs:element>
+  <xs:complexType name="resizeview_y" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="top" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="middle" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="bottom" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baselist" type="lzx:baselist" >
+</xs:element>
+  <xs:complexType name="baselist" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+      <xs:attribute name="toggleselected" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ When true, the first click on a list item selects it and the
+              second click deselects it. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is triggered whenever the user makes a selection it may
+              used as a script in the tag or as an event method. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemclassname" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is triggered whenever the itemclassname attribute 
+              changes. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="multiselect" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If multiselect is true, multiple items may be selected. When the
+              shift key is down, a range of items is selected. When the control
+              key is down, any item may be added to the selection. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="itemclassname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The name of the class for new items that will be created with
+              addItem(). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaultselection" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The index of the default selected item, if none is provided via
+              the selected="true" attribute on an item. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataoption" type="xs:string" default="none" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ One of "lazy", "resize", "pooling", "none". </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="selectionmanager" type="lzx:selectionmanager" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+   
+    @copyright Copyright 2001-2010 Laszlo Systems, Inc.  All Rights Reserved.
+               Use is subject to license terms.
+   
+    @affects lzselectionmanager
+    @access public
+    @topic LFC
+    @subtopic Helpers
+    @lzxname selectionmanager
+    @devnote TODO: [20080930 anba] (LPP-6080) uncomment typing in method signatures
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="selectionmanager" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="toggle" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        @type Boolean
+        @lzxtype boolean
+      </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selectedHash" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        @access private
+        @type Object
+      </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selected" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        @access private
+        @type Array
+      </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sel" type="xs:string" default="setSelected" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The name of the method to call on an object when an object's
+        selectedness changes. The method is called with a single Boolean
+        argument. The default value for this field is &lt;code&gt;setSelected&lt;/code&gt;.
+        (This feature is not available for &lt;tagname&gt;dataselectionmanager&lt;/tagname&gt;.)
+        @type String
+        @lzxtype string
+      </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lastRangeStart" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        @type *
+        @access private
+      </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datalabel" type="lzx:datalabel" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      Represents the data text which appears on a computerized note
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datalabel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:label">
+      <xs:attribute name="labelOut" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelEnabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="handler" type="lzx:handler" >
+</xs:element>
+  <xs:complexType name="handler" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="reference" type="xs:string" default="this" >
+</xs:attribute>
+      <xs:attribute name="name" type="xs:string" use="required" >
+</xs:attribute>
+      <xs:attribute name="method" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="args" type="xs:string" default="" >
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="tooltip" type="lzx:tooltip" >
+</xs:element>
+  <xs:complexType name="tooltip" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="yoffset" type="xs:string" default="25" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        The vertical offset of tooltip from the mouse position.
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tipvalign" type="xs:string" default="default" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        Whether the tooltip shows up above or below the mouse
+        position. Default will position heuristically to keep
+        the tooltip visible on the canvas.
+
+        @lzxtype above | below | default
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tipalign" type="xs:string" default="left" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        Whether the tooltip is horizontally aligned by it's left edge
+        (default) or right edge relative to the mouse position.
+
+        @lzxtype right | left
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        The text that will be displayed by the tooltip.  If the text
+        is &lt;code&gt;null&lt;/code&gt; or empty, no tooltip will be displayed.
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="viewslist" type="lzx:viewslist" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pool of ordered view  
+         - @keyword private
+        </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="viewslist" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="vlist" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pool of ordered view  
+         - @keyword private
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="viewclass" type="xs:string" default="$once{null}" >
+</xs:attribute>
+      <xs:attribute name="parentview" type="xs:string" default="${parent}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="combobox" type="lzx:combobox" >
+</xs:element>
+  <xs:complexType name="combobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecombobox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datepickerlistitem" type="lzx:datepickerlistitem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datepickerlistitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:textlistitem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rtmpconnection" type="lzx:rtmpconnection" >
+</xs:element>
+  <xs:complexType name="rtmpconnection" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="status" type="xs:string" default="disconnected" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ String to indicate connection status.
+            @type string
+            @access public
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="stage" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Number to indicate what stage of connection we're in:
+            0: disconnected, 1: connecting, 2: connected.
+            @type Number
+            @access public
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="src" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Application url, for example
+            "rtmp:/appname" or "rtmp://myserver.com/myapp/".
+            @type String
+            @access private
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onconnect" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when connection established. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="objectencoding" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The AMF object encoding to use for this connection, either 0 or 3.
+            @type Number
+            @keywords final  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="debug" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Turn on for verbose debugger output.
+            @type Boolean
+            @access public
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="connectiontimeout" type="lzx:number" default="3000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Number of milliseconds to wait for connection at src before 
+                using altsrc URL </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="connections" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A shared hash of connections
+            @type Object
+            @access private
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="connectionparams" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Connection parameters that will be sent to the server when NetConnection.connect() is called
+            @type Expression
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoconnect" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Connect automatically during init. If false, you need to explicitly
+            call connect().
+            @type Boolean
+            @access public
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="altsrc" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Alternate application url, used if the connection for src 
+                fails for example : "rtmp:/appname" or 
+                "rtmp://myserver.com/myapp/". </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="resizelayout" type="lzx:resizelayout" >
+</xs:element>
+  <xs:complexType name="resizelayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to use between each view in the layout </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The axis in which this layout operates either 'x' or 'y'.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basedatacombobox_item" type="lzx:basedatacombobox_item" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Class used to create an item in a basedatacombobox's list.
+          @keywords private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basedatacombobox_item" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:textlistitem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="greenstyle" type="lzx:greenstyle" >
+</xs:element>
+  <xs:complexType name="greenstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:style">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tab" type="lzx:tab" >
+</xs:element>
+  <xs:complexType name="tab" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetab">
+      <xs:attribute name="padding" type="xs:string" default="20" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Text padding. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basechart" type="lzx:basechart" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The base class for non-pie charts.  Contains most of the
+        shared attributes and elements.  (Of beta quality.) </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basechart" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="zoomcolor" type="lzx:color" default="#DDDDDD" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of the zoom selector. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="zoomable" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether bars are zoomable or not. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="zerowidth" type="lzx:number" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of the line drawn at zero. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vtickwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of drawn vertical tick marks. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vticklength" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Length of drawn vertical tick marks. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vticklabelsize" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Text size of vertical tick labels. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vticklabel" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of vertical tick labels.  If not specified, no
+            labels are drawn. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vtick" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw vertical tick marks, and if so,
+            what color.  If no color is specified, ticks are not drawn.
+            These are the tick marks that are drawn vertically, along the
+            bottom axis.  Note: In barchart, setting drawaxis to y changes
+            overall chart orientation, with the "bottom" on the left. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vgridwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Vertical grid line thickness. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vgridspacing" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Vertical grid line spacing.  (Units, not pixels.  In
+            barchart, the space between one bar and the next is
+            considered one unit.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vgridlines" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of the vertical grid lines.  Note: In barchart,
+            vertical axis is considered the axis that runs parallel to the
+            orientation of the chart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vgridbands" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Vertical grid bands. Note: In barchart, vertical axis is
+            considered the axis that runs parallel to the orientation of
+            the chart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vbopacity" type="lzx:number" default=".5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Vertical grid band opacity.  Note: In barchart, vertical
+            axis is considered the axis that runs parallel to the
+            orientation of the chart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vaxiswidth" type="lzx:number" default="3" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of drawn vertical axis. Note: In barchart, vertical
+            axis is considered the axis that runs parallel to the
+            bars in the chart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="vaxis" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw a line along the vertical axis, and if so,
+            what color.  (If no color is specified, axis is not drawn.)
+            Note: In barchart, vertical axis is considered the axis
+            that runs parallel to the bars in the chart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ploty" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Plot area's y position, relative to chart as a whole. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="plotx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Plot area's x position, relative to chart as a whole. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="plotwidth" type="lzx:number" default="${this.width - 1}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of plotting area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="plotheight" type="lzx:number" default="${this.height - 1}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Height of plotting area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="paneslider" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The position of the view in which the data is drawn in
+            relation to its parent clipping frame.  Allows data to be
+            dragged or slid around. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minimum" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Grid's minimum displayed value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maximum" type="lzx:number" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Grid's maximum displayed value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="htickwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of drawn horizontal tick marks. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hticklength" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Length of drawn horizontal tick marks. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hticklabelsize" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Text size of horizontal tick labels. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hticklabel" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of horizontal tick labels.  If not specified, no
+            labels are drawn. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="htick" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw horizontal tick marks, and if so,
+            what color.  If no color is specified, ticks are not
+            drawn.  These are the tick marks that are drawn horizontally,
+            along the side axis.  Note: In barchart, setting drawaxis to y
+            changes overall chart orientation, with the "bottom" on the
+            left. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hgridwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Horizontal grid line thickness. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hgridspacing" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Horizontal grid line spacing.  (Units, not pixels.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hgridlines" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of the horizontal grid lines. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hgridbands" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Horizontal grid bands. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hbopacity" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Horizontal grid band opacity. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="haxiswidth" type="lzx:number" default="3" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of drawn horizontal axis. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="haxis" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw the horizontal axis, and what color.
+            (If no color is specified, axis is not drawn.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drawzero" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw a line at zero, and what color.  If
+            no color is specified, line is not drawn. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drawaxis" type="xs:string" default="x" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The direction in which the data will be drawn.
+            Accepts values x and y.  (x - vertical bars drawn
+            from left to right.  y - horizontal bars drawn
+            top to bottom.)  Only applicable to barchart, but
+            necessary for certain shared elements. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="draggable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether bars are able to be dragged or not. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of the plot area's border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="border" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether there's a border around the plot area, and if so,
+            what color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgresource" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If desired, a resource can be used in the background.
+            If specified, this view will appear behind the chart,
+            with everything drawn on top of it. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="belowzeroopacity" type="lzx:number" default=".2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Opacity for area below zero.  Defaults to a low number
+            for a hazy, translucent effect. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="belowzero" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to fill the area below zero, and what color.
+            (Will not be drawn if no color specified.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="baselabels" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to label the individual bar ticks, and if so,
+            what color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="barticks" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to have ticks for individual bars, and if so,
+            what color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="altslider" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The slider for the alternate direction to paneslider. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="altminimum" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Grid's maximum for width.  (If lines are drawn
+            vertically, this controls horizontal visible area.  If lines are drawn
+            horizontally, this controls vertical visible area.  Changing these
+            will allow the user to zoom in and out on a particular area, and
+            will scale data accordingly.)  Note: Not settable in barchart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="altmaximum" type="lzx:number" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Grid's minimum for width.  (If lines are drawn
+            vertically, this controls horizontal visible area.  If lines are drawn
+            horizontally, this controls vertical visible area.  Changing these
+            will allow the user to zoom in and out on a particular area, and
+            will scale data accordingly.)  Note: Not settable in barchart. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="adjusttodata" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to adjust the graph to data. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="memorymonitor_model" type="lzx:memorymonitor_model" >
+</xs:element>
+  <xs:complexType name="memorymonitor_model" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="scale" type="lzx:number" default="1 / 1024" >
+</xs:attribute>
+      <xs:attribute name="max" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="current" type="lzx:number" default="-1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="roundrectbutton" type="lzx:roundrectbutton" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+A class for making nice-looking, styleable buttons with gradients, without any art assets.
+
+See test/test-roundrectbutton.lzx for several examples of how to use this component. 
+
+The component attributes are only used for initialization. They are not live constraints.
+Currently the best way to change them at runtime is to apply a &amp;lt;style&amp;gt;. 
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="roundrectbutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="upStopColor" type="lzx:color" default="0x999999" >
+</xs:attribute>
+      <xs:attribute name="upStartColor" type="lzx:color" default="0xcccccc" >
+</xs:attribute>
+      <xs:attribute name="overStopColor" type="lzx:color" default="0x777777" >
+</xs:attribute>
+      <xs:attribute name="overStartColor" type="lzx:color" default="0x999999" >
+</xs:attribute>
+      <xs:attribute name="downStopColor" type="lzx:color" default="0xCCCCCC" >
+</xs:attribute>
+      <xs:attribute name="downStartColor" type="lzx:color" default="0xFFFFFF" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+A class for making nice-looking, styleable buttons with gradients, without any art assets.
+
+See test/test-roundrectbutton.lzx for several examples of how to use this component. 
+
+The component attributes are only used for initialization. They are not live constraints.
+Currently the best way to change them at runtime is to apply a &amp;lt;style&amp;gt;. 
+</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boxShadowY" type="xs:string" default="2" >
+</xs:attribute>
+      <xs:attribute name="boxShadowX" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="boxShadowColor" type="xs:string" default="0xb3b3b3" >
+</xs:attribute>
+      <xs:attribute name="borderWidth" type="xs:string" default="1" >
+</xs:attribute>
+      <xs:attribute name="borderRadius" type="xs:string" default="15" >
+</xs:attribute>
+      <xs:attribute name="borderColor" type="lzx:color" default="0x999999" >
+</xs:attribute>
+      <xs:attribute name="backgroundStopColor" type="lzx:color" default="$once{parent.upStopColor}" >
+</xs:attribute>
+      <xs:attribute name="backgroundStartColor" type="lzx:color" default="$once{parent.upStartColor}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="LzTextFormat" type="lzx:LzTextFormat" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+    LzTextFormat is deprecated.  Use 'textformat' instead.
+    @keyword deprecated
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="LzTextFormat" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:textformat">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="myweek" type="lzx:myweek" >
+</xs:element>
+  <xs:complexType name="myweek" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basedatepickerweek">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rpc" type="lzx:rpc" >
+</xs:element>
+  <xs:complexType name="rpc" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="secureport" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The port to use for the secure socket between the client and the
+              LPS. If secure is false, this value is ignored.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="secure" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Make connection secure between client and the LPS secure
+             (HTTPS). Default is false. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="proxyinfo" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="proxy" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The remote proxy object. Proxy is set after the rpc object
+              loads. Proxy contains client-side function stubs to remote
+              methods. Each method takes an array of arguments and a delegate
+              like:
+
+                myrpc.proxy.remoteFunc( [ p1, p2, ..., pN ], delegate );
+
+              Remote methods with no arguments are passed in an empty array
+              like:
+
+                myrpc.proxy.otherRemoteFunc( [], delegate );
+
+              The delegate is used to handle the return value since RPC calls
+              are asynchronous.
+
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onunload" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is triggered when the remote object is unloaded.
+              @access public
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onload" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is triggered when the remote object is loaded.
+              @access public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onerror" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is triggered when an error or timeout occurs associated
+              with getting this object or calling one of its remote methods. 
+              @access public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoload" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Load remote object during init. If false, create remote object by
+              calling load(). Default is true. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datacombobox" type="lzx:datacombobox" >
+</xs:element>
+  <xs:complexType name="datacombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basedatacombobox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basezoomarea" type="lzx:basezoomarea" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An abstract class that provide basic zooming ability. 
+        Allow subclasses to modify the look and feel
+        and action to be taken
+        @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basezoomarea" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="starty" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="startx" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selectionDel" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selecting" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ user is selecting or not </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="plotarea" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="endy" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="endx" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="enabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable zoom area </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="duration" type="lzx:number" default="500" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ zoom animation duration </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="chart" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the chart instance </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_componentmanager" type="lzx:_componentmanager" >
+</xs:element>
+  <xs:complexType name="_componentmanager" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tree" type="lzx:tree" >
+</xs:element>
+  <xs:complexType name="tree" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetree">
+      <xs:attribute name="onactivate" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Double-clicking on the icon or text triggers this event. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="icon" type="xs:string" default="lztree_folder_rsc" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The resource for the item icon:
+              frame 1 (closed), frame 2 (opened), frame 3 (leaf) 
+              Default is lztree_folder_rsc defined in lz/tree.lzx.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="expander" type="xs:string" default="lztree_arrow_rsc" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The resource for the expanding icon:
+              frame 1 (closed), frame 2 (opened), frame 3 (leaf).
+              Default is lztree_arrow_rsc defined in lz/tree.lzx.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chartdata" type="lzx:chartdata" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A container class for dataseries instances.  Helps organize and
+        locate the data. All dataseries tags in a chart must be children
+        of this class. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chartdata" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="button" type="lzx:button" >
+</xs:element>
+  <xs:complexType name="button" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebutton">
+      <xs:attribute name="text_y" type="lzx:number" default="${this.height/2 - this._title.height/2}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the y position of the button text. default: centered </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text_x" type="lzx:number" default="${this.width/2 - this._title.width/2}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the x position of the button text. default: centered </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text_padding_y" type="lzx:number" default="4" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the amount of space to add vertically  when sizing button to its
+        text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text_padding_x" type="lzx:number" default="11" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the amount of space to add horizontally when sizing button to its
+        text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="slidertrack" type="lzx:slidertrack" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the inner track on which the sliderthumb rides </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="slidertrack" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseslidertrack">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listselector" type="lzx:listselector" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ a helper class that wraps the selectionmanager in some
+        higher level APIs, used by baselist </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="listselector" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:selectionmanager">
+      <xs:attribute name="multiselect" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If multiselect is true, multiple selection is enabled.
+        When the shift key is down, a range of items is selected.
+        When the control key is down, any item may be added to the
+        selection.
+             Default: false </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="piechart" type="lzx:piechart" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+          A pie chart represents a chart that is displayed in the 2D
+          polar plane. This class inherits immediately from chart class
+          and can be instantiated directly. (Warning: Of beta quality.)
+          @access public
+          </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="piechart" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selectedpie" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Which pie is selected, if there are multiple pies. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ploty" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Plot area y coordinate, relative to chart as a whole. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="plotx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Plot area x coordinate, relative to chart as a whole. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="plotwidth" type="lzx:number" default="${this.width - 1}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of plotting area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="plotheight" type="lzx:number" default="${this.height - 1}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Height of plotting area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="plotbgcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Background color of the plot area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="piespacing" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The space between the pies, if there are multiple pies. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of the plot area's border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="border" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Border around the plot area, if anything. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgresource" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If desired, a resource can be used in the background.
+            If specified, this view will appear behind the chart,
+            with everything drawn on top of it. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="menuarrow" type="lzx:menuarrow" >
+</xs:element>
+  <xs:complexType name="menuarrow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="import" type="lzx:import" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The &lt;import&gt; tag is used to import, at run time, source code contained in another (library) file. See the Guide for a complete discussion. Also see the &lt;library&gt; tag. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="import" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="stage" type="xs:string" default="late|defer" >
+</xs:attribute>
+      <xs:attribute name="proxied" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="href" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  A reference to a target file whose content is treated as a loadable module </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="textlistitem" type="lzx:textlistitem" >
+</xs:element>
+  <xs:complexType name="textlistitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:listitem">
+      <xs:attribute name="text_y" type="xs:string" default="${this.height/2 - this._title.height/2}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the y position of the text label. default: centered </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text_x" type="xs:string" default="4" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The x position of the displayed text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rtmpstatus" type="lzx:rtmpstatus" >
+</xs:element>
+  <xs:complexType name="rtmpstatus" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="rtmpc" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ rtmpconnection to monitor </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="valueline" type="lzx:valueline" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+       Represents a line in the chart
+       @access public
+       </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="valueline" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="tipEnable" type="lzx:boolean" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable tooltip for data </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tip" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the tooltip value will be display when the mouse over the line </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the label will be display next to the line </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the axis value could be "x" or "y" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelstyle" type="lzx:labelstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ style object used for anything that contains a label within the chart.
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="labelstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+      <xs:attribute name="linesize" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ size of border of label background  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="linecolor" type="lzx:color" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ color of bounding box border </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the number of pixels the font is inset from the border </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fontcolor" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ color of the font </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fontangle" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ angle of rotation of the font </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fillcolor" type="lzx:color" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ color of bounding box fill </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basevaluecomponent" type="lzx:basevaluecomponent" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ an abstract class for components that represent a value for data </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basevaluecomponent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="value" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the value that this item represents. When selected,
+        the parent selection group's value will be set to this value.
+        Most subclasses require you to call getValue() to get the
+        value of the attribute.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="type" type="xs:string" default="expression" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The type of value of the item. Default is 'expression',
+             which will attempt to heuristicate the type from the
+             value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetooltip" type="lzx:basetooltip" >
+</xs:element>
+  <xs:complexType name="basetooltip" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" default="Default Value" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="form" type="lzx:form" >
+</xs:element>
+  <xs:complexType name="form" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseform">
+      <xs:attribute name="spacing" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Vertical space between content and button area. If forms height is
+              specified, the button area will be flush against the form's bottom
+              right corner (adjusted by any layout that the form has). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_top" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The top inset for content appearing within form. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_right" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The right inset for content appearing within form. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_left" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The left inset for content appearing within form. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_bottom" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The bottom inset for content appearing within form. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basestyle" type="lzx:basestyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ base style for all chart styles
+      @access public
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basestyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="valueregionstyle" type="lzx:valueregionstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ valueregionstyle is used for drawing the appearance of a value region
+      @access public
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="valueregionstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chartstyle" type="lzx:chartstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ style for chart, contain nested level of style extend from basestyle
+      @access public
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chartstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+      <xs:attribute name="version" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="onversion" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="datastyleindex" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="radiobutton" type="lzx:radiobutton" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Implements a "radio" button, allows a one-of-many selection when
+          several of these are in a radiogroup. Radiobutton expects its parent
+          to be radiogroup. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="radiobutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselistitem">
+      <xs:attribute name="text_y" type="lzx:number" default="${this.rb.height/2 - this._title.height/2}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the y position of the text label. default: centered </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="alert" type="lzx:alert" >
+</xs:element>
+  <xs:complexType name="alert" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:modaldialog">
+      <xs:attribute name="text_y" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The y position of the button text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text_x" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The x position of the button text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="result" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ After the alert is closed, this is set to true if button1 ("OK")
+              is pressed or false if button2 is pressed. You can check for the
+              result value using the onresult event. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onresult" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This event is sent when a button is pressed. Use this to check the
+              result value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxtextwidth" type="xs:string" default="${Math.round(parent.width/3) - inset_left - inset_right                     - content_inset_left - content_inset_right}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The max length of a line of text before it wraps. Default: 1/3 of
+              the parent's width - width of window dressing and margin. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="button2" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If a string is set for this attribute, a second button will be
+              shown to the left of the first with this text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="button1" type="xs:string" default="OK" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Alert shows only this button, if button2 isn't set.
+              You may specify a different string to change the text of the
+              button. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basegridcolumn" type="lzx:basegridcolumn" >
+</xs:element>
+  <xs:complexType name="basegridcolumn" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="sortpath" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An xpath expression to use to determine the sort key for this
+              column. By default, this is the column's datapath's xpath. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minwidth" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The minimum width for this column. This is relevant if the column
+              can be resized. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hasSort" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Set by &lt;code&gt;doSort()&lt;/code&gt; method. If true, then this is the current
+              sort column.
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="descendComparator" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An optional method. If defined, this method will be used when 
+              the column is sorted when ascendsort is set to false. This method
+              should have the comparator signature. It should accept to string
+              argument and return 1, 0 , or -1, indicating that the two
+              arguments are in order, equivalent, or out of order,
+              respectively. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datatype" type="xs:string" default="string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Either "number" or "string". If "string", then dictionary sort
+              is used. If "number", then types are coerced to a number before
+              sorting. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="colwidth" type="xs:string" default="${this.width}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The current width of the column. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ascendsort" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the next sort will be ascending, otherwise it will
+              be descending.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ascendComparator" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An optional method. If defined, this method will be used when 
+              the column is sorted when ascendsort is set to true. This method
+              should have the comparator signature. It should accept to string
+              argument and return 1, 0 , or -1, indicating that the two
+              arguments are in order, equivalent, or out of order,
+              respectively. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="strokestyle" type="lzx:strokestyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private 
+Implementes the Stroke rendering lines </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="strokestyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="strokeWidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ -    Numerical value that indicate the thickness of the Stroke line in pixels. Default value ="1"</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="strokeType" type="xs:string" default="solid" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ String value that indicates the type of the Stroke, possible values : "solid", "dashed" or "dotted". Default value "solid"</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="strokeColor" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of the Stroke in  hexadecimal value, default value "0x000000"</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="spaceLength" type="lzx:number" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Number of pixels of spacing between each small line that compose the stylish line. Default value ="5"</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dottedLength" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Number of pixel of each small line that compose the stylish line. Default value ="10"</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="menu" type="lzx:menu" >
+</xs:element>
+  <xs:complexType name="menu" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="opened" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ a boolean indicating whether or not the menu is in opened </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="attach" type="xs:string" default="bottom" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ a string to indicate how the floating part of the menu attaches to 
+              the menubutton or menuitem. Possible values are: 'top', 'bottom', 'left', and 'right' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chartbacking" type="lzx:chartbacking" >
+</xs:element>
+  <xs:complexType name="chartbacking" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basechartbacking">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="vslider" type="lzx:vslider" >
+</xs:element>
+  <xs:complexType name="vslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="switchaxis" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ switchaxis true means minimum-value is 
+                t op maximum is bottom false turns around </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showvalue" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ showvalue should the slider show the numbers of min/max </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showrange" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Showrange should the slidertrack be with color while 'sliding' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minvalue" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Minimum Value </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxvalue" type="lzx:number" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Maximum Value </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="initvalue" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basedatacombobox" type="lzx:basedatacombobox" >
+</xs:element>
+  <xs:complexType name="basedatacombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+      <xs:attribute name="valuedatapath" type="xs:string" default="@value" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Datapath to value for items in list. See caveat.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="textdatapath" type="xs:string" default="text()" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Datapath to text to display for items in list. 
+              See caveat.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="statictext" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If set, this will always be displayed instead of selected item
+              text. Behaves like a menu button. Also see defaulttext. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shownitems" type="xs:string" default="4" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sets the height to the number of items to show in combobox
+              popup list. Must be greater than 0. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selectfirst" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ When true, the 1st item is selected oninit. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selected" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Datapointer to selected item. 
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselected" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when an item is selected. Sends selected item. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when an item is selected. Sends selected item. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onisopen" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Called when combobox opens or closes </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oncombofocus" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The equivalent for onfocus for combobox. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oncomboblur" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The equivalent for onblur for combobox. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="menuclassname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="listwidth" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of popup list, defaults to width of combobox view. During
+              setup, the width of the floating list view might not yet be set,
+              so this returns the expected width. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="listattach" type="xs:string" default="bottom" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Where the floatinglist should attach to its owner. Possible
+              values: bottom, top, left, right.  In the event of a canvas
+              out-of-bounds, the floating list will attach in a visible
+              location. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="itemdatapath" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Datapath to items in list. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="itemclassname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The name of the class for items in the floating list. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isopen" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates whether or not the popup list is showing.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ismenu" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the combobox will behave like a menu. "value" is
+              ignored, and items will not remain selected. Selecting an
+              item generates an onselect event </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaulttext" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Default text to display before a selection is made. No default
+              item is selected if defaulttext is set. Defaulttext is replaced
+              with selected item's text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="columnchart" type="lzx:columnchart" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+       A chart class that renders vertical bars.
+       Inherits from the chart class.  (Warning: Of beta quality.)
+       @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="columnchart" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:rectangularchart">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="row" type="lzx:row" >
+</xs:element>
+  <xs:complexType name="row" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="label" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="include" type="lzx:include" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The &lt;include&gt; tag is used to include source code contained in another file. See the Guide for a complete discussion. Also see the &lt;library&gt; tag. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="include" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="type" type="xs:string" default="text|xml" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  If this attribute has the value text , the content of the target file is included as text. Otherwise, it is read as XML.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="href" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  A reference to a target file whose content is included in the application that contains this include element. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="menutrackgroup" type="lzx:menutrackgroup" >
+</xs:element>
+  <xs:complexType name="menutrackgroup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetrackgroup">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="roundrect" type="lzx:roundrect" >
+</xs:element>
+  <xs:complexType name="roundrect" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="oninsettop" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="oninsetright" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="oninsetleft" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="oninsetbottom" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="oninset" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="insettop" type="lzx:size" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="insetright" type="lzx:size" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="insetleft" type="lzx:size" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="insetbottom" type="lzx:size" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="inset" type="lzx:size" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The margin between the outside view and the content view </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boxShadowY" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The x offset of the box shadow.  The box shadow is not drawn by default.
+            Specify a boxShadowColor in order to draw it. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boxShadowX" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The x offset of the box shadow.  The box shadow is not drawn by default.
+            Specify a boxShadowColor in order to draw it. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boxShadowOpacity" type="xs:string" default="0.5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The box shadow opacity. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boxShadowColor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The box shadow color.  If this is specified, a box shadow is drawn.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderWidth" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the border.  If this is zero, no frame is drawn. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderRadius" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The rounding radius of the border corners.  Because the default
+            join type is a round join, even a radius of zero will product some
+            rounding. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border opacity </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderColor" type="lzx:color" default="black" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border color </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundStopOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background stop opacity.  This defaults to one (opaque) unless the
+            stop color is not specified and the start color is, in which case it
+            defaults to zero (fully transparent). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundStopColor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background stop color.  This is the color that is drawn at the
+            bottom or right of the view, depending on the value of
+            backgroundGradientOrientation.  See the documentation for
+            backgroundStartColor for additional documentation. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundStartOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background start opacity.  This defaults to one (opaque) unless the
+            start color is not specified and the stop color is, in which case it
+            defaults to zero (fully transparent). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundStartColor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background start color.  This is the color that is drawn at
+            the top or left of the view, depending on the value of
+            backgroundGradientOrientation.  If this and the backround stop color
+            are specified, a gradient background is drawn in the direction specified
+            by backgroundGradientOrientation.  If only one of the background start
+            and stop color are specified, a gradient of the same color that fades to
+            transparent at the unspecified end is drawn.  If a box shadow is drawn,
+            the background defaults to white.  Specify a start and stop opacity to
+            suppress this behavior. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundGradientOrientation" type="xs:string" default="vertical" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background gradient orientation.  One of 'vertical' (the default)
+            and 'horizontal'. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="versioninfo" type="lzx:versioninfo" >
+</xs:element>
+  <xs:complexType name="versioninfo" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_newinternalinputtext" type="lzx:_newinternalinputtext" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A private inputtext class used by baseedittext that basically passes
+          its events (onfocus, onblur, onkeyup, onkeydown, ontext) up. Instances
+          of _internalinputtext should only exist in a baseedittext class. Note
+          that _internalinputtext assumes that its parent is a baseedittext.
+
+          Baseedittext controls _internalinputtexts y position and multiline
+          setting. Subclasses and instances should not override these
+          attributes.
+
+          @keywords private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="_newinternalinputtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:inputtext">
+      <xs:attribute name="ignorecallup" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True means that doSetValue called internal inputtext and inputtext
+              should not call doSetValue back. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="pointstyle" type="lzx:pointstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ style for point and datamarker
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="pointstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+      <xs:attribute name="strokeStyle" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of the stroke </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shape" type="xs:string" default="square" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 'circle','square','triangle', [name of resource] </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="lineWidth" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of the stroke line </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="image" type="xs:string" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ image path </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="gradient" type="xs:string" default="none" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 'none', 'linear', 'radial' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="color" type="lzx:color" default="black" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ RGB color </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="checkdragstate" type="lzx:checkdragstate" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  This should be declared as a child of the thing for which you want to
+        enable dragging.  You will need to define a view (an instance of a
+        subclass of &lt;xref linkend="lz.basedragimage"/&gt;)
+        to define the visual look of the thing while its being dragged.
+        &lt;example executable="false"&gt;
+        &amp;lt;class name="dragger" &amp;gt;
+            ...
+            &amp;lt;handler name="onmousedown"&amp;gt;
+                checkdrag.setAttribute('applied', true);
+            &amp;lt;/handler&gt;
+            &amp;lt;handler name="onmouseup"&amp;gt;
+                canvas.dragimage.stopdrag(this);
+                checkdrag.setAttribute('applied', false);
+            &amp;lt;/handler&amp;gt;
+
+            &amp;lt;checkdragstate name="checkdrag" draggername="dragimage"/&amp;gt;
+        &amp;lt;/class&amp;gt;
+        &lt;/example&gt;
+
+        The object that you want to accept a drop action, needs to register with
+        lz.Track using the same group as is declared in the dragimage.
+
+        &lt;example executable="false"&gt;
+        &amp;lt;class name="droptarget"&amp;gt;
+            ...
+            &amp;lt;method name="init"&amp;gt;
+                super.init();
+                lz.Track.register(this, 'target');
+            &amp;lt;/method&amp;gt;
+
+            &amp;lt;handler name="onmousetrackover"&amp;gt;
+               setAttribute('bgcolor', 0xffff00); // hilite
+            &amp;lt;/handler&amp;gt;
+            &amp;lt;handler name="onmousetrackout"&amp;gt;
+               setAttribute('bgcolor', null); // normal
+            &amp;lt;/handler&amp;gt;
+            &amp;lt;handler name="onmousetrackup"&amp;gt;
+               setAttribute('bgcolor', null); // normal
+               canvas.dragimage.dropcomplete(this);
+               Debug.write('dropped: '+dragimage.source.text);
+            &amp;lt;/handler&amp;gt;
+        &amp;lt;/class&gt;
+        &lt;/example&gt;
+        
+        @access public
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="checkdragstate" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:state">
+      <xs:attribute name="draggername" type="xs:string" default="dragimage" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ an instance subclass of basedragimage that defines the
+         visual representation of the item while it is being dragged
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="ticklabel" type="lzx:ticklabel" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Labels along the tick axes. Either incremental, or, in a barchart,
+        determined by specified data. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="ticklabel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="ltextsize" type="lzx:number" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size of the text for this label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ltext" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The text of this label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ltcolor" type="lzx:color" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of this label's text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelangle" type="lzx:number" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ XX To be implemented: The rotation of this particular label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="radioitem" type="lzx:radioitem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  A selectable list item which works like a Radio Button
+            though uses an icon instead of radio button graphics.
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="radioitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselistitem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basegridrow" type="lzx:basegridrow" >
+</xs:element>
+  <xs:complexType name="basegridrow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="styleRegularColor" type="lzx:color" default="black" >
+</xs:attribute>
+      <xs:attribute name="selectedColor" type="lzx:color" default="black" >
+</xs:attribute>
+      <xs:attribute name="selected" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="selectable" type="lzx:boolean" >
+</xs:attribute>
+      <xs:attribute name="regularColor" type="lzx:color" default="black" >
+</xs:attribute>
+      <xs:attribute name="ownerGrid" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="onselected" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="lineColor" type="lzx:color" default="black" >
+</xs:attribute>
+      <xs:attribute name="highlighted" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="highlightColor" type="lzx:color" default="black" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basedatepickerday" type="lzx:basedatepickerday" >
+</xs:element>
+  <xs:complexType name="basedatepickerday" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates if this day is currently selected 
+              @keywords public
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selectable" type="lzx:boolean" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates if this day is selectable.  The day is selectable if 
+              it is within the range of possible selected dates 
+              @keywords public 
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="disabled" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates if this day should be enabled or disabled.  The day 
+              would be disbled if it should not show its daynum.
+              @keywords public 
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="daynum" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The day of the month to be displayed 
+              @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="viewspoolmanager" type="lzx:viewspoolmanager" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private 
+    Manage a hash table of viewspool 
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="viewspoolmanager" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="pools" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private 
+    Manage a hash table of viewspool 
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datapath" type="lzx:datapath" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+A cursor in a dataset.
+A datapointer is an object that represents a pointer to a node in a lz.dataset. The datapointer can be repositioned using either cursor movements calls such as LzDatapointer.selectNext(), or by running an XPath request via LzDatapointer.setXPath().
+
+Datapointers support a subset of the XPath specification, which uses a notation similar to the UNIX file-system to refer to nodes within a dataset. Once a datapointer is bound to a node in a dataset it will keep pointing to that node until it is moved. If the dataset is edited, the behavior of the datapointer will be controlled by its rerunxpath attribute. If this attribute is true, it will continue pointing to its current node as long as it is valid. 
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datapath" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:datapointer">
+      <xs:attribute name="spacing" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The spacing (in pixels) between replicated views.
+[Note] 	Note
+This attribute is only available if replication is set to either "lazy" or "resize".  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sortpath" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+An XPath to use to obtain the sort key for sorting if replication occurs. To change this attribute, use .setAttribute('sortpath', ...),  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sortorder" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The order to use to sort the dataset if replication occurs. One of "ascending" or "descending" to use built in dictionary sort, or a function which compares two strings and returns 1 if the strings are in order, 0 if they are the same, and -1 if they are out of order. To change this attribute, use setAttribute('sortorder', ...).  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="replication" type="xs:string" default="normal" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Determines whether to use normal or lazy replication, if the datapath matches more than one node. See the section on Replication in the Guide for information about the use of this attribute.
+[Note] 	Note
+The choice of replication style implies a choice of replication manager. Each replication manager may have additional attributes which are specified as attributes of the datapath. For example, lz.LazyReplicationManager takes axis and spacing attributes. See the documentaion for the corresponding replication manager for detailed information on these additional attributes.
+
+One of: 	'normal' | 'lazy' | 'resize'  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pooling" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+		This attribute applies to datapaths which match multiple nodes and force replication. If pooling is true, views that are data-bound to this datapath are recycled if the dataset changes. Otherwise, views are deleted when the data nodes they are bound to disappear, and created when new data nodes match the datapath. See the section on Pooling in the Guide for information about the use of this attribute. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The direction in which the replicated elements will be layed out.
+		Note
+This attribute is only available if replication is set to either "lazy" or "resize".  
+	One of: "x" | "y"  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="icontab" type="lzx:icontab" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A tab item for use in sidebar.lzx - switches between listpanel views </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="icontab" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselistitem">
+      <xs:attribute name="label_y" type="xs:string" default="-1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the y offset for the label </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_x" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the icon and text are contained in one view, and inset_x sets the x for its position </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="iconname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ optional icon for tab </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="icon_y" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the y postion of the icon </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="linestyle" type="lzx:linestyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ style for point or border
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="linestyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+      <xs:attribute name="type" type="xs:string" default="solid" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 'solid', 'dotted' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="size" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ pixel size for the stroke of the line </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="color" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ RGB color on the axis line </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="sliderthumb" type="lzx:sliderthumb" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the visual thumb the user drags to select a value </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="sliderthumb" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basesliderthumb">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datepicker" type="lzx:datepicker" >
+</xs:element>
+  <xs:complexType name="datepicker" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basedatepicker">
+      <xs:attribute name="startAsIcon" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Set to true to initially show the datepicker as an
+              icon, otherwise set to false.
+              @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oldvalue" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="allowdrag" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="linechartplotarea" type="lzx:linechartplotarea" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keywords private
+     plotarea of linechart </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="linechartplotarea" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:virtualdrawview">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="TestSuite" type="lzx:TestSuite" >
+</xs:element>
+  <xs:complexType name="TestSuite" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:Test">
+      <xs:attribute name="onteststart" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="ontestfinish" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="ontestfail" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onsuitestart" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onsuitefinish" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="controlPanel" type="xs:string" default="${canvas.lzunitControlPanel}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_datepicker_dirButton" type="lzx:_datepicker_dirButton" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="_datepicker_dirButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebutton">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorslider" type="lzx:colorslider" >
+</xs:element>
+  <xs:complexType name="colorslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="inputtext" type="lzx:inputtext" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+The basic input-text element.
+JavaScript: lz.inputtext
+
+This tag creates an area of the canvas that the user can use to edit text. It is equivalent to the HTML &lt;input type="text"&gt;, &lt;input type="password"&gt;, and textarea tags.
+
+See the documentation for the &lt;text&gt; tag for a description of the width and height attributes, and of scrolling. 
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="inputtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="password" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, the inputtext contents will be obscured </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onenabled" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sent whenever the text field is enabled. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="enabled" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, the inputtext will be editable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lazyreplicator" type="lzx:lazyreplicator" >
+</xs:element>
+  <xs:complexType name="lazyreplicator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:replicator">
+      <xs:attribute name="clonesoffset" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="clonedel" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoscreen" type="lzx:videoscreen" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ used by videoplayer component
+          @access private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="videoscreen" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="volume" type="xs:string" default="1.0" >
+</xs:attribute>
+      <xs:attribute name="videoWidth" type="xs:string" default="${             Math.min(this.innerWidth,                      this.innerHeight * this.aspectRatio)}" >
+</xs:attribute>
+      <xs:attribute name="videoHeight" type="xs:string" default="${             Math.min(this.innerHeight,                      this.innerWidth / this.aspectRatio)}" >
+</xs:attribute>
+      <xs:attribute name="url" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="type" type="xs:string" default="http" >
+</xs:attribute>
+      <xs:attribute name="starttime" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="innerWidth" type="xs:string" default="${             this.width - (this.borderLeft + this.borderRight)}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the actual width of the videoview 
+            @access private
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="innerHeight" type="xs:string" default="${             this.height - (this.borderTop + this.borderBottom)}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the actual height of the videoview 
+            @access private
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="debug" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ true for verbose debug logging </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="capturing" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="borderTop" type="xs:string" default="5" >
+</xs:attribute>
+      <xs:attribute name="borderRight" type="xs:string" default="5" >
+</xs:attribute>
+      <xs:attribute name="borderLeft" type="xs:string" default="5" >
+</xs:attribute>
+      <xs:attribute name="borderBottom" type="xs:string" default="5" >
+</xs:attribute>
+      <xs:attribute name="autoplay" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="aspectRatio" type="xs:string" default="$once{             4 / 3}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lzradiobutton" type="lzx:lzradiobutton" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Subclass of radiobutton with customizable look.  apps should either
+        include lzradio_resources.lzx (to get default look) or define
+        a "lzradio_rsrc" resource with the same format. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="lzradiobutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseradiobutton">
+      <xs:attribute name="text_y" type="lzx:number" default="$once{this._rb.height/2 - this._title.height/2}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The y position of the text label. Default: centered. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text_x" type="lzx:number" default="$once{this._rb.width + 2}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The x position of the text label. Default: 2 pixels past
+              radiobutton resource. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="XMLHttpRequest" type="lzx:XMLHttpRequest" >
+</xs:element>
+  <xs:complexType name="XMLHttpRequest" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="timeout" type="xs:string" default="60000" >
+</xs:attribute>
+      <xs:attribute name="statusText" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ String message accompanying the status code </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="status" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Numeric code returned by server, such as 404 for "Not Found" or 200 for "OK" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="responseXML" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ DOM-compatible document object of data returned from server process </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="responseText" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ String version of data returned from server process </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="readyState" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  Object status integer: 0 Uninitialised The initial value. 1 Open The open() method has been successfully called. 
+              2 Sent The send() method has been successfully called, but no data has yet been received. 3 Receiving Data is being received, 
+              but the data transfer is not yet complete. 4 Loaded The data transfer has been completed. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="proxied" type="xs:string" default="$once{canvas.proxied}" >
+</xs:attribute>
+      <xs:attribute name="parsexml" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="onreadystatechange" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="headers" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="valuelinestyle" type="lzx:valuelinestyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ valuelinestyle is used to set style to the 
+     NOTE: valuelinestyle extends basestyle
+     @access public
+     </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="valuelinestyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fileupload" type="lzx:fileupload" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+    @topic Incubator
+    @subtopic Components
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="fileupload" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="uploadenable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Enable upload. True to enable uploading, false to disable uploading. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="msg" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ message of feedback to user </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxsize" type="xs:string" default="10000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Max file size in bytes </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fileref" type="xs:string" default="$once{new flash.net.FileReference()}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ file reference, for internal use 
+            @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="command" type="lzx:command" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+   
+    @copyright Copyright 2001-2010 Laszlo Systems, Inc.  All Rights Reserved.
+               Use is subject to license terms.
+   
+    @affects lzcommand
+    @access public
+    @topic LFC
+    @subtopic Views
+    @devnote A command is an object that sends an event in response to keyboard input.
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="command" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="onselect" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+    If the command is active, this event is sent
+    when the keys array are pressed simultaneously.
+    @lzxtype event
+  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="keys" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ array of keys (strings) that, when pressed together,
+    cause the onselect event of the command to be sent. For example:
+    setAttribute('key', ['a', 'shift'])
+    @type [String]
+  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="key" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+  WTF?  See LPP-4982, LPP-7814
+  Necessary to add "key" to the schema
+  @access private
+</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="active" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+    true if the command is currently active.
+    The default is &lt;i&gt;true&lt;/i&gt;.
+    @type Boolean
+  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="DisplayKeys" type="xs:string" default="{control:'Ctrl', shift:'Shift', alt:'Alt'}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+ * Mapping from key names to display strings used by keysToString
+ * @type Dictionary
+ * @keywords read-only
+ </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colormenu" type="lzx:colormenu" >
+</xs:element>
+  <xs:complexType name="colormenu" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetrackgroup">
+      <xs:attribute name="owner" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datastyle" type="lzx:datastyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ dataseriesstyle is used for drawing the appearance of a dataseries
+      @access public
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datastyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="hotspot" type="lzx:hotspot" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+This class is a contract interface for hotspots that can be used
+by the imagemap class. A generic hotspot does three things:
+1. Tells us if it contains a point
+2. Performs some action on entry
+3. Performs some action on leaving
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="hotspot" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="circlehotspot" type="lzx:circlehotspot" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+A general hotspot for points inside a circle.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="circlehotspot" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:hotspot">
+      <xs:attribute name="y" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The Y coordinate of the center </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="x" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The X coordinate of the center </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="radius" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The radius of the circle </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basedatepickerweek" type="lzx:basedatepickerweek" >
+</xs:element>
+  <xs:complexType name="basedatepickerweek" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="dayclass" type="xs:string" default="$once{classroot.dayclass}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Name of the day class instance to use.  
+              @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videolibrarypopup" type="lzx:videolibrarypopup" >
+</xs:element>
+  <xs:complexType name="videolibrarypopup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="yourY" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="yourX" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="yourWidth" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="yourHeight" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="url" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="type" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="title" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="popupWidth" type="xs:string" default="300" >
+</xs:attribute>
+      <xs:attribute name="popupHeight" type="xs:string" default="${this.f.height + 2}" >
+</xs:attribute>
+      <xs:attribute name="pinYourYPos" type="xs:string" default="0.0" >
+</xs:attribute>
+      <xs:attribute name="pinYourXPos" type="xs:string" default="0.5" >
+</xs:attribute>
+      <xs:attribute name="pinY" type="xs:string" default="${             this.yourY +             (this.pinYourYPos * this.yourHeight) -             (this.pinMyYPos * this.height)}" >
+</xs:attribute>
+      <xs:attribute name="pinX" type="xs:string" default="${             this.yourX +             (this.pinYourXPos * this.yourWidth) -             (this.pinMyXPos * this.width)}" >
+</xs:attribute>
+      <xs:attribute name="pinMyYPos" type="xs:string" default="1.0" >
+</xs:attribute>
+      <xs:attribute name="pinMyXPos" type="xs:string" default="0.5" >
+</xs:attribute>
+      <xs:attribute name="description" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="atts" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tabpane" type="lzx:tabpane" >
+</xs:element>
+  <xs:complexType name="tabpane" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetabpane">
+      <xs:attribute name="tabwidth" type="lzx:number" default="-1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of the tab associated with this tabpane. If not set, the tab
+              will resize itself to fit. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetabpanecontent" type="lzx:basetabpanecontent" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is the content of a basetabpane.
+          @keywords private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basetabpanecontent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="borderinput" type="lzx:borderinput" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      @topic Incubator
+      @subtopic Components
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="borderinput" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="labelwidth" type="lzx:number" default="80" >
+</xs:attribute>
+      <xs:attribute name="labelstyle" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ should be an object of type "textstyle" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="changed" type="xs:string" default="${this.txt.changed}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      @topic Incubator
+      @subtopic Components
+  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="stepper" type="lzx:stepper" >
+</xs:element>
+  <xs:complexType name="stepper" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+      <xs:attribute name="step" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="numberAlign" type="xs:string" default="left" >
+</xs:attribute>
+      <xs:attribute name="minimum" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="maximum" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="initialNumber" type="lzx:number" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rectangularchart" type="lzx:rectangularchart" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+       class that provides all common features for the rectangular charts like line, bar and column
+       @access public
+       </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="rectangularchart" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:chart">
+      <xs:attribute name="verticalGridLines" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Determines if the vertical grid lines are going to be used </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onRenderStop" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onRenderStart" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="miny" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The minimum virtual value to be rendered in the 'y' axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The minimum virtual value to be rendered in the 'x' axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxy" type="lzx:number" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The maximum virtual value to be rendered in the 'y' axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxx" type="lzx:number" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The maximum virtual value to be rendered in the 'x' axis </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="horizontalGridLines" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="horizontalGridBands" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Determines if the horizontal grid lines are going to be used </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="gridlinecolor" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="defaultminy" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="defaultminx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="defaultmaxy" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="defaultmaxx" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="dataSeriesLeaf" type="xs:string" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="modaldialog" type="lzx:modaldialog" >
+</xs:element>
+  <xs:complexType name="modaldialog" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:windowpanel">
+      <xs:attribute name="content_inset_top" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The top inset for the dialog contents from the edge of the window
+              inner frame. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="content_inset_right" type="xs:string" default="14" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The right inset for the dialog contents from the edge of the
+              window inner frame </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="content_inset_left" type="xs:string" default="14" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The left inset for the dialog contents from the edge of the
+              window inner frame. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="content_inset_bottom" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The bottom inset for the dialog contents from the edge of the
+              window inner frame. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="menufloatinglist" type="lzx:menufloatinglist" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="menufloatinglist" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:floatinglist">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="ZoomView" type="lzx:ZoomView" >
+</xs:element>
+  <xs:complexType name="ZoomView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="opened" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="closed" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basecheckbox" type="lzx:basecheckbox" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A checkbox component representing a boolean. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basecheckbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="gridcolumn" type="lzx:gridcolumn" >
+</xs:element>
+  <xs:complexType name="gridcolumn" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basegridcolumn">
+      <xs:attribute name="sortable" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the column header is clickable and will initiate a 
+              sort </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showheader" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If set to false, then no header will be shown for this column.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resizemargin" type="lzx:number" default="3" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the resizer between columns.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resizable" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If set to false, the column cannot be resized. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="item" type="lzx:item" >
+</xs:element>
+  <xs:complexType name="item" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="showcomponenthelpers" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="root" type="xs:string" default="this" >
+</xs:attribute>
+      <xs:attribute name="reference" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="opendefaultplacement" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="open" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="isview" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="method" type="lzx:method" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Attaches a function or event handler to an object or class. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="method" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="name" type="xs:string" use="required" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The name of a variable that will be set to this object when the application is started. If this element is directly within a canvas or library element, the global variable and the canvas property with this name will be set to this object. If this element is within another object, that object's property with this name will be set to this object. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="args" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The parameter names of this method. The value of this attribute is a comma-separated list of JavaScript identifiers. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="allocation" type="xs:string" default="instance|class" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ One of:
+class
+    The attribute will be an attribute of the class; to refer to it, you say lz.classname.attributename . 
+instance
+    Each instance will have an attribute with the specified properties ( name , type , value , etc.). 
+
+You can set allocation to class to get static attributes. Static properties are attached to the class itself, for example lz.classname . </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="baseopttreenode" type="lzx:baseopttreenode" >
+</xs:element>
+  <xs:complexType name="baseopttreenode" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="startdragdelay" type="xs:string" default="800" >
+</xs:attribute>
+      <xs:attribute name="startdragdel" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="open" type="xs:string" default="${ dopen }" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A boolean value representing whether or not this node
+              is open. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="indent" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The amount, in pixels, to indent each element of the tree.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="highlight" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, this element is selected </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dragging" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="depth" type="xs:string" default="${ ddepth }" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A 0-based depth number that indicates the depth of this
+              element in the tree. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datalistselector" type="lzx:datalistselector" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ a helper class that wraps the dataselectionmanager in some
+        higher level APIs, used by baselist </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datalistselector" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:dataselectionmanager">
+      <xs:attribute name="multiselect" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If multiselect is true, multiple selection is enabled.
+        When the shift key is down, a range of items is selected.
+        When the control key is down, any item may be added to the
+        selection.
+             Default: false </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="gradientview" type="lzx:gradientview" >
+</xs:element>
+  <xs:complexType name="gradientview" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="stretchWidth" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="stretchHeight" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="gradientType" type="xs:string" default="linear" >
+</xs:attribute>
+      <xs:attribute name="gradientOrientation" type="xs:string" default="vertical" >
+</xs:attribute>
+      <xs:attribute name="colorTo" type="lzx:color" >
+</xs:attribute>
+      <xs:attribute name="colorFrom" type="lzx:color" >
+</xs:attribute>
+      <xs:attribute name="borderSizeTop" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="borderSizeRight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="borderSizeLeft" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="borderSizeBottom" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="borderSize" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="borderColorTop" type="lzx:color" >
+</xs:attribute>
+      <xs:attribute name="borderColorRight" type="lzx:color" >
+</xs:attribute>
+      <xs:attribute name="borderColorLeft" type="lzx:color" >
+</xs:attribute>
+      <xs:attribute name="borderColorBottom" type="lzx:color" >
+</xs:attribute>
+      <xs:attribute name="borderColor" type="lzx:color" default="0x000000" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dragger" type="lzx:dragger" >
+</xs:element>
+  <xs:complexType name="dragger" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tabs" type="lzx:tabs" >
+</xs:element>
+  <xs:complexType name="tabs" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetabs">
+      <xs:attribute name="tabspacing" type="lzx:number" default="-15" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Spacing between the tabs. Defaults to -15 so tabs overlap. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tabalign" type="xs:string" default="left" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Align the set of tabs within the dimensions of the "tabs"
+             container ("left", "center", "right"). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpledefaultlist" type="lzx:simpledefaultlist" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A list class that handles a default value. 
+          Input and output for the list is defined to be in this format:
+          &lt;code&gt;
+          &lt;list name="fubar"&gt;
+            &lt;item text="foo" value="bar" default="true"/&gt;
+            &lt;item text="goo" value="mar"/&gt;
+          &lt;/list&gt;
+          &lt;/code&gt;
+         
+          Currently only works with dataoption="lazy" or "pooling"
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="simpledefaultlist" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:list">
+      <xs:attribute name="defaultitem" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ LzDataElement of the default node 
+              null means the list has no default </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoselectdefault" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Set to true if the default item should be selected whenever
+            data is received </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="vscrollbar" type="lzx:vscrollbar" >
+</xs:element>
+  <xs:complexType name="vscrollbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basescrollbar">
+      <xs:attribute name="disabledbgcolor" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If this is defined, it will be used as the scrollbar's background
+          color when it is disabled. If not provided, the scrollbar will use
+          the bgcolor of its closest parent that has a bgcolor defined.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="polygonhotspot" type="lzx:polygonhotspot" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+A general hotspot for an N-sided polygon.
+This will create a polygon whose sides are described
+by moving in order to the points added by calling addPoint,
+returning back to the first point added to close the polygon.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="polygonhotspot" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:hotspot">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="debugger_shadow_right" type="lzx:debugger_shadow_right" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+    Drop shadow for the right side of the debugger window 
+
+    @keywords private
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="debugger_shadow_right" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorspot" type="lzx:colorspot" >
+</xs:element>
+  <xs:complexType name="colorspot" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:colormenuitem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datepickerweek" type="lzx:datepickerweek" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is the implementation of the datepickerweek for 
+          the datepicker </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datepickerweek" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basedatepickerweek">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseradiobutton" type="lzx:baseradiobutton" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Class baseradiobutton: represents a single radio button. If groupname
+           is defined, it will reference an baseradiogroup that's named
+           groupname. If both groupname and group are not defined, this
+           radiobutton will attempt to use a baseradiogroup ancestor in its view
+           hierarchy. If it can't find one, it will use a default baseradiogroup
+           with groupname 'lzdefaultgroup'. If this radiobutton is inside a
+           form, an implicit baseradiogroup is created as a child the form.
+
+           The first radiobutton is special for implicitly created
+           baseradiogroups. A baseradiogroup will inherit the groupdatapath,
+           used as the baseradiogroup's datapath, and submit attributes from the
+           first radiobutton, which are used during its instantiation. Those
+           same attributes are ignored for subsequent radiobuttons belonging in
+           the same group. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseradiobutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="value" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Value of this radiobutton. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="submitname" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The submit name for a baseradiogroup. This must be set by the first
+              radiobutton in a baseradiogroup to take effect. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="submit" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether a baseradiogroup will send its data when a form is
+              submitted. This must be set by the first radiobutton in a
+              baseradiogroup to take effect. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selected" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True if radio's group value is the same as group's. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselected" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when selected attribute selected or unselected. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="groupname" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Name of baseradiogroup. If not defined, it will use group reference as
+              its group. If both groupname and group are not defined, this
+              radiobutton will attempt to use a baseradiogroup ancestor in its view
+              hierarchy. If it can't find one, it will use a default baseradiogroup
+              with groupname 'lzdefaultgroup'. If this radiobutton is inside a
+              form, an implicit baseradiogroup is created as a child of the
+              form. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="groupdatapath" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The value datapath for a baseradiogroup. This must be set by the first
+              radiobutton in a baseradiogroup to take effect. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="group" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Reference to baseradiogroup. If groupname is defined, it will
+              reference an baseradiogroup that's named groupname. If both groupname
+              and group are not defined, this radiobutton will attempt to use a
+              baseradiogroup ancestor in its view hierarchy. If it can't find one,
+              it will use a default baseradiogroup with groupname
+              'lzdefaultgroup'. If this radiobutton is inside a form, an
+              implicit baseradiogroup is created as a child of the form. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_floatshadow" type="lzx:_floatshadow" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The shadows width and height are set to the width and height of the view
+          it is trying to apply a shadow to.
+          @keywords private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="_floatshadow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="shadowsize" type="xs:string" default="5" >
+</xs:attribute>
+      <xs:attribute name="oncornerresourcenumber" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onbottomvisible" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="offsety" type="xs:string" default="10" >
+</xs:attribute>
+      <xs:attribute name="cornerresourcenumber" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="bottomvisible" type="xs:string" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="edittext" type="lzx:edittext" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This component provides the look and feel for user editable text, data
+          binding, and focus events. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="edittext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+      <xs:attribute name="text_y" type="lzx:number" default="${multiline ? 2 : Math.round(((this.height - this.field.getTextHeight())/2))} " >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the y position of the text. default: centered, unless it is mutltiline </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resizable" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Set to true if you plan to change the width or height of the
+              component at run-time.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pattern" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A regular expression describing set of characters allowed in
+              this field. Restrict the characters that can be entered to a
+              pattern specified by a regular expression. Currently only the
+              expression [ ]* enclosing a set of characters or character
+              ranges, preceded by an optional "^", is supported. 
+              examples: [0-9]* , [a-zA-Z0-9]*, [^0-9]* </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="password" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Set to true for a password field. Text will appear as ****.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="multiline" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Set to true for multiple lines.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxlength" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The maximum number of chars that can be entered. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="debugger_shadow_bottom" type="lzx:debugger_shadow_bottom" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+    Drop shadow for the bottom of the debugger window
+
+    @keywords private
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="debugger_shadow_bottom" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="img" type="lzx:img" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="img" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="width" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="vspace" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="src" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="hspace" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="height" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="align" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="basebuttonrepeater" type="lzx:basebuttonrepeater" >
+</xs:element>
+  <xs:complexType name="basebuttonrepeater" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basebutton">
+      <xs:attribute name="onmousestilldown" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleboundslayout" type="lzx:simpleboundslayout" >
+</xs:element>
+  <xs:complexType name="simpleboundslayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to use between each view in the layout. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The axis in which this layout operates, 'x' or 'y'. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="newcheckbox" type="lzx:newcheckbox" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The basecheckbox implementation representing a boolean, i.e., checked
+          if true, else false. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="newcheckbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecheckbox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="menubar" type="lzx:menubar" >
+</xs:element>
+  <xs:complexType name="menubar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="imagemap" type="lzx:imagemap" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+A class which will activate hotspots as the mouse passes over them in a parent view, or deactivate
+them as they leave. This class operates by havign a number of objects subclassed from hotspot added.
+Each of these is then queried as the mouse passes about the view to alter its activation state.
+This class will operate either exclusively, only one active hotspot at a time, or may allow
+multiple active hotspots at once if exclusive is true (it is false by default). The class
+also provides suspend and resume methods to pause the classes handling of the hotspots and
+resume respectively. Note that the priority of choosing an active spot is random. That is
+in exclusive mode (or switching from non-exclusive to exclusive mode) if two spot a and b
+both contain x and y, no guarantee is made as to which of a and b will be chosen to be
+the active exclusive view. Additionally this will only activate and deactivate hotspots
+within the parent view. Even if a hotspot added to this map defines an active region outside
+the parent view it will not be honored. Therefore it is strongly recommended that no hotspots
+define an area outside of the view in which the are active. In order for this class
+to work the view in which it is defined must be clickable.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="imagemap" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="exclusive" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="reverselayout" type="lzx:reverselayout" >
+</xs:element>
+  <xs:complexType name="reverselayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to use between each view in the layout </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to inset the last view controlled by the layout</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="end" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ When true (the default), then the layout will push the subviews 
+              to the right (or bottom) of the containing view </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The axis in which this layout operates. One of 'x' or 'y'. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="textstyle" type="lzx:textstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Simple class that adds font attributes to style class
+        &lt;example executable="false"&gt;
+        &amp;lt;textstyle font="futura" fontsize="12" fontstyle="bold" /&amp;gt;
+        &lt;/example&gt;
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="textstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:style">
+      <xs:attribute name="fontstyle" type="xs:string" default="plain" >
+</xs:attribute>
+      <xs:attribute name="fontsize" type="xs:string" default="11" >
+</xs:attribute>
+      <xs:attribute name="font" type="xs:string" default="arial" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Simple class that adds font attributes to style class
+        &lt;example executable="false"&gt;
+        &amp;lt;textstyle font="futura" fontsize="12" fontstyle="bold" /&amp;gt;
+        &lt;/example&gt;
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetrackgroup" type="lzx:basetrackgroup" >
+</xs:element>
+  <xs:complexType name="basetrackgroup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="trackingrate" type="xs:string" default="150" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The periodic rate in milliseconds to track the mouse</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tracking" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates if this trackgroup is currently tracking or not.
+              It can bet set to turn tracking on or off, or use the methods
+              activatetrackgroup and deactivatetrackgroup </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="deactivateevents" type="xs:string" default="['onmouseup']" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ an array of events which will deactivate tracking. 
+           To override, you must declare as once. For example:
+           &lt;programlisting&gt;&amp;lt;attribute name="deactivateevents" value="['onmouseover']" when="once"/&amp;gt;&lt;/programlisting&gt;
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boundsref" type="xs:string" default="${this}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The view that will be used to define the bounding rect for tracking
+              the mouse </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="activateevents" type="xs:string" default="['onmousedown']" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ an array of events which will activate tracking. 
+           To override, you must declare as once. For example:
+           &lt;programlisting&gt;&amp;lt;attribute name="activateevents" value="['onmouseover']" when="once"/&amp;gt;&lt;/programlisting&gt;
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="shadowbox" type="lzx:shadowbox" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A basic container view with an inner dropshadow effect.
+        &lt;example executable="false"&gt;
+            &amp;lt;shadowbox width="200" height="200"&amp;gt;
+                &amp;lt;view bgcolor="red" width="200" height="200"/&amp;gt;
+            &amp;lt;/shadowbox&amp;gt;
+        &lt;/example&gt;
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="shadowbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="shadowleft" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ display shadow along left side </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="edgecolor_tl" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ bgcolor of one pixel wide border on right and bottom sides only </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="edgecolor" type="xs:string" default="0xD9D9D9" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ bgcolor of one pixel wide border on right and bottom sides only </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="textformat" type="lzx:textformat" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+    An object to specify the format of a text object.  Used only in 
+    Javascript by richinputtext.setTextFormat.
+    @shortdesc Formats rich text
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="textformat" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="url" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="underline" type="lzx:boolean" >
+</xs:attribute>
+      <xs:attribute name="target" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="size" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="rightmargin" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="leftmargin" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="leading" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="italic" type="lzx:boolean" >
+</xs:attribute>
+      <xs:attribute name="indent" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="font" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+    An object to specify the format of a text object.  Used only in 
+    Javascript by richinputtext.setTextFormat.
+    @shortdesc Formats rich text
+</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="color" type="lzx:color" >
+</xs:attribute>
+      <xs:attribute name="bold" type="lzx:boolean" >
+</xs:attribute>
+      <xs:attribute name="align" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="boxview" type="lzx:boxview" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+                implements the CSS box model in a view that allows for margins, padding, and a border.
+                Allows for an italized title.
+                By default functions the same as a view, but has a 1 pixel black border.
+                v1.0 - Original
+                v1.1 - Bugfix added " - parent.parent.vTitle.height" to vPadding height on !_contentheight state
+                @author Brad Erickson
+         </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="boxview" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="title" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Italized title of the view, appears in upper left </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="paddingsize" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Size of the padding </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="marginsize" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Size of the margin </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="contentbgcolor" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Background color of the element, default is transparent</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordersize" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Size of the border </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordercolor" type="xs:string" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of the border, default is black </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="virtualdrawview" type="lzx:virtualdrawview" >
+</xs:element>
+  <xs:complexType name="virtualdrawview" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="miny" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxy" type="lzx:number" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxx" type="lzx:number" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="markers" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tabelement" type="lzx:tabelement" >
+</xs:element>
+  <xs:complexType name="tabelement" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetabelement">
+      <xs:attribute name="text_y" type="xs:string" default="${this.top.header.height/2 - this.top.header.txt.height/2}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The y position of the text field in the header area. Default is centered. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text_x" type="xs:string" default="4" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The x position of the text field in the header area. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shadowvisible" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Boolean to set the shadow of this tabelement. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shadowheight" type="xs:string" default="4" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The height of the shadow. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_top" type="xs:string" default="${parent.inset_top}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The top inset for content appearing within a tabelement. Default
+              is the containing tabslider's inset_top value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_right" type="xs:string" default="${parent.inset_right}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The right inset for content appearing within a tabelement. Default
+              is the containing tabslider's inset_right value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_left" type="xs:string" default="${parent.inset_left}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The left inset for content appearing within a tabelement. Default
+              is the containing tabslider's inset_left value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_bottom" type="xs:string" default="${parent.inset_bottom}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The bottom inset for content appearing within a tabelement. Default
+              is the containing tabslider's inset_bottom value. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="headerpadding" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Insets the header art on the x-axis. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorrow" type="lzx:colorrow" >
+</xs:element>
+  <xs:complexType name="colorrow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="axisstyle" type="lzx:axisstyle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ style for axis
+      @access public
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="axisstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+      <xs:attribute name="direction" type="xs:string" default="y | x" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ direction of the axis: x or y </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoplayer" type="lzx:videoplayer" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ provides standard UI controls for video playback
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="videoplayer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="url" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ url of the stream to play
+              see mediastream for details </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="type" type="xs:string" default="http" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ type of stream: 'http' or 'rtmp', 
+              see mediastream for details </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="stream" type="xs:string" default="${vscreen.ms}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ a reference to the stream to enable direct control,
+              such as vp.steam.play or vp.stream.seek(20) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="starttime" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Show the frame from this time (in seconds) whenever the url 
+            is set for video playback.
+            Use -1 to show no frame (which will leave the image as it
+            was when switching videos) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sliderTop" type="xs:string" default="${             this.height - (this.borderBottom + this.sliderHeight)}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ internal: derived from public attributes 
+              @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sliderHeightVal" type="xs:string" default="16" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ see note above 
+          @access private
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sliderHeight" type="xs:string" default="${             this.showslider ? this.sliderHeightVal : 0}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the controls stretch to this height, but I don't see a test
+              for this and I can't imagine it looks good so I'm marking
+              this private
+          @access private
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sliderGap" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the vertical space between the video image and the controls </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showslider" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ why would you want this? no test case, marking private 
+              @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showscreen" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ why would you want this? no test case, marking private 
+              @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showVolumeControl" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if true, display a volume control </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showTimeDisplay" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if true, display the current and total time </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="screenWidth" type="xs:string" default="${             this.width - (this.borderLeft + this.borderRight)}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ internal: derived from public attributes 
+              @access private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="progressColor" type="xs:string" default="0x00ff00" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ color of the progress bar </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="debug" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ true for verbose debug logging </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderTop" type="xs:string" default="${this.border}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the top border on the video image.  Default: this.border </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderRight" type="xs:string" default="${this.border}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the right border on the video image.  Default: this.border </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderLeft" type="xs:string" default="${this.border}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the left border on the video image.  Default: this.border </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderBottom" type="xs:string" default="${this.border}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the bottom border on the video image.  Default: this.border </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="border" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the border around the video image.  Default: 5 </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoplay" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ when true, playback will start automatically
+              without user action </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="aspectRatio" type="xs:string" default="$once{4/3}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if non-zero, then this will be used to maintain the
+              aspect ratio based on the width of the videoscreen.
+              Default: 4/3
+        </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datastylelist" type="lzx:datastylelist" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ list of datastyle
+      @access public
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datastylelist" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basestyle">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basegrid" type="lzx:basegrid" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An abstract container for data rows, relying on lazy replication
+          to make it possible to display large datasets.</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basegrid" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="spacing" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Spacing between the rows. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sizetoheader" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A boolean. If true, the grid will keep its width set to the size
+              of the header. This is automatically set to true for grids that
+              do not have a set width.  This is initially set to 0, which means
+              that it is not true, but if it is explicitly set to false, the
+              automatic behavior will be disabled for grids with no set
+              width.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showvlines" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, lines will be drawn (in component's style's bordercolor)
+              horizontally at each at each row division. This attribute cannot
+              be set after instantiation.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shownitems" type="xs:string" default="-1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sets the height of the grid to show a maximum of 'n' items. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showhlines" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, lines will be drawn (in component's style's bordercolor)
+              vertically at each at each column division. This attribute can be
+              set after instantiation.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selectable" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If false, the rows are not clickable and the grid does not support selection. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rowheight" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Optional height for the rows contained by the grid. If no
+              value is given for this attribute, it will be set to the
+              calculated height of rows. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Event sent when the grid selection changes.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="multiselect" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, the list will allow for multiple selection, and the 
+              getSelection method will always return a list. If false, only
+              single selection is allowed.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hilite" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The view which is currently hilited.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="contentdatapath" type="xs:string" default="*" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The datapath to use for the contents of the grid. By
+              default, this is set to "*", meaning all of the nodes underneath
+              the datacontext of the grid. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="columns" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An array holding the basegridcolumns used by this grid </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgcolor1" type="lzx:color" default="$immediately{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If given, sets the bgcolor for odd numbered rows. If not given,
+              the bgcolor for these rows is taken from the style's bgcolor.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgcolor0" type="lzx:color" default="$immediately{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If given, sets the bgcolor for even numbered rows. If not given,
+              the bgcolor for these rows is taken from the style's bgcolor.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="verticalaxis" type="lzx:verticalaxis" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Represents the Y axis on the rectangular chart, extends from Axis class
+     @access public
+        </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="verticalaxis" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:axis">
+      <xs:attribute name="datacolumn" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="DebugObject" type="lzx:DebugObject" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+  DebugObject is a base class for all the other classes in LZUnit that
+  supports the debugging of LZUnit itself.
+
+  @keywords public
+
+  @param Boolean debugWrite: Whether or not to emit debugging statements.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="DebugObject" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="debugWrite" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ whether or not to emit debugging statements </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoslider" type="lzx:videoslider" >
+</xs:element>
+  <xs:complexType name="videoslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="waspaused" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="volume" type="xs:string" default="${this.controls.volumebutton.volume}" >
+</xs:attribute>
+      <xs:attribute name="value" type="xs:string" default="${this.tracking ? this.trackvalue : this.sourcevalue}" >
+</xs:attribute>
+      <xs:attribute name="trackvalue" type="xs:string" default="0.0" >
+</xs:attribute>
+      <xs:attribute name="tracktime" type="xs:string" default="${this.trackvalue * this.totaltime}" >
+</xs:attribute>
+      <xs:attribute name="trackingDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="tracking" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="totaltime" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="timedisplay" type="xs:string" default="${this.tracking ? this.tracktime : this.time}" >
+</xs:attribute>
+      <xs:attribute name="time" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="sourcevalue" type="xs:string" default="${this.time / (this.totaltime || 1.0)}" >
+</xs:attribute>
+      <xs:attribute name="showVolumeControl" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="showTimeDisplay" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="ms" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="color" type="xs:string" default="0x00ff00" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="barchart" type="lzx:barchart" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A chart class that renders horizontal bars.
+      Inherits from the chart class.  (Warning: Of beta quality.)
+      @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="barchart" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basechart">
+      <xs:attribute name="staggerticks" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to alternate lengths of tick lines. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ondrawaxis" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Refreshes drawn chart when direction changes. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="barspace" type="lzx:number" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The space between bars. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="anicomplete" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Dataclip is a view at a fixed size (plotwidth and plotheight, with location
+            set by plotx and ploty) that contains an internal view with all the points,
+            lines and labels.  As the internal view datapane is scalable and able to be
+            dragged around once scaled, it needs to be clipped. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="font" type="lzx:font" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Tag for including fonts.
+The &lt;font&gt; tag is used to import fonts into an LZX application. Each font in an LZX application has a source file (in TrueType format), a name, and a style (plain, bold, italic, or bold italic).
+
+A font element within a &lt;canvas&gt; or &lt;library&gt; defines a font, which can be referenced by the font attribute of a view, or by the face attribute of the &lt;font&gt; tag within HTML markup. A font element can define a single font face or style, by using the src attribute to refer to a TrueType font that is included in the application. 
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="font" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="src" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="size" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="name" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Tag for including fonts.
+The &lt;font&gt; tag is used to import fonts into an LZX application. Each font in an LZX application has a source file (in TrueType format), a name, and a style (plain, bold, italic, or bold italic).
+
+A font element within a &lt;canvas&gt; or &lt;library&gt; defines a font, which can be referenced by the font attribute of a view, or by the face attribute of the &lt;font&gt; tag within HTML markup. A font element can define a single font face or style, by using the src attribute to refer to a TrueType font that is included in the application. 
+ </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="face" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="color" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ HTML specific </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="gridtext" type="lzx:gridtext" >
+</xs:element>
+  <xs:complexType name="gridtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:gridcolumn">
+      <xs:attribute name="textalign" type="xs:string" default="left" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Type of content's alignment.
+              Possible values are: left, center, right </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="selectable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether one is able to select the text.  (Only applies
+            if the grid isn't editable, because when it's editable,
+            the text is automatically selectable.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="editing" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="editbox" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="editable" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If set to false, the field will not be editable. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fileuploadlist" type="lzx:fileuploadlist" >
+</xs:element>
+  <xs:complexType name="fileuploadlist" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ select file or not</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Events</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="oncomplete" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="maxsize" type="xs:string" default="15000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Max file size  unit: bytes </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="erroroccured" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Error occured </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="class" type="lzx:class" >
+</xs:element>
+  <xs:complexType name="class" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="isRoot" type="lzx:boolean" >
+</xs:attribute>
+      <xs:attribute name="implements" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="extends" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listitem" type="lzx:listitem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A simple listitem that is usually declared inside of a list. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="listitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselistitem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="focusoverlay" type="lzx:focusoverlay" >
+</xs:element>
+  <xs:complexType name="focusoverlay" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basefocusview">
+      <xs:attribute name="offset" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the offset is used by the brackets to 'offset' themselves from the
+              bounding rect of the focusoverlay. The bounce effect is achieved
+              by animating this parameter </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="contextmenuitem" type="lzx:contextmenuitem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+A menu item within a context menu </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="contextmenuitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="visible" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Sets the visibility of the menu item. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="separatorbefore" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Draw a horizontal separator line before this item in the menu. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="enabled" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	Sets the enabled status of the menu item. If false, the menu item is grayed out and will not respond to clicks  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="delegate" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	Sets the delegate which will be called when the menu item is selected. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="caption" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+		Sets the text which is displayed for the menu item</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="menuitem" type="lzx:menuitem" >
+</xs:element>
+  <xs:complexType name="menuitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:textlistitem">
+      <xs:attribute name="command" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the command object assigned to be executed when this menuitem is selected </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basedragimage" type="lzx:basedragimage" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the visual representation of an object being dragged.
+        See &lt;xref linkend="lz.checkdragstate"/&gt; for usage details 
+        @access public
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basedragimage" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="dropgroup" type="xs:string" default="droptarget" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the group that drop targets will register with </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetabslider" type="lzx:basetabslider" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This class is a non-visual container that animates and coordinates the
+          sliding of basetabelements. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basetabslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselist">
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The spacing of the tabs. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="slideduration" type="xs:string" default="300" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The duration of the tabs openning and closing. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mintabheight" type="xs:string" default="22" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The default height of every tab when closed. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_top" type="xs:string" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The top inset for content appearing within a tabelement. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_right" type="xs:string" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The right inset for content appearing within a tabelement. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_left" type="xs:string" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The left inset for content appearing within a tabelement. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_bottom" type="xs:string" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The bottom inset for content appearing within a tabelement. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="ZoomPolygon" type="lzx:ZoomPolygon" >
+</xs:element>
+  <xs:complexType name="ZoomPolygon" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:polygonhotspot">
+      <xs:attribute name="text" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="parentView" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="map" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="whitestyle" type="lzx:whitestyle" >
+</xs:element>
+  <xs:complexType name="whitestyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:style">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="bigcheckbox" type="lzx:bigcheckbox" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The basecheckbox implementation representing a boolean, i.e., checked
+          if true, else false. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="bigcheckbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecheckbox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="backcircle" type="lzx:backcircle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background circle of the pie.  Has properties set by attributes on the
+        respective dataseries. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="backcircle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="pieradius" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The radius of the pie. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drawbgborder" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border color of the circle. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drawbg" type="lzx:color" default="0xCCCCCC" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background color of the circle. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ctry" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The center y coordinate of the pie. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ctrx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The center x coordinate of the pie. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgborderwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the circle's border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="window" type="lzx:window" >
+</xs:element>
+  <xs:complexType name="window" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:windowpanel">
+      <xs:attribute name="resizable" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, a resize control will appear in the lower-right corner,
+              allowing the user to resize the window. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseedittext" type="lzx:baseedittext" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This component provides the look and feel for user editable text, data
+          binding, and focus events. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseedittext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+      <xs:attribute name="pattern" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ An expression to restrict the set of characters that are allowed
+              to be entered. For example, [0-9]*, [012]*, [a-zA-Z]*,
+              [0-9A-Z]*. You can restrict the number of characters using
+              maxlength. Default is any character. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="password" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Set to true for a password field. Text will appear as ****. 
+              This attribute cannot be changed at runtime.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onpattern" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="multiline" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Set to true for multiple lines. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxlength" type="lzx:number" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The maximum number of chars that can be entered. Default is
+              unlimited. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="TestCase" type="lzx:TestCase" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+  TestCase implements an individual test case.
+
+  See the documentation for &lt;xref linkend="lz.TestSuite"/&gt;
+  for an example of this tag.
+
+  @param testName: the name of the test
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="TestCase" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:Test">
+      <xs:attribute name="testnames" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="datepickercombobox" type="lzx:datepickercombobox" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datepickercombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecombobox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="marker" type="lzx:marker" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+         data marker class </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="marker" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="droptarget" type="lzx:droptarget" >
+</xs:element>
+  <xs:complexType name="droptarget" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="replicator" type="lzx:replicator" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is a declared replicator for visual elements. Unlike
+        OpenLaszlo''s data-replication feature, a replicator can take an
+        arbitrary node set that may be passed in as an array.
+        Non-replicating elements may be used inside a replicator; only
+        the last child inside the replicator is replicated.
+
+        The data attribute of the replicated (cloned) view is set by the
+        setData method with data from the nodes array when the clone is
+        bound. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="replicator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="xpath" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Compute nodes from this xpath query against the specified dataset </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A pixel amount to use between each replicated view </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="replicatedsize" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size (width or height) in the replication axis of the view
+            being replicated.  Assumes all subviews have same replicated size. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pool" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, then instances of the replicated instance are reused
+            when possible </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onnodes" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="nodes" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The list of nodes over which this replictor acts </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mask" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The view that will clip the replicated nodes.  Defaults to the immediateparent of the container </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataset" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Compute nodes from this dataset </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="container" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The view that will contain the replicated nodes.  Defaults to the immediateparent of the replicator. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="clones" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The list of elements controlled by this repliator </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" default="y" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The axis in which to replicate</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_dbg_lzhdrag" type="lzx:_dbg_lzhdrag" >
+</xs:element>
+  <xs:complexType name="_dbg_lzhdrag" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:state">
+      <xs:attribute name="xdoffset" type="xs:string" default="this.getMouse( 'x' )" >
+</xs:attribute>
+      <xs:attribute name="x" type="xs:string" default="${this.immediateparent.getMouse( 'x' ) - this.xdoffset}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="legendtitle" type="lzx:legendtitle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The title for the legend.  This is its own small class because it
+        makes constraints easier for adjustments. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="legendtitle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="ttsize" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The title text's font size. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tposit" type="xs:string" default="left" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The title text's alignment.  (left, right, center) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The title text's color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ltitle" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The title text for the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="defaultlistitem" type="lzx:defaultlistitem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Text list item that displays a default </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="defaultlistitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:textlistitem">
+      <xs:attribute name="default_y" type="xs:string" default="$once{this.height/2 - this.defaultlabel._default.height/2}" >
+</xs:attribute>
+      <xs:attribute name="default_x" type="xs:string" default="40" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ x position of default label </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="SyncTester" type="lzx:SyncTester" >
+</xs:element>
+  <xs:complexType name="SyncTester" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:TestCase">
+      <xs:attribute name="tested_object" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+     Refers to object to be tested; this is dependent on specific test run
+     @keywords required
+     </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="del" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="current_method" type="xs:string" default="${cur_meth.xpathQuery('@name')}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+     Helps keep track of currently executed method
+     @keywords readonly
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dataseries" type="lzx:dataseries" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+          
+        A dataseries in a container for dataseries and datacolumn.
+        dataseries can be nested.
+        @access public
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="dataseries" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="ydatapath" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The data to be linked to the y axis. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="xdatapath" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The data to be linked to the x axis.  (Also used for piechart data.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tooltip" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ (To be developed:) Whether a tooltip is available onmouseover. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showlegendminimized" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to show the legend when the chart is minimized, when
+            there are multiple charts. (It is strongly recommended this
+            be set to false for multiple pies.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="radiusadjust" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether certain pieces should have radii different from the
+            overall pie, and if so, how much shorter or longer, percentage-wise.
+            (e.g. A value of 10 would mean 10% greater a radius.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pointsvisible" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw points, and if so, which color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pointshape" type="xs:string" default="square" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ What shape to make the point. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pointopacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The opacity of the points. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pointdiameter" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size of the points. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pointborderwidth" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border around the points. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="pointborder" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw borders around points, and if so, which color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="piebgcolor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether the area behind the pie is colored, and if so,
+            what color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="linethickness" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The thickness of the line from the last point to the current point.
+            If using data for this attribute, this will determine the thickness
+            of the line from the last point to the current point. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="linesvisible" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw a line between points, and if so, which color.
+            If using data for this attribute, this will determine whether
+            to draw a line from the last point to the current point. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendy" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If legend is 'manual', this sets the y coordinate of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendx" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If legend is 'manual', this sets the x coordinate of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendwidth" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If legend is 'manual', this sets the width of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendtitleposition" type="xs:string" default="left" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The position of the title: left, right, center. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendtitle" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The title of the legend.  If not null, appears at the top of
+            the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendhl" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The onmouseover highlight for legend elements. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendheight" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If legend is 'manual', this sets the height of the legend. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legenddatapath" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The location of the data to be used in the legend.  If unspecified,
+            the numerical values of the piechart will be used. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendborderwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the legend border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendborder" type="lzx:color" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of the legend border, if any. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendbg" type="lzx:color" default="#CCCCCC" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Background color of the legend, if any. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legend" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether or not there's a legend associated with this data.
+            Values: top, bottom, left, right,
+            manualtop, manualbottom, manualleft, manualright. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labeltextsize" type="xs:string" default="10" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Size of a label's text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labeltextcolor" type="lzx:color" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of a label's text. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelcolor" type="lzx:color" default="#EEEEEE" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of the label. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelborderwidth" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Width of a label's border.  (Set 0 for none.)</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelborder" type="xs:string" default="#000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of a label's border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ label of the dataseries </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fillbelow" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to fill beneath the line, and if so, which color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fbopacity" type="xs:string" default=".2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The opacity of the filled area below the line. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="explode" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether the pieces should move away from the center on mouseover. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="enabled" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable the dataseries </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drawbgborder" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw an outline around the background circle's
+            circumference, and if so, what color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="drawbg" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw the background circle, and if so, what color. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataseriesleafs" type="xs:string" default="$once{[]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+            cache a leaf nodes of the dataseries </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataresource" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Bar resource, if any. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataopacity" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Opacity of the bar, line or pie piece. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataenabled" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Is this series of data enabled? </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datacolumnsmap" type="xs:string" default="$once{new Object()}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+            cache the a hashtable of datacolumn </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="datacolor" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Color of the line, bar or pie piece. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderwidth" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of each piece's border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordercolor" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color of each piece's border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgborderwidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Thickness of the background circle's circumference outline. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="baselabels" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether to draw labels at the bases of bars, and
+            what data to use.  No labels are drawn if not specified. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="baselabelangle" type="lzx:number" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Angle of baselabels.  (Determines rotation of tick labels
+            at the bases of bars.  Not compatible with DHTML.) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="animationinit" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether a bar has animation.  Currently only works
+            for bars, but may eventually be worked into other
+            chart types. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="inspector" type="lzx:inspector" >
+</xs:element>
+  <xs:complexType name="inspector" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:window">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basewindow" type="lzx:basewindow" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The basewindow class defines methods, attributes that are used by window
+      subclasses.</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basewindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="ydoffset" type="xs:string" default="this.getMouse( 'y' )" >
+</xs:attribute>
+      <xs:attribute name="xdoffset" type="xs:string" default="this.getMouse( 'x' )" >
+</xs:attribute>
+      <xs:attribute name="state" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The state of the window: 1=selected (frontmost) window,
+              2=not-selected window, 3=dragging, 4=disabled, 5=resizing.
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="starty" type="xs:string" default="$once{this.y}" >
+</xs:attribute>
+      <xs:attribute name="startx" type="xs:string" default="$once{this.x}" >
+</xs:attribute>
+      <xs:attribute name="minwidth" type="xs:string" default="60" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Minimum width for the window.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minheight" type="xs:string" default="50" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Minimum height for the window.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="haswindowfocus" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True if the window is frontmost. Set this
+              attribute to bring the window to the fore of its sibling
+              windows, and bring window focus.
+              @keywords defaultsetter </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="allowdrag" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Attribute handles whether window can be dragged or not </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videothumbnail" type="lzx:videothumbnail" >
+</xs:element>
+  <xs:complexType name="videothumbnail" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="url" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="type" type="xs:string" default="http" >
+</xs:attribute>
+      <xs:attribute name="thumbnailtime" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="border" type="xs:string" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleinputtext" type="lzx:simpleinputtext" >
+</xs:element>
+  <xs:complexType name="simpleinputtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="textOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The text opacity. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="text" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The text for input. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="focusborderOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The opacity for the border on focus. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="blurborderOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The opacity for the border on blur. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bgOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The opacity for the input background. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="ulink" type="lzx:ulink" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A class for URL links.
+    
+    This differs from the use of the XHTML &amp;lt;a&amp;gt; attribute, e.g in '&amp;lt;text&amp;gt;&amp;lt;a href="http://openlaszlo.org"&amp;gt;OpenLaszlo.org&amp;lt;/a&amp;gt;lt;/text&amp;gt;', in these ways:
+    - There is a hover effect.  (This defaults to underline.)
+    - There is a hover color.  (This defaults to blue.)
+    - The link content and target can be databound. 
+    
+    &lt;example executable="false"&gt;
+      &amp;lt;ulink href="http://openlaszlo.org"&amp;gt;OpenLaszlo.org&amp;lt;/ulink&amp;gt;
+    &lt;/example&gt;
+    
+    See ulink-test.lzx for additional examples. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="ulink" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The text of the link. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="target" type="xs:string" default="_new" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Where the target opens.  See lz.Browser.loadURL for
+    a list of values. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="href" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The URL target. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hoverTags" type="xs:string" default="u" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A list of tags that are applied to the link when
+    it is hovered.  This is either a list of tag names, e.g. "u"
+    or "u b", or the HTML itself, e.g. "&amp;lt;u&amp;gt;". </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="hoverColor" type="lzx:color" default="blue" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color when the link is hovered. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="color" type="lzx:color" default="blue" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The color when the link is &lt;em&gt;not&lt;/em&gt; being hovered. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="state" type="lzx:state" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  A description of an instance hierarchy that can be applied and removed at runtime.
+JavaScript: lz.state 
+
+A state is an object that holds its children and attributes for creation or application at a later time when the state's apply method is called. In addition to representing visual state by adding and removing children from a view, states are often used to control constraints which are applied and removed at different times during the run of an application.
+
+For the most part, the declarative style used in OpenLaszlo applications represents an initial state for the application. All modification to application state can be made using the script API's, but it is often convenient to declaratively describe a bit of application state which may be selectively applied or removed at runtime. The &lt;state&gt; tag is provided for this purpose.
+
+Everything within a &lt;state&gt; tag acts as if it were written inside the parent when the state is applied. States can contain attributes, methods, and other nodes.
+
+When a state is removed, any children or constraints created when the state was applied are then removed, but attributes that were set by the application of the state are not restored. 
+
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="state" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="pooling" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        If true, the state will merely hide any views it has created when it is removed (not applied), instead of destroying them. 
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="applied" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+        Whether or not the state is applied. setAttribute('applied', true) will apply the state. setAttribute('applied', false) will remove the state.
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="attribute" type="lzx:attribute" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Sets an attribute of the object that contains it. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="attribute" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="value" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+  The initial value of the attribute. The type of this value is specified by the value of the type attribute; if that attribute is not present, it's the type of this attribute in this element's tag. The attribute is given this value when the element is created. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="type" type="xs:string" default="string" >
+</xs:attribute>
+      <xs:attribute name="style" type="xs:string" default="string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The CSS property name that can be used to set the value of this attribute under the control of a &lt;stylesheet&gt; (See Chapter 19. Cascading Style Sheets ). style can be any valid CSS property name, and need not be the same as the attribute name; for example you could use the standard CSS property name background-color as the style of the bgcolor attribute. When an attribute has a style property, the value property acts as the default value for the attribute: in the absence of any applicable CSS rule specifying the corresponding property, the attribute will be given the default value. In the case of dynamic CSS, the attribute will revert to the default value if CSS was applied and is removed. (See Dynamic CSS .) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="setter" type="xs:string" default="string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Delegate the event to a method on changes through setAttribute('...',$value) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="required" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ True if this is a required attribute. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="name" type="lzx:token" use="required" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The name of the attribute. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="allocation" type="xs:string" default="instance|class" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ One of:
+class
+    The attribute will be an attribute of the class; to refer to it, you say lz.classname.attributename . 
+instance
+    Each instance will have an attribute with the specified properties ( name , type , value , etc.). 
+
+You can set allocation to class to get static attributes. Static properties are attached to the class itself, for example lz.classname . </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="streamscrubber" type="lzx:streamscrubber" >
+</xs:element>
+  <xs:complexType name="streamscrubber" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="totaltime" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ read only </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="time" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ read only </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="stream" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the stream to control </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrubbing" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ true when user has the mouse down and is scrubbing the stream </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="progress" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ read only </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="min" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ min 'x' value, defaults to zero (typically the left side of parent) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="max" type="lzx:number" default="$once{parent.width-this.width}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ max 'x' value, defaults to the right side of the parent </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="stringvalidator" type="lzx:stringvalidator" >
+</xs:element>
+  <xs:complexType name="stringvalidator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basevalidator">
+      <xs:attribute name="minLength" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="minErrorstring" type="xs:string" default="this string is shorter than the minimum allowed length." >
+</xs:attribute>
+      <xs:attribute name="maxLength" type="lzx:number" default="255" >
+</xs:attribute>
+      <xs:attribute name="maxErrorstring" type="xs:string" default="this string is longer than the maximum allowed length." >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="LzDebugWindow" type="lzx:LzDebugWindow" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+    The Laszlo debugger window. An instance will be automatically
+    instantiated when the application is compiled in debug mode
+    (requested by either using the
+    &lt;code&gt;canvas&lt;/code&gt; &lt;code&gt;debug&lt;/code&gt; attribute or by loading the
+    application using the &lt;code&gt;?debug=true&lt;/code&gt; option).  
+
+    @keywords private_constructor
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="LzDebugWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="title" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="smallInputAreaHeight" type="xs:string" default="29" >
+</xs:attribute>
+      <xs:attribute name="savedYPos" type="xs:string" default="10" >
+</xs:attribute>
+      <xs:attribute name="savedXPos" type="xs:string" default="10" >
+</xs:attribute>
+      <xs:attribute name="savedWidth" type="xs:string" default="340" >
+</xs:attribute>
+      <xs:attribute name="savedInputAreaHeight" type="xs:string" default="53" >
+</xs:attribute>
+      <xs:attribute name="savedHeight" type="xs:string" default="125" >
+</xs:attribute>
+      <xs:attribute name="resizable" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="persist" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="minimized" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="lineheight" type="xs:string" default="13" >
+</xs:attribute>
+      <xs:attribute name="lastpart" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="lastobj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="keep_width_on_canvas" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="keep_height_on_canvas" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="isLoaded" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="evalloader" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="default_width" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="default_height" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="debuggerBorderWidth" type="xs:string" default="5" >
+</xs:attribute>
+      <xs:attribute name="consoleRemote" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="commandhistory_ptr" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="commandhistory" type="xs:string" default="[]" >
+</xs:attribute>
+      <xs:attribute name="closeable" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="clientBridge" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="autoscroll" type="xs:string" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="layout" type="lzx:layout" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+    layout.lzx
+   
+    @copyright Copyright 2001-2010 Laszlo Systems, Inc.  All Rights Reserved.
+               Use is subject to license terms.
+   
+    @topic LFC
+    @subtopic Controllers
+    @affects lzlayout
+    @access public
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="layout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="vip" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @access private
+ * Just used to effect a type cast of immediateparent to LzView 
+ * TODO [max 2010-07] add LzView type back when possible
+ </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="updateDelegate" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A delegate used to update the layout.
+      @type LzDelegate
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="subviews" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+     Array of the views this layout controls. Used by subclasses of
+     &lt;code&gt;layout&lt;/code&gt; to implement their arrangement algorithm by
+     adjusting the appropriate attribute of each view.
+    
+     @type [LzView]
+     @access public
+   </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="locked" type="xs:string" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+     Set to true if layout is locked from updates.
+    
+     @devnote locked is set to 2 in the prototype of the layout. This
+     is a special signal that the layout is locked temporarily until
+     it resolves its references
+    
+     @type Boolean
+   </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="valueregion" type="lzx:valueregion" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        Represents a region of values in the chart
+        @access public
+        </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="valueregion" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="tipEnabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable the value region's tooltip </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="tip" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Tip label that appear when the mouse is over the value region</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="regionEnabled" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ enable the rendering of the value region in the chart </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ label of the value region, it is shown next to the region </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="data2" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Maximum value for the Value region</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="data1" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Minimum value for the Value region</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="axis" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the associated axis to the Region can be"x" or "y" </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="grid" type="lzx:grid" >
+</xs:element>
+  <xs:complexType name="grid" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basegrid">
+      <xs:attribute name="showvscroll" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If false, the grid will never show a vertical scrollbar,
+            even if the rows are wider than the grid.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showhscroll" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If false, the grid will never show a horizontal scrollbar,
+              even if the rows are wider than the grid.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="goldstyle" type="lzx:goldstyle" >
+</xs:element>
+  <xs:complexType name="goldstyle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:style">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="treeselector" type="lzx:treeselector" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Selection manager used by tree. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="treeselector" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:selectionmanager">
+      <xs:attribute name="multiselect" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If multiselect is true, multiple selection is enabled.  When the
+              shift key is down, a range of items is selected.  When the control
+              key is down, any item may be added to the selection. Default is
+              false. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_dbg_lztextscroller" type="lzx:_dbg_lztextscroller" >
+</xs:element>
+  <xs:complexType name="_dbg_lztextscroller" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="visiblelines" type="xs:string" default="4" >
+</xs:attribute>
+      <xs:attribute name="thumbheight" type="xs:string" default="24" >
+</xs:attribute>
+      <xs:attribute name="textlines" type="xs:string" default="[]" >
+</xs:attribute>
+      <xs:attribute name="lineptr" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="autoscroll" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="arrowbuttonheight" type="xs:string" default="12" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basetabs" type="lzx:basetabs" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The base tabs object. This is the outermost containing component
+          within which there are a basetabsbar and the basetabscontent. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basetabs" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="tabclass" type="xs:string" default="basetab" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Class to instantiate tab items for basetabsbar. Can be
+              overridden by basetabpane.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_top" type="lzx:number" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The top inset for content appearing within a basetabpane. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_right" type="lzx:number" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The right inset for content appearing within a basetabpane. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_left" type="lzx:number" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The left inset for content appearing within a basetabpane. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="inset_bottom" type="lzx:number" default="8" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The bottom inset for content appearing within a basetabpane. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="contentclass" type="xs:string" default="basetabscontent" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Class to instantiate to contain basetabpanes.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="content" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is a reference to basetab's content area. This is where all
+              basetabpanes in tabs are placed.
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordersize" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size of the border surrounding a basetabpane. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="barclass" type="xs:string" default="basetabsbar" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Class to instantiate to contain tab items.
+              @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bar" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is a reference to its basetabsbar. 
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="resource" type="lzx:resource" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+A tag that defines a media object that can be associated with a view. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="resource" mixed="true">
+  <xs:group ref="lzx:topLevelElements" />
+      <xs:attribute name="src" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The path of a file that contains the source for this object. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="offsety" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The y offset of a bitmap resource used for a custom cursor. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="offsetx" type="lzx:number" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The x offset of a bitmap resource used for a custom cursor. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="name" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The name of a variable that will be set to this object when the application is started. If this element is directly within a canvas or library element, the global variable and the canvas property with this name will be set to this object. If this element is within another object, that object's property with this name will be set to this object.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:complexType>
+<xs:element name="datatip" type="lzx:datatip" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+     tooltip is a tool tip to be use be the chart elements such as the plot area
+     @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="datatip" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:label">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="list" type="lzx:list" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A list containing listitems and providing selection capabilities. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="list" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baselist">
+      <xs:attribute name="tracking" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Toggles the mousedown tracking. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The number of pixels that items should be spaced from one another. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="shownitems" type="xs:string" default="-1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The number of items that are displayed. This value will ignored if
+              this view attempts to draw past the canvas boundary. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrollbarclassname" type="xs:string" default="vscrollbar" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The name of the class to instantiate as our scrollbar.
+              @keywords public </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scrollable" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmousetrackoutright" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event not used - declared to remove debugger warnings </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onmousetrackoutleft" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event not used - declared to remove debugger warnings </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minheight" type="lzx:number" default="24" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ minumum height of the list </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bordersize" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size in pixels for this list. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="border_top" type="xs:string" default="${this.bordersize}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size of the top border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="border_right" type="xs:string" default="${this.bordersize}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size of the right border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="border_left" type="xs:string" default="${this.bordersize}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size of the left border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="border_bottom" type="xs:string" default="${this.bordersize}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The size of the bottom border. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoscrollbar" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, a scrollbar will show up automatically when there are
+              more items than shownitems. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoview" type="lzx:videoview" >
+</xs:element>
+  <xs:complexType name="videoview" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="url" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The url of the video, may be a relative URL, 
+            for example: "http://localhost/myvideo.flv", 
+            or simply "myvideo.flv".
+
+            When type="rtmp", the url is always relative the rtmpconnection.
+            (Use only when you are not explicitly declaring the mediastream.)
+    </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="type" type="xs:string" default="http" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Protocol "rtmp" or "http". </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="stream" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The mediastream object.  A mediastream will be automatically generated if one is not specified at init time. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="starttime" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Show the frame from this time (in seconds) whenever the url 
+          is set for video playback.
+          Use -1 to show no frame (which will leave the image as it
+          was when switching videos) </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="playvolume" type="xs:string" default="1.0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The volume for video playback, a float from 0 to 1. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mic" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The microphone object. 
+            @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="debug" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, Debug.write extra stuff (this may go away). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="cam" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The camera object. 
+            @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="buffertime" type="xs:string" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, video will start playing as soon as url is set. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoplay" type="xs:string" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true, video will start playing as soon as url is set. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="timevalidator" type="lzx:timevalidator" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ timevalidator class </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="timevalidator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basevalidator">
+      <xs:attribute name="separator" type="xs:string" default=":" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Separator must be the same as specified in "format" attribute
+              it's needed to prevent input with different separator </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="invalidformatErrorstring" type="xs:string" default="Please input the time in a valid format" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The five attributes above are five different message errors </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="invalidSeparatorErrorstring" type="xs:string" default="Please enter a valid separator" >
+</xs:attribute>
+      <xs:attribute name="invalidSecondsErrorstring" type="xs:string" default="Please enter seconds between 0 and 59" >
+</xs:attribute>
+      <xs:attribute name="invalidMinutesErrorstring" type="xs:string" default="Please enter minutes between 0 and 59" >
+</xs:attribute>
+      <xs:attribute name="invalidHourErrorstring" type="xs:string" default="Please enter hour between 0 and 23" >
+</xs:attribute>
+      <xs:attribute name="incongruentSeparatorErrorstring" type="xs:string" default="Warning! Two different separators are defined in format and separator attribute" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Warning message when the two attribute "format" and "separator" have different separator's char </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="format" type="xs:string" default="hh:mi:ss" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The time format attribute. Default: hh:mi:ss
+              hh = hour
+              mi = minutes
+              ss = seconds 
+              The separator must be the same ss specified in "separator" attribute </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="floatinglist" type="lzx:floatinglist" >
+</xs:element>
+  <xs:complexType name="floatinglist" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basefloatinglist">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_dbg_horiz_scrollbar" type="lzx:_dbg_horiz_scrollbar" >
+</xs:element>
+  <xs:complexType name="_dbg_horiz_scrollbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="thumbwidth" type="xs:string" default="24" >
+</xs:attribute>
+      <xs:attribute name="autoscroll" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="arrowbuttonwidth" type="xs:string" default="12" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="xmlrpc" type="lzx:xmlrpc" >
+</xs:element>
+  <xs:complexType name="xmlrpc" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:rpc">
+      <xs:attribute name="service" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ (Required) XML-RPC service URL. The URL must be http. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="treenode" type="lzx:treenode" >
+</xs:element>
+  <xs:complexType name="treenode" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseopttreenode">
+      <xs:attribute name="mousein" type="xs:string" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fisheye_item" type="lzx:fisheye_item" >
+</xs:element>
+  <xs:complexType name="fisheye_item" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tooltip" type="xs:string" default="${this.text}" >
+</xs:attribute>
+      <xs:attribute name="text" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="start_size" type="xs:string" default="${parent.start_size}" >
+</xs:attribute>
+      <xs:attribute name="old_y" type="xs:string" default="$once{canvas.getMouse('y')}" >
+</xs:attribute>
+      <xs:attribute name="old_x" type="xs:string" default="$once{canvas.getMouse('x')}" >
+</xs:attribute>
+      <xs:attribute name="myTooltipManager" type="xs:string" default="$once{parent.tooltipmanager}" >
+</xs:attribute>
+      <xs:attribute name="icon" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="halo_size" type="xs:string" default="${parent.halo_size}" >
+</xs:attribute>
+      <xs:attribute name="expanded_size" type="xs:string" default="${parent.expanded_size}" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videotogglebutton" type="lzx:videotogglebutton" >
+</xs:element>
+  <xs:complexType name="videotogglebutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tracking" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="over" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="icon" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="frameTable" type="xs:string" default="$once{             [1, 2, 1, 2, 3, 3, 3, 3]}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This look-up table maps a state value to a frame index. 
+              Currently 2^3=8 states: 
+              over (2^0=1), tracking (2^1=2) and engaged (2^2=4). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="engaged" type="xs:string" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dataset" type="lzx:dataset" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+An in-memory xml-style data hierarchy. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="dataset" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="type" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	When set to "http" or "soap", the dataset interprets it's src attribute as a URL to be loaded at runtime. If the "src" attribute is set to a URL (e.g., starts with "http:") then the type attribute implicitly becomes "http".  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="trimwhitespace" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	When true, the server will trim whitespace in the XML data (defaults to false).  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="timeout" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The numer of milliseconds to wait before the request times out, and an ontimeout event is sent. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="src" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The source for requests made by this dataset. The value can be a pathname or an absolute or relative URL. If the value is a URL (starts with "http:"), the dataset will be configured to load its data at runtime. Otherwise, the data is included inline into the application at compile time.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sel" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Selection state of this node, used by dataselectionmanager </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="secureport" type="lzx:number" default="443" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	TCP port number to use for secure (HTTPS) requests </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="request" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, the datset will make a request upon initialization </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rawdata" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Holds raw data response string from data source </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="querytype" type="xs:string" default="GET" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+HTTP request method. Value must be one of "GET" or "POST". </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="querystring" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	A string to be appended to the request that the dataset makes.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="proxyurl" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The URL of the proxy server, for proxied requests </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="proxied" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+Sets whether or not the dataset makes its request directly to the target server or via the server proxy. Inherits value from canvas.proxied flag.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="postbody" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Used to send a string as the entire body of a POST request. For a POST request, setting postbody to a non-null string value will send that string as the complete body of the POST request. In this case any other query parameters that have been set via setQueryParam dataset will be ignored. The behavior of a GET request with a non-null postbody is not defined. Note, the swf8 runtime is forced to XML-quote the postbody, due to limitations in the Flash 8 player API. This restriction is not present in later swf runtimes, or in the DHTML runtime.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="parentNode" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	The parent of this node </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="params" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	An lz.Param object which holds query key-value pairs. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ownerDocument" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	The owner document for this node. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="nsprefix" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	When true, the server will preserve namespace prefixes on data node names and attribute names  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="nodeType" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	The type of this node one of lz.DataElement.DOCUMENT_NODE, lz.DataElement.ELEMENT_NODE or lz.DataElement.TEXT_NODE </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="nodeName" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	The name of this node. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="multirequest" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	Create a new data request object for each request. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="getresponseheaders" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	When true, the proxy server (if making a proxied request) will encode and send the HTTP response headers along with the data (defaults to false). Due to a lack of a native API to get this information, SOLO SWF applications will always return an empty set. When making a proxied request, getresponseheaders must be true in order for the response headers to be retrieved via the getResponseHeader or getAllResponseHeaders methods.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataprovider" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	Holds a pointer to the DataProvider which handles data load requests for this dataset. Default value is canvas.defaultdataprovider  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="credentialled" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+When true, the withCredentials property on the XHR object will be set to true, allowing credentialled cross-origin resource sharing (CORS) requests. If withCredentials is not set for a CORS request using credentials, the browser will not set any cookies sent by the server. See http://www.w3.org/TR/cors/#access-control-allow-credentials-respons and http://dev.w3.org/2006/webapi/XMLHttpRequest-2/#the-withcredentials-attribute for more information.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="clientcacheable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 	When true, data responses can be cached by the client (browser). When false, a unique valued argument will be added to the request string in the format '__lzbc__=1204685840777' to defeat the browser's cache.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="childNodes" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	An array of children of this node </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="cacheable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	When true, the server will attempt to cache response (defaults to false). There are security concerns when this field is true. When this field is true, you will usually want the getresponseheaders field to be false. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autorequest" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	If true, changes to src or querystring attributes cause doRequest() to be called automatically. If false, doRequest() must be called manually when src or querystring attributes change.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="attributes" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The dictionary of attributes for this node. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="acceptencodings" type="lzx:boolean" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+	When true, the server will accept encoded responses for this request. Encoded responses require more work for the LPS (encoding the response) and client (decoding the response) in trade for lower network bandwidth usage.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="minibutton" type="lzx:minibutton" >
+</xs:element>
+  <xs:complexType name="minibutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:stylishbutton">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="plainfloatinglist" type="lzx:plainfloatinglist" >
+</xs:element>
+  <xs:complexType name="plainfloatinglist" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basefloatinglist">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basechartbacking" type="lzx:basechartbacking" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The base chart background class for rectangular charts.
+        (That is, not used in piechart.)  (Of beta quality.) </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="basechartbacking" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="drawready" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The drawview responsible for drawing horizontal ticks. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lwzendatepicker" type="lzx:lwzendatepicker" >
+</xs:element>
+  <xs:complexType name="lwzendatepicker" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basedatepicker">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:group name="topLevelElements">
+<xs:sequence>
+<xs:choice minOccurs="0" maxOccurs="unbounded">
+<xs:any />
+</xs:choice>
+</xs:sequence>
+</xs:group>
+</xs:schema>
diff --git a/WebContent/project.xsd b/WebContent/project.xsd
new file mode 100644
index 0000000..cb4bc03
--- /dev/null
+++ b/WebContent/project.xsd
@@ -0,0 +1,8472 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" 
+  targetNamespace="http://localhost/openlaszlo/project" 
+  xmlns:lzx="http://localhost/openlaszlo/lzx" 
+  xmlns:project="http://localhost/openlaszlo/project">
+<xs:import namespace="http://localhost/openlaszlo/lzx" schemaLocation="lzx.xsd"/><xs:element name="resultPollWin" type="project:resultPollWin" >
+</xs:element>
+  <xs:complexType name="resultPollWin" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="roomPoll" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="resultpollvotes" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="displayedPoll" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="archPolls" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="innerListPagingContent" type="project:innerListPagingContent" >
+</xs:element>
+  <xs:complexType name="innerListPagingContent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDateSelector" type="project:baseDateSelector" >
+</xs:element>
+  <xs:complexType name="baseDateSelector" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDateSelectorComponent">
+      <xs:attribute name="year" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="selecteddate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="selected" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="onyearSel" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onmonthSel" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="ondoubleselect" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="monthnames" type="xs:string" default="['Januar','Februar','Maerz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember']" >
+</xs:attribute>
+      <xs:attribute name="firstdayinweek" type="lzx:number" default="$once{ canvas.firstdayinweek }" >
+</xs:attribute>
+      <xs:attribute name="dayNamesLabelIds" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="dayLabelNamesLabelIds" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="editRecordStream" type="project:editRecordStream" >
+</xs:element>
+  <xs:complexType name="editRecordStream" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="remoteMessage" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="myvideocontainer" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isSyncUpdate" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isInterview" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="doDefaultAnimation" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="currentClient" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="chosenSetting" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="chosenMic" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="chosenCam" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="horizontalMenuIconBarPointer" type="project:horizontalMenuIconBarPointer" >
+</xs:element>
+  <xs:complexType name="horizontalMenuIconBarPointer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="errorPopup" type="project:errorPopup" >
+</xs:element>
+  <xs:complexType name="errorPopup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="makeModal" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="error" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="imageForScreenViewer" type="project:imageForScreenViewer" >
+</xs:element>
+  <xs:complexType name="imageForScreenViewer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:image">
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="room" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="parentPath" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="moduleName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="downloadurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="baseurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="alterModus" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="terminareaForWeekView" type="project:terminareaForWeekView" >
+</xs:element>
+  <xs:complexType name="terminareaForWeekView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="terminObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="description" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="countX" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="calenderObjRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="previousNextButton" type="project:previousNextButton" >
+</xs:element>
+  <xs:complexType name="previousNextButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="organisation_id" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dateSelectorDay" type="project:dateSelectorDay" >
+</xs:element>
+  <xs:complexType name="dateSelectorDay" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDateSelectorComponent">
+      <xs:attribute name="daydate" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="confmenucommand" type="project:confmenucommand" >
+</xs:element>
+  <xs:complexType name="confmenucommand" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:command">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseMenuSeperator" type="project:baseMenuSeperator" >
+</xs:element>
+  <xs:complexType name="baseMenuSeperator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewModerationMiniIcons" type="project:interviewModerationMiniIcons" >
+</xs:element>
+  <xs:complexType name="interviewModerationMiniIcons" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="isSuperModerator" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMod" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="changeWidthLetterSlider" type="project:changeWidthLetterSlider" >
+</xs:element>
+  <xs:complexType name="changeWidthLetterSlider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePropertySelector">
+      <xs:attribute name="tempValue" type="lzx:number" default="$once{ parent.initialNumber }" >
+</xs:attribute>
+      <xs:attribute name="step" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="onplus" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onminus" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="numberAlign" type="xs:string" default="right" >
+</xs:attribute>
+      <xs:attribute name="minimum" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="maximum" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="initialNumberInit" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="initialNumber" type="lzx:number" default="12" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawChooseModirPlain" type="project:drawChooseModirPlain" >
+</xs:element>
+  <xs:complexType name="drawChooseModirPlain" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseChooseIcon">
+      <xs:attribute name="modi" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isSelectablemodi" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="toolTipCustomPic" type="project:toolTipCustomPic" >
+</xs:element>
+  <xs:complexType name="toolTipCustomPic" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleLabelButtonTooltip" type="project:simpleLabelButtonTooltip" >
+</xs:element>
+  <xs:complexType name="simpleLabelButtonTooltip" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:button">
+      <xs:attribute name="tooltipId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mainToolsLeftPanel" type="project:mainToolsLeftPanel" >
+</xs:element>
+  <xs:complexType name="mainToolsLeftPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseLeftPanel">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="moderationMiniIconsEventUserList" type="project:moderationMiniIconsEventUserList" >
+</xs:element>
+  <xs:complexType name="moderationMiniIconsEventUserList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="showAvIcons" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isActive" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="eventUserListTable" type="project:eventUserListTable" >
+</xs:element>
+  <xs:complexType name="eventUserListTable" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="userStatus" type="project:userStatus" >
+</xs:element>
+  <xs:complexType name="userStatus" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="statusText" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="statusColor" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tableListItem" type="project:tableListItem" >
+</xs:element>
+  <xs:complexType name="tableListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="isdatarecord" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isaltered" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="changeholder" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basePagingListItem" type="project:basePagingListItem" >
+</xs:element>
+  <xs:complexType name="basePagingListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentListItem">
+      <xs:attribute name="itemId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="customEdittext" type="project:customEdittext" >
+</xs:element>
+  <xs:complexType name="customEdittext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:edittext">
+      <xs:attribute name="regexpType" type="xs:string" default="none" >
+</xs:attribute>
+      <xs:attribute name="regexpLabelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="preText" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="onafterCheck" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="isvalidInput" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="termindetails" type="project:termindetails" >
+</xs:element>
+  <xs:complexType name="termindetails" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="terminObjRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="roomtype" type="xs:string" default="1" >
+</xs:attribute>
+      <xs:attribute name="contact" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="baseUrl" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="arrayMeetingMember" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="appointmentId" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="changeWidthSlider" type="project:changeWidthSlider" >
+</xs:element>
+  <xs:complexType name="changeWidthSlider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePropertySelector">
+      <xs:attribute name="tempValue" type="lzx:number" default="$once{ parent.initialNumber }" >
+</xs:attribute>
+      <xs:attribute name="step" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="onplus" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onminus" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="numberAlign" type="xs:string" default="right" >
+</xs:attribute>
+      <xs:attribute name="minimum" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="maximum" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" default="429" >
+</xs:attribute>
+      <xs:attribute name="initialNumberInit" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="initialNumber" type="lzx:number" default="3" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="conferenceBrowser" type="project:conferenceBrowser" >
+</xs:element>
+  <xs:complexType name="conferenceBrowser" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="objMessage" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="initedByUser" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="initURL" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="ignoreNextEvent" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="callBackJSDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="browserhistoryPre" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="browserhistoryPost" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListRestrictedRoomRemote" type="project:activityListRestrictedRoomRemote" >
+</xs:element>
+  <xs:complexType name="activityListRestrictedRoomRemote" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="searchContact" type="project:searchContact" >
+</xs:element>
+  <xs:complexType name="searchContact" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="vorname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="userId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="nachname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="email" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="testingApplication" type="project:testingApplication" >
+</xs:element>
+  <xs:complexType name="testingApplication" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="timerIsRunning" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="recordingsCounter" type="lzx:number" default="5" >
+</xs:attribute>
+      <xs:attribute name="lastRecorded" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isRunning" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="counterDelegate" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="roomListInviteUserItem" type="project:roomListInviteUserItem" >
+</xs:element>
+  <xs:complexType name="roomListInviteUserItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="starttime" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="roomType" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="roomClassName" type="xs:string" default="conferenceView" >
+</xs:attribute>
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="obj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="maxUsers" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="ispublic" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isaudience" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentusers" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="checkForMaxUsers" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fileExplorer" type="project:fileExplorer" >
+</xs:element>
+  <xs:complexType name="fileExplorer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="parentFolderId" type="lzx:number" default="-2" >
+</xs:attribute>
+      <xs:attribute name="onClose" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="isTrashCan" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="currentTrackGroupName" type="xs:string" default="fileExplorer" >
+</xs:attribute>
+      <xs:attribute name="currentDragItem" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="editWhiteboardDefault" type="project:editWhiteboardDefault" >
+</xs:element>
+  <xs:complexType name="editWhiteboardDefault" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="ibutton" type="project:ibutton" >
+</xs:element>
+  <xs:complexType name="ibutton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="overRsrcNumber" type="lzx:number" default="2" >
+</xs:attribute>
+      <xs:attribute name="normalRsrcNumber" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="mouseisdown" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="downRsrcNumber" type="lzx:number" default="3" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseConferenceRoom" type="project:baseConferenceRoom" >
+</xs:element>
+  <xs:complexType name="baseConferenceRoom" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentView">
+      <xs:attribute name="roomobj" type="xs:string" default="null" >
+	  </xs:attribute>
+      <xs:attribute name="meetingTimer" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="eventUserListInner" type="project:eventUserListInner" >
+</xs:element>
+  <xs:complexType name="eventUserListInner" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseRoomInnerList">
+      <xs:attribute name="sortType" type="xs:string" default="alphabetical" >
+</xs:attribute>
+      <xs:attribute name="selectedItem" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="listType" type="xs:string" default="eventUserListTable" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnoverlistheaderitemResize" type="project:turnoverlistheaderitemResize" >
+</xs:element>
+  <xs:complexType name="turnoverlistheaderitemResize" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basicturnoverlistheaderitem">
+      <xs:attribute name="subviewsid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="minwidth" type="lzx:number" default="2" >
+</xs:attribute>
+      <xs:attribute name="minheight" type="lzx:number" default="10" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="monthView" type="project:monthView" >
+</xs:element>
+  <xs:complexType name="monthView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="year" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="weekdaynames" type="xs:string" default="['So.','Mo.','Di.','Mi.','Do.','Fr.','Sa.']" >
+</xs:attribute>
+      <xs:attribute name="showingdate" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="selecteddate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="monthnames" type="xs:string" default="['Januar','Februar','Maerz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember']" >
+</xs:attribute>
+      <xs:attribute name="firstdayinweek" type="lzx:number" default="$once{ canvas.firstdayinweek }" >
+</xs:attribute>
+      <xs:attribute name="dayNamesLabelIds" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="dayLabelNamesLabelIds" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="monitorListItemView" type="project:monitorListItemView" >
+</xs:element>
+  <xs:complexType name="monitorListItemView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="conferenceMenubar" type="project:conferenceMenubar" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Menu for public/private conference and audience room. This class shows 
+		exit, moderator, file, setteings and poll menu. Those menu items are connected 
+		to each command that has been declared in base/mainMethods.lzx. May 24 2008 
+		commented by onokeiji@gmail.com </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="conferenceMenubar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:menubar">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoBoard" type="project:videoBoard" >
+</xs:element>
+  <xs:complexType name="videoBoard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:conferenceBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="sponsorsPopUp" type="project:sponsorsPopUp" >
+</xs:element>
+  <xs:complexType name="sponsorsPopUp" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatTab" type="project:chatTab" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+Chat tabpane class. It contains chatOutput-class and catTabBottom-class.
+This is used in the conference.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chatTab" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:simpleBaseTabpane">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="editUserProfile" type="project:editUserProfile" >
+</xs:element>
+  <xs:complexType name="editUserProfile" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentSaveView">
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="userObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="sendObject" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnOverListHeaderItem" type="project:turnOverListHeaderItem" >
+</xs:element>
+  <xs:complexType name="turnOverListHeaderItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:simpleLabelButton">
+      <xs:attribute name="subviewsid" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basePropertySelector" type="project:basePropertySelector" >
+</xs:element>
+  <xs:complexType name="basePropertySelector" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="isEnabled" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="enabledView" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="boxPosition" type="xs:string" default="down" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ position of the SliderWin or ColorPicker </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="answerPoll" type="project:answerPoll" >
+</xs:element>
+  <xs:complexType name="answerPoll" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="roomScopeName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomPollId" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomPollAnswerList" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="pollvalue" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="pollTypesId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="pollTypeId" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="pollQuestion" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="pollDate" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="createdBy" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="documentsLoaderIcon" type="project:documentsLoaderIcon" >
+</xs:element>
+  <xs:complexType name="documentsLoaderIcon" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="resourceN" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="labeltext" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isselected" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="remoteWhiteboard" type="project:remoteWhiteboard" >
+</xs:element>
+  <xs:complexType name="remoteWhiteboard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawSave">
+      <xs:attribute name="uniqueObjectSyncName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="loadingObjectListId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="loadingObjectList" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="loadObjectDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isStarting" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawPaintTools" type="project:drawPaintTools" >
+</xs:element>
+  <xs:complexType name="drawPaintTools" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="sharedObject" type="project:sharedObject" >
+</xs:element>
+  <xs:complexType name="sharedObject" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="so" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="onStatus" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="monitorList" type="project:monitorList" >
+</xs:element>
+  <xs:complexType name="monitorList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="doubleclickEvent" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listPresentationFilePDF" type="project:listPresentationFilePDF" >
+</xs:element>
+  <xs:complexType name="listPresentationFilePDF" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseListPresentationItem">
+      <xs:attribute name="swfName" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="pdfname" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseVideoStreamDevice" type="project:baseVideoStreamDevice" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	extends the baseVideoStream with functions to catch Device Events
+	this Class uses Events from the Base Class baseVideoStream
+	onmicro and oncamera, which are thrown, once a device was set
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseVideoStreamDevice" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseVideoStream">
+      <xs:attribute name="sendMicroStatus" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="sendCameraStatus" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="objMessage" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+	Message to send to Clients
+	 </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="micactive" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Shows if there is Activity on the Microphone </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="level" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Audio level, 0-100, the amount of sound detected by this microphone.
+          Reset to 0 when there is no audio (no activity or not allowed).
+          @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isgreater" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+		indicates if the message should be send, you can change the notification 
+		level by changing the loudnessAcitviation in the public/config.xml
+	 </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="doSendNotification" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="camactive" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Shows if there is Activity on the Camera </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="closableViewLetter" type="project:closableViewLetter" >
+</xs:element>
+  <xs:complexType name="closableViewLetter" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="userListItem" type="project:userListItem" >
+</xs:element>
+  <xs:complexType name="userListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="login" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="lastname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="firstname" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dragItemFileExplorer" type="project:dragItemFileExplorer" >
+</xs:element>
+  <xs:complexType name="dragItemFileExplorer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="overItem" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="newParentFileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="moveToHome" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOwner" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="dragItemResource" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="alreadySent" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelTooltip" type="project:labelTooltip" >
+</xs:element>
+  <xs:complexType name="labelTooltip" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="setContent" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="multiline" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="ismenubuttonlabel" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="inittwice" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="initByDataPathparent" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="holder" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="browserButton" type="project:browserButton" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ TODO:
+		inprement of history feature
+		add resize feature to labelExplorerBox component
+	</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="browserButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="enabled" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ TODO:
+		inprement of history feature
+		add resize feature to labelExplorerBox component
+	</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="sharingSession" type="project:sharingSession" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+    View for recorded contents list.
+    When you select 'Recordings' on the top menu, this class shows the list.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="sharingSession" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sharingSessionObject" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+    View for recorded contents list.
+    When you select 'Recordings' on the top menu, this class shows the list.
+</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sharerPublicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="registerToViewers" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="httpSessionStarted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentCursorObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="closeByRemote" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="devmediadevice" type="project:devmediadevice" >
+</xs:element>
+  <xs:complexType name="devmediadevice" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="itemKkk" type="project:itemKkk" >
+</xs:element>
+  <xs:complexType name="itemKkk" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="netparam" type="project:netparam" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        Net parameter.
+        Element to use inside netremotecall.
+        @todo Document netparam class.
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="netparam" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="value" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The value of the netparam. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_recorderClickMask" type="project:_recorderClickMask" >
+</xs:element>
+  <xs:complexType name="_recorderClickMask" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawDoAndUndo" type="project:drawDoAndUndo" >
+</xs:element>
+  <xs:complexType name="drawDoAndUndo" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseChooseIcon">
+      <xs:attribute name="doredo" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatTabItemEmoticons" type="project:chatTabItemEmoticons" >
+</xs:element>
+  <xs:complexType name="chatTabItemEmoticons" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="usertime" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="usercolor" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="picture_uri" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="messageObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="message" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="leading" type="lzx:number" default="5" >
+</xs:attribute>
+      <xs:attribute name="isDirectLink" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basePropertyPanel" type="project:basePropertyPanel" >
+</xs:element>
+  <xs:complexType name="basePropertyPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="title" type="xs:string" default="basePanel" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Title of this window </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="closable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if this Box should be closeable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="miniIconSmybolExtraIcons" type="project:miniIconSmybolExtraIcons" >
+</xs:element>
+  <xs:complexType name="miniIconSmybolExtraIcons" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="modi" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="innerlistViewParticipentsTable" type="project:innerlistViewParticipentsTable" >
+</xs:element>
+  <xs:complexType name="innerlistViewParticipentsTable" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lineOnlyColorChoose" type="project:lineOnlyColorChoose" >
+</xs:element>
+  <xs:complexType name="lineOnlyColorChoose" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePropertySelector">
+      <xs:attribute name="selectedColorTransformedString" type="xs:string" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="selectedColor" type="lzx:number" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="isopen" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="colorPickRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="colorIsEnabled" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="screenSharingDialog" type="project:screenSharingDialog" >
+</xs:element>
+  <xs:complexType name="screenSharingDialog" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="tObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="lastMouseY" type="lzx:number" default="-1" >
+</xs:attribute>
+      <xs:attribute name="lastMouseX" type="lzx:number" default="-1" >
+</xs:attribute>
+      <xs:attribute name="isWindows" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isStarted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMouseOverActive" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMac" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isLinux" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="initObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="idleDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="doSendEvents" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="currentCursorObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="checkboxIsinited" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="filesPanel" type="project:filesPanel" >
+</xs:element>
+  <xs:complexType name="filesPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="invitationQuickLoader" type="project:invitationQuickLoader" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="invitationQuickLoader" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="userlang" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatOutputRoomsList" type="project:chatOutputRoomsList" >
+</xs:element>
+  <xs:complexType name="chatOutputRoomsList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="wmlFileExplorerItem" type="project:wmlFileExplorerItem" >
+</xs:element>
+  <xs:complexType name="wmlFileExplorerItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseFileExplorerItem">
+      <xs:attribute name="isWmlFile" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simplebaseItemActivityList" type="project:simplebaseItemActivityList" >
+</xs:element>
+  <xs:complexType name="simplebaseItemActivityList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tStamp" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="rcl" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="message" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawClipArt" type="project:baseDrawClipArt" >
+</xs:element>
+  <xs:complexType name="baseDrawClipArt" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawArrow">
+      <xs:attribute name="minClipArty" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="minClipArtx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="maxClipArty" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="maxClipArtx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="deltaClipArty" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="deltaClipArtx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="currentClipArtRessourceName" type="xs:string" default="icons.png" >
+</xs:attribute>
+      <xs:attribute name="clipArtEndy" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="clipArtEndx" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewConferenceMenubar" type="project:interviewConferenceMenubar" >
+</xs:element>
+  <xs:complexType name="interviewConferenceMenubar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:menubar">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listFolderDrag" type="project:listFolderDrag" >
+</xs:element>
+  <xs:complexType name="listFolderDrag" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="uploadmodul" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isPpt" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="foldername" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="singletonErrorPopup" type="project:singletonErrorPopup" >
+</xs:element>
+  <xs:complexType name="singletonErrorPopup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:errorPopup">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="iframeView" type="project:iframeView" >
+</xs:element>
+  <xs:complexType name="iframeView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="isrc" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="iname" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="iid" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="iFrameJsStack" type="xs:string" default="javascript:" >
+</xs:attribute>
+      <xs:attribute name="createIFrame_callbackMax" type="lzx:number" default="1000" >
+</xs:attribute>
+      <xs:attribute name="createIFrame_callbackCounter" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="createIFrameDone_attr" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="callbackTimerDelay" type="lzx:number" default="100" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelerrorPopup" type="project:labelerrorPopup" >
+</xs:element>
+  <xs:complexType name="labelerrorPopup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:errorPopup">
+      <xs:attribute name="errorlabelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawViewInner" type="project:drawViewInner" >
+</xs:element>
+  <xs:complexType name="drawViewInner" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dateSelectorDayHeader" type="project:dateSelectorDayHeader" >
+</xs:element>
+  <xs:complexType name="dateSelectorDayHeader" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDateSelectorComponent">
+      <xs:attribute name="daynumber" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelPanel" type="project:labelPanel" >
+</xs:element>
+  <xs:complexType name="labelPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePanel">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="weekbkgnd" type="project:weekbkgnd" >
+</xs:element>
+  <xs:complexType name="weekbkgnd" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="innerlistView" type="project:innerlistView" >
+</xs:element>
+  <xs:complexType name="innerlistView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="applyForModeration" type="project:applyForModeration" >
+</xs:element>
+  <xs:complexType name="applyForModeration" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="applymessage" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="guiPresenter" type="project:guiPresenter" >
+</xs:element>
+  <xs:complexType name="guiPresenter" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="title" type="xs:string" default="defaulttitle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The Title of this Box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resizeable" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if this Box should be resizeable  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onresized" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ this Event will be triggered after resizing </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onclose" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the Event will be thrown if you close the Box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onactivate" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the Event will be thrown if you do click on it and drag </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minimized" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="minimizable" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="maximizable" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="maxi_y" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="maxi_x" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="maxi_width" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="maxi_height" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="isresizeing" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="ismaximized" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if this Box should be resizeable  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="initialHeight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="hasshadow" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="dockingbarrier" type="lzx:number" default="15" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Hard to explain but its clear if you play around 
+		with that. Its the number of minimum pixels before 
+		the "docking" effect will be there </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="docking" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Can this Box be docked to others and 
+			the width/height of parent compoent barrier </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="customMinimizeMethod" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="closable" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if this Box should be closeable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="parentResultPollBalk" type="project:parentResultPollBalk" >
+</xs:element>
+  <xs:complexType name="parentResultPollBalk" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="textA" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="newX" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="newPercent" type="xs:string" default="0%" >
+</xs:attribute>
+      <xs:attribute name="answer" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListRestrictedRoomScreen" type="project:activityListRestrictedRoomScreen" >
+</xs:element>
+  <xs:complexType name="activityListRestrictedRoomScreen" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="questionCheckbox" type="project:questionCheckbox" >
+</xs:element>
+  <xs:complexType name="questionCheckbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="valBool" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calendar" type="project:calendar" >
+</xs:element>
+  <xs:complexType name="calendar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentView">
+      <xs:attribute name="terminareaObjRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="terminObjRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="terminObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="selecteddate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="detailsInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentSelection" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="contact" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="appointmentId" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basePanel" type="project:basePanel" >
+</xs:element>
+  <xs:complexType name="basePanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseBoundingBorderView">
+      <xs:attribute name="title" type="xs:string" default="basePanel" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Title of this window </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="closable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if this Box should be closeable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rootFileExplorerItem" type="project:rootFileExplorerItem" >
+</xs:element>
+  <xs:complexType name="rootFileExplorerItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseFileExplorerItem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basepanel" type="project:basepanel" >
+</xs:element>
+  <xs:complexType name="basepanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleTurnOverList" type="project:simpleTurnOverList" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ common simpleTurnOverList view class. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="simpleTurnOverList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="ondblclickedItem" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="mainBgColor" type="xs:string" default="0xEEF0EB" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dateSelectorMonth" type="project:dateSelectorMonth" >
+</xs:element>
+  <xs:complexType name="dateSelectorMonth" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDateSelectorComponent">
+      <xs:attribute name="month" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="firstweekNumber" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="currentMonthName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorPot" type="project:colorPot" >
+</xs:element>
+  <xs:complexType name="colorPot" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="mycolorString" type="xs:string" default="0x000000" >
+</xs:attribute>
+      <xs:attribute name="mycolor" type="lzx:color" default="0x000000" >
+</xs:attribute>
+      <xs:attribute name="listener" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="participentListItem" type="project:participentListItem" >
+</xs:element>
+  <xs:complexType name="participentListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="userroom" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="streamid" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="lastname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isSuperModerator" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMod" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="formatedDate" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="firstname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="connectedSince" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="canRemote" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnoverlistheaderitem" type="project:turnoverlistheaderitem" >
+</xs:element>
+  <xs:complexType name="turnoverlistheaderitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basicturnoverlistheaderitem">
+      <xs:attribute name="subviewsid" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chooseDrawAreaObjectWindow" type="project:chooseDrawAreaObjectWindow" >
+</xs:element>
+  <xs:complexType name="chooseDrawAreaObjectWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:explorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="listV" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="restrictedUserList" type="project:restrictedUserList" >
+</xs:element>
+  <xs:complexType name="restrictedUserList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="organisation_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="colorArray" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ colors for each user </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="broadCastViewRef" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ holds a references to the videoview which is broadcasting </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="applyDefaultModeration" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="allowUserQuestions" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="monitorSubListItem" type="project:monitorSubListItem" >
+</xs:element>
+  <xs:complexType name="monitorSubListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="textitem" type="xs:string" default="def" >
+</xs:attribute>
+      <xs:attribute name="lableid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="itemid" type="xs:string" default="def" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnOverListHeaderItemSimple" type="project:turnOverListHeaderItemSimple" >
+</xs:element>
+  <xs:complexType name="turnOverListHeaderItemSimple" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:simpleLabelButton">
+      <xs:attribute name="pathOrder" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="asc" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelBlueButton" type="project:labelBlueButton" >
+</xs:element>
+  <xs:complexType name="labelBlueButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:blueButton">
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnoverlistheaderitemResizeWizzardRefresh" type="project:turnoverlistheaderitemResizeWizzardRefresh" >
+</xs:element>
+  <xs:complexType name="turnoverlistheaderitemResizeWizzardRefresh" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basicturnoverlistheaderitem">
+      <xs:attribute name="subviewsid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="minwidth" type="lzx:number" default="2" >
+</xs:attribute>
+      <xs:attribute name="minheight" type="lzx:number" default="10" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="openmeetingsTabButtonBackground" type="project:openmeetingsTabButtonBackground" >
+</xs:element>
+  <xs:complexType name="openmeetingsTabButtonBackground" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:roundRectGradient">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="sharingScreenImage" type="project:sharingScreenImage" >
+</xs:element>
+  <xs:complexType name="sharingScreenImage" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:image">
+      <xs:attribute name="imageCompleted" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="subMenuIconToolsToUpload" type="project:subMenuIconToolsToUpload" >
+</xs:element>
+  <xs:complexType name="subMenuIconToolsToUpload" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="refToolbar" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="currentSelected" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="currentContainer" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelExplorerBox" type="project:labelExplorerBox" >
+</xs:element>
+  <xs:complexType name="labelExplorerBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:explorerBox">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="documentsTabBar" type="project:documentsTabBar" >
+</xs:element>
+  <xs:complexType name="documentsTabBar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="currentItem" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="paintMenu" type="project:paintMenu" >
+</xs:element>
+  <xs:complexType name="paintMenu" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseToolbarMenu">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseErrorDialog" type="project:baseErrorDialog" >
+</xs:element>
+  <xs:complexType name="baseErrorDialog" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="errortext" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="errorid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="addInfo" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseListPresentationItemExplorer" type="project:baseListPresentationItemExplorer" >
+</xs:element>
+  <xs:complexType name="baseListPresentationItemExplorer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="uploadmoduleimgfolder" type="xs:string" default="$once{ canvas.uploadmoduleimgfolder }" >
+</xs:attribute>
+      <xs:attribute name="uploadmodul" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="selectable" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isselected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isoriginal" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewListInner" type="project:interviewListInner" >
+</xs:element>
+  <xs:complexType name="interviewListInner" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseRoomInnerList">
+      <xs:attribute name="sortType" type="xs:string" default="alphabetical" >
+</xs:attribute>
+      <xs:attribute name="selectedItem" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseToolbarMenu" type="project:baseToolbarMenu" >
+</xs:element>
+  <xs:complexType name="baseToolbarMenu" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selectedButton" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoBoardAudience" type="project:videoBoardAudience" >
+</xs:element>
+  <xs:complexType name="videoBoardAudience" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:conferenceBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rpcErrorDialog" type="project:rpcErrorDialog" >
+</xs:element>
+  <xs:complexType name="rpcErrorDialog" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:errorDialog">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listPresentationFileOrigExplorer" type="project:listPresentationFileOrigExplorer" >
+</xs:element>
+  <xs:complexType name="listPresentationFileOrigExplorer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:listPresentationFilePDFExplorer">
+      <xs:attribute name="originalName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="autoLoader" type="project:autoLoader" >
+</xs:element>
+  <xs:complexType name="autoLoader" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="maxwidth" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="maxsteps" type="lzx:number" default="19" >
+</xs:attribute>
+      <xs:attribute name="currentsteps" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="logoutConfirm" type="project:logoutConfirm" >
+</xs:element>
+  <xs:complexType name="logoutConfirm" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="objectsToClean" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="boxInitEffect" type="project:boxInitEffect" >
+</xs:element>
+  <xs:complexType name="boxInitEffect" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="ziely" type="lzx:number" default="200" >
+</xs:attribute>
+      <xs:attribute name="zielx" type="lzx:number" default="200" >
+</xs:attribute>
+      <xs:attribute name="zielwidth" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="zielheight" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="objRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="appointmentNotificationPopUp" type="project:appointmentNotificationPopUp" >
+</xs:element>
+  <xs:complexType name="appointmentNotificationPopUp" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="roomobj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="eventRoomSidebar" type="project:eventRoomSidebar" >
+</xs:element>
+  <xs:complexType name="eventRoomSidebar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="restricted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="listType" type="xs:string" default="eventUserListTable" >
+</xs:attribute>
+      <xs:attribute name="isOpen" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="borderedInputtext" type="project:borderedInputtext" >
+</xs:element>
+  <xs:complexType name="borderedInputtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tvalue" type="xs:string" default="default" >
+</xs:attribute>
+      <xs:attribute name="text" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="sendchange" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="preText" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="multiline" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="maxlength" type="lzx:number" default="null" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="editable" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="checkIsNumber" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="checkIsDouble" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="monthViewAlt" type="project:monthViewAlt" >
+</xs:element>
+  <xs:complexType name="monthViewAlt" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calendarTabs" type="project:calendarTabs" >
+</xs:element>
+  <xs:complexType name="calendarTabs" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:tabslider">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basePropertyPanelWhiteboard" type="project:basePropertyPanelWhiteboard" >
+</xs:element>
+  <xs:complexType name="basePropertyPanelWhiteboard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="title" type="xs:string" default="basePanel" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Title of this window </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="usersTable" type="project:usersTable" >
+</xs:element>
+  <xs:complexType name="usersTable" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="selectedDayLook" type="project:selectedDayLook" >
+</xs:element>
+  <xs:complexType name="selectedDayLook" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="open" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="dayview" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="borderedMultiInputtext" type="project:borderedMultiInputtext" >
+</xs:element>
+  <xs:complexType name="borderedMultiInputtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tvalue" type="xs:string" default="default" >
+</xs:attribute>
+      <xs:attribute name="text" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="sendchange" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="multiline" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="maxlength" type="lzx:number" default="null" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="editable" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="checkIsNumber" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="checkIsDouble" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="cursorObject" type="project:cursorObject" >
+</xs:element>
+  <xs:complexType name="cursorObject" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoObjectPlayScreenShare" type="project:videoObjectPlayScreenShare" >
+</xs:element>
+  <xs:complexType name="videoObjectPlayScreenShare" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="currentY" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="currentX" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fixedFileExplorerWhiteboardPanel" type="project:fixedFileExplorerWhiteboardPanel" >
+</xs:element>
+  <xs:complexType name="fixedFileExplorerWhiteboardPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePropertyPanelWhiteboard">
+      <xs:attribute name="whiteboardId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_labelMenu" type="project:_labelMenu" >
+</xs:element>
+  <xs:complexType name="_labelMenu" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:menu">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="userTagView" type="project:userTagView" >
+</xs:element>
+  <xs:complexType name="userTagView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="userroom" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="streamid" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="lastname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isMod" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="formatedDate" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="firstname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="connectedSince" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="customInputtext" type="project:customInputtext" >
+</xs:element>
+  <xs:complexType name="customInputtext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:inputtext">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="singletonErrorPopupHolder" type="project:singletonErrorPopupHolder" >
+</xs:element>
+  <xs:complexType name="singletonErrorPopupHolder" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="error" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="dialogPresent" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="dialogObject" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="panelBoundBox" type="project:panelBoundBox" >
+</xs:element>
+  <xs:complexType name="panelBoundBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnOverTextItem" type="project:turnOverTextItem" >
+</xs:element>
+  <xs:complexType name="turnOverTextItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleLabelRoundButtonIcon" type="project:simpleLabelRoundButtonIcon" >
+</xs:element>
+  <xs:complexType name="simpleLabelRoundButtonIcon" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:simpleLabelRoundButton">
+      <xs:attribute name="tlabelid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="ressourceIcon" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="incomingScreenSharing" type="project:incomingScreenSharing" >
+</xs:element>
+  <xs:complexType name="incomingScreenSharing" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="messageObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatParticipantsInviteConference" type="project:chatParticipantsInviteConference" >
+</xs:element>
+  <xs:complexType name="chatParticipantsInviteConference" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rtmpConnection" type="project:rtmpConnection" >
+</xs:element>
+  <xs:complexType name="rtmpConnection" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="src" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="onerror" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onconnect" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="lastCalled" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="debug" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="resultPollBalk" type="project:resultPollBalk" >
+</xs:element>
+  <xs:complexType name="resultPollBalk" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="conferenceRoomSidebarTabButton" type="project:conferenceRoomSidebarTabButton" >
+</xs:element>
+  <xs:complexType name="conferenceRoomSidebarTabButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="currentIconRsc" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawAreaObjectCombobox" type="project:drawAreaObjectCombobox" >
+</xs:element>
+  <xs:complexType name="drawAreaObjectCombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecombobox">
+      <xs:attribute name="preselectedName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="modus" type="xs:string" default="${ this.parent.canvas._drawarea.drawmodus }" >
+</xs:attribute>
+      <xs:attribute name="ObjectByName" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawAreaObjectValueBox" type="project:drawAreaObjectValueBox" >
+</xs:element>
+  <xs:complexType name="drawAreaObjectValueBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:borderedInputtext">
+      <xs:attribute name="posName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoObjectTestBroadcast" type="project:videoObjectTestBroadcast" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	contains microphone and camera for broadcasting,
+	this class is used only in Meetings-Modus
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="videoObjectTestBroadcast" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sendMicroStatus" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="sendCameraStatus" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	contains microphone and camera for broadcasting,
+	this class is used only in Meetings-Modus
+ </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoContainerStream" type="project:videoContainerStream" >
+</xs:element>
+  <xs:complexType name="videoContainerStream" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawChooseSizeRadio" type="project:drawChooseSizeRadio" >
+</xs:element>
+  <xs:complexType name="drawChooseSizeRadio" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:radiogroup">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="converterPopup" type="project:converterPopup" >
+</xs:element>
+  <xs:complexType name="converterPopup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="error" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListRestrictedRoomA" type="project:activityListRestrictedRoomA" >
+</xs:element>
+  <xs:complexType name="activityListRestrictedRoomA" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoFileExplorerItem" type="project:videoFileExplorerItem" >
+</xs:element>
+  <xs:complexType name="videoFileExplorerItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseFileExplorerItem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnOverList" type="project:turnOverList" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ common TurnOverList view class. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="turnOverList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="step" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="start" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ common TurnOverList view class. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sendEventToReload" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="records" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="orderby" type="xs:string" default="firstname" >
+</xs:attribute>
+      <xs:attribute name="ondblclickedItem" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="oncallpre" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="oncallnext" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onUpdateOrder" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="mainBgColor" type="xs:string" default="0xEEF0EB" >
+</xs:attribute>
+      <xs:attribute name="currentSelectedOrder" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="asc" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="languagesEditor" type="project:languagesEditor" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Language editor module. You can edit the label for your language. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="languagesEditor" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentView">
+      <xs:attribute name="tempValue" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="language_id" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="xmlCrmTooltipMulti" type="project:xmlCrmTooltipMulti" >
+</xs:element>
+  <xs:complexType name="xmlCrmTooltipMulti" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="holder" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawDrawarrowTools" type="project:drawDrawarrowTools" >
+</xs:element>
+  <xs:complexType name="drawDrawarrowTools" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="hibRtmpConnection" type="project:hibRtmpConnection" >
+</xs:element>
+  <xs:complexType name="hibRtmpConnection" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:rtmpConnection">
+      <xs:attribute name="userobject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="userlang" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="userScope" type="xs:string" default="hibernate" >
+</xs:attribute>
+      <xs:attribute name="testAppLoading" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="step" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="start" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="sipLoader" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="showKickMessage" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="showFullMessage" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="roomtype" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="room_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="refreshDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="reconnectionAction" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="reconnectedRoomInstance" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="reconnectObjRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="reconnectAfterRoomleft" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="publicSIDOfNewModerator" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="publicSID" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="protocollPort" type="xs:string" default="$once{ canvas.rtmpport }" >
+</xs:attribute>
+      <xs:attribute name="protocollName" type="xs:string" default="rtmp" >
+</xs:attribute>
+      <xs:attribute name="mute" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="modus" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="messageObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="max" type="lzx:number" default="1300" >
+</xs:attribute>
+      <xs:attribute name="loaderVar" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isClosed" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isAllowedToBroadCastAV" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="interviewPodId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="initlanguageLoaded" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentroomid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="currentdomainObj" type="xs:string" default="domain1" >
+</xs:attribute>
+      <xs:attribute name="currentdomain" type="xs:string" default="domain1" >
+</xs:attribute>
+      <xs:attribute name="currentInvitation" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the current Invitation-Object </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="currentHashSession" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="counterror" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="conferencedomain" type="xs:string" default="public" >
+</xs:attribute>
+      <xs:attribute name="canShare" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="canRemote" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="canDraw" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="avsettings" type="xs:string" default="av" >
+</xs:attribute>
+      <xs:attribute name="UserID" type="lzx:number" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawRect" type="project:baseDrawRect" >
+</xs:element>
+  <xs:complexType name="baseDrawRect" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawSelect">
+      <xs:attribute name="currentrectanglestrokeFillDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currentrectanglestrokeFill" type="xs:string" default="0xFFFF33" >
+</xs:attribute>
+      <xs:attribute name="currentrectanglestrokeDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currentrectanglestroke" type="xs:string" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="currentrectangleineWidth" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="currentrectangleOpacity" type="lzx:number" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="paintToolsPalette" type="project:paintToolsPalette" >
+</xs:element>
+  <xs:complexType name="paintToolsPalette" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="testSetup" type="project:testSetup" >
+</xs:element>
+  <xs:complexType name="testSetup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="roomObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="roomClassName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isDirectLink" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="forceTest" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dragItemFLVExplorer" type="project:dragItemFLVExplorer" >
+</xs:element>
+  <xs:complexType name="dragItemFLVExplorer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="overItem" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="newParentFileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="isOwner" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="dragItemResource" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="alreadySent" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="appointmentMonth" type="project:appointmentMonth" >
+</xs:element>
+  <xs:complexType name="appointmentMonth" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="terminObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="textbox" type="project:textbox" >
+</xs:element>
+  <xs:complexType name="textbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="bordercolor" type="xs:string" default="0x000000" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatInnerSmily" type="project:chatInnerSmily" >
+</xs:element>
+  <xs:complexType name="chatInnerSmily" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="iconlabel" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listPresentationThumb" type="project:listPresentationThumb" >
+</xs:element>
+  <xs:complexType name="listPresentationThumb" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseListPresentationItem">
+      <xs:attribute name="thumbname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="no" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="aquaButton" type="project:aquaButton" >
+</xs:element>
+  <xs:complexType name="aquaButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelTextWidthTooltip" type="project:labelTextWidthTooltip" >
+</xs:element>
+  <xs:complexType name="labelTextWidthTooltip" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="labelLabelid" type="lzx:number" default="-1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="participents" type="project:participents" >
+</xs:element>
+  <xs:complexType name="participents" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="userNewVideoContainer" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="organisation_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="colorArray" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ colors for each user </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="broadCastViewRef" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ holds a references to the videoview which is broadcasting </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="applyDefaultModeration" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListRestrictedRoomV" type="project:activityListRestrictedRoomV" >
+</xs:element>
+  <xs:complexType name="activityListRestrictedRoomV" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="miniIcons" type="project:miniIcons" >
+</xs:element>
+  <xs:complexType name="miniIcons" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="eventSelectorbar" type="project:eventSelectorbar" >
+</xs:element>
+  <xs:complexType name="eventSelectorbar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="yoff" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="xoff" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="startDragDel" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="startDate2" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="startDate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="snapEdge" type="xs:string" default="30" >
+</xs:attribute>
+      <xs:attribute name="origx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="obarx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="mdel" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="hidedel" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="freedragging" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="endDate2" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="endDate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="dragging" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="clipping" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="clipdel" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="baseUrl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="appointementId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="newPrivateMessage" type="project:newPrivateMessage" >
+</xs:element>
+  <xs:complexType name="newPrivateMessage" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="userObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="sendUpdateText" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="sendUpdateAttr" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="sendSingleUpdateText" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="receipents" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="parentMessageId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labeltabelement" type="project:labeltabelement" >
+</xs:element>
+  <xs:complexType name="labeltabelement" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:tabelement">
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseturnOverListPaged" type="project:baseturnOverListPaged" >
+</xs:element>
+  <xs:complexType name="baseturnOverListPaged" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="step" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="start" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="showTopBar" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="showHScrollbar" type="xs:string" default="visible" >
+</xs:attribute>
+      <xs:attribute name="selected" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="rerender" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="renderList" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="records" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="orderby" type="xs:string" default="firstname" >
+</xs:attribute>
+      <xs:attribute name="oncallpre" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="oncallnext" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onScrollItem" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onNextScrollItem" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onMoveList" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="multiselect" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="menuBarXIndent" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="listLabelId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="listItemName" type="xs:string" default="basePagingListItem" >
+</xs:attribute>
+      <xs:attribute name="itemHeight" type="lzx:number" default="20" >
+</xs:attribute>
+      <xs:attribute name="headerHeight" type="lzx:number" default="20" >
+</xs:attribute>
+      <xs:attribute name="asc" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawViewNew" type="project:drawViewNew" >
+</xs:element>
+  <xs:complexType name="drawViewNew" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="typeOfObject" type="xs:string" default="paint" >
+</xs:attribute>
+      <xs:attribute name="initwidth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="initheight" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mainToolsHPanelSeperator" type="project:mainToolsHPanelSeperator" >
+</xs:element>
+  <xs:complexType name="mainToolsHPanelSeperator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnOverListOrderedPaged" type="project:turnOverListOrderedPaged" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ common TurnOverList view class. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="turnOverListOrderedPaged" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:turnOverListPaged">
+      <xs:attribute name="onUpdateOrder" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="currentSelectedOrder" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ common TurnOverList view class. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseRoomInnerList" type="project:baseRoomInnerList" >
+</xs:element>
+  <xs:complexType name="baseRoomInnerList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="colorArray" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="roundRectGradient" type="project:roundRectGradient" >
+</xs:element>
+  <xs:complexType name="roundRectGradient" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="oninsettop" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="oninsetright" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="oninsetleft" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="oninsetbottom" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="oninset" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="oncomplete" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="insettop" type="lzx:size" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="insetright" type="lzx:size" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="insetleft" type="lzx:size" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="insetbottom" type="lzx:size" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="inset" type="lzx:size" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The margin between the outside view and the content view </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boxShadowY" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The x offset of the box shadow.  The box shadow is not drawn by default.
+            Specify a boxShadowColor in order to draw it. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boxShadowX" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The x offset of the box shadow.  The box shadow is not drawn by default.
+            Specify a boxShadowColor in order to draw it. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boxShadowOpacity" type="xs:string" default="0.5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The box shadow opacity. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="boxShadowColor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The box shadow color.  If this is specified, a box shadow is drawn.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderWidth" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The width of the border.  If this is zero, no frame is drawn. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderRadius" type="xs:string" default="5" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The rounding radius of the border corners.  Because the default
+            join type is a round join, even a radius of zero will product some
+            rounding. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border opacity </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderColor" type="lzx:color" default="black" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border color </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundStopOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background stop opacity.  This defaults to one (opaque) unless the
+            stop color is not specified and the start color is, in which case it
+            defaults to zero (fully transparent). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundStopColor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background stop color.  This is the color that is drawn at the
+            bottom or right of the view, depending on the value of
+            backgroundGradientOrientation.  See the documentation for
+            backgroundStartColor for additional documentation. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundStartOpacity" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background start opacity.  This defaults to one (opaque) unless the
+            start color is not specified and the stop color is, in which case it
+            defaults to zero (fully transparent). </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundStartColor" type="lzx:color" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background start color.  This is the color that is drawn at
+            the top or left of the view, depending on the value of
+            backgroundGradientOrientation.  If this and the backround stop color
+            are specified, a gradient background is drawn in the direction specified
+            by backgroundGradientOrientation.  If only one of the background start
+            and stop color are specified, a gradient of the same color that fades to
+            transparent at the unspecified end is drawn.  If a box shadow is drawn,
+            the background defaults to white.  Specify a start and stop opacity to
+            suppress this behavior. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="backgroundGradientOrientation" type="xs:string" default="vertical" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The background gradient orientation.  One of 'vertical' (the default)
+            and 'horizontal'. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="errorPopupUserInfo" type="project:errorPopupUserInfo" >
+</xs:element>
+  <xs:complexType name="errorPopupUserInfo" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="user" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="error" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawEllipseTools" type="project:drawEllipseTools" >
+</xs:element>
+  <xs:complexType name="drawEllipseTools" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawSelect" type="project:baseDrawSelect" >
+</xs:element>
+  <xs:complexType name="baseDrawSelect" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawTriangle">
+      <xs:attribute name="currentSelectanglestrokeFillDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currentSelectanglestrokeFill" type="xs:string" default="0x8e8986" >
+</xs:attribute>
+      <xs:attribute name="currentSelectanglestrokeDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currentSelectanglestroke" type="xs:string" default="0x8e8986" >
+</xs:attribute>
+      <xs:attribute name="currentSelectangleineWidth" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="currentSelectangleOpacity" type="lzx:number" default="0.2" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawColorPicker" type="project:drawColorPicker" >
+</xs:element>
+  <xs:complexType name="drawColorPicker" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="onnewcolor" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="defaultno" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawChooseSeperator" type="project:drawChooseSeperator" >
+</xs:element>
+  <xs:complexType name="drawChooseSeperator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseMenuSeperator">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fixedFileExplorerWhiteBoard" type="project:fixedFileExplorerWhiteBoard" >
+</xs:element>
+  <xs:complexType name="fixedFileExplorerWhiteBoard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="timeisInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="sendUpdate" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="sendObjectToClientID" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="sendObjectDel" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="sendObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="room" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="restricted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="parentPath" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="onsharedMessage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="objectRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="moduleName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isloadingImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="isloadedImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initW" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initH" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="imagey" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="ignoreUpdates" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="iamgex" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="downloadurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="documentmenuIsInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="confirmdialog" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="baseurl" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="propertyPanelLetterButton" type="project:propertyPanelLetterButton" >
+</xs:element>
+  <xs:complexType name="propertyPanelLetterButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="labelid" type="lzx:number" default="87" >
+</xs:attribute>
+      <xs:attribute name="itemResourceName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="enabled" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentVal" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="recordValueList" type="project:recordValueList" >
+</xs:element>
+  <xs:complexType name="recordValueList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:turnOverList">
+      <xs:attribute name="itemToDelete" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="deleteItem" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="loadWhiteboardWindow" type="project:loadWhiteboardWindow" >
+</xs:element>
+  <xs:complexType name="loadWhiteboardWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelText">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseTopPanel" type="project:baseTopPanel" >
+</xs:element>
+  <xs:complexType name="baseTopPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseBoundingBorderView">
+      <xs:attribute name="title" type="xs:string" default="basePanel" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Title of this window </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="closable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if this Box should be closeable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calendarWeekView" type="project:calendarWeekView" >
+</xs:element>
+  <xs:complexType name="calendarWeekView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="vsliderThumb" type="project:vsliderThumb" >
+</xs:element>
+  <xs:complexType name="vsliderThumb" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:button">
+      <xs:attribute name="showvalue" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="drag_min" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="drag_max" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tableCombobox" type="project:tableCombobox" >
+</xs:element>
+  <xs:complexType name="tableCombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:combobox">
+      <xs:attribute name="tvalue" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="sendchange" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="initvalue" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="imageListInnerTable" type="project:imageListInnerTable" >
+</xs:element>
+  <xs:complexType name="imageListInnerTable" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawImage" type="project:baseDrawImage" >
+</xs:element>
+  <xs:complexType name="baseDrawImage" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawLetter">
+      <xs:attribute name="syncImageRefObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="syncImageCheckTime" type="lzx:number" default="1000" >
+</xs:attribute>
+      <xs:attribute name="setNewScreenUserName" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="screenImageRefNumber" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="screenImageRef2" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="screenImageRef1" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="loadingUsersImageListIndex" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="loadimageDataWinRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="loadImageObjectTimer" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isWmlLoaderImage" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isScreenImageLoading" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="imageSyncMessageText" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="imageSyncMessageId" type="lzx:number" default="209" >
+</xs:attribute>
+      <xs:attribute name="imageLoadingCompleteMessage" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="imageLoadMessageId" type="lzx:number" default="208" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dynamicFLVName" type="project:dynamicFLVName" >
+</xs:element>
+  <xs:complexType name="dynamicFLVName" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:customInputtext">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="parentFileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="isOwner" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isNew" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="whiteboardBarMenu" type="project:whiteboardBarMenu" >
+</xs:element>
+  <xs:complexType name="whiteboardBarMenu" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="staticwidth" type="lzx:number" default="120" >
+</xs:attribute>
+      <xs:attribute name="currentBtn" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_recordPlayerBG" type="project:_recordPlayerBG" >
+</xs:element>
+  <xs:complexType name="_recordPlayerBG" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_videoBoardStream" type="project:_videoBoardStream" >
+</xs:element>
+  <xs:complexType name="_videoBoardStream" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="whiteboardVideoPlayer" type="project:whiteboardVideoPlayer" >
+</xs:element>
+  <xs:complexType name="whiteboardVideoPlayer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="timerDelegateStarted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="timerDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="sendInit" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="recordingName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isLoaded" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="deltaInSeconds" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewWhiteboard" type="project:interviewWhiteboard" >
+</xs:element>
+  <xs:complexType name="interviewWhiteboard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnoverlistheaderitemIcon" type="project:turnoverlistheaderitemIcon" >
+</xs:element>
+  <xs:complexType name="turnoverlistheaderitemIcon" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basicturnoverlistheaderitem">
+      <xs:attribute name="toolTipLabelId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="subviewsid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="iconResource" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="moderationMiniIconsInterviewUserList" type="project:moderationMiniIconsInterviewUserList" >
+</xs:element>
+  <xs:complexType name="moderationMiniIconsInterviewUserList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorRectChoose" type="project:colorRectChoose" >
+</xs:element>
+  <xs:complexType name="colorRectChoose" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:colorRectChoosebase">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="verticalMenuIconBar" type="project:verticalMenuIconBar" >
+</xs:element>
+  <xs:complexType name="verticalMenuIconBar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="modi" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="omlegend" type="project:omlegend" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+     simple legend class
+     @access public
+      </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="omlegend" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+      <xs:attribute name="verticalgap" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="topmargin" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="styleBorder" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the style will be applied tho the border legend box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="rightmargin" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="position" type="xs:string" default="right" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates where the legend box will be positioned, default: right </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmouseup" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse up event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmouseover" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse over event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmouseout" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse out event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmousedown" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse down event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onitemmouseclick" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ event that allows custom action for mouse click event
+            @param Number item: The identifier legend item
+         </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendborder" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates if legend box will have a border, default: true </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendFontsize" type="lzx:size" default="6" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the Font size wiil be used in the legend item text, default: 10px </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendFontcolor" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the Font color wiil be used in the legend item text, default: black </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="legendFont" type="xs:string" default="serif" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates the Font will be used in the legend item text </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="leftmargin" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fillColor" type="lzx:color" default="0xFFFFFF" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Allow to set the fill color from the legend tag </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="direction" type="xs:string" default="vertical" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Indicates how the legend items will be displayed, default: vertical </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="chartClassName" type="xs:string" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="chart" type="xs:string" default="${null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Takes the relationship with the chart </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bottommargin" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderWidth" type="lzx:number" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Allow to set the line width from the legend tag </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="borderColor" type="lzx:color" default="0x000000" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Allow to set the color line from the legend tag </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoInfoStuff" type="project:videoInfoStuff" >
+</xs:element>
+  <xs:complexType name="videoInfoStuff" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="documentIconLeftPanel" type="project:documentIconLeftPanel" >
+</xs:element>
+  <xs:complexType name="documentIconLeftPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseLeftPanel">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="closableView" type="project:closableView" >
+</xs:element>
+  <xs:complexType name="closableView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorRectChooseSmall" type="project:colorRectChooseSmall" >
+</xs:element>
+  <xs:complexType name="colorRectChooseSmall" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:colorRectChoosebase">
+      <xs:attribute name="defaultno" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDraw" type="project:baseDraw" >
+</xs:element>
+  <xs:complexType name="baseDraw" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="starty" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="startx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="showGrid" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="selectedObjects" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="restricted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="redolayers" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="prevy" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="prevx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="onupdateScale" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onopenWhiteBoard" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="my" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="mx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="mousetracker_del" type="xs:string" default="$once{ new LzDelegate(this, 'trackmouse' )}" >
+</xs:attribute>
+      <xs:attribute name="layers" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="last_y" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="last_x" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="isSnapToGrid" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isRemoteOID" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ If true it will try to load the ObjectIdentifier Extension from the Server </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isDragging" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="hasprevious" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="hasenext" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="gridWidth" type="lzx:number" default="24" >
+</xs:attribute>
+      <xs:attribute name="endy" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="endx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="drawmodus" type="xs:string" default="hand" >
+</xs:attribute>
+      <xs:attribute name="doClearSlide" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="doClearAll" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentlayer" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="counter" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="copyObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="boundingref" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="boundingIsActive" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="basetempactionobjectList" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="baseredoactionobjectList" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="baseactionobjectList" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="basdrawredoView" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="ObjectByName" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewConferenceRoom" type="project:interviewConferenceRoom" >
+</xs:element>
+  <xs:complexType name="interviewConferenceRoom" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseConferenceRoom">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="multiWhiteboardPanel" type="project:multiWhiteboardPanel" >
+</xs:element>
+  <xs:complexType name="multiWhiteboardPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:fixedFileExplorerWhiteBoard">
+      <xs:attribute name="whiteboardId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="objWhiteboard" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="objMessage" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listPresentationThumbExplorer" type="project:listPresentationThumbExplorer" >
+</xs:element>
+  <xs:complexType name="listPresentationThumbExplorer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseListPresentationItemExplorer">
+      <xs:attribute name="thumbname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="no" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseFileExplorerItem" type="project:baseFileExplorerItem" >
+</xs:element>
+  <xs:complexType name="baseFileExplorerItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="singleClickStarted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="singleClickDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="selected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="refObjListRoot" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="open" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="mouseDownClickUsed" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="mouseDownClickDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isVideo" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isTrashCan" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isRoot" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isPresentation" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOwner" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMouseDownDragAction" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isImage" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isFolder" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fileIcon" type="xs:string" default="string" >
+</xs:attribute>
+      <xs:attribute name="fileHash" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chooseNickName" type="project:chooseNickName" >
+</xs:element>
+  <xs:complexType name="chooseNickName" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="swfResourceView" type="project:swfResourceView" >
+</xs:element>
+  <xs:complexType name="swfResourceView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="zoomlevel" type="lzx:number" default="20" >
+</xs:attribute>
+      <xs:attribute name="uniqueObjectSyncName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="typeOfObject" type="xs:string" default="swf" >
+</xs:attribute>
+      <xs:attribute name="standardFileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="slideNumber" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="room" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="recorderModus" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="parentPath" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="moduleName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="innery" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="innerx" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="innerwidth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="innerheight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="initwidth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="initheight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="fullFit" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="doSendChangeValue" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentzoomFactor" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="currentzoom" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="baseurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="alterModus" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="userRoomTabItem" type="project:userRoomTabItem" >
+</xs:element>
+  <xs:complexType name="userRoomTabItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="usertime" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="cbtext" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorRow" type="project:colorRow" >
+</xs:element>
+  <xs:complexType name="colorRow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="roomClientListItem" type="project:roomClientListItem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ list of conference/audience rooms </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="roomClientListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentListItem">
+      <xs:attribute name="streamid" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ list of conference/audience rooms </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="scope" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="login" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="dateConnected" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="moderationMiniIcons" type="project:moderationMiniIcons" >
+</xs:element>
+  <xs:complexType name="moderationMiniIcons" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isSuperModerator" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMod" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isActive" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="redirectBox" type="project:redirectBox" >
+</xs:element>
+  <xs:complexType name="redirectBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="timerDel" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="redirectURL" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="maxTime" type="lzx:number" default="5000" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rememberMessage" type="project:rememberMessage" >
+</xs:element>
+  <xs:complexType name="rememberMessage" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="showCheckBox" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="labeliderror" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="inputtextbox" type="project:inputtextbox" >
+</xs:element>
+  <xs:complexType name="inputtextbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:inputtext">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="participentsTable" type="project:participentsTable" >
+</xs:element>
+  <xs:complexType name="participentsTable" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawSave" type="project:baseDrawSave" >
+</xs:element>
+  <xs:complexType name="baseDrawSave" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawImage">
+      <xs:attribute name="wmlspreadNews" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="wmlroom" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="wmlfileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="wmldomain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="wmlLoadingCompleteMessage" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="w" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="syncmessageId" type="lzx:number" default="207" >
+</xs:attribute>
+      <xs:attribute name="synccheckTime" type="lzx:number" default="1000" >
+</xs:attribute>
+      <xs:attribute name="snap" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="sendpictureName" type="xs:string" default="snapchot.jpg" >
+</xs:attribute>
+      <xs:attribute name="sendURL" type="xs:string" default="http://www.webbase-design.de/dokeos/videoconference/createimagefrombitmap.php" >
+</xs:attribute>
+      <xs:attribute name="sendPartURL" type="xs:string" default="http://www.webbase-design.de/dokeos/videoconference/createimagefrombitmap.php" >
+</xs:attribute>
+      <xs:attribute name="savefileName" type="xs:string" default="savefileName1" >
+</xs:attribute>
+      <xs:attribute name="savefileDataWinRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="pixel_del" type="xs:string" default="$once{ new LzDelegate(this, 'buildPixelArray' )}" >
+</xs:attribute>
+      <xs:attribute name="pixelArray" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="onwmlloadStop" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onwmlloadStart" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onprogress" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="loadmessageId" type="lzx:number" default="206" >
+</xs:attribute>
+      <xs:attribute name="loadfileDataWinRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="loadfileDataIndex" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="loadfileData" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="loadObjectTimer" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isinitRecordingLoad" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isSendPartArray" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isRecordingLoad" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isInitLoader" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="h" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="fileData" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="exportType" type="xs:string" default="svg" >
+</xs:attribute>
+      <xs:attribute name="bpData" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="a" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="MatrixValue" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="MCRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleLabelButton" type="project:simpleLabelButton" >
+</xs:element>
+  <xs:complexType name="simpleLabelButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:button">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatTabItem" type="project:chatTabItem" >
+</xs:element>
+  <xs:complexType name="chatTabItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="usertime" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="usercolor" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="cbtext" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="boundingBoxAll" type="project:boundingBoxAll" >
+</xs:element>
+  <xs:complexType name="boundingBoxAll" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="whiteboardRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="startdragY" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="startdragX" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="startdragWidth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="startdragHeight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="objRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="minwidth" type="xs:string" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Minimum width for the windowy, default: 60.
+          @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minheight" type="xs:string" default="2" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Minimum height for the window, default: 50.
+          @keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="innerInsetScrollbars" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="ey" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="ex" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="ewidth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="eheight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="doHandlerUpdates" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="canBeResized" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="canBeDragged" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="boundingDoUpdateOnInit" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="saveAsWmlWindow" type="project:saveAsWmlWindow" >
+</xs:element>
+  <xs:complexType name="saveAsWmlWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fileExplorerWindow" type="project:fileExplorerWindow" >
+</xs:element>
+  <xs:complexType name="fileExplorerWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="contactSearchHead" type="project:contactSearchHead" >
+</xs:element>
+  <xs:complexType name="contactSearchHead" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="uploadWindowExplorer" type="project:uploadWindowExplorer" >
+</xs:element>
+  <xs:complexType name="uploadWindowExplorer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="winobj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="usersid" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="uploadmodule" type="xs:string" default="videoconf1" >
+</xs:attribute>
+      <xs:attribute name="singleslidesmodule_id" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="sessionid" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="servletName" type="xs:string" default="UploadHandler" >
+</xs:attribute>
+      <xs:attribute name="returnObj" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="parentFolderId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="isdefaultreturn" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isStarted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOwner" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="isOnlyXml" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOnlyProfile" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOnlyPpt" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOnlyImage" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fileExplorerRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="moderationPanel" type="project:moderationPanel" >
+</xs:element>
+  <xs:complexType name="moderationPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="roomName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="recordingsName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="recordingUser" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="initial" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="allowUserQuestions" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="presentationFilesList" type="project:presentationFilesList" >
+</xs:element>
+  <xs:complexType name="presentationFilesList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="uploadmodul" type="xs:string" default="$once{ canvas.uploadmoduleimg }" >
+</xs:attribute>
+      <xs:attribute name="onclose" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="conferencecontainertab" type="project:conferencecontainertab" >
+</xs:element>
+  <xs:complexType name="conferencecontainertab" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="whiteboardMiniButton" type="project:whiteboardMiniButton" >
+</xs:element>
+  <xs:complexType name="whiteboardMiniButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="zielx" type="lzx:number" default="200" >
+</xs:attribute>
+      <xs:attribute name="zielwidth" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="objRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isactive" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isHidden" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="btnName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelCheckbox" type="project:labelCheckbox" >
+</xs:element>
+  <xs:complexType name="labelCheckbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:checkbox">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseChooseIcon" type="project:baseChooseIcon" >
+</xs:element>
+  <xs:complexType name="baseChooseIcon" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="resourceN" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="isselected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="initY" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="initX" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawLineTools" type="project:drawLineTools" >
+</xs:element>
+  <xs:complexType name="drawLineTools" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseContentListItem" type="project:baseContentListItem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ base class for the item list views</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseContentListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="obj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isselected" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ base class for the item list views</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="imagesListdraw" type="project:imagesListdraw" >
+</xs:element>
+  <xs:complexType name="imagesListdraw" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="uploadmodul" type="xs:string" default="$once{ canvas.uploadmoduleimg }" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="meetingTimer" type="project:meetingTimer" >
+</xs:element>
+  <xs:complexType name="meetingTimer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="roomobj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="demoTime" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatOutput" type="project:chatOutput" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ chat output specialized for video-conference </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chatOutput" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="isAlreadyLoaded" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ chat output specialized for video-conference </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="debugPinCode" type="project:debugPinCode" >
+</xs:element>
+  <xs:complexType name="debugPinCode" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListRestrictedRoomApplyForMuteOff" type="project:activityListRestrictedRoomApplyForMuteOff" >
+</xs:element>
+  <xs:complexType name="activityListRestrictedRoomApplyForMuteOff" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="textBoxSubBlank" type="project:textBoxSubBlank" >
+</xs:element>
+  <xs:complexType name="textBoxSubBlank" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="netremotecall" type="project:netremotecall" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        Net remote call. 
+        @todo Document netremotecall class.
+    </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="netremotecall" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:node">
+      <xs:attribute name="remotecontext" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="onerror" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Error handling event. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="funcname" type="xs:string" default="$once{null}" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Name of the remote function. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dataobject" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="flexibleConferenceRoom" type="project:flexibleConferenceRoom" >
+</xs:element>
+  <xs:complexType name="flexibleConferenceRoom" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseConferenceRoom">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="menubarButton" type="project:menubarButton" >
+</xs:element>
+  <xs:complexType name="menubarButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:simpleLabelButton">
+      <xs:attribute name="isselected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="clientobjectArea" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="clientmaskname" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_whiteBoardPanelRecord" type="project:_whiteBoardPanelRecord" >
+</xs:element>
+  <xs:complexType name="_whiteBoardPanelRecord" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="validText" type="project:validText" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ A editfieldText with the possibility of a dropdown menu </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="validText" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:edittext">
+      <xs:attribute name="validate_method" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The method to be called for validating </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="typetime" type="lzx:number" default="500" >
+</xs:attribute>
+      <xs:attribute name="timerIsInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="timerDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="spacing" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="shownitems" type="lzx:number" default="7" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ items to be shown in the floatinglist </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resultName" type="xs:string" default="name" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the name-attribute of the resultset </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resultId" type="xs:string" default="id" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the id-attribute of the resultset </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onselect" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onisopen" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="isopen" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="initSelect" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentValue" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="bordersize" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The border size ( in pixels ) of the popup list.  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="autoscrollbar" type="xs:string" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Whether a scrollbar should automatically show up when there are more
+              items than shownitems. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="attachoffset" type="lzx:number" default="-1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The vertical offset of the floatinglist attached to this
+              combobox. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawAreaAlterPosition" type="project:drawAreaAlterPosition" >
+</xs:element>
+  <xs:complexType name="drawAreaAlterPosition" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="objName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="obj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calendarDayView" type="project:calendarDayView" >
+</xs:element>
+  <xs:complexType name="calendarDayView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="clickBox" type="project:clickBox" >
+</xs:element>
+  <xs:complexType name="clickBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="onvalue" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isupdateCheck" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="initval" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorSlider" type="project:colorSlider" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      changed by swagner
+  </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="colorSlider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:slider">
+      <xs:attribute name="doSendValueEvent" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+      changed by swagner
+  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="newWhiteBoard" type="project:newWhiteBoard" >
+</xs:element>
+  <xs:complexType name="newWhiteBoard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sendObjectToClientID" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="sendObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="room" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="parentPath" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="onsharedMessage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="objectRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="moduleName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isloadingImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="isloadedImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initW" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initH" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="imagey" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="iamgex" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="downloadurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="documentmenuIsInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="confirmdialog" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="baseurl" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="vsliderTrack" type="project:vsliderTrack" >
+</xs:element>
+  <xs:complexType name="vsliderTrack" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="netRemoteCallHib" type="project:netRemoteCallHib" >
+</xs:element>
+  <xs:complexType name="netRemoteCallHib" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:netremotecall">
+      <xs:attribute name="showLoading" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ show Error Messages with normal Box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="sendCallBack" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="returnObj" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ this should be the contentSaveWindow </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="registerObject" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if true this object will register at the update-observer </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isCallBackHandler" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ show Error Messages with Callback Box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="activeErrorHandler" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ show Error Messages with normal Box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="omlegenditem" type="project:omlegenditem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+    individual legend item </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="omlegenditem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tBox" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="linevisible" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="identifier" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ @keyword private
+    individual legend item </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawArrowWhiteBoard" type="project:drawArrowWhiteBoard" >
+</xs:element>
+  <xs:complexType name="drawArrowWhiteBoard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="customScrollEdittext" type="project:customScrollEdittext" >
+</xs:element>
+  <xs:complexType name="customScrollEdittext" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="ontextChange" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="styleableInput" type="project:styleableInput" >
+</xs:element>
+  <xs:complexType name="styleableInput" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:customInputtext">
+      <xs:attribute name="startAdjustHight" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="setFocusOnInit" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewRoomSidebar" type="project:interviewRoomSidebar" >
+</xs:element>
+  <xs:complexType name="interviewRoomSidebar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="restricted" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="listType" type="xs:string" default="eventUserListTable" >
+</xs:attribute>
+      <xs:attribute name="isOpen" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawPointer" type="project:baseDrawPointer" >
+</xs:element>
+  <xs:complexType name="baseDrawPointer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawEllipse">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chartFileExplorerItem" type="project:chartFileExplorerItem" >
+</xs:element>
+  <xs:complexType name="chartFileExplorerItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseFileExplorerItem">
+      <xs:attribute name="isChartFile" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="gridsliderlayout" type="project:gridsliderlayout" >
+</xs:element>
+  <xs:complexType name="gridsliderlayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="spacing" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="rows" type="xs:string" default="6" >
+</xs:attribute>
+      <xs:attribute name="positiondel" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="openview" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="openrow_only" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="openrow" type="xs:string" default="-1" >
+</xs:attribute>
+      <xs:attribute name="opencol_only" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="opencol" type="xs:string" default="-1" >
+</xs:attribute>
+      <xs:attribute name="onupdatestop" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onupdatestart" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onopenstart" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onclosestart" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="lastsel" type="xs:string" default="${null}" >
+</xs:attribute>
+      <xs:attribute name="duration" type="xs:string" default="300" >
+</xs:attribute>
+      <xs:attribute name="doanimation" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="displayrow" type="xs:string" default="-1" >
+</xs:attribute>
+      <xs:attribute name="displaymode" type="xs:string" default="grid" >
+</xs:attribute>
+      <xs:attribute name="displaycol" type="xs:string" default="-1" >
+</xs:attribute>
+      <xs:attribute name="cw" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="cols" type="xs:string" default="6" >
+</xs:attribute>
+      <xs:attribute name="ch" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="cellwidth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="cellheight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="addedOpenWidth" type="xs:string" default="150" >
+</xs:attribute>
+      <xs:attribute name="addedOpenHeight" type="xs:string" default="170" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseChooseIconView" type="project:baseChooseIconView" >
+</xs:element>
+  <xs:complexType name="baseChooseIconView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="resourceN" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="isselected" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="miniIconSmybolExtraIconsImageMap" type="project:miniIconSmybolExtraIconsImageMap" >
+</xs:element>
+  <xs:complexType name="miniIconSmybolExtraIconsImageMap" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="miniIconsPresenter" type="project:miniIconsPresenter" >
+</xs:element>
+  <xs:complexType name="miniIconsPresenter" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="iconRessourceName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calButton" type="project:calButton" >
+</xs:element>
+  <xs:complexType name="calButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="yadjust" type="lzx:number" default="2" >
+</xs:attribute>
+      <xs:attribute name="rightinset" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="rightcap" type="xs:string" default="oval" >
+</xs:attribute>
+      <xs:attribute name="overRsrcNumber" type="lzx:number" default="2" >
+</xs:attribute>
+      <xs:attribute name="onsafeclick" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="normalRsrcNumber" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="mouseisdown" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="leftinset" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="leftcap" type="xs:string" default="oval" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="keepinitialwidth" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="icon" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="enabled" type="xs:string" default="true" >
+</xs:attribute>
+      <xs:attribute name="downRsrcNumber" type="lzx:number" default="3" >
+</xs:attribute>
+      <xs:attribute name="divider" type="lzx:number" default="3" >
+</xs:attribute>
+      <xs:attribute name="deselectRsrcNumber" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="applied" type="xs:string" default="classroot.leftcap == 'rect'" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawChooseSizeRadioT" type="project:drawChooseSizeRadioT" >
+</xs:element>
+  <xs:complexType name="drawChooseSizeRadioT" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:radiogroup">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="confirmCancelPopup" type="project:confirmCancelPopup" >
+</xs:element>
+  <xs:complexType name="confirmCancelPopup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="makeModal" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="errorlabelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="error" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="boundingBoxAllRotationMarger" type="project:boundingBoxAllRotationMarger" >
+</xs:element>
+  <xs:complexType name="boundingBoxAllRotationMarger" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="dragStarted" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseTabbarButton" type="project:baseTabbarButton" >
+</xs:element>
+  <xs:complexType name="baseTabbarButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="restrictedRoomSidebar" type="project:restrictedRoomSidebar" >
+</xs:element>
+  <xs:complexType name="restrictedRoomSidebar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="restricted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="listType" type="xs:string" default="eventUserListTable" >
+</xs:attribute>
+      <xs:attribute name="isOpen" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="presentationPreview" type="project:presentationPreview" >
+</xs:element>
+  <xs:complexType name="presentationPreview" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="refObjList" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="miniButton" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="documentObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawClipArtWhiteBoard" type="project:drawClipArtWhiteBoard" >
+</xs:element>
+  <xs:complexType name="drawClipArtWhiteBoard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="clipArtEndy" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="clipArtEndx" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="allmeetings" type="project:allmeetings" >
+</xs:element>
+  <xs:complexType name="allmeetings" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentView">
+      <xs:attribute name="refObjItem" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="finishedTabsQuantity" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="clickedButton" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dayname" type="project:dayname" >
+</xs:element>
+  <xs:complexType name="dayname" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="modPanel" type="project:modPanel" >
+</xs:element>
+  <xs:complexType name="modPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fillColorChoose" type="project:fillColorChoose" >
+</xs:element>
+  <xs:complexType name="fillColorChoose" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePropertySelector">
+      <xs:attribute name="selectedColorTransformedString" type="xs:string" default="0xFFFF33" >
+</xs:attribute>
+      <xs:attribute name="selectedColorDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="selectedColor" type="lzx:number" default="0xFFFF33" >
+</xs:attribute>
+      <xs:attribute name="isopen" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="inInitColorSelection" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="colorPickRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="colorIsEnabled" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="regexptip" type="project:regexptip" >
+</xs:element>
+  <xs:complexType name="regexptip" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="regexptext" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fadeDelegate" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleListItem" type="project:simpleListItem" >
+</xs:element>
+  <xs:complexType name="simpleListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="value" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="text" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="selected" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="xmlCrmTooltip" type="project:xmlCrmTooltip" >
+</xs:element>
+  <xs:complexType name="xmlCrmTooltip" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="holder" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="documentFileExplorerItem" type="project:documentFileExplorerItem" >
+</xs:element>
+  <xs:complexType name="documentFileExplorerItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseFileExplorerItem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="verticalMenuIconBarPointer" type="project:verticalMenuIconBarPointer" >
+</xs:element>
+  <xs:complexType name="verticalMenuIconBarPointer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mainToolsPanelItem" type="project:mainToolsPanelItem" >
+</xs:element>
+  <xs:complexType name="mainToolsPanelItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:blueButton">
+      <xs:attribute name="setSelectionToItem" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="modi" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="conferenceContainerTab" type="project:conferenceContainerTab" >
+</xs:element>
+  <xs:complexType name="conferenceContainerTab" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="uploadTapIsInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="membersTapIsInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fadeDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="doBlink" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoContainerAudience" type="project:videoContainerAudience" >
+</xs:element>
+  <xs:complexType name="videoContainerAudience" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="streams" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="modLoaded" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="allUsers" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawDocumentItem" type="project:drawDocumentItem" >
+</xs:element>
+  <xs:complexType name="drawDocumentItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseChooseIcon">
+      <xs:attribute name="modi" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpletimelayout" type="project:simpletimelayout" >
+</xs:element>
+  <xs:complexType name="simpletimelayout" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:layout">
+      <xs:attribute name="viewheight" type="xs:string" default="22" >
+</xs:attribute>
+      <xs:attribute name="enabled" type="xs:string" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatInnerTextBox" type="project:chatInnerTextBox" >
+</xs:element>
+  <xs:complexType name="chatInnerTextBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_chatInnerSmilyIcon" type="project:_chatInnerSmilyIcon" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ private class of emotIconsSelector.class. resource view of chat smily icons. it shows icons and label tooltips.</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="_chatInnerSmilyIcon" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="iconvalue" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="iconlabel" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ private class of emotIconsSelector.class. resource view of chat smily icons. it shows icons and label tooltips.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorRectChoosebase" type="project:colorRectChoosebase" >
+</xs:element>
+  <xs:complexType name="colorRectChoosebase" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="colorchoose" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="loginScreen" type="project:loginScreen" >
+</xs:element>
+  <xs:complexType name="loginScreen" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoObjectAudience" type="project:videoObjectAudience" >
+</xs:element>
+  <xs:complexType name="videoObjectAudience" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseVideoObject">
+      <xs:attribute name="isAssigned" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="hidePropertyView" type="project:hidePropertyView" >
+</xs:element>
+  <xs:complexType name="hidePropertyView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityList" type="project:activityList" >
+</xs:element>
+  <xs:complexType name="activityList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePropertyPanelWhiteboard">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleLabelRoundButton" type="project:simpleLabelRoundButton" >
+</xs:element>
+  <xs:complexType name="simpleLabelRoundButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:roundrectbutton">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="blueButton" type="project:blueButton" >
+</xs:element>
+  <xs:complexType name="blueButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecomponent">
+      <xs:attribute name="y_insetResource" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="x_insetResource" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="width_insetResource" type="lzx:number" default="18" >
+</xs:attribute>
+      <xs:attribute name="resourceItem" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="height_insetResource" type="lzx:number" default="18" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="info_Panel" type="project:info_Panel" >
+</xs:element>
+  <xs:complexType name="info_Panel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basepanel">
+      <xs:attribute name="startDate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="roomtype" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="rooms_id" type="lzx:number" default="$path{ 'rooms_id/@value'}" >
+</xs:attribute>
+      <xs:attribute name="opened" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="isConnectedEvent" type="lzx:boolean" default="$path{ 'isConnectedEvent/@value' }" >
+</xs:attribute>
+      <xs:attribute name="endDate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="dataapply" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="baseUrl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="arrayMeetingMember" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="appointementId" type="lzx:number" default="$path{ 'appointementId/@value' }" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="documentToolsPalette" type="project:documentToolsPalette" >
+</xs:element>
+  <xs:complexType name="documentToolsPalette" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListMessageRequest" type="project:activityListMessageRequest" >
+</xs:element>
+  <xs:complexType name="activityListMessageRequest" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:simplebaseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewVideoBox" type="project:interviewVideoBox" >
+</xs:element>
+  <xs:complexType name="interviewVideoBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="messageObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="interviewPodId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="imageListInnerTableExplorer" type="project:imageListInnerTableExplorer" >
+</xs:element>
+  <xs:complexType name="imageListInnerTableExplorer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dateSelectorWeekNumber" type="project:dateSelectorWeekNumber" >
+</xs:element>
+  <xs:complexType name="dateSelectorWeekNumber" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="weeknumber" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="recordingSaveWin" type="project:recordingSaveWin" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+		Dialog box for recording data.
+		Similar with recordingStartWIn.lzx, but any other class dose not invoke this class.
+		Maybe this class could be deleted.
+	</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="recordingSaveWin" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="recordingsName" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+		Dialog box for recording data.
+		Similar with recordingStartWIn.lzx, but any other class dose not invoke this class.
+		Maybe this class could be deleted.
+	</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatParticipantsInviteMessage" type="project:chatParticipantsInviteMessage" >
+</xs:element>
+  <xs:complexType name="chatParticipantsInviteMessage" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="roomId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="messageObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="conferenceRoomName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListRestrictedRoomAV" type="project:activityListRestrictedRoomAV" >
+</xs:element>
+  <xs:complexType name="activityListRestrictedRoomAV" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labeldTextListItem" type="project:labeldTextListItem" >
+</xs:element>
+  <xs:complexType name="labeldTextListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:textlistitem">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewUserList" type="project:interviewUserList" >
+</xs:element>
+  <xs:complexType name="interviewUserList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="organisation_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="colorArray" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ colors for each user </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="broadCastViewRef" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ holds a references to the videoview which is broadcasting </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="applyDefaultModeration" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="terminareaWeekView" type="project:terminareaWeekView" >
+</xs:element>
+  <xs:complexType name="terminareaWeekView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="terminObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="description" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="calenderObjRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="innerlistViewEventUserListTableWithNames" type="project:innerlistViewEventUserListTableWithNames" >
+</xs:element>
+  <xs:complexType name="innerlistViewEventUserListTableWithNames" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="screenShareCursorObject" type="project:screenShareCursorObject" >
+</xs:element>
+  <xs:complexType name="screenShareCursorObject" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="participantsPanel" type="project:participantsPanel" >
+</xs:element>
+  <xs:complexType name="participantsPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:simpleBaseTabpane">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="redoUndoToolsPanelItem" type="project:redoUndoToolsPanelItem" >
+</xs:element>
+  <xs:complexType name="redoUndoToolsPanelItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:mainToolsPanelItem">
+      <xs:attribute name="doredo" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="tempTextBox" type="project:tempTextBox" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	Contains no microphone or camera Object, this view can only 
+	subscribe to a video or live-stream
+
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="tempTextBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="isStopped" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	Contains no microphone or camera Object, this view can only 
+	subscribe to a video or live-stream
+
+ </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="responseForModeration" type="project:responseForModeration" >
+</xs:element>
+  <xs:complexType name="responseForModeration" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="userobject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="userautoTimerDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="userautoTimerCounter" type="lzx:number" default="31" >
+</xs:attribute>
+      <xs:attribute name="clientId" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="applymessage" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dragView" type="project:dragView" >
+</xs:element>
+  <xs:complexType name="dragView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="uploadmodul" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="startY" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="startX" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="room" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="parentPath" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="moduleName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="filesid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="filename" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="baseurl" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="roomModeratorsRoomClientListItem" type="project:roomModeratorsRoomClientListItem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ list of ddefault moderators rooms </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="roomModeratorsRoomClientListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentListItem">
+      <xs:attribute name="userId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="uName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomModeratorsId" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ list of ddefault moderators rooms </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="modRoomId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="isSuperModerator" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="email" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatParticipants" type="project:chatParticipants" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ it shows chat participants. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chatParticipants" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ it shows chat participants. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="picture_uri" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="connectedSince" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawRectangleTools" type="project:drawRectangleTools" >
+</xs:element>
+  <xs:complexType name="drawRectangleTools" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="verticalDocumentIconBar" type="project:verticalDocumentIconBar" >
+</xs:element>
+  <xs:complexType name="verticalDocumentIconBar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="recordingsViewer" type="project:recordingsViewer" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	This class shows a play-viewer panel for recording data.
+	When you select and click a recording data from the recording list that is invoked with recordContent.lzx,
+	you can see a big start button on this panel. Then you click it, regording data starts with video/audio panel, 
+	whiteboard panel and files panel.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="recordingsViewer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentView">
+      <xs:attribute name="timerDel" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	This class shows a play-viewer panel for recording data.
+	When you select and click a recording data from the recording list that is invoked with recordContent.lzx,
+	you can see a big start button on this panel. Then you click it, regording data starts with video/audio panel, 
+	whiteboard panel and files panel.
+</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="timeStepSyncing" type="lzx:number" default="500" >
+</xs:attribute>
+      <xs:attribute name="roomobj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="recordingValue" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="initObjectCount" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="downloadUrlWhiteboard" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="currentTime" type="lzx:number" default="-500" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calenderlistitem" type="project:calenderlistitem" >
+</xs:element>
+  <xs:complexType name="calenderlistitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="textAttr" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="terminObjRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fixedWhiteboardPanel" type="project:fixedWhiteboardPanel" >
+</xs:element>
+  <xs:complexType name="fixedWhiteboardPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:conferenceBox">
+      <xs:attribute name="restricted" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseVideoStream" type="project:baseVideoStream" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	extends the Video-View with Streaming functions
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseVideoStream" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseVideoView">
+      <xs:attribute name="streamName" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="soundRefMC" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Reference To the Sound MovieClip
+		@keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="soundRef" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Reference To the Sound Object
+		@keywords final </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onPlayStatus" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onMetaData" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="mode" type="xs:string" default="play" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This value does indicate if this stream play or broadcasts
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="micro" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is a reference to the current microphone, only set if broadcasting
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="delay" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="camera" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is a reference to the current camara, only set if broadcasting
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="bufferTime" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This is the current buffer used, in Live Streaming this MUST be 0
+              @keywords readonly </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="infoTab" type="project:infoTab" >
+</xs:element>
+  <xs:complexType name="infoTab" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basetabelement">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="label" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseTabChatPanel" type="project:baseTabChatPanel" >
+</xs:element>
+  <xs:complexType name="baseTabChatPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePropertyPanel">
+      <xs:attribute name="fadeDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="doBlink" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="copiedTextPopup" type="project:copiedTextPopup" >
+</xs:element>
+  <xs:complexType name="copiedTextPopup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="error" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="restrictedConferenceRoom" type="project:restrictedConferenceRoom" >
+</xs:element>
+  <xs:complexType name="restrictedConferenceRoom" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseConferenceRoom">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dateSelectorWeekNumberHeader" type="project:dateSelectorWeekNumberHeader" >
+</xs:element>
+  <xs:complexType name="dateSelectorWeekNumberHeader" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="labelWeekHeader" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fieldValueForm" type="project:fieldValueForm" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ right block of the LanguageEditor. you can edit the label.</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="fieldValueForm" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentSaveView">
+      <xs:attribute name="sendObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="fieldvalues_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="fieldlanguagesvalues_id" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lzRecordNavigation" type="project:lzRecordNavigation" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	View for recorded contents list.
+	When you select 'Recordings' on the top menu, this class shows the list.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="lzRecordNavigation" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="recordingName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="playSelected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="parentFolderId" type="lzx:number" default="-2" >
+</xs:attribute>
+      <xs:attribute name="isTrashCan" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isOpen" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	View for recorded contents list.
+	When you select 'Recordings' on the top menu, this class shows the list.
+</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="currentTrackGroupName" type="xs:string" default="fileExplorer" >
+</xs:attribute>
+      <xs:attribute name="currentRecording" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="currentDragItem" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="alternateName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="ordnerInhaltHead" type="project:ordnerInhaltHead" >
+</xs:element>
+  <xs:complexType name="ordnerInhaltHead" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="showChatLog" type="project:showChatLog" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+Chat tabpane class. It contains chatOutput-class and catTabBottom-class.
+This is used in the conference.
+</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="showChatLog" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="error" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+Chat tabpane class. It contains chatOutput-class and catTabBottom-class.
+This is used in the conference.
+</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="rssBox" type="project:rssBox" >
+</xs:element>
+  <xs:complexType name="rssBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="filesPanelStrict" type="project:filesPanelStrict" >
+</xs:element>
+  <xs:complexType name="filesPanelStrict" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:conferenceBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="recordingStartWin" type="project:recordingStartWin" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+		Dialog box for recording data.
+		When you click the Recording button on your conference menu, this class shows a dialog box for saving it.
+	</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="recordingStartWin" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="recordingsName" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+		Dialog box for recording data.
+		When you click the Recording button on your conference menu, this class shows a dialog box for saving it.
+	</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="screenSharingDialogContainer" type="project:screenSharingDialogContainer" >
+</xs:element>
+  <xs:complexType name="screenSharingDialogContainer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="toolbarTabList" type="project:toolbarTabList" >
+</xs:element>
+  <xs:complexType name="toolbarTabList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawUlineTools" type="project:drawUlineTools" >
+</xs:element>
+  <xs:complexType name="drawUlineTools" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawPaint" type="project:baseDrawPaint" >
+</xs:element>
+  <xs:complexType name="baseDrawPaint" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDraw">
+      <xs:attribute name="painttrans" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentlayerstroke" type="xs:string" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="currentlayerlineWidth" type="lzx:number" default="2" >
+</xs:attribute>
+      <xs:attribute name="currentlayerOpacity" type="lzx:number" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="searchResultsAddContact" type="project:searchResultsAddContact" >
+</xs:element>
+  <xs:complexType name="searchResultsAddContact" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dtmfButton" type="project:dtmfButton" >
+</xs:element>
+  <xs:complexType name="dtmfButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:button">
+      <xs:attribute name="dtmf" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="confirmationBox" type="project:confirmationBox" >
+</xs:element>
+  <xs:complexType name="confirmationBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="labeliderror" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="doAskAgain" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="callbackRpcErrorDialog" type="project:callbackRpcErrorDialog" >
+</xs:element>
+  <xs:complexType name="callbackRpcErrorDialog" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:errorDialog">
+      <xs:attribute name="callBackObject" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="emotIconsSelector" type="project:emotIconsSelector" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ view to select emoticons. size is 160x140 </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="emotIconsSelector" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:closableView">
+      <xs:attribute name="btnRef" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ view to select emoticons. size is 160x140 </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="colorpicker" type="project:colorpicker" >
+</xs:element>
+  <xs:complexType name="colorpicker" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="selectedColor" type="lzx:number" default="0x00aeef" >
+</xs:attribute>
+      <xs:attribute name="btnRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dateField" type="project:dateField" >
+</xs:element>
+  <xs:complexType name="dateField" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="text" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="setDefaultToday" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="enabled" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="additionalDay" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelRadioButton" type="project:labelRadioButton" >
+</xs:element>
+  <xs:complexType name="labelRadioButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:radiobutton">
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="imageFileExplorerItem" type="project:imageFileExplorerItem" >
+</xs:element>
+  <xs:complexType name="imageFileExplorerItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseFileExplorerItem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="whiteBoard" type="project:whiteBoard" >
+</xs:element>
+  <xs:complexType name="whiteBoard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sendObjectToClientID" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="sendObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="room" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="parentPath" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="onsharedMessage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="moduleName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isloadingImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="isloadedImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initW" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initH" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="imagey" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="iamgex" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="downloadurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="documentmenuIsInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="confirmdialog" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="baseurl" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="confirmationSingle" type="project:confirmationSingle" >
+</xs:element>
+  <xs:complexType name="confirmationSingle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="showCheckBox" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="refReturnMethod" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="labeliderror" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="changeWidthSliderWin" type="project:changeWidthSliderWin" >
+</xs:element>
+  <xs:complexType name="changeWidthSliderWin" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:closableView">
+      <xs:attribute name="maxvalue" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="initialNumber" type="lzx:number" default="3" >
+</xs:attribute>
+      <xs:attribute name="btnRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mainToolsLeftPanelPointer" type="project:mainToolsLeftPanelPointer" >
+</xs:element>
+  <xs:complexType name="mainToolsLeftPanelPointer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseLeftPanel">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawWords" type="project:baseDrawWords" >
+</xs:element>
+  <xs:complexType name="baseDrawWords" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="inittext" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="initTextName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="winni" type="project:winni" >
+</xs:element>
+  <xs:complexType name="winni" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:window">
+      <xs:attribute name="roomobj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListRestrictedRoomApplyForMuteOn" type="project:activityListRestrictedRoomApplyForMuteOn" >
+</xs:element>
+  <xs:complexType name="activityListRestrictedRoomApplyForMuteOn" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoObjectPlayTestBroadcast" type="project:videoObjectPlayTestBroadcast" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	contains microphone and camera for broadcasting,
+	this class is used only in Meetings-Modus
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="videoObjectPlayTestBroadcast" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawLetterTools" type="project:drawLetterTools" >
+</xs:element>
+  <xs:complexType name="drawLetterTools" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="innerList" type="project:innerList" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ private class for turnOverList only. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="innerList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="changeDevice" type="project:changeDevice" >
+</xs:element>
+  <xs:complexType name="changeDevice" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="myalert" type="project:myalert" >
+</xs:element>
+  <xs:complexType name="myalert" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:alert">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoUserProfilePic" type="project:videoUserProfilePic" >
+</xs:element>
+  <xs:complexType name="videoUserProfilePic" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="value" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fieldValuesListItem" type="project:fieldValuesListItem" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This class shows label-ID,label name, value.</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="fieldValuesListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentListItem">
+      <xs:attribute name="fieldvalues_id" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ This class shows label-ID,label name, value.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="fieldvalue" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fieldname" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="createPollWin" type="project:createPollWin" >
+</xs:element>
+  <xs:complexType name="createPollWin" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="polltypesid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="pollquestion" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="pollname" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="borderedPasswordText" type="project:borderedPasswordText" >
+</xs:element>
+  <xs:complexType name="borderedPasswordText" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tvalue" type="xs:string" default="default" >
+</xs:attribute>
+      <xs:attribute name="sendchange" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="multiline" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="maxlength" type="lzx:number" default="null" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="editable" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="checkIsNumber" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="checkIsDouble" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="errorModeratorPopup" type="project:errorModeratorPopup" >
+</xs:element>
+  <xs:complexType name="errorModeratorPopup" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="error" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="openmeetingsTabButton" type="project:openmeetingsTabButton" >
+</xs:element>
+  <xs:complexType name="openmeetingsTabButton" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:roundRectGradient">
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="iconresourcename" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fixedWhiteBoard" type="project:fixedWhiteBoard" >
+</xs:element>
+  <xs:complexType name="fixedWhiteBoard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="timeisInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="sendUpdate" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="sendObjectToClientID" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="sendObjectDel" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="sendObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="room" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="restricted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="parentPath" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="onsharedMessage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="objectRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="moduleName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isloadingImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="isloadedImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initW" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initH" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="imagey" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="ignoreUpdates" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="iamgex" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="downloadurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="documentmenuIsInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="confirmdialog" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="baseurl" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="basicturnoverlistheaderitem" type="project:basicturnoverlistheaderitem" >
+</xs:element>
+  <xs:complexType name="basicturnoverlistheaderitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:simpleLabelButton">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseListPresentationItem" type="project:baseListPresentationItem" >
+</xs:element>
+  <xs:complexType name="baseListPresentationItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="uploadmoduleimgfolder" type="xs:string" default="$once{ canvas.uploadmoduleimgfolder }" >
+</xs:attribute>
+      <xs:attribute name="uploadmodul" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="selectable" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isselected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isoriginal" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="viewUserProfile" type="project:viewUserProfile" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ User Profile Setting Panel </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="viewUserProfile" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="userObject" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ User Profile Setting Panel </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listOfUsers" type="project:listOfUsers" >
+</xs:element>
+  <xs:complexType name="listOfUsers" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="subitemsListItem" type="project:subitemsListItem" >
+</xs:element>
+  <xs:complexType name="subitemsListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="textvalue" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="selected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="list" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isopen" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isleaf" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="action" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="eventUserListTableWithNames" type="project:eventUserListTableWithNames" >
+</xs:element>
+  <xs:complexType name="eventUserListTableWithNames" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="horizontalDocumentIconBar" type="project:horizontalDocumentIconBar" >
+</xs:element>
+  <xs:complexType name="horizontalDocumentIconBar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sendSelection" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="multiWhiteBoard" type="project:multiWhiteBoard" >
+</xs:element>
+  <xs:complexType name="multiWhiteBoard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sendObjectToClientID" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="sendObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="room" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="parentPath" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="onsharedMessage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="objectRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="moduleName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isloadingImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="isloadedImage" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initW" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="initH" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="imagey" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="iamgex" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="downloadurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="documentmenuIsInited" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="confirmdialog" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="baseurl" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="headerMenu" type="project:headerMenu" >
+</xs:element>
+  <xs:complexType name="headerMenu" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="sharingFrame" type="project:sharingFrame" >
+</xs:element>
+  <xs:complexType name="sharingFrame" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sharingStarted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="initSrc" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="bufferIndex" type="lzx:number" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawChooseModir" type="project:drawChooseModir" >
+</xs:element>
+  <xs:complexType name="drawChooseModir" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseChooseIcon">
+      <xs:attribute name="modi" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isSelectablemodi" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listPpt" type="project:listPpt" >
+</xs:element>
+  <xs:complexType name="listPpt" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="uploadmodul" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isPpt" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="filenamePure" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="filename" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="ext" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chooseDrawAreaObjectCombobox" type="project:chooseDrawAreaObjectCombobox" >
+</xs:element>
+  <xs:complexType name="chooseDrawAreaObjectCombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:basecombobox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="listV" type="xs:string" default="${ this.parent.listV }" >
+</xs:attribute>
+      <xs:attribute name="ObjectByName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="whiteBoardPointer" type="project:whiteBoardPointer" >
+</xs:element>
+  <xs:complexType name="whiteBoardPointer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="userName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fadeDelegate" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dateSelector" type="project:dateSelector" >
+</xs:element>
+  <xs:complexType name="dateSelector" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDateSelector">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="documentMenu" type="project:documentMenu" >
+</xs:element>
+  <xs:complexType name="documentMenu" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseToolbarMenu">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="myView" type="project:myView" >
+</xs:element>
+  <xs:complexType name="myView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:drawview">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawLetter" type="project:baseDrawLetter" >
+</xs:element>
+  <xs:complexType name="baseDrawLetter" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawObject">
+      <xs:attribute name="letterObjectIsActive" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="italic" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="edittextLetterObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="edittextLetter" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentletterObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="currentlayerstyle" type="xs:string" default="plain" >
+</xs:attribute>
+      <xs:attribute name="currentlayersize" type="lzx:number" default="12" >
+</xs:attribute>
+      <xs:attribute name="currentlayerletter" type="xs:string" default="0x000000" >
+</xs:attribute>
+      <xs:attribute name="bold" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_labelMenuItem" type="project:_labelMenuItem" >
+</xs:element>
+  <xs:complexType name="_labelMenuItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:menuitem">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="userItem" type="project:userItem" >
+</xs:element>
+  <xs:complexType name="userItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="streamid" type="xs:string" default="0" >
+</xs:attribute>
+      <xs:attribute name="hasAnswered" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="answer" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="vslider" type="project:vslider" >
+</xs:element>
+  <xs:complexType name="vslider" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="switchaxis" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ switchaxis true means minimum-value is 
+            t op maximum is bottom false turns around </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showvalue" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ showvalue should the slider show the numbers of min/max </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="showrange" type="lzx:boolean" default="true" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Showrange should the slidertrack be with color while 'sliding' </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minvalue" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Minimum Value </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="maxvalue" type="lzx:number" default="100" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Maximum Value </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="initvalue" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawLine" type="project:baseDrawLine" >
+</xs:element>
+  <xs:complexType name="baseDrawLine" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawPaint">
+      <xs:attribute name="currentlinestroke" type="xs:string" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="currentlinelineWidth" type="lzx:number" default="2" >
+</xs:attribute>
+      <xs:attribute name="currentlineOpacity" type="lzx:number" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="eventUserListItem" type="project:eventUserListItem" >
+</xs:element>
+  <xs:complexType name="eventUserListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="withNames" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="userroom" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="streamid" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="maxWidth" type="lzx:number" default="82" >
+</xs:attribute>
+      <xs:attribute name="maxHeight" type="lzx:number" default="72" >
+</xs:attribute>
+      <xs:attribute name="lastname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isSuperModerator" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isSelected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMod" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="initWidth" type="lzx:number" default="42" >
+</xs:attribute>
+      <xs:attribute name="formatedDate" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="firstname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="connectedSince" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="whiteBoardTextField" type="project:whiteBoardTextField" >
+</xs:element>
+  <xs:complexType name="whiteBoardTextField" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="typeOfObject" type="xs:string" default="text" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mainToolsVPanelSeperator" type="project:mainToolsVPanelSeperator" >
+</xs:element>
+  <xs:complexType name="mainToolsVPanelSeperator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="participentList" type="project:participentList" >
+</xs:element>
+  <xs:complexType name="participentList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sortType" type="xs:string" default="alphabetical" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="searchContactInCalendar" type="project:searchContactInCalendar" >
+</xs:element>
+  <xs:complexType name="searchContactInCalendar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="userId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="nachname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="meetingMemberId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="email" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="moderationMiniIconRestricted" type="project:moderationMiniIconRestricted" >
+</xs:element>
+  <xs:complexType name="moderationMiniIconRestricted" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isSuperModerator" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMod" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isActive" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_recorderProgressBar" type="project:_recorderProgressBar" >
+</xs:element>
+  <xs:complexType name="_recorderProgressBar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="_videoBoardStreamEvent" type="project:_videoBoardStreamEvent" >
+</xs:element>
+  <xs:complexType name="_videoBoardStreamEvent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="labelText" type="project:labelText" >
+</xs:element>
+  <xs:complexType name="labelText" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="roomListDetails" type="project:roomListDetails" >
+</xs:element>
+  <xs:complexType name="roomListDetails" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="roomname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="roomcomment" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="currentusers" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="errorDialog" type="project:errorDialog" >
+</xs:element>
+  <xs:complexType name="errorDialog" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseErrorDialog">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="confirmDeleteWindow" type="project:confirmDeleteWindow" >
+</xs:element>
+  <xs:complexType name="confirmDeleteWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="messagelabelid" type="lzx:number" default="153" >
+</xs:attribute>
+      <xs:attribute name="confirmlabelid" type="lzx:number" default="154" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="restrictedUserListInner" type="project:restrictedUserListInner" >
+</xs:element>
+  <xs:complexType name="restrictedUserListInner" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseRoomInnerList">
+      <xs:attribute name="sortType" type="xs:string" default="alphabetical" >
+</xs:attribute>
+      <xs:attribute name="selectedItem" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="resizeDelegateStarted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="resizeDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="renderDelegateStarted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="renderDelegate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="listType" type="xs:string" default="eventUserListTable" >
+</xs:attribute>
+      <xs:attribute name="isLoaded" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentSelectedIndex" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="searchResultsContact" type="project:searchResultsContact" >
+</xs:element>
+  <xs:complexType name="searchResultsContact" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="bigTextListItem" type="project:bigTextListItem" >
+</xs:element>
+  <xs:complexType name="bigTextListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:textlistitem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewUserListItem" type="project:interviewUserListItem" >
+</xs:element>
+  <xs:complexType name="interviewUserListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="userroom" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="streamid" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="lastname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isSuperModerator" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isSelected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMod" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="formatedDate" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="firstname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="connectedSince" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseVideoView" type="project:baseVideoView" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ 
+	This class provides the basic functions for the video-output
+	
+	    @START_CODE
+            &lt;baseVideoView x="20" y="20" width="320" height="240" bgcolor="black" /&gt;
+        @END_CODE	
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseVideoView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="weekView" type="project:weekView" >
+</xs:element>
+  <xs:complexType name="weekView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="dayNamesLabelIds" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="dayLabelNamesLabelIds" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="myScheduledMeetings" type="project:myScheduledMeetings" >
+</xs:element>
+  <xs:complexType name="myScheduledMeetings" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentView">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatParticipantsInviteNotification" type="project:chatParticipantsInviteNotification" >
+</xs:element>
+  <xs:complexType name="chatParticipantsInviteNotification" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="usermessage" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="messageObject" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="conferenceRoomName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dateSelectorWeek" type="project:dateSelectorWeek" >
+</xs:element>
+  <xs:complexType name="dateSelectorWeek" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDateSelectorComponent">
+      <xs:attribute name="firstweekddaydate" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawSimpleClick" type="project:drawSimpleClick" >
+</xs:element>
+  <xs:complexType name="drawSimpleClick" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseChooseIcon">
+      <xs:attribute name="modi" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="advancedRoomSettings" type="project:advancedRoomSettings" >
+</xs:element>
+  <xs:complexType name="advancedRoomSettings" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="uploadTab" type="project:uploadTab" >
+</xs:element>
+  <xs:complexType name="uploadTab" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:simpleBaseTabpane">
+      <xs:attribute name="sortOrder" type="xs:string" default="file" >
+</xs:attribute>
+      <xs:attribute name="preButton" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="currentFilesValue" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="ascFile" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="ascDate" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDateSelectorComponent" type="project:baseDateSelectorComponent" >
+</xs:element>
+  <xs:complexType name="baseDateSelectorComponent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="weekclass" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="showingdate" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="showcalenderweek" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="showcalendermonth" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="monthclass" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="daynumbers" type="xs:string" default="[0,1,2,3,4,5,6]" >
+</xs:attribute>
+      <xs:attribute name="dayclass" type="xs:string" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleValueList" type="project:simpleValueList" >
+</xs:element>
+  <xs:complexType name="simpleValueList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="onselect" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="multiselect" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="itemclassname" type="xs:string" default="simpleListItem" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simplebasetabpane" type="project:simplebasetabpane" >
+</xs:element>
+  <xs:complexType name="simplebasetabpane" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseLeftPanel" type="project:baseLeftPanel" >
+</xs:element>
+  <xs:complexType name="baseLeftPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseBoundingBorderView">
+      <xs:attribute name="title" type="xs:string" default="basePanel" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Title of this window </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="closable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if this Box should be closeable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="imageForDrawView" type="project:imageForDrawView" >
+</xs:element>
+  <xs:complexType name="imageForDrawView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:image">
+      <xs:attribute name="uniqueObjectSyncName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="typeOfObject" type="xs:string" default="image" >
+</xs:attribute>
+      <xs:attribute name="room" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="remotewidth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="remoteheight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="recorderModus" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="parentPath" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="moduleName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isLocalSync" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fileName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="downloadurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="domain" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="baseurl" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="alterModus" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dynamicCombobox" type="project:dynamicCombobox" >
+</xs:element>
+  <xs:complexType name="dynamicCombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:baseformitem">
+      <xs:attribute name="onselect" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="isCountryCombobox" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="propertyPanel" type="project:propertyPanel" >
+</xs:element>
+  <xs:complexType name="propertyPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePropertyPanel">
+      <xs:attribute name="sendSelection" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="ignoreUpdates" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawArrow" type="project:baseDrawArrow" >
+</xs:element>
+  <xs:complexType name="baseDrawArrow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawULine">
+      <xs:attribute name="currentdrawarrowlinestrokeFillDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currentdrawarrowlinestrokeFill" type="xs:string" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="currentdrawarrowlinestrokeDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currentdrawarrowlinestroke" type="xs:string" default="0x000000" >
+</xs:attribute>
+      <xs:attribute name="currentdrawarrowlinelineWidth" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="currentdrawarrowOpacity" type="lzx:number" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawObject" type="project:baseDrawObject" >
+</xs:element>
+  <xs:complexType name="baseDrawObject" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawPointer">
+      <xs:attribute name="newSlideNumber" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="modernToolbar" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fullFit" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseContentView" type="project:baseContentView" >
+</xs:element>
+  <xs:complexType name="baseContentView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="sendInit" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="ontabcontentleave" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="destroyByMethod" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="innerlistViewEventUserListTable" type="project:innerlistViewEventUserListTable" >
+</xs:element>
+  <xs:complexType name="innerlistViewEventUserListTable" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="terminarea" type="project:terminarea" >
+</xs:element>
+  <xs:complexType name="terminarea" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="terminObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isActive" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="calenderObjRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="arrayMeetingMember" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calendar_day" type="project:calendar_day" >
+</xs:element>
+  <xs:complexType name="calendar_day" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="year" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="startdate" type="xs:string" default="1" >
+</xs:attribute>
+      <xs:attribute name="pixels_per_hour" type="xs:string" default="22" >
+</xs:attribute>
+      <xs:attribute name="opened" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="newYear" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="newMonth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="newDay" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="month" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="eventwidth" type="xs:string" default="${details.bgrect.width - ( this.opened ? 38 : 0 )}" >
+</xs:attribute>
+      <xs:attribute name="enddate" type="xs:string" default="1" >
+</xs:attribute>
+      <xs:attribute name="dayOfMonth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="asyncNew" type="xs:string" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="inviteMainWindow" type="project:inviteMainWindow" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+		This class shows a invitation window with clicking button which is located in video and audio panel.
+	</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="inviteMainWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="roomType" type="xs:string" default="conference" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+		This class shows a invitation window with clicking button which is located in video and audio panel.
+	</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="baseUrl" type="xs:string" default="http://www.denic.de" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="resultPieCharPoll" type="project:resultPieCharPoll" >
+</xs:element>
+  <xs:complexType name="resultPieCharPoll" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:ompiechart">
+      <xs:attribute name="yseries" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="xseries" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="tooltipseries" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseItemActivityList" type="project:baseItemActivityList" >
+</xs:element>
+  <xs:complexType name="baseItemActivityList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="tStamp" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="rcl" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="message" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="labelidToolTipOkButton" type="lzx:number" default="1360" >
+</xs:attribute>
+      <xs:attribute name="labelidToolTipDenyButton" type="lzx:number" default="1361" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoContainer" type="project:videoContainer" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+        Container view including all audio/video - views for a Meeting
+        
+        @keywords deprecated see participents.lzx
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="videoContainer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="colorArray" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ colors for each user </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="broadCastViewRef" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ holds a references to the videoview which is broadcasting </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="roomListItem" type="project:roomListItem" >
+</xs:element>
+  <xs:complexType name="roomListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="starttime" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomid" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="roomcomment" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="roomType" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="roomClassName" type="xs:string" default="conferenceView" >
+</xs:attribute>
+      <xs:attribute name="obj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="maxUsers" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="ispublic" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isaudience" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="currentusers" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="checkForMaxUsers" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="sipLoader" type="project:sipLoader" >
+</xs:element>
+  <xs:complexType name="sipLoader" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="countryCombobox" type="project:countryCombobox" >
+</xs:element>
+  <xs:complexType name="countryCombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:resetCombobox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="doUpdate" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="audienceView" type="project:audienceView" >
+</xs:element>
+  <xs:complexType name="audienceView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentView">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseContentSaveView" type="project:baseContentSaveView" >
+</xs:element>
+  <xs:complexType name="baseContentSaveView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentView">
+      <xs:attribute name="saveIsVisible" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="refreshIsVisible" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="onreload" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="onnew" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="ondelete" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="observerViews" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="deleteIsVisible" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="confirmMessageLabelId" type="lzx:number" default="661" >
+</xs:attribute>
+      <xs:attribute name="addIsVisible" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="conferenceBox" type="project:conferenceBox" >
+</xs:element>
+  <xs:complexType name="conferenceBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="textInset" type="lzx:number" default="10" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" >
+</xs:attribute>
+      <xs:attribute name="isopen" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="initHeight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="headerText" type="xs:string" default="Users" >
+</xs:attribute>
+      <xs:attribute name="closedHeight" type="lzx:number" default="40" >
+</xs:attribute>
+      <xs:attribute name="closeable" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewListTable" type="project:interviewListTable" >
+</xs:element>
+  <xs:complexType name="interviewListTable" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calendarWindow" type="project:calendarWindow" >
+</xs:element>
+  <xs:complexType name="calendarWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="fieldRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="horizontalMenuIconBar" type="project:horizontalMenuIconBar" >
+</xs:element>
+  <xs:complexType name="horizontalMenuIconBar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="modi" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="recordListItem" type="project:recordListItem" >
+</xs:element>
+  <xs:complexType name="recordListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentListItem">
+      <xs:attribute name="valueName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="value" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawTriangle" type="project:baseDrawTriangle" >
+</xs:element>
+  <xs:complexType name="baseDrawTriangle" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawClipArt">
+      <xs:attribute name="currenttrianglestrokeFillDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currenttrianglestrokeFill" type="xs:string" default="0xFFFF33" >
+</xs:attribute>
+      <xs:attribute name="currenttrianglestrokeDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currenttrianglestroke" type="xs:string" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="currenttriangleineWidth" type="lzx:number" default="4" >
+</xs:attribute>
+      <xs:attribute name="currenttriangleOpacity" type="lzx:number" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="explorerBox" type="project:explorerBox" >
+</xs:element>
+  <xs:complexType name="explorerBox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="title" type="xs:string" default="defaulttitle" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ The Title of this Box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="resizeable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if this Box should be resizeable  </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onclose" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the Event will be thrown if you close the Box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="dockingbarrier" type="lzx:number" default="15" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Hard to explain but its clear if you play around 
+		with that. Its the number of minimum pixels before 
+		the "docking" effect will be there </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="docking" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Can this Box be docked to others and 
+			the width/height of parent compoent barrier </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="closable" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ if this Box should be closeable </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="documentPanelVPanelSeperator" type="project:documentPanelVPanelSeperator" >
+</xs:element>
+  <xs:complexType name="documentPanelVPanelSeperator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="viewUserProfileWindow" type="project:viewUserProfileWindow" >
+</xs:element>
+  <xs:complexType name="viewUserProfileWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="userId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="syncWin" type="project:syncWin" >
+</xs:element>
+  <xs:complexType name="syncWin" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelText">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="labeliderror" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="simpleBaseTabpane" type="project:simpleBaseTabpane" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Tabpane. it used by chat. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="simpleBaseTabpane" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listPresentationFilePDFExplorer" type="project:listPresentationFilePDFExplorer" >
+</xs:element>
+  <xs:complexType name="listPresentationFilePDFExplorer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseListPresentationItemExplorer">
+      <xs:attribute name="swfName" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="pdfname" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calendarMonthView" type="project:calendarMonthView" >
+</xs:element>
+  <xs:complexType name="calendarMonthView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="fullDate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="daydate" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="countsubwievs" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="miniIconSmybolExtraIconsSeparator" type="project:miniIconSmybolExtraIconsSeparator" >
+</xs:element>
+  <xs:complexType name="miniIconSmybolExtraIconsSeparator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="title" type="xs:string" default="title" >
+</xs:attribute>
+      <xs:attribute name="isopen" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="restrictedConferenceMenubar" type="project:restrictedConferenceMenubar" >
+</xs:element>
+  <xs:complexType name="restrictedConferenceMenubar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:menubar">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="autoloaderBarOnly" type="project:autoloaderBarOnly" >
+</xs:element>
+  <xs:complexType name="autoloaderBarOnly" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="step" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="start" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="maxwidth" type="lzx:number" default="100" >
+</xs:attribute>
+      <xs:attribute name="maxsteps" type="lzx:number" default="19" >
+</xs:attribute>
+      <xs:attribute name="max" type="lzx:number" default="1300" >
+</xs:attribute>
+      <xs:attribute name="currentsteps" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="documentIconTopPanel" type="project:documentIconTopPanel" >
+</xs:element>
+  <xs:complexType name="documentIconTopPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseTopPanel">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="commonVideoViewContent" type="project:commonVideoViewContent" >
+</xs:element>
+  <xs:complexType name="commonVideoViewContent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="restrictedUserListItem" type="project:restrictedUserListItem" >
+</xs:element>
+  <xs:complexType name="restrictedUserListItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePagingListItem">
+      <xs:attribute name="userroom" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="userpicView" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="userpicURL" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="username" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="user_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="streamid" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="selfItem" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="micMuted" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="lastname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isSuperModerator" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMod" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isBroadcasting" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="formatedDate" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="firstname" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="connectedSince" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="canShare" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="canRemote" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="canDraw" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="folderFileExplorerItem" type="project:folderFileExplorerItem" >
+</xs:element>
+  <xs:complexType name="folderFileExplorerItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseFileExplorerItem">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="iconView" type="project:iconView" >
+</xs:element>
+  <xs:complexType name="iconView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="enabled" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="enterExternMember" type="project:enterExternMember" >
+</xs:element>
+  <xs:complexType name="enterExternMember" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="interviewVideoChooseUser" type="project:interviewVideoChooseUser" >
+</xs:element>
+  <xs:complexType name="interviewVideoChooseUser" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:guiPresenter">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoEventContainerStream" type="project:videoEventContainerStream" >
+</xs:element>
+  <xs:complexType name="videoEventContainerStream" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseVideoObject" type="project:baseVideoObject" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	Base container for a client, can be either:
+	a remote-video (subscribing/playing a video)
+	or a self-video (broadcasting a cam/mic)
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="baseVideoObject" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="usercolor" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ color of this user, this is the color the user will also use for his chat-color </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="respectRatio" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="publicSID" type="xs:string" default="" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ publicSID is a hash-value to identify a user </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="minimized" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="micMuted" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ micMuted indicates if the microphone is currently turned sound or gain to 0 </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="isload" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="isShowMicMute" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isMutedByModerator" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="initW" type="lzx:number" default="40" >
+</xs:attribute>
+      <xs:attribute name="initH" type="lzx:number" default="40" >
+</xs:attribute>
+      <xs:attribute name="hidebyAudioOnly" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="custom" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="messageWin" type="project:messageWin" >
+</xs:element>
+  <xs:complexType name="messageWin" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="labeliderror" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="conferenceRoomSidebar" type="project:conferenceRoomSidebar" >
+</xs:element>
+  <xs:complexType name="conferenceRoomSidebar" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="selected" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="isOpen" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="ompiechart" type="project:ompiechart" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+          A pie chart represents a chart that is displayed in the 2D
+          polar plane. This class inherits immediately from chart class
+          and can be instantiated directly. (Warning: Of beta quality.)
+          @access public
+          </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="ompiechart" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:chart">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="eventUserList" type="project:eventUserList" >
+</xs:element>
+  <xs:complexType name="eventUserList" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="userNewVideoContainer" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="organisation_id" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="listType" type="xs:string" default="eventUserListTable" >
+</xs:attribute>
+      <xs:attribute name="colorArray" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ colors for each user </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="broadCastViewRef" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ holds a references to the videoview which is broadcasting </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="applyDefaultModeration" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="allowUserQuestions" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="comoboxListItemNoHeaders" type="project:comoboxListItemNoHeaders" >
+</xs:element>
+  <xs:complexType name="comoboxListItemNoHeaders" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePagingListItem">
+      <xs:attribute name="text" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListRestrictedRoomModeration" type="project:activityListRestrictedRoomModeration" >
+</xs:element>
+  <xs:complexType name="activityListRestrictedRoomModeration" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnOverListHeaderItemOrdered" type="project:turnOverListHeaderItemOrdered" >
+</xs:element>
+  <xs:complexType name="turnOverListHeaderItemOrdered" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:turnoverlistheaderitemResize">
+      <xs:attribute name="orderBy" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isSelected" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="asc" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="browserjavascriptcallback" type="project:browserjavascriptcallback" >
+</xs:element>
+  <xs:complexType name="browserjavascriptcallback" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="value" type="xs:string" >
+</xs:attribute>
+      <xs:attribute name="timer" type="lzx:number" default="10" >
+</xs:attribute>
+      <xs:attribute name="prevalue" type="xs:string" default="_browserjavascriptcallbackprevalue" >
+</xs:attribute>
+      <xs:attribute name="lzappId" type="xs:string" default="lzapp" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chooseOrganisationWindow" type="project:chooseOrganisationWindow" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Organization choice modal window when an organization is added to a user.</xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chooseOrganisationWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="item_id" type="lzx:number" default="0" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Organization choice modal window when an organization is added to a user.</xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="documentPanelHPanelSeperator" type="project:documentPanelHPanelSeperator" >
+</xs:element>
+  <xs:complexType name="documentPanelHPanelSeperator" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="lineColorChoose" type="project:lineColorChoose" >
+</xs:element>
+  <xs:complexType name="lineColorChoose" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:basePropertySelector">
+      <xs:attribute name="selectedColorTransformedString" type="xs:string" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="selectedColorDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="selectedColor" type="lzx:number" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="isopen" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="inInitColorSelection" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="colorPickRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="colorIsEnabled" type="lzx:boolean" default="true" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="resetCombobox" type="project:resetCombobox" >
+</xs:element>
+  <xs:complexType name="resetCombobox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:combobox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="recordListitem" type="project:recordListitem" >
+</xs:element>
+  <xs:complexType name="recordListitem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="fileUpload" type="project:fileUpload" >
+</xs:element>
+  <xs:complexType name="fileUpload" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="isOnlyZip" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOnlyXml" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOnlyProfile" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOnlyPpt" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isOnlyImage" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fr" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseBoundingBorderView" type="project:baseBoundingBorderView" >
+</xs:element>
+  <xs:complexType name="baseBoundingBorderView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="verticalClassActive" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="vWidth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="vHeight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="topClassPanel" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="rightClassPanel" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="preclose" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ extra Event for this kind of view
+		will be thrown before the view inits new </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="onclose" type="xs:string" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ the Event will be thrown if you close the Box </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="mousetracker_del" type="xs:string" default="$once{ new LzDelegate(this, 'checkStaticBorders' )}" >
+</xs:attribute>
+      <xs:attribute name="leftClassPanel" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="hasshadow" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="hWidth" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="hHeight" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="dockingbarrier" type="lzx:number" default="15" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Hard to explain but its clear if you play around 
+		with that. Its the number of minimum pixels before 
+		the "docking" effect will be there </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="docking" type="lzx:boolean" default="false" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Can this Box be docked to others and 
+			the width/height of parent compoent barrier </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="currentBoundingBox" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="boundingbarrier" type="lzx:number" default="2" >
+</xs:attribute>
+      <xs:attribute name="bottomClassPanel" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="activationVClassBounding" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="activationClassBounding" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listImageDrag" type="project:listImageDrag" >
+</xs:element>
+  <xs:complexType name="listImageDrag" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="uploadmodul" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isPpt" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="filenamePure" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="filename" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="ext" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="modernWhiteBoardPanel" type="project:modernWhiteBoardPanel" >
+</xs:element>
+  <xs:complexType name="modernWhiteBoardPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:conferenceBox">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="miniIconSmybolExtraIconsContainer" type="project:miniIconSmybolExtraIconsContainer" >
+</xs:element>
+  <xs:complexType name="miniIconSmybolExtraIconsContainer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="toolTipReference" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isopen" type="lzx:boolean" default="true" >
+</xs:attribute>
+      <xs:attribute name="iconList" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="folderName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="fName" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="calcItem" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="contentSaveWindow" type="project:contentSaveWindow" >
+</xs:element>
+  <xs:complexType name="contentSaveWindow" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseErrorDialog">
+      <xs:attribute name="saveObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="processNextIndex" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listPresentationFileOrig" type="project:listPresentationFileOrig" >
+</xs:element>
+  <xs:complexType name="listPresentationFileOrig" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:listPresentationFilePDF">
+      <xs:attribute name="originalName" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="turnOverListPaged" type="project:turnOverListPaged" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ common TurnOverList view class. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="turnOverListPaged" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseturnOverListPaged">
+      <xs:attribute name="sendEventToReload" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="drawDocumentPanelItem" type="project:drawDocumentPanelItem" >
+</xs:element>
+  <xs:complexType name="drawDocumentPanelItem" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:blueButton">
+      <xs:attribute name="modi" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="labelid" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="remoteUserDetails" type="project:remoteUserDetails" >
+</xs:element>
+  <xs:complexType name="remoteUserDetails" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mainToolsTopPanel" type="project:mainToolsTopPanel" >
+</xs:element>
+  <xs:complexType name="mainToolsTopPanel" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseTopPanel">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="flexibleEventRoom" type="project:flexibleEventRoom" >
+</xs:element>
+  <xs:complexType name="flexibleEventRoom" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseConferenceRoom">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="appointmentMembers" type="project:appointmentMembers" >
+</xs:element>
+  <xs:complexType name="appointmentMembers" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="terminObjRef" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="numberOfStart" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="numberOfRecords" type="lzx:number" default="20" >
+</xs:attribute>
+      <xs:attribute name="numberOfMessage" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="conferenceView" type="project:conferenceView" >
+</xs:element>
+  <xs:complexType name="conferenceView" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseContentView">
+      <xs:attribute name="roomobj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="meetingTimer" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listPagedContent" type="project:listPagedContent" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ common TurnOverList view class. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="listPagedContent" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="totalItemsInList" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="showHScrollbar" type="xs:string" default="visible" >
+</xs:attribute>
+      <xs:attribute name="itemsToShow" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="itemHeight" type="lzx:number" default="20" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ common TurnOverList view class. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="currentLastItemInList" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="screenSharingContainer" type="project:screenSharingContainer" >
+</xs:element>
+  <xs:complexType name="screenSharingContainer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawULine" type="project:baseDrawULine" >
+</xs:element>
+  <xs:complexType name="baseDrawULine" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawLine">
+      <xs:attribute name="currentulinestroke" type="xs:string" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="currentulinelineWidth" type="lzx:number" default="20" >
+</xs:attribute>
+      <xs:attribute name="currentulineOpacity" type="lzx:number" default="0.5" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="liste" type="project:liste" >
+</xs:element>
+  <xs:complexType name="liste" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="dynamicFileName" type="project:dynamicFileName" >
+</xs:element>
+  <xs:complexType name="dynamicFileName" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:customInputtext">
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="parentFileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="isOwner" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="isNew" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="fileExplorerItemId" type="lzx:number" default="0" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="calendar_event" type="project:calendar_event" >
+</xs:element>
+  <xs:complexType name="calendar_event" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="startTime" type="xs:string" default="${this.startHour * 60 + Number( this.startMin )}" >
+</xs:attribute>
+      <xs:attribute name="startMin" type="xs:string" default="$path{'start[1]/@minute'}" >
+</xs:attribute>
+      <xs:attribute name="startHour" type="xs:string" default="$path{'start[1]/@hour'}" >
+</xs:attribute>
+      <xs:attribute name="selected" type="xs:string" default="$path{'@selected'}" >
+</xs:attribute>
+      <xs:attribute name="pixelPerMin" type="lzx:number" default="22/60" >
+</xs:attribute>
+      <xs:attribute name="normalColor" type="lzx:color" default="${this.getEventColor( this.category )}" >
+</xs:attribute>
+      <xs:attribute name="mouseIsDown" type="xs:string" default="false" >
+</xs:attribute>
+      <xs:attribute name="hiColor" type="lzx:color" default="0xDDDDDD" >
+</xs:attribute>
+      <xs:attribute name="endTime" type="xs:string" default="${this.endHour * 60 + Number( this.endMin )}" >
+</xs:attribute>
+      <xs:attribute name="endMin" type="xs:string" default="$path{'end[1]/@minute'}" >
+</xs:attribute>
+      <xs:attribute name="endHour" type="xs:string" default="$path{'end[1]/@hour'}" >
+</xs:attribute>
+      <xs:attribute name="defaultTimes" type="xs:string" default="{startHour: 0, startMin: 0, endHour: 0, endMin: 0}" >
+</xs:attribute>
+      <xs:attribute name="category" type="xs:string" default="$path{'category[1]/@value'}" >
+</xs:attribute>
+      <xs:attribute name="bkgndColor" type="lzx:color" default="0x5D84CB" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="addLanguage" type="project:addLanguage" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Popup view to input a new language name to be added. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="addLanguage" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:labelExplorerBox">
+      <xs:attribute name="tempValue" type="lzx:number" default="0" >
+</xs:attribute>
+      <xs:attribute name="refObj" type="xs:string" default="null" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ Popup view to input a new language name to be added. </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="activityListRestrictedRoomWhiteboard" type="project:activityListRestrictedRoomWhiteboard" >
+</xs:element>
+  <xs:complexType name="activityListRestrictedRoomWhiteboard" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseItemActivityList">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="subitemsListContainter" type="project:subitemsListContainter" >
+</xs:element>
+  <xs:complexType name="subitemsListContainter" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="updatecheckbox" type="project:updatecheckbox" >
+</xs:element>
+  <xs:complexType name="updatecheckbox" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:checkbox">
+      <xs:attribute name="tvalue" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="sendchange" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="changeWidthLetterSliderWin" type="project:changeWidthLetterSliderWin" >
+</xs:element>
+  <xs:complexType name="changeWidthLetterSliderWin" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:closableViewLetter">
+      <xs:attribute name="initialNumber" type="lzx:number" default="12" >
+</xs:attribute>
+      <xs:attribute name="btnRef" type="xs:string" default="null" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="chatTabBottom" type="project:chatTabBottom" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+ View of the buttom area of chat. It contains buttons of message,emoticons,clear. </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="chatTabBottom" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:view">
+      <xs:attribute name="objMessage" type="xs:string" default="null" >
+</xs:attribute>
+      <xs:attribute name="doUpdate" type="lzx:boolean" default="false" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="videoObjectPlayBroadcast" type="project:videoObjectPlayBroadcast" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	Contains no microphone or camera Object, this view can only 
+	subscribe to a video or live-stream
+
+ </xs:documentation>
+</xs:annotation>
+</xs:element>
+  <xs:complexType name="videoObjectPlayBroadcast" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseVideoObject">
+      <xs:attribute name="ratioW" type="xs:string" default="1" >
+<xs:annotation>
+<xs:documentation xml:lang="en">
+
+	Contains no microphone or camera Object, this view can only 
+	subscribe to a video or live-stream
+
+ </xs:documentation>
+</xs:annotation>
+</xs:attribute>
+      <xs:attribute name="ratioH" type="xs:string" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="listWml" type="project:listWml" >
+</xs:element>
+  <xs:complexType name="listWml" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="lzx:text">
+      <xs:attribute name="uploadmodul" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="isPpt" type="lzx:boolean" default="false" >
+</xs:attribute>
+      <xs:attribute name="filenamePure" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="filename" type="xs:string" default="" >
+</xs:attribute>
+      <xs:attribute name="ext" type="xs:string" default="" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="mainToolsTopPanelPointer" type="project:mainToolsTopPanelPointer" >
+</xs:element>
+  <xs:complexType name="mainToolsTopPanelPointer" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseTopPanel">
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:element name="baseDrawEllipse" type="project:baseDrawEllipse" >
+</xs:element>
+  <xs:complexType name="baseDrawEllipse" mixed="true">
+  <xs:complexContent>
+  <xs:extension base="project:baseDrawRect">
+      <xs:attribute name="currentellipsestrokeFillDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currentellipsestrokeFill" type="xs:string" default="0xFFFF33" >
+</xs:attribute>
+      <xs:attribute name="currentellipsestrokeDis" type="lzx:number" default="1" >
+</xs:attribute>
+      <xs:attribute name="currentellipsestroke" type="xs:string" default="0xFF6600" >
+</xs:attribute>
+      <xs:attribute name="currentellipselineWidth" type="xs:string" default="4" >
+</xs:attribute>
+      <xs:attribute name="currentellipseOpacity" type="lzx:number" default="1" >
+</xs:attribute>
+  </xs:extension>
+  </xs:complexContent>
+  </xs:complexType>
+<xs:group name="topLevelElements">
+<xs:sequence>
+<xs:choice minOccurs="0" maxOccurs="unbounded">
+<xs:any />
+</xs:choice>
+</xs:sequence>
+</xs:group>
+</xs:schema>
diff --git a/WebContent/red5/admin.bat b/WebContent/red5/admin.bat
new file mode 100644
index 0000000..8ae8ec2
--- /dev/null
+++ b/WebContent/red5/admin.bat
@@ -0,0 +1,21 @@
+REM #############################################

+REM Licensed under the Apache License, Version 2.0 (the "License");

+REM you may not use this file except in compliance with the License.

+REM You may obtain a copy of the License at

+REM

+REM     http://www.apache.org/licenses/LICENSE-2.0

+REM

+REM Unless required by applicable law or agreed to in writing, software

+REM distributed under the License is distributed on an "AS IS" BASIS,

+REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+REM See the License for the specific language governing permissions and

+REM limitations under the License.

+REM #############################################

+@echo off

+set RED5_HOME=%~dp0

+set OM_CONTEXT=openmeetings

+

+set CLASSPATH=%RED5_HOME%\*;%RED5_HOME%\conf;%RED5_HOME%\plugins\*;%RED5_HOME%\lib\*;%RED5_HOME%\webapps\%OM_CONTEXT%\WEB-INF\lib\*;%RED5_HOME%\webapps\%OM_CONTEXT%\WEB-INF;%RED5_HOME%\webapps\%OM_CONTEXT%\WEB-INF\classes

+

+java -cp "%CLASSPATH%" -Dcontext=%OM_CONTEXT% -Dlogback.ContextSelector=org.red5.logging.LoggingContextSelector org.apache.openmeetings.cli.Admin %*

+

diff --git a/WebContent/red5/admin.sh b/WebContent/red5/admin.sh
new file mode 100644
index 0000000..a31a5ad
--- /dev/null
+++ b/WebContent/red5/admin.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+# #############################################
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# #############################################
+export RED5_HOME=$(cd $(dirname "$0"); pwd) 
+export OM_CONTEXT=openmeetings
+
+export CLASSPATH=$RED5_HOME/*:$RED5_HOME/conf:$RED5_HOME/plugins/*:$RED5_HOME/lib/*:$RED5_HOME/webapps/${OM_CONTEXT}/WEB-INF/lib/*:$RED5_HOME/webapps/${OM_CONTEXT}/WEB-INF:$RED5_HOME/webapps/${OM_CONTEXT}/WEB-INF/classes
+
+java -cp "$CLASSPATH" -Dcontext=${OM_CONTEXT} -Dlogback.ContextSelector=org.red5.logging.LoggingContextSelector org.apache.openmeetings.cli.Admin $*
+
diff --git a/WebContent/red5/index.html b/WebContent/red5/index.html
new file mode 100644
index 0000000..8884681
--- /dev/null
+++ b/WebContent/red5/index.html
@@ -0,0 +1,23 @@
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+<title>Your Page Title</title>
+<meta http-equiv="REFRESH" content="0;url=openmeetings/">
+</head>
+<body>
+Redirect to openmeetings/
+</body>
+</html>
diff --git a/WebContent/red5/network_test.sh b/WebContent/red5/network_test.sh
new file mode 100755
index 0000000..64cb8e9
--- /dev/null
+++ b/WebContent/red5/network_test.sh
@@ -0,0 +1,157 @@
+#!/bin/bash
+# #############################################
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+# #############################################
+
+LOCAL_HOST=$1
+SSH_LOGIN=$2
+TESTING_HOST=$3
+
+if [ -z "$3" ];then
+  echo "Usage: $0 LOCAL_HOST_IP REMOTE_SSH_LOGIN REMOTE_HOST_IP"
+  echo "Script requare installed 'iperf' on both local and remote hosts."
+  echo "Also need setting up ssh login without requiring a password. Use for this purpose ssl certificates."
+  exit 0;
+fi
+
+TEST_LOCAL_IPERF=`iperf 2>&1 | grep "Usage: iperf" |wc -l`
+if [ "1" != "$TEST_LOCAL_IPERF" ];then
+  echo "Script requare installed 'iperf' on local host."
+  exit 0;
+fi
+
+TEST_REMOTE_IPERF=`ssh $SSH_LOGIN@$TESTING_HOST "iperf 2>&1 | grep \"Usage: iperf\" |wc -l"`
+if [ "1" != "$TEST_REMOTE_IPERF" ];then
+  echo "Script requare installed 'iperf' on remote host."
+  exit 0;
+fi
+
+test_jitter_with_ping (){
+## $1 - size of packets in bites
+## $2 - count of send packets
+
+COUNT_PACKETS=1000
+if [ -z "$1" ]; then 
+  ping -c 1000 -f -s $1 $TESTING_HOST 2>&1 >${1}b.out.txt
+else
+  ping -c $2 -f -s $1 $TESTING_HOST 2>&1 >${1}b.out.txt
+  COUNT_PACKETS=$2
+fi
+
+MIN=`grep "rtt min" ./${1}b.out.txt | cut -d " " -f4 | cut -d "/" -f1 | cut -d "." -f1`
+AVG=`grep "rtt min" ./${1}b.out.txt | cut -d " " -f4 | cut -d "/" -f2 | cut -d "." -f1`
+MAX=`grep "rtt min" ./${1}b.out.txt | cut -d " " -f4 | cut -d "/" -f3 | cut -d "." -f1`
+
+let "JITTER=($MAX-$AVG)-($AVG-$MIN)"
+if [ "$JITTER" -lt "0" ];then
+    let "JITTER=-$JITTER"
+fi
+echo "Jitter = $JITTER for $COUNT_PACKETS packets with size $1 bites (ping)"
+echo "Max latency is $MAX"
+if [ "$AVG" != "0"  ]; then 
+  let "JITTERPS=$JITTER*100/$AVG"
+  echo "Jitter = $JITTERPS % from $AVG ms"
+fi
+
+}
+
+test_opened_ports_with_iperf (){
+## Test opened ports
+echo "Start testing opened ports"
+echo "========================================"
+PORTS=$1 #"5080 1935 8088"
+AVAIL_PORTS=""
+rm server_port_log.txt
+for i in $PORTS; do
+  #echo "ssh $SSH_LOGIN@$TESTING_HOST \"iperf -s -p $i\""
+  ssh $SSH_LOGIN@$TESTING_HOST "iperf -s -p $i" >>server_port_log.txt 2>&1 &
+  sleep 2
+  #echo "telnet -e q $TESTING_HOST $i <telnet_commands.txt"
+  TELNET_OUT=`echo -e "q\nquit"|telnet -e q $TESTING_HOST $i`
+  #echo "ssh $SSH_LOGIN@$TESTING_HOST \"ps -C iperf|cut -d \" \" -f1 | xargs kill -9\""
+  ssh $SSH_LOGIN@$TESTING_HOST "ps -C iperf|cut -d \" \" -f1 | xargs kill -9" >>server_port_log.txt 2>&1 &
+  PORT_IS_AVAILABLE=`echo "$TELNET_OUT" | grep "Connected to"`
+  if [ "$PORT_IS_AVAILABLE" != "" ];then
+    echo "Port $i available"
+    AVAIL_PORTS="$AVAIL_PORTS $i"
+  else
+    echo "Port $i not available"
+  fi
+  sleep 2
+done
+
+}
+
+
+test_bandwidth_with_iperf (){
+## Test bandwidth of server
+echo "Start testing bandwidth of server"
+echo "========================================"
+  PORT=$1
+  TIME_TO_TEST=30
+  NUM_THREADS=10
+  REPORT_INTERVAL=5
+  #Download test
+  echo "Start outbound test"
+  #setup server
+  #echo "Starting server..."
+  ssh $SSH_LOGIN@$TESTING_HOST "iperf -s -p $PORT" >server_log.txt 2>&1 &
+  #wait when server started
+  sleep 2
+  #start test
+  #echo "Start test"
+  iperf -c $TESTING_HOST -p $PORT -i $REPORT_INTERVAL -P $NUM_THREADS -t $TIME_TO_TEST | tee client_log.txt | grep "SUM"
+  #stop server
+  echo "Stop server"
+  ssh $SSH_LOGIN@$TESTING_HOST "ps -C iperf|cut -d \" \" -f1 | xargs kill -9" >>server_log.txt 2>&1 &
+  echo "End outbound test"
+  sleep 2
+  echo 
+  #Upload test 
+  #Comment: This we can use any port for testing, I use 12100
+  PORT=12100
+  echo "Start inbound test"
+  #setup server
+  #echo "Starting server..."
+  iperf -s -p $PORT >local_server_log.txt 2>&1 &
+  #wait when server started
+  sleep 2
+  #start test
+  #echo "Start test"
+  ssh $SSH_LOGIN@$TESTING_HOST "iperf -c $LOCAL_HOST -p $PORT -i $REPORT_INTERVAL -P $NUM_THREADS -t $TIME_TO_TEST" | tee remote_client_log.txt | grep "SUM"
+  #stop server
+  echo "Stop server"
+  ps -C iperf | cut -d " " -f1 | xargs kill -9 >local_server_log.txt 2>&1 &
+  echo "End inbound test"
+}
+
+echo "Start testing latency and jitter"
+echo "========================================"
+test_jitter_with_ping 1000 100
+test_jitter_with_ping 1000 1000
+test_jitter_with_ping 10000 1000
+#Hard test
+#test_jitter_with_ping 1024 100000
+echo
+
+test_opened_ports_with_iperf "5080 1935 8088"
+#echo "$AVAIL_PORTS"
+echo
+
+test_bandwidth_with_iperf 1935
+
+## generate file with random content and size 1Mb
+#dd if=/dev/urandom of=test.log bs=1k count=1024
+
+
+
diff --git a/WebContent/src/base/components/button/baseChooseIcon.lzx b/WebContent/src/base/components/button/baseChooseIcon.lzx
new file mode 100644
index 0000000..86007c3
--- /dev/null
+++ b/WebContent/src/base/components/button/baseChooseIcon.lzx
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<resource name="background_drawchoose_rsc">
+    <frame src="resources/menudraw_up.png" />
+    <frame src="resources/menudraw_over.png" />
+    <frame src="resources/menudraw_down.png" />
+</resource>
+
+<class name="baseChooseIcon" extends="view" width="24" height="24" 
+	   bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >
+    <attribute name="resourceN" value="" type="string" />
+    
+    <view name="_bg" x="1" y="1" height="$once{ parent.height - 2 }"
+    	  width="$once{ parent.width - 2 }" bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }" />
+    
+    <image name="_icon" src="$once{ canvas.getThemeImage(parent.resourceN) }" 
+    	  x="$once{ (parent.width-this.width) / 2 }"
+    	  y="$once{ (parent.height-this.height) / 2 }" 
+    	  width="18" height="18" stretches="both"/>
+    <attribute name="initX" value="0" type="number"/>
+    <attribute name="initY" value="0" type="number"/>
+    <attribute name="isselected" value="false" type="boolean" />
+	<!--
+    <attribute name="enabled" value="true" type="boolean" />
+	 -->
+    <attribute name="labelid" value="0" type="number" />
+    <handler name="onmouseover">
+    	this.isOut = false;
+    	this._bg.setAttribute("bgcolor",canvas.getThemeColor('baseMouseOvercolorizer'));
+    	this._icon.setAttribute("x",this._icon.x-1);
+    	this._icon.setAttribute("y",this._icon.y-1);
+    	this._icon.setAttribute("width",this._icon.width+2);
+    	this._icon.setAttribute("height",this._icon.height+2);
+    </handler>
+    <handler name="onmouseout">
+    	this._bg.setAttribute("bgcolor",canvas.getThemeColor('baseMousecolorizer'));
+    	if (this.initX == this._icon.x) {
+    		return;
+    	}
+    	this.isOut = true;
+    	this._icon.setAttribute("x",this.initX);
+    	this._icon.setAttribute("y",this.initY);
+    	this._icon.setAttribute("width",this._icon.width-2);
+    	this._icon.setAttribute("height",this._icon.height-2);
+    </handler>
+    <handler name="onclick">
+    	this.onmouseout.sendEvent(null);
+    </handler>
+    <handler name="oninit">
+    	this.initX = this._icon.x;
+    	this.initY = this._icon.y;
+        if (this.isselected){
+            this.onclick.sendEvent();
+            this.setAttribute('frame',3);
+        }
+    </handler>          
+    <labelTooltip labelid="$once{ parent.labelid }" inittwice="true" />
+</class>
+
+
+</library>
diff --git a/WebContent/src/base/components/button/blueButton.lzx b/WebContent/src/base/components/button/blueButton.lzx
new file mode 100644
index 0000000..c30474e
--- /dev/null
+++ b/WebContent/src/base/components/button/blueButton.lzx
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<class name="blueButton" extends="basecomponent" width="200" height="18" 
+	       bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" focusable="true">
+	    
+	    <attribute name="resourceItem" value="" type="string" />
+	    
+	    <attribute name="x_insetResource" value="4" type="number" />
+	    <attribute name="y_insetResource" value="4" type="number" />
+	    
+	    <attribute name="width_insetResource" value="18" type="number" />
+	    <attribute name="height_insetResource" value="18" type="number" />
+	    
+		<method name="setText" args="txt">
+			this.setAttribute('text',txt);
+		</method>
+		<view name="_bg" x="1" y="1" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }"
+				width="${ parent.width-2 }" height="${ parent.height-2 }" />
+		<view name="_bgOver" x="1" y="1" bgcolor="0xFFFFFF" opacity="0.5" visibility="hidden"
+				width="${ parent.width-2 }" height="${ parent.height-2 }" />
+		<view name="_bgDown" x="1" y="1" bgcolor="0x000000" opacity="0.5" visibility="hidden"
+				width="${ parent.width-2 }" height="${ parent.height-2 }" />
+		
+		<view name="disAbledView" visibility="${ ( parent.enabled ) ? 'hidden' : 'visible' }"
+	          bgcolor="white" opacity="1" x="1" y="1"
+	          width="$once{ parent.width-2 }" height="$once{ parent.height-2 }" />
+		
+	    <image name="_rscIcon" stretches="both" 
+	    	  opacity="${ ( parent.enabled ) ? 1 : 0.4 }"
+		  	  x="$once{ parent.x_insetResource }" 
+	    	  y="$once{ parent.y_insetResource }" 
+	          width="$once{ parent.width_insetResource }" 
+	          height="$once{ parent.height_insetResource }" 
+	          src="$once{ canvas.getThemeImage(parent.resourceItem) }" />
+	          
+	    
+	     
+		<handler name="onmouseover">
+			this._rscIcon.setAttribute("x",this._rscIcon.x-1);
+			this._rscIcon.setAttribute("y",this._rscIcon.y-1);
+			this._rscIcon.setAttribute("width",this._rscIcon.width+2);
+			this._rscIcon.setAttribute("height",this._rscIcon.height+2);
+			this._bgOver.setAttribute('visibility','visible');
+		</handler>
+		<handler name="onmouseout">
+			this._rscIcon.setAttribute("x",this._rscIcon.x+1);
+			this._rscIcon.setAttribute("y",this._rscIcon.y+1);
+			this._rscIcon.setAttribute("width",this._rscIcon.width-2);
+			this._rscIcon.setAttribute("height",this._rscIcon.height-2);
+		</handler>
+		<handler name="onmousedown">
+			if (!this.enabled) {
+				return;
+			}
+			this._bgOver.setAttribute('visibility','hidden');
+			this._bgDown.setAttribute('visibility','visible');
+		</handler>
+		<handler name="onmouseup">
+			this._bgDown.setAttribute('visibility','hidden');
+		</handler>	
+			
+	</class>
+
+</library>
diff --git a/WebContent/src/base/components/button/labelBlueButton.lzx b/WebContent/src/base/components/button/labelBlueButton.lzx
new file mode 100644
index 0000000..318ddfa
--- /dev/null
+++ b/WebContent/src/base/components/button/labelBlueButton.lzx
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="labelBlueButton" extends="blueButton" >
+
+	<attribute name="labelid" value="0" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		//Debug.write(this.labelid);
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/button/library.lzx b/WebContent/src/base/components/button/library.lzx
new file mode 100644
index 0000000..fa5dc19
--- /dev/null
+++ b/WebContent/src/base/components/button/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="incubator/roundrectbutton.lzx" />
+    
+	<include href="blueButton.lzx" />
+	<include href="labelBlueButton.lzx" />
+	<include href="simpleLabelButton.lzx" />
+    <include href="baseChooseIcon.lzx" />
+
+</library>
diff --git a/WebContent/src/base/components/button/resources/menudraw_down.png b/WebContent/src/base/components/button/resources/menudraw_down.png
new file mode 100644
index 0000000..8ba606b
--- /dev/null
+++ b/WebContent/src/base/components/button/resources/menudraw_down.png
Binary files differ
diff --git a/WebContent/src/base/components/button/resources/menudraw_over.png b/WebContent/src/base/components/button/resources/menudraw_over.png
new file mode 100644
index 0000000..d7e9f26
--- /dev/null
+++ b/WebContent/src/base/components/button/resources/menudraw_over.png
Binary files differ
diff --git a/WebContent/src/base/components/button/resources/menudraw_up.png b/WebContent/src/base/components/button/resources/menudraw_up.png
new file mode 100644
index 0000000..cebc7c5
--- /dev/null
+++ b/WebContent/src/base/components/button/resources/menudraw_up.png
Binary files differ
diff --git a/WebContent/src/base/components/button/simpleLabelButton.lzx b/WebContent/src/base/components/button/simpleLabelButton.lzx
new file mode 100644
index 0000000..5f63fad
--- /dev/null
+++ b/WebContent/src/base/components/button/simpleLabelButton.lzx
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="simpleLabelButton" extends="button" fontstyle="bold"
+	   fontsize="11" height="20" style="componentStyle">
+
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+	
+</class>
+
+<class name="simpleLabelRoundButton" extends="roundrectbutton" 
+	   fontsize="11" height="20" style="componentStyle" fontstyle="bold">
+
+    <attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+    <method name="setLabelId" args="_labelid" >
+        this.labelid = _labelid;
+        this.setAttribute('text',canvas.getLabelName(this.labelid));
+    </method>
+    
+</class>
+
+<class name="simpleLabelButtonTooltip" extends="button" fontstyle="bold"
+	   fontsize="11" height="20" style="componentStyle">
+	
+	<attribute name="tooltipId" type="number" value="0" />
+
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+	<labelTooltip labelid="$once{ parent.tooltipId }" />
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/calendar/calendarWindow.lzx b/WebContent/src/base/components/calendar/calendarWindow.lzx
new file mode 100644
index 0000000..1118862
--- /dev/null
+++ b/WebContent/src/base/components/calendar/calendarWindow.lzx
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="calendarWindow" extends="view" clickable="true" 
+	   bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">	
+
+	<attribute name="fieldRef" value="null" />
+	
+	<handler name="oninit">
+		lz.ModeManager.makeModal(this);
+	</handler>
+	<method name="close">
+		lz.ModeManager.release(this);
+		this.destroy();
+	</method>	
+	
+    <!--- @keywords private -->
+    <method name="passModeEvent" args="eventStr,view" > 
+        <![CDATA[
+            if ( eventStr == "onmousedown"  ){
+                if ( view != null ) {
+                   if ( !view.childOf(this) ) {
+                        this.close();
+                   }
+                } else {
+                    this.close();
+                }
+            }
+            if (view && view.childOf(this)) {
+                if (view[ eventStr ]) {
+                    view[ eventStr ].sendEvent( view );
+                }
+                return false;
+            }
+            return true;
+        ]]> 
+    </method> 	
+	
+	<labelText fgcolor="0xFFFFFF" fontstyle="bold" labelid="481" x="1" y="1" />
+	
+    <view name="_close" x="${ this.parent.width-19 }" y="1" 
+        resource="btn_presenter_close"
+        onmouseover="this.setAttribute('frame',2)"
+        onmouseout="this.setAttribute('frame',1)"
+        onmousedown="this.setAttribute('frame',3)"
+        onmouseup="this.setAttribute('frame',1)" >
+        <handler name="onclick">
+            this.setAttribute('frame',2);
+            this.parent.close();
+        </handler>
+        <labelTooltip labelid="430" />
+    </view>  	
+
+	<dateSelector y="20" name="_dateselector">
+		<handler name="oninit">
+			<![CDATA[
+			//Debug.write("dateselector oninit. ",this);
+			var t = parent.fieldRef.getText();
+			var newDate = parseStringToDate(t);
+			this.showingdate = newDate;
+			//Debug.write("n1:",this.showingdate);
+			this.init();
+			]]>
+		</handler>
+		<handler name="ondoubleselect" args="d">
+			parent.fieldRef.setAttribute('text',parseDateToString(d));
+			this.parent.close();
+		</handler>
+	</dateSelector>	
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/calendar/dateField.lzx b/WebContent/src/base/components/calendar/dateField.lzx
new file mode 100644
index 0000000..fd83911
--- /dev/null
+++ b/WebContent/src/base/components/calendar/dateField.lzx
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="dateField" extends="view" width="104">
+	
+	<attribute name="enabled" value="true" type="boolean" />
+	<attribute name="setDefaultToday" value="false" type="boolean" />
+	<attribute name="additionalDay" value="0" type="number" />
+	
+	<handler name="oninit">
+		if (this.setDefaultToday){
+			if (this.additionalDay==0){
+				this._text.setAttribute('text',parseDateToString(new Date()));
+			} else {
+				var date = new Date();
+				date.setTime(date.getTime()+86400000);
+				this._text.setAttribute('text',parseDateToString(date));
+			}
+		}
+	</handler>
+ 
+	<method name="setText" args="txt">
+		this.setAttribute('text',txt);
+	</method>
+	<method name="getText" >
+		return this._text.getText();
+	</method>	
+    
+    <method name="setDate" args="d">
+        
+    </method>
+    <method name="getDate">
+        var tString = this._text.getText();
+        var y = tString.substring(6,10);
+        var m = Number(tString.substring(3,5))-1;
+        var d = tString.substring(0,2);     
+        var date = new Date(y,m,d);
+        if ($debug) Debug.write(date); 
+        return date;
+    </method>
+    
+	<attribute name="text" value="" type="string" />
+
+	<customEdittext name="_text" width="$once{ parent.width-22 }" regexpType="date" 
+					align="left" text="${ parent.text }" enabled="${ parent.enabled }" />
+
+	<blueButton resourceItem="date_icon_rsc" align="right"
+		  opacity="${ ((parent.enabled) ? 1 : 0.4) }"
+		  x_insetResource="2" y_insetResource="2" width="20" height="20"
+		  width_insetResource="16" height_insetResource="16">
+		<handler name="onclick">
+			if (parent.enabled) {
+				new lz.calendarWindow(this.parent.parent,{fieldRef:this.parent._text,x:this.parent.x+(this.parent.width-200),y:this.parent.y});
+			}
+		</handler>
+		<labelTooltip labelid="162" />
+	</blueButton>
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/calendar/dateSelector.lzx b/WebContent/src/base/components/calendar/dateSelector.lzx
new file mode 100644
index 0000000..209ca6f
--- /dev/null
+++ b/WebContent/src/base/components/calendar/dateSelector.lzx
@@ -0,0 +1,504 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDateSelectorComponent" extends="view">
+
+	<attribute name="daynumbers" value="[0,1,2,3,4,5,6]" />
+
+	<attribute name="showingdate" type="string" value="" />
+	
+	<attribute name="dayclass" when="once" />
+
+	<attribute name="weekclass" when="once" />
+	<attribute name="showcalenderweek" value="true" type="boolean" />
+	
+	<attribute name="monthclass" when="once" />
+	<attribute name="showcalendermonth" value="true" type="boolean" />	
+	
+</class>
+
+<class name="dateSelectorDay" extends="baseDateSelectorComponent" width="24" bgcolor="0xFFFFFF">
+
+	<attribute name="dayIndexNumber" value="-1" type="number" />
+	<attribute name="weekIndexNumber" value="-1" type="number" />
+
+	<handler name="onclick">
+		this.parent.parent.parent.parent.parent.parent.selectDate(this.daydate,this.dayIndexNumber,this.weekIndexNumber);
+	</handler>
+	
+	<handler name="ondblclick">
+		this.parent.parent.parent.parent.parent.parent.selectDoubleDate(this.daydate);
+	</handler>
+	
+	<attribute name="daydate" value="null" />
+	
+	<method name="init">
+		<![CDATA[
+        super.init();
+        if (parent.parent.parent.parent.month!=daydate.getMonth())
+        	this._date.setAttribute('text','<FONT COLOR="#CCCCCC">'+daydate.getDate()+'</FONT>');
+        else 
+        	this._date.setAttribute('text',daydate.getDate());
+        ]]>
+	</method>
+	
+	<text name="_date" fontsize="10" align="center" resize="true" />
+
+</class>
+
+<class name="dateSelectorDayHeader" extends="baseDateSelectorComponent" width="24" bgcolor="0xF9F9F9" >
+
+	<attribute name="daynumber" value="0" type="number" />
+	
+	<method name="init">
+		<![CDATA[
+	        super.init();
+	        var dateRoot = parent.parent.parent.parent;
+	        //if ($debug) Debug.write("daynumber",this,dateRoot);
+	        this._date.setAttribute('text',canvas.getLabelName(dateRoot.dayNamesLabelIds[( (daynumber>6) ? (daynumber-7) : daynumber )]));
+	        this._date._tip.setAttribute('labelid',dateRoot.dayLabelNamesLabelIds[( (daynumber>6) ? (daynumber-7) : daynumber )]); 
+        ]]>
+	</method>
+	
+	<text fgcolor="0x000000" name="_date" fontsize="10" align="center" resize="true"
+		  onmouseover="" onmouseout="">
+		<labelTooltip name="_tip" />
+	</text>
+
+</class>
+
+<class name="dateSelectorWeekNumber" extends="view" width="24" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+
+	<attribute name="weeknumber" value="0" type="number" />	
+	<text name="_date" fgcolor="white" fontsize="10" text="$once{ parent.weeknumber }" 
+		  align="center" resize="true" />
+
+</class>
+
+<class name="dateSelectorWeekNumberHeader" extends="view" width="24" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+
+	<attribute name="labelWeekHeader" value="" type="string" />	
+	<text name="_date" fgcolor="white" fontsize="10" text="$once{ parent.labelWeekHeader }" 
+		  align="center" resize="true" 
+		  onmouseover="" onmouseout="">
+		<labelTooltip name="_tip" labelid="468" />
+	</text>
+
+</class>
+
+<class name="dateSelectorWeek" extends="baseDateSelectorComponent" 
+		bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }">
+
+	<attribute name="weekIndexNumber" value="-1" type="number" />
+
+	<attribute name="firstweekddaydate" value="null" />
+	
+	<method name="init">
+        <![CDATA[ 
+        super.init();
+        for( var i = 0 ; i < 7 ; i++ )  {
+        	new dayclass(this.content,{
+        						daydate:new Date(firstweekddaydate.getTime()+(86400000*i)),
+        						weekIndexNumber:this.weekIndexNumber,
+        						dayIndexNumber:i
+        					});
+       	}  
+		]]>
+	</method>
+	
+	<view name="content" layout="axis:x;spacing:1" />
+	
+</class>
+
+
+<class name="dateSelectorMonth" extends="baseDateSelectorComponent" 
+		bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" height="137" width="176">
+            
+	<attribute name="month" value="0" type="number" />
+	<attribute name="firstweekNumber" value="0" type="number" />
+	<attribute name="currentMonthName" value="" type="string" />
+
+	<method name="init">
+        <![CDATA[ 
+        super.init();
+        var dateRoot = parent.parent;
+        //if ($debug) Debug.write("dateRoot: ",dateRoot);
+        this.setAttribute('currentMonthName',dateRoot.monthnames[month]); 
+        for( var i = 0 ; i < 6 ; i++ ) new lz.dateSelectorWeek(this.content,{firstweekddaydate:new Date(this.showingdate.getTime()+(604800000*i)),dayclass:dayclass,month:month,weekIndexNumber:i});  
+        for( var i = 0 ; i < 7 ; i++ ) new lz.dateSelectorDayHeader(this.weekheader,{daynumber:(this.showingdate.getDay()+i)});  
+		]]>
+	</method> 
+	<view name="header" layout="axis:x" height="18" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }">
+		<text width="20" fgcolor="0x000000" height="18" 
+			onmouseover="this.setAttribute('bgcolor',0xFFFFFF)" onmouseout="this.setAttribute('bgcolor',canvas.getThemeColor('secondBorderColor'))">
+			<handler name="oninit"><![CDATA[
+				this.setAttribute('text','&#60;');]]>
+			</handler>
+			<handler name="onclick">
+				this.parent.parent.parent.parent.showPreviewsMonth();
+			</handler>
+		</text>
+		<text width="22" fgcolor="0x000000" height="18"
+			onmouseover="this.setAttribute('bgcolor',0xFFFFFF)" onmouseout="this.setAttribute('bgcolor',canvas.getThemeColor('secondBorderColor'))">
+			<handler name="oninit"><![CDATA[
+				this.setAttribute('text','&#60;&#60;');]]>
+			</handler>			
+			<handler name="onclick">
+				this.parent.parent.parent.parent.showPreviewsYear();
+			</handler>
+		</text>	
+		<view width="91" height="$once{ parent.height }" >
+			<text fontsize="10" fgcolor="0x000000" align="center" text="${ parent.parent.parent.currentMonthName+' '+parent.parent.parent.parent.parent.year }" resize="true" />
+		</view>
+		<text width="22" fgcolor="0x000000" text=">>" height="18"
+			onmouseover="this.setAttribute('bgcolor',0xFFFFFF)" onmouseout="this.setAttribute('bgcolor',canvas.getThemeColor('secondBorderColor'))">
+			<handler name="onclick">
+				this.parent.parent.parent.parent.showNextYear();
+			</handler>
+		</text>
+		<text width="20" fgcolor="0x000000" text="  >" height="18"
+			onmouseover="this.setAttribute('bgcolor',0xFFFFFF)" onmouseout="this.setAttribute('bgcolor',canvas.getThemeColor('secondBorderColor'))">
+			<handler name="onclick">
+				this.parent.parent.parent.parent.showNextMonth();
+			</handler>
+		</text>	
+	</view>
+	<view name="weekheader" layout="axis:x;spacing:1" x="1" y="18" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }"/>
+	<!-- 
+	<view name="weekNumber" layout="axis:y;spacing:1" x="1" y="35" />
+	 -->
+	<view name="content" layout="axis:y;spacing:1" x="1" y="35" />
+</class>
+
+<class name="baseDateSelector" extends="baseDateSelectorComponent" >
+	
+	<attribute name="dayNamesLabelIds" value="null" />
+	<attribute name="dayLabelNamesLabelIds" value="null" />
+	<attribute name="monthnames" value="['Januar','Februar','Maerz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember']"/> 
+
+
+	<attribute name="firstdayinweek" value="$once{ canvas.firstdayinweek }" type="number" />
+	<attribute name="year" value="" type="string" />
+	<attribute name="selecteddate" value="null" />
+	<attribute name="selected" value="null" />
+	
+	<event name="onselect" />
+	<event name="ondoubleselect" />
+	
+	<event name="onmonthSel" />
+	<event name="onyearSel" />
+	
+	<attribute name="dayIndexNumber" value="-1" type="number" />
+	<attribute name="weekIndexNumber" value="-1" type="number" />
+	
+	<handler name="oninit">
+		<![CDATA[
+			this.dayNamesLabelIds = [459,453,454,455,456,457,458];
+			this.dayLabelNamesLabelIds = [466,460,461,462,463,464,465];
+			this.monthnames = [canvas.getLabelName(469),canvas.getLabelName(470),
+								canvas.getLabelName(471),canvas.getLabelName(472),
+								canvas.getLabelName(473),canvas.getLabelName(474),
+								canvas.getLabelName(475),canvas.getLabelName(476),
+								canvas.getLabelName(477),canvas.getLabelName(478),
+								canvas.getLabelName(479),canvas.getLabelName(480)]
+			
+			this.init();
+		]]>
+	</handler>	
+	
+	<method name="loadDate" args="datObj">
+		this.showingdate = datObj;
+		this.init();
+		this.showDate(this.selecteddate);
+		//this.onselect.sendEvent(this.selecteddate);
+	</method>
+	
+	<method name="init">
+        <![CDATA[ 
+	        super.init();
+	        
+	        var tIsInit = false;
+	        if (this.showingdate==""){
+	        	tIsInit = true;
+	        	this.showingdate = new Date();
+	        }
+	        this.setAttribute('year',this.showingdate.getFullYear());
+	        this.selecteddate = this.showingdate;
+	        var firstdayDate = this.getDateFirstDayInMonth();
+	        if (this.content.content != null) {
+	        	this.content.content.destroy();
+	        }
+	        new lz.dateSelectorMonth(this.content,{name:'content',
+		        	firstweekNumber:this.getWeekNumber(firstdayDate.getTime()),
+		        	month:this.selecteddate.getMonth(),
+		        	showingdate:firstdayDate,
+		        	dayclass:dayclass,
+		        	weekclass:weekclass,
+		        	showcalenderweek:showcalenderweek,
+		        	showcalendermonth:showcalendermonth
+	        	});
+	        this.hiliteDate(this.showingdate);
+	        //this.onselect.sendEvent(this.selecteddate);
+	        var ref = this.checkToday();
+	        
+	        if ($debug) Debug.write("INIT ",ref,ref.daydate);
+	        
+	        if (ref != null && tIsInit) {
+		        this.selectDate(ref.daydate, ref.dayIndexNumber, ref.weekIndexNumber);
+	        }
+		]]>
+	</method>
+	
+	<method name="checkToday">
+		<![CDATA[
+		var tDate = new Date();
+        if (this.showingdate.getMonth()== tDate.getMonth() && this.showingdate.getFullYear() == tDate.getFullYear()){
+        	//Debug.write("+++++++ Found Today");
+        	var ref = this.getDateRefByDateNumber(tDate.getDate(),tDate.getMonth());
+        	if (ref == null) {
+        		if ($debug) Debug.warn("Could not find date ref",tDate);
+        	}
+        	ref.setAttribute('bgcolor',0xCECECE);
+        	return ref;
+        }
+        
+        return this.getDateRefByDateNumber(this.showingdate.getDate(),this.showingdate.getMonth())
+		]]>
+	</method>
+	
+	<method name="showDate" args="dateObj">
+		<![CDATA[
+		if(this.selected!=null) this.selected.setAttribute('bgcolor',"white");
+		var i=0;
+		while (i<this.content.content.content.subviews.length){
+			var k=0;
+			while (k<this.content.content.content.subviews[i].content.subviews.length){
+				var t = this.content.content.content.subviews[i].content.subviews[k].daydate;
+				if (t.getDate()==dateObj.getDate() && t.getMonth()==dateObj.getMonth()){
+					this.content.content.content.subviews[i].content.subviews[k].onclick.sendEvent(null);
+					return;
+				}
+				k++;
+			}
+			i++;
+		}
+		]]>
+	</method>
+	
+	<method name="selectDate" args="dateObj,dayIndex,weekIndex">
+		dayIndexNumber = dayIndex;
+		weekIndexNumber = weekIndex;
+		this.showingdate = dateObj;
+		this.selecteddate = dateObj;
+		this.hiliteDate(this.showingdate);
+		this.checkToday();
+		this.onselect.sendEvent(this.selecteddate);
+	</method>
+	
+	<method name="selectDoubleDate" args="dateObj">
+		this.showingdate = dateObj;
+		this.selecteddate = dateObj;
+		this.hiliteDate(this.showingdate);
+		this.checkToday();
+		this.ondoubleselect.sendEvent(this.selecteddate);
+	</method>
+	
+	<method name="hiliteDate" args="dateObj">
+		<![CDATA[
+		if(this.selected!=null) this.selected.setAttribute('bgcolor',"white");
+		var i=0;
+		while (i<this.content.content.content.subviews.length){
+			var k=0;
+			while (k<this.content.content.content.subviews[i].content.subviews.length){
+				var t = this.content.content.content.subviews[i].content.subviews[k].daydate;
+				if (t.getDate()==dateObj.getDate() && t.getMonth()==dateObj.getMonth()){
+					this.selected = this.content.content.content.subviews[i].content.subviews[k];
+					this.selected.setAttribute('bgcolor',0xCCD7E1);
+					return;
+				}
+				k++;
+			}
+			i++;
+		}
+		]]>
+	</method>
+	
+	<!-- 
+		Here the Date has to be changed sothat the firstday in week is the first day in month
+	 -->
+	<method name="getDateFirstDayInMonth">
+		<![CDATA[
+		//First calc the date by the given first day in week
+		var newDateTemp = new Date(this.showingdate.getFullYear(), this.showingdate.getMonth(), 1, 12); //set hours to 12 to prevent timezone issues
+		////Debug.write(newDateTemp);
+		var factor = 0;
+		if (newDateTemp.getDay()>this.firstdayinweek)	
+			factor = -((newDateTemp.getDay()-this.firstdayinweek));
+		else if (newDateTemp.getDay()<this.firstdayinweek)
+			factor = (this.firstdayinweek-newDateTemp.getDay());
+		////Debug.write("factor: ",factor);
+		
+		//calc first day
+		var newDate = new Date( (newDateTemp.getTime()+(86400000*factor)) );
+
+		//if the first day is after the first day of the selected month then we have to add 7 Days
+		if (newDate.getDate()>1 && newDate.getMonth()==newDateTemp.getMonth()){
+			newDate = new Date( (newDate.getTime()-(86400000*7)) );
+		}
+		if ($debug) Debug.write("getDateFirstDayInMonth ",newDate);
+		return newDate;
+		]]>
+	</method>
+	
+	<method name="isoWeekDays" args="yday,wday" >
+		<![CDATA[
+		return yday - ((yday - wday + 382) % 7) + 3;
+		]]>
+	</method>
+	
+	<method name="isLeapYear" args="year" >
+		<![CDATA[
+		if (((year % 4) == 0 && (year % 100)!=0) || (year % 400)==0)
+			return 1;
+		else
+			return 0;
+		]]>
+	</method>
+	
+	<method name="getDaysInMonth" args="iYear,iMonth" >
+		<![CDATA[
+			return 32 - new Date(iYear, iMonth, 32).getDate();
+		]]>
+	</method>
+	
+	<method name="getWeekNumber" args="DateInMilliseconds" >
+		<![CDATA[
+		var d = new Date(DateInMilliseconds);
+		if ($debug) Debug.write("getWeekNumber: ",d);
+		var NumerOfDaysIn = d.getDate();
+		
+		for (var i=0;i<d.getMonth();i++) {
+			var monthDays = this.getDaysInMonth(d.getFullYear(),d.getMonth());
+			NumerOfDaysIn+=monthDays;
+		}
+		if ($debug) Debug.write("NumerOfDaysIn,month: ",NumerOfDaysIn,d.getMonth());
+		
+		var days = this.isoWeekDays(NumerOfDaysIn,d.getDay());
+		if ($debug) Debug.write("days: ",days);
+		
+		if (days < 0) {
+			NumerOfDaysIn += 365 + isLeapYear(--NumerOfDaysIn);
+			days = this.isoWeekDays(NumerOfDaysIn, d.getDay());
+		} else {
+			NumerOfDaysIn -= 365 + isLeapYear(NumerOfDaysIn);
+			var d2 = this.isoWeekDays(NumerOfDaysIn,d.getDay());
+			if (0 <= d2) {
+				days = d2;
+			}
+		}
+
+		if ($debug) Debug.write("days: ",days);
+		
+		return (Math.floor((days / 7)));
+		]]>
+	</method>
+	
+	<method name="clearContent">
+		this.content.destroy();
+		new LzView(this,{name:'content'});
+	</method>
+	
+	<method name="showPreviewsMonth">
+		<![CDATA[
+		this.clearContent();
+		var preyear = this.showingdate.getFullYear();
+		var previewsMonth = this.showingdate.getMonth()-1;
+		if (previewsMonth<0) {
+			previewsMonth=11;
+			preyear--;
+		}
+		this.showingdate = new Date(preyear, previewsMonth, this.showingdate.getDate());
+		this.onmonthSel.sendEvent(previewsMonth);
+		this.init();
+		]]>
+	</method>
+	
+	<method name="showNextMonth">
+		<![CDATA[
+		this.clearContent();
+		var nextyear = this.showingdate.getFullYear();
+		var nextMonth = this.showingdate.getMonth()+1;
+		if (nextMonth>11) {
+			nextMonth=0;
+			nextyear++;
+		}		
+		this.showingdate = new Date(nextyear, nextMonth, this.showingdate.getDate());
+		this.onmonthSel.sendEvent(nextMonth);
+		this.init();
+		]]>
+	</method>
+	
+	<method name="showPreviewsYear">
+		this.clearContent();
+		this.showingdate = new Date(this.showingdate.getFullYear()-1, this.showingdate.getMonth(), this.showingdate.getDate());
+		this.onyearSel.sendEvent(this.showingdate.getFullYear());
+		this.init();
+	</method>
+	
+	<method name="showNextYear">
+		this.clearContent();
+		this.showingdate = new Date(this.showingdate.getFullYear()+1, this.showingdate.getMonth(), this.showingdate.getDate());
+		this.onyearSel.sendEvent(this.showingdate.getFullYear());
+		this.init();
+	</method>
+	
+	<method name="getDateRefByDateNumber" args="dayNumber,month">
+		<![CDATA[
+		////Debug.write(this.content.content.content);
+		for (var i=0;i<this.content.content.content.subviews.length;i++){
+			////Debug.write("this.content.content.content.subviews: ",i,this.content.content.content.subviews[i]);
+			for (var k=0;k<this.content.content.content.subviews[i].content.subviews.length;k++){
+				////Debug.write("this.content.content.content.subviews[i].content.subviews[k].daydate.getDate(): ",this.content.content.content.subviews[i].content.subviews[k].daydate.getDate(),dayNumber);
+				////Debug.write("this.content.content.content.subviews[i].content.subviews[k].daydate.getMonth(): ",this.content.content.content.subviews[i].content.subviews[k].daydate.getMonth(),month);
+				if(this.content.content.content.subviews[i].content.subviews[k].daydate.getDate()==dayNumber && this.content.content.content.subviews[i].content.subviews[k].daydate.getMonth()==month){
+					return this.content.content.content.subviews[i].content.subviews[k];
+				}
+				////Debug.write("k: ",k,this.content.content.content.subviews[i].content.subviews[k]);
+				////Debug.write(this.content.content.content.subviews[i].content.subviews[k].daydate);
+			}
+		}
+		return null;
+		]]>
+	</method>
+	
+	<view name="content">
+		<view name="content" />
+	</view>
+
+</class>
+
+<class name="dateSelector" extends="baseDateSelector"
+	weekclass="lz.dateSelectorWeek" dayclass="lz.dateSelectorDay" monthclass="lz.dateSelectorMonth" >
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/calendar/library.lzx b/WebContent/src/base/components/calendar/library.lzx
new file mode 100644
index 0000000..31e0d0e
--- /dev/null
+++ b/WebContent/src/base/components/calendar/library.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="dateSelector.lzx" />
+	<include href="dateField.lzx" />
+	<include href="calendarWindow.lzx" />
+
+</library>
diff --git a/WebContent/src/base/components/conferencebox/conferenceBox.lzx b/WebContent/src/base/components/conferencebox/conferenceBox.lzx
new file mode 100644
index 0000000..8b0ec40
--- /dev/null
+++ b/WebContent/src/base/components/conferencebox/conferenceBox.lzx
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>     
+
+<class name="conferenceBox" extends="view" width="250" height="400" >
+    
+    <attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+    <method name="setLabelId" args="_labelid" >
+        this.labelid = _labelid;
+        this.setAttribute('headerText',canvas.getLabelName(this.labelid));
+    </method>
+    
+    <attribute name="headerText" value="Users" type="string" />
+    
+    <attribute name="closeable" value="false" type="boolean" />
+    <attribute name="isopen" value="true" type="boolean" />
+    
+    <attribute name="textInset" value="10" type="number" />
+    
+    <attribute name="initHeight" value="0" type="number"/>
+    
+    <attribute name="closedHeight" value="40" type="number"/>
+    
+    <handler name="oninit">
+        if (this.initHeight == 0) {
+            this.initHeight = this.height;
+        }
+    </handler>
+    
+    <method name="doOpen">
+        if (!this.isopen) {
+            this.toggleopen();
+        }
+    </method>
+    
+    <method name="toggleopen">
+        if (this.isopen) {
+            this.setAttribute("isopen",false);
+            this.setAttribute("height",this.closedHeight);
+            this.content.setAttribute("visibility","hidden");
+        } else {
+            this.setAttribute("isopen",true);
+            this.setAttribute("height",this.initHeight);
+            //if ($debug) Debug.write("toggleopen TRUE ",this.initHeight)
+            this.content.setAttribute("visibility","visible");
+        }
+    </method>
+    
+    <view name="_head" x="0" y="0" width="${ parent.width }" height="24" 
+    	  clickable="$once{ this.parent.closeable }" >
+        
+        <handler name="onclick">
+        	if (this.parent.closeable) {
+        		this.parent.toggleopen();
+        	}
+        </handler>
+        
+        <view x="8" y="4" visible="${ this.parent.parent.closeable }">
+            
+	        <view visible="${ !this.parent.parent.parent.isopen }" x="2" y="3" resource="conferenceBox_button_min_rsc">
+	            <handler name="onmouseup">
+	                this.parent.parent.parent.toggleopen();
+	            </handler>                                  
+	        </view>
+	        <view visible="${ this.parent.parent.parent.isopen }" x="2" y="3" resource="conferenceBox_button_max_rsc">
+	            <handler name="onmouseup">
+	                this.parent.parent.parent.toggleopen();
+	            </handler>                                  
+	        </view>
+            
+        </view>
+
+        <text x="$once{ parent.parent.textInset }" fontstyle="bold" fontsize="14" fgcolor="0xFFFFFF" 
+              text="${ parent.parent.headerText }" valign="middle"></text>
+        
+    </view>  
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/conferencebox/library.lzx b/WebContent/src/base/components/conferencebox/library.lzx
new file mode 100644
index 0000000..c00e280
--- /dev/null
+++ b/WebContent/src/base/components/conferencebox/library.lzx
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <resource name="conferenceBox_button_min_rsc" src="resources/box_closed.png" />
+    
+    <resource name="conferenceBox_button_max_rsc" src="resources/box_open.png" />
+    
+    <resource name="kaleidoscope_textbox_milk" 
+          src="resources/milk.swf" />
+
+    <include href="conferenceBox.lzx" />
+
+</library>
diff --git a/WebContent/src/base/components/conferencebox/resources/box_closed.fla b/WebContent/src/base/components/conferencebox/resources/box_closed.fla
new file mode 100644
index 0000000..66e7459
--- /dev/null
+++ b/WebContent/src/base/components/conferencebox/resources/box_closed.fla
Binary files differ
diff --git a/WebContent/src/base/components/conferencebox/resources/box_closed.png b/WebContent/src/base/components/conferencebox/resources/box_closed.png
new file mode 100644
index 0000000..49f20a3
--- /dev/null
+++ b/WebContent/src/base/components/conferencebox/resources/box_closed.png
Binary files differ
diff --git a/WebContent/src/base/components/conferencebox/resources/box_open.fla b/WebContent/src/base/components/conferencebox/resources/box_open.fla
new file mode 100644
index 0000000..9ea85a7
--- /dev/null
+++ b/WebContent/src/base/components/conferencebox/resources/box_open.fla
Binary files differ
diff --git a/WebContent/src/base/components/conferencebox/resources/box_open.png b/WebContent/src/base/components/conferencebox/resources/box_open.png
new file mode 100644
index 0000000..b5873a8
--- /dev/null
+++ b/WebContent/src/base/components/conferencebox/resources/box_open.png
Binary files differ
diff --git a/WebContent/src/base/components/conferencebox/resources/milk.swf b/WebContent/src/base/components/conferencebox/resources/milk.swf
new file mode 100644
index 0000000..e52a1f8
--- /dev/null
+++ b/WebContent/src/base/components/conferencebox/resources/milk.swf
Binary files differ
diff --git a/WebContent/src/base/components/explorer/explorerBox.lzx b/WebContent/src/base/components/explorer/explorerBox.lzx
new file mode 100644
index 0000000..3d2e8d4
--- /dev/null
+++ b/WebContent/src/base/components/explorer/explorerBox.lzx
@@ -0,0 +1,406 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="explorerBox" extends="view" width="250" y="100" visibility="hidden"
+    height="400" bgcolor="$once{ canvas.getThemeColor('styleMenuBarBaseColor') }" 
+	onmousedown="this._startDragState(this)" onmouseup="this._removeDragState(this)" >
+
+	<attribute name="showWindowEffect" value="false" type="boolean" />
+	
+	<attribute name="annimationStartStyle" value="center" type="string" />
+	
+	<attribute name="annimationColor" value="$once{ canvas.getThemeColor('basebgcolorizer') }" type="string" />
+
+	<event name="animationInited" />
+
+    <handler name="oninit">
+    	<![CDATA[
+	    	//if($debug) Debug.write("explorerBox/oninit showWindowEffect? ",canvas.showWindowEffect);
+	    	if (canvas.showWindowEffect=="y" || this.showWindowEffect){
+	    		//if($debug) Debug.write("explorerBox/showWindowEffect == YES");
+	    		if (this.annimationStartStyle == "center") {
+	    			new lz.boxInitEffect(parent,{
+		    					x:this.x+(this.width/2)-50,
+		    					y:this.y+(this.height/2)-10,
+		    					zielx:this.x,
+		    					ziely:this.y,
+		    					bgcolor:annimationColor,
+		    					zielwidth:this.width,
+		    					zielheight:this.height,
+		    					objRef:this
+	    					});
+	    		} else if (this.annimationStartStyle == "mouse"){
+	    			new lz.boxInitEffect(parent,{
+		    					x:parent.getMouse("x"),
+		    					y:parent.getMouse("y"),
+		    					width:2,
+		    					height:2,
+		    					zielx:this.x,
+		    					ziely:this.y,
+		    					bgcolor:annimationColor,
+		    					zielwidth:this.width,
+		    					zielheight:this.height,
+		    					objRef:this
+	    					});
+				} else {
+					if ($debug) Debug.warn("Unkown annimationStartStyle");
+				}
+	    	} else {
+	    		this.sendAnniComplete();
+	    	}
+    	]]>
+    </handler>
+    
+    <method name="sendAnniComplete">
+    	//if($debug) Debug.write("sendAnniComplete");
+    	this.setAttribute('visibility','visible');
+    	this.animationInited.sendEvent(null);
+    	this.setShadow(); 	
+    </method>
+
+    <method name="setShadow" args="bool">
+        this.hasshadow = bool;
+        <![CDATA[
+        if (this.isinited){
+            this.normalMC = this.getDisplayObject();
+            //Debug.write(this.normalMC);
+            ////Debug.write("this.normalMC: ",this.normalMC);
+            ////Debug.write("this: ",this);
+           	this.displacementMap = new flash.filters.DropShadowFilter();
+            this.normalMC.filters = [this.displacementMap];
+        }
+        ]]>              
+    </method>	
+          
+	<!--- The Title of this Box -->
+	<attribute name="title" value="defaulttitle" type="string" />
+	
+	<!--- if this Box should be closeable -->
+	<attribute name="closable" value="false" type="boolean" />
+    
+    <!--- if this Box should be resizeable  -->
+    <attribute name="resizeable" value="false" type="boolean" />
+	
+	<!--- Can this Box be docked to others and 
+			the width/height of parent compoent barrier -->
+	<attribute name="docking" value="false" type="boolean" />
+	
+	<!--- Hard to explain but its clear if you play around 
+		with that. Its the number of minimum pixels before 
+		the "docking" effect will be there -->
+	<attribute name="dockingbarrier" value="15" type="number" />
+	
+	<!--- the Event will be thrown if you close the Box -->
+	<event name="onclose" />
+	
+	<!---@keywords private the list of connected views -->
+	<attribute name="dockinglist" value="null" />
+	
+	<!--- @keywords private temp-older of x-distance to docked-Box  -->
+	<attribute name="tempXdistance" value="0" type="number" />
+
+	<!--- @keywords private temp-older of y-distance to docked-Box  -->
+	<attribute name="tempYdistance" value="0" type="number" />
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="isopen" value="true" type="boolean" />
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="open" value="true" type="boolean" />	
+	
+	<!--- @keywords private  -->
+	<attribute name="initheight" value="0" type="number" />
+	
+	<!-- do not allow draging of window -->
+	<attribute name="allowDragging" value="true" type="boolean" />
+	
+	<!--- @keywords private store initial height so toggleopen can reset height  -->
+	<handler name="oninit">
+		this.initheight=this.height;
+		////Debug.write("this.isopen: ",this.isopen);
+		if (!this.open) toggleopen();
+	</handler>
+	
+	<method name="close">
+		if (this.onclose) this.onclose.sendEvent();
+		this.doDestroy();
+	</method>
+	
+	<method name="toggleopen">
+		////Debug.write("this.isopen",this.isopen);
+		this.setAttribute('isopen',!this.isopen);
+		if (this.isopen){
+			_calcdockingList();
+			for (var eg in this.dockinglist){
+				if(this.dockinglist[eg].docking){
+					////Debug.write("this.dockinglist[eg]: ",this.dockinglist[eg].title);
+					////Debug.write("open new y",this.y+this.initheight);
+					this.dockinglist[eg].toggleOpenByParent(this.initheight-22);
+					this.dockinglist[eg].setAttribute('y',this.y+this.initheight);
+					
+				}
+			}			
+			this.setAttribute('height',this.initheight);
+		} else {
+			_calcdockingList();
+			for (var eg in this.dockinglist){
+				if(this.dockinglist[eg].docking){
+					////Debug.write("this.dockinglist[eg]: ",this.dockinglist[eg].title);
+					this.dockinglist[eg].toggleOpenByParent(-(this.initheight-22));
+					this.dockinglist[eg].setAttribute('y',this.y+22);
+				}
+			}	
+			this.setAttribute('height',22);		
+		}
+	</method>
+	
+	<method name="toggleOpenByParent" args="changeY">
+		////Debug.write("+++++ toggleOpenByParent +++++ changeY: ",this.title,changeY);
+		var tempList=new Array();
+		<![CDATA[
+		//check for dockable stuff which is connected to this Box
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				var proof=false;
+				////Debug.write("found some: ",this.parent.subviews[eg].title);
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < 1 ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -1 ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					proof=true;
+				}
+					
+				if (proof) tempList.push(this.parent.subviews[eg]);
+			}
+		}
+		]]>
+		////Debug.write("tempList.length: ",tempList.length);
+		if (tempList.length!=0){
+			for (var eg in tempList){
+				if(tempList[eg].docking){
+					////Debug.write("toggleOpenByParent 1 [eg],changeY: ",tempList[eg].title,changeY);
+					tempList[eg].toggleOpenByParent(changeY);
+					tempList[eg].setAttribute('y',tempList[eg].y+changeY);
+				}
+			}	
+		}
+		
+	</method>
+	
+	<!--- @keywords private  -->
+	<method name="_removeDragState" args="obj">
+	    if (!this.allowDragging) {
+	       return;
+	    }
+		//It's important to remove the dragger and do docking stuff before you check for connected Boxes
+		dragger.remove();
+		if (obj==this){
+			if (docking) arrangePosition();
+		} else {
+			if (docking) _lookforParentOnly(obj);
+		}
+			
+		//check for connected Boxes
+		for (var eg in this.dockinglist){
+			if(this.dockinglist[eg].docking){
+				this.dockinglist[eg]._removeDragState(this);
+			}
+		}
+
+	</method>
+
+	
+	<!--- @keywords private
+		the arg obj is needed because the dragging can be called by the Box itself
+		or by a Box which is connected to this Box!  -->
+	<method name="_startDragState" args="obj">
+		this.bringToFront();
+		if (!this.allowDragging) {
+           return;
+        }
+		_calcdockingList();
+		for (var eg in this.dockinglist){
+			if(this.dockinglist[eg].docking){
+				this.dockinglist[eg]._startDragState(this);
+			}
+		}
+		//store position cause it wasn't dragged by itself
+		if (obj!=this){
+			storeAdjustmentToParent(obj.x,obj.y);
+		}
+		dragger.apply();
+	</method>
+	
+	<!--- Calc the List of Boxes which will be dragged and setposition if this Box
+		will be dragged,docked or minimized/maximized  -->
+	<method name="_calcdockingList">
+		//Clear list of conencted Boxes
+		this.dockinglist=new Array();
+		<![CDATA[
+		//check for dockable stuff which is connected to this Box
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg]["docking"] && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				var proof=false;
+
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < 1 ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -1 ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					proof=true;
+				}
+
+				if (proof) this.dockinglist.push(this.parent.subviews[eg]);
+			}
+		}
+		]]>
+		////Debug.write("this.dockinglist.length:",this.dockinglist.length);
+	</method>
+	
+	<!--- @keywords private  -->
+	<method name="arrangePosition">
+		//do the magic
+		//the idea is: look for all on the view container one level above this one
+		//and look for the width/height and 0/0 and look for "dockable" stuff there
+		var newx=this.x;
+		var newy=this.y;
+	  
+		<![CDATA[
+				
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg]["docking"] && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				//left box-border
+				if ( ( ((this.x+this.width)-this.parent.subviews[eg].x) < this.dockingbarrier ) && ( ((this.x+this.width)-this.parent.subviews[eg].x) > -this.dockingbarrier ) &&  ( (this.y+this.height) > this.parent.subviews[eg].y ) &&  ( this.y < (this.parent.subviews[eg].y+this.parent.subviews[eg].height) ) ){
+					newx= ( this.parent.subviews[eg].x - this.width );
+				}
+				//right box-border
+				if ( ( ((this.parent.subviews[eg].x+this.parent.subviews[eg].width)-this.x)<this.dockingbarrier ) && ( ((this.parent.subviews[eg].x+this.parent.subviews[eg].width)-this.x)>-this.dockingbarrier ) &&  ( (this.y+this.height) > this.parent.subviews[eg].y ) &&  ( this.y < (this.parent.subviews[eg].y+this.parent.subviews[eg].height) ) ){
+					newx= ( this.parent.subviews[eg].x + this.parent.subviews[eg].width );
+				}
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < this.dockingbarrier ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -this.dockingbarrier ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					newy = this.parent.subviews[eg].y-this.height;
+				}
+				//bottom box-border
+				if ( ( ((this.parent.subviews[eg].y+this.parent.subviews[eg].height)-this.y) < this.dockingbarrier ) && ( ((this.parent.subviews[eg].y+this.parent.subviews[eg].height)-this.y) > -this.dockingbarrier ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					newy = this.parent.subviews[eg].y+this.parent.subviews[eg].height;
+				}
+			}
+		}
+		
+		//Check for Borders
+		//should be done _after_ checking for other dockable stuff so it gets 
+		//priority to dock against the border of parent view
+		if (this.x<this.dockingbarrier){
+			newx=0;
+		}
+		if (this.y<this.dockingbarrier){
+			newy=0;
+		}
+		if ( (this.parent.width-(this.x+this.width))<this.dockingbarrier){
+			newx=this.parent.width-this.width;
+		}
+		if ( (this.parent.height-(this.y+this.height))<this.dockingbarrier){
+			newy=this.parent.height-this.height;
+		}
+		
+		//set position
+		this.setAttribute('x',newx);
+		this.setAttribute('y',newy);
+		]]>
+	</method>
+	
+	<method name="storeAdjustmentToParent" args="objX,objY">
+		this.tempXdistance=objX-this.x;
+		this.tempYdistance=objY-this.y;
+	</method>
+	
+	<!--- @keywords private 
+		this method is needed because if the dragging end and
+		it was not dragged _itself_ it was draged just because a connected
+		dockable Box was dragged than it could be that the connected
+		Box was forced to dock against something different onmouseup
+		so you have to rearrange the old "adjustment"	-->
+	<method name="_lookforParentOnly" args="obj">
+		<![CDATA[		
+		var newx=obj.x-tempXdistance;
+		var newy=obj.y-tempYdistance;
+		
+		this.setAttribute('x',newx);
+		this.setAttribute('y',newy);
+		]]>
+	</method>
+	
+	<dragstate name="dragger" />
+    
+    <animator attribute="y" to="20" duration="1000" started="false" />
+        
+    <animator name="doOut" attribute="y" to="-500" duration="1000" started="false" onstop="parent.doDestroy()" />    
+    
+    <method name="doDestroy">
+        this.destroy();
+    </method>
+	
+	<view width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" 
+		  x="1" y="1" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" />
+	<view x="1" y="1" width="${ this.parent.width-2 }" height="20" >
+	
+		<gradientview x="0" width="${ this.parent.width }" height="20"
+				colorFrom="$once{ canvas.getThemeColor('baseMousecolorizer') }"
+				colorTo="$once{ canvas.getThemeColor('styleMenuBarBaseColor') }" >
+		</gradientview>
+		
+        <text fontsize="10" height="17" x="6" y="1" text="${ this.parent.parent.title }" 
+			fgcolor="0xFFFFFF" resize="true" fontstyle="bold" />
+			
+		<view visible="${ this.parent.parent.closable }" x="${ this.parent.parent.width-20 }" 
+			y="2" resource="btn_presenter_close"
+                onmouseover="this.setAttribute('frame',2)"
+                onmouseout="this.setAttribute('frame',1)"
+                onmousedown="this.setAttribute('frame',3)"
+                onmouseup="this.setAttribute('frame',1)" >
+			<handler name="onclick">
+				this.parent.parent.close();
+			</handler>									
+		</view>
+	</view>
+    <handler name="onaddsubview" args="v">
+		////Debug.write("onaddsubview",v);
+		if (v.parent.subviews.length>2) this._resizeview.bringToFront();
+    </handler>
+    <view visible="${ this.parent.resizeable }" name="_resizeview" 
+    	  x="${ this.parent.width - 17 }" y="${ this.parent.height - 17 }" 
+        resource="explorer_resize_rsc" cursor="explorer_resizemouse_rsc" 
+        onmousedown="this.parent.rs.apply()"
+        onmouseup="this.parent.rs.remove()" >
+    	<handler name="oninit">
+    		//if ($debug) Debug.write("setTint");
+    		//TODO: Fix this, does not work at the moment
+    		//http://code.google.com/p/openmeetings/issues/detail?id=470
+    		this.setColor(canvas.getThemeColor('baseMousecolorizer'));
+    	</handler>  	
+    </view>
+    <resizestate name="rs"/>
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/explorer/labelexplorerBox.lzx b/WebContent/src/base/components/explorer/labelexplorerBox.lzx
new file mode 100644
index 0000000..66a170c
--- /dev/null
+++ b/WebContent/src/base/components/explorer/labelexplorerBox.lzx
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="labelExplorerBox" extends="explorerBox" >
+
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.title=canvas.getLabelName(this.labelid);
+	</method>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/explorer/library.lzx b/WebContent/src/base/components/explorer/library.lzx
new file mode 100644
index 0000000..d53d994
--- /dev/null
+++ b/WebContent/src/base/components/explorer/library.lzx
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="incubator/gradientview.lzx" /> 
+
+	<include href="resources/" />
+	
+	<include href="explorerBox.lzx" />
+	<include href="labelexplorerBox.lzx" />
+
+    
+</library>
diff --git a/WebContent/src/base/components/explorer/resources/explorbar_maximize_dn.png b/WebContent/src/base/components/explorer/resources/explorbar_maximize_dn.png
new file mode 100644
index 0000000..e5ae343
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/explorbar_maximize_dn.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/explorbar_maximize_mo.png b/WebContent/src/base/components/explorer/resources/explorbar_maximize_mo.png
new file mode 100644
index 0000000..093a0b0
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/explorbar_maximize_mo.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/explorbar_maximize_no.png b/WebContent/src/base/components/explorer/resources/explorbar_maximize_no.png
new file mode 100644
index 0000000..fca6ec8
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/explorbar_maximize_no.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/explorbar_minimize_dn.png b/WebContent/src/base/components/explorer/resources/explorbar_minimize_dn.png
new file mode 100644
index 0000000..e05de83
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/explorbar_minimize_dn.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/explorbar_minimize_mo.png b/WebContent/src/base/components/explorer/resources/explorbar_minimize_mo.png
new file mode 100644
index 0000000..faba70d
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/explorbar_minimize_mo.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/explorbar_minimize_no.png b/WebContent/src/base/components/explorer/resources/explorbar_minimize_no.png
new file mode 100644
index 0000000..b4dafa3
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/explorbar_minimize_no.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/explorerbar.png b/WebContent/src/base/components/explorer/resources/explorerbar.png
new file mode 100644
index 0000000..4cb2d59
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/explorerbar.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/feather-1.png b/WebContent/src/base/components/explorer/resources/feather-1.png
new file mode 100644
index 0000000..d8f5175
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/feather-1.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/feather-16x16.png b/WebContent/src/base/components/explorer/resources/feather-16x16.png
new file mode 100644
index 0000000..0db0d36
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/feather-16x16.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/library.lzx b/WebContent/src/base/components/explorer/resources/library.lzx
new file mode 100644
index 0000000..8d3051d
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/library.lzx
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<resource src="explorerbar.png" name="explorer_thumb_rsc" />
+
+<resource name="explorer_thumb_rsc" src="feather-16x16.png"/>
+
+
+<resource name="explorer_button_min_rsc" >
+	<frame src="explorbar_minimize_no.png" />
+	<frame src="explorbar_minimize_mo.png" />
+	<frame src="explorbar_minimize_dn.png" />
+</resource>
+
+<resource name="explorer_button_max_rsc" >
+	<frame src="explorbar_maximize_no.png" />
+	<frame src="explorbar_maximize_mo.png" />
+	<frame src="explorbar_maximize_dn.png" />
+</resource>
+
+<resource name="explorer_resize_rsc" src="resizer.swf" />
+
+<resource name="explorer_resizemouse_rsc" src="resizemouse.png" />
+
+
+
+</library>
diff --git a/WebContent/src/base/components/explorer/resources/resizemouse.png b/WebContent/src/base/components/explorer/resources/resizemouse.png
new file mode 100644
index 0000000..be3164f
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/resizemouse.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/resizer.fla b/WebContent/src/base/components/explorer/resources/resizer.fla
new file mode 100644
index 0000000..07de957
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/resizer.fla
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/resizer.png b/WebContent/src/base/components/explorer/resources/resizer.png
new file mode 100644
index 0000000..2c951fe
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/resizer.png
Binary files differ
diff --git a/WebContent/src/base/components/explorer/resources/resizer.swf b/WebContent/src/base/components/explorer/resources/resizer.swf
new file mode 100644
index 0000000..2e5d0da
--- /dev/null
+++ b/WebContent/src/base/components/explorer/resources/resizer.swf
Binary files differ
diff --git a/WebContent/src/base/components/iconView.lzx b/WebContent/src/base/components/iconView.lzx
new file mode 100644
index 0000000..494c5f8
--- /dev/null
+++ b/WebContent/src/base/components/iconView.lzx
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="iconView" extends="view">
+    <attribute name="enabled" value="true" type="boolean" />
+    <handler name="onenabled" args="ena">
+        //Debug.write("onenabled: ",ena);
+        ( this.enabled ) ? this.setAttribute('frame',1) : this.setAttribute('frame',4);
+    </handler>
+    <handler name="onmouseover">
+        if (this.enabled) this.setAttribute('frame',2);
+    </handler>
+    <handler name="onmouseout">
+        if (this.enabled) this.setAttribute('frame',1);
+    </handler>
+    <handler name="onmousedown">
+        if (this.enabled) this.setAttribute('frame',3);
+    </handler>
+    <handler name="onmouseup">
+        if (this.enabled) this.setAttribute('frame',1);
+    </handler>            
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/labelRadioButton.lzx b/WebContent/src/base/components/labelRadioButton.lzx
new file mode 100644
index 0000000..e11d718
--- /dev/null
+++ b/WebContent/src/base/components/labelRadioButton.lzx
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="labelRadioButton" extends="radiobutton" style="componentStyle">
+
+	<attribute name="labelid" value="0" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/labeltabelement.lzx b/WebContent/src/base/components/labeltabelement.lzx
new file mode 100644
index 0000000..bab29ad
--- /dev/null
+++ b/WebContent/src/base/components/labeltabelement.lzx
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="labeltabelement" extends="tabelement" style="componentStyle">
+
+	<attribute name="labelid" value="0" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/library.lzx b/WebContent/src/base/components/library.lzx
new file mode 100644
index 0000000..a4d80cf
--- /dev/null
+++ b/WebContent/src/base/components/library.lzx
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	
+	<include href="miniIcons.lzx" />
+    <include href="iconView.lzx" />
+    <include href="miniIconsNew.lzx" />
+    <include href="resetCombobox.lzx" />
+    <include href="updatecheckbox.lzx" />
+    <include href="tableCombobox.lzx" />
+    <include href="tableListItem.lzx" />
+    <include href="labelRadioButton.lzx" />
+    <include href="labeltabelement.lzx" />
+    
+    <include href="scrollbars/" />
+    <include href="text/" />
+    <include href="omcharts/" />
+    <include href="button/" />
+    <include href="explorer/" />    
+    <include href="panel/" />  
+    <include href="turnoverlist/" />
+    <include href="turnoverlistpaged/" />
+    <include href="calendar/" />
+    <include href="simplevaluelist/" />
+    <include href="upload/" /> 
+    <include href="validbox/" />
+    <include href="presenter/" />
+    <include href="lps/" />
+    <include href="conferencebox/" />
+
+</library>
diff --git a/WebContent/src/base/components/lps/basePropertySelector.lzx b/WebContent/src/base/components/lps/basePropertySelector.lzx
new file mode 100644
index 0000000..2d9a099
--- /dev/null
+++ b/WebContent/src/base/components/lps/basePropertySelector.lzx
@@ -0,0 +1,48 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="hidePropertyView" extends="view"
+	   width="$once{ parent.width }" height="$once{ parent.height }"
+	   opacity="0.7" bgcolor="0xFFFFFF" />
+
+<class name="basePropertySelector" extends="view">
+	
+	<!--- position of the SliderWin or ColorPicker -->
+	<attribute name="boxPosition" value="down" type="string" />
+	
+	<attribute name="isEnabled" value="true" type="boolean" />
+	<attribute name="enabledView" value="null" />
+	
+	<method name="setEnabled" args="b">
+		this.setAttribute('isEnabled',b);
+		if (this.enabledView != null) {
+			this.enabledView.destroy();
+			this.enabledView = null;
+		}
+		if (!b) {
+			this.enabledView = new lz.hidePropertyView(this);
+		} 
+	</method>
+    
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/lps/changeWidthLetterSlider.lzx b/WebContent/src/base/components/lps/changeWidthLetterSlider.lzx
new file mode 100644
index 0000000..646de89
--- /dev/null
+++ b/WebContent/src/base/components/lps/changeWidthLetterSlider.lzx
@@ -0,0 +1,146 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>  
+
+<class name="changeWidthLetterSlider" extends="basePropertySelector" bgcolor="white" width="60" height="24">
+
+    <attribute name="numberAlign" value="right" type="string"/>
+    <attribute name="minimum" type="number" value="4" />
+    <attribute name="maximum" type="number" value="100" />
+    <attribute name="step" value="1" type="number"/>
+    <attribute name="initialNumberInit" value="1" type="number"/>
+    <attribute name="initialNumber" value="12" type="number"/>
+    
+    <event name="onplus" />
+    <event name="onminus" />
+    
+    <handler name="oninit">
+        this.initialNumberInit=initialNumber;
+    </handler>
+    
+    <method name="setSliderValue" args="v">
+    	this.initialNumber = v;
+    	this.numericValue.setAttribute('text',this.initialNumber);
+    	this.setEnabled(true);
+    </method>
+    
+    <method name="getValue">
+        return this.initialNumber;
+    </method>
+
+
+    <edittext name="numericValue" width="34" height="24" text="$once{ parent.initialNumber }" >
+        <attribute name="tempValue" value="$once{ parent.initialNumber }" type="number" />
+        <handler name="onfocus">
+            this.tempValue = Number(this.getText());
+        </handler>            
+        <handler name="onblur">
+            <![CDATA[
+                var t = parseInt(this.getText());
+                if (isNaN(t) || t > this.parent.maximum || t < this.parent.minimum){
+                    t = this.tempValue;
+                    this.setAttribute('text',t);
+                    lz.Focus.setFocus(this);
+                } else {
+                    this.tempValue = t;
+                    parent.setAttribute('initialNumber',t);
+                }
+            ]]>
+        </handler>
+    </edittext>
+
+
+    <button name="arrowView" x="36" width="24" y="1" height="23" >
+        <view name="arrow_down_slider" resource="arrow_down_slider_rsc" 
+            x="4" y="3" />
+            <handler name="onclick">
+                var pick = new lz.changeWidthLetterSliderWin(canvas,{initialNumber:parent.numericValue.tempValue,btnRef:this.parent,x:(parent.getAttributeRelative('x',canvas)),y:(parent.getAttributeRelative('y',canvas))});
+                lz.ModeManager.makeModal( pick );
+            </handler>
+        <labelTooltip labelid="431" />
+    </button>
+    
+</class>
+    
+<class name="closableViewLetter" extends="view">
+    <method name="close">
+        lz.ModeManager.release(this);
+        this.destroy();
+    </method>
+</class>    
+    
+<class name="changeWidthLetterSliderWin" extends="closableViewLetter" bgcolor="white" 
+    clickable="true" width="58" height="140" >
+    
+    <attribute name="btnRef" value="null" />
+    <attribute name="initialNumber" value="12" type="number"/>
+    
+    <!--- @keywords private -->
+    <method name="passModeEvent" args="eventStr,view" > 
+        <![CDATA[
+            if ( eventStr == "onmousedown"  ){
+                if ( view != null ) {
+                   if ( !view.childOf(this) ) {
+                        this.close();
+                   }
+                } else {
+                    this.close();
+                }
+            }
+            if (view && view.childOf(this)) {
+                if (view[ eventStr ]) {
+                    view[ eventStr ].sendEvent( view );
+                }
+                return false;
+            }
+            return true;
+        ]]> 
+    </method>
+
+    <view bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }" width="58" height="138" x="1" y="1" />
+    
+    <vslider name="_slider" height="120" y="10" x="10" minvalue="4" maxvalue="100"
+        initvalue="$once{ parent.initialNumber }" showrange="false" >
+        <handler name="onvalue" args="v">
+            parent.btnRef.numericValue.tempValue = Number(v);
+            parent.btnRef.numericValue.setAttribute('text',v);
+            parent.btnRef.setAttribute('initialNumber',v);
+        </handler>
+        <handler name="onvalueChosenFinal">
+            parent.close();
+        </handler>
+    </vslider>
+    
+    <view name="_close" x="$once{ parent.width-this.width-2 }" y="2"
+        resource="btn_presenter_close"
+        onmouseover="this.setAttribute('frame',2)"
+        onmouseout="this.setAttribute('frame',1)"
+        onmousedown="this.setAttribute('frame',3)"
+        onmouseup="this.setAttribute('frame',1)" >
+        <handler name="onclick">
+            this.setAttribute('frame',2);
+            this.parent.close();
+        </handler>
+        <labelTooltip labelid="430" />
+    </view>     
+        
+</class>    
+
+</library>
diff --git a/WebContent/src/base/components/lps/changeWidthSlider.lzx b/WebContent/src/base/components/lps/changeWidthSlider.lzx
new file mode 100644
index 0000000..dfa746a
--- /dev/null
+++ b/WebContent/src/base/components/lps/changeWidthSlider.lzx
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>  
+
+<class name="changeWidthSlider" extends="basePropertySelector" bgcolor="0xFFFFFF" width="60" height="24">
+
+    <attribute name="numberAlign" value="right" type="string"/>
+    <attribute name="minimum" type="number" value="1" />
+    <attribute name="maximum" type="number" value="100" />
+    <attribute name="step" value="1" type="number"/>
+    <attribute name="initialNumberInit" value="1" type="number"/>
+    <attribute name="initialNumber" value="3" type="number"/>
+    
+    <attribute name="boxPosition" value="down" type="string"/>
+    
+    <attribute name="labelid" value="429" type="number"/>
+    
+    <event name="onplus" />
+    <event name="onminus" />
+    
+    <handler name="oninit">
+        this.initialNumberInit=initialNumber;
+    </handler>
+    
+    <method name="getValue">
+        return this.initialNumber;
+    </method>
+    
+    <method name="setSliderValue" args="v">
+    	this.initialNumber = v;
+    	this.numericValue.setAttribute('tempValue',this.initialNumber);
+    	this.numericValue.setAttribute('text',this.initialNumber);
+    	if ($debug) Debug.write("setSliderValue ",v);
+    	this.setEnabled(true);
+    </method>
+
+    <edittext name="numericValue" width="34" height="24" text="$once{ parent.initialNumber }" >
+        <attribute name="tempValue" value="$once{ parent.initialNumber }" type="number" />
+        <handler name="onfocus">
+            this.tempValue = Number(this.getText());
+        </handler>            
+        <handler name="onblur">
+            <![CDATA[
+                var t = parseInt(this.getText());
+                if (isNaN(t) || t > this.parent.maximum || t < this.parent.minimum){
+                    t = this.tempValue;
+                    this.setAttribute('text',t);
+                    lz.Focus.setFocus(this);
+                } else {
+                    this.tempValue = t;
+                    parent.setAttribute('initialNumber',t);
+                }
+            ]]>
+        </handler>
+    </edittext>
+
+
+    <button name="arrowView" x="36" width="24" y="1" height="23" >
+        <view name="arrow_down_slider" resource="arrow_down_slider_rsc" 
+            x="4" y="3" />
+            <handler name="onclick">
+            	if (this.parent.boxPosition=="up"){
+            		var pick = new lz.changeWidthSliderWin(canvas,{
+					            			initialNumber:parent.numericValue.tempValue,
+					            			btnRef:this.parent,x:(parent.getAttributeRelative('x',canvas)),
+					            			maxvalue:parent.maximum,
+					            			y:(parent.getAttributeRelative('y',canvas)-140+parent.height)
+				            			});
+            	} else {
+            		var pick = new lz.changeWidthSliderWin(canvas,{
+					            			initialNumber:parent.numericValue.tempValue,
+					            			btnRef:this.parent,x:(parent.getAttributeRelative('x',canvas)),
+					            			maxvalue:parent.maximum,
+					            			y:(parent.getAttributeRelative('y',canvas))
+				            			});
+            	}
+                lz.ModeManager.makeModal( pick );
+            </handler>
+        <labelTooltip labelid="$once{ parent.parent.labelid }" />
+    </button>
+    
+</class>
+    
+<class name="closableView" extends="view">
+    <method name="close">
+        lz.ModeManager.release(this);
+        this.destroy();
+    </method>
+</class>    
+    
+<class name="changeWidthSliderWin" extends="closableView" bgcolor="white" 
+    clickable="true" width="58" height="140" >
+    
+    <attribute name="btnRef" value="null" />
+    <attribute name="initialNumber" value="3" type="number"/>
+    <attribute name="maxvalue" value="100" type="number" />
+    
+    <!--- @keywords private -->
+    <method name="passModeEvent" args="eventStr,view" > 
+        <![CDATA[
+            if ( eventStr == "onmousedown"  ){
+                if ( view != null ) {
+                   if ( !view.childOf(this) ) {
+                        this.close();
+                   }
+                } else {
+                    this.close();
+                }
+            }
+            if (view && view.childOf(this)) {
+                if (view[ eventStr ]) {
+                    view[ eventStr ].sendEvent( view );
+                }
+                return false;
+            }
+            return true;
+        ]]> 
+    </method>
+
+    <view bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }" width="58" height="138" x="1" y="1" />
+    
+    <vslider name="_slider" height="120" y="10" x="10" minvalue="1" maxvalue="$once{ parent.maxvalue }" 
+        initvalue="$once{ parent.initialNumber }" showrange="false" showvalue="true">
+        <handler name="onvalue" args="v">
+            //if ($debug) Debug.write("onvalue",v);
+            parent.btnRef.numericValue.tempValue = Number(v);
+            parent.btnRef.numericValue.setAttribute('text',v);
+            parent.btnRef.setAttribute('initialNumber',v);
+        </handler>
+        <handler name="onvalueChosenFinal">
+            parent.close();
+        </handler>        
+    </vslider>
+    
+    <view name="_close" x="$once{ parent.width-this.width-2 }" y="2"
+        resource="btn_presenter_close"
+        onmouseover="this.setAttribute('frame',2)"
+        onmouseout="this.setAttribute('frame',1)"
+        onmousedown="this.setAttribute('frame',3)"
+        onmouseup="this.setAttribute('frame',1)" >
+        <handler name="onclick">
+            this.setAttribute('frame',2);
+            this.parent.close();
+        </handler>
+        <labelTooltip labelid="430" />
+    </view>     
+        
+</class>    
+
+</library>
diff --git a/WebContent/src/base/components/lps/colorpicker.lzx b/WebContent/src/base/components/lps/colorpicker.lzx
new file mode 100644
index 0000000..dbd62d5
--- /dev/null
+++ b/WebContent/src/base/components/lps/colorpicker.lzx
@@ -0,0 +1,353 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!---
+      changed by swagner
+  -->
+<library>
+    
+    
+<class name="colorSlider" extends="slider" x="4"
+    minvalue="1" maxvalue="240" 
+    trackheight="4" thumbheight="12"
+    showrange="false" showvalue="true">
+    <attribute name="doSendValueEvent" value="false" type="boolean" />
+    <handler name="onvalue">
+        if (this.doSendValueEvent) { 
+            classroot.updateColor();
+        } else {
+            this.doSendValueEvent=true;
+        }
+    </handler>
+</class>    
+
+<class name="colorPot" width="13" height="13" 
+    onmouseout="">
+    <handler name="onmouseover">
+        var t = _root.createEmptyMovieClip('hans2',20);
+        var myColorTZ = new Color(t);
+        myColorTZ.setRGB(this.mycolor);        
+        this.setAttribute('mycolorString',this.parent.parent.parent.numberToRGB(myColorTZ));
+    </handler>
+    <attribute name="mycolor" type="color" value="0x000000"/>
+    <attribute name="mycolorString" type="string" value="0x000000"/>
+    <attribute name="listener" type="expression"/>
+    <handler name="onclick">
+        listener.changeColor(this.mycolor);
+        listener.close();
+    </handler>
+    <handler name="ondblclick">
+        listener.changeColor(this.mycolor);
+        listener.close();
+    </handler>    
+    <labelTooltip text="${ parent.mycolorString }" />
+    <view bgcolor="#444444" width="13" height="13" >
+        <view bgcolor="${classroot.mycolor}"  x="1" y="1" width="11" height="11"/>
+    </view>
+</class>
+  
+<class name="colorRow" layout="axis:x;spacing:-1" />
+    
+<class name="colorpicker" extends="guiPresenter" labelid="425" isdragable="false" 
+    minimizable="false" maximizable="false" fullToolBar="true" 
+    resizeable="false" width="250" height="154" >
+    
+    <attribute name="btnRef" value="null" />
+      
+    <attribute name="selectedColor" type="number" value="0x00aeef"/>
+    
+    <handler name="onclose">
+    	lz.ModeManager.release(this);
+        this.btnRef.closedColorPicker();
+        this.btnRef.setAttribute('selectedColor', this.selectedColor);
+        this.btnRef.setTransformedStringColor();        
+    </handler>
+    
+    <!--- @keywords private -->
+    <method name="passModeEvent" args="eventStr,view" > 
+        <![CDATA[
+           if ( eventStr == "onmousedown"  ){
+               if ( view != null ) {
+                  if ( !view.childOf(this) ) {
+                       this.close();
+                  }
+               } else {
+                   this.close();
+               }
+           }
+           if (view && view.childOf(this)) {
+               if (view[ eventStr ]) {
+                   view[ eventStr ].sendEvent( view );
+               }
+               return false;
+           }
+          return true;
+       ]]> 
+    </method>  
+    
+    <method name="doDefaultColor" args="thisC">
+        <![CDATA[            
+            var c = thisC.getRGB();
+            var r = (c >> 16) & 0xff;
+            var g = (c >> 8) &  0xff;
+            var b = c & 0xff;
+            ////Debug.write("r g b: ",r,g,b);
+            var hsl = RGBtoHLS(r,g,b);
+            ////Debug.write("doDefaultColor ",hsl);
+            this.updateSlidersByValue(hsl);
+            var rgb = HLStoRGB(s_hue.value, s_bri.value, s_sat.value);
+            var c = rgb.r << 16 | rgb.g << 8 | rgb.b
+            this.setAttribute('selectedColor', c);
+        ]]>    
+    </method>  
+    
+    <method name="updateColor" >
+        <![CDATA[
+            ////Debug.write("updateColor ");
+            var rgb = HLStoRGB(s_hue.value, s_bri.value, s_sat.value);
+            var c = rgb.r << 16 | rgb.g << 8 | rgb.b
+            this.setAttribute('selectedColor', c);
+
+        ]]>
+    </method>
+    
+    <method name="changeColor" args="c">
+        <![CDATA[
+            ////Debug.write("changeColor ");
+            this.setAttribute('selectedColor', c);
+            var r = (c >> 16) & 0xff;
+            var g = (c >> 8) &  0xff;
+            var b = c & 0xff;
+            var hsl = RGBtoHLS(r,g,b);
+            this.updateSlidersByValue(hsl);
+        ]]>
+    </method>
+    
+    <method name="updateSlidersByValue" args="hsl">
+        s_hue.doSendValueEvent=false;
+        s_hue.setValue(hsl.h);
+        s_bri.doSendValueEvent=false;
+        s_bri.setValue(hsl.l);
+        s_sat.doSendValueEvent=false;
+        s_sat.setValue(hsl.s);        
+    </method>
+    
+    <method name="numberToRGB" args="thisC">
+        <![CDATA[            
+            var c = thisC.getRGB();
+            var r = (c >> 16) & 0xff;
+            var g = (c >> 8) &  0xff;
+            var b = c & 0xff;
+            ////Debug.write("r g b: ",r,g,b);
+            
+            HEX_R = r.toString(16).toUpperCase();
+            HEX_G = g.toString(16).toUpperCase();
+            HEX_B = b.toString(16).toUpperCase();
+            
+            if (HEX_R.length < 2) {
+                HEX_R = "0"+HEX_R;
+            }
+            if (HEX_G.length < 2) {
+                HEX_G = "0"+HEX_G;
+            }
+            if (HEX_B.length < 2) {
+                HEX_B = "0"+HEX_B;
+            }
+            var hex = "0x"+HEX_R + HEX_G + HEX_B;
+
+            return hex;
+        ]]>
+    </method>
+    
+    <method name="RGBtoHLS" args="r,g,b">
+        <![CDATA[
+            var h,l,s;
+            var max = (Math.max(Math.max(r, g), b))/255;
+            var min = (Math.min(Math.min(r, g), b))/255;
+            var delta = max-min;
+            l = (max+min)/2;
+            s = (max == min) ? 0 : ((l <= 0.5) ? delta/l/2 : delta/(2-l*2));
+            if(r/255 == max) h = (g-b)/delta/255;
+            else if(g/255 == max) h = 2+(b-r)/delta/255;
+            else if(b/255 == max) h = 4+(r-g)/delta/255;
+            h *= 40;
+            if(h < 0) h += 240;
+            h = Math.round(h);
+            return {h:((isNaN(h)) ? 0 : h), l:Math.round(l*240), s:Math.round(s*240)};
+        ]]>
+    </method>
+    
+    <method name="HLStoRGB" args="h,l,s">
+        <![CDATA[
+            var r,g,b;
+            if(s == 0) {
+                r = g = b = Math.round(l/240*255);
+            } else {
+                h /= 240; l /= 240; s /= 240;
+                var temp4,temp3;
+                var temp2 = (l < 0.5) ? l*(s+1) : l+s-l*s;
+                var temp1 = l*2 - temp2;
+                for(var i=0; i<3; i++) {
+                    switch(i) {
+                        case 0: temp3 = h+1/3; break;
+                        case 1: temp3 = h; break;
+                        case 2: temp3 = h-1/3; break;
+                    }
+                    if(temp3 < 0) temp3++;
+                    else if(temp3 > 1) temp3--;
+                    if(temp3*6 < 1) temp4 = temp1+(temp2-temp1)*6*temp3;
+                    else if(temp3*2 < 1) temp4 = temp2;
+                    else if(temp3*3 < 2) temp4 = temp1+(temp2-temp1)*((2/3)-temp3)*6;
+                    else temp4 = temp1;
+                    switch(i) {
+                        case 0: r = Math.round(temp4*255); break;
+                        case 1: g = Math.round(temp4*255); break;
+                        case 2: b = Math.round(temp4*255); break;
+                    }
+                }
+            }
+            return {r:r, g:g, b:b};
+        ]]>
+    </method>
+    
+    
+    <text fontsize="8" x="$once{classroot.s_hue.width + classroot.s_hue.x}"
+          y="$once{classroot.s_hue.y - 4}" text="HUE" width="26"/>
+      
+    <colorSlider name="s_hue" y="102" />
+    
+    <text fontsize="8" x="$once{classroot.s_bri.width + classroot.s_bri.x}"
+          y="$once{classroot.s_bri.y - 4}" text="BRI" />
+      
+    <colorSlider name="s_bri" y="120" />
+    
+    <text fontsize="8" x="$once{classroot.s_sat.width + classroot.s_sat.x}"
+          y="$once{classroot.s_sat.y - 4}" text="SAT" />
+    
+    <colorSlider name="s_sat" y="138" />  
+    
+    
+    <!-- current color -->
+    <view name="c2" bgcolor="black" width="30" height="66" y="24" x="206">
+        <view name="current" x="1" y="1" bgcolor="${classroot.selectedColor}" 
+            width="$once{parent.width -2}" height="$once{parent.height -2}" />
+    </view>
+
+    <!-- default colors -->
+    <view x="4" y="26" layout="axis:y;spacing:-1" >
+
+        <colorRow>
+            <colorPot listener="$once{classroot}" mycolor="#ff0000" mycolorString="0xFF0000" />
+            <colorPot listener="$once{classroot}" mycolor="#ffff00" mycolorString="0xFFFF00" />
+            <colorPot listener="$once{classroot}" mycolor="#00ff00" mycolorString="0x00FF00" />
+            <colorPot listener="$once{classroot}" mycolor="#00ffff" mycolorString="0x00FFFF" />
+            <colorPot listener="$once{classroot}" mycolor="#0000ff" mycolorString="0x0000FF" />
+            <colorPot listener="$once{classroot}" mycolor="#ff00ff" mycolorString="0xFF00Ff" />
+            <colorPot listener="$once{classroot}" mycolor="#ffffff" mycolorString="0xFFFFFF" />
+            <colorPot listener="$once{classroot}" mycolor="#ebebeb" mycolorString="0xEBEBEB" />
+            <colorPot listener="$once{classroot}" mycolor="#e1e1e1" mycolorString="0xE1E1E1" />
+            <colorPot listener="$once{classroot}" mycolor="#d7d7d7" mycolorString="0xD7D7D7" />
+            <colorPot listener="$once{classroot}" mycolor="#cccccc" mycolorString="0xCCCCCC" />
+            <colorPot listener="$once{classroot}" mycolor="#c2c2c2" mycolorString="0xC2C2C2" />
+            <colorPot listener="$once{classroot}" mycolor="#b7b7b7" mycolorString="0xB7B7B7" />
+            <colorPot listener="$once{classroot}" mycolor="#acacac" mycolorString="0xACACAC" />
+            <colorPot listener="$once{classroot}" mycolor="#a0a0a0" mycolorString="0xA0A0A0" />
+            <colorPot listener="$once{classroot}" mycolor="#959595" mycolorString="0x959595" />
+        </colorRow>
+        <colorRow>
+            <colorPot listener="$once{classroot}" mycolor="#ee1d24" mycolorString="0xEE1D24" />
+            <colorPot listener="$once{classroot}" mycolor="#fff100" mycolorString="0xFFF100" />
+            <colorPot listener="$once{classroot}" mycolor="#00a650" mycolorString="0x00A650" />
+            <colorPot listener="$once{classroot}" mycolor="#00aeef" mycolorString="0x00AEEF" />
+            <colorPot listener="$once{classroot}" mycolor="#2f3192" mycolorString="0x2F3192" />
+            <colorPot listener="$once{classroot}" mycolor="#ed008c" mycolorString="0xED008C" />
+            <colorPot listener="$once{classroot}" mycolor="#898989" mycolorString="0x898989" />
+            <colorPot listener="$once{classroot}" mycolor="#7d7d7d" mycolorString="0x7D7D7D" />
+            <colorPot listener="$once{classroot}" mycolor="#707070" mycolorString="0x707070" />
+            <colorPot listener="$once{classroot}" mycolor="#626262" mycolorString="0x626262" />
+            <colorPot listener="$once{classroot}" mycolor="#555555" mycolorString="0x555555" />
+            <colorPot listener="$once{classroot}" mycolor="#464646" mycolorString="0x464646" />
+            <colorPot listener="$once{classroot}" mycolor="#363636" mycolorString="0x363636" />
+            <colorPot listener="$once{classroot}" mycolor="#262626" mycolorString="0x262626" />
+            <colorPot listener="$once{classroot}" mycolor="#111111" mycolorString="0x111111" />
+            <colorPot listener="$once{classroot}" mycolor="#000000" mycolorString="0x000000" />
+        </colorRow>
+          
+        <colorRow>
+            <colorPot listener="$once{classroot}" mycolor="#f7977a" mycolorString="0xF7977A" />
+            <colorPot listener="$once{classroot}" mycolor="#fbad82" mycolorString="0xFBAD82" />
+            <colorPot listener="$once{classroot}" mycolor="#fdc68c" mycolorString="0xFDC68C" />
+            <colorPot listener="$once{classroot}" mycolor="#fff799" mycolorString="0xFFF799" />
+            <colorPot listener="$once{classroot}" mycolor="#c6df9c" mycolorString="0xC6DF9C" />
+            <colorPot listener="$once{classroot}" mycolor="#a4d49d" mycolorString="0xA4D49D" />
+            <colorPot listener="$once{classroot}" mycolor="#81ca9d" mycolorString="0x81CA9D" />
+            <colorPot listener="$once{classroot}" mycolor="#7bcdc9" mycolorString="0x7bcdc9" />
+            <colorPot listener="$once{classroot}" mycolor="#6ccff7" mycolorString="0x6CCFF7" />
+            <colorPot listener="$once{classroot}" mycolor="#7ca6d8" mycolorString="0x7CA6D8" />
+            <colorPot listener="$once{classroot}" mycolor="#8293ca" mycolorString="0x8293CA" />
+            <colorPot listener="$once{classroot}" mycolor="#8881be" mycolorString="0x8881BE" />
+            <colorPot listener="$once{classroot}" mycolor="#a286bd" mycolorString="0xA286BD" />
+            <colorPot listener="$once{classroot}" mycolor="#bc8cbf" mycolorString="0xBC8CBf" />
+            <colorPot listener="$once{classroot}" mycolor="#f49bc1" mycolorString="0xF49BC1" />
+            <colorPot listener="$once{classroot}" mycolor="#f5999d" mycolorString="0xf5999d" />
+        </colorRow>
+          
+        <colorRow>
+            <colorPot listener="$once{classroot}" mycolor="#f16c4d" mycolorString="0xF16C4D" />
+            <colorPot listener="$once{classroot}" mycolor="#f68e54" mycolorString="0xF68E54" />
+            <colorPot listener="$once{classroot}" mycolor="#fbaf5a" mycolorString="0xFBAF5A" />
+            <colorPot listener="$once{classroot}" mycolor="#fff467" mycolorString="0xFFF467" />
+            <colorPot listener="$once{classroot}" mycolor="#acd372" mycolorString="0xACD372" />
+            <colorPot listener="$once{classroot}" mycolor="#7dc473" mycolorString="0x7DC473" />
+            <colorPot listener="$once{classroot}" mycolor="#39b778" mycolorString="0x39B778" />
+            <colorPot listener="$once{classroot}" mycolor="#16bcb4" mycolorString="0x16BCB4" />
+            <colorPot listener="$once{classroot}" mycolor="#00bff3" mycolorString="0x00BFF3" />
+            <colorPot listener="$once{classroot}" mycolor="#438ccb" mycolorString="0x438CCB" />
+            <colorPot listener="$once{classroot}" mycolor="#5573b7" mycolorString="0x5573B7" />
+            <colorPot listener="$once{classroot}" mycolor="#5e5ca7" mycolorString="0x5E5CA7" />
+            <colorPot listener="$once{classroot}" mycolor="#855FA8" mycolorString="0x855FA8" />
+            <colorPot listener="$once{classroot}" mycolor="#a763a9" mycolorString="0xA763A9" />
+            <colorPot listener="$once{classroot}" mycolor="#ef6ea8" mycolorString="0xEf6EA8" />
+            <colorPot listener="$once{classroot}" mycolor="#f16d7e" mycolorString="0xF16D7E" />
+        </colorRow>
+          
+          
+        <colorRow>
+            <colorPot listener="$once{classroot}" mycolor="#9a8575" mycolorString="0x9A8575" />
+            <colorPot listener="$once{classroot}" mycolor="#726357" mycolorString="0x726357" />
+            <colorPot listener="$once{classroot}" mycolor="#524842" mycolorString="0x524842" />
+            <colorPot listener="$once{classroot}" mycolor="#362f2c" mycolorString="0x362F2C" />
+            <colorPot listener="$once{classroot}" mycolor="#c69c6d" mycolorString="0xC69C6D" />
+            <colorPot listener="$once{classroot}" mycolor="#a77c50" mycolorString="0xA77C50" />
+            <colorPot listener="$once{classroot}" mycolor="#8c623a" mycolorString="0x8C623A" />
+            <colorPot listener="$once{classroot}" mycolor="#744b24" mycolorString="0x744B24" />
+            <colorPot listener="$once{classroot}" mycolor="#613813" mycolorString="0x613813" />
+        </colorRow>
+      
+    </view>
+    
+</class>
+
+</library>
+<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
+* Copyright 2005-2007 Laszlo Systems, Inc. All Rights Reserved.               *
+* Use is subject to license terms.                                            *
+* X_LZ_COPYRIGHT_END ****************************************************** -->
+<!-- @LZX_VERSION@                                                         -->
diff --git a/WebContent/src/base/components/lps/fillColorChoose.lzx b/WebContent/src/base/components/lps/fillColorChoose.lzx
new file mode 100644
index 0000000..d2e316e
--- /dev/null
+++ b/WebContent/src/base/components/lps/fillColorChoose.lzx
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<class name="fillColorChoose" extends="basePropertySelector"
+    bgcolor="white" width="80" height="24">
+    
+    <attribute name="isopen" value="false" type="boolean" />
+    
+    <attribute name="colorPickRef" value="null"/>
+    
+    <attribute name="selectedColor" type="number" value="0xFFFF33" />
+    <attribute name="selectedColorDis" type="number" value="1" />
+    <attribute name="selectedColorTransformedString" type="string" value="0xFFFF33"/>
+    <attribute name="colorIsEnabled" value="true" type="boolean" /> 
+    <attribute name="inInitColorSelection" value="true" type="boolean" />
+    
+    <handler name="oninit">
+    	if (this.selectedColorDis==-1){
+    		Debug.write("FillColor Disabled");
+    		this._currentcolor.setAttribute('clickable',false);
+    		this._currentcolor.setAttribute('opacity',0.3);
+    		this.rgt.setAttribute('opacity',0.3);
+    		this.rgt.setAttribute('enabled',false);
+    		this.colorIsEnabled = false;
+    	}
+    </handler>
+    
+    <method name="setSelectedColor" args="c">
+    	this.setEnabled(true);
+		this.setAttribute('selectedColor',c);
+		this.setTransformedStringColor();
+    </method>
+    
+    <method name="setSelectedColorWithDis" args="c,d">
+    	this.setEnabled(true);
+		this.setAttribute('selectedColor',c);
+		this.setTransformedStringColor();
+		this.selectedColorDis = d;
+		if (this.selectedColorDis==-1){
+    		if ($debug) Debug.write("FillColor Disabled");
+    		this._currentcolor.setAttribute('clickable',false);
+    		this._currentcolor.setAttribute('opacity',0.3);
+    		this.rgt.setAttribute('opacity',0.3);
+    		this.rgt.setAttribute('enabled',false);
+    		this.colorIsEnabled = false;
+    		this.rgt_b._lock.setAttribute("visibility","visible");
+	    	this.rgt_b._lock_open.setAttribute("visibility","hidden");
+    	} else {
+			this._currentcolor.setAttribute('clickable',true);
+    		this._currentcolor.setAttribute('opacity',1);
+    		this.rgt.setAttribute('opacity',1);
+    		this.rgt.setAttribute('enabled',true);
+    		this.onselectedColor.sendEvent(this.selectedColor);
+    		this.colorIsEnabled = true;
+    		this.rgt_b._lock.setAttribute("visibility","hidden");
+	    	this.rgt_b._lock_open.setAttribute("visibility","visible");
+    	}
+    </method>
+        
+    <method name="getValue">
+        return this.selectedColor;
+    </method>    
+    
+    <method name="toggle">
+        var t = _root.createEmptyMovieClip('hans',10);
+        var myColor = new Color(t);
+        myColor.setRGB(selectedColor);
+        if (this.boxPosition=="up"){
+	        this.colorPickRef = new lz.colorpicker(canvas,{btnRef:this,
+	        	x:(this.getAttributeRelative('x',canvas)-(250-this.width)),
+	        	y:(this.getAttributeRelative('y',canvas)-154+this.height)});
+        } else {
+	        this.colorPickRef = new lz.colorpicker(canvas,{btnRef:this,
+	        	x:(this.getAttributeRelative('x',canvas)-(250-this.width)),
+	        	y:(this.getAttributeRelative('y',canvas))});
+        }
+        this.colorPickRef.doDefaultColor(myColor);
+        lz.ModeManager.makeModal( this.colorPickRef );
+    </method>
+    
+    <method name="setTransformedStringColor">
+        ////Debug.write("setTransformedStringColor: ",this,this.selectedColor);
+        var t = _root.createEmptyMovieClip('hans2',20);
+        var myColor = new Color(t);
+        myColor.setRGB(this.selectedColor);
+        //var a = myColor.getTransform();
+        ////Debug.write("a: ",a);
+        var col = this.numberToRGB(myColor);
+        ////Debug.write("col: ",col);
+        this.setAttribute('selectedColorTransformedString',col);
+    </method>
+    
+    <method name="numberToRGB" args="thisC">
+        <![CDATA[            
+            var c = thisC.getRGB();
+            var r = (c >> 16) & 0xff;
+            var g = (c >> 8) &  0xff;
+            var b = c & 0xff;
+            ////Debug.write("r g b: ",r,g,b);
+            
+            HEX_R = r.toString(16).toUpperCase();
+            HEX_G = g.toString(16).toUpperCase();
+            HEX_B = b.toString(16).toUpperCase();
+            
+            if (HEX_R.length < 2) {
+                HEX_R = "0"+HEX_R;
+            }
+            if (HEX_G.length < 2) {
+                HEX_G = "0"+HEX_G;
+            }
+            if (HEX_B.length < 2) {
+                HEX_B = "0"+HEX_B;
+            }
+            var hex = "0x"+HEX_R + HEX_G + HEX_B;
+
+            return hex;
+        ]]>
+    </method>    
+    
+    <method name="closedColorPicker">
+        lz.ModeManager.release( this.colorPickRef );
+    </method>
+    
+    <view name="_currentcolor" x="1" y="1" onclick="parent.toggle()" 
+        onmouseover="" onmouseout="" width="30" 
+        height="22" bgcolor="${ parent.selectedColor }" >
+        <labelTooltip text="${ parent.parent.selectedColorTransformedString }" />
+    </view>
+    
+    <button name="rgt" x="32" y="1" onclick="parent.toggle()" width="24" height="23" >
+    	<image x="4" y="3" src="$once{ canvas.getThemeImage('colorfillchoose_rsc') }"
+    			width="16" height="16" stretches="both" />
+        <labelTooltip labelid="427" />
+    </button>
+        
+    <button name="rgt_b" x="56" y="1" width="24" height="23" >
+    	<handler name="onclick">
+    		if (parent.colorIsEnabled){
+	    		parent._currentcolor.setAttribute('clickable',false);
+	    		parent._currentcolor.setAttribute('opacity',0.3);
+	    		parent.rgt.setAttribute('opacity',0.3);
+	    		parent.rgt.setAttribute('enabled',false);
+	    		parent.selectedColorDis = -1;
+	    		parent.onselectedColor.sendEvent(-1);
+	    		parent.colorIsEnabled = false;
+	    		this._lock.setAttribute("visibility","hidden");
+	    		this._lock_open.setAttribute("visibility","visible");
+    		} else {
+	    		parent._currentcolor.setAttribute('clickable',true);
+	    		parent._currentcolor.setAttribute('opacity',1);
+	    		parent.rgt.setAttribute('opacity',1);
+	    		parent.rgt.setAttribute('enabled',true);
+	    		parent.selectedColorDis = 1;
+	    		parent.onselectedColor.sendEvent(parent.selectedColor);
+	    		parent.colorIsEnabled = true;
+	    		this._lock.setAttribute("visibility","visible");
+	    		this._lock_open.setAttribute("visibility","hidden");
+    		}
+    	</handler>
+    	<image x="4" y="3" name="_lock" src="$once{ canvas.getThemeImage('color_lock_rsc') }"
+    			width="16" height="16" stretches="both" />
+ 	    <image x="4" y="3" name="_lock_open" src="$once{ canvas.getThemeImage('color_lock_open_rsc') }"
+    			width="16" height="16" stretches="both" visibility="hidden" />
+        <labelTooltip labelid="428" />
+    </button>
+    
+</class>  
+
+    
+</library>
diff --git a/WebContent/src/base/components/lps/library.lzx b/WebContent/src/base/components/lps/library.lzx
new file mode 100644
index 0000000..9826b0e
--- /dev/null
+++ b/WebContent/src/base/components/lps/library.lzx
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+	<!-- APL Author sebawagner -->
+    <resource name="arrow_down_slider_rsc" src="resources/arrow_down_slider.png" /> 
+
+	<include href="vslider.lzx" /> 
+	<include href="basePropertySelector.lzx" />
+	<include href="colorpicker.lzx" />
+    <include href="lineColorChoose.lzx" />
+    <include href="lineOnlyColorChoose.lzx" />
+    <include href="lineColorChoose.lzx" />
+    <include href="fillColorChoose.lzx" />
+    <include href="changeWidthSlider.lzx" />
+    <include href="changeWidthLetterSlider.lzx" />
+    <include href="regexptip.lzx" />
+    
+</library>
diff --git a/WebContent/src/base/components/lps/lineColorChoose.lzx b/WebContent/src/base/components/lps/lineColorChoose.lzx
new file mode 100644
index 0000000..58a84a4
--- /dev/null
+++ b/WebContent/src/base/components/lps/lineColorChoose.lzx
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="lineColorChoose" extends="basePropertySelector"
+    bgcolor="white" width="80" height="24">
+    
+    <attribute name="isopen" value="false" type="boolean" />
+    
+    <attribute name="colorPickRef" value="null"/>
+    
+    <attribute name="selectedColor" type="number" value="0xFF6600" />
+    <attribute name="selectedColorDis" type="number" value="1" />
+    <attribute name="selectedColorTransformedString" type="string" value="0xFF6600"/>
+    <attribute name="colorIsEnabled" value="true" type="boolean" />
+    <attribute name="inInitColorSelection" value="true" type="boolean" />
+    
+    <handler name="oninit">
+    	if (this.selectedColorDis==-1){
+    		this._currentcolor.setAttribute('clickable',false);
+    		this._currentcolor.setAttribute('opacity',0.3);
+    		this.rgt.setAttribute('opacity',0.3);
+    		this.rgt.setAttribute('enabled',false);
+    		this.colorIsEnabled = false;
+    	}
+    </handler>
+        
+    <handler name="oninit">
+    	this.setTransformedStringColor();
+    </handler>
+    
+    <method name="setSelectedColor" args="c">
+    	this.setEnabled(true);
+		this.setAttribute('selectedColor',c);
+		this.setTransformedStringColor();
+    </method>
+    
+    <method name="setSelectedColorWithDis" args="c,d">
+    	this.setEnabled(true);
+		this.setAttribute('selectedColor',c);
+		this.setTransformedStringColor();
+		this.selectedColorDis = d;
+		if (this.selectedColorDis==-1){
+    		if ($debug) Debug.write("FillColor Disabled");
+    		this._currentcolor.setAttribute('clickable',false);
+    		this._currentcolor.setAttribute('opacity',0.3);
+    		this.rgt.setAttribute('opacity',0.3);
+    		this.rgt.setAttribute('enabled',false);
+    		this.colorIsEnabled = false;
+    		this.rgt_b._lock.setAttribute("visibility","visible");
+	    	this.rgt_b._lock_open.setAttribute("visibility","hidden");
+    	} else {
+			this._currentcolor.setAttribute('clickable',true);
+    		this._currentcolor.setAttribute('opacity',1);
+    		this.rgt.setAttribute('opacity',1);
+    		this.rgt.setAttribute('enabled',true);
+    		this.onselectedColor.sendEvent(this.selectedColor);
+    		this.colorIsEnabled = true;
+    		this.rgt_b._lock.setAttribute("visibility","hidden");
+	    	this.rgt_b._lock_open.setAttribute("visibility","visible");
+    	}
+    </method>
+    
+    <method name="getValue">
+        return this.selectedColor;
+    </method>    
+    
+    <method name="toggle">
+        var t = _root.createEmptyMovieClip('hans',10);
+        var myColor = new Color(t);
+        myColor.setRGB(selectedColor);
+        if (this.boxPosition=="up"){
+	        this.colorPickRef = new lz.colorpicker(canvas,{btnRef:this,
+	        	x:(this.getAttributeRelative('x',canvas)-(250-this.width)),
+	        	y:(this.getAttributeRelative('y',canvas)-154+this.height)});
+        } else {
+	        this.colorPickRef = new lz.colorpicker(canvas,{btnRef:this,
+	        	x:(this.getAttributeRelative('x',canvas)-(250-this.width)),
+	        	y:(this.getAttributeRelative('y',canvas))});
+        }
+
+        this.colorPickRef.doDefaultColor(myColor);
+        lz.ModeManager.makeModal( this.colorPickRef );
+    </method>
+    
+    <method name="setTransformedStringColor">
+        ////Debug.write("setTransformedStringColor: ",this,this.selectedColor);
+        var t = _root.createEmptyMovieClip('hans2',20);
+        var myColor = new Color(t);
+        myColor.setRGB(this.selectedColor);
+        //var a = myColor.getTransform();
+        ////Debug.write("a: ",a);
+        var col = this.numberToRGB(myColor);
+        ////Debug.write("col: ",col);
+        this.setAttribute('selectedColorTransformedString',col);
+    </method>
+    
+    <method name="numberToRGB" args="thisC">
+        <![CDATA[            
+            var c = thisC.getRGB();
+            var r = (c >> 16) & 0xff;
+            var g = (c >> 8) &  0xff;
+            var b = c & 0xff;
+            ////Debug.write("r g b: ",r,g,b);
+            
+            HEX_R = r.toString(16).toUpperCase();
+            HEX_G = g.toString(16).toUpperCase();
+            HEX_B = b.toString(16).toUpperCase();
+            
+            if (HEX_R.length < 2) {
+                HEX_R = "0"+HEX_R;
+            }
+            if (HEX_G.length < 2) {
+                HEX_G = "0"+HEX_G;
+            }
+            if (HEX_B.length < 2) {
+                HEX_B = "0"+HEX_B;
+            }
+            var hex = "0x"+HEX_R + HEX_G + HEX_B;
+
+            return hex;
+        ]]>
+    </method>    
+    
+    <method name="closedColorPicker">
+        lz.ModeManager.release( this.colorPickRef );
+    </method>
+    
+    <view name="_currentcolor" x="1" y="1" onclick="parent.toggle()" 
+        onmouseover="" onmouseout="" width="30" 
+        height="22" bgcolor="${ parent.selectedColor }" >
+        <labelTooltip text="${ parent.parent.selectedColorTransformedString }" />
+    </view>
+    
+    <button name="rgt" x="32" y="1" onclick="parent.toggle()" width="24" height="23" >
+    	<image x="4" y="3" src="$once{ canvas.getThemeImage('colorlinechoose_rsc') }"
+    			width="16" height="16" stretches="both" />
+        <labelTooltip labelid="424" />
+    </button>
+        
+    <button name="rgt_b" x="56" y="1" width="24" height="23" >
+    	<handler name="onclick">
+    		if (parent.colorIsEnabled){
+	    		parent._currentcolor.setAttribute('clickable',false);
+	    		parent._currentcolor.setAttribute('opacity',0.3);
+	    		parent.rgt.setAttribute('opacity',0.3);
+	    		parent.rgt.setAttribute('enabled',false);
+	    		parent.selectedColorDis = -1;
+	    		parent.onselectedColor.sendEvent(-1);
+	    		parent.colorIsEnabled = false;
+	    		this._lock.setAttribute("visibility","hidden");
+	    		this._lock_open.setAttribute("visibility","visible");
+    		} else {
+	    		parent._currentcolor.setAttribute('clickable',true);
+	    		parent._currentcolor.setAttribute('opacity',1);
+	    		parent.rgt.setAttribute('opacity',1);
+	    		parent.rgt.setAttribute('enabled',true);
+	    		parent.selectedColorDis = 1;
+	    		parent.onselectedColor.sendEvent(parent.selectedColor);
+	    		parent.colorIsEnabled = true;
+	    		this._lock.setAttribute("visibility","visible");
+	    		this._lock_open.setAttribute("visibility","hidden");
+    		}
+    	</handler>
+    	<image x="4" y="3" name="_lock" src="$once{ canvas.getThemeImage('color_lock_rsc') }"
+    			width="16" height="16" stretches="both" />
+ 	    <image x="4" y="3" name="_lock_open" src="$once{ canvas.getThemeImage('color_lock_open_rsc') }"
+    			width="16" height="16" stretches="both" visibility="hidden" />
+        <labelTooltip labelid="426" />
+    </button>
+    
+</class>  
+
+    
+</library>
diff --git a/WebContent/src/base/components/lps/lineOnlyColorChoose.lzx b/WebContent/src/base/components/lps/lineOnlyColorChoose.lzx
new file mode 100644
index 0000000..95c7640
--- /dev/null
+++ b/WebContent/src/base/components/lps/lineOnlyColorChoose.lzx
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="lineOnlyColorChoose" extends="basePropertySelector"
+    bgcolor="white" width="56" height="24">
+    
+    <attribute name="isopen" value="false" type="boolean" />
+    
+    <attribute name="colorPickRef" value="null"/>
+    
+    <attribute name="selectedColor" type="number" value="0xFF6600" />
+    <attribute name="selectedColorTransformedString" type="string" value="0xFF6600"/>
+    <attribute name="colorIsEnabled" value="true" type="boolean" />
+    
+    <handler name="oninit">
+    	this.setTransformedStringColor();
+    </handler>
+    
+    <method name="getValue">
+        return this.selectedColor;
+    </method>    
+    
+    <method name="toggle">
+        var t = _root.createEmptyMovieClip('hans',10);
+        var myColor = new Color(t);
+        myColor.setRGB(selectedColor);
+        this.colorPickRef = new lz.colorpicker(canvas,{btnRef:this,x:(this.getAttributeRelative('x',canvas)-(250-this.width)),y:(this.getAttributeRelative('y',canvas))});
+        this.colorPickRef.doDefaultColor(myColor);
+        lz.ModeManager.makeModal( this.colorPickRef );
+    </method>
+    
+    <method name="setTransformedStringColor">
+        ////Debug.write("setTransformedStringColor: ",this,this.selectedColor);
+        var t = _root.createEmptyMovieClip('hans2',20);
+        var myColor = new Color(t);
+        myColor.setRGB(this.selectedColor);
+        //var a = myColor.getTransform();
+        ////Debug.write("a: ",a);
+        var col = this.numberToRGB(myColor);
+        ////Debug.write("col: ",col);
+        this.setAttribute('selectedColorTransformedString',col);
+    </method>
+    
+    <method name="numberToRGB" args="thisC">
+        <![CDATA[            
+            var c = thisC.getRGB();
+            var r = (c >> 16) & 0xff;
+            var g = (c >> 8) &  0xff;
+            var b = c & 0xff;
+            ////Debug.write("r g b: ",r,g,b);
+            
+            HEX_R = r.toString(16).toUpperCase();
+            HEX_G = g.toString(16).toUpperCase();
+            HEX_B = b.toString(16).toUpperCase();
+            
+            if (HEX_R.length < 2) {
+                HEX_R = "0"+HEX_R;
+            }
+            if (HEX_G.length < 2) {
+                HEX_G = "0"+HEX_G;
+            }
+            if (HEX_B.length < 2) {
+                HEX_B = "0"+HEX_B;
+            }
+            var hex = "0x"+HEX_R + HEX_G + HEX_B;
+
+            return hex;
+        ]]>
+    </method>    
+    
+    <method name="closedColorPicker">
+        lz.ModeManager.release( this.colorPickRef );
+    </method>
+    
+    <view name="_currentcolor" x="1" y="1" onclick="parent.toggle()" 
+        onmouseover="" onmouseout="" width="30" 
+        height="22" bgcolor="${parent.selectedColor}" >
+        <labelTooltip text="${ parent.parent.selectedColorTransformedString }" />
+    </view>
+    
+    <button name="rgt" x="32" y="1" onclick="parent.toggle()" width="24" height="23" >
+    	<image x="4" y="3" src="$once{ canvas.getThemeImage('colorlinechoose_rsc') }"
+    			width="16" height="16" stretches="both" />
+        <labelTooltip labelid="424" />
+    </button>
+    
+</class>  
+
+    
+</library>
diff --git a/WebContent/src/base/components/lps/regexptip.lzx b/WebContent/src/base/components/lps/regexptip.lzx
new file mode 100644
index 0000000..a66bc6d
--- /dev/null
+++ b/WebContent/src/base/components/lps/regexptip.lzx
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!-- APL Author sebawagner -->
+<resource name="regexptip_rsc_r" src="resources/regexp/regexp_bg_r.swf" />
+<!-- APL Author sebawagner -->
+<resource name="regexptip_rsc_m" src="resources/regexp/regexp_bg_m.swf" />
+<!-- APL Author sebawagner -->
+<resource name="regexptip_rsc_l" src="resources/regexp/regexp_bg_l.swf" />
+<!-- APL Author sebawagner -->
+<resource name="regexptip_rsc_point" src="resources/regexp/regexp_point.swf" />
+
+<class name="regexptip" extends="view">
+    <attribute name="regexptext" value="" type="string" />
+    <attribute name="fadeDelegate" value="null" />
+    <handler name="oninit">
+        this.fadeDelegate = new LzDelegate( this, "fadeText" );
+        lz.Timer.addTimer( this.fadeDelegate, 5000 );
+    </handler>
+    <method name="fadeText" args="itemRef">
+        this.destroy();
+    </method>
+    <view width="${parent.width}" layout="axis:x">
+        <view name="regexptip_rsc_r" resource="regexptip_rsc_r" width="5" />
+        <view name="regexptip_rsc_m" resource="regexptip_rsc_m" stretches="width" width="${ parent.width-10 }"/>
+        <view name="regexptip_rsc_l" resource="regexptip_rsc_l" width="5" />
+    </view>
+    
+    <view resource="regexptip_rsc_point" y="-7" x="12" />
+
+    <text fontsize="11" text="${ parent.regexptext}" resize="true" multiline="false" />
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/lps/resources/arrow_down_slider.png b/WebContent/src/base/components/lps/resources/arrow_down_slider.png
new file mode 100644
index 0000000..f5107d7
--- /dev/null
+++ b/WebContent/src/base/components/lps/resources/arrow_down_slider.png
Binary files differ
diff --git a/WebContent/src/base/components/lps/resources/color_fill.png b/WebContent/src/base/components/lps/resources/color_fill.png
new file mode 100644
index 0000000..13631ec
--- /dev/null
+++ b/WebContent/src/base/components/lps/resources/color_fill.png
Binary files differ
diff --git a/WebContent/src/base/components/lps/resources/regexp/regexp_bg_l.swf b/WebContent/src/base/components/lps/resources/regexp/regexp_bg_l.swf
new file mode 100644
index 0000000..c2ae7a8
--- /dev/null
+++ b/WebContent/src/base/components/lps/resources/regexp/regexp_bg_l.swf
Binary files differ
diff --git a/WebContent/src/base/components/lps/resources/regexp/regexp_bg_m.swf b/WebContent/src/base/components/lps/resources/regexp/regexp_bg_m.swf
new file mode 100644
index 0000000..119a8ac
--- /dev/null
+++ b/WebContent/src/base/components/lps/resources/regexp/regexp_bg_m.swf
Binary files differ
diff --git a/WebContent/src/base/components/lps/resources/regexp/regexp_bg_r.swf b/WebContent/src/base/components/lps/resources/regexp/regexp_bg_r.swf
new file mode 100644
index 0000000..34383d4
--- /dev/null
+++ b/WebContent/src/base/components/lps/resources/regexp/regexp_bg_r.swf
Binary files differ
diff --git a/WebContent/src/base/components/lps/resources/regexp/regexp_point.swf b/WebContent/src/base/components/lps/resources/regexp/regexp_point.swf
new file mode 100644
index 0000000..22adb7e
--- /dev/null
+++ b/WebContent/src/base/components/lps/resources/regexp/regexp_point.swf
Binary files differ
diff --git a/WebContent/src/base/components/lps/vslider.lzx b/WebContent/src/base/components/lps/vslider.lzx
new file mode 100644
index 0000000..51648a7
--- /dev/null
+++ b/WebContent/src/base/components/lps/vslider.lzx
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- X_LZ_COPYRIGHT_BEGIN ************************************************
+* Copyright 2006 Laszlo Systems, Inc.  All Rights Reserved.              *
+* Use is subject to license terms.                                       *
+* X_LZ_COPYRIGHT_END ************************************************** -->
+<!--
+    vertical slider contributed by Sebastian Wagner
+-->
+<library>
+  
+  <class name="vsliderTrack" extends="view" bgcolor="0x000000">
+        <view width="${ parent.width-2}" height="${ parent.height-2 }" 
+          x="1" y="1" bgcolor="0xFFFFFF"/>
+        <view width="${ parent.width-2}" bgcolor="0xCCCCCC"
+          x="1" y="${ (this.parent.parent.switchaxis) ? 
+                parent.parent._sliderthumb.y : 1 }" 
+          visible="${ parent.parent.showrange }" 
+          height="${ (this.parent.parent.switchaxis) ? 
+        (parent.parent._vslidertrack.height - parent.parent._sliderthumb.y-1) : 
+        parent.parent._sliderthumb.y }" />
+      <handler name="onclick">
+        var newy = parent.getMouse("y");
+        parent._sliderthumb.setNewYFromTrack(newy);
+      </handler>
+  </class>
+	  
+	<class name="vsliderThumb" extends="button" bgcolor="0x999999" height="10" width="20" 
+		onmousedown="dragger.apply()" onmouseup="dragger.remove()">
+  	
+        <attribute name="drag_min" value="0" type="number" />
+        <attribute name="showvalue" type="boolean" value="true" />
+        <attribute name="drag_max" value="0" type="number" />
+        
+        <method name="setNewYFromTrack" args="y">
+            <![CDATA[
+                if (y > drag_max) {
+                    this.setAttribute("y",this.drag_max);
+                    return;
+                }
+                if (y < drag_min) {
+                    this.setAttribute("y",this.drag_min);
+                    return;
+                }
+                this.setAttribute("y",y);
+            ]]>
+        </method>
+        
+        <handler name="oninit">
+            //Setting the initVal
+            this.setY(getPosFromValue(this.parent.initvalue));
+        </handler>
+        
+        <method name="getValueFromPos">
+            var delta1 = this.parent.maxvalue-this.parent.minvalue;
+            var perc = (this.parent.switchaxis) ? 1-(y / (this.parent.height-this.height)) : (y / (this.parent.height-this.height));
+            //Debug.write(delta1,perc);
+            return (Math.round(perc*delta1))+this.parent.minvalue;
+        </method>
+        
+        <method name="getPosFromValue" args="val">
+            var perc = (val-this.parent.minvalue) / (this.parent.maxvalue-this.parent.minvalue);
+            //Debug.write(perc);
+            valY = (this.parent.switchaxis) ? ( (1-perc) * (this.parent.height-this.height)) : (perc * (this.parent.height-this.height));
+            //Debug.write("valY: ",Math.round(valY));
+            return Math.round(valY);
+        </method>
+        
+        <handler name="ony" args="v">
+            //super.setY(v);
+            //if ($debug) Debug.write("setY: ",v);
+		    var thumbVal = getValueFromPos();
+		    if (thumbVal != parent.value) {
+		        this.parent.setValue(thumbVal);
+		    }               
+        </handler>
+        
+        <handler name="onclick">
+        	parent.onvalueChosenFinal.sendEvent();
+        </handler>
+        
+		<dragstate name="dragger" drag_axis="y"
+		    drag_min_y="${ this.drag_min }"  
+		    drag_max_y="${ this.drag_max }">
+			<text name="t1" x="-26" text="${ this.parent.parent.value }" bgcolor="0xFFFFFF"
+				  y="-4" resize="true" />
+		</dragstate>
+	</class>
+
+<class name="vslider" extends="view" >
+    <!--- Minimum Value -->
+    <attribute name="minvalue" type="number" value="0"/>
+    
+    <!--- Maximum Value -->
+    <attribute name="maxvalue" type="number" value="100"/>
+    
+    <!--- Showrange should the slidertrack be with color while 'sliding' -->
+    <attribute name="showrange" type="boolean" value="true"/>
+    
+    <!--- showvalue should the slider show the numbers of min/max -->
+    <attribute name="showvalue" type="boolean" value="true"/>
+    
+    <!--- switchaxis true means minimum-value is 
+            t op maximum is bottom false turns around -->
+    <attribute name="switchaxis" type="boolean" value="false"/>
+    
+    <!-- Initial Value -->
+    <attribute name="initvalue" value="0" type="number" />          
+        
+    <!--- @keywords private -->
+    <event name="onvalue"/>
+    
+    <!--- @keywords private -->
+    <event name="onvalueChosenFinal"/>
+        
+    <!--- @keywords private -->
+    <attribute name="value" value="0" setter="setValue(value)"/>
+    <method name="setValue" args="v">
+        if (!isinited) {
+          this.value = v;
+          return;
+        }
+        if (this.value == v) return;
+        this.value = v;
+        if (onvalue) onvalue.sendEvent(v);
+    </method>
+       
+	<vsliderTrack name="_vslidertrack" x="5" 
+	    width="10" height="${ parent.height }" />
+	    
+	<vsliderThumb name="_sliderthumb" 
+	    drag_max="${ parent.height-this.height }" 
+	    showvalue="${ parent.showvalue }" />
+	    
+	<text text="${ ( (this.parent.switchaxis) ? 
+	            this.parent.maxvalue : this.parent.minvalue ) }" 
+	    visible="${ parent.showvalue }" 
+	    y="-8" x="${ this.parent._vslidertrack.width+10 }" />
+	    
+	<text text="${ ( (this.parent.switchaxis) ? 
+	            this.parent.minvalue : this.parent.maxvalue ) }" 
+	      visible="${ parent.showvalue }" 
+	      y="${ this.parent.height-10 }" 
+	      x="${ this.parent._vslidertrack.width+10 }" />
+          
+</class>
+  
+  
+
+</library>
diff --git a/WebContent/src/base/components/miniIcons.lzx b/WebContent/src/base/components/miniIcons.lzx
new file mode 100644
index 0000000..301d381
--- /dev/null
+++ b/WebContent/src/base/components/miniIcons.lzx
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="miniIcons" extends="view" stretches="both">

+	<attribute name="showhandcursor" value="true" type="boolean" />

+    <handler name="onmouseover">

+    	if (this.showhandcursor) {

+        	this.setAttribute("x",this.x-1);

+        	this.setAttribute("y",this.y-1);

+        	this.setAttribute("height",this.height+2);

+        	this.setAttribute("width",this.width+2);

+    	}

+        parent.parent.onmouseover.sendEvent();

+    </handler>

+    <handler name="onmouseout">

+    	if (this.showhandcursor) {

+        	this.setAttribute("x",this.x+1);

+            this.setAttribute("y",this.y+1);

+            this.setAttribute("height",this.height-2);

+            this.setAttribute("width",this.width-2);

+    	}

+        parent.parent.onmouseout.sendEvent();

+    </handler>

+</class>

+

+<class name="miniIconsImage" extends="image" stretches="both">

+	<attribute name="showhandcursor" value="true" type="boolean" />

+    <handler name="onmouseover">

+    	if (this.showhandcursor) {

+        	this.setAttribute("x",this.x-1);

+        	this.setAttribute("y",this.y-1);

+        	this.setAttribute("height",this.height+2);

+        	this.setAttribute("width",this.width+2);

+    	}

+        parent.parent.onmouseover.sendEvent();

+    </handler>

+    <handler name="onmouseout">

+    	if (this.showhandcursor) {

+        	this.setAttribute("x",this.x+1);

+            this.setAttribute("y",this.y+1);

+            this.setAttribute("height",this.height-2);

+            this.setAttribute("width",this.width-2);

+    	}

+        parent.parent.onmouseout.sendEvent();

+    </handler>

+</class>

+

+</library>
\ No newline at end of file
diff --git a/WebContent/src/base/components/miniIconsNew.lzx b/WebContent/src/base/components/miniIconsNew.lzx
new file mode 100644
index 0000000..2e4a1a2
--- /dev/null
+++ b/WebContent/src/base/components/miniIconsNew.lzx
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+	<class name="miniIconsNew" extends="view" >

+		<attribute name="innerResource" value="" type="string" />

+		<handler name="onmouseover">

+	    	if (this.showhandcursor) {

+	        	this.innnerView.setAttribute("x",this.innnerView.x-1);

+	        	this.innnerView.setAttribute("y",this.innnerView.y-1);

+	        	this.innnerView.setAttribute("height",this.innnerView.height+2);

+	        	this.innnerView.setAttribute("width",this.innnerView.width+2);

+	    	}

+	    </handler>

+	    <handler name="onmouseout">

+	    	if (this.showhandcursor) {

+	        	this.innnerView.setAttribute("x",this.innnerView.x+1);

+	            this.innnerView.setAttribute("y",this.innnerView.y+1);

+	            this.innnerView.setAttribute("height",this.innnerView.height-2);

+	            this.innnerView.setAttribute("width",this.innnerView.width-2);

+	    	}

+	    </handler>

+		<view name="innnerView" resource="$once{ parent.innerResource }" stretches="both"

+				width="$once{ parent.width }" height="$once{ parent.height }">

+		    

+		</view>

+	</class>

+	

+</library>
\ No newline at end of file
diff --git a/WebContent/src/base/components/omcharts/library.lzx b/WebContent/src/base/components/omcharts/library.lzx
new file mode 100644
index 0000000..7d16571
--- /dev/null
+++ b/WebContent/src/base/components/omcharts/library.lzx
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="charts/styles/chartstyle.lzx"/>
+    <include href="charts/common/dataseries.lzx"/>
+    <include href="charts/common/viewspoolmanager.lzx"/>
+    <include href="charts/common/virtualdrawview.lzx"/>
+    <include href="charts/common/datalabel.lzx"/>
+    <include href="charts/common/chart.lzx"/>
+    <include href="charts/common/legend.lzx"/>
+    <include href="charts/piechart/piepiece.lzx"/>
+    <include href="charts/piechart/piechartplotarea.lzx"/>
+    
+    <include href="charts/styles/strokestyle.lzx"/>
+    <include href="charts/piechart/piepiece.lzx"/>
+    <include href="utils/layouts/simplelayout.lzx"/>
+    <include href="extensions/drawview.lzx"/>
+    
+    <include href="omchartstyle.lzx" />
+    <include href="omlegend.lzx" />
+    <include href="ompiechart.lzx" />
+
+
+</library>
diff --git a/WebContent/src/base/components/omcharts/omchartstyle.lzx b/WebContent/src/base/components/omcharts/omchartstyle.lzx
new file mode 100644
index 0000000..c5386dc
--- /dev/null
+++ b/WebContent/src/base/components/omcharts/omchartstyle.lzx
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!---
+    @access public
+    @topic Components
+    @subtopic Charts
+  -->
+<library>
+    
+<chartstyle name="omchartstyle">
+    <plotstyle name="plot" linesize="1" linecolor="0xCCCCCC" fillcolor="0xffffff" opacity="0.5"/>
+    <chartbgstyle name="chartbgstyle">
+        <linestyle name="line" size="0"/>
+        <regionstyle name="region" color="0xFFFFFF" opacity="0.5"/>
+    </chartbgstyle>
+    <valueregionstyle name="valueregionstyle">
+        <linestyle name="line" color="0x000000" size="1" opacity="1"/>
+        <regionstyle name="region" color="0xB71CB3" opacity="0.8" gradient="linear"/>
+        <labelstyle name="label" font="serif" fontsize="12" fontcolor="0x000000"/>
+        <labelstyle name="tip" font="serif" fontsize="12" fontcolor="0x000000"/>
+    </valueregionstyle>
+    <axisstyle name="haxisstyle">
+        <labelstyle name="label" font="Helmet" fontsize="16" fontcolor="0x000000" fontangle="0"/>
+        <tickstyle name="tickmajor" color="0x000000" position="outside" length="3" size="1">
+            <labelstyle name="label" font="serif" fontstyle="bold" fontsize="12" fontcolor="0x606060"/>
+        </tickstyle>
+        <tickstyle name="tickminor" color="0xD3D3D3" position="outside" length="3" size="1"/>
+        <linestyle name="axisline" color="0x000000" size="1"/>
+        <linestyle name="gridline" color="0xD3D3D3" size="1"/>
+    </axisstyle>
+    <axisstyle name="vaxisstyle">
+        <labelstyle name="label" font="Helmet" fontsize="16" fontcolor="0x000000" fontangle="-90"/>
+        <tickstyle name="tickmajor" color="0x000000" position="outside" length="3" size="1">
+            <labelstyle name="label" font="serif" fontsize="12" fontcolor="0x606060"/>
+        </tickstyle>
+        <tickstyle name="tickminor" color="0x000000" position="outside" length="3" size="1"/>
+        <linestyle name="axisline" color="0x000000" size="1"/>
+        <linestyle name="gridline" color="0xD3D3D3" size="1"/>
+        <regionstyle name="band1" color="0xE8EBEE" opacity="1" gradient="linear"/>
+        <regionstyle name="band2" color="0xE3E5E7" opacity="1" gradient="linear"/>
+    </axisstyle>
+    <valuelinestyle name="valuelinestyle">
+        <linestyle name="line" color="0xFF9999" size="2" opacity="1"/>
+        <labelstyle name="label" font="serif" fontsize="10" fontcolor="0x000000"
+           linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        <labelstyle name="tip" font="serif" fontsize="10" fontcolor="0x000000"
+           linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+    </valuelinestyle>
+    <valuepointstyle name="valuepointstyle">
+        <pointstyle name="point" width="15" height="15" color="0x00ff00" opacity=".5" shape="triangle" image="../../test/images/master.gif"/>
+        <labelstyle name="label" font="serif" fontsize="10" fontcolor="0x000000"
+           linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        <labelstyle name="tip" font="serif" fontsize="10" fontcolor="0x000000"
+           linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+    </valuepointstyle>
+    <datastylelist name="datastyles">
+        <datastyle name="yline">
+            <pointstyle name="point" width="10" height="10" color="0xF9F932" opacity="1" shape="diamond" strokeStyle="0xA3A304" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0xA6CEE3" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0xF9F932" fillcolor="0xFFFFC1" linesize="4"/>
+        </datastyle>
+        <datastyle name="bline">
+            <pointstyle name="point" width="10" height="10" color="0x32ADFB" opacity="1" shape="fourpoint" strokeStyle="0x03609C" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0x1F78B4" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        </datastyle>
+        <datastyle name="rline">
+            <pointstyle name="point" width="10" height="10" color="0xFA8159" opacity="1" shape="circle" strokeStyle="0xB24C2C" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0xB2DF8A" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        </datastyle>
+        <datastyle name="gline">
+            <pointstyle name="point" width="10" height="10" color="0x58FB59" opacity="1" shape="square" strokeStyle="0x1D991D" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0x33A02C" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        </datastyle>
+        <datastyle name="hline">
+            <pointstyle name="point" width="10" height="10" color="0x58FB59" opacity="1" shape="square" strokeStyle="0x1D991D" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0xFB9A99" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        </datastyle>
+        <datastyle name="iline">
+            <pointstyle name="point" width="10" height="10" color="0x58FB59" opacity="1" shape="square" strokeStyle="0x1D991D" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0xE31A1C" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        </datastyle>
+        <datastyle name="jline">
+            <pointstyle name="point" width="10" height="10" color="0x58FB59" opacity="1" shape="square" strokeStyle="0x1D991D" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0xFDBF6F" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        </datastyle>
+        <datastyle name="kline">
+            <pointstyle name="point" width="10" height="10" color="0x58FB59" opacity="1" shape="square" strokeStyle="0x1D991D" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0xFF7F00" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        </datastyle>
+        <datastyle name="lline">
+            <pointstyle name="point" width="10" height="10" color="0x58FB59" opacity="1" shape="square" strokeStyle="0x1D991D" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0xCAB2D6" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        </datastyle>
+        <datastyle name="mline">
+            <pointstyle name="point" width="10" height="10" color="0x58FB59" opacity="1" shape="square" strokeStyle="0x1D991D" lineWidth="1"/>
+            <linestyle name="line" color="0xCCCCCC" size="1" opacity="1" type="solid"/>
+            <regionstyle name="region" color="0x6A3D9A" opacity="1" gradient="none"/>
+            <labelstyle name="label" font="serif" fontsize="9" fontcolor="0x000000" linecolor="0x000000" fillcolor="0xFFFFC1" linesize="12" fontangle="90"/>
+            <labelstyle name="tip" font="serif" fontsize="8" fontcolor="0x000000"
+               linecolor="0x000000" fillcolor="0xFFFFC1" linesize="2"/>
+        </datastyle>
+    </datastylelist>
+</chartstyle>    
+    
+</library> 
diff --git a/WebContent/src/base/components/omcharts/omlegend.lzx b/WebContent/src/base/components/omcharts/omlegend.lzx
new file mode 100644
index 0000000..8d365b3
--- /dev/null
+++ b/WebContent/src/base/components/omcharts/omlegend.lzx
@@ -0,0 +1,282 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!---
+    @access public
+    @topic Components
+    @subtopic Charts
+  -->
+<library>
+
+    <!---
+     simple legend class
+     @access public
+      -->
+    <class name="omlegend" extends="drawview" >
+        <!--- @keyword private -->
+        <attribute name="topmargin" type="number" value="0"/>
+        <!--- @keyword private -->
+        <attribute name="bottommargin" type="number" value="0"/>
+        <!--- @keyword private -->
+        <attribute name="leftmargin" type="number" value="0"/>
+        <!--- @keyword private -->
+        <attribute name="rightmargin" type="number" value="0"/>
+        <!--- @keyword private -->
+        <attribute name="verticalgap" type="number" value="1"/>
+        <!--- Indicates if legend box will have a border, default: true -->
+        <attribute name="legendborder" type="boolean" value="true"/>
+        <!--- Allow to set the line width from the legend tag -->
+        <attribute name="borderWidth" type="number" value="1"/>
+        <!--- Allow to set the color line from the legend tag -->
+        <attribute name="borderColor" type="color" value="0x000000"/>
+        <!--- Allow to set the fill color from the legend tag -->
+        <attribute name="fillColor" type="color" value="0xFFFFFF"/>
+        <!--- Indicates how the legend items will be displayed, default: vertical -->
+        <attribute name="direction" type="string" value="vertical"/>     
+        <!--- Indicates the style will be applied tho the border legend box -->
+        <attribute name="styleBorder" type="string" value="null"/>
+        <!--- Indicates the Font will be used in the legend item text -->
+        <attribute name="legendFont" type="string" value="serif"/>
+        <!--- Indicates the Font size wiil be used in the legend item text, default: 10px -->
+        <attribute name="legendFontsize" type="size" value="6"/>
+        <!--- Indicates the Font color wiil be used in the legend item text, default: black -->
+        <attribute name="legendFontcolor" type="color" value="0x000000"/>
+        <!--- Indicates where the legend box will be positioned, default: right -->
+        <attribute name="position" type="string" value="right"/>
+
+        <!--- Takes the relationship with the chart -->
+        <attribute name="chart" type="expression" value="${null}"/>
+        <attribute name="chartClassName" type="string" value="${null}"/>
+
+        <simplelayout axis="y"/>
+        
+                
+       <!--- @keywords private
+        <handler name="oninitdone" reference="this.chart">
+            if(chart.initdone)
+            {
+                var lChart = this.getChartInstance();
+                if( lChart != null ) {
+                    this.chartClassName = lChart.constructor.tagname;
+                    this.datapath.setFromPointer(lChart.getDataSeries().getLegend());
+                }   
+            }
+        </handler>
+         -->
+         
+        <handler name="oninit">
+        	<![CDATA[
+        	    var tObject = parent.getOMDataSeries();
+        	    this.chart = parent;
+        	    
+        	    for (var i=0;i<tObject.tooltipseries.length;i++) {
+        	    	
+        	    	new lz.omlegenditem(this.viewlegendbox,{tBox:tObject.tooltipseries[i]});
+        	    	
+        	    }
+        	    
+        	    //this.bringToFront();
+        	    this.border();
+        	]]>
+        </handler> 
+        
+        <!-- Top Margin -->
+        <view height="${parent.topmargin}" />
+        <!-- Legend box -->
+        <view name="viewlegendbox">    
+            <simplelayout spacing="${parent.parent.verticalgap}"/>       
+            <method name="init">
+                <![CDATA[
+    
+                    super.init();
+                    if ( parent.direction == 'horizontal'){
+                        this.layouts[0].setAttribute('axis', 'x');
+                    } else {
+                        this.layouts[0].setAttribute('axis', 'y');
+                    }
+                   
+                ]]>
+            </method>    
+                  
+        </view>
+        <!-- Bottom Margin -->
+        <view height="${parent.bottommargin}"/>        
+
+
+        <!--- @keywords private -->
+        <method name="border">
+            var lStartX = Math.ceil(this.lineWidth/2);
+            var lStartY = Math.ceil(this.lineWidth/2);
+            var lOrgWidth = this.width;
+            var lOrgHeight = this.height;
+
+            this.lineWidth = this.borderWidth;
+            this.strokeStyle = this.borderColor;
+            this.fillStyle = this.fillColor;
+
+            this.beginPath();
+            this.moveTo(lStartX, lStartY);
+            this.lineTo(this.width, lStartY);
+            this.lineTo(this.width, this.height);
+            this.lineTo(lStartY, this.height);
+            this.lineTo(lStartX, lStartY);
+            this.closePath();
+            this.stroke();
+            this.fill();
+
+            // Restores the original dimensions of the legend, due to the changes
+            // that the lineTo()'s calls perform over the legendbox dimensions.
+            this.setAttribute( "width", lOrgWidth );
+            this.setAttribute( "height", lOrgHeight );
+        </method>
+
+        <!--- @keywords private -->
+        <method name="getChartInstance">
+        <![CDATA[
+            return this.chart;
+        ]]>
+        </method>
+
+        <!--- event that allows custom action for mouse over event
+            @param Number item: The identifier legend item
+         -->
+        <event name="onitemmouseover" />
+        <!--- event that allows custom action for mouse out event
+            @param Number item: The identifier legend item
+         -->
+        <event name="onitemmouseout" />
+        <!--- event that allows custom action for mouse down event
+            @param Number item: The identifier legend item
+         -->
+        <event name="onitemmousedown" />
+        <!--- event that allows custom action for mouse up event
+            @param Number item: The identifier legend item
+         -->
+        <event name="onitemmouseup" />
+        <!--- event that allows custom action for mouse click event
+            @param Number item: The identifier legend item
+         -->
+        <event name="onitemmouseclick" />
+        
+    </class>
+    
+    <!--- @keyword private
+    individual legend item -->
+    <class name="omlegenditem" >
+        <attribute name="identifier" type="number" value="0"/>
+        <attribute name="tBox" type="string" value=""/>
+        <attribute name="linevisible" type="boolean" value="false"/>
+        <simplelayout axis="x" spacing="$once{parent.parent.parent.verticalgap}"/>
+        <view name="leftmarginview" width="$once{parent.parent.parent.leftmargin}" />
+        <marker name="legendmarker"></marker>    
+        <text name="legendtext" resize="true" text="$once{ parent.tBox }" 
+        	  fontsize="$once{parent.parent.parent.legendFontsize}"
+              fgcolor="$once{parent.parent.parent.legendFontcolor}"
+              height="$once{parent.parent.parent.legendFontsize+6}">
+        </text>
+        <view name="rightmarginview" width="${parent.parent.parent.rightmargin}"/>
+        <method name="init">
+            <![CDATA[
+                super.init();
+
+                var colors = new Array(0);
+                var imagesPath = new Array(0);
+                var legenditems = parent.subviews;
+                var legendmarkeritem;
+
+                if( parent.parent.chartClassName == "piechart" ) {
+                    var arrPieces = parent.parent.getChartInstance().plotarea.arrPiePieces;
+                    var piePiece;
+
+                    for(var i = 0; i < arrPieces.length; i++){ 
+                        piePiece = arrPieces[i];  
+                        colors[i] = piePiece.style.region.color;
+                        
+                        if ( legenditems[i] != null ){                
+                            legendmarkeritem = legenditems[i].legendmarker;
+                            legendmarkeritem.setAttribute('width', piePiece.style.point.width);
+                            legendmarkeritem.setAttribute('height', piePiece.style.point.height);
+                        }
+                    }
+                } else {
+                    var topseries = parent.parent.getChartInstance().getDataSeries();
+                    var numSeries = topseries.getNumDataSeries();
+                    for(var i = 0; i < numSeries; i++){ 
+                        var ldatastyle = parent.parent.getChartInstance().style.getDataStyle(i);
+                        if ( parent.parent.chartClassName == "linechart" )
+                            colors[i] = ldatastyle.line.color;
+                        else
+                            if ( ldatastyle.region.image != null ){
+                                imagesPath[i] = ldatastyle.region.image;
+                            } else {
+                                colors[i] = ldatastyle.region.color;
+                            }
+                        if ( legenditems[i] != null ){                
+                            legendmarkeritem = legenditems[i].legendmarker;
+                            legendmarkeritem.setAttribute('width', ldatastyle.point.width);
+                            legendmarkeritem.setAttribute('height', ldatastyle.point.height);
+                        }
+                    }
+                }
+
+                for(var i = 0; i < legenditems.length; i++){
+                    var legenditem = legenditems[i];
+                    legendmarkeritem = legenditem.legendmarker;
+                    if ( imagesPath[i] != null ){
+                        legendmarkeritem.setSource(imagesPath[i]);
+                        legendmarkeritem.setAttribute('opacity', ldatastyle.region.opacity);
+                        legendmarkeritem.setAttribute( "visible", true );
+                    }
+                    else
+                        legendmarkeritem.setAttribute('bgcolor', colors[i]);
+                    this.setAttribute('identifier', i);
+                }
+            ]]>
+        </method>
+        <!--- calls the method that implements the acton
+            @keyword private-->
+        <handler name="onmouseover">
+        	this.legendtext.setAttribute("fontstyle","bold");
+            parent.classroot.onitemmouseover.sendEvent(this);
+        </handler>
+        <!--- calls the method that implements the acton
+            @keyword private-->
+        <handler name="onmouseout">
+        	this.legendtext.setAttribute("fontstyle","plain");
+            parent.classroot.onitemmouseout.sendEvent(this);
+        </handler>
+        <!--- calls the method that implements the acton
+            @keyword private-->
+        <handler name="onmousedown">
+            parent.classroot.onitemmousedown.sendEvent(this);
+        </handler>
+        <!--- calls the method that implements the acton
+            @keyword private-->
+        <handler name="onmouseup">
+            parent.classroot.onitemmouseup.sendEvent(this);
+        </handler>
+        <!--- calls the method that implements the acton
+            @keyword private-->
+        <handler name="onclick">
+            parent.classroot.onitemmouseclick.sendEvent(this);
+        </handler>
+    </class>
+
+</library>
diff --git a/WebContent/src/base/components/omcharts/ompiechart.lzx b/WebContent/src/base/components/omcharts/ompiechart.lzx
new file mode 100644
index 0000000..e248133
--- /dev/null
+++ b/WebContent/src/base/components/omcharts/ompiechart.lzx
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!---
+    @access public
+    @topic Components
+    @subtopic Charts
+  -->
+<library>
+    
+    <!---
+          A pie chart represents a chart that is displayed in the 2D
+          polar plane. This class inherits immediately from chart class
+          and can be instantiated directly. (Warning: Of beta quality.)
+          @access public
+          -->
+    <class name="ompiechart" extends="chart">
+
+        <!--- @keywords private -->
+        <method name="init">
+            plotarea = this.getNodeOfClass("piechartplotarea");
+            _datalabelpool = this.createLabelViewspool();
+            super.init();            
+        </method>  
+        
+        <!--- Renders the plot area which is an instance of the piechartplotarea 
+              class. The plot area requires to read a group of two data series, one
+              for the groups that are represented by the pie slices and the second
+              for their values. -->
+        <method name="renderPlotArea">
+        <![CDATA[
+            super.renderPlotArea();
+            plotarea.clear();
+
+            var topseries = this.getOMDataSeries();
+            
+            //var numSeries = topseries.getNumDataSeries();
+            var numSeries = 1;
+            
+            var xseries = topseries.xseries;
+            var yseries = topseries.yseries;
+            var tooltipseries = topseries.tooltipseries;
+                                
+            for(var i = 0; i < numSeries; i++)
+            {
+                plotarea.renderSeries(xseries, yseries, tooltipseries);          
+            }
+            if ( this.datalabelEnabled ){
+                this.renderDataLabels();
+            }
+
+        ]]>
+        </method>
+        
+        <!--- Renders the labels that display the values of the data series. -->
+        <method name="renderDataLabels">
+        
+            <![CDATA[
+                _datalabelpool.reclaimAll();
+            
+                var arrPiePieces = this.plotarea.arrPiePieces;
+                var topseries = this.getOMDataSeries();
+                
+                var xseries = topseries.xseries;
+                var yseries = topseries.yseries;
+                var tooltipseries = topseries.tooltipseries;
+                
+                if ($debug) Debug.write("arrPiePieces.length ",arrPiePieces.length);
+
+                for(var i = 0; i < arrPiePieces.length; i++){ 
+                    piePiece = arrPiePieces[i];  
+                    
+                    var lbl = _datalabelpool.getView();
+                    var ldatastyle = piePiece.style;
+                    lbl.setAttribute('style', ldatastyle.label);
+                    lbl.render(yseries[i]);
+                    piePiece.renderLabel(lbl);
+                }
+            ]]>
+                
+        </method>
+        
+        <!--- The plot area where the pie slices are rendered -->
+        <piechartplotarea name="plotarea" x="50" y="20" width="500" height="300">
+        	
+        </piechartplotarea>
+
+    </class>
+    
+</library> 
diff --git a/WebContent/src/base/components/panel/baseBoundingBorderView.lzx b/WebContent/src/base/components/panel/baseBoundingBorderView.lzx
new file mode 100644
index 0000000..d3e0cdb
--- /dev/null
+++ b/WebContent/src/base/components/panel/baseBoundingBorderView.lzx
@@ -0,0 +1,498 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseBoundingBorderView" extends="view" width="250" y="100" height="400"
+	onmousedown="this._startDragState(this)" onmouseup="this._removeDragState(this)" >
+	
+	<!--- Can this Box be docked to others and 
+			the width/height of parent compoent barrier -->
+	<attribute name="docking" value="false" type="boolean" />
+	
+	<!--- Hard to explain but its clear if you play around 
+		with that. Its the number of minimum pixels before 
+		the "docking" effect will be there -->
+	<attribute name="dockingbarrier" value="15" type="number" />
+	
+	<attribute name="boundingbarrier" value="2" type="number" />
+	
+	<!--- the Event will be thrown if you close the Box -->
+	<event name="onclose" />
+	
+	<!--- extra Event for this kind of view
+		will be thrown before the view inits new -->
+	<event name="preclose" />
+	
+	<!---@keywords private the list of connected views -->
+	<attribute name="dockinglist" value="null" />
+	
+	<!--- @keywords private temp-older of x-distance to docked-Box  -->
+	<attribute name="tempXdistance" value="0" type="number" />
+
+	<!--- @keywords private temp-older of y-distance to docked-Box  -->
+	<attribute name="tempYdistance" value="0" type="number" />
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="isopen" value="true" type="boolean" />
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="open" value="true" type="boolean" />	
+	
+	<attribute name="currentBoundingBox" value="null" />
+	
+	<attribute name="verticalClassActive" value="false" type="boolean" />
+	<attribute name="activationClassBounding" value="" type="string" />
+	<attribute name="activationVClassBounding" value="" type="string" />
+	
+	<attribute name="topClassPanel" value="" type="string" />
+	<attribute name="bottomClassPanel" value="" type="string" />
+	<attribute name="rightClassPanel" value="" type="string" />
+	<attribute name="leftClassPanel" value="" type="string" />
+	
+	<!-- this is the Width and Height of the vertical and horizontal class
+		it can have different values -->
+	<attribute name="hWidth" value="0" type="number" />
+	<attribute name="hHeight" value="0" type="number" />
+	<attribute name="vWidth" value="0" type="number" />
+	<attribute name="vHeight" value="0" type="number" />
+	
+	<!--- @keywords private  -->
+	<attribute name="initheight" value="0" type="number" />
+	
+	<attribute name="hasshadow" value="true" type="boolean" />
+	
+	<attribute name="mousetracker_del" value="$once{ new LzDelegate(this, 'checkStaticBorders' )}" />
+	
+	<!--- @keywords private store initial height so toggleopen can reset height  -->
+    <handler name="oninit">
+    	this.initheight=this.height;
+		////Debug.write("this.isopen: ",this.isopen);
+		if (!this.open) toggleopen();
+    	if (this.hasshadow) this.setShadow(); 
+    </handler>
+    
+    <method name="setShadow" args="bool">
+        this.hasshadow = bool;
+        <![CDATA[
+        if (this.isinited){
+            this.normalMC = this.getDisplayObject();
+            //Debug.write(this.normalMC);
+            ////Debug.write("this.normalMC: ",this.normalMC);
+            ////Debug.write("this: ",this);
+           	this.displacementMap = new flash.filters.DropShadowFilter();
+            this.normalMC.filters = [this.displacementMap];
+        }
+        ]]>              
+    </method>		
+	
+	<method name="close">
+		if (this.onclose) this.onclose.sendEvent();
+		this.doDestroy();
+	</method>
+	
+	<method name="toggleopen">
+		////Debug.write("this.isopen",this.isopen);
+		this.setAttribute('isopen',!this.isopen);
+		if (this.isopen){
+			_calcdockingList();
+			for (var eg in this.dockinglist){
+				if(this.dockinglist[eg].docking){
+					////Debug.write("this.dockinglist[eg]: ",this.dockinglist[eg].title);
+					////Debug.write("open new y",this.y+this.initheight);
+					this.dockinglist[eg].toggleOpenByParent(this.initheight-22);
+					this.dockinglist[eg].setAttribute('y',this.y+this.initheight);
+					
+				}
+			}			
+			this.setAttribute('height',this.initheight);
+		} else {
+			_calcdockingList();
+			for (var eg in this.dockinglist){
+				if(this.dockinglist[eg].docking){
+					////Debug.write("this.dockinglist[eg]: ",this.dockinglist[eg].title);
+					this.dockinglist[eg].toggleOpenByParent(-(this.initheight-22));
+					this.dockinglist[eg].setAttribute('y',this.y+22);
+				}
+			}	
+			this.setAttribute('height',22);		
+		}
+	</method>
+	
+	<method name="toggleOpenByParent" args="changeY">
+		////Debug.write("+++++ toggleOpenByParent +++++ changeY: ",this.title,changeY);
+		var tempList=new Array();
+		<![CDATA[
+		//check for dockable stuff which is connected to this Box
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				var proof=false;
+				////Debug.write("found some: ",this.parent.subviews[eg].title);
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < 1 ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -1 ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					proof=true;
+				}
+					
+				if (proof) tempList.push(this.parent.subviews[eg]);
+			}
+		}
+		]]>
+		////Debug.write("tempList.length: ",tempList.length);
+		if (tempList.length!=0){
+			for (var eg in tempList){
+				if(tempList[eg].docking){
+					////Debug.write("toggleOpenByParent 1 [eg],changeY: ",tempList[eg].title,changeY);
+					tempList[eg].toggleOpenByParent(changeY);
+					tempList[eg].setAttribute('y',tempList[eg].y+changeY);
+				}
+			}	
+		}
+		
+	</method>
+	
+	<!--- @keywords private  -->
+	<method name="_removeDragState" args="obj">
+		//It's important to remove the dragger and do docking stuff before you check for connencted Boxes
+		dragger.remove();
+		if (obj==this){
+			if (docking) arrangePosition();
+		} else {
+			if (docking) _lookforParentOnly(obj);
+		}
+			
+		//check for connected Boxes
+		for (var eg in this.dockinglist){
+			if(this.dockinglist[eg].docking){
+				this.dockinglist[eg]._removeDragState(this);
+			}
+		}
+		mousetracker_del.unregisterAll();
+		this.preclose.sendEvent();
+		if (this.currentBoundingBox!=null) {
+			
+			if(this.currentBoundingBox.width>this.currentBoundingBox.height){
+				if (this.currentBoundingBox.y==0){
+					if ($debug) Debug.write("TOP");
+					if (this.topClassPanel!=""){
+						new lz[this.topClassPanel](parent,{
+							x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+						});
+					} else {
+						if ($debug) Debug.warn("No Top Panel Definied");
+						new lz[this.activationVClassBounding](parent,{
+							x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+						});
+					}
+				} else if (this.currentBoundingBox.y==(parent.height-this.currentBoundingBox.height)){
+					if ($debug) Debug.write("BOTTOM");
+					if (this.bottomClassPanel!=""){
+						new lz[this.bottomClassPanel](parent,{
+							x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+						});
+					} else {
+						new lz[this.activationVClassBounding](parent,{
+							x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+						});
+					}
+				} else {
+					new lz[this.activationVClassBounding](parent,{
+						x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+					});
+				}
+			} else {
+				if (this.currentBoundingBox.x==0){
+					if ($debug) Debug.write("RIGHT");
+					if (this.rightClassPanel!=""){
+						new lz[this.rightClassPanel](parent,{
+							x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+						});
+					} else {
+						new lz[this.activationClassBounding](parent,{
+							x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+						});
+					}
+				} else if (this.currentBoundingBox.x==(parent.width-this.currentBoundingBox.width)){
+					if ($debug) Debug.write("LEFT");
+					if (this.leftClassPanel!=""){
+						new lz[this.leftClassPanel](parent,{
+							x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+						});
+					} else {
+						new lz[this.activationClassBounding](parent,{
+							x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+						});
+					}
+				} else {
+					new lz[this.activationClassBounding](parent,{
+						x:this.currentBoundingBox.x,y:this.currentBoundingBox.y
+					});
+				}
+			}
+			this.currentBoundingBox.destroy();
+			this.close();
+		} else {
+			if(this.width>this.height){
+				new lz[this.activationVClassBounding](parent,{x:this.x,y:this.y});
+			} else {
+				new lz[this.activationClassBounding](parent,{x:this.x,y:this.y});
+			}
+			this.close();
+		}
+	</method>
+
+	
+	<!--- @keywords private
+		the arg obj is needed because the dragging can be called by the Box itself
+		or by a Box which is connected to this Box!  -->
+	<method name="_startDragState" args="obj">
+		this.bringToFront();
+		_calcdockingList();
+		for (var eg in this.dockinglist){
+			if(this.dockinglist[eg].docking){
+				this.dockinglist[eg]._startDragState(this);
+			}
+		}
+		//store position cause it wasn't dragged by itself
+		if (obj!=this){
+			storeAdjustmentToParent(obj.x,obj.y);
+		}
+		dragger.apply();
+		mousetracker_del.register(lz.Idle,'onidle');
+	</method>
+	
+	<!--- arranges the Box to be build into any border -->
+	<method name="checkStaticBorders" args="item">
+		<![CDATA[
+			if (!this.verticalClassActive){
+				//if ($debug) Debug.write("checkStaticBorders");
+				if (this.x<this.boundingbarrier){
+					this.setAttribute('visibility','hidden');
+					if (this.y<this.boundingbarrier){
+						//if ($debug) Debug.write("a1");
+						this.drawCurrentBoundingBox(0,0,this.vWidth,this.vHeight);
+					} else if ( (this.parent.height-(this.y+this.height))<this.boundingbarrier){
+						//if ($debug) Debug.write("a2");
+						this.drawCurrentBoundingBox(0,parent.height-this.vHeight,this.vWidth,this.vHeight);
+					} else {
+						//if ($debug) Debug.write("a3");
+						this.drawCurrentBoundingBox(0,this.y,this.width,this.height);
+					}
+				} else if (this.y<this.boundingbarrier){
+					this.setAttribute('visibility','hidden');
+					if ( (this.parent.width-(this.x+this.height))<this.boundingbarrier){
+						//if ($debug) Debug.write("b1");
+						this.drawCurrentBoundingBox((this.parent.width-this.vWidth),0,this.vWidth,this.vHeight);
+					} else {
+						//if ($debug) Debug.write("b2");
+						this.drawCurrentBoundingBox(this.x,0,this.vWidth,this.vHeight);
+					}
+				} else if ( (this.parent.width-(this.x+this.width))<this.boundingbarrier){
+					this.setAttribute('visibility','hidden');
+					//if ($debug) Debug.write("c");
+					if ( (this.parent.height-(this.y+this.height))<this.boundingbarrier){
+						this.drawCurrentBoundingBox(parent.width-this.vWidth,parent.height-this.vHeight,this.vWidth,this.vHeight);
+					} else {
+						this.drawCurrentBoundingBox(parent.width-this.width,this.y,this.width,this.height);
+					}
+				} else if ( (this.parent.height-(this.y+this.height))<this.boundingbarrier){
+					
+					this.setAttribute('visibility','hidden');
+					if ( (this.parent.width-(this.x+this.height))<this.boundingbarrier){
+						//if ($debug) Debug.write("d1");
+						this.drawCurrentBoundingBox(parent.width-this.vWidth,parent.height-this.vHeight,this.vWidth,this.vHeight);
+					} else {
+						//if ($debug) Debug.write("d2");
+						this.drawCurrentBoundingBox(this.x,parent.height-this.vHeight,this.vWidth,this.vHeight);
+					}
+				} else {
+					//if ($debug) Debug.write("d");
+					this.setAttribute('visibility','visible');
+					if (this.currentBoundingBox!=null) {
+						this.currentBoundingBox.destroy();
+						this.currentBoundingBox = null;
+					}
+				}
+			} else {
+				if (this.x<this.boundingbarrier){
+					//if ($debug) Debug.write("a",(this.parent.height-(this.y+this.width)));
+					this.setAttribute('visibility','hidden');
+					if (this.y<this.boundingbarrier){
+						//if ($debug) Debug.write("a1");
+						this.drawCurrentBoundingBox(0,0,this.width,this.height);
+					} else if ( (this.parent.height-(this.y+this.width))<this.boundingbarrier){
+						//if ($debug) Debug.write("a2");
+						this.drawCurrentBoundingBox(0,parent.height-this.height,this.width,this.height);
+					} else {
+						//if ($debug) Debug.write("a3");
+						this.drawCurrentBoundingBox(0,this.y,this.hWidth,this.hHeight);
+					}
+				} else if (this.y<this.boundingbarrier){
+					//if ($debug) Debug.write("b");
+					this.setAttribute('visibility','hidden');
+					if ( (this.parent.width-(this.x+this.width))<this.boundingbarrier){
+						this.drawCurrentBoundingBox(this.parent.width-this.width,0,this.width,this.height);
+					} else {
+						this.drawCurrentBoundingBox(this.x,0,this.width,this.height);
+					}
+				} else if ( (this.parent.width-(this.x+this.width))<this.boundingbarrier){
+					this.setAttribute('visibility','hidden');
+					if ( (this.parent.height-(this.y+this.width))<this.boundingbarrier){
+						this.drawCurrentBoundingBox(this.parent.width-this.width,parent.height-this.height,this.width,this.height);
+					} else {
+						this.drawCurrentBoundingBox(parent.width-this.hWidth,this.y,this.hWidth,this.hHeight);
+					}
+				} else if ( (this.parent.height-(this.y+this.height))<this.boundingbarrier){
+					this.setAttribute('visibility','hidden');
+					this.drawCurrentBoundingBox(this.x,parent.height-this.height,this.width,this.height);
+				} else {
+					//if ($debug) Debug.write("d");
+					this.setAttribute('visibility','visible');
+					if (this.currentBoundingBox!=null) {
+						this.currentBoundingBox.destroy();
+						this.currentBoundingBox = null;
+					}
+				}
+			}			
+		]]>
+	</method>
+	
+	<method name="drawCurrentBoundingBox" args="x,y,width,height">
+		if (this.currentBoundingBox!=null) this.currentBoundingBox.destroy();
+		this.currentBoundingBox = new lz.panelBoundBox(parent,{x:x,y:y,
+			width:width,height:height});
+	</method>
+	
+	<!--- Calc the List of Boxes which will be dragged and setposition if this Box
+		will be dragged,docked or minimized/maximized  -->
+	<method name="_calcdockingList">
+		//Clear list of conencted Boxes
+		this.dockinglist=new Array();
+		<![CDATA[
+		//check for dockable stuff which is connected to this Box
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				var proof=false;
+
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < 1 ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -1 ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					proof=true;
+				}
+
+				if (proof) this.dockinglist.push(this.parent.subviews[eg]);
+			}
+		}
+		]]>
+		////Debug.write("this.dockinglist.length:",this.dockinglist.length);
+	</method>
+	
+	<!--- @keywords private  -->
+	<method name="arrangePosition">
+		//do the magic
+		//the idea is: look for all on the view container one level above this one
+		//and look for the width/height and 0/0 and look for "dockable" stuff there
+		var newx=this.x;
+		var newy=this.y;
+	  
+		<![CDATA[
+				
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				//left box-border
+				if ( ( ((this.x+this.width)-this.parent.subviews[eg].x) < this.dockingbarrier ) && ( ((this.x+this.width)-this.parent.subviews[eg].x) > -this.dockingbarrier ) &&  ( (this.y+this.height) > this.parent.subviews[eg].y ) &&  ( this.y < (this.parent.subviews[eg].y+this.parent.subviews[eg].height) ) ){
+					newx= ( this.parent.subviews[eg].x - this.width );
+				}
+				//right box-border
+				if ( ( ((this.parent.subviews[eg].x+this.parent.subviews[eg].width)-this.x)<this.dockingbarrier ) && ( ((this.parent.subviews[eg].x+this.parent.subviews[eg].width)-this.x)>-this.dockingbarrier ) &&  ( (this.y+this.height) > this.parent.subviews[eg].y ) &&  ( this.y < (this.parent.subviews[eg].y+this.parent.subviews[eg].height) ) ){
+					newx= ( this.parent.subviews[eg].x + this.parent.subviews[eg].width );
+				}
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < this.dockingbarrier ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -this.dockingbarrier ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					newy = this.parent.subviews[eg].y-this.height;
+				}
+				//bottom box-border
+				if ( ( ((this.parent.subviews[eg].y+this.parent.subviews[eg].height)-this.y) < this.dockingbarrier ) && ( ((this.parent.subviews[eg].y+this.parent.subviews[eg].height)-this.y) > -this.dockingbarrier ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					newy = this.parent.subviews[eg].y+this.parent.subviews[eg].height;
+				}
+			}
+		}
+		
+		//Check for Borders
+		//should be done _after_ checking for other dockable stuff so it gets 
+		//priority to dock against the border of parent view
+		if (this.x<this.dockingbarrier){
+			newx=0;
+		}
+		if (this.y<this.dockingbarrier){
+			newy=0;
+		}
+		if ( (this.parent.width-(this.x+this.width))<this.dockingbarrier){
+			newx=this.parent.width-this.width;
+		}
+		if ( (this.parent.height-(this.y+this.height))<this.dockingbarrier){
+			newy=this.parent.height-this.height;
+		}
+		
+		//set position
+		this.setAttribute('x',newx);
+		this.setAttribute('y',newy);
+		if ($debug) Debug.write("Position: ",newx,newy);
+		]]>
+	</method>
+	
+	<method name="storeAdjustmentToParent" args="objX,objY">
+		this.tempXdistance=objX-this.x;
+		this.tempYdistance=objY-this.y;
+	</method>
+	
+	<!--- @keywords private 
+		this method is needed because if the dragging end and
+		it was not dragged _itself_ it was draged just because a connected
+		dockable Box was dragged than it could be that the connected
+		Box was forced to dock against something different onmouseup
+		so you have to rearrange the old "adjustment"	-->
+	<method name="_lookforParentOnly" args="obj">
+		<![CDATA[		
+		var newx=obj.x-tempXdistance;
+		var newy=obj.y-tempYdistance;
+		
+		this.setAttribute('x',newx);
+		this.setAttribute('y',newy);
+		]]>
+	</method>
+	
+	<dragstate name="dragger" />
+    
+    <animator attribute="y" to="20" duration="1000" started="false" />
+        
+    <animator name="doOut" attribute="y" to="-500" duration="1000" started="false" onstop="parent.doDestroy()" />    
+    
+    <method name="doDestroy">
+        this.destroy();
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/panel/baseLeftPanel.lzx b/WebContent/src/base/components/panel/baseLeftPanel.lzx
new file mode 100644
index 0000000..b0b686c
--- /dev/null
+++ b/WebContent/src/base/components/panel/baseLeftPanel.lzx
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseLeftPanel" extends="baseBoundingBorderView" 
+	   bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" hasshadow="false">
+	
+	<!--- if this Box should be closeable -->
+	<attribute name="closable" value="false" type="boolean" />
+	
+	<!--- Title of this window -->
+	<attribute name="title" type="string" value="basePanel" />
+	
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.title=canvas.getLabelName(this.labelid);
+	</method>
+	
+	<!-- basebgcolorizer -->
+	
+	<view name="_bgItem" x="1" y="1" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" 
+			width="$once{ this.parent.width-2 }" height="$once{ this.parent.height-2 }" />
+	
+	<view x="1" y="1" width="$once{ this.parent.width-2 }" height="17" 
+		  bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }">
+        <handler name="onmousedown">
+        	parent.onmousedown.sendEvent(parent);
+        </handler>
+        <handler name="onmouseup">
+        	lz.Cursor.unlock();
+        	parent.onmouseup.sendEvent(parent);
+        </handler>
+        <handler name="onmouseover">
+        	//cursor="arrow_draw_panel_cursor" 
+        	lz.Cursor.setCursorGlobal("arrow_draw_panel_cursor");
+        </handler>
+        <handler name="onmouseout">
+        	lz.Cursor.unlock();
+        </handler>
+		<view resource="draw_box_horizontal_rsc" />
+	</view>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/panel/basePanel.lzx b/WebContent/src/base/components/panel/basePanel.lzx
new file mode 100644
index 0000000..75d0d32
--- /dev/null
+++ b/WebContent/src/base/components/panel/basePanel.lzx
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="basePanel" extends="baseBoundingBorderView" 
+	   bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >
+	
+	<!--- if this Box should be closeable -->
+	<attribute name="closable" value="false" type="boolean" />
+	
+	<!--- Title of this window -->
+	<attribute name="title" type="string" value="basePanel" />
+	
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.title=canvas.getLabelName(this.labelid);
+	</method>
+	
+	<view width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" x="1" y="1" bgcolor="0xFFFFFF" />
+	<view x="1" y="1" width="${ this.parent.width-2 }" height="20" >
+				<view width="${ this.parent.parent.width-2 }" y="0" stretches="width"
+            resource="presenter_thumb_rsc" >
+            <handler name="oninit">
+            	<![CDATA[
+            		this.setColor(canvas.getThemeColor('basebgcolorizer'));
+            	]]>
+            </handler>
+			<method name="setTintRGB" args="color, brightness">
+			    <![CDATA[
+			    if (color != "" && color != null){
+			    	
+			        if (brightness == null) { brightness = 0; }
+			        var rgb = color;
+			        var red=(rgb >> 16) & 0xFF;
+			        var green=(rgb >> 8) & 0xFF;
+			        var blue=rgb & 0xFF;
+		
+			        this.setColorTransform( { ra : red, ga : green, ba : blue,
+			                            		rb : 0, gb : 0, bb : 0 } );
+			                            		
+			        if($debug) Debug.write("explorerBox/setTintRGB",this);
+			        if($debug) Debug.write("explorerBox/setTintRGB", { ra : red, ga : green, ba : blue, rb : 0, gb : 0, bb : 0 } );
+			    }
+			    ]]>
+			</method>            
+        </view>
+        <text fontsize="11" height="17" x="16" y="1" text="${ this.parent.parent.title }" 
+			fgcolor="0xFFFFFF" resize="true" fontstyle="bold" />
+		<button visible="${ this.parent.parent.closable }" x="${ this.parent.parent.width-23 }" 
+			y="1" text="X" height="18" width="20" >
+			<handler name="onmouseup">
+				this.parent.parent.close();
+			</handler>									
+		</button>
+		<view visible="${ !this.parent.parent.isopen }" x="2" y="3" resource="explorer_button_min_rsc">
+			<handler name="onmouseover">
+				this.setAttribute('frame',2);
+			</handler>
+			<handler name="onmouseout">
+				this.setAttribute('frame',1);
+			</handler>
+			<handler name="onmousedown">
+				this.setAttribute('frame',3);
+			</handler>	
+			<handler name="onmouseup">
+				this.setAttribute('frame',1);
+				this.parent.parent.toggleopen();
+			</handler>									
+		</view>
+		<view visible="${ this.parent.parent.isopen }" x="2" y="3" resource="explorer_button_max_rsc">
+			<handler name="onmouseover">
+				this.setAttribute('frame',2);
+			</handler>
+			<handler name="onmouseout">
+				this.setAttribute('frame',1);
+			</handler>
+			<handler name="onmousedown">
+				this.setAttribute('frame',3);
+			</handler>	
+			<handler name="onmouseup">
+				this.setAttribute('frame',1);
+				this.parent.parent.toggleopen();
+			</handler>									
+		</view>
+	</view>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/panel/basePropertyPanel.lzx b/WebContent/src/base/components/panel/basePropertyPanel.lzx
new file mode 100644
index 0000000..48e4906
--- /dev/null
+++ b/WebContent/src/base/components/panel/basePropertyPanel.lzx
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="basePropertyPanel" extends="view" >
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="isopen" value="true" type="boolean" />
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="open" value="true" type="boolean" />		
+	
+	<!--- if this Box should be closeable -->
+	<attribute name="closable" value="false" type="boolean" />
+	
+	<!--- Title of this window -->
+	<attribute name="title" type="string" value="basePanel" />
+	
+	<!--- @keywords private  -->
+	<attribute name="initheight" value="0" type="number" />
+	
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+		
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.title=canvas.getLabelName(this.labelid);
+	</method>
+	
+	<method name="toggleopen">
+		//if ($debug) Debug.write("toggleopen:: this.isopen", this.isopen);
+		this.setAttribute('isopen',!this.isopen);
+		if (this.isopen){		
+			this.setAttribute('height',this.initheight);
+			this.setAttribute('height',this.initheight);
+		} else {	
+			this.setAttribute('height',22);		
+		}
+	</method>
+	
+    <handler name="oninit">
+    	this.initheight=this.height;
+    </handler>
+	
+	<view width="${ this.parent.width }" height="${ this.parent.height-2 }" 
+		  x="0" y="1"  />
+	
+    <view x="0" y="1" width="${ this.parent.width }" height="20" bgcolor="0xE0E1EB" />
+    
+    <view x="0" y="0" width="${ this.parent.width }" height="1" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" />
+    
+    <view x="0" y="19" width="${ this.parent.width }" height="1" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" />
+	
+		  
+    <view x="0" y="1" width="${ this.parent.width }" height="20" >
+		
+		<handler name="onclick">
+            this.parent.toggleopen();
+        </handler>
+		
+        <text fontsize="11" height="17" x="16" y="1" text="${ this.parent.parent.title }" 
+			fgcolor="$once{ canvas.getThemeColor('menuTextColor') }" resize="true" fontstyle="bold" />
+			
+		<button visible="${ this.parent.parent.closable }" x="${ this.parent.parent.width-23 }" 
+			y="1" text="X" height="18" width="20" >
+			<handler name="onmouseup">
+				this.parent.parent.close();
+			</handler>									
+		</button>
+		
+		<view visible="${ !this.parent.parent.isopen }" x="2" y="2" resource="conferenceBox_button_min_small_rsc">
+			<handler name="onmouseup">
+				this.parent.parent.toggleopen();
+			</handler>	
+			<labelTooltip name="_labelTooltip" labelid="857" />								
+		</view>
+		
+		<view visible="${ this.parent.parent.isopen }" x="2" y="2" resource="conferenceBox_button_max_small_rsc">
+			<handler name="onmouseup">
+				this.parent.parent.toggleopen();
+			</handler>
+			<labelTooltip name="_labelTooltip" labelid="856" />									
+		</view>
+		
+	</view>
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/panel/baseTopPanel.lzx b/WebContent/src/base/components/panel/baseTopPanel.lzx
new file mode 100644
index 0000000..933fc58
--- /dev/null
+++ b/WebContent/src/base/components/panel/baseTopPanel.lzx
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseTopPanel" extends="baseBoundingBorderView" 
+	   bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" hasshadow="false">
+	
+	<!--- if this Box should be closeable -->
+	<attribute name="closable" value="false" type="boolean" />
+	
+	<!--- Title of this window -->
+	<attribute name="title" type="string" value="basePanel" />
+	
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.title=canvas.getLabelName(this.labelid);
+	</method>
+	
+	<view name="_bgItem" x="1" y="1" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" 
+			width="$once{ this.parent.width-2 }" height="$once{ this.parent.height-2 }" />
+			
+	<view x="1" y="1" height="$once{ this.parent.height-2 }" width="17" 
+		  bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }">
+        <handler name="onmousedown">
+        	parent.onmousedown.sendEvent(parent);
+        </handler>
+        <handler name="onmouseup">
+        	lz.Cursor.unlock();
+        	parent.onmouseup.sendEvent(parent);
+        </handler>
+        <handler name="onmouseover">
+        	//cursor="arrow_draw_panel_cursor" 
+        	lz.Cursor.setCursorGlobal("arrow_draw_panel_cursor");
+        </handler>
+        <handler name="onmouseout">
+        	lz.Cursor.unlock();
+        </handler>
+		<view resource="draw_box_vertical_rsc" />
+	</view>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/panel/labelPanel.lzx b/WebContent/src/base/components/panel/labelPanel.lzx
new file mode 100644
index 0000000..34aac21
--- /dev/null
+++ b/WebContent/src/base/components/panel/labelPanel.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="labelPanel" extends="basePanel" >
+	
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/panel/library.lzx b/WebContent/src/base/components/panel/library.lzx
new file mode 100644
index 0000000..96746f9
--- /dev/null
+++ b/WebContent/src/base/components/panel/library.lzx
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="resources/" />
+	
+	<include href="baseBoundingBorderView.lzx" />
+	<include href="basePanel.lzx" />
+	<include href="baseTopPanel.lzx" />
+	<include href="baseLeftPanel.lzx" />
+	<include href="panelBoundBox.lzx" />
+	<include href="basePropertyPanel.lzx" />
+
+    
+</library>
diff --git a/WebContent/src/base/components/panel/panelBoundBox.lzx b/WebContent/src/base/components/panel/panelBoundBox.lzx
new file mode 100644
index 0000000..fb637a6
--- /dev/null
+++ b/WebContent/src/base/components/panel/panelBoundBox.lzx
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!--
+
+<class name="drawViewNew" extends="drawview" cachebitmap="false" x="-1" y="-1" >
+ -->
+<class name="panelBoundBox" extends="drawview" cachebitmap="false" >
+	
+	<handler name="oncontext">
+		var numberColor = this.stringRgbToInteger(canvas.getThemeColor('basebgcolorizer'));
+		var fillColor = this.stringRgbToInteger(canvas.getThemeColor('baseMousecolorizer'));
+		this.drawBody(this,0,0,this.width,this.height,fillColor,2);
+		this.drawDottedLine(this,0,0,this.width,0,numberColor,2);
+		this.drawDottedLine(this,this.width,0,this.width,this.height,numberColor,2);
+		this.drawDottedLine(this,this.width,this.height,0,this.height,numberColor,2);
+		this.drawDottedLine(this,0,this.height,0,0,numberColor,2);
+	</handler>
+	
+	<method name="stringRgbToInteger" args="rgb">
+	    <![CDATA[
+	        var red=(rgb >> 16) & 0xFF;
+	        var green=(rgb >> 8) & 0xFF;
+	        var blue=rgb & 0xFF;
+	        return (red * 65536 + green * 256 + blue);
+	    ]]>
+	</method>
+	
+  	<method name="drawBody" args="targetObj,x1,y1,x2,y2,fill,lineWidth">
+   		<![CDATA[
+    		
+            //if ($debug) Debug.write("drawBody: ",targetObj,lineWidth);
+        
+    		targetObj.lineWidth = lineWidth;
+    		targetObj.beginPath();
+    		targetObj.moveTo(x1,y1);
+    		targetObj.lineTo(x1,y2);
+    		targetObj.lineTo(x2,y2);
+    		targetObj.lineTo(x2,y1);
+    		targetObj.lineTo (x1,y1);
+    		targetObj.closePath();
+
+    		targetObj.fillStyle = fill;
+    		targetObj.fill();
+    		
+    	]]>   
+  	</method> 	
+
+	<method name="drawDottedLine" args="targetObj,startx,starty,endx,endy,stroke,lineWidth">
+    	<![CDATA[
+    		//var drawObj = new lz.drawview(targetObj,{width:this.width,height:this.height});	    
+    		//if ($debug) Debug.write("drawDottedLine: ",targetObj,startx,starty,endx,endy,stroke,lineWidth);
+	    	Math.linearTween = function (t, b, c, d) {
+			    return c*t/d + b;
+			};
+
+    		//if($debug)  Debug.write("drawDashLine: ",tObject);
+    		var tx = endx;
+    		var ty = endy;
+    		var sx = startx;
+    		var sy = starty;
+    		var distance = Math.sqrt(Math.pow(tx-sx,2)+Math.pow(ty-sy,2)); 
+    		var steps = Math.floor(distance  / 5 ); 
+    		//if($debug)  Debug.write("steps: ",steps);
+    		var gap = false;
+    		//if($debug)  Debug.write("gap1: ",gap);
+	        for (var i = 1; i<=steps; ++i) {
+	            var ctx = Math.linearTween(i, sx, tx-sx,steps);    //equations by R.Penner!
+	            var cty = Math.linearTween(i, sy, ty-sy,steps);
+	            //if($debug)  Debug.write("gap2: ",gap);
+	            gap = !gap;    //abwechselnd luecke/nichtluecke
+	            if(!gap) {
+	            	//if($debug)  Debug.write(csx,csy,"|",ctx,cty);
+    				targetObj.strokeStyle = stroke;
+    				targetObj.lineWidth = lineWidth;
+    				targetObj.beginPath();    			            	
+	               	targetObj.moveTo(csx,csy);
+	                targetObj.lineTo(ctx,cty);
+	                targetObj.stroke();
+	            }
+	            csx =ctx;
+	            csy = cty;
+	        }       		  		
+    	]]>
+	</method>	
+	
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/panel/resources/arrow_cursor.fla b/WebContent/src/base/components/panel/resources/arrow_cursor.fla
new file mode 100644
index 0000000..7937bab
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/arrow_cursor.fla
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/arrow_cursor.swf b/WebContent/src/base/components/panel/resources/arrow_cursor.swf
new file mode 100644
index 0000000..c41d8dc
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/arrow_cursor.swf
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/arrow_cursor_resize_tool.fla b/WebContent/src/base/components/panel/resources/arrow_cursor_resize_tool.fla
new file mode 100644
index 0000000..47f6ba9
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/arrow_cursor_resize_tool.fla
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/arrow_cursor_resize_tool.swf b/WebContent/src/base/components/panel/resources/arrow_cursor_resize_tool.swf
new file mode 100644
index 0000000..05a2e97
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/arrow_cursor_resize_tool.swf
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/arrow_cursor_rotate_tool.fla b/WebContent/src/base/components/panel/resources/arrow_cursor_rotate_tool.fla
new file mode 100644
index 0000000..823ce08
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/arrow_cursor_rotate_tool.fla
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/arrow_cursor_rotate_tool.swf b/WebContent/src/base/components/panel/resources/arrow_cursor_rotate_tool.swf
new file mode 100644
index 0000000..1bbb90c
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/arrow_cursor_rotate_tool.swf
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/arrow_cursor_tool.fla b/WebContent/src/base/components/panel/resources/arrow_cursor_tool.fla
new file mode 100644
index 0000000..dda794a
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/arrow_cursor_tool.fla
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/arrow_cursor_tool.png b/WebContent/src/base/components/panel/resources/arrow_cursor_tool.png
new file mode 100644
index 0000000..a9f3169
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/arrow_cursor_tool.png
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/box_closed_small.fla b/WebContent/src/base/components/panel/resources/box_closed_small.fla
new file mode 100644
index 0000000..8b0d901
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/box_closed_small.fla
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/box_closed_small.png b/WebContent/src/base/components/panel/resources/box_closed_small.png
new file mode 100644
index 0000000..ca34510
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/box_closed_small.png
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/box_open_small.fla b/WebContent/src/base/components/panel/resources/box_open_small.fla
new file mode 100644
index 0000000..1c04bc2
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/box_open_small.fla
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/box_open_small.png b/WebContent/src/base/components/panel/resources/box_open_small.png
new file mode 100644
index 0000000..87597a3
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/box_open_small.png
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/draw_box_horizontal.fla b/WebContent/src/base/components/panel/resources/draw_box_horizontal.fla
new file mode 100644
index 0000000..223156d
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/draw_box_horizontal.fla
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/draw_box_horizontal.swf b/WebContent/src/base/components/panel/resources/draw_box_horizontal.swf
new file mode 100644
index 0000000..c6748e5
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/draw_box_horizontal.swf
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/draw_box_vertical.fla b/WebContent/src/base/components/panel/resources/draw_box_vertical.fla
new file mode 100644
index 0000000..7ddd9a4
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/draw_box_vertical.fla
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/draw_box_vertical.swf b/WebContent/src/base/components/panel/resources/draw_box_vertical.swf
new file mode 100644
index 0000000..37ffa2c
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/draw_box_vertical.swf
Binary files differ
diff --git a/WebContent/src/base/components/panel/resources/library.lzx b/WebContent/src/base/components/panel/resources/library.lzx
new file mode 100644
index 0000000..9cfcfd4
--- /dev/null
+++ b/WebContent/src/base/components/panel/resources/library.lzx
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!-- APL Author sebawagner -->
+	<resource name="conferenceBox_button_min_small_rsc" src="box_closed_small.png" />
+    <!-- APL Author sebawagner -->
+    <resource name="conferenceBox_button_max_small_rsc" src="box_open_small.png" />
+    <!-- APL Author sebawagner -->
+	<resource name="arrow_draw_panel_cursor" src="arrow_cursor.swf" />
+	<!-- APL Author sebawagner -->
+	<resource name="arrow_resize_panel_cursor" src="arrow_cursor_resize_tool.swf" />
+	<!-- APL Author sebawagner -->
+	<resource name="arrow_rotate_panel_cursor" src="arrow_cursor_rotate_tool.swf" />
+	<!-- APL Author sebawagner -->
+	<resource name="draw_box_vertical_rsc" src="draw_box_vertical.swf" />
+	<!-- APL Author sebawagner -->
+	<resource name="draw_box_horizontal_rsc" src="draw_box_horizontal.swf" />
+    
+</library>
diff --git a/WebContent/src/base/components/presenter/boxInitEffect.lzx b/WebContent/src/base/components/presenter/boxInitEffect.lzx
new file mode 100644
index 0000000..4391c93
--- /dev/null
+++ b/WebContent/src/base/components/presenter/boxInitEffect.lzx
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="boxInitEffect" extends="view" width="100" height="20" 
+    opacity="0.3" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >
+    
+    <attribute name="zielx" value="200" type="number" />
+    <attribute name="ziely" value="200" type="number" />
+    <attribute name="zielwidth" value="100" type="number" />
+    <attribute name="zielheight" value="100" type="number" />
+    
+    <attribute name="objRef" value="null" />
+    
+    <handler name="oninit">
+    	//It seems like you need additionally to start it oninit, the start = true works
+    	//only for the first initialization, sebawagner 19.03.2012
+    	//the following call seems to be redundant after using non-deprecated attribute name -- solomax 2012.07.20 
+    	this.anm.setAttribute('started', true);
+    </handler>
+    
+    <method name="sendStop">
+        this.objRef.sendAnniComplete();
+        this.destroy();
+    </method>
+
+    <animatorgroup name="anm" started="true" process="simultaneous" 
+        		duration="500" onstop="this.parent.sendStop()" >
+        <animator attribute="x" to="$once{ parent.parent.zielx }" />
+        <animator attribute="y" to="$once{ parent.parent.ziely }" />
+        <animator attribute="width" to="$once{ parent.parent.zielwidth }" />
+        <animator attribute="height" to="$once{ parent.parent.zielheight }" />
+    </animatorgroup>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/presenter/guiPresenter.lzx b/WebContent/src/base/components/presenter/guiPresenter.lzx
new file mode 100644
index 0000000..5b1ed9e
--- /dev/null
+++ b/WebContent/src/base/components/presenter/guiPresenter.lzx
@@ -0,0 +1,546 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>     
+
+<class name="guiPresenter" extends="view" width="250" height="400" 
+    clickable="$once{ this.isdragable }"
+	onmousedown="this._startDragState(this)" onmouseup="this._removeDragState(this)" >
+    
+    <handler name="oninit">
+        this.setShadow();
+    </handler>
+    
+    <method name="setShadow">
+        <![CDATA[
+        if (this.isinited && this.hasshadow){
+            this.normalMC = this.getDisplayObject();
+            this.displacementMap = new flash.filters.DropShadowFilter();
+            this.normalMC.filters = [this.displacementMap];
+        }
+        ]]>              
+    </method>	    
+
+    <attribute name="hasshadow" value="true" type="boolean" />
+          
+	<!--- The Title of this Box -->
+	<attribute name="title" value="defaulttitle" type="string" />
+	
+	<!--- if this Box should be closeable -->
+	<attribute name="closable" value="true" type="boolean" />
+    
+    <!--- if this Box should be resizeable  -->
+    <attribute name="resizeable" value="true" type="boolean" />
+	
+	<!--- Can this Box be docked to others and 
+			the width/height of parent compoent barrier -->
+	<attribute name="docking" value="true" type="boolean" />
+	
+	<!--- Hard to explain but its clear if you play around 
+		with that. Its the number of minimum pixels before 
+		the "docking" effect will be there -->
+	<attribute name="dockingbarrier" value="15" type="number" />
+
+	<!---@keywords private the list of connected views -->
+	<attribute name="dockinglist" value="null" />
+	
+	<!--- @keywords private temp-older of x-distance to docked-Box  -->
+	<attribute name="tempXdistance" value="0" type="number" />
+
+	<!--- @keywords private temp-older of y-distance to docked-Box  -->
+	<attribute name="tempYdistance" value="0" type="number" />
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="isopen" value="true" type="boolean" />
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="open" value="true" type="boolean" />	
+	
+	<!--- @keywords private  -->
+	<attribute name="initheight" value="0" type="number" />
+    
+    <!--- @keywords private show minimize, maximize, close buttons -->
+    <attribute name="fullToolBar" value="true" type="boolean" />
+    
+    <attribute name="maximizable" value="true" type="boolean" />
+    
+    <attribute name="minimizable" value="true" type="boolean" />
+    
+    <attribute name="minimized" value="false" type="boolean" />
+    
+    <attribute name="customMinimizeMethod" value="false" type="boolean" />
+    
+    <attribute name="initialHeight" value="0" type="number"/>
+    
+    <!--- @keywords private if this window is dragable -->
+    <attribute name="isdragable" value="true" type="boolean" />
+    
+    <attribute name="_barmenuButtonRef" value="null" />
+    
+    <!--- if this Box should be resizeable  -->
+    <attribute name="ismaximized" value="false" type="boolean" />    
+    <attribute name="maxi_x" value="0" type="number" />
+    <attribute name="maxi_y" value="0" type="number" />
+    <attribute name="maxi_height" value="0" type="number" />
+    <attribute name="maxi_width" value="0" type="number" />
+    
+    <attribute name="isresizeing" value="false" type="boolean" />
+    
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="id">
+		this.labelid=id;
+		this.setAttribute('title',canvas.getLabelName(this.labelid));
+	</method>    
+	
+	<!--- the Event will be thrown if you close the Box -->
+	<event name="onclose" />    
+    
+	<!--- the Event will be thrown if you do click on it and drag -->
+	<event name="onactivate" />   
+    
+    <!--- this Event will be triggered after resizing -->
+    <event name="onresized" />
+    
+	<!--- @keywords private store initial height so toggleopen can reset height  -->
+	<handler name="oninit">
+		this.initheight=this.height;
+		//Debug.write("this.isopen: ",this.isopen);
+		if (!this.open) toggleopen();
+	</handler>
+    
+    <handler name="onwidth" args="w">
+        <![CDATA[
+            if (this.isresizeing){
+            	if (w<40){
+            		this.setAttribute('width',41); 
+            		this._resizeview.onmouseup.sendEvent();
+            	}
+                if (w<_titlebar._title.width+70) {
+                    this.setAttribute('width',_titlebar._title.width+71); 
+                    this._resizeview.onmouseup.sendEvent();
+                }
+            }
+        ]]>
+    </handler>
+    
+    <handler name="onheight" args="h">
+        <![CDATA[
+            if (this.isresizeing){
+                if (h<40) {
+                    this.setAttribute('height',41); 
+                    this._resizeview.onmouseup.sendEvent();
+                }
+            }
+        ]]>
+    </handler>
+    
+	<method name="close">
+		if (this.onclose) this.onclose.sendEvent();
+        if (this._barmenuButtonRef!=null){
+            this._barmenuButtonRef.destroy();
+            this._barmenuButtonRef.parent.onwidth.sendEvent();
+        }
+		this.destroy();
+	</method>
+    
+    <method name="minimize">
+        <![CDATA[
+	        this.setAttribute("minimized",true);
+	        
+	        this._titlebar._toolbar._minimize.setAttribute("visibility","hidden");
+	        this._titlebar._toolbar._maximize2.setAttribute("visibility","visible");
+	        
+	        if (this.customMinimizeMethod) {
+	            return;
+	        }
+	        
+	        for (var eg in this.subviews) {
+	            if (this.subviews[eg].name != "_titlebar" 
+	                    && this.subviews[eg].name != "_bg") {
+	                 this.subviews[eg].setAttribute("visibility","hidden");   
+	            }
+	        }
+            
+	        this.initialHeight = this.height;
+	        //this.setAttribute("height",20);
+            this._minimizeZoom.setAttribute("to",20);
+            this._minimizeZoom.setAttribute('started', true);
+        ]]>
+    </method>
+    
+    <method name="reminimize">
+        <![CDATA[
+	        this.setAttribute("minimized",false);
+	        
+	        this._titlebar._toolbar._minimize.setAttribute("visibility","visible");
+	        this._titlebar._toolbar._maximize2.setAttribute("visibility","hidden");
+	        
+	        if (this.customMinimizeMethod) {
+	            return;
+	        }
+	        
+	        //this.setAttribute("height",this.initialHeight); 
+            this._minimizeZoom.setAttribute("to",this.initialHeight);
+            this._minimizeZoom.setAttribute('started', true);
+        ]]>
+    </method>
+    
+    <method name="reminimizeComplete">
+        <![CDATA[
+	        if (!this.minimized) {
+	            
+	            for (var eg in this.subviews) {
+	                if (this.subviews[eg].name != "_titlebar" 
+	                        && this.subviews[eg].name != "_bg") {
+	                     this.subviews[eg].setAttribute("visibility","visible");   
+	                }
+	            }
+	            
+	            if (!this.resizeable) {
+	                this._resizeview.setAttribute("visibility","hidden");   
+	            }
+	        
+	        }
+        ]]>
+    </method>
+	
+	<method name="toggleopen">
+		//////Debug.write("this.isopen",this.isopen);
+		this.setAttribute('isopen',!this.isopen);
+		if (this.isopen){
+			_calcdockingList();
+			for (var eg in this.dockinglist){
+				if(this.dockinglist[eg].docking){
+					//////Debug.write("this.dockinglist[eg]: ",this.dockinglist[eg].title);
+					//////Debug.write("open new y",this.y+this.initheight);
+					this.dockinglist[eg].toggleOpenByParent(this.initheight-22);
+					this.dockinglist[eg].setAttribute('y',this.y+this.initheight);
+					
+				}
+			}			
+			this.setAttribute('height',this.initheight);
+		} else {
+			_calcdockingList();
+			for (var eg in this.dockinglist){
+				if(this.dockinglist[eg].docking){
+					//////Debug.write("this.dockinglist[eg]: ",this.dockinglist[eg].title);
+					this.dockinglist[eg].toggleOpenByParent(-(this.initheight-22));
+					this.dockinglist[eg].setAttribute('y',this.y+22);
+				}
+			}	
+			this.setAttribute('height',22);		
+		}
+	</method>
+	
+	<method name="toggleOpenByParent" args="changeY">
+		//////Debug.write("+++++ toggleOpenByParent +++++ changeY: ",this.title,changeY);
+		var tempList=new Array();
+		<![CDATA[
+		//check for dockable stuff which is connected to this Box
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				var proof=false;
+				//////Debug.write("found some: ",this.parent.subviews[eg].title);
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < 1 ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -1 ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					proof=true;
+				}
+					
+				if (proof) tempList.push(this.parent.subviews[eg]);
+			}
+		}
+		]]>
+		//////Debug.write("tempList.length: ",tempList.length);
+		if (tempList.length!=0){
+			for (var eg in tempList){
+				if(tempList[eg].docking){
+					//////Debug.write("toggleOpenByParent 1 [eg],changeY: ",tempList[eg].title,changeY);
+					tempList[eg].toggleOpenByParent(changeY);
+					tempList[eg].setAttribute('y',tempList[eg].y+changeY);
+				}
+			}	
+		}
+		
+	</method>
+    
+    <method name="activate">
+        this.onactivate.sendEvent();
+        this.bringToFront();
+        if (this._barmenuButtonRef!=null) this._barmenuButtonRef.sendActiveWindow(this);
+    </method>
+    
+    <method name="rsapply">
+        this.isresizeing=true;
+        this.rs.apply();
+    </method>
+    
+    <method name="rsremove">
+        this.rs.remove();
+        this.isresizeing=false;
+        //Debug.write("rsremove",this,this.isinited);
+        this.onresized.sendEvent();
+    </method>    
+    	
+	<!--- @keywords private  -->
+	<method name="_removeDragState" args="obj">
+        if (!this.ismaximized){
+            //It's important to remove the dragger and do docking stuff before you check for conencted Boxes
+            dragger.remove();
+            if (obj==this){
+                if (docking) arrangePosition();
+            } else {
+                if (docking) _lookforParentOnly(obj);
+            }
+                
+            //check for connected Boxes
+            for (var eg in this.dockinglist){
+                if(this.dockinglist[eg].docking){
+                    this.dockinglist[eg]._removeDragState(this);
+                }
+            }
+        }
+	</method>
+
+
+	
+	<!--- @keywords private
+		the arg obj is needed because the dragging can be called by the Box itself
+		or by a Box which is connected to this Box!  -->
+	<method name="_startDragState" args="obj">
+        this.activate();
+        if (!this.ismaximized){
+            _calcdockingList();
+            for (var eg in this.dockinglist){
+                if(this.dockinglist[eg].docking){
+                    this.dockinglist[eg]._startDragState(this);
+                }
+            }
+            //store position cause it wasn't dragged by itself
+            if (obj!=this){
+                storeAdjustmentToParent(obj.x,obj.y);
+            }
+            dragger.apply();
+        }
+	</method>
+	
+	<!--- Calc the List of Boxes which will be dragged and setposition if this Box
+		will be dragged,docked or minimized/maximized  -->
+	<method name="_calcdockingList">
+		//Clear list of conencted Boxes
+		this.dockinglist=new Array();
+		<![CDATA[
+		//check for dockable stuff which is connected to this Box
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				var proof=false;
+
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < 1 ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -1 ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					proof=true;
+				}
+
+				if (proof) this.dockinglist.push(this.parent.subviews[eg]);
+			}
+		}
+		]]>
+		//////Debug.write("this.dockinglist.length:",this.dockinglist.length);
+	</method>
+	
+	<!--- @keywords private  -->
+	<method name="arrangePosition">
+		//do the magic
+		//the idea is: look for all on the view container one level above this one
+		//and look for the width/height and 0/0 and look for "dockable" stuff there
+		var newx=this.x;
+		var newy=this.y;
+	  
+		<![CDATA[
+				
+		for (var eg in this.parent.subviews){
+			//check that you do not calc with yourself
+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){
+				// there are 4 cases which have to be proofed to check every possible situation
+				//left box-border
+				if ( ( ((this.x+this.width)-this.parent.subviews[eg].x) < this.dockingbarrier ) && ( ((this.x+this.width)-this.parent.subviews[eg].x) > -this.dockingbarrier ) &&  ( (this.y+this.height) > this.parent.subviews[eg].y ) &&  ( this.y < (this.parent.subviews[eg].y+this.parent.subviews[eg].height) ) ){
+					newx= ( this.parent.subviews[eg].x - this.width );
+				}
+				//right box-border
+				if ( ( ((this.parent.subviews[eg].x+this.parent.subviews[eg].width)-this.x)<this.dockingbarrier ) && ( ((this.parent.subviews[eg].x+this.parent.subviews[eg].width)-this.x)>-this.dockingbarrier ) &&  ( (this.y+this.height) > this.parent.subviews[eg].y ) &&  ( this.y < (this.parent.subviews[eg].y+this.parent.subviews[eg].height) ) ){
+					newx= ( this.parent.subviews[eg].x + this.parent.subviews[eg].width );
+				}
+				//top box-border
+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < this.dockingbarrier ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -this.dockingbarrier ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					newy = this.parent.subviews[eg].y-this.height;
+				}
+				//bottom box-border
+				if ( ( ((this.parent.subviews[eg].y+this.parent.subviews[eg].height)-this.y) < this.dockingbarrier ) && ( ((this.parent.subviews[eg].y+this.parent.subviews[eg].height)-this.y) > -this.dockingbarrier ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){
+					newy = this.parent.subviews[eg].y+this.parent.subviews[eg].height;
+				}
+			}
+		}
+		
+		//Check for Borders
+		//should be done _after_ checking for other dockable stuff so it gets 
+		//priority to dock against the border of parent view
+		if (this.x<this.dockingbarrier){
+			newx=0;
+		}
+		if (this.y<this.dockingbarrier){
+			newy=0;
+		}
+		if ( (this.parent.width-(this.x+this.width))<this.dockingbarrier){
+			newx=this.parent.width-this.width;
+		}
+		if ( (this.parent.height-(this.y+this.height))<this.dockingbarrier){
+			newy=this.parent.height-this.height;
+		}
+
+		//set position
+		this.setAttribute('x',newx);
+		this.setAttribute('y',newy);
+		]]>
+	</method>
+	
+	<method name="storeAdjustmentToParent" args="objX,objY">
+		this.tempXdistance=objX-this.x;
+		this.tempYdistance=objY-this.y;
+	</method>
+	
+	<!--- @keywords private 
+		this method is needed because if the dragging end and
+		it was not dragged _itself_ it was draged just because a connected
+		dockable Box was dragged than it could be that the connected
+		Box was forced to dock against something different onmouseup
+		so you have to rearrange the old "adjustment"	-->
+	<method name="_lookforParentOnly" args="obj">
+		<![CDATA[		
+		var newx=obj.x-tempXdistance;
+		var newy=obj.y-tempYdistance;
+		
+		this.setAttribute('x',newx);
+		this.setAttribute('y',newy);
+		]]>
+	</method>
+	
+	<dragstate name="dragger" />
+    
+	<view name="_bg" width="${ this.parent.width }" height="${ this.parent.height }" 
+        bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" > 
+        <view width="${ this.parent.width-2 }" height="${ this.parent.height-2 }"
+             x="1" y="1" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" />
+    </view>        
+    
+	<view x="1" y="1" width="${ this.parent.width-1 }" height="20" name="_titlebar" >
+		<!-- stretches="width" -->
+		<gradientview x="0" width="${ this.parent.width }" height="20"
+				colorFrom="$once{ canvas.getThemeColor('baseMousecolorizer') }"
+				colorTo="$once{ canvas.getThemeColor('styleMenuBarBaseColor') }" >
+		</gradientview>
+		
+        <text name="_title" fontsize="10" height="17" x="6" y="1" text="${ this.parent.parent.title }" 
+			fgcolor="0xFFFFFF" resize="true" fontstyle="bold" />
+			
+	    <view name="_toolbar" visibility="$once{ ((parent.parent.fullToolBar) ? 'visible' : 'hidden' ) }" 
+	        x="${ parent.width-this.width-2 }" layout="axis:x;spacing:0" y="2">     
+            
+            <miniIconsPresenter name="_minimize"
+                visibility="$once{ ((parent.parent.parent.minimizable) ? 'visible' : 'hidden' ) }" 
+                iconRessourceName="btn_presenter_minimize">
+                <handler name="onclick">
+                    this.parent.parent.parent.minimize();
+                </handler>
+                <labelTooltip labelid="856" />
+            </miniIconsPresenter>
+            
+            <miniIconsPresenter name="_maximize2" visibility="hidden"
+                iconRessourceName="btn_presenter_maximize">
+                <handler name="onclick">
+                    this.parent.parent.parent.reminimize();
+                </handler>
+                <labelTooltip labelid="857" />
+            </miniIconsPresenter>
+            
+	        <miniIconsPresenter name="_close"
+	            visibility="$once{ ((parent.parent.parent.closable) ? 'visible' : 'hidden' ) }"
+	            iconRessourceName="btn_presenter_close2">
+	            <handler name="onclick">
+	                this.parent.parent.parent.close();
+	            </handler>
+	            <labelTooltip labelid="430" />
+	        </miniIconsPresenter>  
+            
+	    </view>  			
+	</view>
+    <handler name="onaddsubview" args="v">
+		//Debug.write("onaddsubview",v);
+		if (v.parent.subviews.length>2) this._resizeview.bringToFront();
+    </handler>
+    <view visibility="$once{ ((this.parent.resizeable) ? 'visible' : 'hidden' ) }"
+        name="_resizeview" x="${ this.parent.width - 16 }" 
+        y="${ this.parent.height - 16 }" resource="explorer_resize_rsc" 
+        cursor="explorer_resizemouse_rsc" onmousedown="this.parent.rsapply()"
+        onmouseup="this.parent.rsremove()" >
+        <labelTooltip text="resize" />
+    </view>    
+    <resizestate name="rs"/>
+    
+    <animator name="_minimizeZoom" attribute="height" 
+              duration="750" to="20" started="false">
+        <handler name="onstop" args="s">
+            parent.reminimizeComplete();
+        </handler>
+    </animator>
+    
+</class>
+
+<class name="miniIconsPresenter" extends="view">
+    
+    <attribute name="iconRessourceName" value="" type="string"/>
+    
+    <handler name="onmouseover">
+        this._bg.setAttribute("bgcolor",0xFFFFFF);
+        this._bg.setAttribute("visibility","visible");
+    </handler>
+    
+    <handler name="onmouseout">
+        this._bg.setAttribute("visibility","hidden");
+    </handler>
+    
+    <handler name="onmousedown">
+        this._bg.setAttribute("bgcolor",canvas.getThemeColor('basebgcolorizer'));
+        this._bg.setAttribute("visibility","visible");
+    </handler>
+    
+    <handler name="onmouseup">
+        this._bg.setAttribute("visibility","hidden");
+    </handler>
+    
+    <view name="_bg" visibility="hidden" opacity="0.7"
+          width="14" height="14" x="1" y="1" bgcolor="0xFFFFFF" />
+          
+    <view name="_itemRsc" resource="$once{ parent.iconRessourceName }" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/presenter/library.lzx b/WebContent/src/base/components/presenter/library.lzx
new file mode 100644
index 0000000..9472fa8
--- /dev/null
+++ b/WebContent/src/base/components/presenter/library.lzx
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="resources/" />
+	<include href="boxInitEffect.lzx" />
+	<include href="guiPresenter.lzx" />
+
+    
+</library>
diff --git a/WebContent/src/base/components/presenter/resources/close_mo.png b/WebContent/src/base/components/presenter/resources/close_mo.png
new file mode 100644
index 0000000..b9d0f94
--- /dev/null
+++ b/WebContent/src/base/components/presenter/resources/close_mo.png
Binary files differ
diff --git a/WebContent/src/base/components/presenter/resources/close_up.png b/WebContent/src/base/components/presenter/resources/close_up.png
new file mode 100644
index 0000000..79d3b72
--- /dev/null
+++ b/WebContent/src/base/components/presenter/resources/close_up.png
Binary files differ
diff --git a/WebContent/src/base/components/presenter/resources/library.lzx b/WebContent/src/base/components/presenter/resources/library.lzx
new file mode 100644
index 0000000..994ca29
--- /dev/null
+++ b/WebContent/src/base/components/presenter/resources/library.lzx
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!-- APL Author sebawagner -->
+	<resource src="presenter_thumb.swf" name="presenter_thumb_rsc" />
+    <!-- APL Author sebawagner -->
+    <resource name="btn_presenter_minimize" src="minimize_up.png" />
+    <!-- APL Author sebawagner -->
+    <resource name="btn_presenter_maximize" src="maximize_up.png" />
+    <!-- APL Author sebawagner -->
+    <resource name="btn_presenter_maximize2" src="maximize2_up.png" />
+    
+    <!-- APL Author sebawagner -->
+    <resource name="btn_presenter_close2" src="close_up.png" />
+    
+    <!-- APL Author sebawagner -->
+	<resource name="btn_presenter_close">
+        <frame src="close_up.png" />
+        <frame src="close_mo.png" />
+        <frame src="close_up.png" />
+    </resource> 
+    
+</library>
diff --git a/WebContent/src/base/components/presenter/resources/maximize2_up.png b/WebContent/src/base/components/presenter/resources/maximize2_up.png
new file mode 100644
index 0000000..1edd23b
--- /dev/null
+++ b/WebContent/src/base/components/presenter/resources/maximize2_up.png
Binary files differ
diff --git a/WebContent/src/base/components/presenter/resources/maximize_up.png b/WebContent/src/base/components/presenter/resources/maximize_up.png
new file mode 100644
index 0000000..778c05c
--- /dev/null
+++ b/WebContent/src/base/components/presenter/resources/maximize_up.png
Binary files differ
diff --git a/WebContent/src/base/components/presenter/resources/minimize_up.png b/WebContent/src/base/components/presenter/resources/minimize_up.png
new file mode 100644
index 0000000..1637298
--- /dev/null
+++ b/WebContent/src/base/components/presenter/resources/minimize_up.png
Binary files differ
diff --git a/WebContent/src/base/components/presenter/resources/presenter_thumb.swf b/WebContent/src/base/components/presenter/resources/presenter_thumb.swf
new file mode 100644
index 0000000..84f8b96
--- /dev/null
+++ b/WebContent/src/base/components/presenter/resources/presenter_thumb.swf
Binary files differ
diff --git a/WebContent/src/base/components/resetCombobox.lzx b/WebContent/src/base/components/resetCombobox.lzx
new file mode 100644
index 0000000..ae0a855
--- /dev/null
+++ b/WebContent/src/base/components/resetCombobox.lzx
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <class name="resetCombobox" extends="combobox" editable="false" shownitems="12"
+    	   style="componentStyle" itemclassname="labeldTextListItem">
+    
+    	<method name="getNumItems">
+    		return this.cblist.getNumItems();
+    	</method>
+    
+        <method name="reset" >
+            <![CDATA[
+                var currentCount = this.cblist.getNumItems();
+                for (var i = 0; i < currentCount; i++)
+                    this.removeItemAt(0);
+                this.clearSelection();
+            ]]>
+        </method>
+    
+    </class>
+        
+</library>
diff --git a/WebContent/src/base/components/scrollbars/library.lzx b/WebContent/src/base/components/scrollbars/library.lzx
new file mode 100644
index 0000000..9ee00e1
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/library.lzx
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+	<!-- APL Author sebawagner -->

+	<resource name="omscrolltrack_y_rsc" src="resources/y_scrolltrack.swf" />

+	

+	<!-- APL Author sebawagner -->

+    <resource name="omscrollbar_ythumbmiddle_rsc" src="resources/scrollthumb_y_mid.swf" />

+    <!-- APL Author sebawagner -->

+    <resource name="omscrollbar_ythumbtop_rsc" src="resources/scrollthumb_y_top.swf" />

+    <!-- APL Author sebawagner -->

+    <resource name="omscrollbar_ythumbbottom_rsc" src="resources/scrollthumb_y_bottom.swf" />

+    <!-- APL Author sebawagner -->

+   	<resource name="omscrolltrack_x_rsc" src="resources/x_scrolltrack.swf" />

+	<!-- APL Author sebawagner -->

+    <resource name="omscrollbar_xthumbmiddle_rsc" src="resources/scrollthumb_x_mid.swf" />

+    <!-- APL Author sebawagner -->

+    <resource name="omscrollbar_xthumbleft_rsc" src="resources/scrollthumb_x_left.swf" />

+    <!-- APL Author sebawagner -->

+    <resource name="omscrollbar_xthumbright_rsc" src="resources/scrollthumb_x_right.swf" />

+

+	<include href="om_vscrollbar.lzx"/>

+	<include href="om_hscrollbar.lzx"/>

+

+</library>

diff --git a/WebContent/src/base/components/scrollbars/om_hscrollbar.lzx b/WebContent/src/base/components/scrollbars/om_hscrollbar.lzx
new file mode 100644
index 0000000..036fed6
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/om_hscrollbar.lzx
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="om_hscrollbar" extends="basescrollbar" styleable="false"
+    axis="x">
+
+    <!--- @keywords private -->
+    <attribute name="height" value="10"/>
+    
+    <!--- @keywords private -->
+    <method name="_showEnabled">
+        <![CDATA[
+        if (!_enabled) {
+        	//this.scrolltrack.thumb.setAttribute('height', 0);
+            this.scrolltrack.thumb.setAttribute('visibility', 'hidden');
+        } else {
+            this.scrolltrack.thumb.setAttribute('visibility', 'visible');
+        }
+        super._showEnabled();
+    ]]>
+    </method>
+
+	<view name="rightarrow" width="0" />
+    <view name="scrolltrack">
+    	 <basescrolltrack name="left"
+           resource="omscrolltrack_x_rsc" stretches="width">
+         	<attribute name="height" value="${parent.height}"/>
+            <attribute name="width" value="${parent.width}"/>  
+         </basescrolltrack>
+         <basescrollthumb name="thumb" x="1">
+             <view resource="omscrollbar_xthumbleft_rsc"/>
+             <view resource="omscrollbar_xthumbmiddle_rsc" stretches="both"/>
+             <view resource="omscrollbar_xthumbright_rsc"/>
+             <stableborderlayout axis="x"/>
+        </basescrollthumb>
+    </view>
+
+	<view height="0" name="leftarrow" />
+    <stableborderlayout axis="x"/>
+
+</class>
+</library>
diff --git a/WebContent/src/base/components/scrollbars/om_vscrollbar.lzx b/WebContent/src/base/components/scrollbars/om_vscrollbar.lzx
new file mode 100644
index 0000000..98623ed
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/om_vscrollbar.lzx
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="om_vscrollbar" extends="basescrollbar" styleable="false"
+    axis="y">
+
+    <!--- @keywords private -->
+    <attribute name="width" value="10"/>
+    
+    <!--- @keywords private -->
+    <method name="_showEnabled">
+        <![CDATA[
+        if (!_enabled) {
+        	//this.scrolltrack.thumb.setAttribute('height', 0);
+            this.scrolltrack.thumb.setAttribute('visibility', 'hidden');
+        } else {
+            this.scrolltrack.thumb.setAttribute('visibility', 'visible');
+        }
+        super._showEnabled();
+    ]]>
+    </method>
+
+	<view name="toparrow" height="0" />
+    <view name="scrolltrack">
+    	 <basescrolltrack name="top"
+           resource="omscrolltrack_y_rsc" stretches="height">
+         	<attribute name="height" value="${parent.height}"/>
+            <attribute name="width" value="${parent.width}"/>  
+         </basescrolltrack>
+         <basescrollthumb name="thumb" x="1">
+             <view resource="omscrollbar_ythumbtop_rsc"/>
+             <view resource="omscrollbar_ythumbmiddle_rsc" stretches="both"/>
+             <view resource="omscrollbar_ythumbbottom_rsc"/>
+             <stableborderlayout axis="y"/>
+        </basescrollthumb>
+    </view>
+
+	<view height="0" name="bottomarrow" />
+    <stableborderlayout axis="y"/>
+
+</class>
+</library>
diff --git a/WebContent/src/base/components/scrollbars/resources/scrollthumb_x_left.swf b/WebContent/src/base/components/scrollbars/resources/scrollthumb_x_left.swf
new file mode 100644
index 0000000..fd9411b
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/resources/scrollthumb_x_left.swf
Binary files differ
diff --git a/WebContent/src/base/components/scrollbars/resources/scrollthumb_x_mid.swf b/WebContent/src/base/components/scrollbars/resources/scrollthumb_x_mid.swf
new file mode 100644
index 0000000..fff3744
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/resources/scrollthumb_x_mid.swf
Binary files differ
diff --git a/WebContent/src/base/components/scrollbars/resources/scrollthumb_x_right.swf b/WebContent/src/base/components/scrollbars/resources/scrollthumb_x_right.swf
new file mode 100644
index 0000000..74ea64a
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/resources/scrollthumb_x_right.swf
Binary files differ
diff --git a/WebContent/src/base/components/scrollbars/resources/scrollthumb_y_bottom.swf b/WebContent/src/base/components/scrollbars/resources/scrollthumb_y_bottom.swf
new file mode 100644
index 0000000..09a370b
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/resources/scrollthumb_y_bottom.swf
Binary files differ
diff --git a/WebContent/src/base/components/scrollbars/resources/scrollthumb_y_mid.swf b/WebContent/src/base/components/scrollbars/resources/scrollthumb_y_mid.swf
new file mode 100644
index 0000000..af9015f
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/resources/scrollthumb_y_mid.swf
Binary files differ
diff --git a/WebContent/src/base/components/scrollbars/resources/scrollthumb_y_top.swf b/WebContent/src/base/components/scrollbars/resources/scrollthumb_y_top.swf
new file mode 100644
index 0000000..c701740
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/resources/scrollthumb_y_top.swf
Binary files differ
diff --git a/WebContent/src/base/components/scrollbars/resources/x_scrolltrack.swf b/WebContent/src/base/components/scrollbars/resources/x_scrolltrack.swf
new file mode 100644
index 0000000..937dd8d
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/resources/x_scrolltrack.swf
Binary files differ
diff --git a/WebContent/src/base/components/scrollbars/resources/y_scrolltrack.swf b/WebContent/src/base/components/scrollbars/resources/y_scrolltrack.swf
new file mode 100644
index 0000000..b05b88a
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/resources/y_scrolltrack.swf
Binary files differ
diff --git a/WebContent/src/base/components/scrollbars/scrollbar_yresources.lzx b/WebContent/src/base/components/scrollbars/scrollbar_yresources.lzx
new file mode 100644
index 0000000..bc08ffe
--- /dev/null
+++ b/WebContent/src/base/components/scrollbars/scrollbar_yresources.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+

+    

+</library>
\ No newline at end of file
diff --git a/WebContent/src/base/components/simplevaluelist/library.lzx b/WebContent/src/base/components/simplevaluelist/library.lzx
new file mode 100644
index 0000000..b9ca8fe
--- /dev/null
+++ b/WebContent/src/base/components/simplevaluelist/library.lzx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="simpleValueList.lzx" />
+    <include href="recordValueList.lzx" />
+
+</library>
diff --git a/WebContent/src/base/components/simplevaluelist/recordValueList.lzx b/WebContent/src/base/components/simplevaluelist/recordValueList.lzx
new file mode 100644
index 0000000..95cacae
--- /dev/null
+++ b/WebContent/src/base/components/simplevaluelist/recordValueList.lzx
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="recordListItem" extends="baseContentListItem" height="24">
+    
+    <attribute name="valueName" type="string" value="" />
+    <attribute name="value" type="number" value="0" />
+    
+	<turnOverTextItem text="$once{ parent.valueName }" width="226" />    
+    
+	<view width="60" height="24"
+		onclick="new lz.confirmDeleteWindow(canvas.main_content._content.inner,{refObj:this});" >		
+		<method name="confirmDelete">
+            this.parent.parent.parent.parent.parent.itemToDelete=this;
+			this.parent.parent.parent.parent.parent.deleteItem.sendEvent(parent);
+		</method>
+		<image stretches="both" width="16" height="16" 
+			 src="$once{ canvas.getThemeImage('button_cancel_rsc') }"
+			 align="center" y="4" />
+		<labelTooltip labelid="274" />
+	</view>	
+</class>
+	
+	
+<class name="recordValueList" extends="turnOverList" >
+    
+    <attribute name="itemToDelete" value="null" />
+    
+    <event name="deleteItem" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/simplevaluelist/simpleValueList.lzx b/WebContent/src/base/components/simplevaluelist/simpleValueList.lzx
new file mode 100644
index 0000000..2807c56
--- /dev/null
+++ b/WebContent/src/base/components/simplevaluelist/simpleValueList.lzx
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="simpleListItem" extends="view"
+	bgcolor="0xFFFFFF" onmouseup="this.parent.parent.parent.parent.toggleSelected(this)" >
+	<handler name="onmouseover">
+		<![CDATA[
+			if (this.selected) this.setAttribute('bgcolor',canvas.getThemeColor('baseMouseOvercolorizer'))
+			else this.setAttribute('bgcolor',canvas.getThemeColor('baseMouseOvercolorizer'));
+		]]>
+	</handler>
+	<handler name="onmouseout">
+		<![CDATA[
+			if (this.selected)  this.setAttribute('bgcolor',canvas.getThemeColor('baseMouseOvercolorizer'))
+			else this.setAttribute('bgcolor',0xFFFFFF);
+		]]>
+	</handler>
+	<attribute name="selected" value="false" type="boolean"/>
+	<attribute name="value" value="null" />
+	<attribute name="text" value="" type="string" />
+	<text text="$once{ parent.text }" resize="true" fontsize="11" />
+</class>
+	
+	
+<class name="simpleValueList" extends="view" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" >
+	
+	<attribute name="_selected" value="null" />
+	
+	<attribute name="multiselect" value="false" type="boolean" />
+    
+    <attribute name="itemclassname" type="string" value="simpleListItem" />
+	
+	<event name="onselect" />
+	
+	<method name="toggleSelected" args="obj">
+		<![CDATA[
+			var downkeys = lz.Keys.downKeysArray;
+			
+			//Select the Obj
+			
+			
+			if(downkeys.length==1 && downkeys[0]==17 && this.multiselect){
+				if (this._selected == null) this._selected = new Array();
+				if (this._checkForAlreadySelected(obj)) {
+					obj.setAttribute('selected',false);
+					obj.setAttribute('bgcolor',0xFFFFFF);
+				} else {
+					obj.setAttribute('selected',true);
+					this._selected.push(obj);
+				}				
+			} else if (downkeys.length==0 && this.multiselect){
+				if (this._selected == null) this._selected = new Array();
+				this._deslectAll();
+				obj.setAttribute('selected',true);
+				this._selected.push(obj);	
+			} else if (!this.multiselect) {
+				if(this._selected!=null) {
+					this._selected.setAttribute('selected',false);
+					this._selected.setAttribute('bgcolor',0xFFFFFF);
+				}
+				this._selected = obj;
+			    this._selected.setAttribute('selected',true);
+			} else {
+				Debug.warning("not handled",this);
+			}
+			
+		]]>
+	</method>
+	
+	<method name="_checkForAlreadySelected" args="obj">
+		<![CDATA[
+			for (var i=0;i<this._selected.length;i++){
+				if (this._selected[i]==obj) {
+					this._selected.splice(i,1);
+					return true;
+				}
+			}
+			return false;
+		]]>
+	</method>
+	
+	<method name="_deslectAll">
+		<![CDATA[
+			for (var i=0;i<this._selected.length;i++){
+				this._selected[i].setAttribute('selected',false);
+				this._selected[i].setAttribute('bgcolor',0xFFFFFF);
+			}
+			this._selected=new Array();
+		]]>
+	</method>
+	
+    <method name="addItem" args="txt,value">
+    	new lz[this.itemclassname](this.content.content.inn,{text:txt,value:value,width:this.width});
+    </method>
+	
+    <method name="removeItem" args="value">
+		<![CDATA[
+			if (this._selected!=null){
+				if (this.multiselect){
+					for (var i=0;i<this._selected.length;i++){
+						if (this._selected[i].value==value){
+							this._selected.splice(i,1);
+						}
+					}
+				} else {
+					if (this._selected.value==value) this._selected==null;
+				}
+			}
+			for (var i=0;i<this.content.content.inn.subviews.length;i++){
+				if(this.content.content.inn.subviews[i].value==value){
+					this.content.content.inn.subviews[i].destroy();
+				}
+			}
+		]]>
+    </method>
+	<method name="checkValue" args="value">
+		<![CDATA[
+			var t = this.getAllObjects();
+			if (t!=null){
+				for (var i=0;i<t.length;i++){
+					if (t[i].value==value) return true;
+				}
+			}
+			return false;
+		]]>
+	</method>		
+		
+    <method name="getAllItems">
+    	<![CDATA[
+    	var a = new Array();
+    	for (var i=0;i<this.content.content.inn.subviews.length;i++){
+    		//Debug.write("t: ",this.content.content.inn.subviews[i].value);
+    		a.push(Number(this.content.content.inn.subviews[i].value));
+    	}
+    	return a;
+    	]]>
+    </method>
+	<method name="getAllObjects">
+    	<![CDATA[
+    	var a = new Array();
+    	for (var i=0;i<this.content.content.inn.subviews.length;i++){
+    		a.push(this.content.content.inn.subviews[i]);
+    	}
+    	return a;
+    	]]>
+	</method>
+    <method name="clearList">
+    	for (var eg in this.content.content.inn.subviews){
+    		this.content.content.inn.subviews[eg].destroy();
+    	}
+    </method>
+    <view name="content" width="$once{ parent.width-2 }" height="$once{ parent.height-2 }"
+    	x="1" y="1" clip="true" bgcolor="0xFFFFFF">
+    	<view name="content" >
+    		<view name="inn" layout="axis:y;spacing:2" />
+    	</view>
+    	<om_vscrollbar />
+    </view>
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/tableCombobox.lzx b/WebContent/src/base/components/tableCombobox.lzx
new file mode 100644
index 0000000..d8d8fb6
--- /dev/null
+++ b/WebContent/src/base/components/tableCombobox.lzx
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="tableCombobox" extends="combobox" editable="false" fontsize="10" style="componentStyle">
+    <attribute name="initvalue" type="string" />
+    <attribute name="tvalue" type="string" />
+    <attribute name="sendchange" value="false" type="boolean" />
+    <handler name="oninit">
+        this.parent.parent.parent.parent.loadModsCombo(this);
+        this.selectItem(this.initvalue);
+    </handler>
+    <handler name="onblur">
+        if (this.sendchange) this.parent.sendchange(this,tvalue,this.getValue());
+    </handler>
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/tableListItem.lzx b/WebContent/src/base/components/tableListItem.lzx
new file mode 100644
index 0000000..fffa1ad
--- /dev/null
+++ b/WebContent/src/base/components/tableListItem.lzx
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="tableListItem" extends="view"
+    bgcolor="${ ( this.isaltered ) ? red : white }" height="22">
+    
+    <handler name="oninit">
+        this.changeholder = new Array();
+    </handler>
+
+    <attribute name="isdatarecord" value="true" type="boolean" />
+    
+    <attribute name="changeholder" value="null" />
+    <attribute name="isaltered" value="false" type="boolean" />
+
+    <method name="sendchange" args="obj,oldv,newv">
+        ////Debug.write("check Update");
+        var t = false;
+        for (var eg in this.changeholder){
+            if (this.changeholder[eg][0]==obj){
+                t = true;
+                this.changeholder[eg][1]=oldv;
+                this.changeholder[eg][2]=newv;
+                break;
+            }
+        }
+        if (!t) this.changeholder.push(new Array(obj,oldv,newv));
+        
+        t = false;
+        for (var eg in this.changeholder){
+            if (this.changeholder[eg][1]!=this.changeholder[eg][2]){
+                t = true;
+                break;
+            }
+        }
+        
+        this.setAttribute('isaltered',t);
+        this._doupdate.setValue(t);
+        this.parent.parent.parent.sendchange(this);
+        
+    </method>
+    <simplelayout axis="x" spacing="3" inset="2" />
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/text/borderedInputtext.lzx b/WebContent/src/base/components/text/borderedInputtext.lzx
new file mode 100644
index 0000000..4e74e26
--- /dev/null
+++ b/WebContent/src/base/components/text/borderedInputtext.lzx
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="borderedInputtext" extends="view" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >
+    <!---@keywords private -->
+	<attribute name="width" value="200" type="size" />
+	<!---@keywords private -->
+	<attribute name="height" value="18" type="size" />
+    <attribute name="tvalue" type="string" value="default"/>
+    <attribute name="sendchange" value="false" type="boolean" />
+    <attribute name="multiline" value="false"/>
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+    <attribute name="checkIsNumber" value="false" type="boolean" />
+    <attribute name="checkIsDouble" value="false" type="boolean" />
+    <attribute name="editable" value="true" setter="setEditable(editable)" type="boolean" />
+    <method name="setEditable" args="value">
+        this.editable=value;
+    	this.field.setEnabled(value);
+    </method>
+    <!---@keywords private -->
+    <event name="onblur" />
+    <method name="setItemEnabled" args="value">
+    	this.field.setEnabled(value);
+    </method>    
+    <attribute name="maxlength" value="null" type="number"/>         	
+	<attribute name="text" type="string" value="" />
+		<!-- -->
+  <inputtext name="field" fontsize="10" text="${ this.parent.text }" x="1" y="1" bgcolor="0xFFFFFF" 
+  	multiline="$once{parent.multiline}" width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" >
+  		<attribute name="preText" value="" type="string" />
+  		<handler name="onfocus">
+  			this.preText = this.getText();
+  		</handler>
+      	<handler name="onblur">
+      		var t = this.getText();
+      		if (this.parent.checkIsNumber){
+      			if ( isNaN( Number(t) ) ){
+      				if (this.parent.checkIsDouble){
+      					t="0.00";
+      				} else {
+      					t=this.preText;
+      				}
+      				this.setAttribute('text',t);
+      			}
+      		}
+            if (this.parent.sendchange) this.parent.parent.sendchange(this.parent,this.parent.tvalue,this.getText());
+            if (this.parent.onblur) this.parent.onblur.sendEvent();
+      	</handler>
+        <handler name="oninit">
+            this.setEnabled(this.parent.editable);
+        </handler>       	           
+	</inputtext>	   
+	 
+	<method name="getText">
+		return this.field.getText();
+	</method>
+	<method name="setText" args="txt">
+		this.setAttribute('text',txt);
+	</method> 		
+</class>
+
+<class name="borderedMultiInputtext" extends="view">
+    <!---@keywords private -->
+	<attribute name="width" value="200" type="size" />
+    <!---@keywords private -->	
+	<attribute name="height" value="18" type="size" />
+    <attribute name="tvalue" type="string" value="default"/>
+    <attribute name="sendchange" value="false" type="boolean" />
+    <attribute name="multiline" value="false"/>
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+    <attribute name="checkIsNumber" value="false" type="boolean" />
+    <attribute name="checkIsDouble" value="false" type="boolean" />
+    <attribute name="editable" value="true" setter="setEditable(editable)" type="boolean" />
+    <method name="setEditable" args="value">
+        this.editable=value;
+    	this.field.setEnabled(value);
+    </method>
+    <method name="setItemEnabled" args="value">
+    	this.field.setEnabled(value);
+    </method>    
+    <attribute name="maxlength" value="null" type="number"/>       
+    <!---@keywords private -->  	
+	<attribute name="bgcolor" value="0xA3B2CC" type="color" />
+	<attribute name="text" type="string" value="" />
+		<!-- -->
+  <inputtext name="field" fontsize="10" text="${ this.parent.text }" x="1" y="1" bgcolor="0xFFFFFF" 
+  	multiline="true" width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" >
+      	<handler name="onblur">
+      		var t = this.getText();
+      		if (this.parent.checkIsNumber){
+      			if ( isNaN( Number(t) ) ){
+      				if (this.parent.checkIsDouble){
+      					t="0.00";
+      				} else {
+      					t="0";
+      				}
+      				this.setAttribute('text',t);
+      			}
+      		}
+            if (this.parent.sendchange) this.parent.parent.sendchange(this.parent,this.parent.tvalue,this.getText());
+      	</handler>   
+        <handler name="oninit">
+            this.setEnabled(this.parent.editable);
+            if(this.multiline) this.init();
+        </handler>       	           
+        <method name="init">
+            super.init();        
+        </method>
+	</inputtext>	   
+	 
+	<method name="getText">
+		return this.field.getText();
+	</method>
+	<method name="setText" args="txt">
+		this.setAttribute('text',txt);
+	</method> 		
+</class>
+
+<class name="borderedPasswordText" extends="view">
+    <!---@keywords private -->
+	<attribute name="width" value="200" type="size" />
+	<!---@keywords private -->
+	<attribute name="height" value="18" type="size" />
+    <attribute name="tvalue" type="string" value="default"/>
+    <attribute name="sendchange" value="false" type="boolean" />
+    <attribute name="multiline" value="false"/>
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+    <attribute name="checkIsNumber" value="false" type="boolean" />
+    <attribute name="checkIsDouble" value="false" type="boolean" />
+    <attribute name="editable" value="true" setter="setEditable(editable)" type="boolean" />
+    <method name="setEditable" args="value">
+        this.editable=value;
+    	this.field.setEnabled(value);
+    </method>
+    <method name="setItemEnabled" args="value">
+    	this.field.setEnabled(value);
+    </method>    
+    <attribute name="maxlength" value="null" type="number"/>  
+    <!---@keywords private -->       	
+	<attribute name="bgcolor" value="0xA3B2CC" type="color" />
+	<!---@keywords private -->
+	<attribute name="text" type="string" value="" />
+		<!-- -->
+  <inputtext name="field" fontsize="10" text="${ this.parent.text }" x="1" y="1" bgcolor="0xFFFFFF" 
+  	multiline="$once{parent.multiline}" password="true" width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" >
+      	<handler name="onblur">
+      		var t = this.getText();
+      		if (this.parent.checkIsNumber){
+      			if ( isNaN( Number(t) ) ){
+      				if (this.parent.checkIsDouble){
+      					t="0.00";
+      				} else {
+      					t="0";
+      				}
+      				this.setAttribute('text',t);
+      			}
+      		}
+            if (this.parent.sendchange) this.parent.parent.sendchange(this.parent,this.parent.tvalue,this.getText());
+      	</handler>   
+        <handler name="oninit">
+            this.setEnabled(this.parent.editable);
+        </handler>       	           
+	</inputtext>	   
+	 
+	<method name="getText">
+		return this.field.getText();
+	</method>
+	<method name="setText" args="txt">
+		this.setAttribute('text',txt);
+	</method> 		
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/text/customEdittext.lzx b/WebContent/src/base/components/text/customEdittext.lzx
new file mode 100644
index 0000000..b8e1ce6
--- /dev/null
+++ b/WebContent/src/base/components/text/customEdittext.lzx
@@ -0,0 +1,236 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="customEdittext" extends="inputtext" bgcolor="0xFFFFFF" fontsize="11" height="20" >
+	
+	<view name="v_border" height="1"       bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" width="$once{parent.width}" />
+    <view name="h_border" width="1"  y="1" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" height="$once{parent.height -1}" />
+	
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	
+	<attribute name="isvalidInput" value="true" type="boolean" />
+	<attribute name="regexpType" value="none" type="string" />
+	<attribute name="regexpLabelid" type="number" />
+	<attribute name="preText" value="" type="string" />
+    <attribute name="emailRegEx" type="string" value=""/>
+	
+	<event name="onafterCheck" />
+
+	<handler name="onfocus" args="f">
+    	this.preText = this.getText();
+    </handler>
+    
+    <handler name="oninit">
+    <![CDATA[
+    	emailRegEx = "^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{1,3})$";
+    	//this.field.setAttribute("bgcolor",0xFFFFFF);
+    ]]>
+    </handler>
+    
+    <handler name="ontext" args="txt">
+    	<![CDATA[
+            
+    	    //
+    	   
+    	    if (System.capabilities.os.indexOf('Linux')==-1) { 
+                return; 
+	        }
+	        
+	        //if ($debug) Debug.write("System.capabilities.os -- START ",System.capabilities.os,txt);
+	        
+	        if (txt == null || txt.length == 0) {
+	        	return;
+	        }
+	        
+	        
+	        //UTF8 character remappings
+            var cp1252 = new Object();
+            cp1252[0x20ac]=0x80;
+            cp1252[0x201a]=0x82;
+            cp1252[0x0192]=0x83;
+            cp1252[0x201e]=0x84;
+            cp1252[0x2026]=0x85;
+            cp1252[0x2020]=0x86;
+            cp1252[0x2021]=0x87;
+            cp1252[0x02c6]=0x88;
+            cp1252[0x2030]=0x89;
+            cp1252[0x0160]=0x8a;
+            cp1252[0x2039]=0x8b;
+            cp1252[0x0152]=0x8c;
+            cp1252[0x017d]=0x8e;
+            cp1252[0x2018]=0x91;
+            cp1252[0x2019]=0x92;
+            cp1252[0x201c]=0x93;
+            cp1252[0x201d]=0x94;
+            cp1252[0x2022]=0x95;
+            cp1252[0x2013]=0x96;
+            cp1252[0x2014]=0x97;
+            cp1252[0x02dc]=0x98;
+            cp1252[0x2122]=0x99;
+            cp1252[0x0161]=0x9a;
+            cp1252[0x203a]=0x9b;
+            cp1252[0x0153]=0x9c;
+            cp1252[0x017e]=0x9e;
+            cp1252[0x0178]=0x9f;
+    	
+            
+            var s=eval(Selection.getFocus()); 
+            var t=txt;
+                    
+            var i=Selection.getCaretIndex()-1; 
+            
+            //if ($debug) Debug.write("i",i,Selection.getCaretIndex());
+            
+            var d=i;
+            
+            //if ($debug) Debug.write("DO WHILE -1- ",t.charCodeAt(i),cp1252[t.charCodeAt(i)],i,0x80,0xBF);
+            
+            while (((t.charCodeAt(i)>=0x80 && t.charCodeAt(i)<=0xBF) || (cp1252[t.charCodeAt(i)])) && i>0) {
+            	
+            	//if ($debug) Debug.write("DO WHILE -2- ",t.charCodeAt(i),cp1252[t.charCodeAt(i)],i);
+            	
+                if (cp1252[t.charCodeAt(i)]) {
+                    t=t.substr(0,i)+String.fromCharCode(cp1252[t.charCodeAt(i)])+t.substr(i+1);
+                }
+                i--;
+            }
+            if (i==d) { 
+            	//if ($debug) Debug.write("i == d NOTHING TO REPLACE!");
+                return; 
+            }
+        
+            var u=0;
+            
+            if (t.charCodeAt(i)>=0xC2 && t.charCodeAt(i)<=0xDF && d-i==1) {
+                 // two-byte sequence
+                u= (t.charCodeAt(i+1) & 0x3F)       +
+                  ((t.charCodeAt(i  ) & 3   ) << 6) +
+                  ((t.charCodeAt(i  ) & 0x1C) << 6);
+            } else if (t.charCodeAt(i)>=0xE0 && t.charCodeAt(i)<=0xEF && d-i==2) {
+                // three-byte sequence
+                // (Flash Player doesn't cope with any more obscure Unicode)
+                u= (t.charCodeAt(i+2) & 0x3F)        +
+                  ((t.charCodeAt(i+1) & 3   ) << 6 ) +
+                  ((t.charCodeAt(i+1) & 0x3C) << 6 ) +
+                  ((t.charCodeAt(i  ) & 0x0F) << 12);
+            }
+        
+            if (u!=0) {
+            	//if ($debug) Debug.write("Replace String -1- ",txt,u,"Replace With ",String.fromCharCode(u));
+            	
+                this.setAttribute("text",t.slice(0,i)+String.fromCharCode(u)+t.slice(d+1));
+                
+                //if ($debug) Debug.write("Replace String -2- ",txt,u);
+                
+                this.setAttribute("text",this.text.split(String.fromCharCode(0x03)).join(''));
+            }
+            
+            //if ($debug) Debug.write("-- END ",this.text);
+            
+    	]]>
+    </handler>
+    
+    <attribute name="callDelegate" value="null" />
+    <attribute name="regExpCheckId" value="-1" />
+	
+	<handler name="onblur">
+		<![CDATA[
+			if (this.regexpType!="none"){
+			
+				//if ($debug) Debug.write("onblur");
+				//if ($debug) Debug.write("onblur check ",this.regexpType);		
+				var fieldValue = this.getText();
+				if (this.regexpType=="email") {
+					//var regExpV = ".+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)";
+					var regExpV = this.emailRegEx;
+					//var regExpV = "^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
+					this.regexpLabelid = 519;
+				} else if (this.regexpType=="date"){
+					var regExpV = "(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\\d\\d";
+					this.regexpLabelid = 518;
+				} else if (this.regexpType=="float"){
+					var regExpV = "[0-9]*\\.[0-9]*";
+					this.regexpLabelid = 520;
+				} else if (this.regexpType=="phone"){
+					var regExpV = "\\+[0-9]+ [0-9]+ [0-9\\-]+";
+					this.regexpLabelid = 522;
+				} else if (this.regexpType=="number"){
+					var regExpV = "[0-9]*";
+					this.regexpLabelid = 521;
+				} else if (this.regexpType=="time"){
+					var regExpV = "([01][0-9]|2[0-3]):[0-5][0-9]";
+					this.regexpLabelid = 523;
+				} else {
+					if ($debug) Debug.warn("Unkown Regexp Type: ",this.regexpType);
+				}
+				//if ($debug) Debug.write("regExpV: ",regExpV);
+		  	    var fieldValue = this.getText();
+		  	    
+		  	    this.regExpCheckId = canvas.doRegExpCheck(this.getText(),regExpV);
+		  	    
+		  	    if(this.callDelegate == null) {
+		  	    	this.callDelegate = new LzDelegate( this, "checkRegExpResult" );
+		  	    }
+		
+				lz.Timer.resetTimer( this.callDelegate, 50 );
+			}
+		]]>
+	</handler>
+	
+	<method name="checkRegExpResult" args="item">
+		var tResult = canvas.checkRegExpResult(this.regExpCheckId);
+     	if ($debug) Debug.write("callback",tResult);
+     
+		if(tResult == undefined || tResult == null) {
+			lz.Timer.resetTimer( this.callDelegate, 50 );
+		} else {
+			if(!tResult){
+                if ($debug) Debug.warn("FALSE: regexperror");
+              	disablesTooltips(new lz.regexptip(canvas,{x:this.getAttributeRelative('x',canvas)+12,
+              					y:this.getAttributeRelative('y',canvas)+26,
+              					regexptext:canvas.getLabelName(this.regexpLabelid)}));
+              	this.usePreContent();
+              	this.setAttribute('isvalidInput',false);
+            } else {
+              	if(!this.isvalidInput){
+                	disablesTooltips(null);
+              	}
+              	this.setAttribute('isvalidInput',true);
+            }
+            if ($debug) Debug.write("-- Complete --");
+            this.onafterCheck.sendEvent();
+		}
+     </method>
+	
+    
+    <method name="setLabelId" args="_labelid" >
+        this.labelid = _labelid;
+        this.setAttribute('text',canvas.getLabelName(this.labelid));
+    </method>
+    
+  	<method name="usePreContent">
+  		this.setAttribute('text',this.preText);
+  	</method>    
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/text/customInputtext.lzx b/WebContent/src/base/components/text/customInputtext.lzx
new file mode 100644
index 0000000..4301a29
--- /dev/null
+++ b/WebContent/src/base/components/text/customInputtext.lzx
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="customInputtext" extends="inputtext">
+	  
+	 <!-- lost selection workaroud -->
+	 <attribute name="selPosition" type="integer"/>
+	 <attribute name="selSize" type="integer"/>
+	 <!-- this method should be called before the component lost focus -->
+	 <method name="saveselection">
+	 	this.selPosition=getSelectionPosition();
+	 	this.selSize=getSelectionSize();
+	 </method>
+	  
+	 <handler name="onfocus">
+	 
+	 	if ($debug) Debug.write("customInputtext onFocus : ", canvas.isrtl);
+	 		
+	 
+		 if(canvas.isrtl == 'true'){
+	 		if ($debug) Debug.write("customInputtext onFocus : RTL is set");
+	 		this.setAttribute('textalign', 'right');
+        }
+        else{
+        	if ($debug) Debug.write("customInputtext onFocus : RTL is NOT set");
+      		this.setAttribute('textalign', 'left');
+        
+        }
+	 </handler>	  
+	  
+	 <handler name="ontext" args="txt">
+        <![CDATA[
+            
+            //
+           
+            if (System.capabilities.os.indexOf('Linux')==-1) { 
+                return; 
+            }
+            
+            //if ($debug) Debug.write("System.capabilities.os -- START ",System.capabilities.os,txt);
+            
+            if (txt == null || txt.length == 0) {
+                return;
+            }
+            
+            
+            //UTF8 character remappings
+            var cp1252 = new Object();
+            cp1252[0x20ac]=0x80;
+            cp1252[0x201a]=0x82;
+            cp1252[0x0192]=0x83;
+            cp1252[0x201e]=0x84;
+            cp1252[0x2026]=0x85;
+            cp1252[0x2020]=0x86;
+            cp1252[0x2021]=0x87;
+            cp1252[0x02c6]=0x88;
+            cp1252[0x2030]=0x89;
+            cp1252[0x0160]=0x8a;
+            cp1252[0x2039]=0x8b;
+            cp1252[0x0152]=0x8c;
+            cp1252[0x017d]=0x8e;
+            cp1252[0x2018]=0x91;
+            cp1252[0x2019]=0x92;
+            cp1252[0x201c]=0x93;
+            cp1252[0x201d]=0x94;
+            cp1252[0x2022]=0x95;
+            cp1252[0x2013]=0x96;
+            cp1252[0x2014]=0x97;
+            cp1252[0x02dc]=0x98;
+            cp1252[0x2122]=0x99;
+            cp1252[0x0161]=0x9a;
+            cp1252[0x203a]=0x9b;
+            cp1252[0x0153]=0x9c;
+            cp1252[0x017e]=0x9e;
+            cp1252[0x0178]=0x9f;
+        
+            
+            var s=eval(Selection.getFocus()); 
+            var t=txt;
+                    
+            var i=Selection.getCaretIndex()-1; 
+            
+            //if ($debug) Debug.write("i",i,Selection.getCaretIndex());
+            
+            var d=i;
+            
+            //if ($debug) Debug.write("DO WHILE -1- ",t.charCodeAt(i),cp1252[t.charCodeAt(i)],i,0x80,0xBF);
+            
+            while (((t.charCodeAt(i)>=0x80 && t.charCodeAt(i)<=0xBF) || (cp1252[t.charCodeAt(i)])) && i>0) {
+                
+                //if ($debug) Debug.write("DO WHILE -2- ",t.charCodeAt(i),cp1252[t.charCodeAt(i)],i);
+                
+                if (cp1252[t.charCodeAt(i)]) {
+                    t=t.substr(0,i)+String.fromCharCode(cp1252[t.charCodeAt(i)])+t.substr(i+1);
+                }
+                i--;
+            }
+            if (i==d) { 
+                //if ($debug) Debug.write("i == d NOTHING TO REPLACE!");
+                return; 
+            }
+        
+            var u=0;
+            
+            if (t.charCodeAt(i)>=0xC2 && t.charCodeAt(i)<=0xDF && d-i==1) {
+                 // two-byte sequence
+                u= (t.charCodeAt(i+1) & 0x3F)       +
+                  ((t.charCodeAt(i  ) & 3   ) << 6) +
+                  ((t.charCodeAt(i  ) & 0x1C) << 6);
+            } else if (t.charCodeAt(i)>=0xE0 && t.charCodeAt(i)<=0xEF && d-i==2) {
+                // three-byte sequence
+                // (Flash Player doesn't cope with any more obscure Unicode)
+                u= (t.charCodeAt(i+2) & 0x3F)        +
+                  ((t.charCodeAt(i+1) & 3   ) << 6 ) +
+                  ((t.charCodeAt(i+1) & 0x3C) << 6 ) +
+                  ((t.charCodeAt(i  ) & 0x0F) << 12);
+            }
+        
+            if (u!=0) {
+                //if ($debug) Debug.write("Replace String -1- ",txt,u,"Replace With ",String.fromCharCode(u));
+                
+                this.setAttribute("text",t.slice(0,i)+String.fromCharCode(u)+t.slice(d+1));
+                
+                //if ($debug) Debug.write("Replace String -2- ",txt,u);
+                
+                this.setAttribute("text",this.text.split(String.fromCharCode(0x03)).join(''));
+            }
+            
+            //if ($debug) Debug.write("-- END ",this.text);
+            
+        ]]>
+    </handler>
+  	
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/text/customscrollEdittext.lzx b/WebContent/src/base/components/text/customscrollEdittext.lzx
new file mode 100644
index 0000000..626e9ad
--- /dev/null
+++ b/WebContent/src/base/components/text/customscrollEdittext.lzx
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+   
+<include href="incubator/scrolledittext.lzx" />
+
+<class name="customScrollEdittext" extends="view" >
+	
+	<attribute name="text" value="" type="string" />
+	
+	<event name="ontextChange" />
+
+    <attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+    <method name="setLabelId" args="_labelid" >
+        this.labelid = _labelid;
+        this.setAttribtue('text',canvas.getLabelName(this.labelid));
+    </method>
+    
+    <method name="getText">
+    	return this._cbtext.getText();
+    </method>
+    
+    <view name="_face" bgcolor="0xFFFFFFF" 
+          width="$once{parent.width}" 
+          height="$once{parent.height}" />
+          
+    <view name="v_border" height="1" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" width="$once{parent.width}" />
+    <view name="h_border" width="1"  y="1" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" height="$once{parent.height -1}" />
+          
+    <scrolledittext name="_cbtext" width="$once{ parent.width-1 }" x="1" y="1" bgcolor="0xFFFFFF"  styleable="false"
+		height="$once{ parent.height-1 }" text="${ parent.text }" vscrollbarclassname="om_vscrollbar"
+		multiline="true" fontsize="11" />
+    
+     
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/text/labelText.lzx b/WebContent/src/base/components/text/labelText.lzx
new file mode 100644
index 0000000..6387078
--- /dev/null
+++ b/WebContent/src/base/components/text/labelText.lzx
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="labelText" extends="text" resize="true" fontsize="11" >
+
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+	
+</class>
+
+
+<class name="labelTextWidthTooltip" extends="text" resize="true" 
+	   onmouseover="" onmouseout=""
+	   fontsize="11" >
+	
+	<attribute name="labelLabelid" type="number" value="-1" />
+
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+	
+	<labelTooltip name="_labelTooltip" labelid="$once{ parent.labelLabelid }" />
+	
+</class>
+
+<class name="labeldTextListItem" extends="textlistitem">
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+    <method name="setLabelId" args="_labelid" >
+        this.labelid = _labelid;
+        this.setAttribute('text',canvas.getLabelName(this.labelid));
+    </method>
+    <labelTooltip initByDataPathparent="true" />
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/text/labelTooltip.lzx b/WebContent/src/base/components/text/labelTooltip.lzx
new file mode 100644
index 0000000..b143407
--- /dev/null
+++ b/WebContent/src/base/components/text/labelTooltip.lzx
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="labelTooltip" extends="view" visible="false" >
+
+	<attribute name="inittwice" value="false" type="boolean" />
+    <attribute name="multiline" value="false" type="boolean" />
+    <attribute name="ismenubuttonlabel" value="false" type="boolean" />
+    <attribute name="initByDataPathparent" value="false" type="boolean" />
+    
+    <attribute name="holder" value="null" />
+    
+    <event name="setContent" />
+        
+    <handler name="onmouseover" reference="this.parent">
+    	<![CDATA[
+            this.setContent.sendEvent();
+	    	if (this.ismenubuttonlabel){
+	    		this.parent.setLabel();
+	    	}
+	    	if (this.inittwice){
+	    		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	    	}
+	    	if (this.initByDataPathparent){
+                this.setAttribute('text',parent.text);
+            }
+	        var xVal = canvas.getMouse('x');
+	        var yVal = canvas.getMouse('y');
+			////Debug.write("mytext: ",this.mytext);
+			if (this.multiline && this.text.length!=0){
+				this.holder = new lz.xmlCrmTooltipMulti(canvas,{text:this.text,holder:this});
+			} else if (this.text.length!=0){
+				this.holder = new lz.xmlCrmTooltip(canvas,{text:this.text,holder:this});
+			}
+	        if (xVal<canvas.width/2){
+	            xVal += 0;
+	        } else {
+	            xVal -= this.holder.width-14;
+	        }
+	        if (yVal<canvas.height/2){
+	            yVal += 24;
+	        } else {
+	            yVal -= 24;
+	        }
+	        if (this.holder!=null)  {
+	           this.holder.setAttribute('x',xVal);
+	           this.holder.setAttribute('y',yVal);
+            }
+            canvas.registerToolTip(this);
+        ]]>        
+    </handler>
+    <handler name="onmouseout" reference="this.parent">
+        this.cleanHolder();
+    </handler>
+    <handler name="onmouseup" reference="this.parent">
+        this.cleanHolder();
+    </handler>
+    <handler name="onclick" reference="this.parent">
+        this.cleanHolder();
+    </handler>   
+    <method name="cleanHolder">
+        if (this.holder!=null) {
+            this.holder.destroy();
+            this.holder = null; 
+            canvas.clearToolTip();
+        }
+    </method> 
+    <attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+    <method name="setLabelId" args="_labelid" >
+        this.labelid = _labelid;
+        this.setAttribute('text',canvas.getLabelName(this.labelid));
+    </method>
+    <attribute name="text" value="" type="string" />
+</class>
+
+<class name="xmlCrmTooltip" extends="view" bgcolor="0x000000" 
+    width="${ this._text.width+2 }" height="${ this._text.height+2 }" >
+    <attribute name="text" value="" type="string" />
+    <attribute name="holder" value="null" />
+    <text x="1" y="1" text="${ parent.text }" resize="true" 
+        fontsize="10" name="_text" bgcolor="0xFFFFFF" />
+    <handler name="onmouseout">
+        this.destroy();
+    </handler>
+    <handler name="oninit">
+        this.setShadow();
+    </handler>
+    <method name="setShadow" >
+        <![CDATA[
+        if (this.isinited){
+            this.normalMC = this.getDisplayObject();
+           	this.displacementMap = new flash.filters.DropShadowFilter();
+            this.normalMC.filters = [this.displacementMap];
+        }
+        ]]>              
+    </method> 
+</class>
+
+<class name="xmlCrmTooltipMulti" extends="view" bgcolor="0x000000" 
+    width="${ this._text.width+2 }" height="${ this._text.height+2 }" >
+    <attribute name="text" value="" type="string" />
+    <attribute name="holder" value="null" />
+    <text x="1" y="1" text="${ parent.text }" resize="true" 
+        fontsize="10" name="_text" bgcolor="0xFFFFFF" multiline="true" />
+    <handler name="oninit">
+        this.setShadow();
+    </handler>
+    <method name="setShadow" >
+        <![CDATA[
+        if (this.isinited){
+            this.normalMC = this.getDisplayObject();
+           	this.displacementMap = new flash.filters.DropShadowFilter();
+            this.normalMC.filters = [this.displacementMap];
+        }
+        ]]>              
+    </method>	    
+    <handler name="onmouseout">
+        this.destroy();
+    </handler>
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/text/library.lzx b/WebContent/src/base/components/text/library.lzx
new file mode 100644
index 0000000..facbdab
--- /dev/null
+++ b/WebContent/src/base/components/text/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<include href="borderedInputtext.lzx" />
+	<include href="labelText.lzx" />
+	<include href="labelTooltip.lzx" />
+    <include href="customEdittext.lzx" />
+    <include href="customscrollEdittext.lzx" />
+    <include href="customInputtext.lzx" />
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlist/baseContentListItem.lzx b/WebContent/src/base/components/turnoverlist/baseContentListItem.lzx
new file mode 100644
index 0000000..799bed3
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/baseContentListItem.lzx
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!--- base class for the item list views-->
+<class name="baseContentListItem" extends="view" 
+	   layout="axis:x;spacing:0" bgcolor="0xFFFFFF" >
+	
+	<attribute name="isselected" value="false" type="boolean"/>
+	
+	<method name="select">
+		this.isselected = true;
+		this.setAttribute('bgcolor',canvas.getThemeColor('baseMouseOvercolorizer'));
+	</method>
+	
+	<method name="deselect">
+		this.isselected = false;
+		this.setAttribute('bgcolor',0xFFFFFF);
+	</method>
+	
+	<method name="doDeselect">
+		this.deselect();
+	</method>
+	
+	<handler name="onmouseover">
+		if (!this.isselected) {
+			this.setAttribute('bgcolor',canvas.getThemeColor('baseMouseOvercolorizer'));
+		}
+	</handler>
+	
+	<handler name="onmouseout">
+		if (!this.isselected) {
+			this.setAttribute('bgcolor',0xFFFFFF);
+		} else {
+			this.setAttribute('bgcolor',canvas.getThemeColor('baseMouseOvercolorizer'));
+		}
+	</handler>
+	
+	<handler name="onclick">
+		if ($debug) Debug.write("baseContentListItem -- onclick");
+		this.parent.parent.parent.parent.onclickedItem.sendEvent(this);
+	</handler>
+    
+    <handler name="ondblclick">
+		this.parent.parent.parent.parent.ondblclickedItem.sendEvent(this);
+	</handler>
+	
+    <attribute name="obj" value="null" />
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlist/library.lzx b/WebContent/src/base/components/turnoverlist/library.lzx
new file mode 100644
index 0000000..32abb86
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/library.lzx
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <!-- APL Author sebawagner -->
+    <resource name="width_gripper_rsc" src="resources/width_change_cursor.swf" />
+
+	<!-- APL Author sebawagner -->
+	<resource name="sort_asc_turnover_rsc" src="resources/sort_asc.png" />
+	
+	<!-- APL Author sebawagner -->
+	<resource name="sort_desc_turnover_rsc" src="resources/sort_desc.png" />
+	    
+	<include href="turnOverList.lzx" />
+    <include href="simpleTurnOverList.lzx" />
+	<include href="turnOverListHeaderItem.lzx" />
+	<include href="turnOverTextItem.lzx" />
+    <include href="baseContentListItem.lzx" />
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlist/resources/sort_asc.png b/WebContent/src/base/components/turnoverlist/resources/sort_asc.png
new file mode 100644
index 0000000..a5c9c8b
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/resources/sort_asc.png
Binary files differ
diff --git a/WebContent/src/base/components/turnoverlist/resources/sort_desc.png b/WebContent/src/base/components/turnoverlist/resources/sort_desc.png
new file mode 100644
index 0000000..acdb200
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/resources/sort_desc.png
Binary files differ
diff --git a/WebContent/src/base/components/turnoverlist/resources/width_change_cursor.fla b/WebContent/src/base/components/turnoverlist/resources/width_change_cursor.fla
new file mode 100644
index 0000000..7205efb
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/resources/width_change_cursor.fla
Binary files differ
diff --git a/WebContent/src/base/components/turnoverlist/resources/width_change_cursor.swf b/WebContent/src/base/components/turnoverlist/resources/width_change_cursor.swf
new file mode 100644
index 0000000..39e0f00
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/resources/width_change_cursor.swf
Binary files differ
diff --git a/WebContent/src/base/components/turnoverlist/simpleTurnOverList.lzx b/WebContent/src/base/components/turnoverlist/simpleTurnOverList.lzx
new file mode 100644
index 0000000..fd021fe
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/simpleTurnOverList.lzx
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<!--- common simpleTurnOverList view class. -->
+<class name="simpleTurnOverList" extends="view">
+    
+    <attribute name="_selected" value="null"/>
+    
+    <event name="ondblclickedItem" />
+
+    <handler name="onclickedItem" args="itemObj">
+        if (this._selected != null) {
+            this._selected.deselect();
+        }
+        this._selected = itemObj;
+        this._selected.select();
+    </handler>
+	
+	<attribute name="mainBgColor" value="0xEEF0EB" />
+    
+	<method name="addHeaderItem" args="labelid,width" >
+		new lz.turnOverListHeaderItem(this._innerlisthead._inn,{labelid:labelid,width:width,subviewsid:this._innerlisthead._inn.subviews.length});
+	</method>
+    
+    <method name="sendInitialWidthUpdate">
+        for (var eg in this._innerlisthead._inn.subviews) {
+            this._innerlisthead._inn.subviews[eg].onwidth.sendEvent(this._innerlisthead._inn.subviews[eg].width);
+        }
+    </method> 
+	
+	<method name="sendWidthUpdate" args="w,subviewsid" >
+		<![CDATA[
+		////Debug.write(w,subviewsid,this._innerlist._inn);
+		for (var i=0;i<this._innerlist._inn._inn.subviews.length;i++){
+			this._innerlist._inn._inn.subviews[i].subviews[subviewsid].setAttribute('width',w);
+		}
+		]]>
+	</method>
+    
+    <method name="initValues" args="numberOfRecords">
+        <![CDATA[
+            this._records.setAttribute('text',numberOfRecords + ' ' + canvas.getLabelName(272) );
+        ]]>
+    </method>
+	
+	<method name="clearList">
+        this._selected = null;
+		this._innerlist._inn._inn.destroy();
+		new lz.innerList(this._innerlist._inn,{name:'_inn'});
+	</method>
+    
+    <!-- =========  BgArea area  =========-->
+    <view width="$once{ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }"
+          height="$once{ parent.height-20 }" x="0" y="20">
+        <view width="$once{ parent.width-2 }" bgcolor="$once{ parent.parent.mainBgColor }"
+          height="$once{ parent.height-2 }" x="1" y="1"></view>
+    </view>
+    
+	<!-- =========  Control area  =========-->
+
+    <labelText name="_records" x="2" resize="true" />
+    
+    
+	<!-- =========  List Header area  =========-->
+
+	<view name="_innerlisthead" height="20" x="1" width="$once{ parent.width-2 }"
+         y="22" clip="true">
+        <view name="_inn" x="${ parent.parent._innerlist._inn.x }" layout="axis:x;spacing:0" />
+    </view> 
+	
+	<!-- =========  List Contents area  =========-->
+	<view name="_innerlist" height="$once{ parent.height-43 }" x="1" width="$once{ parent.width-2 }"
+		y="42" clip="true" bgcolor="$once{ parent.mainBgColor }">
+		<view name="_inn" >
+			<innerList name="_inn" />
+		</view>
+		<om_vscrollbar />
+		<om_hscrollbar />
+	</view>
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlist/turnOverList.lzx b/WebContent/src/base/components/turnoverlist/turnOverList.lzx
new file mode 100644
index 0000000..821b20f
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/turnOverList.lzx
@@ -0,0 +1,283 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!--- private class for turnOverList only. -->
+<class name="innerList" layout="axis:y;spacing:1" />
+	
+<!--- common TurnOverList view class. -->
+<class name="turnOverList" extends="view" >
+
+	<attribute name="start" value="0" type="number" />
+	<attribute name="step" value="100" type="number" />
+	<attribute name="orderby" value="firstname" type="string" />
+	<attribute name="asc" value="true" type="boolean" />
+	<attribute name="records" value="0" type="number" />
+	
+	<attribute name="_selected" value="null"/>
+    <attribute name="currentSelectedOrder" value="null" />
+    <attribute name="mainBgColor" value="0xEEF0EB" />
+	
+	<event name="oncallnext" />
+	<event name="oncallpre" />
+	<event name="ondblclickedItem" />
+    <event name="onUpdateOrder" />
+	
+	<method name="callfirst">
+		this.start = 0;
+		this.oncallnext.sendEvent();
+	</method>
+    
+    <method name="clearSelection">
+        if (this._selected != null) {
+            this._selected.deselect();
+        }
+    </method>
+	
+	<handler name="onclickedItem" args="itemObj">
+		if (this._selected != null) {
+			this._selected.deselect();
+		}
+		this._selected = itemObj;
+		this._selected.select();
+	</handler>
+	
+	<method name="calllast">
+		var newMaxPages = Math.floor(this.records/this.step);
+        if ($debug) Debug.write("calllast 1 ",newMaxPages);
+        this.start = newMaxPages*this.step;
+        if ($debug) Debug.write("calllast 2 ",this.start);
+        if (this.start == this.records) {
+            this.start = this.records-this.step;
+        }
+        if ($debug) Debug.write("calllast 3 ",this.start);
+        if ($debug) Debug.write("calllast 4 ",this.records);
+        this.oncallnext.sendEvent();
+        this.onload.sendEvent();
+        
+		//this.start = this.records-this.step;
+		//this.oncallnext.sendEvent();
+	</method>
+	
+	<method name="callnext">
+		this._next1.setAttribute('enabled',false);
+		this._pre2.setAttribute('enabled',false);
+		if (this.records>(this.start+this.step)){
+			this.start+=this.step;
+		}
+		this.oncallnext.sendEvent();
+	</method>
+	
+	<method name="callpre">
+		this._next1.setAttribute('enabled',false);
+		this._pre2.setAttribute('enabled',false);
+		if (this.start>0){
+			this.start-=this.step;
+		}
+		this.oncallpre.sendEvent();
+	</method>
+	
+	<method name="initValues" args="rec">
+		<![CDATA[
+            this.records = rec;
+            if (this.records>(this.start+this.step)){
+                this._next1.setAttribute('enabled',true);
+            } else {
+                this._next1.setAttribute('enabled',false);
+            }
+            if (this.start>0){
+                this._pre2.setAttribute('enabled',true);
+            } else {
+                this._pre2.setAttribute('enabled',false);
+            }
+            this._records.setAttribute('text',this.start + ' - ' +(this.start+this.step) + ' ' + canvas.getLabelName(272) + ' ' + this.records);
+		]]>
+	</method>
+	
+	<method name="addHeaderItem" args="labelid,width" >
+		new lz.turnOverListHeaderItem(this._innerlisthead._inn,{labelid:labelid,width:width,subviewsid:this._innerlisthead._inn.subviews.length});
+	</method>
+	
+	<method name="addHeaderItemOrdered" args="labelid,width,orderBy,asc,isSelected" >
+        new lz.turnOverListHeaderItemOrdered(this._innerlisthead._inn,{
+                labelid:labelid,width:width,
+                orderBy:orderBy,asc:asc,isSelected:isSelected,
+                subviewsid:this._innerlisthead._inn.subviews.length
+            });
+    </method> 
+    
+    <method name="updateOrder" args="itemRef">
+        <![CDATA[
+            //only do that if the previous orderBy != new orderby
+            //if (this.currentSelectedOrder == null || 
+            //        this.currentSelectedOrder.orderBy != itemRef.orderBy){
+            if (itemRef.isSelected) {
+                itemRef.asc = !itemRef.asc;
+            } else {
+                itemRef.isSelected = true;
+            }
+            if (itemRef.asc) {
+                itemRef._sortUp.setAttribute('visibility','hidden');
+                itemRef._sortDown.setAttribute('visibility','visible');
+            } else {
+                itemRef._sortUp.setAttribute('visibility','visible');
+                itemRef._sortDown.setAttribute('visibility','hidden'); 
+            }
+            
+            //do not perform search on initial Selection
+            var isInitSelect = false;
+            if (this.currentSelectedOrder != null) {
+                if (this.currentSelectedOrder.orderBy != itemRef.orderBy) {
+                    this.currentSelectedOrder.isSelected = false;
+                    this.currentSelectedOrder._sortUp.setAttribute('visibility','hidden');
+                    this.currentSelectedOrder._sortDown.setAttribute('visibility','hidden'); 
+                }
+            } else {
+                isInitSelect = true;
+            }
+            this.currentSelectedOrder = itemRef;
+            
+            if ($debug) Debug.write("updateOrder: ",itemRef,itemRef.orderBy,itemRef.asc,isInitSelect);
+            this.setAttribute('orderby',itemRef.orderBy);
+            this.setAttribute('asc',itemRef.asc);
+            
+            if (!isInitSelect){
+                this.onUpdateOrder.sendEvent(itemRef);
+            }
+            //}
+        ]]>
+    </method>
+    
+    <method name="sendInitialWidthUpdate">
+        for (var eg in this._innerlisthead._inn.subviews) {
+            this._innerlisthead._inn.subviews[eg].onwidth.sendEvent(this._innerlisthead._inn.subviews[eg].width);
+        }
+    </method> 
+	
+	<method name="sendWidthUpdate" args="w,subviewsid" >
+		<![CDATA[
+		////Debug.write(w,subviewsid,this._innerlist._inn);
+		for (var i=0;i<this._innerlist._inn._inn.subviews.length;i++){
+			this._innerlist._inn._inn.subviews[i].subviews[subviewsid].setAttribute('width',w);
+		}
+		]]>
+	</method>
+	
+	<method name="clearList">
+		this._selected = null;
+		this._innerlist._inn._inn.destroy();
+		new lz.innerList(this._innerlist._inn,{name:'_inn'});
+	</method>
+    
+
+
+	<!-- =========  Control area  =========-->
+
+    <labelText name="_records" x="2" resize="true" />
+    
+    <!-- 368:goto first -->
+    <blueButton name="_pre1" y="0" x="$once{ parent.width-188 }" resourceItem="step_back_two_arrow" 
+					x_insetResource="2" y_insetResource="2" width="20" height="20"
+					width_insetResource="16" height_insetResource="16" >
+        <handler name="onclick">
+            parent.callfirst();
+        </handler>
+        <labelTooltip labelid="368" />
+    </blueButton>
+
+    <!-- 369:goto previous -->
+    <blueButton name="_pre2" y="0" x="$once{ parent.width-166 }" resourceItem="step_back_arrow" 
+					x_insetResource="2" y_insetResource="2" width="20" height="20"
+					width_insetResource="16" height_insetResource="16">
+        <handler name="onclick">
+            parent.callpre();
+        </handler>
+        <labelTooltip labelid="369" />
+    </blueButton>
+
+    <!-- combobox to decide the step number -->
+    <resetCombobox name="languages" width="96" x="$once{ parent.width-144 }" 
+			  editable="false" height="20" >
+		<attribute name="sendEventToReload" value="false" type="boolean" />
+        <textlistitem value="10" text="10" />
+        <textlistitem value="25" text="25" />
+        <textlistitem value="50" text="50" />
+        <textlistitem value="75" text="75" />
+        <textlistitem value="100" text="100" />
+        <textlistitem value="200" text="200" />
+        <handler name="onselect">
+        	if (this.sendEventToReload){ 
+        		parent.setAttribute('step',Number(this.getValue()));
+        	}
+        </handler>
+        <handler name="oninit">
+        	this.selectItem(String(parent.step));
+        	this.sendEventToReload = true;
+        </handler>
+	</resetCombobox>
+	
+	<!-- 370:goto next -->
+	<blueButton name="_next1" y="0" x="$once{ parent.width-44 }" resourceItem="step_fwd_arrow" 
+                x_insetResource="2" y_insetResource="2" width="20" height="20"
+				width_insetResource="16" height_insetResource="16">
+        <handler name="onclick">
+            parent.callnext();
+        </handler>
+        <labelTooltip labelid="370" />
+    </blueButton>
+
+    <!-- 371:goto last -->
+    <blueButton name="_next2" y="0" x="$once{ parent.width-21 }" resourceItem="step_fwd_two_arrow" 
+				x_insetResource="2" y_insetResource="2" width="20" height="20"
+				width_insetResource="16" height_insetResource="16">
+        <handler name="onclick">
+            parent.calllast();
+        </handler>
+        <labelTooltip labelid="371" />
+    </blueButton>
+	
+    <!-- =========  BgArea area  =========-->
+    <view width="$once{ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }"
+          height="${ parent.height-20 }" x="0" y="20">
+        <view width="$once{ parent.width-2 }" bgcolor="$once{ parent.parent.mainBgColor }"
+          height="${ parent.height-2 }" x="1" y="1"></view>
+    </view>
+          
+	<!-- =========  List Header area  =========-->
+
+	<view name="_innerlisthead" height="20" x="1" width="$once{ parent.width-2 }" 
+		 y="22" clip="true">
+		<view name="_inn" x="${ parent.parent._innerlist._inn.x }" layout="axis:x;spacing:0" />
+	</view>	
+	
+	<!-- =========  List Contents area  =========-->
+	<view name="_innerlist" height="${ parent.height-43 }" x="1" width="$once{ parent.width-2 }"
+		y="42" clip="true" bgcolor="$once{ parent.mainBgColor }">
+		<view name="_inn" >
+			<innerList name="_inn" />
+		</view>
+		<om_vscrollbar />
+		<om_hscrollbar />
+	</view>
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlist/turnOverListHeaderItem.lzx b/WebContent/src/base/components/turnoverlist/turnOverListHeaderItem.lzx
new file mode 100644
index 0000000..a349f4e
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/turnOverListHeaderItem.lzx
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="turnOverListHeaderItem" extends="simpleLabelButton" clip="true" fontstyle="plain">
+
+	<attribute name="subviewsid" value="0" type="number" />
+
+	<view height="$once{ parent.height-2 }" width="5" align="right"
+		cursor="width_gripper_rsc" 
+		onmousedown="parent.rs.apply()" onmouseup="parent.rs.remove()" />
+		
+	<handler name="onwidth" args="w">
+		this.parent.parent.parent.sendWidthUpdate(w,this.subviewsid);
+	</handler>
+	<resizestate name="rs" height="20" />
+</class>
+
+<class name="turnOverListHeaderItemSimple" extends="simpleLabelButton" fontstyle="plain">
+	<attribute name="asc" value="false" type="boolean" />
+	<attribute name="pathOrder" value="" type="string" />
+	<handler name="onclick">
+		if (parent.preButton!=null){
+			parent.preButton._asc.setAttribute('visibility','hidden');
+			parent.preButton._desc.setAttribute('visibility','hidden');
+		}
+		if (!this.asc){
+			this._asc.setAttribute('visibility','hidden');
+			this._desc.setAttribute('visibility','visible');
+		} else {
+			this._asc.setAttribute('visibility','visible');
+			this._desc.setAttribute('visibility','hidden');		
+		}
+		parent.preButton = this;
+		parent.setNewSortOrder(this.pathOrder,this);
+	</handler>
+	<view name="_asc" x="$once{ parent.width-20 }" 
+		  visibility="hidden" resource="sort_asc_turnover_rsc" />
+	<view name="_desc" x="$once{ parent.width-20 }" 
+		  visibility="hidden" resource="sort_desc_turnover_rsc" />
+</class>
+
+<class name="basicturnoverlistheaderitem" fontsize="9"
+       extends="simpleLabelButton" clip="true">
+	
+</class>
+
+<class name="turnoverlistheaderitem" extends="basicturnoverlistheaderitem" >
+
+	<attribute name="subviewsid" value="0" type="number" />
+
+	<handler name="onwidth" args="w">
+		this.parent.parent.parent.sendWidthUpdate(w,this.subviewsid);
+	</handler>
+
+</class>
+
+<class name="turnoverlistheaderitemIcon" extends="basicturnoverlistheaderitem" >
+
+    <attribute name="subviewsid" value="0" type="number" />
+    <attribute name="toolTipLabelId" value="0" type="number" />
+    <attribute name="iconResource" value="" type="string" />
+
+    <handler name="onwidth" args="w">
+        this.parent.parent.parent.sendWidthUpdate(w,this.subviewsid);
+    </handler>
+    
+    <handler name="onclick" >
+        this.parent.parent.parent.sendHeaderClick.sendEvent(this);
+    </handler>
+    
+    <view align="center" valign="middle" 
+          resource="$once{ parent.iconResource }" />
+    
+    <labelTooltip labelid="$once{ parent.toolTipLabelId }" />
+    
+</class>
+
+<class name="turnoverlistheaderitemResize" extends="basicturnoverlistheaderitem" >
+
+	<attribute name="subviewsid" value="0" type="number" />
+
+    <attribute name="minwidth" value="2" type="number" />
+    <attribute name="minheight" value="10" type="number" />
+    
+	<view height="$once{ parent.height }" width="4" align="right" bgcolor="black"
+		cursor="width_gripper_rsc" opacity="0.01"
+		onmousedown="parent.rs.apply()" onmouseup="parent.rs.remove()" />
+
+	<handler name="onwidth" args="w">
+        //////if ($debug) //Debug.write("onwidth: ",w);
+		this.parent.parent.parent.sendWidthUpdate(w-1,this.subviewsid);
+	</handler>
+
+	<resizestatemin name="rs" height="20" />
+
+</class>
+
+<class name="turnoverlistheaderitemResizeWizzardRefresh" extends="basicturnoverlistheaderitem" >
+
+    <attribute name="subviewsid" value="0" type="number" />
+
+    <attribute name="minwidth" value="2" type="number" />
+    <attribute name="minheight" value="10" type="number" />
+    
+    <view height="$once{ parent.height }" width="4" align="right" bgcolor="black"
+        cursor="width_gripper_rsc" opacity="0.01"
+        onmousedown="parent.rs.apply()" onmouseup="parent.rs.remove()" />
+
+    <handler name="onwidth" args="w">
+        //////if ($debug) //Debug.write("onwidth: ",w);
+        this.parent.parent.parent.sendWidthUpdate(w-1,this.subviewsid);
+    </handler>
+    
+    <view name="refresh_geomComp" resource="refresh_geomComp" y="1" x="${ parent.width - 19 }"
+        onmouseover="" onmouseout="">
+        <handler name="onclick">
+           this.parent.parent.parent.parent.parent.updateGeomByValue();
+        </handler>
+        <labelTooltip labelid="62" />
+    </view>   
+
+    <resizestatemin name="rs" height="20" />
+
+</class>
+
+
+
+<class name="turnOverListHeaderItemOrdered" extends="turnoverlistheaderitemResize">
+
+    <attribute name="orderBy" value="" type="string" />
+    <attribute name="asc" value="true" type="boolean" />
+    <attribute name="isSelected" value="false" type="boolean" />
+    
+    <handler name="oninit">
+        if (this.isSelected) {
+            parent.parent.parent.updateOrder(this);
+        }
+    </handler>
+    
+    <handler name="onclick">
+        parent.parent.parent.updateOrder(this);
+    </handler>
+    
+    <image name="_sortUp" visibility="hidden" stretches="both" width="8" height="8" y="6"
+        x="${parent.width - 13 }" src="$once{ canvas.getThemeImage('sort_up_rsc') }" />
+    <image name="_sortDown" visibility="hidden" stretches="both" width="8" height="8" y="6"
+        x="${parent.width - 13 }" src="$once{ canvas.getThemeImage('sort_down_rsc') }" />
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlist/turnOverTextItem.lzx b/WebContent/src/base/components/turnoverlist/turnOverTextItem.lzx
new file mode 100644
index 0000000..c758163
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlist/turnOverTextItem.lzx
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="turnOverTextItem" extends="text" fontsize="11" resize="false">
+	<view height="$once{ parent.parent.height }" width="1" 
+        align="right" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />
+</class>
+        
+</library>
diff --git a/WebContent/src/base/components/turnoverlistpaged/basePagingListItem.lzx b/WebContent/src/base/components/turnoverlistpaged/basePagingListItem.lzx
new file mode 100644
index 0000000..2d8b24b
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlistpaged/basePagingListItem.lzx
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="basePagingListItem" extends="baseContentListItem" height="20"> 
+
+	<attribute name="itemId" value="0" type="number" />
+    
+</class>
+
+
+<class name="comoboxListItemNoHeaders" extends="basePagingListItem" >
+    
+    <attribute name="text" value="" type="string" />
+    
+    <text width="100" height="20" resize="false" fontsize="10"
+          text="${ parent.text }" />
+          
+    <labelTooltip text="${ parent.text }" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlistpaged/library.lzx b/WebContent/src/base/components/turnoverlistpaged/library.lzx
new file mode 100644
index 0000000..90f5920
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlistpaged/library.lzx
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <include href="basePagingListItem.lzx" />
+    <include href="listPagedContent.lzx" />
+	<include href="turnOverListPaged.lzx" />
+    <include href="turnOverListOrderedPaged.lzx" />
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlistpaged/listPagedContent.lzx b/WebContent/src/base/components/turnoverlistpaged/listPagedContent.lzx
new file mode 100644
index 0000000..dbafcb4
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlistpaged/listPagedContent.lzx
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<!--- common TurnOverList view class. -->
+<class name="listPagedContent" extends="view" clip="true" >
+	
+	<attribute name="itemHeight" value="20" type="number"/>
+    
+    <attribute name="showHScrollbar" value="visible" type="string"/>
+    
+    <method name="initItemsBySubItemNo" args="itemName,noSubItems,subItemClassName"> 
+        this._inn.initItemsBySubItemNo(itemName,noSubItems,subItemClassName);
+    </method>    
+	
+    <view name="_inn" >
+        
+        <!-- calculates the additional items -->
+        <attribute name="itemsToShow" value="0" type="number" />
+        <attribute name="totalItemsInList" value="0" type="number" />
+        
+        <attribute name="currentLastItemInList" value="0" type="number" />
+        
+        <attribute name="itemHeight" value="$once{ parent.itemHeight }" type="number"/>
+        
+		<method name="initItems" args="itemName">
+	        <![CDATA[
+	            this.totalItemsInList = Math.round(parent.height/this.itemHeight);
+	            for (var i=0;i<this.totalItemsInList;i++){
+	                this.currentLastItemInList = i;
+	                new lz[itemName](this._inn,{y:i*this.itemHeight,itemId:i,clickable:false});
+	            }
+                
+                if ($debug) Debug.write("initItems -1- ",i,itemName,lz[itemName]);
+                if ($debug) Debug.write("initItems -2- ",this._inn.subviews.length);
+                if ($debug) Debug.write("initItems -3- ",totalItemsInList);
+                if ($debug) Debug.write("initItems -4- ",parent.height);
+                if ($debug) Debug.write("initItems -5- ",this.itemHeight);
+                
+                //canvas.currentDebugPageList = this;
+                
+	        ]]>
+	    </method>	
+	    
+	    <handler name="ony" args="y">
+	    	parent.parent.onMoveList.sendEvent(y);
+	    </handler> 
+        
+        <method name="initItemsBySubItemNo" args="itemName,noSubItems,subItemClassName">
+           <![CDATA[
+                this.totalItemsInList = Math.round(parent.height/this.itemHeight);
+                for (var i=0;i<this.totalItemsInList;i++){
+                    this.currentLastItemInList = i;
+                    var baseItem = new lz[itemName](this._inn,{y:i*this.itemHeight,itemId:i,clickable:false});
+                    
+                    for (var k=0;k<noSubItems;k++) {
+                        new lz[subItemClassName](baseItem);
+                    }
+                    
+                }
+            ]]>
+        </method>      
+        
+        <method name="resetItems">
+            <![CDATA[
+                for (var i=0;i<this._inn.subviews.length;i++) {
+                    this._inn.subviews[i].itemId = i;
+                    this.currentLastItemInList = i;
+                    this._inn.subviews[i].setAttribute("y",i*this.itemHeight);
+                }
+            ]]>
+        </method>
+        
+        <handler name="ony" args="y">
+            <![CDATA[
+                //if ($debug) Debug.write("ony ",y);
+                var items = Math.round(y/this.itemHeight);
+                //if ($debug) Debug.write("items ",items);
+                if (this.itemsToShow != items) {
+                    var deltaItem = itemsToShow - items;
+                    
+                    //if ($debug) Debug.write("deltaItem ",deltaItem);
+                    
+                    if (deltaItem > 0) {
+                        //Add new Items to the end
+                        for (var i=0;i<deltaItem;i++) {
+                            var item = this._inn.getUpmostItemInList();
+                            this.shiftToLast(item);
+                        }
+                    } else {
+                        //Add new Items to the beginning
+                        for (var i=0;i>deltaItem;i--) {
+                            var item = this._inn.getLastItemInList();
+                            this.shiftToFirst(item);
+                        }
+                    }
+                    
+                    this.itemsToShow = items;
+                }
+            ]]>
+        </handler>
+        
+        <method name="shiftToLast" args="item">
+            <![CDATA[
+                parent.parent.onNextScrollItem.sendEvent(item);
+                //if ($debug) Debug.write("shiftToLast ",item,item.itemId);
+                this.currentLastItemInList++;
+                item.setAttribute("y",this.currentLastItemInList*this.itemHeight);
+                //if ($debug) Debug.write("shiftToLast -1- ",item.y,this.currentLastItemInList);
+                //if ($debug) Debug.write("++ shiftToLast 4 ",item.y,this.currentLastItemInList);
+                item.itemId = this.currentLastItemInList;
+                parent.parent.onScrollItem.sendEvent(item);
+            ]]>
+        </method>
+        
+        <method name="shiftToFirst" args="item">
+            <![CDATA[
+                parent.parent.onNextScrollItem.sendEvent(item);
+                //if ($debug) Debug.write("shiftToFirst 1 ",item.itemId);
+                //if ($debug) Debug.write("shiftToFirst 2 ",item.y);
+                var newItem = this.currentLastItemInList-this.totalItemsInList;
+                //if ($debug) Debug.write("shiftToFirst 3 ",newItem);
+                item.setAttribute("y",newItem*this.itemHeight);
+                //if ($debug) Debug.write("-- shiftToFirst 4 ",item.y,newItem,this.currentLastItemInList);
+                item.itemId = newItem;
+                //if ($debug) Debug.write("shiftToFirst 5 ",item.itemId);
+                this.currentLastItemInList--;
+                parent.parent.onScrollItem.sendEvent(item);
+            ]]>
+        </method>
+            
+        <innerListPagingContent name="_inn" />
+        
+    </view>
+    <om_vscrollbar name="_scrollbar" stepsize="$once{ parent.itemHeight }" />
+    
+    
+    <om_hscrollbar visibility="$once{ parent.showHScrollbar }" />
+
+</class>
+
+<class name="innerListPagingContent" extends="view">
+    
+    <method name="getItemByPosition" args="yPos">
+        <![CDATA[
+            for (var i=0;i<this.subviews.length;i++) {
+                if (this.subviews[i].y == yPos){
+                    return this.subviews[i];
+                }
+            }
+        ]]>
+    </method>
+    
+    <method name="getUpmostItemInList">
+        <![CDATA[
+            var item = this.subviews[0];
+            
+            //if ($debug) Debug.write("getUpmostItemInList ",this.subviews.length);
+            
+            for (var i=0;i<this.subviews.length;i++) {
+                if (this.subviews[i].itemId < item.itemId){
+                    item = this.subviews[i];
+                    //break;
+                }
+            }
+            
+            //if ($debug) Debug.write("getUpmostItemInList ",item);
+            
+            return item;
+        ]]>
+    </method>
+    
+    <method name="getLastItemInList">
+        <![CDATA[
+            var item = this.subviews[0];
+            for (var i=0;i<this.subviews.length;i++) {
+                if (this.subviews[i].itemId > item.itemId){
+                    item = this.subviews[i];
+                    //break;
+                }
+            }
+            return item;
+        ]]>
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlistpaged/turnOverListOrderedPaged.lzx b/WebContent/src/base/components/turnoverlistpaged/turnOverListOrderedPaged.lzx
new file mode 100644
index 0000000..d4db2a6
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlistpaged/turnOverListOrderedPaged.lzx
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+
+
+<!--- common TurnOverList view class. -->
+<class name="turnOverListOrderedPaged" extends="turnOverListPaged">
+    
+    <attribute name="currentSelectedOrder" value="null" />
+    
+    <event name="onUpdateOrder" />
+    
+    <method name="updateOrder" args="itemRef">
+        <![CDATA[
+	        //only do that if the previous orderBy != new orderby
+	        //if (this.currentSelectedOrder == null || 
+            //        this.currentSelectedOrder.orderBy != itemRef.orderBy){
+	        if (itemRef.isSelected) {
+	            itemRef.asc = !itemRef.asc;
+	        } else {
+	            itemRef.isSelected = true;
+	        }
+	        if (itemRef.asc) {
+	            itemRef._sortUp.setAttribute('visibility','hidden');
+	            itemRef._sortDown.setAttribute('visibility','visible');
+	        } else {
+	            itemRef._sortUp.setAttribute('visibility','visible');
+	            itemRef._sortDown.setAttribute('visibility','hidden'); 
+	        }
+	        
+	        //do not perform search on initial Selection
+	        var isInitSelect = false;
+	        if (this.currentSelectedOrder != null) {
+                if (this.currentSelectedOrder.orderBy != itemRef.orderBy) {
+		            this.currentSelectedOrder.isSelected = false;
+		            this.currentSelectedOrder._sortUp.setAttribute('visibility','hidden');
+		            this.currentSelectedOrder._sortDown.setAttribute('visibility','hidden'); 
+                }
+	        } else {
+	            isInitSelect = true;
+	        }
+	        this.currentSelectedOrder = itemRef;
+	        
+	        if ($debug) Debug.write("updateOrder: ",itemRef,itemRef.orderBy,itemRef.asc,isInitSelect);
+	        this.setAttribute('orderby',itemRef.orderBy);
+	        this.setAttribute('asc',itemRef.asc);
+	        
+	        if (!isInitSelect){
+            	this.onUpdateOrder.sendEvent(itemRef);
+            }
+	        //}
+        ]]>
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/turnoverlistpaged/turnOverListPaged.lzx b/WebContent/src/base/components/turnoverlistpaged/turnOverListPaged.lzx
new file mode 100644
index 0000000..b10550d
--- /dev/null
+++ b/WebContent/src/base/components/turnoverlistpaged/turnOverListPaged.lzx
@@ -0,0 +1,540 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="baseturnOverListPaged" extends="view">
+	
+	<attribute name="start" value="0" type="number" />
+    <attribute name="step" value="100" type="number" />
+    <attribute name="orderby" value="firstname" type="string" />
+    <attribute name="asc" value="true" type="boolean" />
+    <attribute name="records" value="0" type="number" />
+    
+    <attribute name="renderList" value="null"/>
+    
+    <attribute name="_selected" value="null" />
+    
+    <attribute name="_selectedRefObj" value="null" />
+    
+    <attribute name="multiselect" value="true" type="boolean" />
+    <attribute name="selected" value="null" />
+    
+    <attribute name="showTopBar" value="true" type="boolean" />
+    
+    <event name="oncallnext" />
+    <event name="oncallpre" />
+    
+    <!--- @keywords private -->
+    <event name="onload" />
+    
+    <event name="rerender" />
+    
+    <event name="onMoveList" />
+    
+    <event name="onScrollItem" />
+    <event name="onNextScrollItem" />
+    
+    <attribute name="listItemName" value="basePagingListItem" type="string" />
+    
+    <attribute name="itemHeight" value="20" type="number"/>
+    
+    <attribute name="menuBarXIndent" value="0" type="number"/>
+    
+    <attribute name="headerHeight" value="20" type="number" />
+    
+    <attribute name="listLabelId" value="0" type="number" />
+    
+    <attribute name="showHScrollbar" value="visible" type="string"/>
+     
+    <handler name="oninit">
+    	<![CDATA[
+            //this inits the items
+            this._innerlist._inn.initItems(this.listItemName);
+            
+            if (this["_menu"] && this["_menu"]["_pre1"]) {
+                this._menu._pre1.setAttribute('isEnabled',false);
+                this._menu._next2.setAttribute('isEnabled',false);
+                this._menu._next1.setAttribute('isEnabled',false);
+                this._menu._pre2.setAttribute('isEnabled',false);
+            }
+        ]]>
+    </handler>  
+    
+    <handler name="onclickedItem" args="obj" >
+        <![CDATA[
+            this.addToSelection(obj,false); 
+        ]]>
+    </handler>
+    
+    <method name="selectAll">
+        <![CDATA[
+        
+            if (!this.multiselect){
+                if ($debug) Debug.warn("Cannot selectAll when multiselect is FALSE");
+                return;
+            }
+            
+            this._selectedRefObj = new Array();
+            this._selected = new Array();
+            
+            for (var i=0;i<this.renderList.length;i++) {
+            	this.renderList[i].itemSelected = true;
+                this.renderList[i].isselected = true;
+                this._selectedRefObj.push(i);
+            }
+            
+            if ($debug) Debug.write("this._selectedRefObj LENGTH ",this._selectedRefObj.length);
+        
+            for (var i=0;i<this._innerlist._inn._inn.subviews.length;i++){
+            	if (this._innerlist._inn._inn.subviews[i].clickable) {
+	            	this._innerlist._inn._inn.subviews[i].setAttribute("itemSelected",true);
+		            this._innerlist._inn._inn.subviews[i].isselected = true;
+	                this._innerlist._inn._inn.subviews[i].onmouseout.sendEvent();
+	                this._selected.push(this._innerlist._inn._inn.subviews[i]);
+            	}
+	        }
+        
+        ]]>
+    </method>
+    
+    <method name="deleteSelected">
+        <![CDATA[
+        
+	        function sortTablePoints(a,b){
+	            var a1 = a;
+	            var b1 = b;
+	            //_root.//Debug.write("natcompare: ",a1,b1,natcompare(a1,b1));
+	            if(a1==b1){
+	                return 0;
+	            } else if(a1>b1){
+	                return 1;
+	            } else {
+	                return -1;
+	            }
+	        }
+            
+            this._selectedRefObj.sort(sortTablePoints);
+            
+            if ($debug) Debug.write("deleteSelected",this._selectedRefObj);
+            
+            if ($debug) Debug.write("-1- this.renderList ",this.renderList.length);
+        
+            for (var i=0;i<this._selectedRefObj.length;i++) {
+                this.renderList.splice(this._selectedRefObj[i],1);
+            }
+            
+            if ($debug) Debug.write("-2- this.renderList ",this.renderList.length);
+            
+            this.deselectAll();
+            
+            this.rerender.sendEvent(this);
+        ]]>
+    </method>
+    
+    <method name="deselectAll">
+        <![CDATA[
+        
+            if (!this.multiselect){
+                if ($debug) Debug.warn("Cannot deselectAll when multiselect is FALSE");
+                return;
+            }
+        
+            this._selectedRefObj = new Array();
+            this._selected = new Array();
+            
+            for (var i=0;i<this.renderList.length;i++) {
+            	this.renderList[i].itemSelected = false;
+                this.renderList[i].isselected = false;
+            }
+            
+            for (var i=0;i<this._innerlist._inn._inn.subviews.length;i++){
+            	this._innerlist._inn._inn.subviews[i].setAttribute("itemSelected",false);
+                this._innerlist._inn._inn.subviews[i].isselected = false;
+                this._innerlist._inn._inn.subviews[i].onmouseout.sendEvent();
+            }
+        
+        ]]>
+    </method>    
+    
+    <method name="addToSelection" args="obj,forceMultiAdd">
+        <![CDATA[
+        
+            if (this._selected!=null ||this._selectedRefObj!=null){
+                if (this.multiselect){
+                    if (lz.Keys.downKeysArray.length==0 || 
+                        (lz.Keys.downKeysArray[0]!=17 && lz.Keys.downKeysArray[0]!=16)){
+                        if (!forceMultiAdd) {
+
+                            if ($debug) Debug.write("onclickedItem Deselect ALL -1- ",this._selected.length);    
+                            if ($debug) Debug.write("onclickedItem Deselect ALL -2- ",this._selectedRefObj.length);    
+                            
+                            for (var i=0;i<this._selected.length;i++){
+                            	this._selected[i].setAttribute("itemSelected",false);
+                                this._selected[i].isselected = false;
+                                this._selected[i].doDeselect();
+                            }
+                            
+                            for (var i=0;i<this._selectedRefObj.length;i++){
+                                if ($debug) Debug.write("DESELECT ITEM ID ",this._selectedRefObj[i]);
+                                this.renderList[this._selectedRefObj[i]].itemSelected = false;
+                                this.renderList[this._selectedRefObj[i]].isselected = false;
+                            }
+                            
+                        }
+                    } else {
+                        //////if ($debug) //Debug.write("onclickedItem Key Hold IT");
+                        for (var i=0;i<this._selected.length;i++){
+                            if (this._selected[i] == obj) {
+                                //////if ($debug) //Debug.write("Found Object: ",obj);
+                                obj.isselected = false;
+                                if ($debug) Debug.write("DESELECT ITEM ID 2 ",this._selectedRefObj[i]);
+                                this.renderList[this._selectedRefObj[i]].isselected = false;
+                                ////if ($debug) //Debug.write("send onmouseout TO: ",obj);
+                                obj.doDeselect();
+                                this._selected.splice(i,1);
+                                this._selectedRefObj.splice(i,1);
+                                return;
+                            }
+                        }
+                    }
+                } else {
+                    this.renderList[this._selected.itemId].isselected = false;
+                    this._selected.isselected = false;
+                    this._selected.doDeselect();
+                }
+            }
+
+            //////if ($debug) //Debug.write("onclickedItem Set IT");
+            if ($debug) Debug.write("SELECT ITEM ID ",obj.itemId);
+            this.renderList[obj.itemId].isselected = true;
+            obj.isselected = true;
+            obj.onmouseout.sendEvent();
+            if (this.multiselect){
+                if (this._selected==null){
+                    this._selected = new Array();
+                    this._selectedRefObj = new Array();
+                }
+                if ((lz.Keys.downKeysArray.length==1 && 
+                    (lz.Keys.downKeysArray[0]==17 || lz.Keys.downKeysArray[0]==16))
+                    || forceMultiAdd){
+                    this._selected.push(obj);
+                    this._selectedRefObj.push(obj.itemId);
+                } else {
+                    this._selected = new Array();
+                    this._selectedRefObj = new Array();
+                    this._selected.push(obj);
+                    this._selectedRefObj.push(obj.itemId);
+                }
+            } else {
+                this._selected = obj;
+            }
+            
+        ]]>
+    </method>    
+    
+    <!--
+    <handler name="onclickedItem" args="obj" >
+        if (this.selected != null) {
+            this.selected.deselect();
+        }
+        this.selected = obj;
+        this.selected.select();
+    </handler>
+     -->
+    
+    <method name="callfirst">
+        this.start = 0;
+        this.oncallnext.sendEvent();
+        this.onload.sendEvent();
+    </method>
+    
+    <method name="reload">
+    	this.oncallnext.sendEvent();
+        this.onload.sendEvent();
+    </method>
+    
+    <method name="calllast">
+    	var newMaxPages = Math.floor(this.records/this.step);
+    	if ($debug) Debug.write("calllast 1 ",newMaxPages);
+        this.start = newMaxPages*this.step;
+        if ($debug) Debug.write("calllast 2 ",this.start);
+        if (this.start == this.records) {
+        	this.start = this.records-this.step;
+        }
+        if ($debug) Debug.write("calllast 3 ",this.start);
+        if ($debug) Debug.write("calllast 4 ",this.records);
+        this.oncallnext.sendEvent();
+        this.onload.sendEvent();
+        
+        //this.start = this.records-this.step;
+        //this.oncallnext.sendEvent();
+        //this.onload.sendEvent();
+    </method>
+    
+    <method name="callnext">
+        if (this.records>(this.start+this.step)){
+            this.start+=this.step;
+        }
+        this.oncallnext.sendEvent();
+        this.onload.sendEvent();
+    </method>
+    
+    <method name="callpre">
+        if (this.start>0){
+            this.start-=this.step;
+        }
+        this.oncallpre.sendEvent();
+        this.onload.sendEvent();
+    </method>
+    
+    <method name="initValues" args="rec">
+        <![CDATA[
+            this.records = rec;
+            
+            if (this.start == 0) {
+                this._menu._pre1.setAttribute('isEnabled',false);
+            } else {
+                this._menu._pre1.setAttribute('isEnabled',true);
+            }
+            
+            if ((this.start+this.step) >= this.records) {
+                this._menu._next2.setAttribute('isEnabled',false);
+            } else {
+                this._menu._next2.setAttribute('isEnabled',true);
+            }
+            
+            if (this.records>(this.start+this.step)){
+                if (this["_menu"]) this._menu._next1.setAttribute('isEnabled',true);
+            } else {
+                if (this["_menu"]) this._menu._next1.setAttribute('isEnabled',false);
+            }
+            if (this.start>0){
+                if (this["_menu"]) this._menu._pre2.setAttribute('isEnabled',true);
+            } else {
+                if (this["_menu"]) this._menu._pre2.setAttribute('isEnabled',false);
+            }
+            
+            if (this.showTopBar) {
+                
+                var maxRecord = this.start+this.step;
+                if ((this.start+this.step) > this.records) {
+                    maxRecord = this.records;
+                }
+                
+                this._records.setAttribute("text",(this.start+1) + ' - ' + maxRecord + ' von ' + this.records);
+                
+            } else {
+                
+                this._records.setAttribute("text",rec);
+            }
+        ]]>
+    </method>
+    
+    <method name="addHeaderItem" args="labelid,width" >
+        new lz.turnoverlistheaderitemResize(this._innerlisthead._inn,{
+                labelid:labelid,width:width,
+                subviewsid:this._innerlisthead._inn.subviews.length
+            });
+    </method>
+    
+    <method name="clearHead">
+        for (var eg in this._innerlisthead._inn.subviews) {
+            this._innerlisthead._inn.subviews[eg].destroy();
+        }
+    </method>
+    
+    <method name="addHeaderItemByText" args="zText,width" >
+        new lz.turnoverlistheaderitemResize(this._innerlisthead._inn,{
+                text:zText,width:width,
+                subviewsid:this._innerlisthead._inn.subviews.length
+            });
+    </method>
+    
+    <method name="addHeaderItemOrdered" args="labelid,width,orderBy,asc,isSelected" >
+    	if ($debug) Debug.write("turnOverListHeaderItemOrdered ",labelid,width,orderBy,asc,isSelected);
+        new lz.turnOverListHeaderItemOrdered(this._innerlisthead._inn,{
+                labelid:labelid,width:width,
+                orderBy:orderBy,asc:asc,isSelected:isSelected,
+                subviewsid:this._innerlisthead._inn.subviews.length
+            });
+    </method> 
+    
+    <method name="setSelectionOrder" args="orderBy,asc">
+    	<![CDATA[
+    		
+    		for (var i=0;i<this._innerlisthead._inn.subviews.length;i++) {
+    			
+    			if (this._innerlisthead._inn.subviews[i]["orderBy"] && 
+    					this._innerlisthead._inn.subviews[i].orderBy == orderBy) {
+    				
+    				if (this.currentSelectedOrder != null) {
+    					this.currentSelectedOrder.isSelected = false;
+    				}
+    				
+					this._innerlisthead._inn.subviews[i].isSelected = true;
+    				this._innerlisthead._inn.subviews[i].asc = !asc;
+    				
+    				this._innerlisthead._inn.subviews[i].onclick.sendEvent();
+    				
+    				return;
+    				
+    			}
+    			
+    		}
+    	
+    	]]>
+    </method>
+    
+    <method name="sendInitialWidthUpdate">
+        for (var eg in this._innerlisthead._inn.subviews) {
+            this._innerlisthead._inn.subviews[eg].onwidth.sendEvent(this._innerlisthead._inn.subviews[eg].width);
+        }
+    </method> 
+    
+    <method name="sendWidthUpdate" args="w,subviewsid" >
+        <![CDATA[
+        ////Debug.write(w,subviewsid,this._innerlist._inn);
+        for (var i=0;i<this._innerlist._inn._inn.subviews.length;i++){
+            this._innerlist._inn._inn.subviews[i].subviews[subviewsid].setAttribute('width',w+1);
+        }
+        ]]>
+    </method>
+    
+    <method name="getListItemNumber">
+        return this._innerlist._inn._inn.subviews.length;
+    </method>
+    
+    <method name="getItemByNumber" args="itemNo">
+        <![CDATA[
+	        if ($debug) Debug.write("getItemByNumber",itemNo);
+	        for (var i=0;i<this._innerlist._inn._inn.subviews.length;i++){
+                if ($debug) Debug.write("getItemByNumber :: ",this._innerlist._inn._inn.subviews[i].itemId);
+	            if (this._innerlist._inn._inn.subviews[i].itemId == itemNo) {
+                    return this._innerlist._inn._inn.subviews[i];
+                }
+	        }
+        ]]>
+        return this._innerlist._inn._inn.subviews[itemNo];
+    </method>
+    
+    <method name="clearList">
+        this._innerlist._inn._inn.destroy();
+        new lz.innerListPagingContent(this._innerlist._inn,{name:'_inn'});
+    </method>
+    
+    <method name="initItemsBySubItemNo" args="itemName,noSubItems,subItemClassName">
+        this._innerlist.initItemsBySubItemNo(itemName,noSubItems,subItemClassName);
+    </method>
+
+    <labelText labelid="${ parent.listLabelId }" visibility="$once{ (parent.showTopBar) ? 'visible' : 'hidden' }"
+                       y="4" fontsize="10" x="2" />
+                       
+    <text fontsize="10" y="4" x="$once{ (!parent.showTopBar) ? 64+parent.menuBarXIndent : 2+parent.menuBarXIndent }"
+          name="_records" resize="true" visibility="$once{ (parent.showTopBar) ? 'visible' : 'hidden' }" />
+    
+    <!-- =========  List Header area  =========-->
+    <view name="_innerlisthead" height="${ parent.headerHeight }" width="${ parent.width }" y="$once{ parent.headerHeight + 2 }" clip="true">
+        <view name="_inn" x="${ parent.parent._innerlist._inn.x }" layout="axis:x;spacing:0" />
+    </view> 
+    
+    <!-- =========  List Contents area  =========-->   
+    <listPagedContent name="_innerlist" height="${ parent.height-22-parent.headerHeight }" bgcolor="0xFFFFFF"
+          width="${ parent.width }" y="$once{ parent.headerHeight + 22 }" showHScrollbar="$once{ parent.showHScrollbar }"
+          itemHeight="$once{ parent.itemHeight }" />
+</class>
+	
+<!--- common TurnOverList view class. -->
+<class name="turnOverListPaged" extends="baseturnOverListPaged">
+
+    <!-- =========  Control area  =========-->
+    <view name="_menu" align="right" y="2" width="180"
+          visibility="$once{ (parent.showTopBar) ? 'visible' : 'hidden' }">
+    	
+	    <!-- 368:goto first -->
+	    <blueButton name="_pre1" y="0" x="0" resourceItem="step_back_two_arrow" 
+					x_insetResource="2" y_insetResource="2" width="20" height="20"
+				width_insetResource="16" height_insetResource="16">
+			<handler name="onclick">
+				parent.parent.callfirst();
+	        </handler>
+	        <labelTooltip labelid="368" />
+	    </blueButton>
+	
+	    <!-- 369:goto previous -->
+	    <blueButton name="_pre2" y="0" x="20" resourceItem="step_back_arrow" 
+					x_insetResource="2" y_insetResource="2" width="20" height="20"
+				width_insetResource="16" height_insetResource="16">
+			<handler name="onclick">
+				parent.parent.callpre();
+	        </handler>
+	        <labelTooltip labelid="369" />
+	    </blueButton>
+    	<resetCombobox name="_step" width="100" x="40" editable="false" fontsize="10" height="20" >
+            <attribute name="sendEventToReload" value="false" type="boolean" />
+            <textlistitem value="10" text="10" />
+            <textlistitem value="25" text="25" />
+            <textlistitem value="50" text="50" />
+            <textlistitem value="75" text="75" />
+            <textlistitem value="100" text="100" />
+            <textlistitem value="200" text="200" />
+            <textlistitem value="500" text="500" />
+            <textlistitem value="1000" text="1000" />
+            <textlistitem value="2500" text="2500" />
+            <textlistitem value="5000" text="5000" />
+            <handler name="onselect">
+                if (this.sendEventToReload){ 
+                	parent.parent.start = 0;
+                    parent.parent.setAttribute('step',Number(this.getValue()));
+                    parent.parent.onload.sendEvent();
+                }
+            </handler>
+            <handler name="oninit">
+                this.selectItem(String(parent.parent.step));
+                this.sendEventToReload = true;
+            </handler>
+        </resetCombobox>
+        
+        <!-- 370:goto next -->
+        <blueButton name="_next1" y="0" x="140" resourceItem="step_fwd_arrow" 
+					x_insetResource="2" y_insetResource="2" width="20" height="20"
+				width_insetResource="16" height_insetResource="16">
+			<handler name="onclick">
+				parent.parent.callnext();
+	        </handler>
+	        <labelTooltip labelid="370" />
+	    </blueButton>
+		
+	    <!-- 371:goto last -->
+	    <blueButton name="_next2" y="0" x="160" resourceItem="step_fwd_two_arrow" 
+					x_insetResource="2" y_insetResource="2" width="20" height="20"
+				width_insetResource="16" height_insetResource="16">
+			<handler name="onclick">
+				parent.parent.calllast();
+	        </handler>
+	        <labelTooltip labelid="371" />
+	    </blueButton>
+		
+		<view width="2" />
+    </view>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/updatecheckbox.lzx b/WebContent/src/base/components/updatecheckbox.lzx
new file mode 100644
index 0000000..1259161
--- /dev/null
+++ b/WebContent/src/base/components/updatecheckbox.lzx
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="updatecheckbox" extends="checkbox" style="componentStyle">
+    <attribute name="tvalue" type="boolean" value="false"/>
+    <attribute name="sendchange" value="false" type="boolean" />       
+    <handler name="onblur">
+        if (this.parent.sendchange) this.parent.sendchange(this,tvalue,this.getValue()); 
+    </handler>  
+</class>
+
+<class name="labelCheckbox" extends="checkbox" style="componentStyle" fontsize="11" >
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute('text',canvas.getLabelName(this.labelid));
+	</method>
+</class>
+
+</library>
diff --git a/WebContent/src/base/components/upload/fileUpload.lzx b/WebContent/src/base/components/upload/fileUpload.lzx
new file mode 100644
index 0000000..a43c464
--- /dev/null
+++ b/WebContent/src/base/components/upload/fileUpload.lzx
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+ 
+ 	<class name="fileUpload">
+ 	
+ 		<!--  Show all Documents in FileBrowser -->
+ 		<attribute name="isOnlyImage" value="false" type="boolean" />
+ 		
+ 		<!-- Show only PowerPoint Presentations in FileBrowser -->
+ 		<attribute name="isOnlyPpt" value="false" type="boolean" />
+ 		
+ 		<!-- Show only XML Files in FileBrowser -->
+ 		<attribute name="isOnlyXml" value="false" type="boolean" />
+ 		
+ 		<!-- Show only ZIP Files in FileBrowser -->
+ 		<attribute name="isOnlyZip" value="false" type="boolean" />
+ 		
+ 		<!-- Show only Images Files in FileBrowser -->
+ 		<attribute name="isOnlyProfile" value="false" type="boolean" />
+        
+        <attribute name="fr" value="null" />
+ 		 		
+		<handler name="oninit" args="invoker">
+		<![CDATA[
+			this.fr = new flash.net.FileReference();	
+    		this.fr.onHTTPError = function(fr, httpError){
+                var t = _root;
+            	if ($debug) t.Debug.write('onHTTPError function: ' + httpError);
+            	new lz.errorPopup(canvas,{error:'Err2: '+httpError});
+			}
+			this.fr.onIOError = function(fr){
+				var t = _root;
+                if ($debug) t.Debug.write.write('onIOError function');
+				new lz.errorPopup(canvas,{error:'onIOError invoked '});
+			}
+			function callbackFunction ( e ) {
+				var t = _root;
+                if ($debug) t.Debug.write( e.data );
+			}		
+			this.fr.onSecurityError = function(fr, errorString){
+				var t = _root;
+                if ($debug) t.Debug.write('onSecurityError function: ' + errorString);
+            	new lz.errorPopup(canvas,{error:'Err2: '+errorString});
+			}
+			this.fr.addListener(invoker, callbackFunction);
+		]]>
+		</handler>
+
+		<method name="browse">
+		<![CDATA[	
+			var zipExt = "*.zip"
+				, profileExt = "*.psd;*.tiff;*.bmp;*.svg;*.dpx;*.exr;*.jpg;*.jpeg;*.gif;*.png"
+				, pptExt = "*.ppt;*.odp;"
+				, docExt = pptExt + ";*.txt;*.pptx;*.odt;*.wpd;*.doc;*.docx;*.rtf;*.ods;*.sxc;*.xls;*.xlsx;*.sxi;*.pdf"
+				, vidExt = "*.avi;*.mov;*.flv;*.mp4"
+				, imgExt = profileExt + ";*.tga;*.xcf;*.wpg;*.ico;*.ttf;*.pcd;*.pcds;*.ps"
+				, allExt = docExt + ";" + vidExt + ";" + imgExt;
+
+			if (this.isOnlyZip) {
+				
+				var allTypes = new Array();
+				var imageTypes = new Object();
+				imageTypes.description = "ZIP (*.zip)";
+				imageTypes.extension = zipExt;
+				allTypes.push(imageTypes); 				
+				fr.browse(allTypes);
+				
+			} else if(this.isOnlyProfile){	
+				var allTypes = new Array();
+				var imageTypes = new Object();
+				imageTypes.description = "Allowed Files (" + profileExt + ")";
+				imageTypes.extension = profileExt;
+				allTypes.push(imageTypes); 				
+				fr.browse(allTypes);
+			} else if (this.isOnlyImage){
+				fr.browse([
+					{description: "Allowed Files", extension: allExt}
+					, {description: "Documents", extension: docExt}
+					, {description: "Videos", extension: vidExt}
+					, {description: "Pictures", extension: imgExt}
+				]);
+			} else if(this.isOnlyPpt){	
+				var allTypes = new Array();
+				var imageTypes = new Object();
+				imageTypes.description = "Powerpoint (" + pptExt + ")";
+				imageTypes.extension = pptExt;
+				allTypes.push(imageTypes); 				
+				fr.browse(allTypes);
+			} else if(this.isOnlyXml){	
+				var allTypes = new Array();
+				var imageTypes = new Object();
+				imageTypes.description = "XML (*.xml)";
+				imageTypes.extension = "*.xml;";
+				allTypes.push(imageTypes); 				
+				fr.browse(allTypes);
+			} else {	
+				fr.browse();
+			}
+		]]>
+		</method>
+
+		<method name="getName"><![CDATA[
+			return this.fr.name;
+		]]>
+		</method>
+
+		<method name="upload" args="url"><![CDATA[
+			if ($debug) Debug.write("url: ",url,this.fr);
+			this.fr.upload(url);
+		]]>
+		</method>
+		
+    <method name="onCancel" args="fr">
+        <![CDATA[
+            if ($debug) Debug.write('onCancel invoked');
+        ]]>
+    </method>
+    
+    <method name="onComplete" args="fr">
+        <![CDATA[
+            if ($debug) Debug.write('onComplete invoked');
+            canvas.filedialogRef.progressBar.setValue(100);
+            //canvas.filedialogRef.upload.setAttribute('enabled', false);
+            if (canvas.filedialogRef.sendCompleted)canvas.filedialogRef.sendCompleted.sendEvent();
+        ]]>
+    </method>
+    
+    <method name="onHTTPError" args="fr, httpError">
+        <![CDATA[
+            if ($debug) Debug.write('onHTTPError invoked: ' + httpError);
+        ]]>
+    </method>
+    
+    <method name="onIOError" args="fr">
+        <![CDATA[
+            if ($debug) Debug.write('onIOError invoked',fr);
+        ]]>
+    </method>
+    
+    <method name="onOpen" args="fr">
+        <![CDATA[
+            if ($debug) Debug.write('onOpen invoked',fr);
+        ]]>
+    </method>
+    
+    <method name="onSecurityError" args="fr, errorString">
+        <![CDATA[
+            if ($debug) Debug.write('onSecurityError invoked: ' + errorString);
+        ]]>
+    </method>
+		
+ 	</class>
+ 	
+ </library>
diff --git a/WebContent/src/base/components/upload/library.lzx b/WebContent/src/base/components/upload/library.lzx
new file mode 100644
index 0000000..3a3f1e8
--- /dev/null
+++ b/WebContent/src/base/components/upload/library.lzx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="fileUpload.lzx" />
+	<include href="uploadWindowExplorer.lzx" />
+	
+</library>
diff --git a/WebContent/src/base/components/upload/uploadWindowExplorer.lzx b/WebContent/src/base/components/upload/uploadWindowExplorer.lzx
new file mode 100644
index 0000000..f5e2f39
--- /dev/null
+++ b/WebContent/src/base/components/upload/uploadWindowExplorer.lzx
@@ -0,0 +1,288 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+ 
+ <class name="uploadWindowExplorer" extends="labelExplorerBox" labelid="304"
+    docking="true" closable="true" width="264" x="200" height="230">
+    
+    <handler name="oninit">
+    	lz.ModeManager.makeModal(this);
+        canvas.currentUploadWindow = this;
+        if (this.servletName != "file.upload") {
+        	this._loadToWhiteboard.destroy();
+        }
+    </handler>
+    
+    <handler name="onclose">
+    	lz.ModeManager.release(this);
+    </handler>
+    
+    <attribute name="winobj" value="null" />
+	<attribute name="sessionid" value="" type="string" />
+	<attribute name="isOwner" value="0" type="string" />
+	<attribute name="usersid" value="" type="string" />
+	<attribute name="singleslidesmodule_id" type="string" value="" />
+	<attribute name="fileExplorerRef" value="null" />
+	<attribute name="secondid" value="0" type="string" />
+	
+	<attribute name="servletName" value="upload.upload" type="string" />
+	<attribute name="parentFolderId" value="0" type="number" />
+    
+    <attribute name="uploadmodule" value="videoconf1" type="string" />
+    
+    <attribute name="isOnlyImage" value="false" type="boolean" />
+    <attribute name="isOnlyPpt" value="false" type="boolean" />
+    <attribute name="isOnlyProfile" value="false" type="boolean" />
+    <attribute name="isOnlyXml" value="false" type="boolean" />
+    <attribute name="isOnlyZip" value="false" type="boolean" />
+    
+    <attribute name="isdefaultreturn" value="true" type="boolean" />
+    <attribute name="returnObj" value="true" type="boolean" />
+    
+ 	<fileUpload name="myFileUpload" isOnlyImage="${ this.parent.isOnlyImage }" 
+ 		 isOnlyPpt="${ this.parent.isOnlyPpt }" isOnlyProfile="${ this.parent.isOnlyProfile }" 
+ 		 isOnlyXml="${ this.parent.isOnlyXml }" isOnlyZip="${ this.parent.isOnlyZip }">
+		<method name="onComplete" args="fr">
+            if ($debug) Debug.write("oncomplete ",fr);
+        </method>
+        <method name="formatURL" args="fileHash">
+            <![CDATA[
+                var uploadmoduleimgfolderVar = '/' + fileHash;
+                var downloadurl = canvas.getUrl()+'DownloadHandler?' +
+                    'fileName=' + encodeURIComponent(fileHash + ".swf") +
+                    '&moduleName=' + 'videoconf1' + 
+                    '&parentPath=' + encodeURIComponent(uploadmoduleimgfolderVar + '/' )+
+                    '&room_id=files'+ 
+                    '&sid='+canvas.sessionId;
+                ////if ($debug) Debug.write("downloadurl: ",downloadurl);
+                return downloadurl;
+            ]]>
+        </method> 
+        
+        <method name="generateFileLink" args="fileHash">
+            <![CDATA[
+                return canvas.getUrl()+'DownloadHandler?' +
+                        'fileName='+ fileHash + 
+                        '&moduleName='+ "videoconf1" +
+                        '&parentPath='+ '/' +
+                        '&room_id=files' +
+                        '&sid='+canvas.sessionId;
+            ]]>
+        </method>
+    
+        <method name="onCompleteByRemote" args="tArrayValueObj">
+            
+            if ($debug) Debug.write("onCompleteByRemote ",tArrayValueObj);
+            this.parent.progressBar.setValue(100);
+            this.parent.upload.setAttribute('enabled', false);
+            this.parent.upload.setAttribute("visible",false);
+            this.parent.browse.setAttribute("visible",false);
+            this.parent.txtFile.setAttribute("visible",false);
+            
+            if (this.isOnlyZip) {
+            	this.parent.close();
+            	return;
+            }
+            
+            if (this.isOnlyXml) {
+            	parent.returnObj.sendRefresh();
+            	this.parent.close();
+            	return;
+            }
+            
+            if (this.isOnlyProfile) {
+            	parent.returnObj.sendRefresh();
+            	this.parent.close();
+            	return;
+            }
+            
+            if (parent._loadToWhiteboard.getValue()) {
+            	
+            	if ($debug) Debug.write(tArrayValueObj);
+            	if (tArrayValueObj.isPresentation) {
+            		var url = this.formatURL(tArrayValueObj.fileHash);
+            		
+            		var uploadmoduleimgfolderVar = '/' + tArrayValueObj.fileHash;
+            		
+            		if ($debug) Debug.write(url);
+            		
+                	canvas._drawarea.loadSWFPresentationSynced(url,tArrayValueObj.fileHash + ".swf",
+                              "videoconf1",uploadmoduleimgfolderVar,"files",hib.conferencedomain,1,
+                              tArrayValueObj.fileSystemName);
+            	} else if (tArrayValueObj.isImage) {
+            		canvas._drawarea.parent.parent.clearAreaAndAddImage(this.generateFileLink(tArrayValueObj.fileHash),0,0,
+                      canvas.getUrl() +'DownloadHandler',
+                      tArrayValueObj.fileHash,"videoconf1","/","files",hib.conferencedomain);
+            	}
+            }
+            
+            if (parent.isdefaultreturn) {
+            	
+                var tempSendArray = new Array ();
+                tempSendArray[0] = 'fileslist';
+                var nowTime = new Date();
+                var datumsString = nowTime.getHours()+':'+nowTime.getMinutes();
+                tempSendArray[1] = datumsString;
+                //if ($debug) Debug.write("Setting Message");
+                tempSendArray[2] = 'newfile';
+                tempSendArray[3] = canvas.currentusename;
+                //if ($debug) Debug.write("send: ",tempSendArray);
+                canvas.objMessage = tempSendArray;
+                canvas.thishib.sendMessageAll.doCall();
+
+            } else {
+                parent.returnObj.sendRefresh();
+            }
+            
+            if (parent.fileExplorerRef != null) {
+            	parent.fileExplorerRef.onClose.sendEvent();
+            }
+            
+            parent.close();
+        </method>
+
+		<method name="onProgress" args="fr, bytesLoaded, bytesTotal">
+			<![CDATA[
+    			this.parent.progressBar.setValue(bytesLoaded * 100 / bytesTotal);
+    			if (Math.round(bytesLoaded * 100 / bytesTotal)==100){
+    				this.parent.progressBar.setAttribute('visibility','hidden');
+    				this.parent.progress2.startShowing();
+    			}
+    		]]>
+		</method>
+    
+	    <method name="onHTTPError" args="fr, httpError">
+	        <![CDATA[
+	            if ($debug) Debug.write('onHTTPError invoked: ' + httpError);
+	            new lz.errorPopup(canvas,{error:'HTTP-ERROR: '+httpError});
+	            this.parent.close();
+		  		var tempSendArray = new Array ();
+		  		tempSendArray[0] = 'fileslist';
+		  		var nowTime = new Date();
+		  		var datumsString = nowTime.getHours()+':'+nowTime.getMinutes();
+		  		tempSendArray[1] = datumsString;
+	  			//if ($debug) Debug.write("Setting Message");
+	  			tempSendArray[2] = 'newfile';
+	  			tempSendArray[3] = canvas.currentusename;
+		  		//if ($debug) Debug.write("send: ",tempSendArray);
+		  		canvas.objMessage = tempSendArray;
+		  		hib.sendMessage.doCall();	            
+	        ]]>
+	    </method>
+    
+		<method name="onSelect" args="fr">
+			//if ($debug) Debug.write("onSelect: ",getName());
+			this.parent.txtFile.setAttribute('text',getName());
+			this.parent.upload.setAttribute('enabled', true);
+		</method>
+	</fileUpload>
+    
+    <labelText x="10" width="250" y="24" multiline="true" name="txtFileDescr" labelid="594" />
+	
+	<labelText x="10" fontsize="11" y="60" width="250" name="txtFile" multiline="true" 
+			   resize="false" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }" />
+
+	<simpleLabelButton fontsize="11" name="browse" x="10" y="100" labelid="596" width="250" height="20">
+		<handler name="onclick">
+			parent.myFileUpload.browse();
+		</handler>
+	</simpleLabelButton>
+
+    <!-- moduleName=videoconf1'; -->
+	<simpleLabelButton name="upload" x="10" y="120" labelid="593" width="250" enabled="false" height="20">
+		<handler name="onclick">
+			<![CDATA[
+			var uploadurl = canvas.getUrl() + parent.servletName +'?' +
+					'moduleName='+this.parent.uploadmodule +
+                    '&publicSID='+canvas.publicSID +
+                    '&filename='+encodeURIComponent(parent.txtFile.text) +
+                    '&parentFolderId='+parent.parentFolderId +
+					'&room_id='+hib.currentroomid +
+					'&secondid='+parent.secondid +
+					'&isOwner='+parent.isOwner + 
+					'&sid='+canvas.sessionId;
+            if ($debug) Debug.write("uploadurl: ",uploadurl);
+			parent.myFileUpload.upload(uploadurl);
+			this.setAttribute("enabled", false);
+			]]>
+		</handler>
+	</simpleLabelButton>
+    
+    <view name="progress2" x="10" y="158" width="250" visibility="hidden" height="10" bgcolor="#C6CEDF">
+        <attribute name="isStarted" value="false" type="boolean" />
+        <method name="startShowing">
+        	if (!this.isStarted) {
+        		this.isStarted = true;
+        		this.status._hide.setAttribute('started', true);
+        		this.setAttribute("visibility","visible");
+        	} else {
+        		return;
+        	}
+        </method>
+        <view x="1" y="1" width="248" height="8" bgcolor="#FFFFFF"/>
+        <view name="status" x="1" y="1" height="8" width="248" bgcolor="#D6DEEF">
+        	
+        	<animator name="_hide" attribute="opacity" to="0" from="1" duration="1000" started="false">
+        		<handler name="onstop">
+        			if (parent["_show"]) {
+        				parent._show.setAttribute('started', true);
+        			}
+        		</handler>
+        	</animator>
+        	<animator name="_show" attribute="opacity" to="1" from="0" duration="1000" started="false">
+                <handler name="onstop">
+                	if (parent["_show"]) {
+                    	parent._show.setAttribute('started', true);
+                    }
+                </handler>
+            </animator>
+        </view>
+        <labelText name="percent" align="center" resize="true" y="-18" fontstyle="bold" 
+            fontsize="10" fgcolor="#555555" labelid="592"/>
+    </view>
+    		   
+	<view name="progressBar" x="10" y="158" width="250" visibility="hidden" height="10" bgcolor="#C6CEDF">
+		<view x="1" y="1" width="248" height="8" bgcolor="#FFFFFF"/>
+		<view name="status" x="1" y="1" height="8" bgcolor="#D6DEEF"/>
+		<method name="setValue" args="value">
+			<![CDATA[
+                this.setAttribute("visible",true);
+                status.setAttribute('width', value * 248 / 100);
+                percent.setAttribute('text',Math.round(value) + '%');
+			]]>
+		</method>
+		<text name="percent" align="center" resize="true" y="-18" fontstyle="bold" 
+			fontsize="10" fgcolor="#555555" />
+	</view>
+	
+	<labelCheckbox name="_loadToWhiteboard" x="4" y="184" fontsize="11" 
+		labelid="1312" value="${ canvas.whiteboardCount &gt; 0 }" enabled="${ canvas.whiteboardCount &gt; 0 }" />
+	
+	<simpleLabelButton name="_close" x="100" y="204" labelid="595" width="160" height="20">
+		<handler name="onclick">
+			if ($debug) Debug.write("this.parent: ",this.parent);
+			this.parent.close();
+		</handler>
+	</simpleLabelButton>
+</class>
+	
+</library>
+ 
diff --git a/WebContent/src/base/components/validbox/library.lzx b/WebContent/src/base/components/validbox/library.lzx
new file mode 100644
index 0000000..63a46b7
--- /dev/null
+++ b/WebContent/src/base/components/validbox/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="validText.lzx" />
+
+</library>
diff --git a/WebContent/src/base/components/validbox/validText.lzx b/WebContent/src/base/components/validbox/validText.lzx
new file mode 100644
index 0000000..0f5ffc2
--- /dev/null
+++ b/WebContent/src/base/components/validbox/validText.lzx
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <!--- A editfieldText with the possibility of a dropdown menu -->
+
+    <class name="validText" extends="edittext">
+        
+        <!--- The method to be called for validating -->
+        <attribute name="validate_method" value="null" />
+        
+        <!--- the id-attribute of the resultset -->
+        <attribute name="resultId" value="id" type="string" />
+        <!--- the name-attribute of the resultset -->
+        <attribute name="resultName" value="name" type="string" />        
+					
+        <attribute name="initSelect" value="false" type="boolean" />
+					
+        <attribute name="timerDelegate" value="null"/>
+        <attribute name="typetime" type="number" value="500"/>
+        <attribute name="timerIsInited" value="false" type="boolean"/>
+        
+        <!--- items to be shown in the floatinglist -->
+        <attribute name="shownitems" value="7" type="number" />          
+        <attribute name="spacing" value="1" type="number" />  
+        <!--- The vertical offset of the floatinglist attached to this
+              combobox. -->
+        <attribute name="attachoffset" value="-1" type="number"/>
+        <!--- Whether a scrollbar should automatically show up when there are more
+              items than shownitems. -->
+        <attribute name="autoscrollbar" value="true"/>   
+
+        <!--- The border size ( in pixels ) of the popup list.  -->
+        <attribute name="bordersize"   value="1" />      
+        
+        <attribute name="currentValue" type="string" value="" />
+        
+        <!--- refernce to the current selected item -->
+        <attribute name="_selected" value="null" />    
+        
+        <method name="addAndSelectItem" args="txt,id">
+            this.cblist.addItem(txt,id);
+            this.currentValue = id;
+            this.setAttribute('text',txt);
+        </method>    
+        
+        <method name="setSelection" args="obj">
+            this._selected = obj;
+            this.currentValue = obj.value;
+            this.setAttribute('text',obj.text);
+            this.setOpen(false,true);
+            this.onselect.sendEvent();
+        </method>    
+        
+        <event name="onselect" />
+        
+        <method name="getValue">
+            return this.currentValue;
+        </method>
+
+                    <!-- arrow down and up both popup floatinglist, and pass the key event to it -->
+        <handler name="onkeydown" args="key">
+            <![CDATA[
+                //Debug.write("onkeydown: ",key);
+                // 38 is up-arrow
+                // 40 is down-arrow
+                // 32 is space
+                // 13 is return
+                if ((key==38) || (key==40)) {
+                    if (!this.isopen) {
+                        this.setOpen(true, true); // open, withKey
+                    } else {
+                        lz.Focus.setFocus(this.cblist, true);
+                    }
+                    // pass the key event on to the floatinglist
+                    this.cblist.onkeydown.sendEvent(key);
+                } else if (key==27){
+                    if (!this.isopen) {
+                        this.setOpen(true, true); // open, withKey
+                    } else {
+                        lz.Focus.setFocus(this.cblist, true);
+                    }
+                    this.cblist.onkeydown.sendEvent(key);
+                } else if (key!=13 && key!=9){
+                    //Don't handle Enter and Tab Events cause it will open the listItems
+                    ////Debug.write("onkeydown txt: ",this.getText());
+                    if (!this.initSelect){
+                        ////Debug.write("onvalue: ",txt,this);
+                        if (!this.timerIsInited){
+                            this.timerIsInited = true;
+                            this.timerDelegate = new LzDelegate( this, "validatedText" );
+                            ////Debug.write("+++++++++++++++++ addTimer");
+                            //Debug.write("+++++++++++++++++ removeTimer ",lz.Timer.countTimers());
+                            lz.Timer.addTimer( this.timerDelegate, this.typetime );
+                        } else {
+                            ////Debug.write("############### resetTimer NO ADDING ");
+                            //Debug.write("############### resetTimer ",lz.Timer.countTimers());
+                            lz.Timer.resetTimer( this.timerDelegate, this.typetime );
+                        }
+                    } else {
+                        this.initSelect = false;
+                    }
+                }
+            ]]>
+        </handler>
+        
+        <method name="validatedText">
+            <![CDATA[
+                ////Debug.write("validatedText: ",this.getText());
+                //this.reset();
+                if (!this.initSelect){
+                    var t = this.validate_method(this.getText());
+                    ////Debug.write('t: ',t.length);
+                    //this.parent._cblist.setAttribute('visible',true);
+                    this.cblist.removeAllItems();
+                    for (var i=0;i<t.length;i++){
+                        ////Debug.write(t[i][this.resultName],t[i][this.resultId]);
+                        this.cblist.addItem(t[i][this.resultName],t[i][this.resultId]);
+                    }                
+
+                    ////Debug.write("validateText: ",this.getText());
+                    if (!this.isopen) {
+                        this.setOpen(true, true); // open, withKey
+                    }
+                    this.timerIsInited = false;
+                } else {
+                    this.initSelect=false;
+                    this.timerIsInited = false;
+                }
+            ]]>
+        </method>	
+        
+        <attribute name="isopen" value="false" type="boolean" setter="this.setOpen(isopen)" />
+        
+        <event name="onisopen" />
+        
+        <method name="setOpen" args="open, withkey" >
+            if (!this.isinited) {
+                this.isopen = open;
+                return;
+            }
+            if (open) { // open combox
+                if (this.isopen) return; // tends to get called more than once, esp when
+                //lz.ModeManager.makeModal( this );
+
+                this.cblist.bringToFront();
+                this.cblist.setVisible(true);
+                //lz.Focus.setFocus(this.cblist, withkey);
+
+                this.isopen = true;
+                if (this['onisopen']) this.onisopen.sendEvent(true);
+            } else { // close combox
+                if (!this['isopen']) return;
+                this.isopen = false;
+
+                //lz.ModeManager.release( this );
+                this.cblist.setVisible(false);
+                if (this['onisopen']) this.onisopen.sendEvent(false);
+                if ( lz.Focus.getFocus() == this.cblist ) {
+                    lz.Focus.setFocus(this, withkey);
+                }
+            }
+        </method>           
+
+        <floatinglist name="cblist"
+                      width="${owner.width - 1}"
+                      bordersize="${this.owner.bordersize}"
+                      spacing="${this.owner.spacing}"
+                      visible="false"
+                      shownitems="${this.owner.shownitems}"
+                      attach="bottom"
+                      attachoffset="${this.owner.attachoffset}"
+                      multiselect="false"
+                      autoscrollbar="${owner.autoscrollbar}" >
+
+            <handler name="onkeyup" args="kc">
+                //name="_dokeyup" 
+                if (kc == 27) {  // escape needs to close floating list
+                    this.owner.setOpen(false);
+                }
+            </handler>
+            <method name="removeAllItems" args="index"> 
+                for (var eg in _contentview.subviews){
+                    _removeitem(_contentview.subviews[eg]); 
+                } 
+            </method>	
+            <handler name="onselect" args="obj">
+                ////Debug.write("obj: ",obj);
+                this.owner.setSelection(obj);
+            </handler>		
+        </floatinglist>
+
+    </class>
+	
+    
+</library>
diff --git a/WebContent/src/base/contentviews/baseContentSaveView.lzx b/WebContent/src/base/contentviews/baseContentSaveView.lzx
new file mode 100644
index 0000000..915c0a6
--- /dev/null
+++ b/WebContent/src/base/contentviews/baseContentSaveView.lzx
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="baseContentSaveView" extends="baseContentView">
+
+    <attribute name="observerViews" value="null" />
+	
+	<attribute name="saveIsVisible" value="true" type="boolean" />
+	<attribute name="addIsVisible" value="true" type="boolean" />
+	<attribute name="refreshIsVisible" value="true" type="boolean" />
+	<attribute name="deleteIsVisible" value="true" type="boolean" />
+	
+	<attribute name="confirmMessageLabelId" value="661" type="number" />
+    
+	<event name="onnew" />
+    <event name="ondelete" />
+    <handler name="onsavecompleted" >
+		this.hideNewRecordText();
+	</handler>
+    
+    <method name="hideNewRecordText">
+        this._newRecord.setAttribute('visibility','hidden');
+    </method>
+    
+	<event name="onreload" />
+
+    <view name="_savecontentbar" layout="axis:x;spacing:2;inset:2" x="2" height="28" width="$once{ parent.width }"
+        bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }">
+        
+        <state applied="$once{ parent.parent.saveIsVisible }">
+	        <baseChooseIcon resourceN="filesave_rsc" labelid="144" y="2" 
+	        	onclick="this.parent.parent.doSaveEvent()" />
+        </state>	
+        <state applied="$once{ parent.parent.addIsVisible }">
+        	<baseChooseIcon resourceN="edit_add_rsc" labelid="155" y="2" 
+        		onclick="this.parent.parent.doAddEvent()" />  
+        </state>
+        <state applied="$once{ parent.parent.refreshIsVisible }">
+	        <baseChooseIcon resourceN="reload_rsc" labelid="156" y="2" 
+	        	onclick="this.parent.parent.doReloadEvent()" />
+        </state> 
+        <state applied="$once{ parent.parent.deleteIsVisible }">    
+	        <baseChooseIcon resourceN="button_cancel_rsc" labelid="157" y="2" 
+	        	onclick="this.parent.parent.doDeleteEvent()"  />
+        </state>
+        
+		  
+		 	 	      	
+    </view>
+    
+    <labelText name="_newRecord" x="120"
+   						visibility="hidden" labelid="344" fgcolor="green" width="150" />     
+    
+    <method name="addViewToObserver" args="obj">
+    	if (this.observerViews==null) this.observerViews = new Array();
+        this.observerViews.push(obj);
+    </method>
+	
+	<method name="doAddEvent">
+		this._newRecord.setAttribute('visibility','visible');
+		this.onnew.sendEvent();
+	</method>
+    
+    <method name="doSaveEvent">
+    	if (this.observerViews.length!=0){
+        	new lz.contentSaveWindow(canvas.main_content._content.inner,{refObj:this,saveObj:this.observerViews});
+        }
+    </method>
+	
+	<method name="doReloadEvent">
+		this.onreload.sendEvent();
+	</method>
+    
+    <method name="doDeleteEvent">
+    	new lz.confirmDeleteWindow(canvas.main_content._content.inner,{
+    	                   refObj:this,
+    	                   messagelabelid:confirmMessageLabelId
+    	               });
+    </method> 
+    
+    <method name="confirmDelete">
+    	this.ondelete.sendEvent();
+    </method>
+
+    <event name="ontabcontentleave" />
+    
+    <method name="close">
+        this.ontabcontentleave.sendEvent();
+        this.destroy();
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/contentviews/baseContentView.lzx b/WebContent/src/base/contentviews/baseContentView.lzx
new file mode 100644
index 0000000..167b5bb
--- /dev/null
+++ b/WebContent/src/base/contentviews/baseContentView.lzx
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="baseContentView" extends="view">
+
+    <!---
+        If destroyByMethod is true, the clear content call will not destroy the views, but the method 
+        ontabcontentleave is still invoked, this can be handy if some connections must be closed before 
+        destroying / leaving the module, you could probably also use it to confirm leaving the module 
+     -->
+    <attribute name="destroyByMethod" value="false" type="boolean" />
+    
+    <event name="ontabcontentleave" />
+    
+    <handler name="oninit">
+    	canvas.currentContentView = this;
+    </handler>
+    
+    <!--
+        This Event is for sending additional Init Events, for example after the reconnect
+        the File-List has to be refreshed for the File-Browser Plugin 
+     -->
+    <event name="sendInit" />
+    
+    <method name="close">
+        if ($debug) Debug.write("close: ",this,this.destroyByMethod);
+        //Make sure any cursor status is reset
+		lz.Cursor.restoreCursor();
+		lz.Cursor.showHandCursor(true);
+		//Make sure any tooltip is cleared
+		canvas.clearToolTip();
+        this.ontabcontentleave.sendEvent();
+        if (!this.destroyByMethod) this.destroy();
+        return this.destroyByMethod;
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/src/base/contentviews/confirmDeleteWindow.lzx b/WebContent/src/base/contentviews/confirmDeleteWindow.lzx
new file mode 100644
index 0000000..bb090da
--- /dev/null
+++ b/WebContent/src/base/contentviews/confirmDeleteWindow.lzx
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="confirmDeleteWindow" extends="labelExplorerBox" labelid="152"
+    docking="true" width="264" x="450" y="20" height="200">
+    
+    <attribute name="refObj" value="null" />
+    <attribute name="messagelabelid" value="153" type="number" />
+    <attribute name="confirmlabelid" value="154" type="number" />
+    
+    <handler name="oninit">
+        lz.ModeManager.makeModal(this);
+    </handler>
+    
+    <handler name="onclose">
+        lz.ModeManager.release(this);
+    </handler>
+    
+    <labelText labelid="$once{ parent.messagelabelid }" y="22" x="4"
+    		   width="$once{ parent.width - 8 }" multiline="true"/>
+    
+    <simpleLabelButton labelid="$once{ parent.confirmlabelid }" width="100" x="40" y="170">
+        <handler name="onclick">
+            //Debug.write("confirm");
+            this.parent.refObj.confirmDelete();
+            this.parent.close();
+        </handler>
+    </simpleLabelButton>
+    
+    <simpleLabelButton labelid="153" width="100" x="150" y="170">
+        <handler name="onclick">
+            //Debug.write("cancel");
+            this.parent.close();
+        </handler>
+    </simpleLabelButton>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/contentviews/library.lzx b/WebContent/src/base/contentviews/library.lzx
new file mode 100644
index 0000000..4e6c9a1
--- /dev/null
+++ b/WebContent/src/base/contentviews/library.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <include href="baseContentView.lzx" />
+    <include href="baseContentSaveView.lzx" />
+    <include href="confirmDeleteWindow.lzx" />
+
+</library>
diff --git a/WebContent/src/base/externalJavaScript.lzx b/WebContent/src/base/externalJavaScript.lzx
new file mode 100644
index 0000000..c19e3c5
--- /dev/null
+++ b/WebContent/src/base/externalJavaScript.lzx
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<script>
+<![CDATA[
+
+
+	flash.external.ExternalInterface.addCallback("redirectToUrlCallback", null, redirectToUrlCallback);
+	flash.external.ExternalInterface.addCallback("getTimeZoneOffsetCallback", null, getTimeZoneOffsetCallback);
+    flash.external.ExternalInterface.addCallback("getBrowserInfoCallback", null, getBrowserInfoCallback);
+    flash.external.ExternalInterface.addCallback("getBrowserLangCallback", null, getBrowserLangCallback);
+
+	
+	var redirectToUrlReturnObject = null;
+	var timeZoneOffsetReturnObject = null;
+	var browserInfoReturnObject = null;
+	var browserLangReturnObject = null;
+	
+	
+	function redirectToUrl(url, returnObject) {
+		
+		redirectToUrlReturnObject = returnObject;
+		
+		flash.external.ExternalInterface.call("redirectToUrl", url);
+		
+		//lz.Browser.callJS("redirectToUrl",callback,this.redirectURL);
+	}
+	
+	function redirectToUrlCallback(returnValue) {
+		if ($debug) Debug.write("redirectToUrlCallback ",returnValue);
+		if (redirectToUrlReturnObject != null) {
+			redirectToUrlReturnObject.callback(returnValue);
+		}
+	}
+
+	
+	function getTimeZoneOffset(returnObject) {
+		
+		timeZoneOffsetReturnObject = returnObject;
+		
+		flash.external.ExternalInterface.call("getTimeZoneOffset");
+		
+		//lz.Browser.callJS("getTimeZoneOffset",getTimeZoneOffsetCallback);
+	}
+	
+	function getTimeZoneOffsetCallback(returnValue) {
+		if ($debug) Debug.write("getTimeZoneOffsetCallback ",returnValue);
+		if (timeZoneOffsetReturnObject != null) {
+			timeZoneOffsetReturnObject.callback(returnValue);
+		}
+	}
+	
+	
+	function getBrowserInfo(returnObject) {
+        
+        browserInfoReturnObject = returnObject;
+        
+        flash.external.ExternalInterface.call("getBrowserInfo");
+        
+        //lz.Browser.callJS("getBrowserInfo",callback);
+    }
+    
+    function getBrowserInfoCallback(returnValue) {
+        if ($debug) Debug.write("getBrowserInfoCallback ",returnValue);
+        if (browserInfoReturnObject != null) {
+            browserInfoReturnObject.callback(returnValue);
+        }
+    }
+    
+    
+    function getBrowserLang(returnObject) {
+        
+        browserLangReturnObject = returnObject;
+        
+        flash.external.ExternalInterface.call("getBrowserLang");
+        
+        //lz.Browser.callJS("getBrowserLang",callback);
+    }
+    
+    function getBrowserLangCallback(returnValue) {
+        if ($debug) Debug.write("getBrowserLangCallback ",returnValue);
+        if (browserLangReturnObject != null) {
+            browserLangReturnObject.callback(returnValue);
+        }
+    }
+	
+
+]]>
+</script>
+
+</library>
diff --git a/WebContent/src/base/functions.lzx b/WebContent/src/base/functions.lzx
new file mode 100644
index 0000000..6142cdf
--- /dev/null
+++ b/WebContent/src/base/functions.lzx
@@ -0,0 +1,407 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<script>
+<![CDATA[
+
+var labelObj;
+    
+var tempActionForNavi = null;
+
+// Load Labels from List
+var labels = new Object();
+
+String.prototype.startsWith = function(prefix) {
+    return (this.indexOf(prefix) === 0);
+};	
+
+var _labelObject = new Array();
+
+var RegExpTooltiplist = null;
+
+function disablesTooltips(obj){
+  if(RegExpTooltiplist!=null){
+    RegExpTooltiplist.destroy();
+    RegExpTooltiplist=null;
+  }
+  RegExpTooltiplist = obj;
+}
+
+function setLabelObject(lableObj){
+	_labelObject = lableObj;
+}
+
+function getLabelObjectById(labelid){
+	for (var i=0;i<_labelObject.length;i++){
+		if (Number(_labelObject[i]['labelid'])==labelid){
+			return _labelObject[i];
+		}
+	}
+}
+
+function getLabelNameGlob(labelid){
+	for (var i=0;i<_labelObject.length;i++){
+		if (Number(_labelObject[i]['labelid'])==labelid){
+			return _labelObject[i]['labelvalue'];
+		}
+	}
+}
+    
+var currentMouseWheelObject = null;
+    
+function setCurrentMouseWheelObject(obj) {
+    currentMouseWheelObject=obj;
+}    
+function getCurrentMouseWheelObject(obj) {
+    return currentMouseWheelObject;
+}  
+function disableCurrentMouseWheelObject() {
+    currentMouseWheelObject=null;
+}  
+
+function setLabelObjectByHundred(no,obj){
+    canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "hibAdapter_setLabelObjectByHundred", [no, obj]); 
+   	for (var i = 0; i < obj.length; ++i) {
+	    labels["id" + obj[i].id] = obj[i].value;
+   	}
+}
+
+function getLabelTag(labelid){
+	var l = labels["id" + labelid];
+	if (l == undefined) {
+		l = "Error Missing [" + labelid + "]";
+	}
+    return l;
+}
+
+function quicklinkAct(action) {
+    // if($debug) Debug.write("FUNC/quicklinkAct",action);
+    loadContent({action: action, params: null},null,null);
+}            
+
+function loadContent(obj,parentobj,preparentobj){
+    if($debug) Debug.write("FUNC/loadContent: ", obj);
+    
+	if (obj.action!="logout") {
+	    tempActionForNavi = {action: obj.action, params: obj.params};
+		if (!clearStageContent()) {
+			loadContentByTempActionForNavi();
+		}
+	} else {
+		new lz.logoutConfirm(canvas,{objectsToClean: obj});
+	}
+    
+}
+    
+function loadContentByTempActionForNavi(){
+    // if($debug) Debug.write("FUNC/loadContentByTempActionForNavi");
+    
+	if (canvas.roomJumpId != 0) {
+		canvas.initroomid = canvas.roomJumpId;
+        canvas.thishib.getRoomById.doCall();
+		canvas.roomJumpId = 0;
+	} else {
+        if($debug) Debug.write("FUNC/loadContentByString -1- ",tempActionForNavi);
+        if($debug) Debug.write("FUNC/loadContentByString -2- ",canvas[tempActionForNavi.action]);
+        if($debug) Debug.write("FUNC/loadContentByString -3- ",lz[canvas[tempActionForNavi.action]]);
+        
+        new lz[canvas[tempActionForNavi.action]](canvas.main_content._content.inner, {params: tempActionForNavi.params});
+	}
+}    
+
+function clearStageContent(){
+    return canvas.main_content._content.clearAll();
+}
+
+function setLabelObject(labelObjRef){
+    // if($debug) Debug.write("FUNC/setLabelObject",labelObjRef);
+    labelObj = labelObjRef;
+}
+
+function getLabelNameXMLCRM(labelid){
+    // if($debug) Debug.write("FUNC/getLabelNameXMLCRM",labelid);
+    for (var i=0;i<labelObj.length;i++){
+        if (labelid==labelObj[i].fieldvalues_id){
+            return labelObj[i].value;
+        }
+    }
+    
+}
+
+function getStringTime(){
+    var dateObj = new Date();
+    var hours = dateObj.getHours();
+    if (hours<10) hours="0"+hours;
+    var minutes = dateObj.getMinutes();
+    if (minutes<10) minutes="0"+minutes;
+    return ''+hours+':'+minutes;
+}   
+
+function getStringTimeWithSeconds(){
+    var dateObj = new Date();
+    var hours = dateObj.getHours();
+    if (hours<10) hours="0"+hours;
+    var minutes = dateObj.getMinutes();
+    if (minutes<10) minutes="0"+minutes;
+    var seconds = dateObj.getSeconds();
+    if (seconds<10) seconds="0"+seconds;
+    return ''+hours+':'+minutes+':'+seconds;
+}   
+
+function parseDateToString(dateObj){
+    // if($debug) Debug.write("FUNC/parseDateToString",dateObj);
+    if (dateObj==null) return "";
+    var d = dateObj.getDate();
+    if (d<10) d = "0"+d;
+    var m = dateObj.getMonth()+1;
+    if (m<10) m = "0"+m;
+    var y = dateObj.getFullYear();
+    if (y<10) y = "0"+y;
+    return d+'.'+m+'.'+y;
+}
+
+function parseDateToStringTimeOnly(dateObj){
+    // if($debug) Debug.write("FUNC/parseDateToStringTime",dateObj);
+    if (dateObj==null) return "";
+    var d = dateObj.getDate();
+    if (d<10) d = "0"+d;
+    var mo = dateObj.getMonth()+1;
+    if (mo<10) mo = "0"+mo;
+    var y = dateObj.getFullYear();
+    if (y<10) y = "0"+y;
+    var h = dateObj.getHours();
+    if (h<10) h = "0"+h;    
+    var m = dateObj.getMinutes();
+    if (m<10) m = "0"+m;        
+    return h+':'+m;
+}
+
+function parseTimeStringToDate(t){
+    // if($debug) Debug.write("FUNC/parseStringToTime",t);
+    if (t.length==5){
+        var d = 1;
+        var m = 1;
+        var y = 1970;
+        var std = Number(t.substring(0, 2));
+        var min = Number(t.substring(3, 5));
+        if (!isNaN(d) && !isNaN(m) && !isNaN(y)){
+            if ($debug) Debug.write("parseTimeStringToDate: ",new Date(y, m-1, d, std, min))
+            return new Date(y, m-1, d, std, min);
+        } else {
+            return new Date();
+        }
+    } else {
+        return new Date();
+    }
+}
+
+function parseDateToStringTime(dateObj){
+    // if($debug) Debug.write("FUNC/parseDateToStringTime",dateObj);
+    if (dateObj==null) return "";
+    var d = dateObj.getDate();
+    if (d<10) d = "0"+d;
+    var mo = dateObj.getMonth()+1;
+    if (mo<10) mo = "0"+mo;
+    var y = dateObj.getFullYear();
+    if (y<10) y = "0"+y;
+    var h = dateObj.getHours();
+    if (h<10) h = "0"+h;    
+    var m = dateObj.getMinutes();
+    if (m<10) m = "0"+m;        
+    return d+'.'+mo+'.'+y+' '+h+':'+m;
+}
+
+function parseDateToStringTimeSeconds(dateObj){
+    // if($debug) Debug.write("FUNC/parseDateToStringTime",dateObj);
+    if (dateObj==null) return "";
+    var d = dateObj.getDate();
+    if (d<10) d = "0"+d;
+    var mo = dateObj.getMonth()+1;
+    if (mo<10) mo = "0"+mo;
+    var y = dateObj.getFullYear();
+    if (y<10) y = "0"+y;
+    var h = dateObj.getHours();
+    if (h<10) h = "0"+h;    
+    var m = dateObj.getMinutes();
+    if (m<10) m = "0"+m; 
+    var s = dateObj.getSeconds();
+    if (s<10) s = "0"+s; 
+    return d+'.'+mo+'.'+y+' '+h+':'+m+':'+s;
+}
+
+function parseStringToDate(t){
+    // if($debug) Debug.write("FUNC/parseStringToDate",t);
+    if (t.length==10){
+        var d = Number(t.substring(0, 2));
+        var m = Number(t.substring(3, 5));
+        var y = Number(t.substring(6, 10));
+        if (!isNaN(d) && !isNaN(m) && !isNaN(y)){
+            return new Date(y, m-1, d);
+        } else {
+            return new Date();
+        }
+    } else {
+        return new Date();
+    }
+}
+
+function parseStringToDateTime(t){
+    // if($debug) Debug.write("FUNC/parseStringToDate",t);
+    if (t.length==15){
+        var d = Number(t.substring(0, 2));
+        var m = Number(t.substring(3, 5));
+        var y = Number(t.substring(6, 10));
+        var h = Number(t.substring(10, 12));
+        var min = Number(t.substring(13, 15));
+        if (!isNaN(d) && !isNaN(m) && !isNaN(y)){
+            if ($debug) Debug.write("parseStringToDateTime+: ",new Date(y, m-1, d, h, min))
+            return new Date(y, m-1, d, h, min);
+        } else {
+            return new Date();
+        }
+    } else {
+        return new Date();
+    }
+}
+
+function getStringDateFileSave(){
+    // if($debug) Debug.write("FUNC/getStringDateFileSave");
+    var dateObj = new Date();
+    var hours = dateObj.getHours();
+    if (hours<10) hours="0"+hours;
+    var minutes = dateObj.getMinutes();
+    if (minutes<10) minutes="0"+minutes;
+    var date = dateObj.getDate();
+    if (date<10) date="0"+date;
+    var month = dateObj.getMonth()+1;
+    if (month<10) month="0"+month;
+    return date+'_'+month+'_'+dateObj.getFullYear()+'_at_'+hours+'_'+minutes;
+} 
+
+function getStringTimeByTimeStamp(tStamp){
+    if ($debug) Debug.write("getStringTimeByTimeStamp "+tStamp);
+    var dateObj = new Date(tStamp);
+    var hours = dateObj.getHours();
+    if (hours<10) hours="0"+hours;
+    var minutes = dateObj.getMinutes();
+    if (minutes<10) minutes="0"+minutes;
+    var seconds = dateObj.getSeconds();
+    if (seconds<10) seconds="0"+seconds;
+    return ''+hours+':'+minutes+':'+seconds;
+}  
+
+
+function strtrim(str)
+{
+    for(var i = 0; str.charCodeAt(i) < 33; i++);
+    for(var j = str.length-1; str.charCodeAt(j) < 33; j--);
+    return str.substring(i, j+1);
+}
+
+function parseDateTimeStringFromXmlString(str) { 
+	//0123456789012345678901234567890
+	//2012-03-08T06:30:00.000+01:00
+	//2012-03-11T15:00:00.713Z
+	var tYear = str.substr(0,4);
+	var tMonth = str.substr(5,2);
+	var tDay = str.substr(8,2);
+	var tHour = str.substr(11,2);
+	var tMin = str.substr(14,2);
+	return ""+tDay+"."+tMonth+"."+tYear+" "+tHour+":"+tMin;
+}
+
+function parseDateStringFromXmlString(str) { 
+	//0123456789012345678901234567890
+	//2012-03-08T06:30:00.000+01:00
+	//2012-03-11T15:00:00.713Z
+	var tYear = str.substr(0,4);
+	var tMonth = str.substr(5,2);
+	var tDay = str.substr(8,2);
+	return ""+tDay+"."+tMonth+"."+tYear;
+}
+
+function parseTimeStringFromXmlString(str) { 
+	//0123456789012345678901234567890
+	//2012-03-08T06:30:00.000+01:00
+	//2012-03-11T15:00:00.713Z
+	var tHour = str.substr(11,2);
+	var tMin = str.substr(14,2);
+	
+	return ""+tHour+":"+tMin;
+}
+
+/*
+ * parse date from string
+ * sample strings:
+ * 2012-03-05
+ */
+function parseDateOnlyFromXmlString(str) { 
+	var tYear = str.substr(0,4);
+	var tMonth = str.substr(5,2);
+	var tDay = str.substr(8,2);
+	return new Date(tYear,Number(tMonth)-1,tDay);
+}
+
+
+/*
+ * parse date from string
+ * sample strings:
+ * 0123456789012345678901234567890
+ * 2012-03-08T06:30:00.000+01:00
+ * 2012-03-11T15:00:00.713Z
+ */
+function parseDateTimeFromXmlString(str) { 
+	var tYear = str.substr(0,4);
+	var tMonth = str.substr(5,2);
+	var tDay = str.substr(8,2);
+	var tHour = str.substr(11,2);
+	var tMin = str.substr(14,2);
+	return new Date(tYear,Number(tMonth)-1,tDay,tHour,tMin,0);
+}
+
+/**
+ * Correct REST format for java.util.Calendar is: yyyy-mm-ddTHH:MM:SS
+ *
+ *
+ */
+function parseDateToRestDateCalendar(dateObj){
+    if($debug) Debug.write("FUNC/parseDateToStringTime 1",dateObj);
+    if (dateObj==null) return "";
+    var d = dateObj.getDate();
+    if (d<10) d = "0"+d;
+    var mo = dateObj.getMonth()+1;
+    if (mo<10) mo = "0"+mo;
+    var y = dateObj.getFullYear();
+    var h = dateObj.getHours();
+    if (h<10) h = "0"+h;    
+    var m = dateObj.getMinutes();
+    if (m<10) m = "0"+m; 
+    var s = dateObj.getSeconds();
+    if (s<10) s = "0"+s; 
+    if($debug) Debug.write("FUNC/parseDateToStringTime 2",""+y+"-"+mo+"-"+d+"T"+h+":"+m+":"+s);
+    return ""+y+"-"+mo+"-"+d+"T"+h+":"+m+":"+s;
+}
+
+]]>
+</script>
+		
+</library>
diff --git a/WebContent/src/base/hibernate/hibRtmpConnection.lzx b/WebContent/src/base/hibernate/hibRtmpConnection.lzx
new file mode 100644
index 0000000..8f46dae
--- /dev/null
+++ b/WebContent/src/base/hibernate/hibRtmpConnection.lzx
@@ -0,0 +1,1881 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<dataset name="myresultnavi" />
+
+<dataset name="languagesSet" />        
+
+<class name="userStatus" extends="view" width="250" height="30">
+    <attribute name="statusText" type="string" />
+    <attribute name="statusColor" type="number" value="0" />
+
+    <text name="status" width="240" height="20" x="5" y="5" fontstyle="bold" fgcolor="0" text="defaulttext" fontsize="10"/>
+
+    <handler name="oninit">
+        this.status.setAttribute("text", this.statusText);
+        this.status.setAttribute("fgcolor", this.statusColor);
+        this.setAttribute("visibility", "visible");
+        lz.Timer.addTimer( new LzDelegate( this, "selfDestroy" ), 3000 );
+    </handler>
+
+    <method name="selfDestroy" args="ignore=null">
+        this.destroy();
+    </method>
+</class>
+
+<class name="hibRtmpConnection" extends="rtmpConnection" debug="false"
+    src="$once{ this.getUrl() }" >
+
+    <attribute name="counterror" type="number" value="0" />
+    
+    <attribute name="loaderVar" value="null" />
+    
+    <attribute name="userScope" value="hibernate" type="string" />
+    
+    <!-- refreshing the session regulary -->
+    <attribute name="refreshDelegate" value="null" />
+    
+    <!-- UserId-->
+    <attribute name="UserID" value="1" type="number" />
+    <!-- reconnect after each conferenceView -->
+    <attribute name="reconnectAfterRoomleft" type="boolean" value="false" />
+    <attribute name="reconnectedRoomInstance" value="null" />
+    
+    <attribute name="reconnectionAction" value="false" type="boolean" />
+    <attribute name="reconnectObjRef" value="null" />
+         
+     <attribute name="userobject" value="null" />
+     
+     <!-- default will be loaded on startup -->
+     <attribute name="userlang" value="1" type="number" />
+     
+     <!-- The default Language will be loaded on init  -->
+     <attribute name="initlanguageLoaded" value="false" type="boolean" />
+     
+     <!-- This domain is the orgdomain used in the video-conference -->
+     <attribute name="conferencedomain" value="public" type="string" />
+     
+     <!-- if this connection is used for testing the app
+     see test-setup.lzx -->
+     <attribute name="testAppLoading" value="false" type="boolean" />
+     
+     <!-- 
+        the real ROOM_ID
+     -->
+     <attribute name="currentroomid" value="0" type="number" />
+     
+     <!-- This is the current domain the user has logged-in -->
+     <attribute name="currentdomain" value="domain1" type="string" />
+     <attribute name="currentdomainObj" value="domain1" type="string" />
+     
+     <!--- the current Invitation-Object -->
+     <attribute name="currentInvitation" value="null" />
+    
+    <!-- shows what kind of conferenceView it is at the moment
+        wether its conferenceView or audienceView -->
+    <attribute name="modus" value="" type="string" />
+    
+    <!-- shows what kind of room the use is public or private -->
+    <attribute name="roomtype" value="" type="string" />
+        
+    <attribute name="showKickMessage" value="false" type="boolean"/>
+    <attribute name="showFullMessage" value="false" type="boolean"/>
+         
+    <attribute name="useRTMPT" value="false" type="boolean" />
+    <attribute name="connected" value="false" type="boolean" />
+    
+    <method name="getProtocol">
+    	if (canvas.useSSL) {
+    		return "rtmps";
+    	}
+    	if (this.useRTMPT) {
+    		return "rtmpt";
+    	}
+    	return "rtmp";
+    </method>
+    
+    <method name="getPort">
+    	if (canvas.useSSL) {
+            return canvas.rtmpsslport;
+        }
+    	if (this.useRTMPT) {
+    		return canvas.red5httpport;
+    	}
+    	return canvas.rtmpport;
+    </method>
+    
+    <method name="getHost">
+    	return canvas.rtmphostlocal;
+    </method>
+    
+    <method name="getWebappRootKey">
+    	return canvas.webAppRootKey;
+    </method>
+         
+    <!-- 
+    	canvas.getUrl() can not be reused since it has different protocol and port 
+    	and potentially in cluster another host, the only thing that stays the same
+    	no matter if hosted on slave or on master, is the scope, so
+    	userScope always stays the same
+     -->
+    <method name="getUrl">
+        return this.getProtocol() + '://' + this.getHost() + ':' + this.getPort() 
+        			+ '/' + this.getWebappRootKey() + '/' + this.userScope;
+    </method>
+             
+     <!--
+        The onconnect Method is triggered several times:
+             - When you enter a room the NetConnection will close and reconnect to the Scope of the Room
+             - When you leave the room again it will be re-connected to the default scope again
+      -->
+     <handler name="onconnect">
+        if($debug) Debug.write("hibRtmpConnection/onconnect");
+        if (this.reconnectionAction){
+        	if (canvas.wicketsid == null) {
+            	this.overwritePublicSID.doCall();
+	            this.setUsernameReconnect.doCall();
+            } else {
+	            canvas.sessionId = canvas.wicketsid;
+				canvas.sendViaLocalConnection(canvas.vid_lc_name, "setSessionId", [canvas.sessionId]);
+	            this.getPublicSID.doCall();
+            }
+        } else if (this.reconnectAfterRoomleft) {
+            //Return to content after reconnect
+            canvas.thishib.reconnectedRoomInstance.destroy();
+            this.overwritePublicSID.doCall();
+            this.setUsernameReconnect.doCall();
+        } else if (canvas.wicketsid != null) {
+            canvas.sessionId = canvas.wicketsid;
+			canvas.sendViaLocalConnection(canvas.vid_lc_name, "setSessionId", [canvas.sessionId]);
+			if (canvas.thishib.loaderVar != null) {
+            	canvas.thishib.loaderVar.setProgress();
+            }
+            this.getPublicSID.doCall();
+        } else {
+            this.refreshDelegate = new LzDelegate( this, "refreshSessionMeth" );
+            //lz.Timer.addTimer( this.refreshDelegate, 60000 );
+            lz.Timer.addTimer( this.refreshDelegate, canvas.refreshSession );
+            if (canvas.thishib.loaderVar != null) {
+            	canvas.thishib.loaderVar.setProgress();
+            }
+            
+            //Load Session Data
+            this.getsessiondata.callRPC();    
+        }
+        connected = true;
+    </handler>
+    
+    <handler name="ondisconnect">
+        canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "disconnect", [canvas.thishib.src]);
+        connected = false;
+    </handler>
+    
+    <method name="reconnectComplete">
+         if (this.reconnectionAction){
+            this.reconnectionAction = false;
+            this.reconnectObjRef.reconnectSuccess();
+        } else if (this.reconnectAfterRoomleft) {
+            loadContentByTempActionForNavi();
+        }
+        canvas.currentContentView.sendInit.sendEvent(this);
+    </method>
+    
+	<handler name="onerror" >
+	<![CDATA[
+		canvas.remoteLogWrite("error status='" + this.status + "'; src='" + this.src + "'; lastCalled='" + this.lastCalled
+			+ "'; showKickMessage='" + this.showKickMessage + "'; showFullMessage='" + this.showFullMessage
+			+ "'; reconnectionAction='" + this.reconnectionAction + "'; reconnectAfterRoomleft='" + this.reconnectAfterRoomleft + "'");
+		if (this.showFullMessage) {
+			new lz.labelerrorPopup(canvas,
+				{
+					errorlabelid: 99
+					, onCloseFunc: function() {
+				       if (this.makeModal) {
+				           lz.ModeManager.releaseAll();
+				       }
+				       if ($debug) Debug.write("Error dialog is being closed, calling QUIT");
+				       canvas.sendViaLocalConnection(canvas.vid_lc_name, "immediateExitRoom", [true,null]);
+					}
+				});
+			this.showFullMessage = false;
+			return;
+		} else if (this.showKickMessage) {
+			new lz.labelerrorPopup(canvas,{
+				errorlabelid:606
+				, onCloseFunc: function() {
+					canvas.quit();
+				}
+			});
+			canvas._loadingAll.hideContentOnly();
+			return;
+		} else if (this.reconnectionAction){
+			this.connect();
+		} else if (this.reconnectAfterRoomleft) {
+			if ($debug) Debug.write("this.reconnectAfterRoomleft: ",this.reconnectAfterRoomleft);
+			this.counterror=0;
+			this.connect();
+		} else {
+			if (canvas.isRemoteUser() && (this.status == 'NetConnection.Connect.Closed' 
+					|| this.status == 'NetConnection.Connect.NetworkChange'))
+			{
+				if (null != canvas.REDIRECT_URL_FOR_EXTERNAL_USERS) {
+					new lz.redirectBox(canvas, {
+							redirectURL:canvas.REDIRECT_URL_FOR_EXTERNAL_USERS
+							, maxTime: 0
+						});
+				}
+				this.counterror = 6; //NO more reconnects
+			}
+			this.useRTMPT = true
+			var src = getUrl();
+			this.setAttribute('src',src);
+			//Debug.write("new src ",this.src);
+			if (this.counterror<3){
+				this.counterror++;
+				//Debug.write("try ",this.counterror,"one");
+				if (canvas.thishib.loaderVar != null) {
+					canvas.thishib.loaderVar.error.setAttribute('text',"try "+this.counterror);
+				}
+				this.connect();
+			} else {
+				//Debug.write("connection failed");
+				if (canvas.thishib.loaderVar != null) {
+					canvas.thishib.loaderVar.error.setAttribute('text',this.status);
+				}
+				canvas.setAttribute('loadingmessage','connection failed');
+				new lz.labelerrorPopup(canvas,{errorlabelid:556});
+			}
+			if (canvas.thishib.loaderVar != null) {
+				canvas.thishib.loaderVar._src.setAttribute('text',src);
+			}
+		}
+	]]>
+	</handler>    
+    
+    <method name="refreshSessionMeth" args="calleeObj">
+        this.refreshSession.doCall();
+    </method>
+    
+    <!-- This Function is just for refreshing the Session -->
+    <netRemoteCallHib name="refreshSession" funcname="userservice.refreshSession" showLoading="false" >    
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>   
+        <handler name="ondata" args="value">
+            //if ($debug) Debug.write("hibRtmpConnection/refreshSession [",value,"]");
+            lz.Timer.addTimer( parent.refreshDelegate, canvas.refreshSession );
+        </handler>
+    </netRemoteCallHib>
+      
+    <netRemoteCallHib name="getsessiondata" funcname="xmlcrm.getsessiondata" >      
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("hibRtmpConnection/getsessiondata [",value,"]");
+            canvas.sessionObject = value;
+            canvas.sessionId = value.session_id;
+			canvas.sendViaLocalConnection(canvas.vid_lc_name, "setSessionId", [canvas.sessionId]);
+			if (canvas.thishib.loaderVar != null) {
+            	canvas.thishib.loaderVar.setProgress();
+            }
+            parent.getPublicSID.doCall();
+        </handler>  
+    </netRemoteCallHib>
+     
+    <netRemoteCallHib name="getPublicSID" funcname="getPublicSID" >      
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("hibRtmpConnection/getPublicSID [",value,"]");
+            canvas.publicSID = value;     
+			if (canvas.thishib.loaderVar != null) {
+            	canvas.thishib.loaderVar.setProgress();
+            }
+			parent.getLanguages.doCall();
+        </handler>  
+    </netRemoteCallHib>
+    
+    <netRemoteCallHib name="overwritePublicSID" funcname="overwritePublicSID" >     
+        <netparam><method name="getValue"> return canvas.publicSID;</method></netparam>
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("overwritePublicSID: ",value);
+        </handler>  
+    </netRemoteCallHib>    
+    
+	<netRemoteCallHib name="getLanguages" funcname="languageservice.getLanguages" dataobject="languagesSet" >
+		<handler name="ondata" args="value">
+			//The onResult-Handler will be called be the rtmpconnection
+			//if ($debug) Debug.write("getLanguages: ",value, languagesSet);
+			if (canvas.thishib.loaderVar != null) {
+				canvas.thishib.loaderVar.setProgress();
+			}
+			parent.getDefaultLanguage.doCall();
+		</handler>
+	</netRemoteCallHib>    
+    
+    <method name="setDefaultUserLanguage">
+	    <![CDATA[
+	        if (userlang == -1 && canvas.language_id != 0) {
+	            userlang = canvas.language_id;
+	        } else if (userlang == -1) {
+	            var lang_id = canvas.default_lang_id;
+	            
+	            var browserLang = flash.external.ExternalInterface.call("function(){return window.navigator.systemLanguage || window.navigator.userLanguage || window.navigator.language;}");
+	            if (browserLang == null) {
+	                browserLang = "" + System.capabilities.language;
+	            }
+	            if (browserLang != null && browserLang.length > 1) {
+	                var lngCode = browserLang.substring(0, 2);
+	                
+	                //openlaszlo XPath is able to search nothing, so will iterate
+	                var xpath = "languagesSet:/item";
+	                var list = languagesSet.getPointer().xpathQuery(xpath);
+	                
+	                var partMatch = -1, fullMatch = -1; 
+	                for (var i = 1; list != null && i <= list.length; ++i) {
+	                    xpath = "languagesSet:/item[" + i + "]/code/text()";
+	                    var val = languagesSet.getPointer().xpathQuery(xpath);
+	                    if (val != null && val.length > 1) {
+	                        var partCode = ("" + val).substring(0, 2);
+	                        
+	                        if (browserLang == val) {
+	                            fullMatch = i;
+	                        } else if (lngCode == val) {
+	                            partMatch = i;
+	                        } else if (partCode == lngCode) {
+	                            partMatch = i;
+	                        }
+	                    }
+	                }
+	                if (partMatch != -1 || fullMatch != -1) {
+	                    i = (fullMatch != -1) ? fullMatch : partMatch;
+	                    xpath = "languagesSet:/item[" + i + "]/language_id/text()";
+	                    lang_id = languagesSet.getPointer().xpathQuery(xpath);
+	                }
+	            }
+	            
+	            if (canvas.language_id == 0) {
+	                userlang = lang_id;
+	            } else {
+	                userlang = canvas.language_id;
+	            }
+	        }
+	    ]]>
+    </method>
+    
+    <netRemoteCallHib name="logoutUser" funcname="xmlcrm.logoutUser"
+        remotecontext="$once{ canvas.thishib }" activeErrorHandler="true" 
+        isCallBackHandler="true">
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <handler name="sendCallBack">
+        <![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("sendCallBack logoutUser: ");    
+            parent.initlanguageLoaded = false;
+            
+            var g = canvas.getUserData();
+            g["username"] = '';
+            g["userpass"] = '';
+            g["userquality"] = null;
+            g["usercolor"] = null;
+            g["userlang"] = null;
+            g["saveuserdata"]=false;
+            g["storedSession"] = "";
+            canvas.setUserData(g);
+            canvas.setColorStyle(canvas.baseColorScheme);
+            
+            parent.userlang = -1;
+            parent.setDefaultUserLanguage();
+
+            parent.getLanguageByIdAndMax.start = 0;
+            parent.getLanguageByIdAndMax.doCall();
+        ]]>
+        </handler>          
+    </netRemoteCallHib>     
+    
+    <netRemoteCallHib name="setUsernameReconnect" funcname="setUsernameReconnect" remotecontext="$once{ canvas.thishib }" >   
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return canvas.user_id;</method></netparam>
+        <netparam><method name="getValue">return canvas.currentuser;</method></netparam>
+        <netparam><method name="getValue">return canvas.firstName;</method></netparam>
+        <netparam><method name="getValue">return canvas.lastName;</method></netparam>   
+        <netparam><method name="getValue">return canvas.picture_uri;</method></netparam>   
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("setUsernameReconnect: ",canvas.user_id,value);   
+            parent.reconnectComplete();
+        </handler>  
+    </netRemoteCallHib>    
+        
+    <netRemoteCallHib name="getDefaultLanguage" funcname="languageservice.getDefaultLanguage" >      
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            canvas.default_lang_id = value;
+            if ($debug) Debug.write("getDefaultLanguage: ",value,"; canvas.lang = ", canvas.language_id);
+            if (canvas.language_id==0){
+                parent.userlang = canvas.default_lang_id;
+            } else {
+                parent.userlang = canvas.language_id;
+            }
+            parent.getLanguageByIdAndMax.doCall();
+        </handler>  
+    </netRemoteCallHib>      
+    
+	<netRemoteCallHib name="getInvitationByHash" activeErrorHandler="true" funcname="invitationservice.getInvitationByHash">
+		<netparam name="invitationHash"><method name="getValue">return canvas.invitationHash;</method></netparam>
+		<handler name="ondata" args="value">
+		<![CDATA[
+			if (canvas.thishib.loaderVar != null) {
+				canvas.thishib.loaderVar.close();
+			}
+			//The onResult-Handler will be called be the rtmpconnection
+			if ($debug) Debug.write("getInvitationByHash: ",value);
+			if (value<0){
+			} else {
+				if (value.allowEntry) {
+					parent.currentInvitation = value;
+					new lz.invitationQuickLoader(canvas.main_content._content.inner);
+				} else {
+					var addInfo = "" + value.validFrom +"<br/> - <br/>"+ value.validTo;
+					var dlg = new lz.rpcErrorDialog(canvas,{errorid:-50,addInfo:addInfo});
+				}
+			}
+		]]>
+		</handler>
+	</netRemoteCallHib> 
+    
+	<netRemoteCallHib name="secureLoginByRemote" activeErrorHandler="true" funcname="xmlcrm.secureLoginByRemote" >
+		<netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+		<netparam name="remoteSessionId"><method name="getValue">return canvas.secureHash;</method></netparam>
+		<handler name="ondata" args="value">
+		<![CDATA[
+			if (canvas.thishib.loaderVar != null) {
+				canvas.thishib.loaderVar.close();
+			}
+			//The onResult-Handler will be called be the rtmpconnection
+			if ($debug) Debug.write("secureLoginByRemote: ",value);
+			if (value < 0) {
+			} else {
+				if (value == null) {
+					new lz.errorPopup(canvas,{error:'Invalid Hash'});
+					return;
+				}
+				
+				canvas.showNickNameDialog = value.showNickNameDialog;
+				if ($debug) Debug.write("markSessionAsLogedIn9 ",canvas.showNickNameDialog);
+				
+				canvas.initroomid = value.room_id;
+				canvas.becomemoderator = value.becomemoderator;
+				canvas.showAudioVideoTest = value.showAudioVideoTest;
+				canvas.landingZone = value.landingZone;
+				
+				canvas.roomRecordingId = value.roomRecordingId;
+				
+				if (canvas.roomRecordingId == null) {
+					canvas.roomRecordingId = 0;
+				}
+				
+				if (canvas.showNickNameDialog) {
+					new lz.chooseNickName(canvas);
+				} else {
+					parent.getCurrentRoomClient.doCall();
+				}
+			}
+		]]>
+		</handler>
+	</netRemoteCallHib>  
+    
+    <netRemoteCallHib name="loginUserByRemote" activeErrorHandler="true" 
+        funcname="xmlcrm.loginUserByRemote" >          
+        <netparam name="remoteSessionId"><method name="getValue">return canvas.remoteUserSid;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("loginUserByRemote -1-: ",value);
+                if ($debug) Debug.write("loginUserByRemote -2-: ",canvas.remoteUserSid);
+                if (value<0){
+                    
+                } else {
+                    parent.getCurrentRoomClient.doCall();
+                }
+            ]]>
+        </handler>   
+    </netRemoteCallHib>  
+    
+	<netRemoteCallHib name="getCurrentRoomClient" funcname="xmlcrm.getCurrentRoomClient" >
+		<netparam name="sessionId"><method name="getValue">return canvas.sessionId;</method></netparam>
+		<handler name="ondata" args="value">
+		<![CDATA[
+			//The onResult-Handler will be called be the rtmpconnection
+			if ($debug) Debug.write("getCurrentRoomClient: ",value);
+			if (value != null) {
+				canvas.currentClient = value;
+				canvas.setAttribute('currentuser',value.firstname+" "+value.lastname);
+				
+				//Somehow this leads to a bug in the implementation of the secure User Login
+				canvas.setAttribute('user_id',value.user_id);
+				
+				canvas.setAttribute('allowRecording',value.allowRecording);
+				
+				var fName = value.firstname == null ? "" : value.firstname;
+				var lName = value.lastname == null ? "" : value.lastname;
+				canvas.setAttribute('firstName', fName);
+				canvas.setAttribute('lastName', lName);
+				canvas.setAttribute('mail', value.adresses.email);
+				
+				if (canvas.isRemoteUser() && fName == '' && lName == '') {
+					if ($debug) Debug.write("!!!!!!!!!!! Nickname HIB ", value.adresses.email);
+					new lz.chooseNickName(canvas);
+				}
+				hib.userobject.firstname = fName;
+				hib.userobject.lastname = lName;
+				
+				canvas.setAttribute('lastLogin','');
+				canvas.setAttribute('official_code','');
+				canvas.setAttribute('picture_uri',value.picture_uri);
+				canvas.setAttribute('language','');
+				
+				if ($debug) Debug.write("canvas.landingZone :: ",canvas.landingZone);
+				
+				if (canvas.landingZone == "dashboard") {
+					canvas.destroyExitButton = false;
+					parent.setUsernameAndSession.doCall();
+					parent.getRoomTypes.doCall();
+				} else if (canvas.roomRecordingId > 0) {
+					if (canvas.thishib.loaderVar != null) {
+						canvas.thishib.loaderVar.close();
+					}
+					//parent.getRoomById.doCall();
+					var obj = new Array();
+					obj["action"] = "recordModule";
+					loadContent(obj,null,null);
+				} else if (canvas.wicketroomid > 0) {
+					canvas.initroomid = canvas.wicketroomid;
+					parent.getRoomTypes.doCall();
+					parent.getRoomById.doCall();
+				} else {
+					if (canvas.thishib.loaderVar != null) {
+						canvas.thishib.loaderVar.close();
+					}
+					parent.getRoomById.doCall();
+				}
+			}
+		]]>
+		</handler>
+	</netRemoteCallHib>
+    
+	<netRemoteCallHib name="getRoomById" funcname="conferenceservice.getRoomById" >          
+		<netparam name="sessionId"><method name="getValue">return canvas.sessionId;</method></netparam>
+		<netparam name="roomId"><method name="getValue">return canvas.initroomid;</method></netparam>
+		<handler name="ondata" args="value">
+		<![CDATA[
+			//The onResult-Handler will be called be the rtmpconnection
+			if ($debug) Debug.write("getRoomById: ",value);
+			if (value!=null){
+				if (canvas.wicketsid != null) {
+					canvas.thishib.loaderVar.close();
+				}
+				if (canvas.directUserLogin) {
+					canvas.directRoomObj = value;
+					canvas.thishib.loaderVar.close();
+				} else {
+					canvas.setRoomValues(value.roomtype.roomtypes_id,value.rooms_id,value);
+					var r = value;
+					r.currentusers = ''; //this might be huge list
+					canvas.sendViaLocalConnection(canvas.rtmp_lc_name,"setRoomValues",[value.roomtype.roomtypes_id,value.rooms_id,r]);
+				}
+			} else {
+				new lz.labelerrorPopup(canvas,{errorlabelid:1286});
+			}
+		]]>
+		</handler>
+	</netRemoteCallHib>
+        
+    <netRemoteCallHib name="getLanguageByIdAndMax" funcname="languageservice.getLanguageByIdAndMax" >
+        <attribute name="start" value="0" type="number" />
+        <attribute name="step" value="100" type="number" />
+        <attribute name="max" value="1607" type="number" />
+        <netparam><method name="getValue">return parent.parent.userlang;</method></netparam> 
+        <netparam><method name="getValue">return parent.start;</method></netparam> 
+        <netparam><method name="getValue">return parent.step;</method></netparam> 
+        <handler name="ondata" args="value">
+            <![CDATA[
+            if($debug) Debug.write("hibRtmpConnection/userlang:[",parent.userlang,"]");
+                //if($debug) Debug.write("hibRtmpConnection/getLanguageByIdAndMax:[",value,"]");
+                setLabelObjectByHundred(this.start,value);
+                //The onResult-Handler will be called be the rtmpconnection
+                if (this.start <= max){
+                    this.start += this.step;
+                    if (canvas.thishib.loaderVar != null) {
+                       canvas.thishib.loaderVar.setProgress();
+                    }
+                    this.doCall();
+                } else {
+                	if($debug) Debug.write("loading lang complete");
+                    if (parent.initlanguageLoaded){
+                        if (canvas.thishib.loaderVar != null) {
+                            canvas.thishib.loaderVar.setProgress();
+                        }
+			            parent.setUsernameAndSession.doCall();
+                    } else {
+						parent.initlanguageLoaded = true;
+						if($debug) Debug.write("getGeneralOptions");
+						parent.getGeneralOptions.doCall();
+                    }
+                    if($debug) Debug.write("getRoomTypes");
+                    parent.getRoomTypes.doCall();
+                }
+            ]]>
+        </handler>  
+    </netRemoteCallHib>
+        
+    <!--
+        There must be a temporary SIP-Account created at this moment
+     -->  
+    <netRemoteCallHib name="markSessionAsLogedIn" funcname="xmlcrm.markSessionAsLogedIn" >
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+                        
+            if (value == null) {
+                new lz.errorPopup(canvas,{error:"Missing User Object, set the Configuration value of the key 'default.rpc.userid' to a valid user Id that has at least one Organization assigned in the OpenMeetings Administrion Configuration Panel "});
+            }
+            
+            if ($debug) Debug.write("markSessionAsLogedIn1 ",value);
+             
+            hib.userobject = value;
+             
+            canvas.user_id = hib.userobject.user_id;
+            
+            if (value.organisation_users.length > 0){
+                hib.currentdomain = value.organisation_users[0].organisation.name;
+                hib.currentdomainObj = value.organisation_users[0].organisation;
+            } else if (!canvas.isRemoteUser()) {
+                new lz.errorPopup(canvas,{error:"Missing Organization in User Object, set the Configuration value of the key 'default.rpc.userid' to a valid user Id that has at least one Organization assigned in the OpenMeetings Administrion Configuration Panel "});
+            }
+            
+            if ($debug) Debug.write("markSessionAsLogedIn2 ",canvas.sessionId);
+            if ($debug) Debug.write("markSessionAsLogedIn3 ",canvas.initroomid);
+            if ($debug) Debug.write("markSessionAsLogedIn4 ",canvas.isinitRoomDirect);
+            if ($debug) Debug.write("markSessionAsLogedIn5 ",canvas.remoteUserLogin);
+            if ($debug) Debug.write("markSessionAsLogedIn6 ",canvas.directUserLogin);
+            if ($debug) Debug.write("markSessionAsLogedIn7 ",canvas.directRoomId);
+            if ($debug) Debug.write("markSessionAsLogedIn8 ",canvas.secureRemoteUserLogin);
+            
+            if (canvas.secureRemoteUserLogin) {
+                
+                if ($debug) Debug.write("markSessionAsLogedIn == CALL ",canvas.secureHash);
+             
+                parent.secureLoginByRemote.doCall();
+                
+            } else if (canvas.isinitRoomDirect){
+                parent.getInvitationByHash.doCall();   
+            } else if (canvas.remoteUserLogin) {
+                parent.loginUserByRemote.doCall();   
+            } else if (canvas.directUserLogin) {
+                //show Nick Name or Password Protection Dialog
+                canvas.initroomid = Number(canvas.directRoomId);
+                parent.getRoomById.doCall();
+            }
+        </handler>  
+    </netRemoteCallHib> 
+    
+	<netRemoteCallHib name="getGeneralOptions" funcname="xmlcrm.getGeneralOptions">
+		<handler name="ondata" args="value">
+		<![CDATA[
+			if (canvas.thishib.loaderVar != null) {
+				canvas.thishib.loaderVar.setProgress();
+			}
+			if ($debug) Debug.write("getGeneralOptions: ", value.length, value);
+			if (value != null) {
+				if (value.length > 0 && value[0] != null) {
+					//if ($debug) Debug.write("Give exclusive audio keycode is: ", value[0].conf_value);
+					canvas.setAttribute('GIVE_EXCLUSIVE_AUDIO_KEY', value[0].conf_value);
+				}
+				if (value.length > 1 && value[1] != null) {
+					if ($debug) Debug.write("red5sip.enable is: ", value[1].conf_value);
+					canvas.setAttribute('RED5_SIP_ENABLE', value[1].conf_value);
+				}
+				if (value.length > 2 && value[2] != null) {
+					if ($debug) Debug.write("max_upload_size is: ", value[2].conf_value);
+					canvas.setAttribute('MAX_UPLOAD_SIZE', value[2].conf_value);
+				}
+				if (value.length > 3 && value[3] != null) {
+					if ($debug) Debug.write("Mute/unmute keycode is: ", value[3].conf_value);
+					canvas.setAttribute('MUTE_AUDIO_KEY', value[3].conf_value);
+				}
+				if (value.length > 4 && value[4] != null) {
+					if ($debug) Debug.write("redirect.url.for.external.users is: ", value[4].conf_value);
+					canvas.setAttribute('REDIRECT_URL_FOR_EXTERNAL_USERS', value[4].conf_value);
+				}
+			} else {
+				if ($debug) Debug.warn("xmlcrm.getGeneralOptions empty!");
+			}
+			parent.getUserSalutations.doCall();
+		]]>
+		</handler>
+	</netRemoteCallHib>
+    
+    <netRemoteCallHib name="setCurrentUserOrganization" funcname="xmlcrm.setCurrentUserOrganization">
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return hib.currentdomainObj.organisation_id;</method></netparam>  
+        <handler name="ondata" args="value">
+            //Sessionmanagement.getInstance() 
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("setCurrentUserOrganization: ",value);
+        </handler>  
+    </netRemoteCallHib> 
+     
+    
+    <netRemoteCallHib name="getUserSalutations" funcname="userservice.getUserSalutations" >
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.userlang; </method></netparam> 
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            //Debug.write("getUserSalutations ",value);
+            canvas.salutationsInitValues = value;
+            //check for password reset
+            if (canvas.wicketsid != null) {
+            	parent.loginWicket.doCall();
+            } else { 
+                if (canvas.thishib.loaderVar != null) {
+                   canvas.thishib.loaderVar.close();
+                }
+                //do not show loggin-PopUp for the test-Application
+                if (parent.testAppLoading){ 
+                    canvas.loadNextStepTestApp();
+                } else {
+                    if (canvas.isRemoteUser()){
+                        if (canvas.thishib.loaderVar != null) {
+                          canvas.thishib.loaderVar.setProgress();
+                        }
+                        if($debug) Debug.write("isinitRoomDirect or remoteUserLogin is true");
+                        parent.markSessionAsLogedIn.doCall();
+                    }
+                }
+            }
+        </handler>  
+    </netRemoteCallHib>
+    
+	<netRemoteCallHib name="loginWicket" funcname="xmlcrm.loginWicket" >
+		<netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+		<netparam><method name="getValue">return canvas.wicketsid;</method></netparam>
+		<netparam><method name="getValue">return canvas.wicketroomid;</method></netparam>
+		<handler name="ondata" args="value">
+		<![CDATA[
+			if ($debug) Debug.write("!!!!!!!!!!! loginWicket", value);
+			if (value != null) {
+				canvas.setAttribute('user_id',value.user_id);
+				canvas.setAttribute('firstName', value.firstname == null ? "" : value.firstname);
+				canvas.setAttribute('lastName', value.lastname == null ? "" : value.lastname);
+				canvas.setAttribute('mail','');
+				canvas.setAttribute('lastLogin','');
+				canvas.setAttribute('official_code','');
+				canvas.setAttribute('picture_uri','');
+				canvas.setAttribute('language','');
+				canvas.setAttribute('currentuser',value.login);
+				if (value.timeZoneId != null) {
+					canvas.timeZoneId = value.timeZoneId;
+				}
+				if (value.rights != null) {
+					for (var i = 0; i < value.rights.length; ++i) {
+						if ('Admin' == value.rights[i]) {
+							canvas.becomemoderator = true;
+						}
+					}
+				}
+				if ($debug) Debug.write("hibRtmpConnection::loginWicket -> canvas.becomemoderator", canvas.becomemoderator);
+				if (value.sessionData == null) {
+					if ($debug) Debug.write("No Language Found to assign");
+					return;
+				}
+				hib.userobject = value;
+				var found = false;
+				for (var i = 0; i < value.organisation_users.length; ++i) {
+					if (value.organisation_users[i].organisation.organisation_id == value.sessionData.organization_id) {
+						found = true;
+						hib.currentdomain = value.organisation_users[i].organisation.name;
+						hib.currentdomainObj = value.organisation_users[i].organisation;
+						break;
+					}
+				}
+				if (!found && value.organisation_users.length > 0) {
+					hib.currentdomain = value.organisation_users[0].organisation.name;
+					hib.currentdomainObj = value.organisation_users[0].organisation;
+				}
+				parent.getCurrentRoomClient.doCall();
+			} else {
+				new lz.labelerrorPopup(canvas, {errorlabelid: 1599});
+			}
+		]]>
+		</handler>
+	</netRemoteCallHib>
+	
+    <netRemoteCallHib name="getRoomTypes" funcname="conferenceservice.getRoomTypes" >
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("getRoomTypes ", value);
+            canvas.roomTypesInitValues = value;
+            canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "getRoomTypes", [value]);
+			if (canvas.thishib.loaderVar != null) {
+            	canvas.thishib.loaderVar.setProgress();
+            }
+        </handler>  
+    </netRemoteCallHib>      
+    
+        <netRemoteCallHib name="setId" funcname="setId">
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("################ setId: ",value);
+                canvas.setAttribute('streamid',value);   
+            </handler>  
+        </netRemoteCallHib> 
+        
+        <netRemoteCallHib name="setUsernameAndSession" funcname="setUsernameAndSession" remotecontext="$once{ canvas.thishib }" >   
+            <netparam><method name="getValue"> return canvas.sessionId; </method></netparam> 
+            <netparam><method name="getValue">return canvas.user_id;</method></netparam>
+            <netparam><method name="getValue">return canvas.currentuser;</method></netparam>
+            <netparam><method name="getValue">return canvas.firstName;</method></netparam>
+            <netparam><method name="getValue">return canvas.lastName;</method></netparam>      
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("setUsernameAndSession: ",canvas.user_id,value);
+                if (canvas.thishib.loaderVar != null) {
+	                canvas.thishib.loaderVar.close();
+                }
+            </handler>  
+        </netRemoteCallHib>        
+        
+        <netRemoteCallHib name="testMethod" funcname="testMethod">
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("testMethod ",value);                   
+            </handler>  
+        </netRemoteCallHib>
+
+        <!--- Notification of new User --> 
+		<netRemoteCallHib name="addNewUser" funcname="addNewUser">
+			<handler name="ondata" args="value">
+				//The onResult-Handler will be called be the rtmpconnection
+				if ($debug) Debug.write("addNewUser: ",value);
+				if(value.sipTransport) {
+					canvas._videocontainer.addItem(value.connectedSince,value.isMod,value.streamid,value.room_id,'',value.formatedDate,value.userpos,value.usercolor,value);
+				} else {
+					canvas._videocontainer.addClientItem(value.connectedSince,value.isMod,value.streamid,value.room_id,'',value.formatedDate,value.userpos,value.usercolor,value);
+				}
+				canvas.setAttribute('numberofpartners',canvas.numberofpartners+1);
+			</handler>
+		</netRemoteCallHib>    
+        
+        <netRemoteCallHib name="getCurrentModeratorList" funcname="getCurrentModeratorList">
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    if ($debug) Debug.write("############ getCurrentModeratorList: ",value);
+                    
+                    canvas.analyzeModerationList(value);
+                    
+                    canvas.currentModeratorList = value;
+                    //Update Moderation Flag
+                    canvas.updateModerationFlag();
+                    
+                    var messageAlreadyThrown = false;
+                    
+                    //if ($debug) Debug.write("throw event to drawarea: ", canvas.moderatorStreamID, canvas.ismoderator);
+                    
+					if (this.parent.modus == "conference") {
+						if ($debug) Debug.write("############## start broadcasting ");
+						parent.setBroadCastingFlag.publicSIDOfNewModerator = canvas.publicSID;
+						parent.setBroadCastingFlag.canVideo = !canvas.currentRoomObj.isAudioOnly;
+						parent.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+						parent.setBroadCastingFlag.doCall();
+					}
+                    canvas._drawarea.onopenWhiteBoard.sendEvent();
+                    
+                    if ($debug) Debug.write("room ",canvas.currentRoomObject);
+                    if ($debug) Debug.write("roomType_id ",canvas.currentRoomObject.roomtype.roomtypes_id);
+                    
+                    if (canvas.currentRoomObject.roomtype.roomtypes_id != 3) {
+                        //We do not show this warning when the roomtype is 3 (restricted)
+                        if (canvas.currentRoomObj.isModeratedRoom) {
+                            if (value.length == 0 && !messageAlreadyThrown){
+                                new lz.labelerrorPopup(canvas,{errorlabelid:641});
+                            }
+                        } else {
+                            if (value.length == 0 && !messageAlreadyThrown){
+                                new lz.errorModeratorPopup(canvas,{error:canvas.getLabelName(498)});
+                            }
+                        }
+                    }
+                ]]>
+            </handler>
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="newStream" funcname="newStream">
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("newStream: ",value);
+                if (value == null || value.isScreenClient) {
+                    return;
+                }
+                canvas._videocontainer.startStream(value.publicSID,value.broadCastID,value.firstname,value.lastname,value.interviewPodId,value.VWidth,value.VHeight); 
+            </handler>   
+        </netRemoteCallHib> 
+           
+        <netRemoteCallHib name="closeStream" funcname="closeStream">
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("**** closeStream: ",value);
+                if (value == null) {
+                	return;
+                }
+                if (value.isScreenClient) {
+                    if ($debug) Debug.write(" ondata closeStream: ",value.streamPublishName); 
+                    canvas.currentBaseConferenceRoom._screenSharingAdapter.closeScreenSharing(value);
+                } else {
+                    //free the VideoContainer
+                    //canvas._videocontainer.closeStreamClient(value.publicSID);
+                    canvas.sendViaLocalConnection(canvas.vid_lc_name, "closeStreamClient", [value.publicSID]);
+                    canvas.setAttribute('numberofpartners',canvas.numberofpartners-1);
+                }
+                //TODO:check first current tab
+            </handler>   
+        </netRemoteCallHib>  
+        
+        <!---
+            Event is invoked if a red5 stream sharing is closed
+         -->
+        <netRemoteCallHib name="stopScreenSharingMessage" funcname="stopScreenSharingMessage">
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("**** closeStream: ",value);
+                if ($debug) Debug.write(" onResult stopScreenSharingMessage : ",value.streamPublishName); 
+                canvas.currentBaseConferenceRoom._screenSharingAdapter.closeScreenSharing(value);
+            </handler>   
+        </netRemoteCallHib> 
+             
+        <netRemoteCallHib name="clientregisterRoom" funcname="clientregisterRoom">
+            <handler name="ondata" args="value">
+                if ($debug) Debug.write("**** clientregisterRoom::ondata ", value);
+            </handler>   
+        </netRemoteCallHib>   
+
+		<method name="roomDisconnectUser" args="value,id">
+			if (canvas._videocontainer!=null){
+				canvas._videocontainer.disconnectclient(id);
+				if (canvas.currentModApply!=null) canvas.currentModApply.rejectUser(value);
+				if (value.isRecording) {
+					canvas._mymod.recordingUser = null;
+				}
+				if (value.streamPublishStarted) {
+					canvas._mymod.publishingObj = null;
+				}
+				canvas._mymod.setMessage();
+			}
+		</method>
+		
+        <netRemoteCallHib name="roomDisconnect" funcname="roomDisconnect">
+            <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("roomDisconnect: ",value);
+                if (value == null || value.isScreenClient) {
+                    return;
+                }
+                if (canvas.currentBaseConferenceRoom != null && canvas.currentBaseConferenceRoom._chatPanelStrict != null) {
+	                if ($debug) Debug.write("canvas.currentBaseConferenceRoom._chatPanelStrict: ", canvas.currentBaseConferenceRoom._chatPanelStrict);
+                	canvas.currentBaseConferenceRoom._chatPanelStrict.closeprivatechat(["close", value.publicSID]);
+                }
+                if (canvas.currentActivityList != null) {
+                    canvas.currentActivityList.addMessageRequest(value, canvas.getLabelName(1367), new Date().getTime());
+                }
+                parent.roomDisconnectUser(value, value.publicSID);
+            ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="stopRecordingMessage" funcname="stopRecordingMessage">
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+                canvas._mymod.recordingUser = null;
+                canvas._mymod.setMessage();                 
+            </handler>   
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="stopPublishingMessage" funcname="stopPublishingMessage">
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+				canvas._mymod.publishingObj = null;
+                canvas._mymod.setMessage();                 
+            </handler>   
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="setSyncFlag" funcname="setSyncFlag" >      
+            <handler name="ondata" args="value">
+                if ($debug) Debug.write("setSyncFlag: ",value);
+            </handler>
+        </netRemoteCallHib>   
+             
+        <netRemoteCallHib name="logicalRoomLeaveDis" funcname="logicalRoomLeaveDis" >      
+            <handler name="ondata" args="value">
+                if ($debug) Debug.write("logicalRoomLeaveDis: ",value);
+                parent.roomDisconnectUser(value, value.broadCastID);
+            </handler>
+        </netRemoteCallHib>             
+  
+        <method name="setUserStatus" args="ctx,user,o">
+            <![CDATA[
+				if (!o || !user) return;
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) {
+                    Debug.write("setUserStatus: ", user);
+                    Debug.write("setUserStatus: ", o.param);
+                }
+                var aObj = o.param[3];
+                var usPoint = null;
+                if ($debug) Debug.write("drawObj: ", aObj[0]);
+                switch(aObj[0]) {
+                    case 'line':
+                    case 'uline':
+                        usPoint = {x: aObj[aObj.length - 5] + aObj[6], y: aObj[aObj.length - 4] + aObj[7]};
+                        break;
+                    case 'letter':
+                    case 'rectangle':
+                    case 'ellipse':
+                    case 'clipart':
+                        usPoint = {x: aObj[aObj.length - 3] + aObj[aObj.length - 5], y: aObj[aObj.length - 2] + aObj[aObj.length - 4]};
+                        break;
+                    case 'paint':
+                        var points = aObj[1];
+                        //points are empty on 'paint' move
+                        usPoint = {
+                            x: aObj[aObj.length - 5] + (points.length ? points[points.length - 1][3] : aObj[aObj.length - 3])
+                            , y: aObj[aObj.length - 4] + (points.length ? points[points.length - 1][4] : aObj[aObj.length - 2])};
+                        break;
+                    case 'drawarrow':
+                        usPoint = {x: aObj[aObj.length - 5] + aObj[9], y: aObj[aObj.length - 4] + aObj[10]};
+                        break;
+                    case 'clipart':
+                        break;
+                }
+                if (usPoint) {
+                    var us = new lz.userStatus(ctx, {
+                        width:100
+                        , x: usPoint.x
+                        , y: usPoint.y - 25 //little above
+                        , queueable: false
+                        , statusText: user.firstname + " " + user.lastname
+                        });
+                    if ($debug) Debug.write("us: ", us, "; usPoint: ", usPoint);
+                }
+            ]]>
+        </method>
+
+        <netRemoteCallHib name="sendVarsToWhiteboard" funcname="sendVarsToWhiteboard">
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write("sendVarsToWhiteboard : ",value);
+            parent.setUserStatus(canvas._drawarea, value[0], value[1]);
+            canvas._drawarea.sendWatchObject(canvas._drawarea,value[1][2],value[1][3],false);
+                ]]>
+            </handler>   
+        </netRemoteCallHib>  
+        
+         <netRemoteCallHib name="sendVarsToWhiteboardById" funcname="sendVarsToWhiteboardById">
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("sendVarsToWhiteboardById : ",value);
+            parent.setUserStatus(canvas._drawarea, value[0], value[1]);
+            canvas._drawarea.parent.parent.parent.sendWatchObjectByWhiteboard(value[1]);
+                ]]>
+            </handler>   
+        </netRemoteCallHib> 
+        
+        <netRemoteCallHib name="loadWmlToWhiteboardById" funcname="loadWmlToWhiteboardById">
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write("sendVarsToWhiteboardById : ",value);
+                    canvas._drawarea.parent.parent.parent.loadWmlToWhiteboardById(value);
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <!--
+            Adds this User to the List of current Moderators
+         -->
+        <netRemoteCallHib name="addModerator" funcname="addModerator">
+            <attribute name="publicSIDOfNewModerator" value="0" type="string" />
+            <netparam name="vars"><method name="getValue">return parent.publicSIDOfNewModerator;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write(" addModerator : ",value);                   
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="removeModerator" funcname="removeModerator">
+            <attribute name="publicSIDOfNewModerator" value="0" type="string" />
+            <netparam name="vars"><method name="getValue">return parent.publicSIDOfNewModerator;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                //Debug.write(" onResult setModerator : ",value);                   
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <!--
+        public synchronized Long setBroadCastingFlag(String publicSID, boolean value, boolean canVideo, Integer podId) 
+         -->
+        <netRemoteCallHib name="setBroadCastingFlag" funcname="setBroadCastingFlag">
+            <attribute name="publicSIDOfNewModerator" value="0" type="string" />
+            <attribute name="isAllowedToBroadCastAV" value="false" type="boolean" />
+            <attribute name="canVideo" value="false" type="boolean" />
+            <attribute name="avsettings" value="av" type="string" />
+            <attribute name="interviewPodId" value="0" type="number" />
+            <netparam><method name="getValue">return parent.publicSIDOfNewModerator;</method></netparam>
+            <netparam><method name="getValue">return parent.isAllowedToBroadCastAV;</method></netparam>
+            <netparam><method name="getValue">return parent.canVideo;</method></netparam>
+            <netparam><method name="getValue">return parent.interviewPodId;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                //Debug.write(" onResult setModerator : ",value);                   
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="setNewBroadCastingFlag" funcname="setNewBroadCastingFlag">
+            <netparam><method name="getValue">return null;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write(" onResult setNewBroadCastingFlag : ",value);
+                    canvas._videocontainer._participants.getUserListItemByPublicSID(value.publicSID).setAttribute("refObj", value);   
+                    if (canvas.publicSID == value.publicSID) {
+						canvas.sendViaLocalConnection(canvas.vid_lc_name, "toggleVideo", [value.canVideo]);
+                        canvas.setAttribute("isBroadCasting", value.isBroadcasting);
+                        canvas.setAttribute("canVideo", value.canVideo);
+                        
+                        if ($debug) Debug.write("Its about You ", value);
+                        if (value.isBroadcasting) {
+                            if (canvas.thishib.modus == "interview") {
+                               canvas._drawarea.newInterviewStarting(value);
+                            } else {
+                            	canvas._videocontainer._videoviewcontent.showDevicePopUp(false);
+                            }
+                        }
+                    } 
+                    canvas.setAttribute("lastBroadCastingUser",value);
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+
+        <netRemoteCallHib name="giveExclusiveAudio" funcname="giveExclusiveAudio">
+            <attribute name="publicSID" value="0" type="string" />
+            <netparam><method name="getValue">return parent.publicSID;</method></netparam>
+            <method name="setExclusiveAudio" args="tPublicSID">
+                this.publicSID = tPublicSID;
+                this.doCall();
+            </method>
+        </netRemoteCallHib>
+
+        <netRemoteCallHib name="receiveExclusiveAudioFlag" funcname="receiveExclusiveAudioFlag">
+            <netparam><method name="getValue">return null;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    canvas._videocontainer.receiveExclusiveAudioFlag(value.publicSID)
+                ]]>
+            </handler>
+        </netRemoteCallHib>
+
+        <netRemoteCallHib name="switchMicMuted" funcname="switchMicMuted">
+            <attribute name="publicSID" value="" type="string" />
+            <attribute name="mute" value="false" type="boolean" />
+            <event name="onMute" />
+            <method name="setMute" args="tPublicSID,tMute">
+                this.publicSID = tPublicSID;
+                this.mute = tMute;
+                var obj = new Array();
+                obj["mute"] = tMute;
+                obj["publicSID"] = tPublicSID;
+                this.onMute.sendEvent(obj);
+                this.doCall();
+            </method>
+            <netparam><method name="getValue">return parent.publicSID;</method></netparam>
+            <netparam><method name="getValue">return parent.mute;</method></netparam>
+        </netRemoteCallHib>
+
+        <netRemoteCallHib name="newRed5ScreenCursor" funcname="newRed5ScreenCursor">
+            <netparam><method name="getValue">return null;</method></netparam>
+			<handler name="ondata" args="value">
+			<![CDATA[
+				//The onResult-Handler will be called be the rtmpconnection
+				//if ($debug) Debug.write(" onResult newRed5ScreenCursor : ",value);
+				if (canvas.currentBaseConferenceRoom._screenSharingAdapter != null) {
+					canvas.currentBaseConferenceRoom._screenSharingAdapter.updateCursorScreenSharing(value);
+				}
+			]]>
+			</handler>   
+        </netRemoteCallHib>
+        
+        
+        <!--
+            Red5 Screen Sharing
+         -->
+        <netRemoteCallHib name="newScreenSharing" funcname="newScreenSharing">
+            <netparam><method name="getValue">return null;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                
+                    //The onResult-Handler will be called be the rtmpconnection
+                    //if ($debug) Debug.write(" onResult newScreenSharing 1 : ",value);  
+                    //if ($debug) Debug.write(" onResult newScreenSharing 2 : ",value.streamid); 
+                    //if ($debug) Debug.write(" onResult newScreenSharing 3 : ",canvas.streamid); 
+                    if ($debug) Debug.write(" onResult newScreenSharing 4 : ",value.streamPublishName); 
+                    if ($debug) Debug.write(" onResult newcreenSharing 5 : ",canvas.publicSID); 
+                    
+                    canvas.currentBaseConferenceRoom._screenSharingAdapter.newScreenSharing(value,canvas.currentBaseConferenceRoom._chatPanelStrict.height);
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="checkScreenSharing" funcname="checkScreenSharing">
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write(" onResult checkScreenSharing : ",value);  
+                    if (value != null) {
+                    	canvas.currentBaseConferenceRoom._screenSharingAdapter.newScreenSharings(value,canvas.currentBaseConferenceRoom._chatPanelStrict.height);
+                    } else {
+                        if ($debug) Debug.warn("Self Screen Sharing");
+                    }
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <!--
+        public synchronized Long applyForModeration(String publicSID)
+         -->
+        <netRemoteCallHib name="applyForModeration" funcname="applyForModeration"
+                       remotecontext="$once{ canvas.thishib }">
+            <netparam><method name="getValue">return canvas.publicSID;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write("applyForModeration : ",value);
+                    if (value == 1) {
+                        //Do add direct
+                        parent.addModerator.publicSIDOfNewModerator = canvas.publicSID;
+                        parent.addModerator.doCall();
+                    } else if (value == 2) {
+                        //Ask the Moderator
+                        var tDate = new Date();
+                        parent.sendMessageWithClient.sendMessage("applyForModeration",tDate.getTime());
+                    } else if (value == 3) {
+                        new lz.labelerrorPopup(canvas,{errorlabelid:696});
+                    }
+                ]]>
+            </handler>
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="setCanDraw" funcname="whiteboardservice.setCanDraw"
+                       remotecontext="$once{ canvas.thishib }">
+            <attribute name="publicSID" value="" type="string" />
+            <attribute name="canDraw" value="true" type="boolean" />
+            <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+            <netparam><method name="getValue">return parent.publicSID;</method></netparam>
+            <netparam><method name="getValue">return parent.canDraw;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write("setCanDraw : ",value);
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="setCanShare" funcname="whiteboardservice.setCanShare"
+                       remotecontext="$once{ canvas.thishib }">
+            <attribute name="publicSID" value="" type="string" />
+            <attribute name="canShare" value="true" type="boolean" />
+            <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+            <netparam><method name="getValue">return parent.publicSID;</method></netparam>
+            <netparam><method name="getValue">return parent.canShare;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write("setCanShare : ",value);
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="setCanRemote" funcname="whiteboardservice.setCanRemote"
+                       remotecontext="$once{ canvas.thishib }">
+            <attribute name="publicSID" value="" type="string" />
+            <attribute name="canRemote" value="true" type="boolean" />
+            <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+            <netparam><method name="getValue">return parent.publicSID;</method></netparam>
+            <netparam><method name="getValue">return parent.canRemote;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write("setCanRemote : ",value);
+                ]]>
+            </handler>   
+        </netRemoteCallHib>
+        
+        <netRemoteCallHib name="setNewModeratorByList" funcname="setNewModeratorByList">
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    if ($debug) Debug.write("setNewModeratorByList ",value);
+                    
+                    canvas.analyzeModerationList(value);
+                    
+                    //The onResult-Handler will be called be the rtmpconnection
+                    canvas.currentModeratorList = value;
+                    //Update Moderation Flag
+                    canvas.updateModerationFlag();
+                ]]>
+            </handler>   
+        </netRemoteCallHib> 
+        
+        <netRemoteCallHib name="sendMessage" funcname="sendMessage">
+            <netparam name="vars"><method name="getValue">return canvas.objMessage;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                //Debug.write("getValue : ",value);
+                
+                ]]>
+            </handler>   
+        </netRemoteCallHib> 
+        
+        <netRemoteCallHib name="sendMessageAll" funcname="sendMessageAll">
+            <netparam name="vars"><method name="getValue">return canvas.objMessage;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                //Debug.write("getValue : ",value);
+                ]]>
+            </handler>   
+        </netRemoteCallHib> 
+        
+        <netRemoteCallHib name="sendVarsToMessage" funcname="sendVarsToMessage">
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    //Debug.write("sendVarsToMessage : ",value);
+                    if (value[0]=='audioActivity'){
+                        //canvas.currentModApply
+                        //if ($debug) Debug.write("audioActivity Client ",value[1],value[2]);
+                        canvas._videocontainer.setSpeakingByPos(value[2],value[1]);
+                    } else if (value[0]=='typingActivity'){
+                        if ($debug) Debug.write("!!!typingActivity ::", value[1], canvas._videocontainer._participants.getUserListItemByPublicSID(value[2]));
+                        canvas._videocontainer._participants.getUserListItemByPublicSID(value[2]).userTyping(value[1]);
+                    } else if (value[0]=='chat'){
+                        // Not Used
+                        //Debug.warn("Not Used");
+                        canvas.addChatHistory(value);
+                    } else if (value[0]=='activateWhiteboard'){
+                        // Not Used
+                        //Debug.warn("Not Used");
+                        canvas._drawarea.parent.parent.parent.activateWhiteboard(value);
+                    } else if (value[0]=='newWhiteboard'){
+                        // Not Used
+                        //Debug.warn("Not Used");
+                        canvas._drawarea.parent.parent.parent.newWhiteboard(value);
+                    } else if (value[0]=='removeWindow'){
+                        // Not Used
+                        //Debug.warn("Not Used");
+                        canvas._drawarea.parent.parent.parent.removeWindow(value);
+                    } else if(value[0]=='fileslist'){
+                        canvas.currentImagesListdraw.parent.onvisible.sendEvent(true);
+                    } else if(value[0]=='initBrowser'){
+                        canvas.startBrowser(value);
+                    } else if(value[0]=='newBrowserURL'){
+                        canvas.startBrowser(value);
+                    } else if(value[0]=='closeBrowserURL'){
+                        canvas.closeBrowser(value);
+                    }
+                    
+                ]]>
+            </handler>   
+        </netRemoteCallHib>   
+        <netRemoteCallHib name="sendVarsModeratorGeneral" funcname="sendVarsModeratorGeneral">
+            <netparam name="vars"><method name="getValue">return canvas.VarsModeratorGeneral;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                //Debug.write("sendVarsModeratorGeneral : ",value);
+                
+                ]]>
+            </handler>   
+        </netRemoteCallHib>  
+
+		<netRemoteCallHib name="sendChatMessageWithClient"
+			funcname="chatservice.sendMessageWithClient" remotecontext="$once{ canvas.thishib }">
+            <attribute name="messageObj" value="null" />
+			<netparam><method name="getValue">return parent.messageObj;</method></netparam>
+
+            <method name="sendMessage" args="messageObject">
+                this.messageObj = messageObject;
+                this.doCall();
+            </method>
+			<handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write("chatservice.sendMessageWithClient getValue : ",value);
+                ]]>
+			</handler>
+		</netRemoteCallHib>
+		
+        <netRemoteCallHib name="sendMessageWithClient" funcname="sendMessageWithClient" 
+                          remotecontext="$once{ canvas.thishib }" >  
+            
+            <attribute name="messageObj" value="null" />
+            <method name="sendMessage" args="typeName,messageObject">
+                this.messageObj = new Object();
+                this.messageObj[0] = typeName;
+                this.messageObj[1] = messageObject;
+                this.doCall();
+            </method>
+            
+            <method name="sendAdvMessage" args="typeName,messageObject,tStamp">
+                this.messageObj = new Object();
+                this.messageObj[0] = typeName;
+                this.messageObj[1] = messageObject;
+                this.messageObj[2] = tStamp;
+                this.doCall();
+            </method>
+            
+            <netparam name="vars"><method name="getValue">return parent.messageObj;</method></netparam>
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+                //Debug.write("sendMessageWithClient : ",value);
+            </handler>
+        </netRemoteCallHib>
+          
+        <netRemoteCallHib name="sendVarsToMessageWithClient" funcname="sendVarsToMessageWithClient" 
+                          remotecontext="$once{ canvas.thishib }" >  
+            <netparam name="vars"><method name="getValue">return parent.parent.applymessage;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("sendVarsToMessageWithClient : ",value,value.message,value.message[0]);
+                if (value[0]=='kick' || value.message[0]=='kick'){
+                    //canvas.currentModApply
+                    if ($debug) Debug.write("!!!!!! THIS USER GOING TO BE KICKED");
+                    parent.showKickMessage = true;
+                    parent.disconnect();
+                    canvas.sendViaLocalConnection(canvas.vid_lc_name, "immediateExitRoom", [true,null]);
+                } else if (value.message[0]=='copiedText'){
+                    //canvas.currentModApply
+                    
+                    if ($debug) Debug.info("copiedText :: ",value.message[1]);
+                    //System.setClipboard(value.message[1]);
+                    //lz.Browser.setClipboard(value.message[1]);
+                    //LzBrowserKernel.setClipboard (value.message[1]);
+                    
+                    //import flash.System;
+                    //flash.System.setClipboard(value.message[1]);
+                    
+                    new lz.copiedTextPopup(canvas,{
+                                       error:value.message[1]
+                                    });
+                    
+                } else if (value.message[0]=='applyforMod'){
+                    //canvas.currentModApply
+                    if (canvas.streamid!=value.client.streamid) {
+                        new lz.responseForModeration(canvas.main_content._content.inner,{
+                                                                userobject:value.client,
+                                                                clientId:value.client.streamid
+                                                            });
+                    }
+                } else if (value.message[0]=='applyModAnswer'){
+                    canvas.currentModApply.setUserAnswer(value);
+                } else if (value.message[0]=='privatechat'){
+                    if ($debug) Debug.write("privatechat",value.message,value.client);
+                    canvas._currentChatPanel.privatechat(value.message,value.client);
+                } else if (value.message[0]=='chat'){
+                    if (canvas._chatcontent) canvas._chatcontent.addChatHistory(value.message,value.client);
+                } else if (value.message[0]=='avsettings'){
+                    canvas._videocontainer.setAVSettingsToClient(value.client);
+                } else if (value.message[0]=='whiteboard'){
+                    //if (value.message[1]=='wmlloadcomplete'){
+                    //    canvas._drawarea.sendCompleteWmlLoadedRClient(value.client);
+                    //} else if (value.message[1]=='wmlsynccomplete'){
+                    //    canvas._drawarea.sendCompleteWmlSync(value.client);
+                    //} else 
+                    
+                    if (value.message[1]=='imageloadcomplete'){
+                        canvas._drawarea.sendCompleteImageLoadedRClient(value.client);
+                    } else if (value.message[1]=='imagesynccomplete'){
+                        canvas._drawarea.sendCompleteImageSync(value.client);
+                    } else if (value.message[1]=='imageloaderror'){
+                        canvas._drawarea.sendCompleteImageLoadedRClient(value.client);
+                    } else if (value.message[1]=='imageloadtimeout'){
+                        canvas._drawarea.sendCompleteImageLoadedRClient(value.client);
+                    } else if (value.message[1]=='swfloadcomplete'){
+                        canvas._drawarea.sendCompleteSWFLoadedRClient(value.client);
+                    } else if (value.message[1]=='swfsynccomplete'){
+                        canvas._drawarea.sendCompleteSWFSync(value.client);
+                    } else if (value.message[1]=='swfloaderror'){
+                        canvas._drawarea.sendCompleteSWFLoadedRClient(value.client);
+                    } else if (value.message[1]=='swfloadtimeout'){
+                        canvas._drawarea.sendCompleteSWFLoadedRClient(value.client);
+                    } else if (value.message[1]=='inituser'){
+                        
+                        //this message is deprecated and can be removed!
+                        //swagner 12.06.2008
+                        //canvas._drawarea.sendCompleteImageSync(value.client);
+                        if ($debug) Debug.write("inituser loadwmlObjectToStage: ",value.message[2]);
+                        if (!canvas.ismoderator) canvas._drawarea.loadwmlObjectToStage(value.message[2],"","","",true,true);
+                    } else if (value.message[1]=='initgetVars'){
+                        //canvas._drawarea.sendCompleteImageSync(value.client);
+                        //Debug.write("initgetVars sendVarsToMessageWithClient: ",value.message[2]);
+                        canvas._drawarea.sendWatchObject(value.message[1],value.message[2],false);
+                    } else if (value.message[1]=='syncinitLoader'){
+                        //canvas._drawarea.sendCompleteImageSync(value.client);
+                        //Debug.write("syncinitLoader sendVarsToMessageWithClient: ",value.message[2]);
+                        if (value.client.streamid!=canvas.streamid) canvas._drawarea.remoteSyncLoader();
+                    } else if (value.message[1][0]=='isSnapToGrid'){
+                        canvas._drawarea.setAttribute('isSnapToGrid', value.message[1][1]);
+                        //Debug.write("syncinitLoader sendVarsToMessageWithClient: ",value.message[2]);
+                        //if (value.client.streamid!=canvas.streamid) canvas._drawarea.remoteSyncLoader();
+                    }
+                } else if (value.message[0]=='updateMuteStatus'){
+                    canvas.setMuteStatus(value.message[1]);
+                } else if (value.message[0]=='updateDrawStatus'){
+                    canvas.setDrawAllowStatus(value.message[1]);
+                    //Notify all Listeners for change of the item
+                    canvas.setAttribute("drawAllowStatus",value.message[1]);
+                } else if (value.message[0]=='updateGiveAudioStatus') {
+                    canvas.setExclusiveAudioAllowStatus(value.message[1]);
+                    canvas.setAttribute("exclusiveAudioAllowStatus",value.message[1]);                    
+                } else if (value.message[0]=='applyForModeration'){
+                    if ($debug) Debug.write("Somebody wants the Moderation ",value.client);
+                    canvas.currentActivityList.addModerationRequest(value.client,value.message[1]);
+                } else if (value.message[0]=='applyForScreen'){
+                   if ($debug) Debug.write("Somebody wants to share/record Screen ",value.client);
+                    canvas.currentActivityList.addScreenRequest(value.client,value.message[1]);
+                } else if (value.message[0]=='applyForRemote'){
+                    if ($debug) Debug.write("Somebody wants to remote control screen ",value.client);
+                    canvas.currentActivityList.addRemoteRequest(value.client,value.message[1]);
+                } else if (value.message[0]=='applyForWhiteboard'){
+                    if ($debug) Debug.write("Somebody wants to draw on Whiteboard ",value.client);
+                    canvas.currentActivityList.addWhiteboardRequest(value.client,value.message[1]);
+                } else if (value.message[0]=='applyForA'){
+                    if ($debug) Debug.write("Somebody wants to share A ",value.client);
+                    canvas.currentActivityList.addAudioRequest(value.client,value.message[1]);
+                } else if (value.message[0]=='applyForAV'){
+                    if ($debug) Debug.write("Somebody wants to share AV ",value.client);
+                    canvas.currentActivityList.addAudioAndVideoRequest(value.client,value.message[1]);
+                } else if (value.message[0]=='hideActivityObj'){
+                    if ($debug) Debug.write("Somebody wants to hideActivityObj ",value.client);
+                    canvas.currentActivityList.hideActivityObj(value);
+                } else if (value.message[0]=='applyForMuteOn'){
+                    canvas.currentActivityList.applyForMuteOn(value.client,value.message[1]);
+                } else if (value.message[0]=='applyForMuteOff'){
+                    canvas.currentActivityList.applyForMuteOff(value.client,value.message[1]);
+                } else if (value.message[0]=='applyForGiveExclusiveAudioOn'){
+                    canvas.currentActivityList.applyForGiveExclusiveAudioOn(value.client,value.message[1]);
+                } else if (value.message[0] == 'personal') {
+                	var pSID = value.client.publicSID;
+                    var vo = canvas._videocontainer._participants.getUserListItemByPublicSID(pSID);
+                    if (vo != null) {
+                    	vo.setAttribute('lastname', value.message[2]);
+                    	vo.refObj.lastname = value.message[2];
+                    }
+					canvas.sendViaLocalConnection(canvas.vid_lc_name, "updateFirstLastName", [pSID, value.message[1], value.message[2]]);
+                } else {
+                    if ($debug) Debug.warn("sendVarsToMessageWithClient unkown message ",value);
+                }
+                ]]>
+            </handler>   
+        </netRemoteCallHib>     
+    
+        <netRemoteCallHib name="newMessageByRoomAndDomain" funcname="newMessageByRoomAndDomain">
+            <handler name="ondata" args="value">
+                //The onResult-Handler will be called be the rtmpconnection
+                //if ($debug) Debug.write("newMessageByRoomAndDomain: ",value);    
+                <![CDATA[
+                    if (value[0]=='closeprivatechat'){
+                        if ($debug) Debug.write("closeprivatechat",value);
+                        canvas._currentChatPanel.closeprivatechat(value);
+                    } else if (value[0]=='newprivatechat'){
+	                    if ($debug) Debug.write("newprivatechat",value);
+	                    canvas._currentChatPanel.newprivatechat(value);
+	                } else if (value.message=='desktop'){
+                        canvas._drawarea.incomingScreenSharing(value);
+                    } else if (value.message=='library'){
+                        
+                        if (value.action == 'import') {
+                            canvas.currentUploadWindow.myFileUpload.onCompleteByRemote(value);
+                            return;
+                        }
+                        
+                        var error = false;
+                        for (var eg in value.error){
+                            if (value.error[eg].exitValue!=0){
+	                            if ($debug) Debug.write("eg ",eg," value ",value.error[eg]);
+	                            if ($debug) Debug.write("eg ",eg," value ",value.error[eg].exitValue);
+                                error = true;
+                            }
+                        }
+                        canvas.currentUploadWindow.myFileUpload.onCompleteByRemote(value);
+                        if (value.hasError) {
+                            new lz.converterPopup(canvas.main_content._content.inner,{error:value.error});
+                        }
+                    } else if (value.message=='startStreaming'){
+                        canvas._drawarea.startStreaming(value);
+                    } else if (value.message=='stopStreaming'){
+                        canvas._drawarea.stopStreaming(value);
+                    } else if (value.message=='roomClosed'){
+                        canvas.roomClosed();
+                    } else if (value.message=='inviteToRoom'){
+                        if ($debug) Debug.write("Incoming Room Invitation ",value);
+                        new lz.chatParticipantsInviteNotification(canvas,{
+                                    publicSID:value.publicSID,
+                                    usermessage:value.usermessage,
+                                    roomId:value.roomId
+                                });
+                    } else if (value.message=='inviteToRoomAnswer'){
+                        if ($debug) Debug.write("Incoming Room inviteToRoomAnswer ",value);
+                        new lz.errorPopup(canvas,{
+                                    error:value.usermessage
+                                });
+                    } else {
+                        if ($debug) Debug.warn("Unknown Event -newMessageByRoomAndDomain- ",value);
+                    }
+                    
+                    
+                ]]>    
+            </handler>  
+        </netRemoteCallHib>      
+               
+		<netRemoteCallHib name="newPoll" funcname="newPoll">
+			<handler name="ondata" args="value">
+			<![CDATA[
+				//The onResult-Handler will be called by the rtmpconnection
+				if ($debug) Debug.write("newPoll : ", value);
+				if (canvas.user_id != value.createdBy.user_id) {
+					flash.external.ExternalInterface.call("vote", canvas.publicSID);
+				}
+			]]>
+			</handler>
+		</netRemoteCallHib>                    
+                                
+        <netRemoteCallHib name="sendVarsToModeratorGeneral" funcname="sendVarsToModeratorGeneral">
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                //Debug.write("sendVarsToWhiteboard : ",value);
+                if (value[0]=='sharewhiteinit'){
+                    if (!canvas.htmlframeisloaded){         
+                        canvas.ifrm.createIFrame();
+                        canvas.setAttribute('htmlframeisloaded',true);
+                    }
+                } else if (value[0]=='sharewhiteside'){
+                    if (canvas.htmlframeisloaded){      
+                        _htmlside.setAttribute('text',value[2]);
+                        canvas.ifrm.setAttribute('isrc','http://'+value[2]);
+                    }
+                }
+                ]]>
+            </handler>   
+        </netRemoteCallHib>       
+        
+   <!-- recordContentings Notifications -->
+    <netRemoteCallHib name="stopedRecording" funcname="stopedRecording" >      
+        <handler name="ondata" args="value">
+            if ($debug) Debug.write("stopedRecording: ",value);
+            canvas._mymod.recordingUser = null;
+            canvas._mymod.setMessage();
+        </handler>
+    </netRemoteCallHib>
+    
+    <netRemoteCallHib name="startedRecording" funcname="startedRecording" >      
+        <handler name="ondata" args="value">
+            if ($debug) Debug.write("startedRecording: ",value);
+            canvas._mymod.recordingUser = value;
+            canvas._mymod.setMessage();
+        </handler>
+    </netRemoteCallHib>
+    
+    <netRemoteCallHib name="checkLzRecording" funcname="flvrecorderservice.checkLzRecording" >      
+        <handler name="ondata" args="value">
+            if ($debug) Debug.write("checkLzRecording: ",value);
+            if (value != null) {
+                canvas._mymod.recordingUser = value;
+                canvas._mymod.setMessage();
+            }
+            parent.checkScreenSharing.doCall();
+        </handler>
+    </netRemoteCallHib>
+    
+    <netRemoteCallHib name="startedPublishing" funcname="startedPublishing" >      
+        <handler name="ondata" args="value">
+            if ($debug) Debug.write("startedPublishing: ", value);
+            canvas._mymod.publishingObj = {user: value[0], url: value[1]};
+            canvas._mymod.setMessage();
+        </handler>
+    </netRemoteCallHib>
+    
+    <netRemoteCallHib name="roomConnect" funcname="roomConnect" >      
+        <handler name="ondata" args="value">
+            if ($debug) Debug.write("roomConnect: ",value);
+            canvas._videocontainer.addItem(value.connectedSince,value.isMod,value.streamid,value.username,
+                              '',value.formatedDate,value.userpos,value.usercolor,value);
+        </handler>
+    </netRemoteCallHib>
+    
+	<netRemoteCallHib name="nickNameSet" funcname="nickNameSet" >
+		<handler name="ondata" args="value">
+			if ($debug) Debug.write("nickNameSet: ", value);
+			canvas.setAttribute('mail', value.email);
+			canvas.setAttribute('firstName', value.firstname);
+			canvas.setAttribute('lastName', value.lastname);
+			
+			var vo = canvas._videocontainer._participants.getUserListItemByPublicSID(value.publicSID);
+			if (vo != null) {
+				vo.update(value);
+			}
+		</handler>
+	</netRemoteCallHib>
+    
+    <!-- Whiteboard sync Events -->
+    <netRemoteCallHib name="sendSyncFlag" funcname="sendSyncFlag">
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("sendSyncFlag: ",value);
+                if (canvas.syncWindow == null) {
+                    canvas.syncWindow = new lz.syncWin(canvas.main_content._content.inner,{
+                            labelid:558,labeliderror:559});
+                }
+            ]]>
+        </handler>   
+    </netRemoteCallHib>     
+    
+    <netRemoteCallHib name="sendSyncCompleteFlag" funcname="sendSyncCompleteFlag">
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("sendSyncCompleteFlag: ",value);
+                if (canvas.syncWindow != null) {
+                    canvas.syncWindow.close();
+                    canvas.syncWindow = null;
+                }
+            ]]>
+        </handler>   
+    </netRemoteCallHib>  
+    
+    <!-- Whiteboard Object Sync Process -->
+    <netRemoteCallHib name="sendObjectSyncFlag" funcname="sendObjectSyncFlag">
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("sendObjectSyncFlag: ",value);
+                if (canvas.syncImageWindow == null) {
+                    canvas.syncImageWindow = new lz.syncWin(canvas.main_content._content.inner,{labeliderror:591});
+                }
+            ]]>
+        </handler>   
+    </netRemoteCallHib>     
+    
+    <netRemoteCallHib name="sendObjectSyncCompleteFlag" funcname="sendObjectSyncCompleteFlag">
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("sendObjectSyncCompleteFlag: ",value);
+                if (canvas.syncImageWindow != null) {
+                    canvas.syncImageWindow.close();
+                    canvas.syncImageWindow = null;
+                }
+            ]]>
+        </handler>   
+    </netRemoteCallHib>  
+    
+    
+    <!-- Recording of Meetings -->
+    <netRemoteCallHib name="interviewStatus" funcname="interviewStatus">
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("interviewStatus: ",value);
+                canvas._drawarea.reloadStatus();
+            ]]>
+        </handler>   
+    </netRemoteCallHib>  
+    
+    <netRemoteCallHib name="closeRoom" funcname="xmlcrm.closeRoom">
+        <attribute name="room_id" value="0" type="number" />
+        <attribute name="isClosed" value="true" type="boolean" />
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.room_id;</method></netparam>
+        <netparam><method name="getValue">return parent.isClosed;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("closeRoom: ",value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+    
+    <netRemoteCallHib name="clearChatContent" funcname="clearChatContent">
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                canvas._chatcontent.reload();
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+    
+    <netRemoteCallHib name="setCanGiveAudio" funcname="whiteboardservice.setCanGiveAudio"
+                   remotecontext="$once{ canvas.thishib }">
+        <attribute name="publicSID" value="" type="string" />
+        <attribute name="canGiveAudio" value="true" type="boolean" />
+        <method name="sendValue" args="publicSID,giveAudio">
+        	this.publicSID = publicSID;
+        	this.canGiveAudio = giveAudio;
+        	this.doCall();
+        </method>
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.publicSID;</method></netparam>
+        <netparam><method name="getValue">return parent.canGiveAudio;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("setCanGiveAudio : ",value);
+            ]]>
+        </handler>
+    </netRemoteCallHib>
+    
+    
+</class>
+
+<hibRtmpConnection name="thishib" id="hib" />
+
+</library>
diff --git a/WebContent/src/base/hibernate/library.lzx b/WebContent/src/base/hibernate/library.lzx
new file mode 100644
index 0000000..d3bfbf1
--- /dev/null
+++ b/WebContent/src/base/hibernate/library.lzx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="netRemoteCallHib.lzx" />
+	<include href="hibRtmpConnection.lzx" />
+
+</library>
diff --git a/WebContent/src/base/hibernate/netRemoteCallHib.lzx b/WebContent/src/base/hibernate/netRemoteCallHib.lzx
new file mode 100644
index 0000000..cd13da1
--- /dev/null
+++ b/WebContent/src/base/hibernate/netRemoteCallHib.lzx
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="netRemoteCallHib" extends="netremotecall">
+
+	<!--- this should be the contentSaveWindow -->
+	<attribute name="returnObj" value="null" />
+	 
+	<!--- if true this object will register at the update-observer -->
+	<attribute name="registerObject" value="false" type="boolean" />
+	
+	<!--- show Error Messages with normal Box -->
+    <attribute name="activeErrorHandler" value="false" type="boolean" />	
+    
+	<!--- show Error Messages with normal Box -->
+    <attribute name="showLoading" value="true" type="boolean" />    
+	
+	<!--- show Error Messages with Callback Box -->
+	<attribute name="isCallBackHandler" value="false" type="boolean" />	
+	
+	<handler name="oninit">
+		if (this.registerObject) this.parent.addViewToObserver(this);
+	</handler>	
+	<method name="doCall">
+        if (this.showLoading) canvas._loadingAll.showLoading();
+		//if($debug) Debug.write("netRemoteCallHib/doCall: [ " , this.funcname , " ]",this.parent);
+		this.callRPC();
+	</method>
+	
+	<event name="sendCallBack" />
+	
+	<!---
+        @keywords private
+	 -->
+	<handler name="ondata" args="value">
+		<![CDATA[
+			//Debug.write("ondata: ",this.funcname,value);
+			
+			if (this.showLoading) canvas._loadingAll.hideLoading();
+			
+			//Another Error Handler for the Form-Components
+			if (this.returnObj!=null && Number(value)>0) {
+				//Debug.write("this.returnObj.processNext");
+				this.returnObj.processNext();
+			} else if (this.returnObj!=null && Number(value)<0) {
+				this.returnObj.errorByCode(Number(value));
+			} else if (this.returnObj!=null && value==null) {
+				this.returnObj.errorByCode(-1);
+			}
+			
+            if (this.activeErrorHandler) {
+                if (Number(value)<0){
+                    Debug.warn("Received Error ID: ",value);					
+					if (this.isCallBackHandler) 
+					{
+						var dlg = new lz.callbackRpcErrorDialog(canvas,{callBackObject:this,errorid:Number(value)});						
+						lz.Focus.setFocus(dlg);
+					} else {
+						var dlg = new lz.rpcErrorDialog(canvas,{errorid:Number(value)});
+						lz.Focus.setFocus(dlg);
+					}
+                }
+            }			
+		]]>
+	</handler>	
+</class>
+
+</library>
diff --git a/WebContent/src/base/library.lzx b/WebContent/src/base/library.lzx
new file mode 100644
index 0000000..5ce5d66
--- /dev/null
+++ b/WebContent/src/base/library.lzx
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="remote/" />
+    <include href="components/" /> 
+    <include href="hibernate/" />
+    <include href="contentviews/" />
+    <include href="navi/" />
+
+	<!-- for main.lzx -->
+	<include href="externalJavaScript.lzx" />
+    <include href="functions.lzx" />
+	<include href="mainAttributes.lzx" /> 
+	<include href="mainDatasets.lzx" /> 
+	<include href="mainMethods.lzx" /> 
+	<include href="logoutConfirm.lzx" />
+	
+	<!-- 
+	   Defines the Core Classes that gets loaded in the Main Navigation
+	 -->
+	<include href="moduleConfiguration.lzx" />
+
+
+</library>
diff --git a/WebContent/src/base/logoutConfirm.lzx b/WebContent/src/base/logoutConfirm.lzx
new file mode 100644
index 0000000..b1c18ab
--- /dev/null
+++ b/WebContent/src/base/logoutConfirm.lzx
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="logoutConfirm" extends="labelExplorerBox" labelid="633"
+    docking="true" resizeable="false" closable="false" width="270" x="${ canvas.width / 2 - 145 }" y="${ canvas.height / 2 - 120}" height="100">
+
+	<attribute name="objectsToClean" type="expression"/>
+	
+	<labelText fontstyle="bold" y="25" labelid="634" x="10" width="270" multiline="true" />
+	
+	<simpleLabelButton name="ok" x="20" y="70" labelid="54" width="120" height="20">
+		<handler name="onclick">
+			if (!clearStageContent())
+			{
+				canvas._mainbgcontentNavi.navi.destroy();
+				canvas._mainbgcontentNavi.help.destroy();
+				canvas.thishib.logoutUser.doCall();
+			}
+        
+            this.parent.close();                   
+			
+		</handler>
+	</simpleLabelButton>
+	<simpleLabelButton name="cancel" x="140" y="70" labelid="55" width="120" height="20">
+		<handler name="onclick">
+			this.parent.close();
+		</handler>
+	</simpleLabelButton>		
+</class>
+
+</library>
diff --git a/WebContent/src/base/mainAttributes.lzx b/WebContent/src/base/mainAttributes.lzx
new file mode 100644
index 0000000..0926bba
--- /dev/null
+++ b/WebContent/src/base/mainAttributes.lzx
@@ -0,0 +1,496 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<!-- all attributes for main.lzx -->
+
+<library>
+<!-- 
+##########################################################
+these properties will be overwritten by public/config.xml -->  
+
+<attribute name="vid_lc_name" value="" type="string"/>
+
+<attribute name="lc_SID" value="" type="string"/>
+
+<attribute name="lc"/>
+
+<attribute name="rtmp_lc_name" value="" type="string"/>
+
+<attribute name="rtmp_lc"/>
+
+<attribute name="videoComp_lc_name" value="" type="string"/>
+
+<attribute name="videoComp_lc_callback_name" value="" type="string"/>
+
+<attribute name="videoComp_lc"/>
+
+<!--- URL/IP to use for the Server 192.168.178.28
+    inno02.fh-pforzheim.de macbook 192.168.2.103
+    192.168.2.102 bxlug.homelinux.org 213.219.160.72
+        if this value is empty it will try to connect to the 
+    domain-name it has been loading from
+    -->
+<attribute name="rtmphostlocal" value="" type="string" />
+
+<!-- 
+	URL/IP to use for the Server for HTTP and HTTPS traffic.
+    If this value is empty it will use the rtmphostlocal 
+    variable (and in that way try to connect to the 
+    domain-name the OpenMeetings-Client has been loading from)
+ -->
+<attribute name="httphostlocal" value="" type="string" />
+ 
+<!---  
+    Port to use for the Server
+    To this port the default server lookup is done
+    
+    You can find all this configuraiton in your red5-Config in: $RED5_HOME/conf/red5.properties
+ -->
+<attribute name="rtmpport" value="1935" type="string" />
+
+<!--- 
+    Port to use for the Server
+    This port is used to connect to the HTTP-Servlet
+    of the Red5-Servlet
+ -->
+<attribute name="red5httpport" value="5080" type="string" />
+
+<attribute name="useSSL" value="false" type="boolean" />
+<attribute name="rtmpsslport" value="443" type="string" />
+
+<!---
+#############################################################
+    These colors are the main colors and style the hole application
+ -->
+<attribute name="basebgcolorizer" value="" type="string" /> 
+<attribute name="baseMousecolorizer" value="" type="string" />  
+<attribute name="baseMouseOvercolorizer" value="" type="string" />      
+<attribute name="styleMenuBarBaseColor" value="0xFFFFFF" type="string" />    
+
+<attribute name="fontColorHeader" value="0x000000" type="string" />
+<attribute name="bgColorMenuItems" value="0xEAEAEA" type="string" />
+
+<attribute name="webAppRootKey" value="" type="string" />
+
+<attribute name="httpRootKey" value="/" type="string" />
+
+<attribute name="protocol" value="http" type="string" />
+<attribute name="proxyType" value="none" type="string" />
+
+<attribute name="showAudioVideoTest" value="true" type="boolean" />
+
+<!-- 
+#############################################################
+Attributes needed for clustering -->
+
+<attribute name="isCluster" value="false" type="boolean" />
+
+<!--
+#############################################################
+    Id of the Recording that is played when access the Recordings Player via Direct Link URL
+ -->
+<attribute name="roomRecordingId" value="0" type="number" />
+
+<!--- Name of the Application -->
+<attribute name="currentappname" value="OpenMeetings" type="string" />   
+<attribute name="currentappnameurl" value="OpenMeetings" type="string" />   
+<attribute name="currentappnamebugurl" value="OpenMeetings" type="string" /> 
+
+<!--- Video Settings -->
+<attribute name="loudnessAcitviation" value="10" type="number" />
+<attribute name="showWindowEffect" value="y" type="string" /> 
+
+<!--- Calendar Settings -->
+<attribute name="firstdayinweek" value="1" type="number" />
+
+<attribute name="showmodernWhiteBoard" value="y" type="string" />
+
+<attribute name="showRecording" value="visible" type="string" />
+
+<attribute name="defaultWhiteboardWidth" value="2400" type="number" />
+<attribute name="defaultWhiteboardHeight" value="1200" type="number" />
+
+<!-- END OF public/config.xml attributes
+##########################################################
+ -->
+
+<attribute name="userHistory" value="null" />
+<attribute name="browserTabHistory" value="null" />
+
+<!-- this attribute holds an object of type RoomClient
+ the LAST RoomClient Object that has been changed the drawstatus
+ so ondrawAllowStatus = will trigger that the draw-status of ANYBODY has changed
+ and canvas.drawAllowStatus = is the RoomClient that has changed
+ and canvas.drawAllowStatus.canDraw = is the new Status of that RoomClient
+ -->
+
+<attribute name="drawAllowStatus" value="null"/>
+
+<!-- this attribute holds an object of type RoomClient
+the LAST RoomClient Object that has been changed the giveExclusiveAudio status
+-->
+<attribute name="exclusiveAudioAllowStatus" value="null"/>
+
+<!--
+    this value indicates if this user is allowed to draw to the Whiteboard
+    If this user is currently Moderator => he ALWAYS can draw to whiteboard
+    even if this isAllowedToDraw == false
+ -->
+<attribute name="isAllowedToDraw" value="false" type="boolean" />
+
+<!-- 
+    this attribute holds an object of type RoomClient
+    the LAST RoomClient Object that has been changed the mute-status
+ -->
+<attribute name="micMutedStatusChangedItem" value="null" />
+
+<!--
+    this value indicates if this user is currently muted
+ -->
+<attribute name="micMuted" value="false" type="boolean" />
+
+<!--- URL/IP to use for the Server -->
+<attribute name="rtmphost" value="" type="string" />
+
+<!--- Username/Nickname -->
+<attribute name="currentuser" value="" type="string" />
+
+<!--- Roomname internaly Scope -->
+<attribute name="currentcourse" value="" type="string" />
+
+<!--- Roomname/Coursename -->
+<attribute name="currentcourseName" value="" type="string" />
+
+<attribute name="currentImagesListdraw" value="null" />
+
+<!--- 
+    The Reference for a Streaming Object
+    This should be removed later when the OpenLaszlo API handles
+    the broadcast better
+    -swagner
+ -->
+<attribute name="_nc" value="null" />
+    
+<!--
+<attribute name="moderatorStreamID" value="" type="string" />
+<attribute name="moderatorationObject" value="" type="string" />
+<attribute name="moderatorName" type="string" setter="this.setModeratorName(moderatorName)" />
+ -->
+<attribute name="currentModeratorList" value="null" />
+
+<attribute name="newModeratorList" value="null" />
+<attribute name="removeModeratorList" value="null" />
+
+<attribute name="ismoderator" value="false" type="boolean" />
+
+<attribute name="loadingmessage" value="" type="string" />
+<!--- 
+    The state of the Application
+    At the beginning you should choose how many users are allowed to
+    login simultaniously
+ -->
+<attribute name="islogedin" value="false" type="boolean" />
+   
+<attribute name="htmlframeisloaded" value="false" type="boolean" />
+<attribute name="createIFrameDone_attr" value="false" type="boolean" />
+
+
+<attribute name="uploadmoduleppt" value="videoconf1ppt" type="string" />
+<attribute name="uploadmoduleimg" value="videoconf1" type="string" />
+<attribute name="foldersequence" value="null" />
+<attribute name="uploadmoduleimgfolder" value="" type="string" />
+<!---
+    Can be either 2 or 4
+    But theoretically there is no limit
+ -->
+<attribute name="numberofallowedpartners" value="0" type="number" />
+
+<!--- Number of currently connected Users -->
+<attribute name="numberofpartners" value="0" type="number" />
+
+<!--- unique ID of this Stream -->
+<attribute name="streamid" value="0" type="string" />
+
+<!--- id of the current Mod in this room -->
+<attribute name="currentmodid" value="0" type="string" />
+
+<attribute name="currentlanguage" value="english" type="string" />
+
+<attribute name="objWhiteboard" value="null" />
+<attribute name="whiteboardCount" value="0" type="number" />
+<attribute name="objMessage" value="null" />
+<attribute name="VarsModeratorGeneral" value="null" />
+
+<attribute name="isConference" value="false" type="boolean" />
+
+<attribute name="statesInitValues" value="null" />
+<attribute name="salutationsInitValues" value="null" />
+<attribute name="roomTypesInitValues" value="null" />
+
+<attribute name="stdTimeOffset" value="0" type="number" />
+
+<!--- Audio-Video Quality Settings
+    overwritten by values from the public/config.xml 
+ -->
+<attribute name="codecType" value="h264" type="string" />
+<attribute name="framesPerSecond" value="30" type="number" />
+<attribute name="bandwidthNeededNormal" value="16384" type="number" />
+<attribute name="bandwidthNeededBest" value="32768" type="number" />
+<attribute name="camQualityNormal" value="75" type="number" />
+<attribute name="camQualityBest" value="75" type="number" />
+        
+<!--- Reference to the current active drawarea -->
+<attribute name="_drawarea" value="null" /> 
+
+<!--- Username of current user -->
+<attribute name="currentusename" value="defaultname" type="string" />
+<attribute name="user_id" value="0" type="number" />
+<attribute name="firstName" value="" type="string" />
+<attribute name="timeZoneId" value="0" type="number" />
+<attribute name="jNameTimeZone" value="" type="string" />
+<attribute name="lastName" value="" type="string" />
+<attribute name="mail" value="" type="string" />
+<attribute name="lastLogin" value="" type="string" />
+<attribute name="official_code" value="" type="string" />
+<attribute name="picture_uri" value="" type="string" />
+<attribute name="language" value="" type="string" />
+<attribute name="currentClient" value="null" />   
+
+<!--- User porperties -->
+<attribute name="currentusercolor" value="0" type="number" />
+<attribute name="currentuserpos" value="0" type="number" />
+    
+<attribute name="currentModApply" value="null" />   
+
+<attribute name="sessionObject" value="null" />
+<attribute name="sessionId" value="" type="string" />
+
+<attribute name="syncWindow" value="null" />
+<attribute name="syncImageWindow" value="null" />
+<attribute name="syncSWFWindow" value="null" />
+<attribute name="publicSID" value="" type="string" />
+
+<!--- attributes for direct room access -->
+<attribute name="initroomid" value="0" type="number" />
+<attribute name="initroomStr" value="" type="string" />
+<attribute name="initroomtype" value="" type="string" />
+<attribute name="initdomainid" value="" type="string" />
+<attribute name="initlangid" value="1" type="number" />
+<attribute name="isinitRoomDirect" value="false" type="boolean" />
+<attribute name="isinitRoomObject" value="null" /> 
+
+<!-- attributes for direct room access via direct link -->
+<attribute name="directUserLogin" value="false" type="boolean" />
+<attribute name="directRoomId" value="1" type="number" />
+<attribute name="directRoomObj" value="null" />
+
+<!--- attributes for direct room access via remoteUser -->
+<attribute name="remoteUserLogin" value="false" type="boolean" />
+<attribute name="remoteUserSid" value="" type="string" />
+
+<!--- attributes for direct room access via remoteUser
+    This is using the advanced methods to prevent abuse
+ -->
+<attribute name="secureRemoteUserLogin" value="false" type="boolean" />
+<attribute name="secureHash" value="" type="string" />
+
+<!-- Attributes for wicket login (since it hard not to break anything)-->
+<attribute name="wicketsid" type="string" value="null"/>
+<attribute name="wicketroomid" type="number" value="0"/>
+
+<!--- skip loading of Language -->
+<attribute name="language_id" value="0" type="number" />
+<!--- application default language -->
+<attribute name="default_lang_id" value="1" type="number" />
+
+<attribute name="isResetUsername" value="false" type="boolean" />
+<attribute name="resetHash" value="" type="string" />
+    
+<attribute name="naviHeight" value="84" type="number" />    
+<attribute name="naviHeightDelta" value="84" type="number" />  
+
+<attribute name="currentrecorder" value="null" /> 
+<attribute name="currentrecorder_id" value="0" type="number" /> 
+
+<!--- 
+Holds a refernce to the current VideoCOntainer Object
+containing the VideoViews
+and some more references to temp-objects
+ -->
+<attribute name="_videocontainer" value="null" />
+<attribute name="_mymod" value="null" />
+
+<attribute name="isrtl" value="false" type="boolean" />    
+
+<!---
+    Attributes for browser panel size.
+    Those attributes are used to determine size of browser class (modules/conference/browser/conferenecBrowser.lzx)
+    in base/mainMethods.lzx.
+        2008 Apr 9 commented by onokeiji@gmail.com
+-->
+<attribute name="browserPanelWidth" value="600"/>
+<attribute name="browserPanelHeight" value="500"/>
+
+<attribute name="currentSlideNo" value="0" type="number" />
+<attribute name="currentSlideTotal" value="0" type="number" />
+<attribute name="currentSlideZoom" value="0" type="number" />
+
+<attribute name="currentUploadWindow" value="null" />
+
+<!--
+    ################################
+    Attributes for direct Moderator setup via Moodle
+ -->
+<attribute name="isMoodleRoom" value="false" type="boolean" /> 
+
+<attribute name="becomemoderator" value="false" type="boolean" />
+<attribute name="becomeSuperModerator" value="false" type="boolean" />
+
+<attribute name="moodleWwwRoot" value="" type="string" />
+<attribute name="moodleUserId" value="0" type="number" />
+<attribute name="moodlePicture" value="0" type="number" />
+
+
+<attribute name="currentRoomObj" value="null" />
+
+<attribute name="refreshSession" value="60000" type="number" />
+
+<attribute name="globalFontSize" value="11" type="number" />
+
+<attribute name="lastBroadCastingUser" value="null" />
+
+<attribute name="isBroadCasting" value="false" type="boolean" />
+<attribute name="canVideo" value="false" type="boolean" />
+
+<attribute name="currentContentView" value="null" />
+
+<!-- item to focus on after rpcErrorDialog has been shown-->
+<attribute name="focusOnItem" value="null"/>
+
+<attribute name="currentRoomObject" value="null"/>
+
+<attribute name="appointmentNotificationPopUp" value="null"/>
+
+<attribute name="conferenceBrowserIsinited" value="false" type="boolean" />
+
+<attribute name="isAllowedToScreenShare" value="false" type="boolean" />
+
+<attribute name="isAllowedToRemoteControl" value="false" type="boolean" />
+
+<attribute name="isAllowedToGiveExclusiveAudio" value="false" type="boolean" />
+
+<attribute name="roomJumpId" value="0" type="number" />
+
+<!--
+    Loads a User profile page directly instead of loading the Dashboard
+    cuser is a hash that can be found in the UserContacts Table
+ -->     
+<attribute name="cuser" value="" type="string"/>
+
+<!--
+    Indicates if the user does accept or deny a user contact request
+ -->    
+<attribute name="cuserStatus" value="none" type="string"/>
+
+<!--
+    Attribute to load a custom user calendar instead of the own one
+-->
+<attribute name="contactUser" value="0" type="number" />
+
+<attribute name="monthnames" value="['Januar','Februar','Maerz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember']"/> 
+
+<attribute name="dayShortNames" value="null" />
+
+<!--
+    Used in SOAP API to indicate if the user will see a pop up to enter its nickname
+ -->
+<attribute name="showNickNameDialog" value="false" type="boolean" />
+
+<!--
+    Used in SOAP API to indicate if the user logs directly into a room or into the dashboard
+ -->
+<attribute name="landingZone" value="" type="string"/>
+
+<!--
+    if the users logs in via SOAP he does not see the exit button by default
+    only if the landingZone == dashboard
+ -->
+<attribute name="destroyExitButton" value="true" type="boolean" />
+
+<attribute name="currentFileExplorer" value="null"/>
+
+<attribute name="allowRecording" value="true" type="boolean" />
+
+<!-- userdata -->
+<attribute name="sharedObject" value="null" />
+
+<attribute name="currentMicName" value="" type="string"/>
+<attribute name="currentCamName" value="" type="string"/>
+
+<attribute name="currentBaseConferenceRoom" value="null" />
+
+<attribute name="GIVE_EXCLUSIVE_AUDIO_KEY" value="123"/> <!-- F12 --> 
+<attribute name="ARRANGE_WINDOWS_KEY" value="119"/> <!-- F8 --> 
+<attribute name="MUTE_AUDIO_KEY" value="118"/> <!-- F7 --> 
+
+<!-- 
+	Indicates if the Red5 SIP Integration is enabled or not and 
+	if the SIP Dialer is shown in the conference menu
+ -->
+<attribute name="RED5_SIP_ENABLE" value="no" type="string" /> 
+
+<!-- 
+	The server side configuration of the max upload size for files
+ -->
+<attribute name="MAX_UPLOAD_SIZE" value="-1" type="string" /> 
+
+<!-- 
+	The server side configuration of the redirect.url.for.external.users
+ -->
+<attribute name="REDIRECT_URL_FOR_EXTERNAL_USERS" value="null" type="string" /> 
+
+<attribute name="currentNC" value="null" />
+
+<!-- 
+	Holds a reference to the current tooltip, if there is one
+ -->
+<attribute name="currentToolTip" value="null" />
+
+<method name="registerToolTip" args="viewInstance">
+	if (this.currentToolTip != null) {
+		this.currentToolTip.cleanHolder();
+	}
+	this.currentToolTip = viewInstance;
+</method>
+
+<method name="clearToolTip">
+	if (this.currentToolTip != null) {
+		this.currentToolTip.cleanHolder();
+		this.currentToolTip = null;
+	}
+</method>
+
+<!-- 
+	Holds a reference to the current activity list, if there is one
+ -->
+<attribute name="currentActivityList" value="null" />
+
+</library>
diff --git a/WebContent/src/base/mainDatasets.lzx b/WebContent/src/base/mainDatasets.lzx
new file mode 100644
index 0000000..9957db6
--- /dev/null
+++ b/WebContent/src/base/mainDatasets.lzx
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<!-- all datasets for main.lzx -->
+
+<library>
+
+	<method name="getServerBaseUrl">
+	<![CDATA[
+		var protocol = lz.Browser.getInitArg('protocol');
+		var host = lz.Browser.getInitArg('host');
+		var port = lz.Browser.getInitArg('port');
+		var context = lz.Browser.getInitArg('context');
+		if (protocol != undefined && host != undefined && port != undefined && !isNaN(port) && context != undefined) {
+			canvas.setAttribute('isCluster', true);
+			canvas.setAttribute('rtmphostlocal', host);
+			return protocol + "://" + host + ":" + port + "/" + context + "/public/";
+		} else {
+			var urlObject = lz.Browser.getBaseURL();
+			//If Port is Null or undefinied use port 80
+			var port = (urlObject.port != null && urlObject.port != undefined) ? urlObject.port : 80;
+			//if($debug) Debug.write("getBaseUrl:: [urlObject, port]", urlObject, port);
+			var url = "" + urlObject.protocol + "://" + urlObject.host + (port != 80 ? ":" + port : "") + urlObject.path;
+			//if($debug) Debug.write("!!!!!!! getBaseUrl:: [urlObject, port, url]", urlObject, port, url);
+			url = url + (url.slice(-1) == '/' ? '' : '/');
+			//if($debug) Debug.write("!!!!!!! getBaseUrl:: [last, url]", url.slice(-1), url);
+			return url;
+		}
+	]]>
+	</method>
+
+<!-- get values from public/config.xml -->
+<dataset type="http" name="myConfigSet" request="false" ondata="parent.mainTheme.loadTheme()">
+    <handler name="oninit">
+        var d = new Date();
+        this.setAttribute("src", canvas.getServerBaseUrl() + "config.xml?random=" + d.getTime());
+        this.doRequest();
+    </handler>
+    <handler name="ondata">
+        if ($debug) Debug.write("ondata");
+    </handler>
+    <handler name="onerror" args="e">
+        if ($debug) Debug.write("onerror",e);
+    </handler>
+    <handler name="ontimeout" args="e">
+        if ($debug) Debug.write("ontimeout",e);
+    </handler>
+</dataset>
+
+<!-- get values from public/config.xml -->
+<dataset type="http" name="mainTheme" request="false" ondata="canvas.myinit()">
+    <method name="loadTheme">
+        var d = new Date();
+        this.setAttribute("src", canvas.getServerBaseUrl() + "theme.xml?random=" + d.getTime());
+        this.doRequest();
+    </method>
+    <handler name="ondata">
+        if ($debug) Debug.write("ondata");
+    </handler>
+    <handler name="onerror" args="e">
+        if ($debug) Debug.write("onerror",e);
+    </handler>
+    <handler name="ontimeout" args="e">
+        if ($debug) Debug.write("ontimeout",e);
+    </handler>
+</dataset>
+
+</library>
diff --git a/WebContent/src/base/mainMethods.lzx b/WebContent/src/base/mainMethods.lzx
new file mode 100644
index 0000000..16e20bd
--- /dev/null
+++ b/WebContent/src/base/mainMethods.lzx
@@ -0,0 +1,1033 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<!-- methods for main.lzx -->
+
+<library>
+
+	<class name="baseconfmenucommand" extends="command" >
+    	<attribute name="enabled" value="true" type="boolean" />
+    	<attribute name="tipLabelId" value="0" type="number" />
+    </class>
+    
+    <class name="confmenucommand" extends="baseconfmenucommand" >
+    	<attribute name="actionCommand" value="" type="string" />
+    	<handler name="onselect" args="sel">
+    		if (!this.enabled) {
+    			return;
+    		}
+    		canvas.doActionmenu(this.actionCommand);
+    	</handler>
+    </class>
+        
+    <baseconfmenucommand id="cmd_shareDesktop" tipLabelId="1480" >
+    	<handler name="onselect" args="sel">
+    		if (!this.enabled) {
+    			return;
+    		}
+    		canvas._mymod.checkForApplyScreen("no");
+    	</handler>
+    </baseconfmenucommand>
+    
+    <confmenucommand id="cmd_applyforMod" tipLabelId="1481" actionCommand="applyForMod" />
+    
+    <confmenucommand id="cmd_applyforWhiteBoard" tipLabelId="1492" key="['control','shift','2']">
+    	<handler name="onselect" args="tSel">
+    		if (!this.enabled) {
+    			return;
+    		}
+    		if ($debug) Debug.write("cmd_applyforWhiteBoard onselect",tSel);
+    		//Ask for Right to Draw on Whiteboard
+			var tDate = new Date();
+			canvas.thishib.sendMessageWithClient.sendMessage("applyForWhiteboard",tDate.getTime());
+    	</handler>
+    </confmenucommand>
+    
+    <baseconfmenucommand id="cmd_applyforA" tipLabelId="1602">
+    	<handler name="onselect" args="tSel">
+    		if (!this.enabled) {
+    			return;
+    		}
+    		if ($debug) Debug.write("cmd_applyforA onselect",canvas.ismoderator,tSel);
+    		if (canvas.ismoderator) {
+				//Do directly send confirmation to share Audio/Video to SELF! so that all users get
+				//the notification and the broadcasting Bit is set for this User
+				canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = canvas.publicSID;
+				canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+				canvas.thishib.setBroadCastingFlag.canVideo = false;
+				canvas.thishib.setBroadCastingFlag.doCall();
+			} else {
+				//Apply for Right to Share Audio/Video
+				var tDate = new Date();
+				canvas.thishib.sendMessageWithClient.sendMessage("applyForA",tDate.getTime());
+			}
+    	</handler>
+    </baseconfmenucommand>
+    <baseconfmenucommand id="cmd_applyforAV" tipLabelId="1482">
+    	<handler name="onselect" args="tSel">
+    		if (!this.enabled) {
+    			return;
+    		}
+    		if ($debug) Debug.write("cmd_applyforAV onselect",canvas.ismoderator,tSel);
+    		if (canvas.ismoderator) {
+				//Do directly send confirmation to share Audio/Video to SELF! so that all users get
+				//the notification and the broadcasting Bit is set for this User
+				canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = canvas.publicSID;
+				canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+				canvas.thishib.setBroadCastingFlag.canVideo = true;
+				canvas.thishib.setBroadCastingFlag.doCall();
+			} else {
+				//Apply for Right to Share Audio/Video
+				var tDate = new Date();
+				canvas.thishib.sendMessageWithClient.sendMessage("applyForAV",tDate.getTime());
+			}
+    	</handler>
+    </baseconfmenucommand>
+    
+    <confmenucommand id="cmd_createPoll" tipLabelId="1483" actionCommand="createPoll" />
+    <confmenucommand id="cmd_pollResults" tipLabelId="1484" actionCommand="pollResults" />
+    <confmenucommand id="cmd_checkPollVoted" tipLabelId="1485" actionCommand="checkPollVoted" />
+    <confmenucommand id="cmd_importFile" tipLabelId="1479" actionCommand="importFile" />
+    <confmenucommand id="cmd_editCamMicSettings" actionCommand="editCamMicSettings" tipLabelId="1486" /> 
+    <confmenucommand id="cmd_quit" actionCommand="quit" tipLabelId="1487" />
+    <confmenucommand id="cmd_showSipDialer" actionCommand="showSipDialer" tipLabelId="1488" />
+    
+    <confmenucommand id="cmd_invitation" actionCommand="invitation" tipLabelId="1489" /> 
+    <confmenucommand id="cmd_editWhiteboardDefault" actionCommand="editWhiteboardDefault" tipLabelId="1490" /> 
+    
+    <!-- 
+    <confmenucommand id="cmd_coBrowser" actionCommand="browser_open" key="['control','b']"/> 
+     -->
+   
+    <confmenucommand id="cmd_exportFilePNG" onselect="canvas.doWhiteboardActionmenu('exportFilePNG')" tipLabelId="1489" />
+    <confmenucommand id="cmd_exportFileJPG" onselect="canvas.doWhiteboardActionmenu('exportFileJPG')" tipLabelId="1489" />
+    <confmenucommand id="cmd_exportFileSVG" onselect="canvas.doWhiteboardActionmenu('exportFileSVG')" tipLabelId="1489" />
+    <!-- 
+    <confmenucommand id="cmd_exportFilePDF" onselect="canvas.doWhiteboardActionmenu('exportFilePDF')" tipLabelId="1489" />
+    <confmenucommand id="cmd_exportFileTIF" onselect="canvas.doWhiteboardActionmenu('exportFileTIF')" tipLabelId="1489" />
+     -->
+    
+    <attribute name="colorArray" value="null" />
+    
+    <method name="getColorForUser">
+    	<![CDATA[
+    	   var colorArray = [0x92E8A4,0xC2F1FF,0xFFFCAE,0xE8C792,0xFF8073,
+                            0xE8DB87,0xAFFFB8,0xBED4FF,0xE0BBE8,0xFFBBA5];
+    	   return colorArray[Math.round(Math.random()*10)];
+    	]]>
+    </method>
+    
+    <method name="remoteLogWrite" args="message">
+    	if ($debug) Debug.write(message);
+    	var remoteLog = new lz.dataset();
+    	remoteLog.setQueryType("POST");
+    	remoteLog.setAttribute("src", canvas.getUrl() + "remotelog.upload");
+    	remoteLog.setQueryParam("message", message);
+    	remoteLog.setQueryParam("sid", canvas.sessionId);
+    	remoteLog.doRequest();
+    </method>
+    
+    <method name="getHttpHost">
+   	<![CDATA[
+    	if (canvas.httphostlocal != null && canvas.httphostlocal.length > 0) {
+			return canvas.httphostlocal;
+		}
+		return canvas.rtmphostlocal;
+	]]>
+    </method>
+        
+	<method name="getUrl">
+	<![CDATA[
+		return canvas.protocol + '://' + getHttpHost()
+			+ ':' + canvas.red5httpport + canvas.httpRootKey;
+	]]>
+	</method>
+        
+	<method name="getServicesUrl">
+	<![CDATA[
+		return getUrl() + 'services/';
+	]]>
+	</method>
+
+	<method name="getTestingUrl">
+	<![CDATA[
+		return getUrl() + '?swf=networktesting' + ($debug ? 'debug' : '') + '.swf10.swf';
+	]]>
+	</method>
+
+	<method name="getAppBaseUrl">
+	<![CDATA[
+		return getUrl() + "swf";
+	]]>
+	</method>
+
+	<method name="getScreenSharingUrl">
+	<![CDATA[
+		var organisation_id = (hib.currentdomainObj != null && hib.currentdomainObj.organisation_id != null)
+			? hib.currentdomainObj.organisation_id : 1;
+		if ($debug) Debug.write("mainMethods::getScreenSharingUrl ", hib.userobject, hib.currentdomainObj);
+		
+		var appBase = canvas.getUrl();
+		if ($debug) Debug.write("appBase=" + appBase);
+		var downloadurl = appBase + 'screen.upload?'
+			+'rtmphostlocal=' + canvas.getHttpHost()
+			+'&baseurl=' + escape(appBase)
+			+'&domain=' + hib.conferencedomain
+			+'&organization_id=' + organisation_id
+			+'&sid=' + canvas.sessionId
+			+'&connectionType=' + canvas.thishib.getProtocol()
+			+'&port=' + canvas.thishib.getPort()
+			+'&publicSID=' + canvas.publicSID
+			+'&languageAsString=' + hib.userlang;
+		if ($debug) Debug.write("mainMethods::getScreenSharingUrl ", downloadurl); 
+		return downloadurl;
+	]]>
+	</method>
+	
+    <method name="myinit">
+        <![CDATA[
+        canvas.mediaerrortimeout = 30000;
+        canvas.medialoadtimeout = 30000;
+        
+        if($debug) Debug.write("main.lzx/config.xml ondata",this);
+        
+        //Set Config-values by public/config.xml, see comments on public/config.xml
+        if (!canvas.isCluster) {
+        	this.setAttribute('rtmphostlocal',canvas.myConfigSet.getPointer().xpathQuery('config/rtmphostlocal/text()'));
+        }   
+        this.setAttribute('rtmpport',Number(canvas.myConfigSet.getPointer().xpathQuery('config/rtmpport/text()')));  
+        this.setAttribute('rtmpsslport',Number(canvas.myConfigSet.getPointer().xpathQuery('config/rtmpsslport/text()'))); 
+        
+        var userSSLString = canvas.myConfigSet.getPointer().xpathQuery('config/useSSL/text()');
+        if ($debug) Debug.write("userSSLString",userSSLString)
+        if (userSSLString == "yes") {
+            this.setAttribute('useSSL',true);
+        }
+        
+        this.setAttribute('red5httpport',Number(canvas.myConfigSet.getPointer().xpathQuery('config/red5httpport/text()')));
+        
+        this.setAttribute('currentappname',canvas.myConfigSet.getPointer().xpathQuery('config/currentappname/text()'));  
+        this.setAttribute('currentappnameurl',canvas.myConfigSet.getPointer().xpathQuery('config/currentappnameurl/text()'));  
+        this.setAttribute('currentappnamebugurl',canvas.myConfigSet.getPointer().xpathQuery('config/currentappnamebugurl/text()'));
+        this.setAttribute('loudnessAcitviation',canvas.myConfigSet.getPointer().xpathQuery('config/loudnessAcitviation/text()'));
+        this.setAttribute('webAppRootKey',canvas.myConfigSet.getPointer().xpathQuery('config/webAppRootKey/text()'));
+        this.setAttribute('showWindowEffect',canvas.myConfigSet.getPointer().xpathQuery('config/showWindowEffect/text()'));
+        this.setAttribute('firstdayinweek',canvas.myConfigSet.getPointer().xpathQuery('config/firstdayinweek/text()'));
+        this.setAttribute('showRecording',canvas.myConfigSet.getPointer().xpathQuery('config/showRecording/text()'));
+        
+        //old menubar is not active anymore
+        //this.setAttribute('showmodernWhiteBoard',canvas.myConfigSet.getPointer().xpathQuery('config/showmodernWhiteBoard/text()'));
+        
+        //Audio-Video-Settings
+        this.setAttribute('codecType',canvas.myConfigSet.getPointer().xpathQuery('config/codecType/text()'));
+        this.setAttribute('framesPerSecond',Number(canvas.myConfigSet.getPointer().xpathQuery('config/framesPerSecond/text()')));  
+        this.setAttribute('bandwidthNeededNormal',Number(canvas.myConfigSet.getPointer().xpathQuery('config/bandwidthNeededNormal/text()')));  
+        this.setAttribute('bandwidthNeededBest',Number(canvas.myConfigSet.getPointer().xpathQuery('config/bandwidthNeededBest/text()')));  
+        this.setAttribute('camQualityNormal',Number(canvas.myConfigSet.getPointer().xpathQuery('config/camQualityNormal/text()')));  
+        this.setAttribute('camQualityBest',Number(canvas.myConfigSet.getPointer().xpathQuery('config/camQualityBest/text()')));  
+        
+        this.setAttribute('defaultWhiteboardWidth',Number(canvas.myConfigSet.getPointer().xpathQuery('config/defaultWhiteboardWidth/text()')));  
+        this.setAttribute('defaultWhiteboardHeight',Number(canvas.myConfigSet.getPointer().xpathQuery('config/defaultWhiteboardHeight/text()')));  
+        
+        
+        this.setAttribute('moderatorModuleUser',canvas.myConfigSet.getPointer().xpathQuery('config/moderatorModuleUser/text()'));  
+        this.setAttribute('moderatorModuleRoom',canvas.myConfigSet.getPointer().xpathQuery('config/moderatorModuleRoom/text()'));  
+        
+        this.setAttribute('dashboardModuleStartScreen',canvas.myConfigSet.getPointer().xpathQuery('config/dashboardModuleStartScreen/text()'));  
+        this.setAttribute('dashboardModuleCalendar',canvas.myConfigSet.getPointer().xpathQuery('config/dashboardModuleCalendar/text()'));  
+        this.setAttribute('conferenceRoomModule',canvas.myConfigSet.getPointer().xpathQuery('config/conferenceRoomModule/text()'));  
+        this.setAttribute('restrictedRoomModule',canvas.myConfigSet.getPointer().xpathQuery('config/restrictedRoomModule/text()'));  
+        this.setAttribute('interviewRoomModule',canvas.myConfigSet.getPointer().xpathQuery('config/interviewRoomModule/text()'));  
+        this.setAttribute('recordModule',canvas.myConfigSet.getPointer().xpathQuery('config/recordModule/text()'));
+          
+        this.setAttribute('httpRootKey',canvas.myConfigSet.getPointer().xpathQuery('config/httpRootKey/text()'));
+        this.setAttribute('httphostlocal',canvas.myConfigSet.getPointer().xpathQuery('config/httphostlocal/text()'));
+        this.setAttribute('protocol',canvas.myConfigSet.getPointer().xpathQuery('config/protocol/text()'));  
+        this.setAttribute('proxyType',canvas.myConfigSet.getPointer().xpathQuery('config/proxyType/text()'));
+
+		//set user color
+		canvas.currentusercolor = canvas.getColorForUser();
+
+        var lc_SID = lz.Browser.getInitArg('lc_SID');
+        
+        if($debug) Debug.write("lc_SID: ", lc_SID);
+        
+        if (lc_SID == undefined) {
+        	new lz.errorPopup(canvas,{'error':'You are loading the wrong SWF, there is no lz_SID given'});
+        	return;
+        }
+        
+        
+
+        this.setAttribute('lc_SID', lc_SID);
+        this.setAttribute('vid_lc_name', this.lc_SID + "__videoLC");
+        this.setAttribute('rtmp_lc_name', this.lc_SID + "__rtmpLC");
+        this.setAttribute('videoComp_lc_name', this.lc_SID + "__streamLC");
+        this.setAttribute('videoComp_lc_callback_name', this.lc_SID + "__streamLC_cback");
+
+        var videoComp_lc = new LocalConnection();
+        videoComp_lc.connect(this.videoComp_lc_name);
+        this.setAttribute('videoComp_lc', videoComp_lc);
+        
+        var t = this;
+    	canvas.videoComp_lc.regExpResult = function(tId,tResult) {
+      		t.regExpResult(tId,tResult);
+        }
+        canvas.videoComp_lc.remoteLogWrite = function(message) {
+        	canvas.remoteLogWrite(message);
+        }
+        canvas.videoComp_lc.exitRoom = function(confirm) {
+            if ($debug) Debug.write("confirm exitRoom:", confirm);
+            if (confirm) {
+	            if ($debug) Debug.write("logicalRoomLeave: ", canvas.thishib.connected);
+	            if (canvas.thishib.connected) {
+            		logicalRoomLeave.doCall();
+            	} else {
+            		canvas.doActionmenu('quit');
+            	}
+            }
+        }
+    
+        mainBaseText.setAttribute('text',canvas.currentappname);
+        var cleanUrl = _url;
+        
+        var hasParams = _url.indexOf("?");
+        if (hasParams != -1) {
+            cleanUrl = _url.substr(0, hasParams);
+        }
+        
+        if ($debug) Debug.write("_url ",_url,cleanUrl);
+        var doubleSlash = cleanUrl.indexOf("//");
+        var isNotPort80 = cleanUrl.indexOf(":", doubleSlash+2);
+        if ($debug) Debug.write("isNotPort80: ",isNotPort80,doubleSlash);
+        if (isNotPort80!=-1){
+            //Debug.write("isNotPort80: ",doubleSlash+2, _url.indexOf(":", doubleSlash+2)-doubleSlash-2);
+            var server = cleanUrl.substr(doubleSlash+2, _url.indexOf(":", doubleSlash+2)-doubleSlash-2); 
+        } else {
+            var server = cleanUrl.substr(doubleSlash+2, _url.indexOf("/", doubleSlash+2)-doubleSlash-2); 
+        }
+        
+        if ($debug) Debug.write("this zielnr: ",this,server);
+        
+        this.setAttribute('rtmphost',server);
+    
+        if (this.rtmphostlocal.length==0){
+            this.setAttribute('rtmphostlocal',server);
+        }
+        
+        //Check for Invitation
+        var invitationHash = lz.Browser.getInitArg('invitationHash');
+        
+        if ($debug) Debug.info("###################### -1 ");
+        if ($debug) Debug.info("invitationHash :: ",invitationHash);
+        
+        if (invitationHash != undefined){
+            canvas.isinitRoomDirect = true;
+            canvas.invitationHash = invitationHash;
+        }
+        
+        var secureHash = lz.Browser.getInitArg('secureHash');
+        if (secureHash != undefined){
+            canvas.secureRemoteUserLogin = true;
+            canvas.secureHash = secureHash;
+        }
+        
+        if ($debug) Debug.info("###################### -2 ");
+        
+        //sid=fe9ea55284e0b23991b1c1089b2c8f64&roomid=1
+        var sid = lz.Browser.getInitArg('sid');
+        var initroomid = lz.Browser.getInitArg('roomid');
+        if (sid != undefined && initroomid != undefined){
+            canvas.remoteUserLogin = true;
+            canvas.initroomid = initroomid;
+            canvas.remoteUserSid = sid;
+        }
+        
+        var directRoomId = lz.Browser.getInitArg('directRoomId');
+        if (directRoomId != undefined) {
+            canvas.directUserLogin = true;
+            canvas.directRoomId = directRoomId;
+        }
+        
+        var language = lz.Browser.getInitArg('language');
+        if (language != undefined) {
+            canvas.language_id = Number(language);
+        }
+    
+        //check for reset password
+        var hash = lz.Browser.getInitArg('hash');
+        if (hash!=undefined){
+            canvas.isResetUsername = true;
+            canvas.resetHash = hash;        
+        }
+        
+        var cuserItem = lz.Browser.getInitArg('cuser');
+        if (cuserItem!=undefined){
+            canvas.cuser = cuserItem;  
+            
+            //Lookup additional actions
+            var tAccept = lz.Browser.getInitArg('tAccept');
+            if (tAccept != undefined) {
+                canvas.cuserStatus = tAccept;
+            } else {
+                canvas.cuserStatus = "none";
+            }
+            
+        }
+        
+        var moodleRoom = lz.Browser.getInitArg('moodleRoom');
+        var becomemoderator = lz.Browser.getInitArg('becomemoderator');
+        
+        if (becomemoderator != undefined) {
+            if (becomemoderator == "2"){
+                canvas.becomemoderator = true;
+            } else {
+                canvas.becomemoderator = false;
+            }
+        }
+        
+        if (moodleRoom != undefined){
+            canvas.isMoodleRoom = true;
+            
+            var moodleWwwRoot = lz.Browser.getInitArg('wwwroot');
+            var moodleUserId = lz.Browser.getInitArg('user_id');
+            var moodlePicture = lz.Browser.getInitArg('picture');
+            
+            if (moodleWwwRoot != undefined) {
+                canvas.moodleWwwRoot = moodleWwwRoot;
+            }
+            if (moodleUserId != undefined) {
+                canvas.moodleUserId = Number(moodleUserId);
+            }
+            if (moodlePicture != undefined) {
+                canvas.moodlePicture = moodlePicture;
+            }
+        }
+        
+        var scopeRoomId = lz.Browser.getInitArg('scopeRoomId');
+        if (scopeRoomId != undefined){
+            hib.userScope = scopeRoomId;
+        }
+        
+       	canvas.setAttribute('wicketsid', null);
+        var wicketsid = lz.Browser.getInitArg('wicketsid');
+        var wicketroomid = lz.Browser.getInitArg('wicketroomid');
+        if (wicketsid != undefined && wicketroomid != undefined && !isNaN(wicketroomid)) {
+        	canvas.setAttribute('wicketsid', wicketsid);
+        	canvas.setAttribute('wicketroomid', Number(wicketroomid));
+        	hib.userScope = wicketroomid;
+        }
+        this.setBaseColors();
+    
+        //Debug.write("rtmphostlocal,rtmphost: ",canvas.rtmphostlocal,canvas.rtmphost); 
+        var src = hib.getUrl();
+        
+        canvas.thishib.setAttribute('src',src);
+        canvas.thishib.loaderVar = new lz.autoLoader(canvas);
+        canvas.thishib.loaderVar._src.setAttribute('text',src);
+        canvas.thishib.connect();
+        ]]>
+    </method>
+    
+	<netRemoteCallHib name="logicalRoomLeave" funcname="logicalRoomLeave" remotecontext="$once{ canvas.thishib }" >
+		<handler name="ondata" args="value">
+			if ($debug) Debug.write("############# logicalRoomLeave: ",value);
+			canvas.currentBaseConferenceRoom._screenSharingAdapter.closeAllScreenSharings();
+			if (canvas.appointmentNotificationPopUp != null) {
+				canvas.appointmentNotificationPopUp.destroy();
+			}
+			canvas.doActionmenu('quit');
+		</handler>
+	</netRemoteCallHib>
+	
+    <method name="getLabelName" args="id">
+        //if($debug) Debug.write("main.lzx/getLabelName()",id);
+        return getLabelTag(id);
+    </method>
+    
+    <!--
+        exportFilePNG exportFileJPG exportFilePDF exportFileSVG exportFileTIF
+     -->
+     
+    <method name="doWhiteboardActionmenu" args="action">
+        if (action == "exportFilePNG") {
+            canvas._drawarea.confirmSaveAsImageTypeExport("image","png");
+        } else if (action == "exportFileJPG") {
+            canvas._drawarea.confirmSaveAsImageTypeExport("image","jpg");
+        } else if (action == "exportFilePDF") {
+            canvas._drawarea.confirmSaveAsImageTypeExport("image","pdf");
+        } else if (action == "exportFileSVG") {
+            canvas._drawarea.confirmSaveAsImageExport("image");
+        } else if (action == "exportFileTIF") {
+            canvas._drawarea.confirmSaveAsImageTypeExport("image","tif");
+        }
+    </method>
+
+	<method name="quit">
+		canvas.videoComp_lc.exitRoom = null;
+		canvas.thishib.src = null;
+		canvas.thishib.reconnectionAction = false;
+		canvas.thishib.reconnectAfterRoomleft = false;
+		canvas.thishib.counterror = 100;
+		canvas.thishib.disconnect();
+		canvas.thishib._nc.close();
+		flash.external.ExternalInterface.call("roomExit");
+	</method>
+	
+	<!---
+		Actions connected to the shortcuts
+	 -->
+    <method name="doActionmenu" args="stringSub">
+        <![CDATA[
+            if($debug) Debug.write("doActionmenu: ",stringSub);
+            if (canvas._conferencemenu.visibility == 'visible'){
+            	 if (stringSub == "invitation") {
+            	 	flash.external.ExternalInterface.call("openInvitation");
+			    } else if (stringSub=='editWhiteboardDefault') {
+                    new lz.editWhiteboardDefault(canvas.main_content._content.inner);
+                } else if (stringSub=='createPoll') {
+                    flash.external.ExternalInterface.call("createPoll", canvas.publicSID);
+                } else if (stringSub=='pollResults') {
+                    flash.external.ExternalInterface.call("pollResults", canvas.publicSID);
+                } else if (stringSub=='checkPollVoted') {
+                    flash.external.ExternalInterface.call("vote");
+                } else if (stringSub=='importFile') {
+                    new lz.uploadWindowExplorer(canvas.main_content._content.inner,{
+                            x:60,uploadmodule:canvas.uploadmoduleimg,
+                            parentFolderId:0,
+                            isOwner:false,
+                            fileExplorerRef:null,
+                            isOnlyImage:true,
+                            servletName:'file.upload'
+                        });
+                } else if (stringSub=='applyForMod') {
+                    if ($debug) Debug.info("Apply For Mod through doActionmenu");
+                    //new lz.applyForModeration(canvas.main_content._content.inner);
+                    canvas.thishib.applyForModeration.doCall();
+                } else if (stringSub=='editCamMicSettings') {
+                    canvas._videocontainer._videoviewcontent.changeDevice();
+                } else if (stringSub=='showSipDialer') {
+                    new lz.sipDialer(canvas.main_content._content.inner);
+                } else if (stringSub=='quit') {
+					canvas.quit();
+                } else if( stringSub == "browser_open" ){
+                    var browserPanelWidth  = canvas.browserPanelWidth;
+                    var browserPanelHeight = canvas.browserPanelHeight;
+
+                    if ($debug) Debug.write( "is browser[open] ? ", canvas.main_content._content.inner.conferenceBrowser );
+                    if ($debug) Debug.write( "is browser[browserPanelWidth] ? ", browserPanelWidth );
+                    if ($debug) Debug.write( "is browser[browserPanelHeight] ? ", browserPanelHeight );
+
+                    if( !canvas.conferenceBrowserIsinited ){
+                        new lz.conferenceBrowser( canvas.main_content._content.inner,{
+                                                         name:'conferenceBrowser',y:30,
+                                                         width:canvas.width-220, 
+                                                         height:canvas.height-100,
+                                                         width:browserPanelWidth, 
+                                                         height:browserPanelHeight
+                                                     });
+                    } else{
+                    with( canvas.main_content._content.inner ){
+                            conferenceBrowser.htmlviewer.setVisible( true );
+                            conferenceBrowser.setVisible( true );
+                    }
+                }
+             } else if( stringSub == "browser_close" ){
+                if ($debug) Debug.write( "is browser[close] ? ", canvas.main_content._content.inner.conferenceBrowser );
+                with( canvas.main_content._content.inner ){
+                    if( conferenceBrowser  != undefined ){
+                            conferenceBrowser.htmlviewer.setVisible( false );
+                            conferenceBrowser.setVisible( false );
+                    }
+                }
+            }
+          }
+        ]]>
+    </method> 
+    
+    <method name="startBrowser" args="objMessage">
+        <![CDATA[
+            if( !canvas.conferenceBrowserIsinited ){
+                        if ($debug) Debug.write( "if this" );
+                new lz.conferenceBrowser(canvas.main_content._content.inner,{
+                                             name:'conferenceBrowser',y:30,
+                                             width:canvas.width-220, 
+                                             height:canvas.height-100,
+                                             initedByUser:false,
+                                             initURL:objMessage[1]
+                                        });
+            } else{Debug.write( "else this" );
+                with( canvas.main_content._content.inner ){
+                        conferenceBrowser.htmlviewer.setVisible( true );
+                        conferenceBrowser.setVisible( true );
+                        conferenceBrowser.newBrowserURL(objMessage[1]);
+                }
+            }
+        ]]>
+    </method>   
+    
+    <method name="closeBrowser" args="objMessage">
+        <![CDATA[
+            if( canvas.conferenceBrowserIsinited ){
+                with( canvas.main_content._content.inner ){
+                        conferenceBrowser.close();
+                }
+            }
+        ]]>
+    </method>
+    
+    <method name="setRoomValues" args="roomTypeId,roomId,roomObj">
+    
+        if ($debug) Debug.warn("setRoomValues ",roomTypeId,roomId,roomObj);
+        if (roomTypeId==1){
+                canvas.isConference = true;
+            } else {
+                canvas.isConference = false;
+        }
+        
+        //this is needed cause in the rpc-method *getCurrentModeratorList* we check if its roomtype_id == 3
+        //and if roomtype_id == 3 we will not show any *There is no Moderator* Warning Dialog
+        canvas.currentRoomObject = roomObj;
+
+        hib.currentroomid = roomId;
+        if (roomObj!=null){
+            if (roomTypeId==1){
+                
+                new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.conferenceRoomModule,roomObj:roomObj});
+                 
+            } else if (roomTypeId==2){
+                
+                new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.restrictedRoomModule,roomObj:roomObj});
+                new lz.labelerrorPopup(canvas,{error:'No RoomType currently available for roomTypeId 2'});
+                 
+            } else if (roomTypeId==3){
+                
+                new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.restrictedRoomModule,roomObj:roomObj});
+                 
+            } else if (roomTypeId==4){
+                
+                new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.interviewRoomModule,roomObj:roomObj});
+                 
+            } else if (roomTypeId==5){
+                
+                new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.customRoomModule,roomObj:roomObj});
+                 
+            } 
+        }
+    </method>
+    
+	<method name="roomClosed">
+	    <![CDATA[
+	        if ($debug) Debug.write("canvas.currentRoomObject ",canvas.currentRoomObject);
+	        new lz.redirectBox(canvas,{redirectURL:canvas.currentRoomObject.redirectURL});
+	    ]]>
+	</method>
+                 
+        
+
+	
+	<method name="parseLanugageObject" args="obj">
+	
+	    ////Debug.write('parseLanugageObject: ',obj);
+	    ////Debug.write('parseLanugageObject: ',obj.childNodes);
+	    <![CDATA[
+	    var t = new Array();
+	    for (var i=0;i<obj.childNodes.length;i++){
+	        for (var k=0;k<obj.childNodes[i].childNodes.length;k++){
+	            ////Debug.write(obj.childNodes[i].childNodes[k]);
+	            var t2 = new Array();
+	            t2[obj.childNodes[i].childNodes[k].childNodes[0].nodeName]=obj.childNodes[i].childNodes[k].childNodes[0].childNodes[0].data;
+	            t2[obj.childNodes[i].childNodes[k].childNodes[1].nodeName]=obj.childNodes[i].childNodes[k].childNodes[1].childNodes[0].data;
+	            t.push(t2);
+	        }
+	    }
+	    setLabelObject(t);
+	    canvas.initScreen();
+	    //Debug.write(t);
+	    ]]>
+	</method>
+	
+	<method name="addBrowserTabHistory" args="value">
+	    <![CDATA[
+	    //Debug.write("addBrowserTabHistory: ",value);
+	    _browserhistory.addItem(value);
+	    this.browserTabHistory.push(value);
+	    ]]>
+	</method>
+	  
+	<!---
+	@doc The function does compare the new moderator list with the old and prepares the list 
+		the removeModeratorList is used in the performance optimized user list of the restricted 
+		room type to re-render the list items only if really something has changed in any 
+		of the user list items
+	 -->
+	<method name="analyzeModerationList" args="newList">
+	    <![CDATA[
+	    
+	       canvas.newModeratorList = new Array();
+	       canvas.removeModeratorList = new Array();
+	       
+	       if (canvas.currentModeratorList != null) {
+	           for (var i=0;i<canvas.currentModeratorList.length;i++) {
+	                canvas.currentModeratorList[i].found = false;
+	           }
+	       
+	           for (var i=0;i<canvas.currentModeratorList.length;i++) {
+	                
+	                for (var k=0;k<newList.length;k++) {
+	                    if (newList[k].publicSID == canvas.currentModeratorList[i].publicSID) {
+	                        canvas.currentModeratorList[i].found = true;
+	                    }
+	                }
+	            }
+	        }
+	        
+	        for (var k=0;k<newList.length;k++) {
+	            newList[k].found = false;
+	        }
+	       
+	        for (var k=0;k<newList.length;k++) {
+	        	if (canvas.currentModeratorList != null) {
+	                for (var i=0;i<canvas.currentModeratorList.length;i++) {
+	                    if (newList[k].publicSID == canvas.currentModeratorList[i].publicSID) {
+	                        newList[k].found = true;
+	                    }
+	                }
+	        	}
+	        }
+	        
+	        for (var k=0;k<newList.length;k++) {
+	            if (!newList[k].found) {
+	                canvas.newModeratorList.push(newList[k]);
+	            }
+	        }
+	        
+	        if (canvas.currentModeratorList != null) {
+	            for (var i=0;i<canvas.currentModeratorList.length;i++) {
+	                
+	                if (!canvas.currentModeratorList[i].found) {
+	                    canvas.removeModeratorList.push(canvas.currentModeratorList[i])
+	                }
+	            }
+	        }
+	        
+	        if ($debug) Debug.write("newModeratorList :: ",canvas.newModeratorList);
+	        if ($debug) Debug.write("removeModeratorList :: ",canvas.removeModeratorList);
+	    ]]>
+	</method>
+	
+	<!---
+		Updates the "ismoderator" flag
+		the setAttribute method will broadcast an event to all event listeners that 
+		did subscribe using the "onismoderator" handler with reference to canvas !
+		For example in the userlist's of the roomtypes
+	 -->
+	<method name="updateModerationFlag">
+	    <![CDATA[
+	        if ($debug) Debug.write("updateModerationFlag",canvas.currentModeratorList);
+	        var isCurrentModerator = false;
+	        for (var i=0;i<canvas.currentModeratorList.length;i++) {
+	            var item = canvas.currentModeratorList[i];
+	            if (canvas.publicSID == item.publicSID) {
+	                isCurrentModerator = true;
+	            }
+	        }
+	        
+	        //Only send this event if the current user moderators status changes
+	        if (isCurrentModerator != this.ismoderator) {
+		        canvas.sendViaLocalConnection(canvas.vid_lc_name, "updateModerationFlag", [isCurrentModerator]);
+	        }
+	        
+	        // do always spread this event, we need to broadcast the "onismoderator" event
+	        // so that we can update the status of other users in the user list
+	        this.setAttribute('ismoderator',isCurrentModerator);
+	    ]]>
+	</method> 
+	
+	<!---
+		Checks if a certain publicSID is a moderator
+	 -->
+	<method name="getIsModeratorByPublicSID" args="publicSID">
+	    <![CDATA[
+	        for (var i=0;i<canvas.currentModeratorList.length;i++) {
+	            var item = canvas.currentModeratorList[i];
+	            if (publicSID == item.publicSID) {
+	                return true;
+	            }
+	        }
+	        return false;
+	    ]]>
+	</method>
+	 
+	<!---
+		Sets the flags isAllowedToDraw, isAllowedToScreenShare, isAllowedToRemoteControl 
+		and broadcasts the three rights to SWF10 container
+	 -->
+	<method name="setDrawAllowStatus" args="roomClientObj">
+	    <![CDATA[
+	        if ($debug) Debug.write("drawAllowStatus changes ###### ");
+	        if (roomClientObj.publicSID==canvas.publicSID) {
+	            canvas.setAttribute("isAllowedToDraw",roomClientObj.canDraw);
+	            canvas.setAttribute("isAllowedToScreenShare",roomClientObj.canShare);
+	            canvas.setAttribute("isAllowedToRemoteControl",roomClientObj.canRemote);
+	            canvas.sendViaLocalConnection(canvas.vid_lc_name, "setDrawAllowStatus", [roomClientObj.canDraw, roomClientObj.canShare, roomClientObj.canRemote]);
+	        }
+	    ]]>
+	</method>
+	
+	<!---
+		Sets the flag for the isAllowedToGiveExclusiveAudio status and broadcasts it to the 
+		SWF10 container
+	 -->
+	<method name="setExclusiveAudioAllowStatus" args="roomClientObj">
+	    <![CDATA[
+	        if ($debug) Debug.write("giveExclusiveAudioStatus changes ###### ");
+	        if (roomClientObj.publicSID==canvas.publicSID) {
+	            canvas.setAttribute("isAllowedToGiveExclusiveAudio",roomClientObj.canGiveAudio);
+	            canvas.sendViaLocalConnection(canvas.vid_lc_name, "setExclusiveAudioAllowStatus", [roomClientObj.canGiveAudio]);
+	        }
+	    ]]>
+	</method>
+	
+	<method name="setMuteStatus" args="roomClientObj">
+	    <![CDATA[
+	        if ($debug) Debug.write("setMuteStatus changes ###### ",roomClientObj.micMuted);
+	        //Check for self status
+	        if (roomClientObj.publicSID==canvas.publicSID) {
+	            canvas.setAttribute("micMuted",roomClientObj.micMuted);
+	        }
+	        
+	        canvas._videocontainer.updateMuteStatusVideoView(roomClientObj);
+	        
+	        //Notify all Listeners for change of the item
+	        canvas.setAttribute("micMutedStatusChangedItem",roomClientObj);
+	    ]]>
+	</method>
+	
+	<method name="addFolderSequence" args="foldername">
+	    <![CDATA[
+	    this.uploadmoduleimgfolder = '/';
+	    this.uploadmoduleimgfolder += foldername;
+	    this.setAttribute('uploadmoduleimgfolder',this.uploadmoduleimgfolder);
+	    ]]>
+	</method>
+	    
+	    
+	<!-- country validation -->
+	<method name="validateCountry" args="str">
+	    ////Debug.write("validateCountry: ",str);
+	    str = str.toLowerCase();
+	    <![CDATA[
+	        if (str.length!=0){
+	            var a = new Array();
+	            for (var i=0;i<canvas.statesInitValues.length;i++){
+	                var st = canvas.statesInitValues[i].name.toLowerCase();
+	                if (st.startsWith(str))a.push(canvas.statesInitValues[i]);
+	                //this.addItem(canvas.statesInitValues[i].name,canvas.statesInitValues[i].state_id);
+	            }
+	            return a;
+	        }
+	    ]]> 
+	</method>
+	    
+	<method name="getCountryRecord" args="id">
+	    return canvas.statesInitValues[id];
+	</method>
+	    
+	<handler name="onmousewheeldelta" reference="lz.Keys" args="d">
+	    var obj = getCurrentMouseWheelObject();
+	    ////Debug.write("onmousewheeldelta 12: ",d,obj);
+	    <![CDATA[
+	        if (obj!=null) {
+	            obj.step(-d);
+	        }
+	    ]]>
+	</handler>    
+	
+	<method name="reverseWordingsBySplit" args="str">
+	    <![CDATA[
+	        var words_arr = str.split( " " ); // an array of chars
+	        for ( var i = 0, str = ""; i < words_arr.length; i++ ) // reverse their order
+	        {
+	            str += words_arr[ words_arr.length - i - 1 ];
+	            if (words_arr.length != 1) {
+	                str += " ";
+	            }
+	        }
+	        return str;
+	        
+	    ]]>
+	</method> 
+	
+	<method name="reverseAll" args="str">
+	    <![CDATA[
+	        var words_arr = str.split( "" ); // an array of chars
+	        for ( var i = 0, str = ""; i < words_arr.length; i++ ) // reverse their order
+	        {
+	            str += words_arr[ words_arr.length - i - 1 ];
+	            
+	        }
+	        return str;
+	        
+	    ]]>
+	</method> 
+	    
+	<method name="reverseWords" args="str">
+	    <![CDATA[
+	        if ( str == "" || str == null ) return ""; // undefined
+	        // first char indicates the main directive of str (rtl/ltr)
+	        if ( isLTR( str.charCodeAt( 0 ) ) ) return str; // english or number
+	        var words_arr = str.split( "" ); // an array of chars
+	        for ( var i = 0, str = ""; i < words_arr.length; i++ ) // reverse their order
+	            str += words_arr[ words_arr.length - i - 1 ];
+	        return str;
+	    ]]>
+	</method>
+	    
+	<method name="isLTR" args="c">
+	    <![CDATA[
+	        return ( c >= 48 && c <= 57 || c >= 65 && c <= 90 || c >= 97 && c <= 122 );
+	    ]]>
+	</method>
+	
+	<method name="isHEB" args="c">
+	    <![CDATA[
+	        return ( c >= 224 && c <= 250 );
+	    ]]>
+	</method>    
+	
+	<method name="setTextAlign" args="obj,type">
+	    switch ( type ) {
+	        case "left" :
+	            obj.setX( 0 );
+	        break;
+	        case "center" :
+	            obj.setX( this.parent.width / 2 - this.getTextWidth() / 2 );
+	        break;
+	        case "right" :
+	            obj.setX( this.parent.width - this.getTextWidth() );
+	        break;
+	    }
+	</method>  
+	
+	<method name="initSharedObject">
+	    if (canvas.sharedObject == null) {
+	        if($debug) Debug.write("canvas.initSharedObject sharedObject IS null");
+	        canvas.sharedObject = new lz.sharedObject();
+	        canvas.sharedObject.getLocal('userdata');
+	    }
+	</method>
+	
+	<method name="getUserData">
+	    canvas.initSharedObject();
+	    var g = canvas.sharedObject.getData('userdata');
+	    if (g==null) {
+	        if($debug) Debug.write("sharedObject.getData IS null");
+	        g = new Array();
+	    }
+	    return g;
+	</method>
+	
+	<method name="setUserData" args="g">
+	    canvas.initSharedObject();
+	    canvas.sharedObject.setData('userdata', g);
+	    canvas.sharedObject.flush();
+	</method>
+	
+	<attribute name="regExpCounter" value="0" type="number" />
+	<attribute name="regExpResultArray" value="null" />
+	
+	<method name="doRegExpCheck" args="fieldValue,regExpV">
+		this.regExpCounter = this.regExpCounter +1;
+		canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "regExpTest", [fieldValue, regExpV, this.regExpCounter]);
+		return this.regExpCounter;
+	</method>
+	
+	<method name="regExpResult" args="tId,tResult">
+		if (this.regExpResultArray == null) {
+			this.regExpResultArray = new Array();
+		}
+		this.regExpResultArray[tId] = tResult;
+		if ($debug) Debug.write("regExpResult ",tId,tResult);
+	</method>
+	
+	<method name="checkRegExpResult" args="tId">
+		return this.regExpResultArray[tId];
+	</method>
+	
+	
+	<method name="getThemeImage" args="tName">
+		//if ($debug) Debug.write("load Image by Name: ",tName);
+		var tPath = canvas.mainTheme.getPointer().xpathQuery("theme/resource[@name='"+tName+"']/@src");
+		//if ($debug) Debug.write("tPath "+tPath);
+		if (tPath == null) {
+			if ($debug) Debug.warn("getThemeImage - No Image found for config: ",tName);
+		}
+		return tPath;
+	</method>
+	
+	<method name="getThemeColor" args="tColor">
+		//if ($debug) Debug.write("load Color by Name: ",tColor);
+		var tResColor = canvas.mainTheme.getPointer().xpathQuery("theme/color[@name='"+tColor+"']/@value");
+		//if ($debug) Debug.write("tColor "+tColor);
+		if (tResColor == null) {
+			if ($debug) Debug.warn("getThemeColor - No Color found for config: ",tColor);
+		}
+		return tResColor;
+	</method>
+	
+	<method name="setBaseColors">
+		defaultstyle.setAttribute("basecolor",canvas.getThemeColor('basebgcolorizer'));
+		itemStyle.setAttribute("basecolor",canvas.getThemeColor('basebgcolorizer'));
+		menuStyle.setAttribute("basecolor",canvas.getThemeColor('styleMenuBarBaseColor'));
+		_conferencemenu.setAttribute("bgcolor",canvas.getThemeColor('baseMousecolorizer'));
+		_mainbgcontentNavi.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+		main_content.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+	</method>
+
+	<method name="getPictureUrl" args="pictureuri,extraParams">
+	<![CDATA[
+		var pUri = (pictureuri == null || pictureuri.length == 0) ? "d.jpg" : pictureuri;
+		var downloadurl = pUri;
+		if (!pUri.startsWith("http://") && !pUri.startsWith("https://")) {
+			pUri = "_profile_" + pUri;
+			
+			downloadurl = canvas.getUrl() + 'DownloadHandler?fileName=' + pUri
+				+ '&parentPath=&room_id=&r=' + (new Date()).getTime()
+				+ extraParams + '&sid='+canvas.sessionId;
+		}
+		if($debug) Debug.write("getPictureUrl/downloadurl ", downloadurl);
+		return downloadurl;
+	]]>
+	</method>
+
+	<method name="sendViaLocalConnection" args="lc_name,methodName,tArray">
+		canvas.localConnectionSendQ.push({cName: lc_name, mName: methodName, tArray: tArray});
+	</method>
+	
+	<method name="getNotNullString" args="value">
+		return value == null ? '' : value;
+	</method>
+	
+	<method name="isRemoteUser" args="">
+		return canvas.isinitRoomDirect || canvas.remoteUserLogin || canvas.directUserLogin || canvas.secureRemoteUserLogin;
+	</method>
+</library>
diff --git a/WebContent/src/base/moduleConfiguration.lzx b/WebContent/src/base/moduleConfiguration.lzx
new file mode 100644
index 0000000..bd191eb
--- /dev/null
+++ b/WebContent/src/base/moduleConfiguration.lzx
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<library>
+<!-- 
+##########################################################
+these properties can be overwritten by public/config.xml -->  
+   
+   
+<!-- #############################################
+    Moderator Modules
+ -->
+
+<attribute name="moderatorModuleUser" value="userModerate" type="string" />
+
+<attribute name="moderatorModuleRoom" value="roomModerate" type="string" />
+
+
+<!-- #############################################
+    Conference Room
+ -->
+
+<attribute name="conferenceRoom" value="conferenceView" type="string" />
+
+
+<!-- #############################################
+    Restricted Room
+    
+    Room Layouts: flexibleRestrictedConferenceRoom,restrictedConferenceRoom
+ -->
+<attribute name="restrictedRoomModule" value="restrictedConferenceRoom" type="string" />
+
+<!-- #############################################
+    Custom Room
+ -->
+
+<attribute name="customRoomModule" value="flexibleCustomRoom" type="string" />
+
+<!-- #############################################
+    Event Room
+    
+    Room Layouts: interviewConferenceRoom
+ -->
+<attribute name="interviewRoomModule" value="interviewConferenceRoom" type="string" />
+
+</library>
diff --git a/WebContent/src/base/navi/library.lzx b/WebContent/src/base/navi/library.lzx
new file mode 100644
index 0000000..8d54b39
--- /dev/null
+++ b/WebContent/src/base/navi/library.lzx
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <!-- 
+    Icon from FamFam Icon Set
+     -->
+    <resource name="bullet_arrow_down_rsc">
+    	<frame src="resources/bullet_arrow_down.png" /> 
+    	<frame src="resources/bullet_arrow_down_dark.png" /> 
+    </resource>
+    
+    <include href="mainNavi.lzx" />
+
+</library>
diff --git a/WebContent/src/base/navi/mainNavi.lzx b/WebContent/src/base/navi/mainNavi.lzx
new file mode 100644
index 0000000..48a21b3
--- /dev/null
+++ b/WebContent/src/base/navi/mainNavi.lzx
@@ -0,0 +1,231 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="textBoxSubBlank" extends="text" text="$once{ parent.text }"
+    fgcolor="0x000000" fontstyle="bold"
+        fontsize="14" y="6" x="10" />
+
+
+<class name="baseDropDownMenuListItem" extends="view" height="36">
+
+    <attribute name="action" value="" type="string" />
+    <attribute name="params" value="" type="string" />
+    <attribute name="isopen" value="false" type="boolean" />
+    <attribute name="isleaf" value="false" type="boolean" />
+    <attribute name="list" value="null" />
+    <attribute name="textvalue" value="" type="string" />
+    <attribute name="selected" value="false" type="boolean" />
+    <attribute name="textToolTip" value="" type="string" />
+    
+    <attribute name="isSpacer" value="false" type="boolean" />
+    <attribute name="text" value="" type="string" />
+    
+    <handler name="onmouseover">
+        this._bg.setAttribute("visibility","visible");
+    </handler>
+    
+    <handler name="onmouseout">
+        this._bg.setAttribute("visibility","hidden");
+    </handler>
+
+    <view name="_bg" visibility="hidden" width="${ parent.width-2 }" y="0" x="1"
+          bgcolor="0xFFFFFF" opacity="0.5" height="36" />
+    
+    <text text="$once{ parent.text }" name="_ctext" fontstyle="bold" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }"
+        	fontsize="14" y="2" x="10" />
+        	
+    <text text="$once{ parent.textToolTip }" name="_ctextTooltip" fontstyle="plain" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }"
+        	fontsize="10" y="20" x="10" />	
+   
+</class>
+
+<class name="dropDownMenuListItem" extends="baseDropDownMenuListItem" >
+
+    <handler name="onclick">
+        loadContent(this,null,null);
+        parent.parent.close();
+    </handler>
+    
+</class>
+
+<class name="horizontalDropDownSpacer" x="4" height="1" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }">
+	<attribute name="isSpacer" value="true" type="boolean" />
+</class>
+
+<class name="baseDropDownMenuList" extends="view" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }">
+		
+	<attribute name="list" value="null" />
+	
+	<attribute name="btnRef" value="null" />
+	
+	<handler name="oninit">
+		lz.ModeManager.makeModal(this);
+	</handler>
+	
+	<!--- @keywords private -->
+    <method name="passModeEvent" args="eventStr,view" > 
+        <![CDATA[
+           if ( eventStr == "onmousedown"  ){
+               if ( view != null ) {
+                  if ( !view.childOf(this) ) {
+                       this.close();
+                  }
+               } else {
+                   this.close();
+               }
+           }
+           if (view && view.childOf(this)) {
+               if (view[ eventStr ]) {
+                   view[ eventStr ].sendEvent( view );
+               }
+               return false;
+           }
+          return true;
+       ]]> 
+    </method>  
+    
+	<method name="close">
+		this.btnRef.setAttribute("selected",false);
+		lz.ModeManager.release(this);
+		this.destroy();
+	</method>
+	
+	<method name="fixWidth">
+		<![CDATA[
+            //the second round goes through the list of items, as 
+            //now the maxwidth is detected we adjust the rest to it
+            var maxWidth = 0;
+            for (var i=0;i<this._content.subviews.length;i++) {
+            	if (this._content.subviews[i].width > maxWidth) {
+            		maxWidth = this._content.subviews[i].width;
+            	}
+            }
+            //add a little bit of spacing at the end
+            maxWidth += 10;
+            
+            for (var i=0;i<this._content.subviews.length;i++) {
+            	if (this._content.subviews[i].isSpacer) {
+            		this._content.subviews[i].setAttribute("width",maxWidth-8);
+            	} else {
+            		this._content.subviews[i].setAttribute("width",maxWidth);
+            	}
+            }
+		]]>
+	</method>
+
+</class>
+
+<class name="dropDownMenuList" extends="baseDropDownMenuList"
+		height="${ this._content.height+2 }" width="${ this._content.width+2 }">
+		
+	<handler name="oninit">
+		<![CDATA[
+			if (this.list == null) {
+				return;
+			}
+			for (var i=0;i<this.list.length;i++) {
+				if (i!=0) {
+					new lz.horizontalDropDownSpacer(this._content);
+				}
+                new lz.dropDownMenuListItem(this._content,{
+                			textvalue:this.list[i].name,
+                			text:this.list[i].label.value,
+                			isopen:this.list[i].isopen,
+                			isleaf:this.list[i].isleaf,
+                			action:this.list[i].action,
+                			params:this.list[i].params,
+                			textToolTip:list[i].tooltip.value
+               			});
+            }
+            
+            this.fixWidth();
+		]]>
+	</handler>	
+	
+	<view name="_content" x="1" y="1" 
+			layout="axis:y;spacing:1" bgcolor="$once{ canvas.getThemeColor('menuBackgroundColor') }" />
+		
+</class>
+
+<class name="baseMenuMeetingsItem" extends="view" height="34"
+    width="${ this._ctext.width+36 }" >
+
+    <attribute name="action" value="" type="string" />
+	<attribute name="text" value="" type="string" />
+    <attribute name="textToolTip" value="" type="string" />
+    <attribute name="_menuRef" value="null" />
+    <attribute name="isopen" value="false" type="boolean" />
+    <attribute name="isleaf" value="false" type="boolean" />
+    <attribute name="list" value="null" />
+    <attribute name="textvalue" value="null" />
+    <attribute name="selected" value="false" type="boolean" />
+    
+    <attribute name="text_y_inset" value="6" type="number" />
+    <attribute name="text_fontsize" value="14" type="number" />
+    
+    <attribute name="down_y_inset" value="10" type="number" />
+    
+    <handler name="onmouseover">
+        if (!this.selected){
+            this.bgc.setAttribute('visibility','visible');
+        }
+    </handler>
+    <handler name="onmouseout">
+        if (!this.selected){
+            this.bgc.setAttribute('visibility','hidden');
+        }
+    </handler>
+    
+    <handler name="onselected" args="tSelect">
+    	this.selected = tSelect;
+    	if (tSelect) {
+    		this._icon_down.setAttribute("frame",2);
+    		this.bga.setAttribute("visibility","visible");
+    		this._ctext.setAttribute("fgcolor",0x000088);
+    	} else {
+    		this._icon_down.setAttribute("frame",1);
+    		this.bgc.setAttribute("visibility","hidden");
+    		this.bga.setAttribute("visibility","hidden");
+    		this._ctext.setAttribute("fgcolor",0xFFFFFF);
+    	}
+    </handler>
+    
+    <view width="${ parent.width-1 }" bgcolor="0xFFFFFF" opacity="0.4" height="$once{ parent.height - 2}" y="1"
+        visibility="hidden" name="bgc"/>
+        
+    <view width="${ parent.width-1 }" bgcolor="$once{ canvas.getThemeColor('menuBackgroundColor') }" height="$once{ parent.height }" 
+        visibility="hidden" name="bga">
+        <view width="${ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" />
+    </view>
+    
+    <view name="_icon_down" x="${ parent.width-20 }" y="$once{ parent.down_y_inset }" 
+    			resource="bullet_arrow_down_rsc" frame="1" />  
+    
+    <view width="1" height="${ parent.height }" y="0" bgcolor="0xEEEEEE" x="${ parent.width-1 }" />
+    <text text="$once{ parent.text }" name="_ctext" fontstyle="plain" fgcolor="0xFFFFFF"
+        	fontsize="$once{ parent.text_fontsize }" y="$once{ parent.text_y_inset }" x="10" />
+
+    <labelTooltip name="_textToolTip" text="$once{ parent.textToolTip }" multiline="false" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/base/navi/resources/bullet_arrow_down.png b/WebContent/src/base/navi/resources/bullet_arrow_down.png
new file mode 100644
index 0000000..9b23c06
--- /dev/null
+++ b/WebContent/src/base/navi/resources/bullet_arrow_down.png
Binary files differ
diff --git a/WebContent/src/base/navi/resources/bullet_arrow_down_dark.png b/WebContent/src/base/navi/resources/bullet_arrow_down_dark.png
new file mode 100644
index 0000000..b5504f8
--- /dev/null
+++ b/WebContent/src/base/navi/resources/bullet_arrow_down_dark.png
Binary files differ
diff --git a/WebContent/src/base/remote/datasetHelper.lzx b/WebContent/src/base/remote/datasetHelper.lzx
new file mode 100644
index 0000000..5d7cf22
--- /dev/null
+++ b/WebContent/src/base/remote/datasetHelper.lzx
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+	<class name="datasetHelper">

+		<attribute name="successHandler" type="object" />

+		

+		<dataset name="restdataset" type="http">

+			<handler name="ondata" args="d">

+			<![CDATA[

+				//Make sure any cursor status is reset

+				lz.Cursor.restoreCursor();

+				lz.Cursor.showHandCursor(true);

+				if ($debug) Debug.write("restdataset ondata", d);

+				

+				if (typeof parent.successHandler != undefined && parent.successHandler != undefined && parent.successHandler != null) {

+					parent.successHandler(parent.parent, d);

+				}

+			]]>

+			</handler>

+		</dataset>

+		

+		<method name="call">

+			if ($debug) Debug.write("this.restdataset ",this.restdataset);

+			this.restdataset.doRequest();

+		</method>

+		

+		<method name="setServiceSource" args="m,o">

+		<![CDATA[

+			var params = "?SID=" + canvas.sessionId;

+			if (o) {

+				for (var key in o) {

+					params += "&" + encodeURIComponent(key) + "=" + encodeURIComponent(o[key]);

+				}

+			}

+			this.restdataset.setAttribute("src", canvas.getServicesUrl() + m + params);

+		]]>

+		</method>

+	</class> 

+</library>
\ No newline at end of file
diff --git a/WebContent/src/base/remote/library.lzx b/WebContent/src/base/remote/library.lzx
new file mode 100644
index 0000000..e76368e
--- /dev/null
+++ b/WebContent/src/base/remote/library.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<include href="datasetHelper.lzx" />
+	<include href="rtmpConnection.lzx" />
+	<include href="sharedObject.lzx" />
+    
+</library>
diff --git a/WebContent/src/base/remote/rtmpConnection.lzx b/WebContent/src/base/remote/rtmpConnection.lzx
new file mode 100644
index 0000000..120c3b8
--- /dev/null
+++ b/WebContent/src/base/remote/rtmpConnection.lzx
@@ -0,0 +1,334 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<class name="rtmpConnection" extends="node">
+    	
+    	<attribute name="debug" value="false" type="boolean" />
+    	
+    	<event name="onconnect"/>
+    	<event name="onerror"/>
+    	<event name="ondisconnect" />
+        
+        <!-- this attribute holds a reference to the current/last called netremoteCall,
+        in case of error you can debug that way which call did fail -->
+        <attribute name="lastCalled" value="null" />
+    	
+    	<attribute name="src" value="" type="string"/>
+    	
+		<method name="connect">
+            this._nc = new NetConnection();
+
+            // local reference to rtmpconnection
+            this._nc.t = this;     
+            
+            this._nc.proxyType = canvas.proxyType;
+            
+            var ok = this._nc.connect(src == "null" ? null : src, false); //isAVClient = false
+            if (this.debug) {
+            	if($debug) Debug.write("*** debug ***");
+            }
+            
+            //canvas.currentNC is the reference to the NetConnection that is used in the NetStream
+            canvas.currentNC = this._nc;
+            
+            this._nc.onStatus = function(info){
+                this.t._onStatus(info);
+            }
+            
+    		if($debug) Debug.write("devRtmpConnection/registerMethods()");
+			//Register Methods
+			this.registerMethods();    	            
+		</method>
+		
+        <method name="_onStatus" args="info"><![CDATA[
+            if (this.debug) {
+                Debug.write("devrtmpconnection", this, "_onStatus", info.code);
+            }
+
+            var msg = "";
+
+            switch (info.code) {
+
+                case "NetConnection.Connect.Success": {
+                    // The connection attempt succeeded.
+                    msg = info.code;
+                    s = 2;
+                    break;
+                }
+
+                default: {
+                    msg = info.code;
+                    s = 0;
+                    break;
+                }
+
+            }
+
+            this.setAttribute("status", msg);
+
+            if (s == 2) {
+                this.onconnect.sendEvent();
+            } else {
+            	this.onerror.sendEvent();
+            }
+
+          ]]>
+        </method>	
+        
+        <method name="disconnect">
+            this.ondisconnect.sendEvent();
+        	canvas.currentNC = null;
+            this._nc.close();
+        </method>
+    <!--- 
+        With this function all methods are registered to the NetConnection
+        A server can invoke this Method with a call for it from the Client
+        Only subnodes of rtmpconnections which are a instance of netRemoteCallHib
+        are registered, to add dynamically methods to the remotefunction you will
+        have to invoke this method once again
+        -swagner
+     -->
+	<method name="registerMethods">
+	<![CDATA[
+		if (this.subnodes != null) {
+			//Register all methods which are instanceof netRemoteCallHib
+			for (var i = 0; i < this.subnodes.length; ++i) {
+				//If it is of Type netRemoteCallHib then register it to the NetConnection
+				if (this.subnodes[i] instanceof lz.netRemoteCallHib) {
+					this._nc[this.subnodes[i].funcname] = function(args) {
+						return hib.remoteCallMethod(arguments.callee, arguments);
+					}
+				}
+			}
+		}
+	]]>
+	</method>
+    
+    <!-- 
+        Process the RemoteCall to the Right Funtion
+        -swagner
+     -->
+    <method name="remoteCallMethod" args="callee,args">
+        <![CDATA[
+            for (var eg in this._nc){
+                if (this._nc[eg]==callee){
+                    if (this.debug) {
+                        //_root.Debug.write.write("DEBUG invoked a function remotely: ",eg,args);
+                    }    
+                    if (args.length == 1) {
+                        return this.callFuntion(eg,args[0]);
+                    } else {
+                        return this.callFuntion(eg,args);
+                    }
+                    //return this.callFuntion(eg,args);
+                }
+            }
+        ]]>
+    </method>
+    
+    <!-- 
+        Map the Function to a netRemoteCallHib
+        -swagner
+     -->
+    <method name="callFuntion" args="funcname,args">
+        <![CDATA[
+            for (var i=0;i<this.subnodes.length;i++){
+                if (this.subnodes[i].funcname==funcname){
+                    return this.subnodes[i].onResult(args);
+                }
+            }
+        ]]>
+    </method>		
+    
+    <method name="callRPC" args="func, obj, params">
+    	if (this.debug) Debug.write("*** call: func, obj, params",func,obj, typeof (params) ,params.length);
+    	if (params.length != 0){
+	    	//does this really work?
+	    	ASSetPropFlags(_global, null, 8, 1);
+	    	//Debug.write("does it work?",arguments);
+	    	<!--
+	    	this._nc.call.apply(this._nc,arguments);
+	    	 -->
+			if (params.length==1){
+			    this._nc.call(func, obj,params[0]);
+			} else if (params.length==2){
+			    this._nc.call(func, obj,params[0],params[1]);
+			} else if (params.length==3){
+			    this._nc.call(func, obj,params[0],params[1],params[2]);
+			} else if (params.length==4){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3]);
+			} else if (params.length==5){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4]);
+			} else if (params.length==6){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5]);
+			} else if (params.length==7){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6]);
+			} else if (params.length==8){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7]);
+			} else if (params.length==9){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8]);
+			} else if (params.length==10){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9]);
+			} else if (params.length==11){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10]);
+			} else if (params.length==12){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11]);
+			} else if (params.length==13){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12]);
+			} else if (params.length==14){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13]);
+			} else if (params.length==15){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14]);
+			} else if (params.length==16){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15]);
+			} else if (params.length==17){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16]);
+			} else if (params.length==18){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16],params[17]);
+			} else if (params.length==19){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16],params[17],params[18]);
+			} else if (params.length==20){
+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16],params[17],params[18],params[19]);
+			}	    	 
+        } else {
+            this._nc.call(func, obj);
+        }
+    </method>
+    
+</class>
+
+
+    <!---
+        Net remote call. 
+        @todo Document netremotecall class.
+    -->
+    <class name="netremotecall" extends="node">
+
+
+        <!--- Name of the remote function. -->
+        <attribute name="funcname" value="$once{null}" type="string" />
+    
+        <attribute name="remotecontext" value="null" />
+    
+        <attribute name="dataobject" value="null" />
+		
+        <!--- Data handling event. args="value" 
+        @keywords private  -->
+        <event name="ondata" />
+
+        <!--- Error handling event. -->
+        <event name="onerror"/>
+
+        <!--- Call the remote method, passing the array of params. -->
+        <method name="callRPC" args="params"><![CDATA[
+            if (this.funcname == null) {
+                //Debug.write("No funcname given");
+                if (this.onerror) this.onerror.sendEvent("No funcname given");
+                return;
+            }
+
+            if (params == null) {
+                params = [];
+
+                var subnodes = this.subnodes;
+                if (subnodes != null) {
+                    var i;
+                    var n = subnodes.length;
+                    for (i = 0; i < n; i++) {
+                        // If getValue method is declared in param, call that
+                        // instead to get value.
+                        var tsi = subnodes[i];
+                        if ((tsi["getValue"] != null) && 
+                            (tsi.getValue["prototype"] != null)) {
+                            params[i] = tsi.getValue();
+                        } else {
+                            params[i] = tsi.value;
+                        }
+                    }
+                }
+
+            } else if (params.__proto__ != Array.prototype) {
+                //Debug.write(this.name, "error: first argument (params) is not an array");
+                return -1;
+            }
+
+            //if ($debug) Debug.write("call", this, this.parent, this.parent.status);
+            var rtmpObject = null;
+            if (this.parent instanceof lz.rtmpConnection){
+        	    rtmpObject = this.parent;
+            } else if(this.remotecontext  instanceof lz.rtmpConnection){
+        	    rtmpObject = this.remotecontext;
+            } else {
+        	    if ($debug) Debug.warn("ERROR: no remotecontext availible abort call", this.funcname, this);
+        	    return;
+            }
+        	//Debug.write('call', this, rtmpObject, rtmpObject.status);
+        	//Debug.write('call', this.remotecontext);
+            if (rtmpObject.debug) Debug.write('call', this, rtmpObject, rtmpObject.status);
+            rtmpObject.lastCalled = this;
+            rtmpObject.callRPC(this.funcname, this, params);
+
+          ]]>
+        </method>
+
+
+        <!--- Handle the result returned from the remote method. -->
+        <method name="onResult" args="value"><![CDATA[
+            // Can be overriden.
+            // Would be great if it can be used with dataobject,
+            // but I don't know how to convert Array/primitive to LzDataset/LzDataPointer.
+            ////Debug.write("netremotecall", this, "onResult", value);
+
+            if (this.dataobject!=null) {
+                if ( this.dataobject instanceof LzDataset ) {
+                    //Debug.write("onResult: ",this,value,dataobject);
+                    var element = LzDataElement.valueToElement(value);
+                    this.dataobject.setData(element.childNodes);
+                } else if ( this.dataobject instanceof LzDataElement ) {
+                    var element = LzDataElement.valueToElement(value);
+                    this.dataobject.appendChild( element );
+                } else {
+                    Debug.warn("dataobject is not LzDataset or LzDataElement: ",this,this.dataobject,delegate);
+                }
+            }
+            this.ondata.sendEvent(value);		
+          ]]>
+        </method>
+
+
+    </class>
+
+
+    <!---
+        Net parameter.
+        Element to use inside netremotecall.
+        @todo Document netparam class.
+    -->
+    <class name="netparam" extends="node">
+
+        <!--- The value of the netparam. -->
+        <attribute name="value" value="null"/>
+
+    </class>
+
+
+</library>
diff --git a/WebContent/src/base/remote/sharedObject.lzx b/WebContent/src/base/remote/sharedObject.lzx
new file mode 100644
index 0000000..36da568
--- /dev/null
+++ b/WebContent/src/base/remote/sharedObject.lzx
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="sharedObject" extends="node">
+
+	<attribute name="so" value="null" />
+	<attribute name="onStatus" value="null" />
+	
+
+	<method name="connect" args="so_Name,nc,persistant">
+
+		//Debug.write("connect SharedObject: ",nc.uri);
+		this.so = SharedObject.getRemote(so_Name,nc.uri,persistant); 
+		
+		var t = this;
+		this.so.onSync = function (evtObj){
+			if (t.onStatus)t.onStatus.sendEvent(evtObj);
+			//_root.Debug.write.write("Shared Object onSync",evtObj,arguments);
+		}
+		
+		this.so.connect(nc);
+		
+	</method>
+	
+    
+    <method name="getRemote" args="so_Name,nc,persistant">
+
+        //Debug.write("connect SharedObject: ",nc.uri);
+        this.so = SharedObject.getRemote(so_Name,nc.uri,persistant); 
+
+        var t = this;
+        this.so.onSync = function (evtObj){
+            if (t.onStatus)t.onStatus.sendEvent(evtObj);
+            //_root.Debug.write.write("Shared Object onSync",evtObj,arguments);
+        }
+    </method>
+    
+    <!--- create Object if not existing  -->
+    <method name="getLocal" args="name">
+
+        this.so = SharedObject.getLocal(name); 
+
+        var t = this;
+        this.so.onSync = function (evtObj){
+            if (t.onStatus)t.onStatus.sendEvent(evtObj);
+            //_root.Debug.write.write("Shared Object onSync",evtObj,arguments);
+        }
+        
+    </method>
+    
+    <!--- 
+        force write to disk
+        @return true(success) false(User has forbidden to store data local)
+      -->
+    <method name="flush">
+        return this.so.flush();
+    </method>
+
+    <method name="getData" args="key">
+        if (this.so.data["key"] == undefined){
+            return null;
+           //_root.Debug.write.write("key undefined",key);
+        } else {
+            return this.so.data["key"];
+        }
+    </method>
+	
+    <method name="setData" args="key,val">
+    	//Debug.write("this...... so: ",this.so);
+        this.so.data["key"] = val;
+    </method>
+
+		
+</class>
+
+</library>
diff --git a/WebContent/src/broadcast.lzx.lzr=swf8.swf b/WebContent/src/broadcast.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..95cdc24
--- /dev/null
+++ b/WebContent/src/broadcast.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/classintro.swf b/WebContent/src/classintro.swf
new file mode 100644
index 0000000..0d0ee92
--- /dev/null
+++ b/WebContent/src/classintro.swf
Binary files differ
diff --git a/WebContent/src/confintro.swf b/WebContent/src/confintro.swf
new file mode 100644
index 0000000..6b4505c
--- /dev/null
+++ b/WebContent/src/confintro.swf
Binary files differ
diff --git a/WebContent/src/main.lzx b/WebContent/src/main.lzx
new file mode 100644
index 0000000..06d727f
--- /dev/null
+++ b/WebContent/src/main.lzx
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas width="100%" height="100%" title="OpenMeetings">
+<switch>
+	<when property="$debug">
+		<method name="doDebugInit">
+			canvas.setAttribute('debug', true);
+		</method>
+		<debug fontsize="11" oninit="Debug.showInternalProperties = true" width="40%" y="50%" x="0" height="50%" />
+	</when>
+	<otherwise>
+		<method name="doDebugInit">
+		</method>
+	</otherwise>
+</switch>    
+     
+<include href="incubator/lzcombobox.lzx" />
+<include href="incubator/shadowbox.lzx" />
+
+<include href="resources/" /> 
+<include href="base/" /><!-- attributes,methods,datasets,are moved into /base -->
+<include href="modules/" />
+<include href="plugins/" />  
+
+<silverstyle name="defaultstyle" isdefault="true" canvascolor="white" />
+
+<silverstyle name="componentStyle" basecolor="0xFFFFFF" textcolor="0x000000" />
+
+<silverstyle name="itemStyle" textcolor="0xFFFFFF" />
+
+<whitestyle name="menuStyle" textcolor="0x000000" />
+<attribute name="localConnectionSendQ" type="object" value="null" />
+<attribute name="localConnectionQProcessorDelegate" type="object" value="null"/>
+
+	<!-- main colors: 264269 -->
+	<handler name="oninit">
+		flash.external.ExternalInterface.call("loadingComplete");
+		doDebugInit();
+		var cmenu = new LzContextMenu();
+		canvas.setDefaultContextMenu(cmenu);
+		cmenu.hideBuiltInItems();
+		if($debug) Debug.write("main.lzx/oninit:",this);
+		canvas.lc = new LocalConnection();
+		localConnectionSendQ = new Array();
+		if($debug) Debug.write("canvas.lc: ", canvas.lc);
+		localConnectionQProcessorDelegate = new LzDelegate(parent, "processLocalQ");
+		lz.Timer.addTimer(localConnectionQProcessorDelegate, 0);
+		canvas.lc.onStatus = function(obj:flash.events.StatusEvent) {
+			if (obj.level == 'error') {
+				if($debug) Debug.warn("LocalConnection:: error while sending ", obj);
+			} else {
+				var sm = localConnectionSendQ.shift();
+				if (sm) {
+					realSendViaLocalConnection(sm.cName, sm.mName, sm.tArray);
+				} else {
+					lz.Timer.resetTimer(localConnectionQProcessorDelegate, 100);
+				}
+			}
+		}
+	
+		getTimeZoneOffset(this);
+	</handler>
+	
+	<method name="processLocalQ" args="none">
+	<![CDATA[
+		//if ($debug) Debug.info("  ::processLocalQ !!!!! ");
+		if (localConnectionSendQ.length > 0) {
+			var sm = localConnectionSendQ.shift();
+			realSendViaLocalConnection(sm.cName, sm.mName, sm.tArray);
+		} else {
+			lz.Timer.resetTimer(localConnectionQProcessorDelegate, 100);
+		}
+	]]>
+	</method>
+
+	<method name="realSendViaLocalConnection" args="lc_name,methodName,tArray">
+	<![CDATA[
+		var so:SharedObject = SharedObject.getLocal("__getObjectSizeHelper");
+		so.data.o = tArray;
+		var size:Number = so.getSize();
+		so.clear();
+		if (size > 10000 && size < 30001) {
+			if ($debug) Debug.warn("Too big object being sent via localConnection::10K warn ", size); //,tArray
+		} else if (size > 30000) {
+			if ($debug) Debug.error("Too big object being sent via localConnection ", size); //,tArray
+			return;
+		}
+		if ($debug) Debug.info("sendViaLocalConnection ", lc_name, methodName, size); //,tArray
+		try{
+			if (tArray == null || tArray.length == 0) {
+				canvas.lc.send(lc_name,methodName);
+			} else if (tArray.length == 1) {
+				canvas.lc.send(lc_name,methodName,tArray[0]);
+			} else if (tArray.length == 2) {
+				canvas.lc.send(lc_name,methodName,tArray[0],tArray[1]);
+			} else if (tArray.length == 3) {
+				canvas.lc.send(lc_name,methodName,tArray[0],tArray[1],tArray[2]);
+			} else if (tArray.length == 4) {
+				canvas.lc.send(lc_name,methodName,tArray[0],tArray[1],tArray[2],tArray[3]);
+			} else if (tArray.length == 5) {
+				canvas.lc.send(lc_name,methodName,tArray[0],tArray[1],tArray[2],tArray[3],tArray[4]);
+			} else if (tArray.length == 6) {
+				canvas.lc.send(lc_name,methodName,tArray[0],tArray[1],tArray[2],tArray[3],tArray[4],tArray[5]);
+			} else if (tArray.length == 7) {
+				canvas.lc.send(lc_name,methodName,tArray[0],tArray[1],tArray[2],tArray[3],tArray[4],tArray[5],tArray[6]);
+			} else if (tArray.length == 8) {
+				canvas.lc.send(lc_name,methodName,tArray[0],tArray[1],tArray[2],tArray[3],tArray[4],tArray[5],tArray[6],tArray[7]);
+			} else if (tArray.length == 9) {
+				canvas.lc.send(lc_name,methodName,tArray[0],tArray[1],tArray[2],tArray[3],tArray[4],tArray[5],tArray[6],tArray[7],tArray[8]);
+			} else if (tArray.length == 10) {
+				canvas.lc.send(lc_name,methodName,tArray[0],tArray[1],tArray[2],tArray[3],tArray[4],tArray[5],tArray[6],tArray[7],tArray[8],tArray[9]);
+			} else {
+				if ($debug) Debug.error("tArray in sendViaLocalConnection longer then allowed")
+			}
+		} catch(e:Error) {
+			if ($debug) Debug.error("Error while sending ", e);
+		}
+	]]>
+	</method>
+
+<handler name="onerror" args="errmsg">
+	canvas.remoteLogWrite("error " + errmsg);
+</handler>
+
+<method name="callback" args="returnValue">
+    if ($debug) Debug.write("getTimeZoneOffset callback ",returnValue);
+            
+    canvas.stdTimeOffset = Number(returnValue);
+</method>
+
+<!-- View for Contents. All Windows will be loaded on this view. -->
+<view name="main_content" y="${ canvas.naviHeightDelta }" width="${canvas.width}" 
+			    height="${ canvas.height-canvas.naviHeightDelta }"
+			    visibility="hidden" showhandcursor="false">
+    
+    <handler name="onmouseover">
+        setCurrentMouseWheelObject(this._scrollbar);
+    </handler>
+    <handler name="onmouseout">
+        disableCurrentMouseWheelObject();
+    </handler>
+    
+    <view x="0" name="_content" >
+        <view name="inner" />
+        <method name="clearAll">
+            <![CDATA[
+                canvas.sendViaLocalConnection(canvas.vid_lc_name, "clearAll", null);
+                if($debug) Debug.write("main.lzx/main_content._content.inner.clearAll(): ",this.inner,this.inner.subviews.length);
+                if (this.inner.subviews != null) {
+                	if (this.inner.subviews[0] != null) {
+		                var baseContent = this.inner.subviews[0].close();
+		                for (var eg in this.inner.subviews) {
+		                    if($debug) Debug.write("main.lzx/main_content._content.inner.clearAll()-subviews: ",this.inner.subviews[eg]);
+		                    if (eg!=0) this.inner.subviews[eg].close();               
+		                }
+	                }
+                }
+                return baseContent;
+            ]]>
+        </method>
+    </view>
+    <om_hscrollbar name="_scrollbarH" id="_mainScrollHBar" visibility="hidden" />
+    <om_vscrollbar name="_scrollbar" id="_mainScrollBar" />
+</view>  
+  
+<!-- View for Navigation-bar and App-name -->
+<view name="_mainbgcontentNavi" x="0" y="0" clip="true"
+    width="100%" height="${ canvas.naviHeight }" visibility="hidden">
+    <image id="mainApplogo" visible="false" />
+    <text id="mainBaseText" visible="false"
+        fgcolor="${ canvas.fontColorHeader }" fontsize="20" fontstyle="bold">
+        <method name="setShadow" >
+            <![CDATA[
+            if (this.isinited && false){
+                this.normalMC = this.getDisplayObject();
+                this.displacementMap = new flash.filters.DropShadowFilter();
+                this.normalMC.filters = [this.displacementMap];
+            }
+            ]]>              
+        </method> 
+        <handler name="onclick">
+            lz.Browser.loadURL(canvas.currentappnameurl,"_blank");
+        </handler>  
+        <labelTooltip id="mainBaseTextLabel" />      
+    </text>
+    <handler name="oninit">
+        var cmenu = new LzContextMenu();
+        this.setContextMenu(cmenu);
+        cmenu.hideBuiltInItems();
+    </handler>     
+</view>
+
+<!-- View for Conference menu bar at the top side. Visible on conference -->
+<view name="_conferencemenu" y="0" x="0" width="100%" height="20" visibility="hidden" > 
+    <method name="removeAll">
+        <![CDATA[
+            if($debug) Debug.write("main.lzx/_coferencemenu.removeAll(): ");
+            while (this.subviews.length > 0) {
+                this.subviews[0].destroy();
+            }
+            parent._moderatormenu.removeAll();
+        ]]>
+    </method>
+</view> 
+
+<view name="_moderatormenu" y="0" x="0" width="100%" height="20">
+    <method name="removeAll">
+        <![CDATA[
+            if($debug) Debug.write("main.lzx/_moderatormenu.removeAll(): ");
+            while (this.subviews.length > 0) {
+                this.subviews[0].destroy();
+            }
+        ]]>
+    </method>
+</view>  
+    
+<!-- View for "Loading" -->
+<view name="_loadingAll" visible="false" opacity="0.7" 
+    width="${ canvas.width }" height="${ canvas.height }" 
+    bgcolor="0xFFFFFF" clickable="true" showhandcursor="false">
+    <method name="hideContentOnly">
+    	this.showLoadingAnni.setAttribute('started', true);
+        this.setAttribute("visibility","visible");
+        this._text.setAttribute("visibility","hidden");
+    </method>
+    <method name="showLoading">
+    	this.showLoadingAnni.setAttribute('started', true);
+        this.setAttribute("visibility","visible");
+        this._text.setAttribute("visibility","visible");
+    </method>
+    <method name="hideLoading">
+        this.setAttribute("visibility","hidden");
+    </method>
+    <animator name="showLoadingAnni" attribute="opacity" 
+    		from="0" to="0.7" started="false" duration="250" />
+    <text name="_text" align="right" y="56" fontsize="14" fgcolor="red">Loading...</text>
+</view>
+
+</canvas>
\ No newline at end of file
diff --git a/WebContent/src/modules/chat/chatBarMenu.lzx b/WebContent/src/modules/chat/chatBarMenu.lzx
new file mode 100644
index 0000000..92f2f30
--- /dev/null
+++ b/WebContent/src/modules/chat/chatBarMenu.lzx
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="chatBarMenu" extends="view" width="${ parent.width }" x="0" 

+    height="20" layout="axis:x;spacing:1;inset:2" bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }">

+    

+    <attribute name="staticwidth" type="number" value="120" />

+    <attribute name="currentBtn" value="null" />

+    

+    <event name="onRemoveWindow" />

+    

+    <method name="getCurrentSize">

+        <![CDATA[

+            if ( ((this.subviews.length+1)*(this.staticwidth+1)) <= this.width) {

+                return this.staticwidth;

+            } else {

+                var newwidth = Math.round((this.width-this.subviews.length)/(this.subviews.length+1));

+                for (var i=0;i<this.subviews.length;i++) {

+                    this.subviews[i].setAttribute('width',newwidth);

+                }

+                return newwidth;

+            }   

+        ]]>

+    </method>

+    

+    <handler name="onwidth">

+        <![CDATA[

+            if ( ((this.subviews.length)*(this.staticwidth+1)) <= this.width) {

+                for (var i=0;i<this.subviews.length;i++) {

+                    this.subviews[i].setAttribute('width',this.staticwidth);

+                }

+            } else {

+                var newwidth = Math.round((this.width-this.subviews.length)/(this.subviews.length));

+                for (var i=0;i<this.subviews.length;i++) {

+                    this.subviews[i].setAttribute('width',newwidth);

+                }

+            } 

+        ]]>

+    </handler>

+    

+    <method name="removeObject" args="btn">

+    	this.removeObjectSynced(btn);

+    	if ($debug) Debug.write("removeObject :: ",btn);

+    	this.onRemoveWindow.sendEvent(btn.objRef.refObj.publicSID);

+    </method>

+    

+    <method name="removeObjectSynced" args="btn">

+    	var removeCurrent = false;

+    	if (this.currentBtn == btn){

+    		removeCurrent = true;

+    	}

+    	btn.objRef.destroy();

+        btn.destroy();

+        if (this.subviews.length != 0) {

+	        if (removeCurrent) {

+	        	this.sendActiveWindowSynced(this.subviews[this.subviews.length-1]);

+	        }

+        }

+        

+    </method>

+

+    

+    <method name="sendActiveWindow" args="btn,win">

+        if ($debug) Debug.write("sendActiveWindow: ", btn, win);

+        this.sendActiveWindowSynced(btn);

+    </method>

+    

+    <method name="sendActiveWindowSynced" args="btn">

+    	<![CDATA[

+            if (this.currentBtn != null){

+                this.currentBtn.isactive=false;

+                this.currentBtn.objRef.setAttribute("visibility", "hidden");

+                if ($debug) Debug.write("sendActiveWindow1: ",this.currentBtn);

+                this.currentBtn._minimizebtn_mo.setAttribute('visibility','hidden');

+                this.currentBtn._minimizebtn_dn.setAttribute('visibility','hidden');

+            }

+            this.currentBtn = btn;

+            this.currentBtn.objRef.setAttribute("visibility","visible");

+        	this.currentBtn.objRef.bringToFront();

+            if ($debug)  //Debug.write("sendActiveWindow2: ",this.currentBtn);

+            this.currentBtn._minimizebtn_mo.setAttribute('visibility','hidden');

+            this.currentBtn._minimizebtn_dn.setAttribute('visibility','visible');

+            this.currentBtn.isactive=true;

+	       	this.currentBtn.objRef.sendActiveWindow();

+        ]]>

+    </method>

+    

+</class>

+

+</library>

diff --git a/WebContent/src/modules/chat/chatMiniButton.lzx b/WebContent/src/modules/chat/chatMiniButton.lzx
new file mode 100644
index 0000000..10e1bee
--- /dev/null
+++ b/WebContent/src/modules/chat/chatMiniButton.lzx
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="chatMiniButton" extends="view" width="250" height="18" y="2"

+    bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">

+     

+    <attribute name="btnName" value="" type="string" />

+    <attribute name="objRef" value="null" />

+

+    <attribute name="zielx" value="200" type="number" />

+    <attribute name="zielwidth" value="100" type="number" />    

+    

+    <attribute name="isactive" value="true" type="boolean" />

+    

+    <attribute name="isHidden" value="false" type="boolean" />

+    

+    <attribute name="isClosable" value="true" type="boolean" />

+    

+    <handler name="oninit">

+        this.calcTextWidth();

+        parent.onwidth.sendEvent();

+    </handler>

+    

+    <handler name="onwidth">

+        if (this.isinited){

+            this.calcTextWidth();

+        }

+    </handler>

+    

+    <method name="disableItem">

+        //if ($debug) Debug.write("disableItem :: set visibility to hidden");

+        this.isHidden = true;

+        this.setAttribute("visibility","hidden");

+        //this.destroy();

+    </method>

+    

+    <method name="enableItem">

+        this.setAttribute("visibility","visible");

+        this.isHidden = false;

+    </method>

+    

+    <method name="calcTextWidth">

+        <![CDATA[

+            if (this.isHidden) {

+                return;

+            }

+            ////////if ($debug)  //Debug.write(this,this._text,this._text.getTextWidth());

+            if (this._text.getTextWidth()>(this.width-24)) {

+                this._long.setAttribute('visibility','visible');

+                this._text.setAttribute('width',this.width-26);

+            } else {

+                this._long.setAttribute('visibility','hidden');

+                this._text.setAttribute('width',this.width-18);

+            }

+        ]]>        

+    </method>

+        

+    <handler name="onclick">

+        if (this.isHidden) {

+            return;

+        }

+        this._minimizebtn_mo.setAttribute('visibility','visible');

+        this._minimizebtn_dn.setAttribute('visibility','hidden');

+        if ($debug) Debug.write(" :: onclick :: ");

+        this.sendActiveWindow(this.objRef);

+    </handler>

+    

+    <handler name="onmouseover">

+        if (this.isHidden) {

+            return;

+        }

+        this._minimizebtn_mo.setAttribute('visibility','visible');

+        this._minimizebtn_dn.setAttribute('visibility','hidden');

+    </handler>

+    <handler name="onmouseout">

+        if (this.isHidden) {

+            return;

+        }

+        if (this.isactive) {

+            this._minimizebtn_mo.setAttribute('visibility','hidden');

+            this._minimizebtn_dn.setAttribute('visibility','visible');

+        } else {

+            this._minimizebtn_mo.setAttribute('visibility','hidden');

+            this._minimizebtn_dn.setAttribute('visibility','hidden');

+        }        

+    </handler>

+    <handler name="onmousedown">

+        if (this.isHidden) {

+            return;

+        }        

+        this._minimizebtn_mo.setAttribute('visibility','hidden');

+        this._minimizebtn_dn.setAttribute('visibility','visible');

+    </handler>

+    <handler name="onmouseup">

+        if (this.isHidden) {

+            return;

+        }        

+        this._minimizebtn_mo.setAttribute('visibility','visible');

+        this._minimizebtn_dn.setAttribute('visibility','hidden');

+    </handler>

+    

+    <method name="sendActiveWindow" args="win">

+        this.parent.sendActiveWindow(this,win);

+    </method>    

+

+	<method name="activateSynced">

+		this.parent.sendActiveWindowSynced(this,win);

+	</method>

+    

+    <view name="_minimizebtn_mo" width="${ parent.width-2 }" height="16"

+        bgcolor="0xFFFFFF" opacity="0.3" visibility="hidden" x="1" y="1" />

+

+    <view name="_minimizebtn_dn" width="${ parent.width-2 }" height="16"

+        bgcolor="0x000000" opacity="0.3" visibility="hidden" x="1" y="1" />

+    

+

+    <text text="${ parent.btnName }" fgcolor="0xFFFFFF" resize="false" 

+        x="1" fontsize="10" name="_text" />

+    

+        <view y="1" x="${ parent.width-18 }" name="_close"

+            resource="btn_presenter_close"

+            visible="$once{ parent.isClosable }" 

+            onmouseover="this.setAttribute('frame',2)"

+            onmouseout="this.setAttribute('frame',1)"

+            onmousedown="this.setAttribute('frame',3)"

+            onmouseup="this.setAttribute('frame',1)" >

+            <handler name="onclick">

+                this.setAttribute('frame',2);

+                new lz.confirmationSingle(canvas,{

+                           refObj:this,

+                           labeliderror:1497,

+                           showCheckBox:false

+                        });

+            </handler>

+            <method name="sendConfirmation" args="bool,askAgain">

+                if (bool) {

+                    this.parent.parent.removeObject(this.parent);

+                }

+            </method>

+            <method name="sendNoConfirmation">

+            	

+            </method>

+            <labelTooltip text="close" />

+        </view>     

+ 

+    <text y="1" name="_long" text="..." 

+        x="${ parent.width-28 }" fontsize="10" />

+

+    <labelTooltip text="${ parent.btnName }" />

+</class>

+

+</library>

diff --git a/WebContent/src/modules/chat/chatParticipants.lzx b/WebContent/src/modules/chat/chatParticipants.lzx
new file mode 100644
index 0000000..8a3d179
--- /dev/null
+++ b/WebContent/src/modules/chat/chatParticipants.lzx
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<!--- it shows chat participants. -->
+<class name="chatParticipants" extends="view" height="40" clickable="true"
+	   width="$once{ parent.width }" bgcolor="$once{ canvas.bgColorMenuItems }">
+	
+	<attribute name="user_id" value="0" type="number" />
+	<attribute name="username" value="" type="string" />
+	<attribute name="connectedSince" value="" type="string" />
+	<attribute name="publicSID" value="" type="string" />
+	
+	<attribute name="picture_uri" value="" type="string"/>
+	
+	<handler name="oninit">
+		<![CDATA[
+			if($debug) Debug.write("chatParticipants/picture_uri: ",this.picture_uri);
+            this._userpic.setAttribute('src', canvas.getPictureUrl(this.picture_uri, '&moduleName=chat')); 
+        ]]>
+	</handler>
+	
+	<!--
+    public Long requestUserToContactList(String SID, Long userToAdd_id, 
+                String domain, String port, String webapp)
+     -->
+    <netRemoteCallHib name="requestUserToContactList" funcname="userservice.requestUserToContactList" 
+                  remotecontext="$once{ canvas.thishib }" activeErrorHandler="true" >      
+        <netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+        <netparam><method name="getValue"> return parent.parent.user_id; </method></netparam>
+        <netparam><method name="getValue"> return canvas.rtmphostlocal; </method></netparam>
+        <netparam><method name="getValue"> return canvas.red5httpport; </method></netparam>
+        <netparam><method name="getValue"> return canvas.httpRootKey; </method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("requestUserToContactList: ",value);
+                if (value > 0) {
+                    new lz.labelerrorPopup(canvas,{labelid:1267,errorlabelid:1266});
+                }
+            ]]>
+        </handler>
+    </netRemoteCallHib> 
+    
+    <view width="$once{ parent.width }" height="$once{ parent.height-1 }" 
+    	bgcolor="0xFFFFFF" opacity="0.2" />
+	
+	<image name="_userpic" stretches="both" x="1" y="1">
+		<handler name="onload">
+            <![CDATA[
+                if (this.height > 38) {
+                    //If bigger then containter then scale it
+                    var width = this.width/(this.height/38);
+                    this.setAttribute('height',38);
+                    this.setAttribute('width',width);
+                }
+            ]]>
+        </handler>
+	</image>
+	
+	<text text="$once{ parent.username }" x="40" resize="false"
+		  width="$once{ parent.width - 40 }" />	
+		  
+	<miniIconsImage name="add" src="$once{ canvas.getThemeImage('edit_add_rsc') }" width="16" height="16" 
+                   y="20" x="$once{ parent.width - 80 }" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("Start Conference");
+            if (hib.userobject.user_id == parent.user_id) {
+                new lz.labelerrorPopup(canvas,{errorlabelid:1225});
+                return;
+            }
+            parent.requestUserToContactList.doCall();
+        </handler>
+        <labelTooltip labelid="1186" />
+    </miniIconsImage>
+    
+    <miniIcons name="private_message_add" resource="private_message_add_rsc" width="16" height="16" 
+                   y="20" x="$once{ parent.width - 60 }" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("Start Conference");
+            new lz.newPrivateMessage(canvas,{
+                                x:200,y:120,
+                                refObj:null,
+                                minimizable:true,
+                                maximizable:true,
+                                userObject:null,
+                                isdragable:true,
+                                user_id:parent.user_id,
+                                width:canvas.width-300,
+                                height:canvas.height-130
+                            });
+        </handler>
+        <labelTooltip labelid="1253" />
+    </miniIcons>
+	
+	<miniIcons resource="user_profile_rsc" width="16" height="16" 
+               y="20" x="$once{ parent.width - 40 }" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("Start Conference");
+            new lz.viewUserProfileWindow(canvas,{
+                                userId:parent.user_id
+                            });
+        </handler>
+        <labelTooltip labelid="1236" />
+    </miniIcons>    
+	
+	<miniIcons resource="start_conference2_rsc" width="16" height="16" 
+			   y="20" x="$once{ parent.width - 20 }" showhandcursor="true">
+		<handler name="onclick">
+			if ($debug) Debug.write("Start Conference");
+			new lz.chatParticipantsInviteConference(canvas,{
+            			    publicSID:parent.publicSID
+            			});
+		</handler>
+		<labelTooltip labelid="1131" />
+	</miniIcons>	 
+	
+	<labelTooltip text="$once{ parent.connectedSince }" /> 
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/chat/emotIconsSelector.lzx b/WebContent/src/modules/chat/emotIconsSelector.lzx
new file mode 100644
index 0000000..98edc70
--- /dev/null
+++ b/WebContent/src/modules/chat/emotIconsSelector.lzx
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<!--- view to select emoticons. size is 160x140 -->
+<class name="emotIconsSelector" extends="closableView" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" 
+    clickable="true" width="160" height="140" >
+
+    <attribute name="btnRef" value="null" />
+
+    <!--- @keywords private -->
+    <method name="passModeEvent" args="eventStr,view" > 
+        <![CDATA[
+            if ( eventStr == "onmousedown"  ){
+                if ( view != null ) {
+                   if ( !view.childOf(this) ) {
+                        this.close();
+                   }
+                } else {
+                    this.close();
+                }
+            }
+            if (view && view.childOf(this)) {
+                if (view[ eventStr ]) {
+                    view[ eventStr ].sendEvent( view );
+                }
+                return false;
+            }
+            return true;
+        ]]> 
+    </method>
+    
+    <handler name="oninit">
+    	this.getAllPublicEmoticons.doCall();
+    </handler>
+    
+        <netRemoteCallHib name="getAllPublicEmoticons" funcname="chatservice.getAllPublicEmoticons" 
+			remotecontext="$once{ canvas.thishib }" > 
+            <handler name="ondata" args="value">
+            	<![CDATA[
+                	//The onResult-Handler will be called be the rtmpconnection
+					if($debug) Debug.write("emotIconsSelector/getAllPublicEmoticons : ",value);
+					for (var i=0;i<value.length;i++){
+						var swfurl = canvas.getUrl() + 'public/emoticons/'+value[i][0];
+						iconlabel = value[i][1];
+						if (value[i].length>4){
+							iconlabel += ", "+value[i][2];							
+						}
+						
+						if ($debug) Debug.write("swfurl "+swfurl);
+						
+						var m = new lz._chatInnerSmilyIcon(parent.inn.inn,{iconvalue:value[i][1],iconlabel:iconlabel});
+						m.setSource(swfurl);						
+					}
+                ]]>
+            </handler>   
+        </netRemoteCallHib>    
+
+    <view bgcolor="0xFFFFFF" width="$once{ parent.width-2 }" opacity="0.8"
+    	  height="$once{ parent.height-2 }" x="1" y="1" />
+    	  
+    <labelText x="1" y="1" labelid="446" fontstyle="bold" /><!-- 446:Emoticons -->
+	<view name="inn" width="158" height="118" x="0" y="20" clip="true">
+		<view name="inn" width="$once{ parent.height }" >
+			<wrappinglayout axis="x" spacing="2" />
+		</view>
+		<om_vscrollbar name="myscrollbar" />
+	</view>
+    
+    <view name="_close" x="$once{ parent.width-this.width-2 }" y="2"
+        resource="btn_presenter_close"
+        onmouseover="this.setAttribute('frame',2)"
+        onmouseout="this.setAttribute('frame',1)"
+        onmousedown="this.setAttribute('frame',3)"
+        onmouseup="this.setAttribute('frame',1)" >
+        <handler name="onclick">
+            this.setAttribute('frame',2);
+            this.parent.close();
+        </handler>
+        <labelTooltip labelid="430" /><!-- 430:close -->
+    </view>    
+	
+</class>	
+
+<!--- private class of emotIconsSelector.class. resource view of chat smily icons. it shows icons and label tooltips.-->
+<class name="_chatInnerSmilyIcon" extends="view" onmouseover="" onmouseout="">
+	<attribute name="iconlabel" value="" type="string" />
+	<attribute name="iconvalue" value="" type="string" />
+	<handler name="onclick">
+		var messageBox = parent.parent.parent.btnRef.message;
+		messageBox.setText(messageBox.getText()+" "+iconvalue+"  ");
+		if ($debug) Debug.write("messageBox TEXT: ",messageBox.text,messageBox);
+		lz.Focus.setFocus(messageBox._ctext);
+		messageBox._ctext.setSelection(messageBox.getText().length-1,messageBox.getText().length);
+		parent.parent.parent.close();
+	</handler>
+	<labelTooltip text="$once{ parent.iconlabel }" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/chat/fontOptions.lzx b/WebContent/src/modules/chat/fontOptions.lzx
new file mode 100644
index 0000000..4b11c87
--- /dev/null
+++ b/WebContent/src/modules/chat/fontOptions.lzx
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="fontOptions" extends="closableView" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }"
+	clickable="true" width="130" height="42">
+
+	<attribute name="btnRef" value="null" />
+	
+	<method name="passModeEvent" args="eventStr,view" > 
+        <![CDATA[
+            if ( eventStr == "onmousedown"  ){
+                if ( view != null ) {
+                   if ( !view.childOf(this) ) {
+                        this.close();
+                   }
+                } else {
+                    this.close();
+                }
+            }
+            if (view && view.childOf(this)) {
+                if (view[ eventStr ]) {
+                    view[ eventStr ].sendEvent( view );
+                }
+                return false;
+            }
+            return true;
+        ]]> 
+    </method>
+    
+    <method name="applyStyle" args="styleLeftPart, styleRightPart">
+    	var messageBox = btnRef.message;
+    	var beforeSelection = messageBox.getText().substring(0, messageBox._ctext.selPosition);
+    	var selection = messageBox.getText().substring(messageBox._ctext.selPosition, 
+    		messageBox._ctext.selPosition + messageBox._ctext.selSize);
+    	var afterSelection = messageBox.getText().substring(messageBox._ctext.selPosition + 
+    		messageBox._ctext.selSize, messageBox.getText().length);
+		messageBox.setText(beforeSelection + styleLeftPart + selection + styleRightPart + afterSelection);
+		close();
+		lz.Focus.setFocus(messageBox._ctext);
+    </method>
+        
+    <view bgcolor="0xFFFFFF" width="$once{ parent.width-2 }" opacity="0.8"
+    	  height="$once{ parent.height-2 }" x="1" y="1" />
+    	  
+    <labelText x="1" y="1" labelid="1530" fontstyle="bold" /><!-- 1530:Font style -->
+    
+    <view name="_close" x="$once{ parent.width-this.width-2 }" y="2"
+        resource="btn_presenter_close"
+        onmouseover="this.setAttribute('frame',2)"
+        onmouseout="this.setAttribute('frame',1)"
+        onmousedown="this.setAttribute('frame',3)"
+        onmouseup="this.setAttribute('frame',1)" >
+        <handler name="onclick">
+            this.setAttribute('frame',2);
+            this.parent.close();
+        </handler>
+        <labelTooltip labelid="430" /><!-- 430:close -->
+    </view>
+
+	<miniIconsImage y="18" x="0" src="$once{ canvas.getThemeImage('font_bold') }"
+		width="24" height="24" showhandcursor="true" stretches="none" xoffset="-4" yoffset="-4">
+		<handler name="onclick">
+			<![CDATA[
+			parent.applyStyle("<b>", "</b>");
+			]]>
+		</handler>
+		<labelTooltip labelid="87" />
+	</miniIconsImage>
+	    
+	<miniIconsImage y="18" x="24" src="$once{ canvas.getThemeImage('font_italic') }" 
+		width="24" height="24" showhandcursor="true" stretches="none" xoffset="-4" yoffset="-4">
+		<handler name="onclick">
+			<![CDATA[
+			parent.applyStyle("<i>", "</i>");
+			]]>
+		</handler>
+		<labelTooltip labelid="86" />
+	</miniIconsImage>
+	    
+	<miniIconsImage y="18" x="48" src="$once{ canvas.getThemeImage('font_underline') }"
+		width="24" height="24" showhandcursor="true" stretches="none" xoffset="-4" yoffset="-4">
+		<handler name="onclick">
+			<![CDATA[
+			parent.applyStyle("<u>", "</u>");
+			]]>
+		</handler>
+		<labelTooltip labelid="1529" />
+	</miniIconsImage>
+	
+	<miniIconsImage y="18" x="72" src="$once{ canvas.getThemeImage('font_color') }" 
+		width="24" height="24" showhandcursor="true" stretches="none" xoffset="-4" yoffset="-4">
+		<attribute name="selectedColor" type="number" value="0" />
+		<attribute name="colorBeforeOpen" type="number" />
+		<attribute name="colorPickRef" value="null"/>
+		<handler name="onclick">
+			<![CDATA[
+				this.colorPickRef = new lz.colorpicker(canvas,{btnRef:this,
+	        		x:(this.getAttributeRelative('x',canvas)-(250-this.width)),
+	        		y:(this.getAttributeRelative('y',canvas)-154+this.height)});
+	        	var myColor = new Color();
+        		myColor.setRGB(0);
+	        	this.colorPickRef.doDefaultColor(myColor);
+	        	this.colorBeforeOpen = colorPickRef.selectedColor;
+	        	lz.ModeManager.makeModal(this.colorPickRef);
+			]]>
+		</handler>
+		
+		<method name="closedColorPicker">
+			// called by colorpicker
+		</method>
+		
+		<method name="setTransformedStringColor">
+		<![CDATA[
+			if (colorBeforeOpen != this.colorPickRef.selectedColor)
+				parent.applyStyle("<font color=\'#" + 
+					parseInt(this.colorPickRef.selectedColor).toString(16) + "\'>", "</font>");
+		]]>
+		</method>
+		
+		<labelTooltip labelid="1532" />
+	</miniIconsImage>
+	
+	<miniIconsImage y="18" x="96" src="$once{ canvas.getThemeImage('hyperlink') }" 
+		width="24" height="24" showhandcursor="true" stretches="none"  xoffset="-4" yoffset="-4">
+		<handler name="onclick">
+			<![CDATA[
+			parent.applyStyle("<a href=\"\">", "</a>");
+			]]>
+		</handler>
+		<labelTooltip labelid="1533" />
+	</miniIconsImage>
+    
+</class>
+
+</library>
\ No newline at end of file
diff --git a/WebContent/src/modules/chat/globalAttributes.lzx b/WebContent/src/modules/chat/globalAttributes.lzx
new file mode 100644
index 0000000..3b5283d
--- /dev/null
+++ b/WebContent/src/modules/chat/globalAttributes.lzx
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<!-- global attributes for chat module -->
+
+<library>
+
+<!--- chat modules: chat history -->
+<attribute name="chathistory" value="null" />
+
+<!--- chat modules: chat content -->
+<attribute name="_chatcontent" value="null" />
+
+<!--- chat modules: chat content -->
+<attribute name="_currentChatPanel" value="null" />
+
+</library>
diff --git a/WebContent/src/modules/chat/globalMethods.lzx b/WebContent/src/modules/chat/globalMethods.lzx
new file mode 100644
index 0000000..9c27e46
--- /dev/null
+++ b/WebContent/src/modules/chat/globalMethods.lzx
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<!-- global methods for chat module -->
+<library>
+
+<script>
+<![CDATA[
+
+	// global chat history array for all chat module
+	this.chathistory=new Array();
+
+var maxsize = 220;
+var textFieldtext = "";
+var startIndex = 0;
+var currentLine = 0;
+var textObject = null;
+var myTextFormat = null;
+var lineHeight = 0;
+
+function calcLineWidthByTextField(maxsizeText,textForCalcing,fontsize, fontname){
+	//check test/testLineWidth.lzx in test-directory for a detailed example calculation 
+	//Debug.write("calcLineWidthByTextField: ",textForCalcing);
+	
+	maxsize = maxsizeText;
+	startIndex = 0;
+	currentLine = 0;
+	textObject = new Array();
+	
+	textFieldtext = textForCalcing;
+	myTextFormat = new TextFormat();
+	myTextFormat.size = fontsize;
+	myTextFormat.font = fontname;
+	
+	var metrics = myTextFormat.getTextExtent(textFieldtext, 100000);
+	lineHeight = metrics.ascent+metrics.descent;
+	//Debug.write(lineHeight);
+	
+	measureLine();
+	
+	return textObject;
+}
+
+function measureLine(){
+    var remainingLength = textFieldtext.length;
+        
+    var testTxt = "";
+    var testTxt2 = "";
+    var textFieldtext2 = textFieldtext;
+    var metrics = 0;
+    var firstSpaceIndex = 0;
+    var isFirstWord = true;
+
+    //if ($debug) Debug.write("FUNC/chat Message: ", textFieldtext);
+    //if ($debug) Debug.write("FUNC/length of chat Message: ", remainingLength);
+
+    while (remainingLength > 0) {
+        testTxt = "";
+        testTxt2 = "";
+        textFieldtext2 = textFieldtext;
+        metrics = myTextFormat.getTextExtent(textFieldtext2, 100000);
+        isFirstWord = true;
+        
+        //if ($debug) Debug.write("size of the current part: ", metrics.width);
+        do {
+            firstSpaceIndex = textFieldtext2.indexOf(" ");
+            testTxt2 = testTxt;
+
+            if (firstSpaceIndex != -1) {
+                //if ($debug) Debug.write("the first space is at position: ", firstSpaceIndex);
+                if (isFirstWord) {
+                    testTxt = textFieldtext2.slice(startIndex, firstSpaceIndex);
+                    isFirstWord = false;
+                } else {
+                    testTxt = testTxt + " " + textFieldtext2.slice(startIndex, firstSpaceIndex);
+                }
+                textFieldtext2 = textFieldtext2.slice(firstSpaceIndex + 1, textFieldtext2.length);
+                metrics = myTextFormat.getTextExtent(testTxt, 100000);
+            } else {
+                // this is the last word
+                //if ($debug) Debug.write("this is the last word!");
+                testTxt = testTxt + " " + textFieldtext2;
+                metrics = myTextFormat.getTextExtent(testTxt, 100000);
+                if (isFirstWord && metrics.width < maxsize) {
+                    testTxt2 = testTxt;
+                    isFirstWord = false;
+                }
+                break;
+            }
+        } while (metrics.width < maxsize)
+        
+        if (metrics.width < maxsize) {
+            testTxt2 = testTxt;
+        }
+
+        if (testTxt2.length == 0) {
+            // the first word is already too long
+            //if ($debug) Debug.write("the first word is already too long!");
+            testTxt = "";
+            textFieldtext2 = textFieldtext;
+            metrics = myTextFormat.getTextExtent(testTxt, 100000);
+            isFirstWord = true;
+
+            while (metrics.width < maxsize) {
+                testTxt = testTxt + textFieldtext2.slice(startIndex, 1);
+                textFieldtext2 = textFieldtext2.slice(1, remainingLength);
+                metrics = myTextFormat.getTextExtent(testTxt, 100000);
+            }
+            
+            testTxt2 = testTxt;
+        }
+                
+        textObject[currentLine] = new Array();
+        textObject[currentLine]["text"] = testTxt2;
+        metrics2 = myTextFormat.getTextExtent(textObject[currentLine]["text"], 100000);
+        textObject[currentLine]["lineWidth"] = metrics2.width;
+        currentLine += 1;
+        //if ($debug) Debug.write("new line: ", textObject[currentLine]["text"]);
+               
+        textFieldtext = textFieldtext.slice(testTxt2.length, textFieldtext.length)
+        if (textFieldtext.indexOf(" ") == 0) {
+           textFieldtext = textFieldtext.slice(1, textFieldtext.length)
+        }
+        remainingLength = textFieldtext.length;
+
+        //if ($debug) Debug.write("remaining text: ", textFieldtext);
+    }
+}
+
+function getLineHeight(){
+	return lineHeight;
+}
+
+
+
+
+]]>
+</script>
+
+
+
+
+<method name="addChatHistory" args="value,client">
+<![CDATA[
+	if ($debug) Debug.write("addChatHistory: ", value,client);
+	var name = (client.firstname == null ? "" : client.firstname) + " " + (client.lastname == null ? "" : client.lastname);
+	var newmessage = "<FONT COLOR='"+value[5]+"' size='11'>"+name+"</FONT>:<FONT COLOR='0x000000' size='11'>"+value[4]+"</FONT><br />";
+	//Debug.write("newmessage: ",newmessage);
+	canvas._chatcontent.addChatItem(newmessage);  // Is "addChatItem()" used?  By what? h.kuze 2008/3/27
+	canvas._chathistory.push(newmessage);
+]]>
+</method>
+
+<method name="resetFormatedChatHistory">
+  	<![CDATA[
+  	if (this.chathistory==null) return '';
+  	var completeText = '';
+  	for (var i=0;i<chathistory.length;i++){
+  		completeText+=chathistory[i];
+  	}
+  	//Debug.write("getFormatedChatHistory: ",completeText);
+  	return completeText;
+  	]]>
+</method>
+<method name="getFormatedChatHistory">
+  	<![CDATA[
+  	if (this.chathistory==null) return '';
+  	var completeText = '';
+  	for (var i=0;i<chathistory.length;i++){
+  		completeText+=chathistory[i];
+  	}
+  	//Debug.write("getFormatedChatHistory: ",completeText);
+  	return completeText;
+  	]]>
+</method>
+
+
+</library>
diff --git a/WebContent/src/modules/chat/inviteuser/chatParticipantsInviteConference.lzx b/WebContent/src/modules/chat/inviteuser/chatParticipantsInviteConference.lzx
new file mode 100644
index 0000000..cae4835
--- /dev/null
+++ b/WebContent/src/modules/chat/inviteuser/chatParticipantsInviteConference.lzx
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="chatParticipantsInviteConference" extends="guiPresenter" resizeable="false"
+    width="490" height="430" y="240" x="240" closable="true" labelid="1131" >
+	
+	<attribute name="publicSID" value="" type="string" />
+	<attribute name="user_id" value="0" type="number" />
+	
+    <view resource="messagebox_info_rsc" x="10" y="24" />
+    
+    <labelText labelid="1132" x="30" y="22" fontstyle="italic"
+               multiline="true" width="$once{ parent.width - 40 }" />
+	
+	<labelText labelid="777" x="2" y="52" fontstyle="bold" />
+	
+    <view x="4" y="72" height="150">
+                    
+        <handler name="oninit">
+            this.getRoomsPublicWithoutType.doCall();
+        </handler>
+
+        <netRemoteCallHib name="getRoomsPublicWithoutType" funcname="conferenceservice.getRoomsPublicWithoutType" 
+            remotecontext="$once{ canvas.thishib }" >   
+            <netparam><method name="getValue">return canvas.sessionId;</method></netparam>  
+            <handler name="ondata" args="value">    
+                <![CDATA[
+                    if ($debug) Debug.write("getRoomsPublicWithoutType: ", value);
+                    if (value != null) {
+                        for (var eg = 0; eg < value.length; eg++) {
+                            var time = value[eg].starttime.getHours()
+                                    + ':' + value[eg].starttime.getMinutes()
+                                    + ' ' + value[eg].starttime.getDate()
+                                    + '.' + (value[eg].starttime.getMonth() + 1)
+                                    + '.' + value[eg].starttime.getFullYear();
+                                    
+                            new lz.roomListInviteUserItem(parent.inn.inn.inn,
+                                    {
+                                        roomType:value[eg].roomtype.roomtypes_id,
+                                        currentusers : value[eg].currentusers,
+                                        obj : value[eg],
+                                        ispublic : true,
+                                        roomid : value[eg].rooms_id,
+                                        starttime : time,
+                                        roomname : value[eg].name,
+                                        publicSID:parent.parent.publicSID,
+                                        user_id:parent.parent.user_id
+                                    });
+                        }
+                    }
+                ]]>                                     
+            </handler>  
+        </netRemoteCallHib>
+
+        <!-- inn.inn.inn view would be setted object by above ondata hander. -->
+        <view name="inn" width="480" height="${ parent.height }" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >
+            <view name="inn" x="1" y="1" width="478" height="${ parent.height-2 }" 
+                        bgcolor="0xFFFFFF" clip="true" >
+                <view name="inn" layout="axis:y;spacing:1"/>
+                <om_vscrollbar />
+            </view>
+        </view>
+    </view>
+	
+	<labelText labelid="779" x="2" y="222" fontstyle="bold" />
+	
+    <view x="4" y="242" height="150">
+        <handler name="oninit">
+            this.getRoomsByOrganisationWithoutType.doCall();
+        </handler>    
+
+        <netRemoteCallHib name="getRoomsByOrganisationWithoutType" funcname="conferenceservice.getRoomsByOrganisationWithoutType" remotecontext="$once{ canvas.thishib }" >   
+            <netparam><method name="getValue">return canvas.sessionId;</method></netparam>  
+            <netparam><method name="getValue">return hib.currentdomainObj.organisation_id;</method></netparam>  
+            <handler name="ondata" args="value">    
+            <![CDATA[
+                if ($debug) Debug.write("getRoomsByOrganisationWithoutType ",value);
+                if (value != null) {
+                    for (var eg = 0; eg < value.length; eg++) {
+                        new lz.roomListInviteUserItem(parent.inn.inn.inn,{
+                                    roomType:value[eg].room.roomtype.roomtypes_id,
+                                    currentusers : value[eg].room.currentusers,
+                                    obj : value[eg],
+                                    ispublic : false,
+                                    roomid : value[eg].room.rooms_id,
+                                    starttime : parseDateToStringTime(value[eg].room.starttime),
+                                    roomname : value[eg].room.name,
+                                    publicSID:parent.parent.publicSID
+                                });
+                    }
+                }
+            ]]>                                     
+            </handler>  
+        </netRemoteCallHib> 
+ 
+                <!-- inn.inn.inn view would be setted object by above ondata hander. -->
+        <view name="inn" width="480" height="${ parent.height }" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >
+            <view name="inn" x="1" y="1" width="478" height="${ parent.height-2 }" bgcolor="0xFFFFFF" clip="true" >
+                <view name="inn" layout="axis:y;spacing:1"/>
+                <om_vscrollbar />
+            </view>
+        </view>
+    </view>
+    
+    <simpleLabelButton labelid="55" width="100" onclick="this.parent.close();"
+		   x="$once{ parent.width-104 }" y="$once{ parent.height-26 }" />    	
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/chat/inviteuser/chatParticipantsInviteMessage.lzx b/WebContent/src/modules/chat/inviteuser/chatParticipantsInviteMessage.lzx
new file mode 100644
index 0000000..8d5d5a9
--- /dev/null
+++ b/WebContent/src/modules/chat/inviteuser/chatParticipantsInviteMessage.lzx
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="chatParticipantsInviteMessage" extends="guiPresenter" labelid="1138"
+    docking="true" resizeable="false" closable="true" y="260"
+    width="400" x="300" height="240">
+	
+	<attribute name="refObj" value="null" />
+	
+	<attribute name="publicSID" value="" type="string" />
+	<attribute name="user_id" value="0" type="number" />
+	<attribute name="conferenceRoomName" value="" type="string" />
+	<attribute name="roomId" value="0" type="number" />
+	
+	<handler name="oninit">
+		<![CDATA[
+		  
+		  var tString = canvas.firstName + ' ' + canvas.lastName + ' ' 
+		                  + canvas.getLabelName(1137) + ' ' 
+		                  + this.conferenceRoomName;
+		                  
+		  this.message.setAttribute("text",tString);
+		
+		]]>
+	</handler>
+	
+	<method name="send">
+		
+		this.sendMessageWithClientByPublicSIDOrUser.messageObject = new Object
+		this.sendMessageWithClientByPublicSIDOrUser.messageObject["message"] = "inviteToRoom";
+		this.sendMessageWithClientByPublicSIDOrUser.messageObject["action"] = "inviteToRoom";
+		this.sendMessageWithClientByPublicSIDOrUser.messageObject["roomId"] = this.roomId;
+		this.sendMessageWithClientByPublicSIDOrUser.messageObject["usermessage"] = this.message.getText();
+		this.sendMessageWithClientByPublicSIDOrUser.messageObject["publicSID"] = canvas.publicSID;
+		
+		if ($debug) Debug.write("Send to _ ",this.publicSID);
+		if ($debug) Debug.write("Send to _ ",this.user_id);
+		
+		this.sendMessageWithClientByPublicSIDOrUser.doCall();
+		
+	</method>
+	
+    <netRemoteCallHib name="sendMessageWithClientByPublicSIDOrUser" funcname="sendMessageWithClientByPublicSIDOrUser" 
+                      remotecontext="$once{ canvas.thishib }" >  
+        <attribute name="messageObject" value="null" />
+        <netparam><method name="getValue">return parent.messageObject;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.publicSID;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.user_id;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("+sendMessageWithClientByPublicSIDOrUser : ",value);
+                
+                if (parent._switch.getValue()) {
+            
+                    parent.refObj.checkConditionsWhenButtonClicked(null);
+                    
+                } else {
+                	
+                	parent.refObj.doCloseWindow();
+                	
+                }
+                
+                parent.close();
+            ]]>
+        </handler>  
+    </netRemoteCallHib>	
+    
+    <labelText labelid="1136" x="2" y="22" fontstyle="bold" />
+    
+    <customScrollEdittext name="message" y="42" x="2" width="$once{ parent.width - 4 }" 
+            height="100" text="" />
+            
+    <labelCheckbox x="2" y="$once{ parent.height-48 }" fontsize="11"
+        name="_switch" labelid="1134" >
+    </labelCheckbox>  
+    
+    <simpleLabelButton labelid="1139" width="200" x="88" y="$once{ parent.height-22 }" 
+        onclick="this.parent.send();" />
+        
+    <simpleLabelButton labelid="25" width="100" x="290" y="$once{ parent.height-22 }" 
+        onclick="this.parent.close();" />
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/chat/inviteuser/chatParticipantsInviteNotification.lzx b/WebContent/src/modules/chat/inviteuser/chatParticipantsInviteNotification.lzx
new file mode 100644
index 0000000..4053ab6
--- /dev/null
+++ b/WebContent/src/modules/chat/inviteuser/chatParticipantsInviteNotification.lzx
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="chatParticipantsInviteNotification" extends="guiPresenter" labelid="1138"
+    docking="true" resizeable="false" closable="true" y="260"
+    width="400" x="300" height="240">
+	
+	<attribute name="refObj" value="null" />
+	
+	<attribute name="publicSID" value="" type="string" />
+	<attribute name="conferenceRoomName" value="" type="string" />
+	<attribute name="usermessage" value="" type="string" />
+	<attribute name="roomId" value="0" type="number" />
+	
+	<handler name="oninit">
+		<![CDATA[
+		  
+		  this.message.message.setAttribute("text",this.usermessage);
+		
+		]]>
+	</handler>
+	
+	<method name="accept">
+		canvas.roomJumpId = this.roomId;
+        quicklinkAct("jumpToRoom");
+		
+		this.close();
+	</method>
+	
+	<method name="deny">
+		
+		this.sendMessageWithClientByPublicSID.messageObject = new Object
+		this.sendMessageWithClientByPublicSID.messageObject["message"] = "inviteToRoomAnswer";
+		this.sendMessageWithClientByPublicSID.messageObject["action"] = "inviteToRoomAnswer";
+		this.sendMessageWithClientByPublicSID.messageObject["usermessage"] = canvas.firstName + ' ' + canvas.lastName + ' ' 
+                                                                                    + canvas.getLabelName(1140);
+		this.sendMessageWithClientByPublicSID.doCall();
+		
+	</method>
+	
+    <netRemoteCallHib name="sendMessageWithClientByPublicSID" funcname="sendMessageWithClientByPublicSID" 
+                      remotecontext="$once{ canvas.thishib }" >  
+        <attribute name="messageObject" value="null" />
+        <netparam><method name="getValue">return parent.messageObject;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.publicSID;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("+sendMessageWithClientByPublicSID : ",value);
+                parent.close();
+            ]]>
+        </handler>  
+    </netRemoteCallHib>	
+    
+    <labelText labelid="1136" x="2" y="22" fontstyle="bold" />
+    
+    <view y="42" x="2" name="message" width="$once{ parent.width - 4 }" clip="true">
+    	<text name="message"  width="$once{ parent.width - 16 }"
+            height="100" text="" multiline="true" />
+    </view>
+    
+    <simpleLabelButton labelid="1141" width="100" x="86" y="$once{ parent.height-22 }" 
+        onclick="this.parent.accept();" />
+        
+    <simpleLabelButton labelid="1142" width="100" x="188" y="$once{ parent.height-22 }" 
+        onclick="this.parent.deny();" />
+        
+    <simpleLabelButton labelid="25" width="100" x="290" y="$once{ parent.height-22 }" 
+        onclick="this.parent.close();" />
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/chat/inviteuser/library.lzx b/WebContent/src/modules/chat/inviteuser/library.lzx
new file mode 100644
index 0000000..bffbfe1
--- /dev/null
+++ b/WebContent/src/modules/chat/inviteuser/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+	<include href="roomListInviteUserItem.lzx" />
+	<include href="chatParticipantsInviteMessage.lzx" />
+	<include href="chatParticipantsInviteNotification.lzx" />
+	<include href="chatParticipantsInviteConference.lzx" />
+	
+    
+</library>
diff --git a/WebContent/src/modules/chat/inviteuser/roomListInviteUserItem.lzx b/WebContent/src/modules/chat/inviteuser/roomListInviteUserItem.lzx
new file mode 100644
index 0000000..2de9ed7
--- /dev/null
+++ b/WebContent/src/modules/chat/inviteuser/roomListInviteUserItem.lzx
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<class name="roomListInviteUserItem" extends="view" bgcolor="$once{ canvas.bgColorMenuItems }" 
+		   height="50" onmouseover="" onmouseout="" width="478" >
+
+		<attribute name="ispublic" value="false" type="boolean" />
+		<attribute name="isaudience" value="false" type="boolean" />
+		<attribute name="obj" value="null" />
+		<attribute name="roomid" value="0" type="number" />
+		<attribute name="starttime" value="" type="string" />
+		<attribute name="roomname" value="" type="string" />
+
+		<attribute name="roomClassName" value="conferenceView" type="string" />
+		<attribute name="currentusers" value="null" />
+
+		<attribute name="maxUsers" value="4" type="number" />
+		
+		<attribute name="roomType" value="0" type="number" />
+
+		<attribute name="checkForMaxUsers" value="false" type="boolean" />
+		
+		<attribute name="publicSID" value="" type="string" />
+		<attribute name="user_id" value="0" type="number" />
+
+		<handler name="oninit">
+		<![CDATA[
+
+			//if ($debug) Debug.write("obj: ",obj);
+			if (this.ispublic) {
+				this.maxUsers = obj.numberOfPartizipants;
+			} else {
+				this.maxUsers = obj.room.numberOfPartizipants;
+			}
+			this._users.setAttribute('text', canvas.getLabelName(398) + ' '
+							+ this.currentusers.length + " / " + this.maxUsers);
+			var tString = canvas.getLabelName(401) + "<br/>";
+			for (var i = 0; i < this.currentusers.length; i++) {
+				tString += this.currentusers[i].firstname + " "
+						+ this.currentusers[i].lastname + " ("
+						+ this.currentusers[i].username + ") "
+						+ canvas.getLabelName(399)
+						+ parseDateToStringTime(this.currentusers[i].roomEnter)
+						+ " <br/>";
+			}
+			this._labeltooltip.setAttribute('text', tString);
+		]]>
+		</handler>
+
+		<handler name="onclick">
+			canvas.isConference = !this.isaudience;
+			if (this.isaudience)
+				connectedIsAudience = '_' + 'audi';
+			if (this.ispublic) {
+				hib.conferencedomain = "public";
+				hib.currentroomid = this.obj.rooms_id;
+				//Debug.write("ispublic");
+			} else {
+				hib.conferencedomain = this.obj.organisation.organisation_id;
+				hib.currentroomid = this.obj.room.rooms_id;
+				//Debug.write("non ispublic");
+			}
+			if ($debug) Debug.write("onclick", this);
+			parent.parent.parent.parent.parent._roomlistdetails.doinit(
+					this.currentusers, this.roomid, this.roomname);
+		</handler>
+
+		<method name="checkMaxUsers">
+		<![CDATA[
+			if (this.currentusers.length < this.maxUsers) {
+				this.enterRoom();
+			} else {
+				new lz.labelerrorPopup(canvas,{errorlabelid:99});
+				//new lz.rpcErrorDialog(canvas.main_content._content.inner, {
+				//			errorid : 30
+				//		});
+			}
+		]]>
+		</method>
+
+		<method name="enterRoom">
+			
+			var roomid = 0;
+			
+			if (this.ispublic) {
+				roomid = this.obj.rooms_id;
+				//Debug.write("ispublic");
+			} else {
+				roomid = this.obj.room.rooms_id;
+				//Debug.write("non ispublic");
+			}
+			
+			canvas.roomJumpId = roomid;
+			quicklinkAct("jumpToRoom");
+			
+			this.doCloseWindow();
+		</method>
+
+		<netRemoteCallHib name="getRoomClientsListByRoomId" funcname="conferenceservice.getRoomClientsListByRoomId"
+			remotecontext="$once{ canvas.thishib }" >
+			<netparam> <method name="getValue">return parent.parent.roomid;</method></netparam>
+			<handler name="ondata" args="value">
+			<![CDATA[
+				if ($debug) Debug.write("getRoomClientsListByRoomId: ", value);
+				parent.currentusers = value;
+				parent.oninit.sendEvent();
+				if (parent.checkForMaxUsers) {
+					parent.checkMaxUsers();
+				}
+			]]>
+			</handler>
+		</netRemoteCallHib>
+
+		<labelText text="$once{ parent.roomname }" />
+
+		<labelText name="_users" y="26" />
+		<image name="_r" src="$once{ canvas.getThemeImage('reload_rsc') }" x="130" y="26"
+			onclick="parent.getRoomClientsListByRoomId.doCall()" >
+			<labelTooltip labelid="402" />
+		</image>
+
+		<method name="checkConditionsWhenButtonClicked" args="_clicked">
+			checkForMaxUsers = true;
+			getRoomClientsListByRoomId.doCall();
+		</method>
+		
+		<method name="doCloseWindow">
+			if ($debug) Debug.write("doCloseWindow :: ");
+			parent.parent.parent.parent.parent.close();
+		</method>
+
+		<simpleLabelButton labelid="1135" x="380" width="80" height="24" y="20">
+			<handler name="onclick">
+				new lz.chatParticipantsInviteMessage(canvas,{
+    				    refObj:parent,
+    				    publicSID:parent.publicSID,
+    				    user_id:parent.user_id,
+    				    conferenceRoomName:parent.roomname,
+    				    roomId:parent.roomid
+    				});
+			</handler>
+		</simpleLabelButton>
+
+		<labelTooltip multiline="true" name="_labeltooltip" />
+
+	</class>
+
+</library>
diff --git a/WebContent/src/modules/chat/library.lzx b/WebContent/src/modules/chat/library.lzx
new file mode 100644
index 0000000..b70fa7b
--- /dev/null
+++ b/WebContent/src/modules/chat/library.lzx
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+	<include href="globalAttributes.lzx" />
+	<include href="globalMethods.lzx" />
+	
+	<include href="chatMiniButton.lzx" />
+	<include href="chatBarMenu.lzx" />
+	<include href="inviteuser/" />
+	
+	<include href="chatParticipants.lzx" />
+	<include href="fontOptions.lzx" />
+	<include href="emotIconsSelector.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/browser/conferenceBrowser.lzx b/WebContent/src/modules/conference/browser/conferenceBrowser.lzx
new file mode 100644
index 0000000..441b6b3
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/conferenceBrowser.lzx
@@ -0,0 +1,436 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!--- TODO:
+		inprement of history feature
+		add resize feature to labelExplorerBox component
+	-->
+	<!--
+	<include href="extensions/html.lzx"/>
+     -->
+     
+    <class name="browserButton" extends="view" width="22" height="22">
+    	
+    	<attribute name="enabled" value="true" type="boolean" />
+    	
+    	<handler name="onenabled" args="o">
+    		this.enabled = o;
+    		if (o) {
+    			this.setAttribute("opacity",1);
+    		} else {
+    			this.setAttribute("opacity",0.5);
+    		}
+    	</handler>
+    	
+    </class> 
+     
+	<class name="conferenceBrowser" extends="labelExplorerBox" labelid="749" 
+		   x="200" closable="false" resizeable="true">
+		 
+		<!--
+		      this attribute is true if the user has opened the browser on its own
+		      if the browser is opened by a Remote-Call, the user will get the Web-Site 
+		      notifications from the Moderator(s)
+		 -->
+		<attribute name="initedByUser" value="true" type="boolean" /> 
+		
+		<attribute name="initURL" value="" type="string" /> 
+		
+		<attribute name="callBackJSDelegate" value="null" /> 
+		
+		<attribute name="browserhistoryPre" value="null" />
+		<attribute name="browserhistoryPost" value="null" /> 
+		 
+		<handler name="oninit">
+			<![CDATA[
+			
+			    this.browserhistoryPre = new Array();
+			    this.browserhistoryPost = new Array();
+			    
+			    this.updateIcons();
+			
+				canvas.conferenceBrowserIsinited = true;
+				this.callBackJSDelegate = new LzDelegate(this, "updatedURLValues");
+			
+                var os = lz.Browser.getOS();
+                
+                //We have to detect Firefox, unfortunately it does not work for
+                //Windows with Firefox see: http://jira.openlaszlo.org/jira/browse/LPP-8525
+                
+                if ($debug) Debug.write("os ::",os.indexOf('Win'),os);
+                
+                //To test this you have to run the application with the index.jsp wrapper that
+                //contains the browser-detection code
+                if (false && os.indexOf("Win") >= 0) {
+                
+                    if ($debug) Debug.write("os :: version isWindows check for Firefox Bug ",os,version);
+                    
+                    getBrowserLang(this);
+                
+                }
+                
+                if (canvas.ismoderator) {
+                	
+                    this._navigation._inner._showBar.setAttribute('started', true);
+                    
+                }
+                
+                //see attribute definition for docs
+                if (this.initedByUser) {
+                	this._navigation._inner.browser.navigation.url.setAttribute("text","http://www.google.com");
+                	this._navigation._inner.browser.navigation.readStart.setURL();
+                	
+                	this.sendBrowserMessageToMembers.objMessage = new Array();
+                	this.sendBrowserMessageToMembers.objMessage[0] = "initBrowser";
+                	this.sendBrowserMessageToMembers.objMessage[1] = this._navigation._inner.browser.navigation.url.text;
+                	this.sendBrowserMessageToMembers.doCall();
+                } else {
+                	
+                	this._navigation._inner.browser.navigation.url.setAttribute("text",this.initURL);
+                	this._navigation._inner.browser.navigation.readStart.setURL();
+                	
+                }
+                
+            ]]>
+        </handler>
+        
+        <method name="callback" args="returnValue">
+        	<![CDATA[
+        	
+        	    if ($debug) Debug.write("getBrowserInfo callback ",returnValue);
+                        
+                if (returnValue.indexOf("Firefox") >= 0) {
+                    
+                    this.setAttribute("y",160);
+                    
+                    new lz.labelerrorPopup(canvas,{y:0,errorlabelid:750});
+                }
+        	
+        	]]>
+        </method>
+        
+        <method name="newBrowserURL" args="newURL">
+        	this._navigation._inner.browser.navigation.url.setAttribute("text",newURL);
+        	this._navigation._inner.browser.navigation.readStart.setURL();
+        </method>
+        
+        <method name="updatedURLValues" args="returnValue">
+        	
+        	if ($debug) Debug.write("updatedURLValues ",returnValue);
+        	
+        </method>
+        
+        <method name="getIFrameLocation">
+        	<![CDATA[
+
+                //function callbackIFrameLocation(returnValue) {
+                    
+                //    if ($debug) Debug.write("callbackIFrameLocation ",returnValue);
+                    
+                //}
+                
+                //lz.Browser.callJS("getiFrameOMSource",callbackIFrameLocation, "__lz0");   
+                
+                this.htmlviewer.callJavascript("window.location.href",this.callBackJSDelegate);
+                
+                
+                
+        	]]>
+        </method>
+        
+        <netRemoteCallHib name="sendBrowserMessageToMembers" funcname="sendBrowserMessageToMembers" 
+        				   remotecontext="$once{ canvas.thishib }" >
+        	<attribute name="objMessage" value="null" />
+            <netparam name="vars"><method name="getValue">return parent.objMessage;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                	if ($debug) Debug.write("getValue : ",value);
+                	if (this.objMessage[0] == "closeBrowserURL") {
+                		parent.close();
+                	}
+                ]]>
+            </handler>   
+        </netRemoteCallHib> 
+        
+        <handler name="onismoderator" reference="canvas" args="m">
+            if ($debug) Debug.write("###### ismoderator ",m);
+            <![CDATA[
+                //this.isMod = canvas.getIsModeratorByPublicSID(this.refObj.publicSID);
+                if (m) {
+                    this._navigation._inner._showBar.setAttribute('started', true);
+                } else {
+                	this._navigation._inner.setAttribute("y",-40);
+                }
+                //throw a onx/y event to 
+                this.setAttribute("y",this.y);
+            ]]>
+        </handler>
+        
+        <method name="addLocalHistoryPre" args="url">
+        	this.browserhistoryPre.push(url);
+        	this.updateIcons();
+        </method>
+        
+        <method name="addLocalHistoryPost" args="url">
+            this.browserhistoryPost.push(url);
+            this.updateIcons();
+        </method>
+        
+        <method name="updateIcons">
+        	<![CDATA[
+            	if (this.browserhistoryPre.length > 1) {
+            		this._navigation._inner.browser.navigation._pre.setAttribute("enabled",true);
+            	} else {
+            		this._navigation._inner.browser.navigation._pre.setAttribute("enabled",false);
+            	}
+            	
+            	if (this.browserhistoryPost.length > 0) {
+                    this._navigation._inner.browser.navigation._post.setAttribute("enabled",true);
+                } else {
+                    this._navigation._inner.browser.navigation._post.setAttribute("enabled",false);
+                }
+        	]]>
+        </method>
+        
+        <method name="doPreItem">
+        	<![CDATA[
+                if (this.browserhistoryPre.length > 1) {
+                	
+                	if ($debug) Debug.write("doPreItem 1 ",this.browserhistoryPre.length);
+                	
+                	var lastItem = this.browserhistoryPre[this.browserhistoryPre.length-2];
+                	var nextItem = this.browserhistoryPre[this.browserhistoryPre.length-1];
+                	
+                	if ($debug) Debug.write("doPreItem 2 ",lastItem);
+                	
+                	this.browserhistoryPost.push(nextItem);
+                	
+                	this.browserhistoryPre.splice(this.browserhistoryPre.length-2,1);
+                	
+                	if ($debug) Debug.write("doPreItem 3 ",this.browserhistoryPre.length);
+                	
+                	this._navigation._inner.browser.navigation.url.setAttribute("text",lastItem);
+                    this._navigation._inner.browser.navigation.readStart.setURLWithoutEvent();
+                	
+                	this.updateIcons();
+                	
+                	return lastItem;
+                }
+            ]]>
+        </method>
+        
+        <method name="doPostItem">
+            <![CDATA[
+                if (this.browserhistoryPost.length > 0) {
+                    
+                    var lastItem = this.browserhistoryPost[this.browserhistoryPost.length-1];
+                    
+                    this.browserhistoryPost.splice(this.browserhistoryPost.length-1,1);
+                    
+                    this.browserhistoryPre.push(lastItem);
+                    
+                    this._navigation._inner.browser.navigation.url.setAttribute("text",lastItem);
+                    this._navigation._inner.browser.navigation.readStart.setURLWithoutEvent();
+                    
+                    this.updateIcons();
+                    
+                    return lastItem;
+                }
+            ]]>
+        </method>
+        
+        <method name="doClose">
+            if (canvas.ismoderator) {
+            
+                this.sendBrowserMessageToMembers.objMessage = new Array();
+                this.sendBrowserMessageToMembers.objMessage[0] = "closeBrowserURL";
+                this.sendBrowserMessageToMembers.doCall();
+            
+            }
+        </method>
+        
+        <handler name="onclose">
+        	canvas.conferenceBrowserIsinited = false;
+            this.htmlviewer.setVisible(false);
+        </handler>              
+        
+        <!--
+            Broadcast Message to all user
+         -->
+        <view name="_navigation" clip="true" y="22" height="38" width="${ parent.width }" >
+    		<view name="_inner" y="-40">
+    			
+    			<animator name="_showBar" attribute="y" to="0" duration="750" started="false">
+    				<handler name="onstop">
+    					lz.Focus.setFocus(parent.browser.navigation.url,true);
+    				</handler>
+    			</animator>
+    			
+    			<!-- enabled="false" -->
+        		<view name="browser" height="28" bgcolor="0xEEEEEE" x="1" >
+        			
+        			<view name="navigation" layout="axis:x;spacing:1;inset:1">
+        				
+        				<browserButton name="_pre" resource="./resources/pre.png" y="2">
+        					<handler name="onclick">
+        						if ($debug) Debug.write("PRE");
+        						parent.parent.parent.parent.parent.doPreItem();
+        					</handler>
+        					<labelTooltip labelid="751" />
+        				</browserButton>
+        				
+        				<browserButton name="_post" resource="./resources/next.png" y="2" enabled="false">
+                            <handler name="onclick">
+                                if ($debug) Debug.write("NEXT");
+                                parent.parent.parent.parent.parent.doPostItem();
+                            </handler>
+                            <labelTooltip labelid="752" />
+                        </browserButton>
+                        
+                        <browserButton resource="./resources/refresh.png" y="2">
+                            <handler name="onclick">
+                                if ($debug) Debug.write("RELOAD");
+                                parent.readStart.sendURL();
+                            </handler>
+                            <labelTooltip labelid="753" />
+                        </browserButton>
+                        
+                        <browserButton resource="./resources/home.png" y="2">
+                            <handler name="onclick">
+                                if ($debug) Debug.write("HOME");
+                                parent.url.setAttribute("text","http://www.google.com");
+                                parent.readStart.sendURL();
+                            </handler>
+                            <labelTooltip labelid="754" />
+                        </browserButton>
+                        
+        				<edittext name="url" width="${classroot.width- (5*22) - 8}"> 
+        					<handler name="onkeyup" args="key">
+        						if ((key == 27) || (key == 13)) {
+        							this.parent.readStart.onclick.sendEvent();
+        						}
+        					</handler>
+        				</edittext>
+        				
+        				<browserButton name="readStart" resource="./resources/run.png" 
+        							    y="2">
+        					<handler name="onclick">
+            					this.sendURL();
+        					</handler>
+        					<method name="sendURL">
+        						this.setURL();
+        						
+        						parent.parent.parent.parent.parent.sendBrowserMessageToMembers.objMessage = new Array();
+			                	parent.parent.parent.parent.parent.sendBrowserMessageToMembers.objMessage[0] = "newBrowserURL";
+			                	parent.parent.parent.parent.parent.sendBrowserMessageToMembers.objMessage[1] = parent.url.text;
+			                	parent.parent.parent.parent.parent.sendBrowserMessageToMembers.doCall();
+        					</method>
+        					<method name="setURL">
+        						<![CDATA[
+            						var url = parent.url.getText();
+            						if ((url.indexOf("http://") < 0)
+            								&& (url.indexOf("https://") < 0)) {
+            							url = "http://" + url;
+            						}
+            
+            						parent.parent.parent.parent.parent.htmlviewer.ignoreNextEvent = true;
+            						parent.parent.parent.parent.parent.htmlviewer.setAttribute("src",url);
+            						parent.parent.parent.parent.parent.htmlviewer.setAttribute("visible",true);
+            						
+            						parent.parent.parent.parent.parent.addLocalHistoryPre(url);
+            						
+            						parent.url.setAttribute('text', url);
+            					]]>
+        					</method>
+        					
+        					<method name="setURLWithoutEvent">
+                                <![CDATA[
+                                    var url = parent.url.getText();
+                                    if ((url.indexOf("http://") < 0)
+                                            && (url.indexOf("https://") < 0)) {
+                                        url = "http://" + url;
+                                    }
+            
+                                    parent.parent.parent.parent.parent.htmlviewer.ignoreNextEvent = true;
+                                    parent.parent.parent.parent.parent.htmlviewer.setAttribute("src",url);
+                                    parent.parent.parent.parent.parent.htmlviewer.setAttribute("visible",true);
+                                    
+                                    parent.url.setAttribute('text', url);
+                                ]]>
+                            </method>
+        					
+        				</browserButton> 
+        				
+        			</view>
+        			
+        			<view x="0" resource="./resources/browser_sub_cit.swf" 
+        				  width="${ parent.parent.parent.parent.width-2 }" stretches="width" y="28" />
+        			
+        		</view>
+        		
+            </view>
+        </view>
+        
+		<html name="htmlviewer" x="4" y="${ (canvas.ismoderator) ? 60 : 22 }" width="${ parent.width-8 }" 
+			  height="${ (canvas.ismoderator) ? (parent.height - 90) : (parent.height-52) }" >
+			
+			<attribute name="ignoreNextEvent" value="false" type="boolean" />
+			
+			<handler name="onloading" args="loading">
+				<![CDATA[
+					this.loading = loading;
+					if ($debug) Debug.write("LOADING 1 ",loading,this.src);
+					if ($debug) Debug.write("LOADING 2 ",loading,this);
+					if (canvas.ismoderator) {
+						if (!loading && !this.ignoreNextEvent) {
+							parent.getIFrameLocation();
+							
+							//parent.sendBrowserMessageToMembers.objMessage = new Object();
+		                	//parent.sendBrowserMessageToMembers.objMessage[0] = "newBrowserURL";
+		                	//parent.sendBrowserMessageToMembers.objMessage[1] = this.src;
+		                	//parent.sendBrowserMessageToMembers.doCall();
+						}
+					}
+					
+					if (!loading) {
+						this.ignoreNextEvent = false;
+					}
+				]]>
+			</handler>
+			<handler name="onsrc" args="src">
+				this.src = src;
+				//if ($debug) Debug.write("SRC ",src);
+			</handler>
+		</html>
+		
+		<labelText labelid="1006" y="${ parent.height-22 }" x="2"
+				   visibility="${ (canvas.ismoderator) ? 'visible' : 'hidden' }" />
+		
+        <simpleLabelButton labelid="61" width="100" 
+			   visibility="${ (canvas.ismoderator) ? 'visible' : 'hidden' }" 
+			   x="${ parent.width-105 }" y="${ parent.height-24 }" 
+               onclick="this.parent.doClose();" />
+    		  
+	</class>
+ 	
+</library>
diff --git a/WebContent/src/modules/conference/browser/library.lzx b/WebContent/src/modules/conference/browser/library.lzx
new file mode 100644
index 0000000..d88ffc2
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/library.lzx
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	<include href="conferenceBrowser.lzx"/>
+</library>
diff --git a/WebContent/src/modules/conference/browser/resources/browser_sub_cit.fla b/WebContent/src/modules/conference/browser/resources/browser_sub_cit.fla
new file mode 100644
index 0000000..c5e5ac6
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/browser_sub_cit.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/browser_sub_cit.swf b/WebContent/src/modules/conference/browser/resources/browser_sub_cit.swf
new file mode 100644
index 0000000..784c5cc
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/browser_sub_cit.swf
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/home.fla b/WebContent/src/modules/conference/browser/resources/home.fla
new file mode 100644
index 0000000..f8d095a
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/home.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/home.png b/WebContent/src/modules/conference/browser/resources/home.png
new file mode 100644
index 0000000..39d1123
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/home.png
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/next.fla b/WebContent/src/modules/conference/browser/resources/next.fla
new file mode 100644
index 0000000..13c844e
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/next.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/next.png b/WebContent/src/modules/conference/browser/resources/next.png
new file mode 100644
index 0000000..7241532
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/next.png
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/pre.fla b/WebContent/src/modules/conference/browser/resources/pre.fla
new file mode 100644
index 0000000..74da78f
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/pre.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/pre.png b/WebContent/src/modules/conference/browser/resources/pre.png
new file mode 100644
index 0000000..7e526f5
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/pre.png
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/read.png b/WebContent/src/modules/conference/browser/resources/read.png
new file mode 100644
index 0000000..b41fa2b
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/read.png
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/refresh.fla b/WebContent/src/modules/conference/browser/resources/refresh.fla
new file mode 100644
index 0000000..dce3961
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/refresh.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/refresh.png b/WebContent/src/modules/conference/browser/resources/refresh.png
new file mode 100644
index 0000000..b912672
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/refresh.png
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/run.fla b/WebContent/src/modules/conference/browser/resources/run.fla
new file mode 100644
index 0000000..65d073e
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/run.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/resources/run.png b/WebContent/src/modules/conference/browser/resources/run.png
new file mode 100644
index 0000000..c77b8d9
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/resources/run.png
Binary files differ
diff --git a/WebContent/src/modules/conference/browser/test/conferenceBrowser_test.jsp b/WebContent/src/modules/conference/browser/test/conferenceBrowser_test.jsp
new file mode 100644
index 0000000..3172abe
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/test/conferenceBrowser_test.jsp
@@ -0,0 +1,33 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html>
+   <head>
+      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+   
+      <link rel="SHORTCUT ICON" href="http://www.laszlosystems.com/favicon.ico">
+      <title>OpenLaszlo Application</title>
+	<script type="text/javascript" src="<%= request.getContextPath() %>/lps/includes/embed-compressed.js"></script>
+	</head>
+   	<body>
+	    <script type="text/javascript">
+              Lz.swfEmbed({url: 'conferenceBrowser_test.lzx?lzt=swf', bgcolor: '#ffffff', width: '100%', height: '100%', id: 'lzapp', accessible: 'false', wmode: 'transparent'});
+            </script>
+   </body>
+</html>
diff --git a/WebContent/src/modules/conference/browser/test/conferenceBrowser_test.lzx b/WebContent/src/modules/conference/browser/test/conferenceBrowser_test.lzx
new file mode 100644
index 0000000..81eed0e
--- /dev/null
+++ b/WebContent/src/modules/conference/browser/test/conferenceBrowser_test.lzx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas title="Browser Test" debug="true">
+	<include href="../../../../base/"/>
+	<include href="../conferenceBrowser.lzx"/>
+	
+	<conferenceBrowser name="cb" width="400" height6="800"/>
+</canvas>
diff --git a/WebContent/src/modules/conference/commonVideoComponentAdapter.lzx b/WebContent/src/modules/conference/commonVideoComponentAdapter.lzx
new file mode 100644
index 0000000..0e082e1
--- /dev/null
+++ b/WebContent/src/modules/conference/commonVideoComponentAdapter.lzx
@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="commonVideoComponentAdapter" extends="node">

+	

+

+    <handler name="oninit">

+    	var t = this;

+        canvas.videoComp_lc.lc_switchMicMuted = function(publicSID, tMute) {

+            if ($debug) Debug.write("lc_switchMicMuted", publicSID, tMute);

+            canvas.thishib.switchMicMuted.setMute(publicSID, tMute);

+        };

+        canvas.videoComp_lc.lc_giveExclusiveAudio = function(publicSID) {

+            if ($debug) Debug.write("lc_giveExclusiveAudio", publicSID);

+            canvas.thishib.giveExclusiveAudio.setExclusiveAudio(publicSID);

+        };

+        canvas.videoComp_lc.as3ConnectionSuccess = function() {

+        	//FIXME: Throws a Null Pointer Exception if the parent view was already destroyed

+        	t.parent.as3ConnectionSuccess();

+        }

+		canvas.videoComp_lc.onInterviewPodCount = function(count) {

+			//if ($debug) Debug.write(":::: onInterviewPodCount", count);

+			if (canvas._drawarea["onInterviewPodCount"]) {

+				canvas._drawarea.onInterviewPodCount(count);

+			}

+		}

+    </handler>

+    

+    <!---

+        Show the popup with the possibility to choose the device settings

+        @param isSyncUpdate show the popup also if the user has clicked the "do not show again" chceckbox

+        @param interviewPodId the view id

+        @param tx x-position

+        @param ty y-position

+        @param twidth width-position

+        @param theight height-position

+     -->

+    <method name="showDevicePopUpInterview" args="isSyncUpdate,interviewPodId,tx,ty,twidth,theight">

+    	if ($debug) Debug.write("showDevicePopUpInterview ",isSyncUpdate,interviewPodId,tx,ty,twidth,theight);

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "createEditRecordStream", [isSyncUpdate, true, interviewPodId]);

+    </method>

+    

+    <!---

+        Show the popup with the possibility to choose the device settings

+        @param isSyncUpdate show the popup also if the user has clicked the "do not show again" chceckbox

+     -->

+    <method name="showDevicePopUp" args="isSyncUpdate">

+    	if ($debug) Debug.write("showDevicePopUp ",isSyncUpdate);

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "createEditRecordStream", [isSyncUpdate, false, -1]);

+    </method>

+    

+    <!---

+        Invoked after the user enters the room to connect the SWF10 app to the server via rtmp(t/s)

+     -->

+    <method name="reconnectSuccess" args="isInterview">

+    	if ($debug) Debug.write("Send reconnectSuccess to ",canvas.rtmp_lc_name);

+    	canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "reconnectSuccess", [canvas.thishib.src, canvas.publicSID

+    		, hib.userobject, isInterview, canvas.getHttpHost(), canvas.red5httpport]);

+    </method>

+    

+    <handler name="onismoderator" reference="canvas" args="m">

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "ismoderatorChanged", [m]);

+    </handler>

+

+    <!---

+        Creates video object

+    -->

+    <method name="createVideo" args="publicSID,displayName,broadcastId,avsettings,interviewPodId,object">

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "createVideo", [publicSID, displayName, broadcastId, avsettings, interviewPodId, object]);

+    </method>

+

+    <method name="createVideoObject" args="publicSID,isBroadcasting,interviewPodId,object">

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "createVideoObject", [publicSID, isBroadcasting, interviewPodId,object]);

+    </method>

+

+	<method name="batchCreateVideo" args="selfStreamId, clients">

+		canvas.sendViaLocalConnection(canvas.vid_lc_name, "batchCreateVideo", [selfStreamId, clients]);

+	</method>

+

+    <!---

+        invoked whenever a User starts to Stream Video in this Room,

+        interviewPodId has only a meaning in the Room Type Interview

+     -->

+    <method name="startStream" args="publicSID,broadcastId,firstname,lastname,interviewPodId,vWidth,vHeight">

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "startStream", [publicSID,broadcastId,firstname,lastname,interviewPodId,vWidth,vHeight]);

+    </method>

+

+    <!---

+        invoked remotely by Red5-notification

+        shows a green light if somebody is speaking

+        @param string broadcastId broadcastId

+        @param boolean bool show light on/off

+    -->

+    <method name="setSpeakingByPos" args="publicSID,bool">

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "setSpeakingByPos", [publicSID, bool]);

+    </method>

+

+    <!---

+        stops the streaming but does not destroy the view

+        @param int broadcastId broadcastId

+     -->

+    <method name="closeStreamClient" args="publicSID">

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "closeStreamClient", [publicSID]);

+    </method>

+

+    <!---

+        stops the streaming but and destroys the view

+        @param int broadcastId broadcastId

+     -->

+    <method name="disconnectclient" args="publicSID">

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "disconnectclient", [publicSID]);

+    </method>

+

+    <method name="resetAllValues">

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "resetAllValues",null);

+    </method>

+

+    <!---

+     invoked if another client logs into the room

+    after choosing devices -->

+    <method name="setAVSettingsToClient" args="rcl">

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "setAVSettingsToClient", [rcl]);

+    </method>

+

+    <method name="createEditRecordStream" args="syncUpdate"><![CDATA[

+        //this.syncUpdate = syncUpdate;

+        //h.getBroadCastId.doCall();

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "createEditRecordStream", [syncUpdate]);

+    ]]></method>

+

+    <method name="removeVideoByUser" args="publicSID">

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "removeVideoByUser", [publicSID]);

+    </method>

+

+    <!--

+        Mutes/unmutes a sound of user's video

+        with the publicSID

+    -->

+    <method name="muteSound" args="publicSID, bool">

+    	if ($debug) Debug.write("muteSound :: ",publicSID,bool);

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "muteSound", [publicSID, bool]);

+    </method>

+

+    <method name="giveExclusiveAudio" args="publicSID">

+    	if ($debug) Debug.write("giveExclusiveAudio :: ",publicSID);

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "giveExclusiveAudio", [publicSID]);

+    </method>

+

+    <!---

+        Updates microphone's state of roomClient

+    -->

+    <method name="updateMuteStatusVideoView" args="roomClient">

+    	if ($debug) Debug.write("updateMuteStatusVideoView :: ",roomClient);

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "updateMuteStatusVideoView", [roomClient]);

+    </method>

+

+    <!---

+        Shows the window with device settings

+    -->

+    <method name="changeDevice">

+    	if ($debug) Debug.write("changeDevice :: ");

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "changeDevice", null);

+    </method>

+

+    <!---

+        Shows the exit dialog

+    -->

+    <method name="exitRoom">

+    	if ($debug) Debug.write("exitRoom :: ");

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "exitRoom", null);

+    </method>

+

+    <!---

+        Shows the close whiteboard dialog

+    -->

+    <method name="closeWhiteboard">

+    	if ($debug) Debug.write("closeWhiteboard :: ");

+        canvas.sendViaLocalConnection(canvas.vid_lc_name, "closeWhiteboard", null);

+    </method>

+</class>

+

+</library>

diff --git a/WebContent/src/modules/conference/commonVideoViewContent.lzx b/WebContent/src/modules/conference/commonVideoViewContent.lzx
new file mode 100644
index 0000000..6f8f018
--- /dev/null
+++ b/WebContent/src/modules/conference/commonVideoViewContent.lzx
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<class name="commonVideoViewContent" extends="view">
+
+    <!--
+		This method returns a free position for a new video object
+		@param horizontal offset between two video objects
+	 -->
+    <method name="getVideoObjectFreePos" args="offsetLength,videoWidth,videoHeight">
+        <![CDATA[
+            var newx = 20;
+            var newy = 0;
+            var posFound = false;
+            while (!posFound) {
+                posFound = true;
+                for (var i=0;i<this.subviews.length;i++){
+                    var subview = this.subviews[i];
+                    var left = subview.x;
+                    var right = subview.x + subview.width;
+                    var top = subview.y;
+                    var bottom = subview.y + subview.height;
+
+                    if( !(newx > right
+                        || (newx + videoWidth) < left
+                        || newy > bottom
+                        || (newy + videoHeight) < top ))
+                    {
+                        newx = right + offsetLength;
+                        posFound = false;
+                    }
+                    if ((newx + videoWidth) >= canvas.width) {
+                        newx = 20;
+                        newy += 10;
+                        posFound = false;
+                    }
+                }
+            }
+
+            if ((newy + videoHeight) >= canvas.height) {
+                newy = 0;
+            }
+
+            var result = [newx, newy];
+            return result;
+        ]]>
+    </method>
+
+</class>
+
+<class name="commonVideoViewContentHideWhiteboard" extends="view">
+
+    <!--
+		This method returns a free position for a new video object
+		@param horizontal offset between two video objects
+	 -->
+    <method name="getVideoObjectFreePos" args="offsetLength,videoWidth,videoHeight">
+        <![CDATA[
+            var newx = 20;
+            var newy = 0;
+            var posFound = false;
+            while (!posFound) {
+                posFound = true;
+                for (var i=0;i<this.subviews.length;i++){
+                    var subview = this.subviews[i];
+                    var left = subview.x;
+                    var right = subview.x + subview.width;
+                    var top = subview.y;
+                    var bottom = subview.y + subview.height;
+
+                    if( !(newx > right
+                        || (newx + videoWidth) < left
+                        || newy > bottom
+                        || (newy + videoHeight) < top ))
+                    {
+                        newx = right + offsetLength;
+                        posFound = false;
+                    }
+                    if ((newx + videoWidth) >= this.width) {
+                        newx = 20;
+                        newy += 10;
+                        posFound = false;
+                    }
+                }
+            }
+
+            if ((newy + videoHeight) >= parent.height) {
+                newy = 0;
+            }
+
+            var result = [newx, newy];
+            return result;
+        ]]>
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/conference/conferenceMenubar.lzx b/WebContent/src/modules/conference/conference/conferenceMenubar.lzx
new file mode 100644
index 0000000..ed89fa0
--- /dev/null
+++ b/WebContent/src/modules/conference/conference/conferenceMenubar.lzx
@@ -0,0 +1,254 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<class name="restrictedConferenceMenubar" extends="conferenceMenubar" viewType="restricted" />
+
+	<class name="interviewConferenceMenubar" extends="conferenceMenubar" viewType="interview"/>
+	
+	<class name="conferenceMenubar" extends="view" height="28" width="${ canvas.width }" 
+						bgcolor="$once{ canvas.getThemeColor('styleMenuBarBaseColor') }" >
+						
+		<attribute name="viewType" value="conference" type="string" />
+						
+	    <attribute name="selected" value="null" />
+    
+	    <method name="sendOpenMenu" args="menuref">
+	    	if (this.selected != null) {
+	    		this.selected.setAttribute("selected",false);
+	    	}
+	    	this.selected = menuref;
+	    	this.selected.setAttribute("selected",true);
+	    </method>
+			
+		<view name="itemlist" layout="axis:x;spacing:0" >
+			
+			<conferenceExitButton name="_exitbtn" 
+				text_y_inset="4" text_fontsize="14" down_y_inset="8" height="28" />
+				
+			<baseMenuMeetingsItem text="$once{ canvas.getLabelName(245) }" 
+						text_y_inset="4" text_fontsize="14" down_y_inset="8"
+						textToolTip="" height="28"
+						visible="${ (classroot.viewType=='interview') ? false : ((canvas.ismoderator) ? true : ((canvas.isAllowedToDraw) ? true : false )) }"
+						>
+				<handler name="onclick">
+			    	new lz.conferenceMenuFiles(canvas,{
+			    				x:this.getAttributeRelative("x",canvas),
+			    				y:this.getAttributeRelative("y",canvas)+this.height,
+			    				btnRef:this,
+			    				list:this.list
+			    			});
+			        this.parent.parent.sendOpenMenu(this);
+			    </handler>
+			</baseMenuMeetingsItem>
+			
+			<baseMenuMeetingsItem text="$once{ canvas.getLabelName(635) }" 
+						text_y_inset="4" text_fontsize="14" down_y_inset="8"
+						textToolTip="" height="28"
+						visible="${ canvas.currentRoomObj.hideActionsMenu ? false : ((classroot.viewType=='conference') ? true : (canvas.ismoderator ? true : (canvas.isAllowedToDraw ? true : false ))) }"
+						>
+				<handler name="onclick">
+			    	new lz.conferenceMenuActions(canvas,{
+			    				x:this.getAttributeRelative("x",canvas),
+			    				y:this.getAttributeRelative("y",canvas)+this.height,
+			    				btnRef:this
+			    			});
+			        this.parent.parent.sendOpenMenu(this);
+			    </handler>
+			</baseMenuMeetingsItem>
+			
+		</view>
+	
+	</class> 
+	
+	<class name="conferenceExitButton" extends="view" height="34" width="${ this._ctext.width+36 }" >
+	
+	    <attribute name="text_y_inset" value="6" type="number" />
+	    <attribute name="text_fontsize" value="14" type="number" />
+	    
+	    <attribute name="down_y_inset" value="10" type="number" />
+	    
+	    <handler name="onmouseover">
+            this.bgc.setAttribute('visibility','visible');
+	    </handler>
+	    <handler name="onmouseout">
+            this.bgc.setAttribute('visibility','hidden');
+	    </handler>
+	    
+	    <handler name="oninit">
+			<![CDATA[
+				if (canvas.isRemoteUser()) {
+	            	if ($debug) Debug.write("this mbarcontent ",this);
+	            	if (canvas.destroyExitButton) {
+	                    this.destroy();
+	            	}
+	            }
+            ]]>
+		</handler>
+		<handler name="onclick">
+            canvas._videocontainer._videoviewcontent.exitRoom();
+		</handler>
+	    
+	    <view width="${ parent.width-1 }" bgcolor="0xFFFFFF" opacity="0.4" height="$once{ parent.height - 2}" y="1"
+	        visibility="hidden" name="bgc"/>
+	        
+	    <image src="$once{ canvas.getThemeImage( 'exit_btn_rsc' ) }" y="4" x="4" />
+	    
+	    <view width="1" height="${ parent.height }" y="0" bgcolor="0xEEEEEE" x="${ parent.width-1 }" />
+	    
+	    <labelText labelid="789" name="_ctext" fontstyle="plain" fgcolor="0xFFFFFF"
+	        	fontsize="$once{ parent.text_fontsize }" y="$once{ parent.text_y_inset }" x="30" />
+	
+	    <labelTooltip name="_textToolTip" labelid="309" multiline="false" />
+	    
+	</class>
+	
+	
+	
+	<class name="conferencDropDownMenuItem" extends="view" height="36">
+	
+		<attribute name="isSpacer" value="false" type="boolean" />
+	
+		<attribute name="enabled" type="boolean" setter="this.setEnabled(enabled)" />
+		
+		<method name="setEnabled" args="e">
+			this.enabled = e;
+			if (!this.isinited) {
+				return;
+			}
+			if (this.enabled) {
+				this._ctext.setAttribute("fgcolor",canvas.getThemeColor('menuTextColor'));
+				this._ctextTooltip.setAttribute("fgcolor",canvas.getThemeColor('menuTextColor'));
+			} else {
+				this._ctext.setAttribute("fgcolor",canvas.getThemeColor('menuTextDisabledColor'));
+				this._ctextTooltip.setAttribute("fgcolor",canvas.getThemeColor('menuTextDisabledColor'));
+			}
+			if (this.command) {
+				this.command.enabled = this.enabled;
+			}
+		</method>
+		
+		<attribute name="labelid" type="number"
+                   setter="this.setLabelId( labelid )"   when="once" />
+                   
+		<method name="setLabelId" args="id" >
+            this.labelid = id;
+            if ( this.labelid ) {
+                this._ctext.setAttribute('text', canvas.getLabelName(this.labelid));
+            }
+        </method>
+		
+		<attribute name="command" type="expression"
+                   setter="this.setCommand( command )"   when="once" />
+		
+		<method name="setCommand" args="cmd" >
+            this.command = cmd;
+            if ( this.command ) {
+                this._ctextTooltip.setAttribute('text',canvas.getLabelName(command.tipLabelId));
+            }
+        </method>
+        
+        <handler name="onclick">
+        	if (!this.enabled) {
+        		return;
+        	}
+        	this.command.execute(null);
+        	parent.parent.close();
+        </handler>
+        
+        <handler name="onmouseover">
+	        this._bg.setAttribute("visibility","visible");
+	    </handler>
+	    
+	    <handler name="onmouseout">
+	        this._bg.setAttribute("visibility","hidden");
+	    </handler>
+	
+	    <view name="_bg" visibility="hidden" width="${ parent.width-2 }" y="0" x="1"
+	          bgcolor="0xFFFFFF" opacity="0.5" height="36" />
+	    
+	    <text name="_ctext" fontstyle="bold" fgcolor="0x666666"
+	        	fontsize="14" y="2" x="10" />
+	        	
+	    <text name="_ctextTooltip" fontstyle="plain" fgcolor="0x666666"
+	        	fontsize="10" y="20" x="10" />	
+		
+	</class> 
+	
+	<class name="conferenceMenuFiles" extends="baseDropDownMenuList"
+			height="${ this._content.height+2 }" width="${ this._content.width+2 }">
+			
+		<view name="_content" x="1" y="1" 
+			layout="axis:y;spacing:1" bgcolor="$once{ canvas.getThemeColor('menuBackgroundColor') }" >
+			
+			<conferencDropDownMenuItem labelid="15" command="cmd_importFile"
+						enabled="${ canvas.ismoderator }" />
+			
+		</view>
+		
+	</class>
+	
+	<class name="conferenceMenuActions" extends="baseDropDownMenuList"
+			height="${ this._content.height+2 }" width="${ this._content.width+2 }">
+			
+		<handler name="oninit">
+	        this.fixWidth();
+		</handler>
+			
+		<view name="_content" x="1" y="1" 
+			layout="axis:y;spacing:1" bgcolor="$once{ canvas.getThemeColor('menuBackgroundColor') }" >
+			
+			<conferencDropDownMenuItem labelid="213" command="cmd_invitation"
+						enabled="${ canvas.ismoderator }" />
+			<horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="239" command="cmd_shareDesktop" 
+						enabled="${ classroot.btnRef.classroot.viewType != 'interview' &amp;&amp; canvas.ismoderator }" />
+			<horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="784" command="cmd_applyforMod" enabled="${ !canvas.ismoderator }" />
+			<horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="785" command="cmd_applyforWhiteBoard" enabled="${ !canvas.ismoderator }" />
+			<horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="1601" command="cmd_applyforA" enabled="${ !canvas.ismoderator }" />
+			<horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="786" command="cmd_applyforAV" enabled="${ !canvas.ismoderator }" />
+			<horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="24" command="cmd_createPoll" enabled="${ canvas.ismoderator }" />
+			<horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="37" command="cmd_pollResults" enabled="true" />
+			<horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="42" command="cmd_checkPollVoted" enabled="${ canvas.user_id != -1 }" />
+			<horizontalDropDownSpacer
+						 visible="$once{ canvas.RED5_SIP_ENABLE == 'yes' &amp;&amp; canvas.currentRoomObject.sipEnabled }" />
+            <conferencDropDownMenuItem labelid="1447" command="cmd_showSipDialer" 
+            			 visible="$once{ canvas.RED5_SIP_ENABLE == 'yes' &amp;&amp; canvas.currentRoomObject.sipEnabled }"
+            			 enabled="$once{ canvas.RED5_SIP_ENABLE == 'yes' &amp;&amp; canvas.currentRoomObject.sipEnabled }"/>
+            <horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="1126" command="cmd_editWhiteboardDefault" enabled="true"/>
+			<!-- Save Whiteboard as Image menues are commented for now
+            <horizontalDropDownSpacer />
+			<conferencDropDownMenuItem labelid="560" command="cmd_exportFileSVG" enabled="true"/>
+			<conferencDropDownMenuItem labelid="561" command="cmd_exportFilePNG" enabled="true"/>
+			<conferencDropDownMenuItem labelid="562" command="cmd_exportFileJPG" enabled="true"/>
+			-->
+		</view>
+		
+	</class>
+</library>
diff --git a/WebContent/src/modules/conference/conference/library.lzx b/WebContent/src/modules/conference/conference/library.lzx
new file mode 100644
index 0000000..bc15f04
--- /dev/null
+++ b/WebContent/src/modules/conference/conference/library.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<include href="roomListItem.lzx" />
+	<include href="roomListDetails.lzx" />
+    <include href="conferenceMenubar.lzx" />
+
+</library>
diff --git a/WebContent/src/modules/conference/conference/roomListDetails.lzx b/WebContent/src/modules/conference/conference/roomListDetails.lzx
new file mode 100644
index 0000000..1db94ba
--- /dev/null
+++ b/WebContent/src/modules/conference/conference/roomListDetails.lzx
@@ -0,0 +1,171 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="userRoomTabItem" extends="view" 
+	   width="$once{ parent.width }" >
+
+	<attribute name="user_id" value="0" type="number" />
+	<attribute name="username" value="" type="string" />
+	<attribute name="usertime" value="" type="string" />
+	<attribute name="cbtext" value="" type="string" />
+	
+	<handler name="oninit">
+		<![CDATA[
+	        var downloadurl = canvas.getUrl() + 'DownloadHandler?fileName=CHAT'
+	        		+'&moduleName=chat&parentPath=&room_id='
+	        		+'&remoteUserid='+this.user_id
+	        		+'&sid='+canvas.sessionId;
+	        		
+	        if ($debug) Debug.write("downloadurl "+downloadurl);
+	        this._userpic.setAttribute('src',downloadurl);	
+	        
+	        if ($debug) Debug.write("TIME: "+this.usertime);
+	        
+        ]]>
+	</handler>
+	
+	<image name="_userpic" />
+
+	<text text="$once{ parent.username }" x="40"
+		  width="$once{ parent.width - 40 }"
+		  selectable="true" />
+	
+	<text text="$once{ parent.usertime }" x="40" y="20" />
+
+</class>
+
+<class name="roomListDetails" extends="view" >
+
+	<attribute name="roomid" value="0" type="number" />
+	<attribute name="roomname" value="" type="string" />
+	<attribute name="roomcomment" value="" type="string" />
+	<attribute name="currentusers" value="null" />
+	
+	
+	<method name="doinit" args="currentusers,roomid,roomname,roomcomment">
+		<![CDATA[
+			if ($debug) Debug.write("doinit",currentusers,roomid,roomname);
+			this.setAttribute('currentusers',currentusers);
+			this.setAttribute('roomid',roomid);
+			this.setAttribute('roomname',roomname);
+			this.setAttribute('roomcomment',roomcomment);
+			this._roomname.setAttribute('text',canvas.getLabelName(406)+" "+roomname);
+			this._roomcomment.setAttribute('text', roomcomment);
+			this._users.clearList();
+			if (this.currentusers != null) {
+				for (var i = 0;i<this.currentusers.length;i++){
+					var username = this.currentusers[i].firstname + " "
+							+ this.currentusers[i].lastname
+							+ " (" + this.currentusers[i].username + ") ";
+					 new lz.userRoomTabItem(this._users._users._cbtext,{user_id:this.currentusers[i].user_id,username:username,usertime:canvas.getLabelName(408)+parseDateToStringTime(this.currentusers[i].roomEnter)});
+				}
+			}
+			this.bdatum.setAttribute("visibility", "hidden");
+    		this.edatum.setAttribute("visibility", "hidden");
+    		this.l_bdatum.setAttribute("visibility", "hidden");
+    		this.l_edatum.setAttribute("visibility", "hidden");
+    		if (roomid > 0) {
+				this.getAppointmentData.doCall();
+			}
+		]]>
+	</method>
+	
+	<!-- Retrieving Appointmentdata for Meeting -->
+	<netRemoteCallHib name="getAppointmentData" remotecontext="$once{ canvas.thishib }" 
+		funcname="conferenceservice.getAppointMentDataForRoom" >   
+		<netparam><method name="getValue">return parent.parent.roomid;</method></netparam>
+		<handler name="ondata" args="value">	
+		    <![CDATA[
+		    	if ($debug) Debug.write("getAppointmentData: ",value);
+		    	
+		    	if(value!=null){
+		    		
+		    		if ($debug) Debug.write("Appointment Name : " + value.title);
+		    		parent.bdatum.setAttribute('text',""+value.start);
+		    		parent.edatum.setAttribute('text',""+value.end);
+		    		
+		    		
+		    		parent.bdatum.setAttribute("visibility","visible");
+		    		parent.edatum.setAttribute("visibility","visible");
+		    		parent.l_bdatum.setAttribute("visibility","visible");
+		    		parent.l_edatum.setAttribute("visibility","visible");
+		    		
+		    		if ($debug) Debug.write("Appointment Start : " + value.start);
+		    		if ($debug) Debug.write("Appointment End : " + value.end);
+		    		
+		    	} else{
+		    		
+		    		parent.bdatum.setAttribute('text','');
+		    		parent.edatum.setAttribute('text','');
+		    		
+		    		parent.bdatum.setAttribute("visibility", "hidden");
+		    		parent.edatum.setAttribute("visibility", "hidden");
+		    		parent.l_bdatum.setAttribute("visibility", "hidden");
+		    		parent.l_edatum.setAttribute("visibility", "hidden");
+		    		
+		    	}
+		    ]]>	        	          				
+		</handler>	
+	</netRemoteCallHib> 	
+	
+	<netRemoteCallHib name="getRoomClientsListByRoomId" funcname="conferenceservice.getRoomClientsListByRoomId" 
+		remotecontext="$once{ canvas.thishib }" >   
+		<netparam><method name="getValue">return parent.parent.roomid;</method></netparam>
+		<handler name="ondata" args="value">	
+		    <![CDATA[
+		    	if ($debug) Debug.write("getRoomClientsListByRoomId: ",value);
+		    	parent.currentusers = value;
+		    	parent.doinit();
+		    ]]>	        	          				
+		</handler>	
+	</netRemoteCallHib>   	
+	
+	<labelText labelid="404" fontstyle="italic" width="200" />
+	
+	<labelText name="_roomname" labelid="406" y="20" width="200" />
+	
+	<labelText name="l_bdatum" labelid="570" y="40" width="50" visible="false" />
+	<labelText name="bdatum" y="40" x="75" width="100" text="" visible="false" /> 	            	
+
+	<labelText name="l_edatum" labelid="571" y="60" width="50" visible="false" />
+	<labelText name="edatum" y="60" x="75" width="100" text="" visible="false" />
+
+	<labelText name="_roomcomment" x="75" y="${parent.l_edatum.y + (parent.l_edatum.visible ? 30 : 0)}" width="100" text=""/>
+	<labelText labelid="270" y="${parent._roomcomment.y}" width="50" />
+
+	<labelText name="user_label" labelid="407" y="${10 + parent._roomcomment.y + parent._roomcomment.height}" width="200" />
+	<view name="_users" width="300" y="${30 + parent._roomcomment.y + parent._roomcomment.height}"
+				height="${ parent.height - parent._users.y }" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }">
+		<method name="clearList">
+			for (var eg in this._users._cbtext.subviews) 
+				this._users._cbtext.subviews[eg].destroy();
+		</method>
+		<view name="_users" width="299" height="${ parent.height - 1 }" bgcolor="0xFFFFFF" 
+			  x="1" y="1" clip="true" >
+			<view name="_cbtext" width="286" layout="axis:y;spacing:2" />
+			<om_vscrollbar />
+		</view>
+	</view>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/conference/roomListItem.lzx b/WebContent/src/modules/conference/conference/roomListItem.lzx
new file mode 100644
index 0000000..e9776d9
--- /dev/null
+++ b/WebContent/src/modules/conference/conference/roomListItem.lzx
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<class name="roomListItem" extends="view" bgcolor="$once{ canvas.bgColorMenuItems }" 
+		   height="50" onmouseover="" onmouseout="" width="478" >
+
+		<attribute name="ispublic" value="false" type="boolean" />
+		<attribute name="isaudience" value="false" type="boolean" />
+		<attribute name="obj" value="null" />
+		<attribute name="roomid" value="0" type="number" />
+		<attribute name="starttime" value="" type="string" />
+		<attribute name="roomname" value="" type="string" />
+		<attribute name="roomcomment" value="" type="string" />
+
+		<attribute name="roomClassName" value="conferenceView" type="string" />
+		<attribute name="currentusers" value="null" />
+
+		<attribute name="maxUsers" value="4" type="number" />
+		
+		<attribute name="roomType" value="0" type="number" />
+
+		<attribute name="checkForMaxUsers" value="false" type="boolean" />
+
+		<handler name="oninit">
+		<![CDATA[
+
+		    if (obj != null) {
+    			//if ($debug) Debug.write("obj: ",obj);
+    			if (this.ispublic) {
+    				this.maxUsers = obj.numberOfPartizipants;
+    			} else {
+    				this.maxUsers = obj.room.numberOfPartizipants;
+    			}
+    			this._users.setAttribute('text', canvas.getLabelName(398) + ' '
+    							+ this.currentusers.length + " / " + this.maxUsers);
+    			var tString = canvas.getLabelName(401) + "<br/>";
+    			for (var i = 0; i < this.currentusers.length; i++) {
+    				tString += this.currentusers[i].firstname + " "
+    						+ this.currentusers[i].lastname + " ("
+    						+ this.currentusers[i].username + ") "
+    						+ canvas.getLabelName(399)
+    						+ parseDateToStringTime(this.currentusers[i].roomEnter)
+    						+ " <br/>";
+    			}
+    			this._labeltooltip.setAttribute('text', tString);
+		    }
+		]]>
+		</handler>
+
+		<handler name="onclick">
+			if (obj != null) {
+    			canvas.isConference = !this.isaudience;
+    			if (this.isaudience)
+    				connectedIsAudience = '_' + 'audi';
+    			if (this.ispublic) {
+    				hib.conferencedomain = "public";
+    				hib.currentroomid = this.obj.rooms_id;
+    			} else {
+    				hib.conferencedomain = this.obj.organisation.organisation_id;
+    				hib.currentroomid = this.obj.room.rooms_id;
+    			}
+			}
+			parent.parent.parent.parent.parent._roomlistdetails.doinit(
+    					this.currentusers, this.roomid, this.roomname, this.roomcomment);
+		</handler>
+
+		<method name="checkMaxUsers">
+		<![CDATA[
+			if (this.currentusers == null || this.currentusers.length < this.maxUsers) {
+				this.enterRoom();
+			} else {
+				new lz.labelerrorPopup(canvas,{errorlabelid:99});
+				//new lz.rpcErrorDialog(canvas.main_content._content.inner, {
+				//			errorid : 30
+				//		});
+			}
+		]]>
+		</method>
+		
+		<method name="enterRoom">
+			if (this.obj == null) {
+				this.getRoomByOwnerAndType.doCall();
+			} else {
+				this.initRoom();
+			}
+		</method>
+		
+		<netRemoteCallHib name="getRoomByOwnerAndType" funcname="conferenceservice.getRoomByOwnerAndType"
+            remotecontext="$once{ canvas.thishib }" >
+			<netparam><method name="getValue">return canvas.sessionId;</method></netparam>  
+            <netparam> <method name="getValue">return parent.parent.roomType;</method></netparam>
+            <netparam> <method name="getValue">return parent.parent.roomname;</method></netparam>
+            <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("getRoomByOwnerAndType: ", value);
+                if (value != null) {
+                    parent.obj = value;
+                    parent.enterRoom();
+                }
+            ]]>
+            </handler>
+        </netRemoteCallHib>
+
+		<method name="initRoom">
+			if ($debug) Debug.write("roomListItem::initRoom ", this);
+			
+			canvas.isConference = !this.isaudience;
+			if (this.isaudience)
+				connectedIsAudience = '_' + 'audi';
+			if (this.ispublic) {
+				var roomObj = this.obj;
+				hib.conferencedomain = "public";
+				hib.currentroomid = this.obj.rooms_id;
+				//Debug.write("ispublic");
+			} else {
+				var roomObj = this.obj.room;
+				hib.conferencedomain = this.obj.organisation.organisation_id;
+				hib.currentroomid = this.obj.room.rooms_id;
+				//Debug.write("non ispublic");
+			}
+			
+			if (this.roomType == 1) {
+				this.roomClassName = canvas.conferenceRoomModule;
+			} else if (this.roomType == 2) {
+				new lz.labelerrorPopup(canvas,{error:'No RoomType currently available for roomTypeId 2'});
+				this.roomClassName = canvas.restrictedRoomModule;
+			} else if (this.roomType == 3) {
+                this.roomClassName = canvas.restrictedRoomModule;
+            } else if (this.roomType == 4) {
+                this.roomClassName = canvas.interviewRoomModule;
+            } else if (this.roomType == 5) {
+                this.roomClassName = canvas.customRoomModule;
+            } else {
+				if ($debug) Debug.warn("Not known RoomType: ",this.roomType);
+			}
+			//the conferencedomain is no more interesting, swagner 07.10.2009
+			//if ($debug) Debug.write("hib.conferencedomain: ", hib.conferencedomain);
+
+			if ($debug) Debug.write("Test Setup ",this.roomClassName);
+            
+			new lz.testSetup(canvas,{roomClassName:this.roomClassName,roomObj:roomObj});
+			
+		</method>
+
+		<netRemoteCallHib name="getRoomClientsListByRoomId" funcname="conferenceservice.getRoomClientsListByRoomId"
+			remotecontext="$once{ canvas.thishib }" >
+			<netparam> <method name="getValue">return parent.parent.roomid;</method></netparam>
+			<handler name="ondata" args="value">
+			<![CDATA[
+				if ($debug) Debug.write("getRoomClientsListByRoomId: ", value);
+				parent.currentusers = value;
+				parent.oninit.sendEvent();
+				if (parent.checkForMaxUsers) {
+					parent.checkMaxUsers();
+				}
+			]]>
+			</handler>
+		</netRemoteCallHib>
+
+		<labelText text="$once{ parent.roomname }" />
+
+		<labelText name="_users" y="26" />
+		<image name="_r" src="$once{ canvas.getThemeImage('reload_rsc') }" x="130" y="26"
+			onclick="parent.getRoomClientsListByRoomId.doCall()" >
+			<labelTooltip labelid="402" />
+		</image>
+  
+		<method name="checkConditionsWhenButtonClicked" args="_clicked">
+		<![CDATA[
+			if (parent.parent.parent.parent.parent.parent.parent.parent.finishedTabsQuantity < 3) {
+				parent.parent.parent.parent.parent.parent.parent.parent.clickedButton = _clicked;
+			} else {
+				checkForMaxUsers = true;
+				getRoomClientsListByRoomId.doCall();
+			}
+		]]>
+		</method>
+
+		<simpleLabelButton labelid="131" x="364" width="100" height="24" y="24"
+			onclick="parent.checkConditionsWhenButtonClicked(this)">
+		</simpleLabelButton>
+		
+		<labelTooltip multiline="true" name="_labeltooltip" />
+
+	</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/activityList.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/activityList.lzx
new file mode 100644
index 0000000..56e963e
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/activityList.lzx
@@ -0,0 +1,584 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="simplebaseItemActivityList" extends="view" height="40" bgcolor="$once{ canvas.getThemeColor('baseMouseOvercolorizer') }">
+    
+    <attribute name="message" value="" type="string" />
+    
+    <attribute name="rcl" value="null" />
+    
+    <attribute name="tStamp" value="null" />
+    
+    <method name="removeObject">
+        this.sendClearMessage(false);
+    </method>
+    
+    <method name="closeItem">
+        this._doHide.setAttribute('started', true);
+    </method>
+    
+    <method name="destroyItem">
+        this.destroy();
+        parent.scrollToMax();
+    </method>
+    
+    <method name="sendClearMessage" args="bool">
+        canvas.thishib.sendMessageWithClient.sendAdvMessage("hideActivityObj",bool,this.tStamp);
+    </method>
+    
+    <miniIcons resource="allow_deny_icon_rsc" visible="${ canvas.ismoderator }"
+               x="$once{ parent.width - 18 }" y="0">
+        <handler name="onclick">
+            this.parent.removeObject();
+        </handler>
+        <labelTooltip labelid="154" />
+    </miniIcons>   
+    
+    <animator name="_doHide" attribute="opacity" duration="1250" to="0" started="false">
+        <handler name="onstop">
+            parent.destroyItem();
+        </handler>
+    </animator>    
+    
+</class>	
+	
+<class name="baseItemActivityList" extends="view" height="40" bgcolor="$once{ canvas.getThemeColor('baseMouseOvercolorizer') }">
+	
+	<attribute name="message" value="" type="string" />
+	
+	<attribute name="labelidToolTipOkButton" value="1360" type="number" />
+	<attribute name="labelidToolTipDenyButton" value="1361" type="number" />
+    
+    <attribute name="rcl" value="null" />
+    
+    <attribute name="tStamp" value="null" />
+    
+    <method name="removeObject">
+        this.sendClearMessage(false);
+    </method>
+    
+    <method name="closeItem">
+    	this._doHide.setAttribute('started', true);
+    </method>
+    
+    <method name="destroyItem">
+        this.destroy();
+        parent.scrollToMax();
+    </method>
+    
+    <method name="sendClearMessage" args="bool">
+		canvas.thishib.sendMessageWithClient.sendAdvMessage("hideActivityObj",bool,this.tStamp);
+    </method>
+    
+    <miniIcons resource="allow_ok_icon_rsc" visible="${ canvas.ismoderator }"
+    		   x="$once{ parent.width - 18 }" >
+        <handler name="onclick">
+            this.parent.applyObject();
+        </handler>
+        <labelTooltip labelid="$once{ parent.parent.labelidToolTipOkButton }" />
+    </miniIcons> 
+               
+    <miniIcons resource="allow_deny_icon_rsc" visible="${ canvas.ismoderator }"
+    		   x="$once{ parent.width - 18 }" y="16">
+        <handler name="onclick">
+            this.parent.removeObject();
+        </handler>
+        <labelTooltip labelid="$once{ parent.parent.labelidToolTipDenyButton }" />
+    </miniIcons>   
+    
+    <animator name="_doHide" attribute="opacity" duration="1250" to="0" started="false">
+        <handler name="onstop">
+            parent.destroyItem();
+        </handler>
+    </animator>    
+	
+</class>
+
+<class name="activityListRestrictedRoomAV" extends="baseItemActivityList">
+    
+    <method name="applyObject">
+        canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = this.rcl.publicSID;
+        canvas.thishib.setBroadCastingFlag.canVideo = true;
+        canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+        canvas.thishib.setBroadCastingFlag.avsettings = "av";
+        canvas.thishib.setBroadCastingFlag.doCall(); 
+        this.sendClearMessage(true);
+    </method>   
+    
+    <view resource="av_allow_rsc" x="2" y="2" />
+    
+    <labelText text="$once{ parent.message }" multiline="true" x="40"
+               width="$once{ parent.width - 60 }"/>
+               
+</class>
+	
+<class name="activityListRestrictedRoomApplyForMuteOn" extends="baseItemActivityList" 
+	   labelidToolTipOkButton="1400">
+    
+    <method name="applyObject">
+        canvas.thishib.switchMicMuted.setMute(this.rcl.publicSID,true);
+        this.sendClearMessage(true);
+    </method>   
+    
+    <view resource="mute_btn_rsc" x="2" y="2" />
+    
+    <labelText text="$once{ parent.message }" multiline="true" x="40"
+               width="$once{ parent.width - 60 }"/>
+               
+</class>
+
+<class name="activityListRestrictedRoomApplyForGiveExclusiveAudioOn" extends="baseItemActivityList"
+	   labelidToolTipOkButton="1428">
+
+    <method name="applyObject">
+        canvas.thishib.setCanGiveAudio.sendValue(this.rcl.publicSID,true);
+        this.sendClearMessage(true);
+    </method>
+
+    <view resource="participants_exclusive_audio_rsc" x="2" y="2" />
+
+    <labelText text="$once{ parent.message }" multiline="true" x="20"
+               width="$once{ parent.width - 40 }"/>
+
+</class>
+	
+<class name="activityListRestrictedRoomApplyForMuteOff" extends="baseItemActivityList" 
+	   labelidToolTipOkButton="1401">
+	
+    <method name="applyObject">
+    	canvas.thishib.switchMicMuted.setMute(this.rcl.publicSID,false);
+        this.sendClearMessage(true);
+    </method>	
+	
+	<view resource="unmute_btn_rsc" x="2" y="2" />
+	
+	<labelText text="$once{ parent.message }" multiline="true" x="20"
+			   width="$once{ parent.width - 40 }"/>
+               
+</class>	
+
+<class name="activityListRestrictedRoomA" extends="baseItemActivityList">
+    
+    <method name="applyObject">
+        canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = this.rcl.publicSID;
+        canvas.thishib.setBroadCastingFlag.canVideo = false;
+        canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+        canvas.thishib.setBroadCastingFlag.avsettings = "a";
+        canvas.thishib.setBroadCastingFlag.doCall(); 
+        this.sendClearMessage(true);
+    </method>
+    
+    <view resource="a_allow_rsc" x="2" y="2" />
+    
+    <labelText text="$once{ parent.message }" multiline="true" x="20"
+               width="$once{ parent.width - 40 }"/>
+               
+</class>  
+    
+<class name="activityListRestrictedRoomV" extends="baseItemActivityList">
+    
+    <method name="applyObject">
+        canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = this.rcl.publicSID;
+        canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+        canvas.thishib.setBroadCastingFlag.avsettings = "v";
+        canvas.thishib.setBroadCastingFlag.doCall(); 
+        this.sendClearMessage(true);
+    </method>   
+    
+    <view resource="allow_video_only_rsc" x="2" y="2" />
+    
+    <labelText text="$once{ parent.message }" multiline="true" x="20"
+               width="$once{ parent.width - 40 }"/>
+               
+</class>   
+
+<class name="activityListRestrictedRoomWhiteboard" extends="baseItemActivityList">
+    
+    <method name="applyObject">
+        canvas.thishib.setCanDraw.publicSID = this.rcl.publicSID;
+        canvas.thishib.setCanDraw.canDraw = true;
+        canvas.thishib.setCanDraw.doCall();
+        this.sendClearMessage(true);
+    </method>   
+    
+    <view resource="participants_allow_drawing_rsc" x="2" y="2" />
+    
+    <labelText text="$once{ parent.message }" multiline="true" x="20"
+               width="$once{ parent.width - 40 }"/>
+               
+</class>  
+
+<class name="activityListRestrictedRoomScreen" extends="baseItemActivityList">
+    
+    <method name="applyObject">
+        
+        canvas.thishib.setCanShare.publicSID = this.rcl.publicSID;
+        canvas.thishib.setCanShare.canShare = true;
+        canvas.thishib.setCanShare.doCall();
+        
+        this.sendClearMessage(true);
+    </method>   
+    
+    <view resource="screen_allow_rsc" x="2" y="2" />
+    
+    <labelText text="$once{ parent.message }" multiline="true" x="20"
+               width="$once{ parent.width - 40 }"/>
+               
+</class>  
+
+<class name="activityListRestrictedRoomRemote" extends="baseItemActivityList">
+    
+    <method name="applyObject">
+        
+        canvas.thishib.setCanRemote.publicSID = this.rcl.publicSID;
+        canvas.thishib.setCanRemote.canRemote = true;
+        canvas.thishib.setCanRemote.doCall();
+
+        this.sendClearMessage(true);
+    </method>   
+    
+    <view resource="remote_allow_rsc" x="2" y="2" />
+    
+    <labelText text="$once{ parent.message }" multiline="true" x="20"
+               width="$once{ parent.width - 40 }"/>
+               
+</class> 
+
+<class name="activityListMessageRequest" extends="simplebaseItemActivityList">
+    
+    <method name="applyObject">
+        this.sendClearMessage(true);
+    </method>   
+    
+    <view resource="warning_icon_rsc" x="2" y="2" />
+    
+    <labelText text="$once{ parent.message }" multiline="true" x="20"
+               width="$once{ parent.width - 40 }"/>
+               
+</class>  
+
+<class name="activityListRestrictedRoomModeration" extends="baseItemActivityList">
+    
+    <method name="applyObject">
+        canvas.thishib.addModerator.publicSIDOfNewModerator = this.rcl.publicSID;
+        canvas.thishib.addModerator.doCall();
+        this.sendClearMessage(true);
+    </method>   
+    
+    <view resource="participants_isMod_rsc" x="2" y="2" />
+    
+    <labelText text="$once{ parent.message }" multiline="true" x="20"
+               width="$once{ parent.width - 40 }"/>
+               
+</class>  
+
+<class name="activityList" y="${ parent.height - 200 }" x="0"
+	   extends="basePropertyPanelWhiteboard" height="200" 
+         width="$once{ parent.width-10 }" labelid="1363" 
+         visibility="${((canvas.currentRoomObj.hideActivitiesAndActions == true) ? 'hidden':'visible')}">
+    
+    <handler name="oninit">
+        canvas.currentActivityList = this;
+    </handler>
+    
+    <method name="addMessageRequest" args="rcl,message,tStamp">
+        <![CDATA[
+            var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] : " +
+                                   message + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            
+            new lz.activityListMessageRequest(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+                                        
+            this._list._list.scrollToMax();                                        
+        ]]>                        
+    </method>
+    
+    
+    <method name="addModerationRequest" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                                   canvas.getLabelName(693) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(693) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+            
+            new lz.activityListRestrictedRoomModeration(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+                                        
+            this._list._list.scrollToMax();                                        
+        ]]>                        
+    </method>
+    
+    <method name="addScreenRequest" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                           canvas.getLabelName(1070) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(1070) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+                               
+            new lz.activityListRestrictedRoomScreen(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+                                        
+            this._list._list.scrollToMax();                                        
+        ]]>                      
+    </method>
+    
+    <method name="addRemoteRequest" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                           canvas.getLabelName(1082) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(1082) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+                               
+            new lz.activityListRestrictedRoomRemote(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+                                        
+            this._list._list.scrollToMax();                                        
+        ]]>                      
+    </method>
+    
+    <method name="applyForMuteOn" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                           canvas.getLabelName(1396) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(1399) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+                               
+            new lz.activityListRestrictedRoomApplyForMuteOn(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+                                        
+            this._list._list.scrollToMax();                                        
+        ]]>                      
+    </method>
+
+    <method name="applyForGiveExclusiveAudioOn" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                           canvas.getLabelName(1427) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(1426) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+
+            new lz.activityListRestrictedRoomApplyForGiveExclusiveAudioOn(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+
+            this._list._list.scrollToMax();
+        ]]>
+    </method>
+    
+    <method name="applyForMuteOff" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                           canvas.getLabelName(1397) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(1398) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+                               
+            new lz.activityListRestrictedRoomApplyForMuteOff(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+                                        
+            this._list._list.scrollToMax();                                        
+        ]]>                      
+    </method>
+    
+    <method name="addWhiteboardRequest" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                           canvas.getLabelName(694) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(694) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+                               
+            new lz.activityListRestrictedRoomWhiteboard(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+                                        
+            this._list._list.scrollToMax();                                        
+        ]]>                      
+    </method>
+    
+    <method name="addAudioRequest" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                           canvas.getLabelName(1603) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(1603) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+                           
+            new lz.activityListRestrictedRoomA(this._list._list,{
+                                        message:txt,
+                                        width:this._list.width-14,
+                                        rcl:rcl,
+                                        tStamp:tStamp
+                                    });
+                                    
+            this._list._list.scrollToMax();                                    
+       ]]>                  
+    </method>
+    
+    <method name="addVideoRequest" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                           canvas.getLabelName(1081) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {                
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(1081) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+                           
+            new lz.activityListRestrictedRoomV(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+                                        
+            this._list._list.scrollToMax();
+        ]]>
+    </method>
+    
+    <method name="addAudioAndVideoRequest" args="rcl,tStamp">
+        <![CDATA[
+            if (rcl.publicSID == canvas.publicSID) {
+                var txt = "<b>"+canvas.getLabelName(1362)+"</b> " +
+                               canvas.getLabelName(695) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            } else {
+                var txt = rcl.firstname + " " + rcl.lastname + " " +
+                                   "[" + rcl.username + "] " +
+                                   canvas.getLabelName(695) + " [" + getStringTimeByTimeStamp(tStamp) + "]";
+            }
+            
+            new lz.activityListRestrictedRoomAV(this._list._list,{
+                                            message:txt,
+                                            width:this._list.width-14,
+                                            rcl:rcl,
+                                            tStamp:tStamp
+                                        });
+                                        
+            this._list._list.scrollToMax();
+        ]]>
+    </method>
+    
+    <method name="hideActivityObj" args="messageObj">
+    	<![CDATA[
+    	
+    	    for (var i=0;i<this._list._list.subviews.length;i++) {
+    	    	
+    	    	if ($debug) Debug.write("hideActivityObj:: ",this._list._list.subviews[i].tStamp,messageObj.message[2]);
+    	    	
+    	    	if (this._list._list.subviews[i].tStamp == messageObj.message[2]) {
+    	    		
+    	    		this._list._list.subviews[i].closeItem();
+    	    		
+    	    		return;
+    	    		
+    	    	}
+    	    	
+    	    }
+    	
+    	]]>
+    </method>
+    
+    <view name="_list" y="21" height="179" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }"
+    	  width="$once{ parent.width }" clip="true">
+        
+        <view name="_list">
+            
+            <method name="scrollToMax">
+                <![CDATA[
+			        if(this.height>parent.height){
+			            parent.myscrollbar.scrolltarget.setAttribute(parent.myscrollbar.scrollattr,(parent.height-this.height));
+			        }
+		        ]]>
+            </method>
+            
+            <simplelayout name="_layout" axis="y" spacing="1" />
+            
+        </view>
+        
+        <om_vscrollbar name="myscrollbar" />
+        
+    </view>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/library.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/library.lzx
new file mode 100644
index 0000000..4046d92
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!-- FamFam Icon Set -->
+    <resource name="allow_ok_icon_rsc" src="resources/tick.png" />
+    <!-- FamFam Icon Set -->
+    <resource name="allow_deny_icon_rsc" src="resources/cross.png" />
+  
+    <include href="activityList.lzx" />
+	
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/resources/cross.png b/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/resources/cross.png
new file mode 100644
index 0000000..1514d51
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/resources/cross.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/resources/tick.png b/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/resources/tick.png
new file mode 100644
index 0000000..a9925a0
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/activitylist/resources/tick.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/appointmentNotificationPopUp.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/appointmentNotificationPopUp.lzx
new file mode 100644
index 0000000..49bbe5e
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/appointmentNotificationPopUp.lzx
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="appointmentNotificationPopUp" extends="guiPresenter" labelid="1144" y="30"
+    isdragable="false" minimizable="false" maximizable="false" fullToolBar="true" 
+    resizeable="false" width="280" height="280" x="$once{ parent.width-this.width-10 }">
+	
+	<attribute name="roomobj" value="null" />
+	
+	<handler name="oninit" >
+		this.getAppointMentAndTimeZones.doCall();
+	</handler>
+	
+	<!-- Retrieving Appointmentdata for Meeting -->
+	<netRemoteCallHib name="getAppointMentAndTimeZones" remotecontext="$once{ canvas.thishib }" funcname="conferenceservice.getAppointMentDataForRoom" >
+		<netparam><method name="getValue">return parent.parent.roomobj.rooms_id;</method></netparam>
+		<handler name="ondata" args="value">	
+		<![CDATA[
+			if ($debug) Debug.write("getAppointMentAndTimeZones 1: ",parent.roomobj.rooms_id);
+			if ($debug) Debug.write("getAppointMentAndTimeZones 2: ",value);
+			
+			if (value != null) {
+				parent._appstart.setAttribute('text', value.start);
+				parent._append.setAttribute('text', value.end);
+				parent._timeZone.setAttribute('text', value.owner.timeZoneId);
+				
+				parent._appName.setAttribute('text', value.title);
+				parent._appDescr._appDescr.setAttribute('text', value.description ? value.description : "");
+				
+				parent._createdby.setAttribute('text', value.owner.firstname + ' ' + value.owner.lastname );
+			}
+		]]>	        	          				
+		</handler>	
+	</netRemoteCallHib> 
+	
+	<labelText name="appName" y="24" labelid="1145" width="50"/>
+	<labelText name="_appName" x="75" y="24" width="200" fontstyle="bold" /> 
+	
+	<labelText name="appDescr" y="46" labelid="1146" width="50"/>
+	<view name="_appDescr" x="75" y="46" width="200" height="100" bgcolor="0xFFFFFF" clip="true">
+		<labelText name="_appDescr" y="24" width="184" multiline="true" /> 
+		<om_vscrollbar />
+	</view>
+	
+	<labelText name="l_sdatum" labelid="1143" y="150" width="50" />
+	<labelText name="_timeZone" x="75" y="150" width="200" resize="false" bgcolor="0xFFFFFF" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }"/> 
+	
+	<labelText name="appstartlabel" y="170" labelid="570" width="50"/>
+	<labelText name="_appstart" x="75" y="170" width="200" resize="false" bgcolor="0xFFFFFF" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }"/> 
+	
+	<labelText name="l_edatum" labelid="571" y="190" width="50"  />
+	<labelText name="_append" y="190" x="75" width="200" text="" resize="false" bgcolor="0xFFFFFF" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }"/> 	 
+	
+	<labelText name="l_createdby" labelid="1147" y="210" width="50"  />
+	<labelText name="_createdby" y="210" x="75" width="200" text="" resize="false" bgcolor="0xFFFFFF" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }"/> 	   
+	
+    <simpleLabelButton labelid="1130" width="100" x="$once{ parent.width-105 }" 
+           y="$once{ parent.height-24 }" onclick="this.parent.close();" />	           	
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/baseConferenceRoom.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/baseConferenceRoom.lzx
new file mode 100644
index 0000000..9c1931d
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/baseConferenceRoom.lzx
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="dtmfButton" extends="button" width="20" height="20" >
+    <attribute name="dtmf" value="" type="string"/>
+    <handler name="onclick">
+        callDTMFButton(this,this.text);
+    </handler>
+    <method name="doNextSipNumber">
+        if ($debug) Debug.write("doNextSipNumber ",this.text);
+    </method>
+</class>
+    
+<class name="debugPinCode" extends="labelExplorerBox" title="Enter PIN Code"
+    docking="true" resizeable="false" closable="true" width="100" x="14" height="120">
+    
+    
+    <view y="24">
+        
+        <dtmfButton text="1" x="20" dtmf="1"/> 
+            <dtmfButton text="2" x="40" dtmf="2"/> 
+                <dtmfButton text="3" x="60" dtmf="3"/>
+                
+        <dtmfButton text="4" x="20" y="20" dtmf="4"/> 
+            <dtmfButton text="5" x="40" y="20" dtmf="5"/> 
+                <dtmfButton text="6" x="60" y="20" dtmf="6"/>
+                
+        <dtmfButton text="7" x="20" y="40" dtmf="7"/> 
+            <dtmfButton text="8" x="40" y="40" dtmf="8"/> 
+                <dtmfButton text="9" x="60" y="40" dtmf="9"/>
+                
+        <dtmfButton text="10" x="20" y="60" dtmf="10"/>
+        
+    </view>
+    
+    
+</class>
+
+<class name="baseConferenceRoom" extends="baseContentView" destroyByMethod="true" >
+    
+    <attribute name="roomobj" value="null" />
+    
+    <attribute name="meetingTimer" value="null" />
+    
+	<handler name="oninit">
+	<![CDATA[
+		_mainScrollBar.setAttribute("visibility","hidden");
+		
+		if ($debug) Debug.write("roomobj: ",this.roomobj);
+		
+		canvas.currentRoomObject = this.roomobj;
+		var r = this.roomobj;
+		r.currentusers = ''; //this might be huge list
+		canvas.sendViaLocalConnection(canvas.rtmp_lc_name,"setRoomValues", [this.roomobj.roomtype.roomtypes_id,this.roomobj.rooms_id,r]);
+		
+		if (this.roomobj.isClosed) {
+			canvas.roomClosed();
+		}
+		
+		if (this.roomobj.waitForRecording) {
+			new lz.labelerrorPopup(canvas, {labelid: 1316, errorlabelid: 1315});
+		}
+		
+		canvas._mainbgcontentNavi.setAttribute('height',0);
+		canvas.setAttribute('naviHeightDelta',28);
+		
+		if (this._chatPanelStrict) {
+			var hideChat = this.roomobj.hideChat != null && this.roomobj.hideChat;
+			this._chatPanelStrict.setAttribute('visible', !hideChat);
+			if (hideChat) {
+				this._chatPanelStrict.setAttribute('height', 28);
+			}
+		}
+		
+		if (this.roomobj.hideTopBar == null || !this.roomobj.hideTopBar) {
+			createMenu();
+			canvas._conferencemenu.setAttribute('visibility','visible');
+		} else {
+			canvas.setAttribute('naviHeight',0);
+			canvas._conferencemenu.setAttribute('visibility','hidden');
+			canvas._mainbgcontentNavi.setAttribute('visibility','hidden');
+		}
+		
+		if ($debug) Debug.write("this.roomobj ",this.roomobj);
+
+		new lz.moderationPanel(canvas._moderatormenu,{
+				name:'_moderationPanel',align:'right',
+				allowUserQuestions:this.roomobj.allowUserQuestions,
+				roomName:this.roomobj.name
+			});
+		if (roomobj.appointment) {
+			canvas.appointmentNotificationPopUp = new lz.appointmentNotificationPopUp(this,{name:'appDetail', roomobj:this.roomobj });
+		} else {
+			if ($debug) Debug.write("no appointed meeting");
+		}
+		
+		if (this.roomobj.isDemoRoom && this.roomobj.demoTime != null) {
+			if ($debug) Debug.warn("THIS IS A DEMO ROOM THAT SHOULD CLOSE AFTER SEC: ",this.roomobj.demoTime);
+			this.meetingTimer = new lz.meetingTimer(canvas,{refObj:this,roomobj:this.roomobj});
+		}
+		
+		canvas.currentBaseConferenceRoom = this;
+		canvas._videocontainer.setAttribute("allowUserQuestions",this.roomobj.allowUserQuestions);
+	]]>
+	</handler>
+    
+	<handler name="onkeydown" reference="lz.Keys" args="keyCode">
+	<![CDATA[
+		if ($debug) Debug.write("onkeydown:: keyCode = ", keyCode);
+		// common keys are processed firstly
+		if (canvas.ARRANGE_WINDOWS_KEY == keyCode) {
+			canvas.sendViaLocalConnection(canvas.vid_lc_name, "arrangeWindows", null);
+			return;
+		}
+		if (canvas.GIVE_EXCLUSIVE_AUDIO_KEY == keyCode) {
+			if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) {
+				canvas.thishib.giveExclusiveAudio.setExclusiveAudio(canvas.publicSID);
+			} else {
+				new lz.rpcErrorDialog(canvas.main_content._content.inner,{errorid:-54});
+			}
+			return;
+		}
+		if (canvas.MUTE_AUDIO_KEY == keyCode) {
+			canvas._videocontainer._videoviewcontent.muteSound(canvas.publicSID, !canvas.micMuted);
+			return;
+		}
+	]]>
+	</handler>
+
+    <screenSharingAdapter name="_screenSharingAdapter" />
+    
+    <baseTabChatPanel name="_chatPanelStrict" labelid="616"
+       height="200" x="${ parent._sidePanel.width }"  
+       y="${ canvas.height - (this.height) - ((canvas.currentRoomObj.hideTopBar) ? 0 : 28) }" 
+       width="${ canvas.width - parent._sidePanel.width }" isopen="${ !canvas.currentRoomObj.chatOpened }" />
+       <!-- isopen need to be reverted, will be toggled -->
+       
+	<handler name="ontabcontentleave">
+		if ($debug) Debug.write("################# ontabcontentleave:",this);
+		
+		this._screenSharingAdapter.closeAllScreenSharings();
+		
+		canvas.currentBaseConferenceRoom = null;
+		
+		//reset the right to draw on WHiteboard as the RoomClient Object will be destroyed also
+		//on server-Side the canDraw status will be false again when you relogin the same room
+		canvas.isAllowedToDraw = true;
+		
+		_mainScrollBar.setAttribute("visibility","visible");
+		
+		//reset rights
+		canvas.isAllowedToGiveExclusiveAudio = false;
+		
+		if (canvas._videocontainer!=null) {
+			canvas._videocontainer.resetAllValues();
+			canvas._videocontainer = null;
+		}
+		if (canvas._chatcontent!=null) {
+			canvas._chatcontent = null;
+		}
+		if (canvas._mymod!=null) {
+			canvas._mymod = null;
+		}
+		
+		if (this.meetingTimer != null) {
+			this.meetingTimer.close();
+		}
+		
+		if (canvas._drawarea.letterObjectIsActive) {
+			canvas._drawarea.currentletterObj.destroy();
+		}
+		
+		if (canvas.currentFileExplorer != null) {
+			canvas.currentFileExplorer = null;
+		}
+		
+		if (canvas.currentActivityList != null) {
+			canvas.currentActivityList = null;
+		}
+		
+		//@deprecated we will not use old screen sharing implementation
+		//canvas._screens.clearAllSessions();
+		this.logicalRoomLeave.doCall();
+		if ($debug) Debug.write("############ this.logicalRoomLeave ",this.logicalRoomLeave);
+	</handler>
+
+	<netRemoteCallHib name="logicalRoomLeave" funcname="logicalRoomLeave" remotecontext="$once{ canvas.thishib }" >
+		<handler name="ondata" args="value">
+			if ($debug) Debug.write("############# logicalRoomLeave: ",value);
+			//this.parent.destroy();
+			canvas.thishib.reconnectAfterRoomleft = true;
+			canvas.thishib.reconnectedRoomInstance = this.parent;
+			
+			// Reconnect User to default Scope
+			canvas.thishib.userScope = "hibernate";
+			var src = hib.getUrl();
+			canvas.thishib.setAttribute('src',src);
+			canvas.thishib.disconnect();
+			canvas._mainbgcontentNavi.setAttribute('height',canvas.naviHeight);
+			canvas.setAttribute('naviHeightDelta',canvas.naviHeight);
+			canvas._conferencemenu.removeAll();
+			canvas._conferencemenu.setAttribute('visibility','hidden');
+		</handler>
+	</netRemoteCallHib>
+</class>
+
+</library>
\ No newline at end of file
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/baseRoomInnerList.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/baseRoomInnerList.lzx
new file mode 100644
index 0000000..ed6844b
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/baseRoomInnerList.lzx
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!--
+
+    This class hold a bunch method that is shared between the 
+    User List of different Room Types
+
+ -->
+
+<class name="baseRoomInnerList" extends="view" >
+	
+    <handler name="oninit">
+        <![CDATA[
+            this.initList();
+        ]]>
+    </handler>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/flexibleConferenceRoom.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/flexibleConferenceRoom.lzx
new file mode 100644
index 0000000..ede5029
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/flexibleConferenceRoom.lzx
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="flexibleConferenceRoom" extends="baseConferenceRoom">
+	<method name="createMenu">
+		new lz.conferenceMenubar(canvas._conferencemenu);
+	</method>
+
+    <conferenceRoomSidebar name="_sidePanel" />
+    
+    <view name="_videoviewcontent_hideWhiteboard" y="0" x="${ parent._sidePanel.width }"
+		  width="${canvas.width-parent._sidePanel.width}" height="${canvas.height-(parent._chatPanelStrict.height) - 
+        ((parent._chatPanelStrict.visibility == 'hidden') ? 5:28) + ((canvas.currentRoomObj.hideTopBar) ? 28:0)}" clip="true" 
+		  visibility="${((canvas.currentRoomObj.hideWhiteboard) ? 'visible':'hidden')}">
+			<view name="_inn" width="${parent.width-10}">				
+				<wrappinglayout axis="x" spacing="10"/>
+			</view>
+			<om_vscrollbar name="_attenddeescrollbar" visibility="visible"></om_vscrollbar>
+	</view>
+    
+    <fixedFileExplorerWhiteboardPanel name="_whiteboard" labelid="615"
+        y="0" x="${ parent._sidePanel.width }" 
+        width="${ canvas.width - parent._sidePanel.width }"
+        height="${ canvas.height - (parent._chatPanelStrict.height) - 
+        ((parent._chatPanelStrict.visible) ? 28 : 6) + ((canvas.currentRoomObj.hideTopBar) ? 28:0)}" />
+    
+    <!--
+        ###############################
+        This is the container for all Videos
+     -->
+    <commonVideoViewContent name="_videoviewcontent" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/innerlistViewEventUserListTable.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/innerlistViewEventUserListTable.lzx
new file mode 100644
index 0000000..72cb59e
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/innerlistViewEventUserListTable.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="innerlistViewEventUserListTable" extends="view" width="258" >

+    <wrappinglayout name="_layout" axis="x" spacing="4"/>

+</class>

+

+</library>
\ No newline at end of file
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/interviewConferenceRoom.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/interviewConferenceRoom.lzx
new file mode 100644
index 0000000..69e5a40
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/interviewConferenceRoom.lzx
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="interviewConferenceRoom" extends="baseConferenceRoom">
+	<method name="createMenu">
+		new lz.interviewConferenceMenubar(canvas._conferencemenu);
+	</method>
+	
+	<handler name="oninit">
+		canvas.currentRoomObj.hideScreenSharing = true;
+	</handler>
+	
+    <!--
+        User Panel and Participants List
+     -->
+    <interviewRoomSidebar name="_sidePanel" 
+                      listType="eventUserListTableWithNames" />
+    
+    <!--
+        Whiteboard in Interview Room Type those are the Video Pods
+     -->
+    <interviewWhiteboard name="_whiteboardInterview" x="${ parent._sidePanel.width }" 
+    	  width="${ canvas.width - parent._sidePanel.width }" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/library.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/library.lzx
new file mode 100644
index 0000000..17f308f
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/library.lzx
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<resource name="userstatus_multiframe_rsc">
+		<frame src="resources/bullet_ball_glass_green.png"/> <!-- user -->
+		<frame src="resources/bullet_ball_glass_yellow.png"/> <!-- mod -->
+		<frame src="resources/bullet_ball_glass_red.png"/> <!-- whiteboard allow -->
+	</resource>
+	
+	<resource name="chat_message_incoming_rsc" src="resources/ledlightgreen.png" />
+	
+	<!-- FamFam Icon Set -->
+	<resource name="screen_allow_rsc" src="resources/monitor_add.png" />
+	<!-- FamFam Icon Set -->
+    <resource name="screen_deny_rsc" src="resources/monitor_delete.png" />
+    <!-- FamFam Icon Set -->
+    <resource name="remote_allow_rsc" src="resources/mouse_add.png" />
+    <!-- FamFam Icon Set -->
+    <resource name="remote_deny_rsc" src="resources/mouse_delete.png" />
+	
+	<!-- FamFam Icon Set -->
+	<resource name="a_allow_rsc" src="resources/micro_small_add.png" />
+	<!-- FamFam Icon Set -->
+	<resource name="a_deny_rsc" src="resources/micro_small_no.png" />
+	<!-- FamFam Icon Set -->
+	<resource name="av_allow_rsc" src="resources/audio_and_video.png" />
+	<!-- FamFam Icon Set -->
+	<resource name="av_deny_rsc" src="resources/audio_and_video_no.png" />
+	<!-- FamFam Icon Set -->
+	<resource name="start_private_chat_rsc" src="resources/page_edit.png" />
+	
+	<!-- APL author sebawagner -->
+	<resource name="kick_user_rsc" src="resources/cancel_icon.png" />
+	
+	<!-- APL author sebawagner -->
+	<resource name="mute_micro_btn_rsc">
+        <frame src="resources/mute_micro.png" />
+        <frame src="resources/mute_micro_red.png" />
+    </resource>
+    
+    <!-- APL author sebawagner -->
+    <resource name="mute_btn_rsc" src="resources/mute_micro.png" />
+    <!-- APL author sebawagner -->
+    <resource name="unmute_btn_rsc" src="resources/mute_micro_red.png" />
+	
+	<!-- APL author sebawagner -->
+	<resource name="sidebar_tab_btn">
+		<frame src="resources/sidebar_close.png" />
+		<frame src="resources/sidebar_open.png" />
+	</resource>
+	
+	<include href="innerlistViewEventUserListTable.lzx" />
+	<include href="moderationMiniIconsEventUserList.lzx" />
+	<include href="activitylist/" />
+	<include href="roomSidebar/" />
+	<include href="appointmentNotificationPopUp.lzx" />
+	<include href="baseRoomInnerList.lzx" />
+    <include href="baseConferenceRoom.lzx" />
+    <include href="flexibleConferenceRoom.lzx" />
+    <include href="restrictedConferenceRoom.lzx" />
+    <include href="interviewConferenceRoom.lzx" />
+    
+    
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/moderationMiniIconsEventUserList.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/moderationMiniIconsEventUserList.lzx
new file mode 100644
index 0000000..59d2214
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/moderationMiniIconsEventUserList.lzx
@@ -0,0 +1,327 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="moderationMiniIconsEventUserList" extends="view">
+
+    <attribute name="showAvIcons" value="true" type="boolean" />
+	
+    <handler name="oninit">
+    	this.updateIcons();
+    </handler>	
+    
+    <method name="updateIcons">
+    <![CDATA[
+        if (canvas.ismoderator) {
+            this._isMod.setAttribute("visibility","visible");
+            this._isModAddbutton.setAttribute("visibility","hidden");
+        } else {
+            this._isMod.setAttribute("visibility","hidden");
+            this._isModAddbutton.setAttribute("visibility","visible");
+        }
+        
+        if (canvas.ismoderator) {
+            this._canDraw.setAttribute("visibility","visible");
+            this._canDraw.isActive = false;
+            //this._canDraw._text.setAttribute("text",canvas.getLabelName(681));
+            this._canDrawModerator.setAttribute("visibility","hidden");
+        } else {
+            if (canvas.isAllowedToDraw) {
+                this._canDraw.setAttribute("visibility","visible");
+                this._canDraw.isActive = true;
+                //this._canDraw._text.setAttribute("text",canvas.getLabelName(612));
+                this._canDrawModerator.setAttribute("visibility","hidden");
+            } else {
+                this._canDraw.setAttribute("visibility","hidden");
+                this._canDrawModerator.setAttribute("visibility","visible");
+            }
+        }
+        
+        if ($debug) Debug.write("canvas.isAllowedToScreenShare :: ",canvas.isAllowedToScreenShare);
+        
+        if (canvas.ismoderator) {
+            this._allowScreen.setAttribute("visibility","visible");
+            this._allowScreen.isActive = false;
+            
+            this._allowRemote.setAttribute("visibility","visible");
+            this._allowRemote.isActive = false;
+
+            this._allowExclusiveAudio.setAttribute("visibility","visible");
+            this._allowExclusiveAudio.isActive = false;
+            
+            //this._canDraw._text.setAttribute("text",canvas.getLabelName(681));
+            this._denyScreen.setAttribute("visibility","hidden");
+            this._denyRemote.setAttribute("visibility","hidden");
+            this._denyExclusiveAudio.setAttribute("visibility","hidden");
+        } else {
+            if (canvas.isAllowedToScreenShare) {
+                this._allowScreen.setAttribute("visibility","visible");
+                this._allowScreen.isActive = true;
+                //this._canDraw._text.setAttribute("text",canvas.getLabelName(612));
+                this._denyScreen.setAttribute("visibility","hidden");
+            } else {
+                this._allowScreen.setAttribute("visibility","hidden");
+                this._denyScreen.setAttribute("visibility","visible");
+            }
+            
+            if (canvas.isAllowedToRemoteControl) {
+            	this._allowRemote.setAttribute("visibility","visible");
+            	this._allowRemote.isActive = true;
+            	this._denyRemote.setAttribute("visibility","hidden");
+            } else {
+            	this._allowRemote.setAttribute("visibility","hidden");
+            	this._denyRemote.setAttribute("visibility","visible");
+            }
+
+            if (canvas.isAllowedToGiveExclusiveAudio) {
+                this._allowExclusiveAudio.setAttribute("visibility","visible");
+            	this._allowExclusiveAudio.isActive = true;
+            	this._denyExclusiveAudio.setAttribute("visibility","hidden");
+            } else {
+                this._allowExclusiveAudio.setAttribute("visibility","hidden");
+            	this._denyExclusiveAudio.setAttribute("visibility","visible");
+            }
+        }
+        
+        if ($debug) Debug.write("+ STATUS ICONS + ",this.showAvIcons,canvas.isBroadCasting);
+        
+        if (this.showAvIcons) {
+            this._allowDevice.setAttribute("visible", !canvas.isBroadCasting || !canvas.canVideo);
+            this._denyDevice.setAttribute("visible", canvas.isBroadCasting && canvas.canVideo);
+
+            this._allowAudio.setAttribute("visible", !canvas.isBroadCasting);
+            this._denyAudio.setAttribute("visible", canvas.isBroadCasting);
+        }
+        
+        if (canvas.micMuted) {
+            this._muteDevice.setAttribute("visibility","hidden");
+            this._unMuteDevice.setAttribute("visibility","visible");
+        } else {
+            this._muteDevice.setAttribute("visibility","visible");
+            this._unMuteDevice.setAttribute("visibility","hidden");
+        }
+	]]>
+	</method>
+    
+    <simplelayout axis="x" spacing="2" />
+
+    <handler name="onMute" reference="canvas.thishib.switchMicMuted" args="event">
+        <![CDATA[
+            if ($debug) Debug.write("onMute ", event.publicSID, event.mute);
+            if(canvas.publicSID == event.publicSID) {
+                canvas.micMuted = event.mute;
+                this.updateIcons();
+            }
+        ]]>
+    </handler>
+	
+    <miniIconsNew name="_isMod" x="0" width="16" innerResource="participants_isMod_rsc" 
+    		   height="16" showhandcursor="false">
+        <handler name="onclick">
+            <![CDATA[
+                //Nothing happens here
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="688" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_isModAddbutton" opacity="0.5" x="0" width="16" innerResource="participants_isMod_rsc" height="16">
+        <handler name="onclick">
+            <![CDATA[
+                //Apply for Moderation
+                canvas.thishib.applyForModeration.doCall();
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="685" />
+    </miniIconsNew>
+        
+    <miniIconsNew name="_canDraw" x="20" width="16" innerResource="participants_allow_drawing_rsc" 
+               height="16" showhandcursor="false" >
+        <attribute name="isActive" value="true" type="boolean" />
+        <handler name="onclick">
+            <![CDATA[
+                //Nothing happens here
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="689" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_canDrawModerator" x="20" width="16" opacity="0.5"
+               innerResource="participants_allow_drawing_rsc" height="16" showhandcursor="true">
+        <handler name="onclick">
+            //Ask for Right to Draw on Whiteboard
+            var tDate = new Date();
+            canvas.thishib.sendMessageWithClient.sendMessage("applyForWhiteboard",tDate.getTime());
+        </handler>
+        <labelTooltip labelid="686" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_allowScreen" x="40" width="16" height="16" 
+               innerResource="screen_allow_rsc" showhandcursor="false">
+        <attribute name="isActive" value="true" type="boolean" />
+        <handler name="onclick">
+            <![CDATA[
+                if ($debug) Debug.write("Deny Screen: ",canvas.publicSID);
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="1071" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_denyScreen" x="40" width="16" height="16" opacity="0.5"
+               innerResource="screen_allow_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("Allow Screen: ",canvas.refObj.publicSID);
+            var tDate = new Date();
+        	canvas.thishib.sendMessageWithClient.sendMessage("applyForScreen",tDate.getTime());
+        </handler>
+        <labelTooltip labelid="1072" />
+    </miniIconsNew>    
+    
+ 	<miniIconsNew name="_allowRemote" x="60" width="16" height="16" 
+               innerResource="remote_allow_rsc" showhandcursor="false">
+    	<attribute name="isActive" value="true" type="boolean" />
+        <handler name="onclick">
+        	<![CDATA[
+                if ($debug) Debug.write("Deny Remote: ",canvas.publicSID);
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="1081" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_denyRemote" x="60" width="16" height="16" opacity="0.5"
+               innerResource="remote_allow_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("Allow Remote: ",parent.parent.parent.refObj.publicSID);
+            var tDate = new Date();
+            canvas.thishib.sendMessageWithClient.sendMessage("applyForRemote",tDate.getTime());
+        </handler>
+        <labelTooltip labelid="1080" />
+    </miniIconsNew>      
+          
+    
+    <miniIconsNew name="_allowAudio" x="80" width="16" height="16" 
+            visible="$once{ parent.showAvIcons }" innerResource="a_allow_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("NOTHING: ",canvas.publicSID);
+            if (canvas.ismoderator) {
+                //Do directly send confirmation to share Audio/Video to SELF! so that all users get
+                //the notification and the broadcasting Bit is set for this User
+                canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = canvas.publicSID;
+                canvas.thishib.setBroadCastingFlag.canVideo = false;
+                canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+                canvas.thishib.setBroadCastingFlag.doCall(); 
+            } else {
+                //Apply for Right to Share Audio/Video
+                var tDate = new Date();
+                canvas.thishib.sendMessageWithClient.sendMessage("applyForA",tDate.getTime());
+            }
+        </handler>
+        <labelTooltip labelid="1606" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_denyAudio" x="80" width="16" height="16" opacity="0.5"
+            visible="$once{ parent.showAvIcons }" innerResource="a_deny_rsc" showhandcursor="false">
+        <handler name="onclick">
+            if ($debug) Debug.write("DENY: ",canvas.publicSID);
+            //Nothing happens here
+            canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = canvas.publicSID;
+            canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = false;
+            canvas.thishib.setBroadCastingFlag.doCall(); 
+        </handler>
+        <labelTooltip name="_text" labelid="1607" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_allowDevice" x="100" width="16" height="16" 
+            visible="$once{ parent.showAvIcons }" innerResource="av_allow_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("NOTHING: ",canvas.publicSID);
+            if (canvas.ismoderator) {
+                //Do directly send confirmation to share Audio/Video to SELF! so that all users get
+                //the notification and the broadcasting Bit is set for this User
+                canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = canvas.publicSID;
+                canvas.thishib.setBroadCastingFlag.canVideo = true;
+                canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+                canvas.thishib.setBroadCastingFlag.doCall(); 
+            } else {
+                //Apply for Right to Share Audio/Video
+                var tDate = new Date();
+                canvas.thishib.sendMessageWithClient.sendMessage("applyForAV",tDate.getTime());
+            }
+        </handler>
+        <labelTooltip labelid="687" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_denyDevice" x="100" width="16" height="16" opacity="0.5"
+            visible="$once{ parent.showAvIcons }" innerResource="av_deny_rsc" showhandcursor="false">
+        <handler name="onclick">
+            if ($debug) Debug.write("DENY: ",canvas.publicSID);
+            //Nothing happens here
+            canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = canvas.publicSID;
+                canvas.thishib.setBroadCastingFlag.canVideo = false;
+                canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+            canvas.thishib.setBroadCastingFlag.doCall(); 
+        </handler>
+        <labelTooltip name="_text" labelid="690" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_muteDevice" x="120" width="16" height="16" 
+    		   innerResource="mute_btn_rsc" showhandcursor="true">
+    	<handler name="onclick">
+            canvas._videocontainer._videoviewcontent.muteSound(canvas.publicSID, true);
+    	</handler>
+        <labelTooltip name="_tip" labelid="1403" />
+    </miniIconsNew>
+    
+    <miniIconsNew name="_unMuteDevice" x="120" width="16" height="16" innerResource="unmute_btn_rsc" 
+               showhandcursor="true" >
+    	<handler name="onclick">
+            canvas._videocontainer._videoviewcontent.muteSound(canvas.publicSID, false);
+        </handler>
+        <labelTooltip name="_tip" labelid="1404" />
+    </miniIconsNew>
+
+    <miniIconsNew name="_allowExclusiveAudio" x="60" width="16" height="16"
+               innerResource="participants_exclusive_audio_rsc" showhandcursor="false">
+    	<attribute name="isActive" value="true" type="boolean" />
+        <handler name="onclick">
+        	<![CDATA[
+                if ($debug) Debug.write("Deny Give Exclusive Audio: ",canvas.publicSID);
+                if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) {
+	                canvas.thishib.giveExclusiveAudio.publicSID = canvas.publicSID;
+	                canvas.thishib.giveExclusiveAudio.doCall();
+                }
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="1433" />
+    </miniIconsNew>
+
+    <miniIconsNew name="_denyExclusiveAudio" x="60" width="16" height="16" opacity="0.5"
+               innerResource="participants_exclusive_audio_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("Allow Give Exclusive Audio: ",canvas.publicSID);
+            var tDate = new Date();
+            canvas.thishib.sendMessageWithClient.sendMessage("applyForGiveExclusiveAudioOn",tDate.getTime());
+        </handler>
+        <labelTooltip labelid="1432" />
+    </miniIconsNew>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/audio_and_video.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/audio_and_video.png
new file mode 100644
index 0000000..f02fcfa
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/audio_and_video.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/audio_and_video_no.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/audio_and_video_no.png
new file mode 100644
index 0000000..bd6277f
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/audio_and_video_no.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/bullet_ball_glass_green.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/bullet_ball_glass_green.png
new file mode 100644
index 0000000..bbdcb01
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/bullet_ball_glass_green.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/bullet_ball_glass_red.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/bullet_ball_glass_red.png
new file mode 100644
index 0000000..886c125
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/bullet_ball_glass_red.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/bullet_ball_glass_yellow.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/bullet_ball_glass_yellow.png
new file mode 100644
index 0000000..fbf19db
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/bullet_ball_glass_yellow.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/cancel_icon.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/cancel_icon.png
new file mode 100644
index 0000000..2d26062
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/cancel_icon.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/ledlightgreen.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/ledlightgreen.png
new file mode 100644
index 0000000..abbdd12
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/ledlightgreen.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/micro_small_add.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/micro_small_add.png
new file mode 100644
index 0000000..2fb7ae1
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/micro_small_add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/micro_small_no.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/micro_small_no.png
new file mode 100644
index 0000000..e818f4d
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/micro_small_no.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/monitor_add.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/monitor_add.png
new file mode 100644
index 0000000..a818066
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/monitor_add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/monitor_delete.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/monitor_delete.png
new file mode 100644
index 0000000..3733256
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/monitor_delete.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mouse_add.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mouse_add.png
new file mode 100644
index 0000000..65bcab5
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mouse_add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mouse_delete.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mouse_delete.png
new file mode 100644
index 0000000..7286566
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mouse_delete.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro.fla b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro.fla
new file mode 100644
index 0000000..210ddbf
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro.png
new file mode 100644
index 0000000..71efdbe
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro_red.fla b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro_red.fla
new file mode 100644
index 0000000..287c2a0
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro_red.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro_red.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro_red.png
new file mode 100644
index 0000000..29e16b5
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/mute_micro_red.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/page_edit.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/page_edit.png
new file mode 100644
index 0000000..046811e
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/page_edit.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_close.fla b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_close.fla
new file mode 100644
index 0000000..1d5fffd
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_close.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_close.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_close.png
new file mode 100644
index 0000000..08020fd
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_close.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_open.fla b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_open.fla
new file mode 100644
index 0000000..0fd7f7f
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_open.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_open.png b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_open.png
new file mode 100644
index 0000000..e778538
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/resources/sidebar_open.png
Binary files differ
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/restrictedConferenceRoom.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/restrictedConferenceRoom.lzx
new file mode 100644
index 0000000..6b2ae94
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/restrictedConferenceRoom.lzx
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="restrictedConferenceRoom" extends="baseConferenceRoom">
+	<method name="createMenu">
+		new lz.restrictedConferenceMenubar(canvas._conferencemenu);
+	</method>
+
+    <restrictedRoomSidebar name="_sidePanel" restricted="true" 
+                      listType="eventUserListTableWithNames" />
+    
+    <view name="_videoviewcontent_hideWhiteboard" y="0" x="${ parent._sidePanel.width }"
+		  width="${canvas.width-parent._sidePanel.width}" height="${canvas.height-(parent._chatPanelStrict.height) - 
+        ((parent._chatPanelStrict.visibility == 'hidden') ? 5:28)}" clip="true" 
+		  visibility="${((canvas.currentRoomObj.hideWhiteboard) ? 'visible':'hidden')}">
+			<view name="_inn" width="${parent.width-10}">				
+				<wrappinglayout axis="x" spacing="10"/>
+			</view>
+			<om_vscrollbar name="_attenddeescrollbar" visibility="visible"></om_vscrollbar>
+	</view>
+    
+    <fixedFileExplorerWhiteboardPanel name="_whiteboard" labelid="615"
+        y="0" x="${ parent._sidePanel.width }" 
+        width="${ canvas.width - parent._sidePanel.width }"
+        height="${ canvas.height - (parent._chatPanelStrict.height) - ((parent._chatPanelStrict.visibility == 'hidden') ? 0:28) }" />
+        
+    <!--
+        ###############################
+        This is the container for all Videos
+     -->
+    <commonVideoViewContent name="_videoviewcontent" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/conferenceRoomSidebar.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/conferenceRoomSidebar.lzx
new file mode 100644
index 0000000..50c898e
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/conferenceRoomSidebar.lzx
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="conferenceRoomSidebar" extends="view" width="280" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" 
+       height="${ canvas.height - ((canvas.currentRoomObj.hideTopBar) ? 0:28) }" y="0" clip="true">
+    
+    <attribute name="selected" value="null" />
+    
+    <attribute name="isOpen" value="true" type="boolean"/>
+    
+    <method name="doSelection" args="itemRef">
+        <![CDATA[
+            if (this.selected != null) {
+                this.selected.deselect();
+            }
+            
+            this.selected = itemRef;
+            this.selected.select();
+          
+            if ($debug) Debug.write("this.selected.name ",this.selected.name);
+            
+            if (this.selected.name == "userTabButton") {
+                if ($debug) Debug.write("-- userTabButton");
+                this._files.setAttribute("visibility","hidden");
+                this._videocontainer._applyAndStatusIcons.setAttribute("visibility","visible");
+                this._videocontainer._participants.setAttribute("visibility","visible");
+            } else if (this.selected.name == "filesTabButton") {
+                if ($debug) Debug.write("-- filesTabButton");
+                this._files.setAttribute("visibility","visible");
+                this._videocontainer._applyAndStatusIcons.setAttribute("visibility","hidden");
+                this._videocontainer._participants.setAttribute("visibility","hidden");
+            }
+        ]]>
+    </method>
+    
+    <method name="toggleStatus">
+        if (this.isOpen) {
+            this._doClose.setAttribute('started', true);
+            this.isOpen = false;
+            this._minimizeSidebar._icon.setAttribute("frame",2);
+            this._minimizeSidebar._icon._labelTooltip.setAttribute("labelid",857);
+        } else {
+            this._doOpen.setAttribute('started', true);
+            this.isOpen = true;
+            this._minimizeSidebar._icon.setAttribute("frame",1);
+            this._minimizeSidebar._icon._labelTooltip.setAttribute("labelid",856);
+        }
+    </method>
+    
+    <view name="borderBarTop" y="0"
+    			width="${ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" />
+   	<view name="_tabbarBg" width="${ parent.width }" height="32" y="1" bgcolor="0xFAFAFA" />
+	<view name="borderBarBottom" y="34"
+   			width="${ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" /> 
+    
+    <view name="_head" y="1" width="${ parent.width-10 }" height="32"
+    		  layout="axis:x;spacing:2;inset:2" >
+    
+    	<handler name="oninit">
+		<![CDATA[
+    		for (var eg in this.subviews) {
+            	this.subviews[eg].deselect();
+            }
+            if (!canvas.currentRoomObj.hideFilesExplorer && canvas.currentRoomObj.filesOpened) {
+				this.filesTabButton.doSelection();
+			} else {
+				this.userTabButton.doSelection();
+			}
+		]]>
+    	</handler>
+   
+        <tabButtonMain name="userTabButton" height="$once{ parent.height }" width="$once{ (parent.width-6)/2 }"
+                currentIconRsc="users_tab_btn" labelid="613" />
+        
+        <tabButtonMain name="filesTabButton" currentIconRsc="files_tab_btn" height="$once{ parent.height }" 
+                labelid="614" width="$once{ (parent.width-6)/2 }"
+                visible="${(canvas.currentRoomObj.hideFilesExplorer ? false:true)}"/>
+        
+    </view>
+    
+    <fileExplorer name="_files" y="22" width="$once{ parent.width-12 }"
+               height="${ parent.height-222 }" visibility="hidden" />
+    
+    <participants name="_videocontainer" y="36" 
+                  width="$once{ parent.width-10 }" 
+               height="${ parent.height-((canvas.currentRoomObj.hideActivitiesAndActions == true) ? 36:236) }" />
+               
+    <activityList name="_activityList" />
+    
+    <view name="_minimizeSidebar" x="${ parent.width - 10 }" width="10" y="1"
+          				bgcolor="0xE0E1EB" height="${ parent.height-1 }">
+        <handler name="onclick">
+            parent.toggleStatus();
+        </handler>
+        
+        <view width="${ parent.width }" height="$once{ parent.height }" 
+               bgcolor="0xE0E1EB" >
+        </view>
+            
+        <view name="_icon" resource="sidebar_tab_btn" y="0">
+             <handler name="onclick">
+	            parent.parent.toggleStatus();
+	         </handler>
+	         <labelTooltip name="_labelTooltip" labelid="856" />
+        </view>
+        
+    </view>
+    
+    <animator name="_doOpen" attribute="width" to="$once{ parent.width }" 
+              duration="750" started="false" />
+              
+    <animator name="_doClose" attribute="width" to="10" 
+              duration="750" started="false" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/conferenceRoomSidebarTabButton.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/conferenceRoomSidebarTabButton.lzx
new file mode 100644
index 0000000..537b473
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/conferenceRoomSidebarTabButton.lzx
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="conferenceRoomSidebarTabButton" extends="view" 
+	   width="$once{ (parent.width-2)/2 }" height="36" y="0">
+	
+	<attribute name="labelid" value="0" type="number" />
+	
+	<attribute name="selected" value="false" type="boolean" />
+	
+	<attribute name="textFontSize" value="14" type="number" />
+	
+	<attribute name="currentIconRsc" value="" type="string"/>
+	
+	<handler name="oninit">
+		if (this.selected) {
+			parent.parent.doSelection(this);
+		}
+	</handler>
+	
+	<handler name="onclick">
+		parent.parent.doSelection(this);
+	</handler>
+	
+	<handler name="onmouseover">
+		if (!this.selected) {
+			this._bg1.setAttribute("visibility","visible");
+		}
+	</handler>
+	
+	<handler name="onmouseout">
+        this._bg1.setAttribute("visibility","hidden");
+    </handler>
+	
+	<method name="select">
+		this.selected = true;
+		this._icon.setAttribute("opacity",1);
+        this._text.setAttribute("opacity",1);
+        this._bg1.setAttribute("visibility","hidden");
+		this._bg2.setAttribute("visibility","visible");
+		this._text.setAttribute("fontstyle","bold");
+		this._text.setAttribute("fgcolor","0xFFFFFF");
+	</method>
+     
+    <method name="deselect">
+        this.selected = false;
+        this._icon.setAttribute("opacity",0.5);
+        this._text.setAttribute("opacity",0.5);
+        this._bg2.setAttribute("visibility","hidden");
+        this._text.setAttribute("fontstyle","bold");
+        this._text.setAttribute("fgcolor","0xFFFFFF");
+    </method>       
+    
+    
+    <view name="_bg1" bgcolor="0xFFFFFF" width="$once{ parent.width }" 
+          height="$once{ parent.height }" opacity="0.7" visibility="hidden"/> 
+          
+    <view name="_bg2" bgcolor="0xFFFFFF" width="$once{ parent.width }" 
+          height="$once{ parent.height }" opacity="0.4" visibility="hidden"/>
+    
+    <view x="4" y="6" name="_icon" resource="$once{ parent.currentIconRsc }" />
+                
+    <labelText name="_text" x="28" fontsize="$once{ parent.textFontSize }" valign="middle" 
+               fgcolor="0xFFFFFF" labelid="$once{ parent.labelid }" />
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/interviewRoomSidebar.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/interviewRoomSidebar.lzx
new file mode 100644
index 0000000..84e9f88
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/interviewRoomSidebar.lzx
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="interviewRoomSidebar" extends="view" width="280" 
+       height="${ canvas.height - ((canvas.currentRoomObj.hideTopBar) ? 0:28) }" y="0" clip="true">
+    
+    <attribute name="selected" value="null" />
+    
+    <attribute name="isOpen" value="true" type="boolean"/>
+    
+    <attribute name="restricted" value="true" type="boolean" />
+   
+    <attribute name="listType" value="eventUserListTable" type="string" />
+    
+    <method name="doSelection" args="itemRef">
+        <![CDATA[
+            if (this.selected != null) {
+                this.selected.deselect();
+            }
+            
+            this.selected = itemRef;
+            this.selected.select();
+          
+        ]]>
+    </method>
+    
+    <view name="borderBarTop" y="0"
+    			width="${ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" />
+   	<view name="_tabbarBg" width="${ parent.width }" height="32" y="1" bgcolor="0xFAFAFA" />
+	<view name="borderBarBottom" y="34"
+   			width="${ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" /> 
+    
+    <view name="_head" y="1" width="${ parent.width-10 }" height="32"
+    		  layout="axis:x;spacing:2;inset:2" >
+    
+    	<handler name="oninit">
+    		for (var eg in this.subviews) {
+            	this.subviews[eg].deselect();
+            }
+            this.userTabButton.doSelection();
+    	</handler>
+        
+        <tabButtonMain name="userTabButton" height="$once{ parent.height }" width="$once{ (parent.width-6)/2 }"
+                currentIconRsc="users_tab_btn" labelid="613" />
+        
+    </view>
+    
+    <interviewUserList name="_videocontainer" y="36"
+			   width="$once{ parent.width-10 }" 
+               height="${ parent.height-((canvas.currentRoomObj.hideActivitiesAndActions == true) ? 36:236) }" />
+               
+    <activityList name="_activityList" />
+    
+    <view name="_minimizeSidebar" x="${ parent.width - 10 }" width="10" y="1"
+    	bgcolor="0xE0E1EB" height="${ parent.height-1 }">
+        
+        <view width="${ parent.width }" height="$once{ parent.height }" 
+               bgcolor="0xE0E1EB" >
+        </view>
+    </view>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/library.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/library.lzx
new file mode 100644
index 0000000..7d1201e
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/library.lzx
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+    <include href="conferenceRoomSidebar.lzx" />
+    <include href="interviewRoomSidebar.lzx" />
+    <include href="restrictedRoomSidebar.lzx" />
+    <include href="conferenceRoomSidebarTabButton.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/restrictedRoomSidebar.lzx b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/restrictedRoomSidebar.lzx
new file mode 100644
index 0000000..e740760
--- /dev/null
+++ b/WebContent/src/modules/conference/flexibleConferenceRoom/roomSidebar/restrictedRoomSidebar.lzx
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="restrictedRoomSidebar" extends="view" width="280"
+       height="${ canvas.height - 28 }" y="0" clip="true">
+    
+    <attribute name="selected" value="null" />
+    
+    <attribute name="isOpen" value="true" type="boolean"/>
+    
+    <attribute name="restricted" value="true" type="boolean" />
+   
+    <attribute name="listType" value="eventUserListTable" type="string" />
+    
+    <method name="doSelection" args="itemRef">
+        <![CDATA[
+        	if (itemRef.name == "filesTabButton") {
+            	if (this.restricted) {
+            		if (!canvas.ismoderator && !canvas.isAllowedToDraw) {
+            			//Do not allow
+            			new lz.labelerrorPopup(canvas,{errorlabelid:783});
+            			return;
+            		}
+            	}
+        	}
+            	
+            if (this.selected != null) {
+                this.selected.deselect();
+            }
+            
+            this.selected = itemRef;
+            this.selected.select();
+          
+            if ($debug) Debug.write("this.selected.name ",this.selected.name, this.inited);
+            
+            if (this.selected.name == "userTabButton") {
+                if ($debug) Debug.write("-- userTabButton");
+                this._files.setAttribute("visibility","hidden");
+                this._participants.setAttribute("visibility","visible");
+            } else if (this.selected.name == "filesTabButton") {
+                if ($debug) Debug.write("-- filesTabButton");
+                this._files.setAttribute("visibility","visible");
+                this._participants.setAttribute("visibility","hidden");
+            }
+        ]]>
+    </method>
+    
+    <method name="toggleStatus">
+        if (this.isOpen) {
+            this._doClose.setAttribute('started', true);
+            this.isOpen = false;
+            this._minimizeSidebar._icon.setAttribute("frame",2);
+            this._minimizeSidebar._icon._labelTooltip.setAttribute("labelid",857);
+        } else {
+            this._doOpen.setAttribute('started', true);
+            this.isOpen = true;
+            this._minimizeSidebar._icon.setAttribute("frame",1);
+            this._minimizeSidebar._icon._labelTooltip.setAttribute("labelid",856);
+        }
+    </method>
+    
+    <view name="borderBarTop" y="0"
+    			width="${ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" />
+   	<view name="_tabbarBg" width="${ parent.width }" height="32" y="1" bgcolor="0xFAFAFA" />
+	<view name="borderBarBottom" y="34"
+   			width="${ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" /> 
+    
+    <view name="_head" y="1" width="${ parent.width-10 }" height="32"
+    		  layout="axis:x;spacing:2;inset:2" >
+    
+    	<handler name="oninit">
+		<![CDATA[
+    		for (var eg in this.subviews) {
+            	this.subviews[eg].deselect();
+            }
+            if (!canvas.currentRoomObj.hideFilesExplorer && canvas.currentRoomObj.filesOpened) {
+				this.filesTabButton.doSelection();
+			} else {
+				this.userTabButton.doSelection();
+			}
+		]]>
+    	</handler>
+   
+        <tabButtonMain name="userTabButton" height="$once{ parent.height }" width="$once{ (parent.width-6)/2 }"
+                currentIconRsc="users_tab_btn" labelid="613" />
+        
+        <tabButtonMain name="filesTabButton" currentIconRsc="files_tab_btn" height="$once{ parent.height }" 
+                labelid="614" width="$once{ (parent.width-6)/2 }"
+                visible="${(canvas.currentRoomObj.hideFilesExplorer ? false:true)}"/>
+        
+    </view>
+    
+    <fileExplorer name="_files" y="22" width="$once{ parent.width-12 }" 
+               height="${ parent.height-222 }" visibility="hidden" />
+    
+    <restrictedUserList name="_participants" y="36" 
+			    width="$once{ parent.width-10 }" 
+			   height="${ parent.height-((canvas.currentRoomObj.hideActivitiesAndActions == true) ? 36:236) }" />
+			   
+    <activityList name="_activityList" />
+    
+    <view name="_minimizeSidebar" x="${ parent.width - 10 }" width="10" y="1"
+          				bgcolor="0xE0E1EB" height="${ parent.height-1 }">
+        <handler name="onclick">
+            parent.toggleStatus();
+        </handler>
+        
+        <view width="${ parent.width }" height="$once{ parent.height }" 
+               bgcolor="0xE0E1EB" >
+        </view>
+            
+        <view name="_icon" resource="sidebar_tab_btn" y="0">
+             <handler name="onclick">
+	            parent.parent.toggleStatus();
+	         </handler>
+	         <labelTooltip name="_labelTooltip" labelid="856" />
+        </view>
+        
+    </view>
+    
+    <animator name="_doOpen" attribute="width" to="$once{ parent.width }" 
+              duration="750" started="false" />
+              
+    <animator name="_doClose" attribute="width" to="10" 
+              duration="750" started="false" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/interviewuserlist/interviewListInner.lzx b/WebContent/src/modules/conference/interviewuserlist/interviewListInner.lzx
new file mode 100644
index 0000000..0d4fc4d
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/interviewListInner.lzx
@@ -0,0 +1,292 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="interviewListTable" extends="view" y="60" 
+       height="${ parent.height-64-parent.moderationPanel.height }"
+        bgcolor="0xFFFFFF" x="2" clip="true" width="$once{ parent.width-4 }" >
+        <innerlistViewEventUserListTable name="innerList" />
+    <om_vscrollbar />
+</class>    
+
+<class name="interviewListInner" extends="baseRoomInnerList"  
+       width="$once{ parent.width }" height="${ parent.height }" 
+       bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >
+    
+    <attribute name="selectedItem" value="null" />
+    
+    <attribute name="sortType" value="alphabetical" type="string" />    
+    
+    <handler name="oninit">
+        <![CDATA[
+            if ($debug) Debug.write("!!!!! interviewListTable oninit: ");
+            this.initList();
+        ]]>
+    </handler>
+    
+    <!-- clip="true" -->
+    
+    <view width="$once{ parent.width-2 }" height="${ parent.height-2 }" 
+        x="1" y="1" bgcolor="white" />
+
+    <method name="addItem" args="object">
+        <![CDATA[
+            if ($debug) Debug.write("interviewListTable addItem: ",object,object.publicSID);
+            var list = this._table.innerList;
+            for (var i = 0; i < list.subviews.length;i++) {
+                if (list.subviews[i].refObj.publicSID == object.publicSID) {
+                    //if ($debug) Debug.warn("Already on List, do not add twice");
+                    return;
+                }
+            }
+            var lastname = object.lastname == null ? "" : object.lastname;
+            if (object.isSuperModerator) {
+                lastname += " *";
+            }
+            
+            new lz.interviewUserListItem(list,{
+                    user_id:object.user_id,
+                    firstname: object.firstname,
+                    isSuperModerator:object.isSuperModerator,
+                    lastname: lastname,
+                    refObj:object,
+                    connectedSince:object.connectedSince,
+                    isMod:object.isMod,
+                    streamid:object.streamid,
+                    username:object.username,
+                    formatedDate:object.formatedDate
+                });
+            
+            this.sortUserList();
+            if (canvas.currentRoomObj.autoVideoSelect) {
+				if (object.publicSID == canvas.publicSID && !object.interviewPodId
+					&& (object.isMod || object.isSuperModerator || object.canDraw))
+				{
+		            for (var ii = 1; ii < 3; ++ii) {
+		            	var obj = getVideoObjectByInterviewPodId(ii);
+		            	if (!obj) {
+	            			var interviewBox = canvas._drawarea._videoviewcontent.searchImmediateSubnodes("name", "interviewVideoBox" + ii);
+	            			//if ($debug) Debug.write("!!!! interviewListInner:: interviewBox = ", ii, interviewBox);
+	           				interviewBox.sendConfirmation(canvas.publicSID);
+		            		break;
+		            	}
+					}
+				}
+			}
+        ]]>
+    </method>
+    
+    <method name="sortUserList">
+        <![CDATA[ 
+        
+           if (this.sortType == "alphabetical") {
+                function sortByName(a,b) {
+                   
+                    if(a.firstname.toLowerCase() < b.firstname.toLowerCase()) return -1;
+                    else if(a.firstname.toLowerCase() > b.firstname.toLowerCase()) return 1;
+                    else return 0;
+                
+                }
+            
+                this._table.innerList.subviews.sort(sortByStreamId);
+                this._table.innerList._layout.subviews.sort(sortByStreamId);
+            } else {
+                function sortByStreamId(a,b) {
+                   
+                    if(Number(a.streamid) == Number(b.streamid)) return 0;
+                    else if(Number(a.streamid) > Number(b.streamid)) return 1;
+                    else return -1;
+                
+                }
+            
+                this._table.innerList.subviews.sort(sortByStreamId);
+                this._table.innerList._layout.subviews.sort(sortByStreamId);
+            }
+            
+            this._table.innerList._layout.update(); 
+        ]]>
+    </method>
+        
+    
+    <method name="initList">
+        new lz.interviewListTable(this,{name:'_table'});
+        this.moderationPanel.bringToFront();
+    </method>
+    
+    <method name="clearList">
+        this._table.destroy();
+        this.initList();
+    </method>
+    
+	<method name="disconnectclient" args="publicSID">
+	<![CDATA[
+		var item = getUserListItemByPublicSID(publicSID);
+		if (item) {
+			item.destroy();
+		}
+	]]>
+	</method>
+    
+    <!--- get a Objects List Item
+        @param string publicSID publicSID
+     -->
+	<method name="getUserListItemByPublicSID" args="publicSID">
+	<![CDATA[
+		for (var i=0;i<this._table.innerList.subviews.length;i++){
+			//if ($debug) Debug.write("getUserListItemByPublicSID : this._table.innerList.subviews[i]",this._table.innerList.subviews[i]);
+			if (this._table.innerList.subviews[i].refObj.publicSID==publicSID){
+				return this._table.innerList.subviews[i];
+			}
+		}
+		return null;
+	]]>
+	</method>
+
+	<method name="getVideoObjectByInterviewPodId" args="interviewPodId">
+	<![CDATA[
+		var list = this._table.innerList.subviews;
+		for (var i = 0; i < list.length; ++i) {
+			//if ($debug) Debug.write("getVideoObjectByInterviewPodId : list[i]", list[i]);
+			if (list[i].refObj.interviewPodId == interviewPodId){
+				if ($debug) Debug.write("getVideoObjectByInterviewPodId : list[i].refObj.interviewPodId", interviewPodId, list[i].refObj.interviewPodId);
+				return list[i];
+			}
+		}
+		return null;
+	]]>
+	</method>
+
+    <method name="selectItem" args="itemObj">
+        <![CDATA[
+        if ($debug) Debug.write("selectItem ",itemObj);
+        
+        if (canvas.ismoderator) {
+            if (this.selectedItem != null && this.selectedItem != itemObj) {
+                this.selectedItem.deselect();
+            }
+            
+            this.selectedItem = itemObj;
+            if (this.selectedItem.isSelected) {
+                this.selectedItem.deselect();
+            } else {
+                this.selectedItem.select();
+            }
+        }
+        ]]>
+    </method>
+
+    <view name="userStatus" layout="axis:y">
+        <view>
+             <view resource="userstatus_multiframe_rsc" frame="1" />
+             <labelText x="16" labelid="677" />
+        </view>
+        <view>
+             <view resource="userstatus_multiframe_rsc" frame="2" />
+             <labelText x="16" labelid="678" />
+        </view>
+        <view>
+             <view resource="userstatus_multiframe_rsc" frame="3" />
+             <labelText x="16" labelid="679" />
+        </view>
+    </view>
+    
+    <moderationMiniIconsInterviewUserList name="_applyAndStatusIcons" 
+                          x="$once{ parent.width-this.width-4 }" y="2" />
+    
+    <!--
+    <eventUserListTable name="_table" /> 
+     -->
+    <view name="moderationPanel" height="0" clip="true" 
+          y="${ parent.height - this.height - 2 }">
+        
+        <handler name="onismoderator" reference="canvas" args="m">
+            if ($debug) Debug.write("###### ismoderator ",m);
+            <![CDATA[
+                //this.isMod = canvas.getIsModeratorByPublicSID(this.refObj.publicSID);
+                this.updateIcons();
+            ]]>
+        </handler>
+        
+        <handler name="ondrawAllowStatus" reference="canvas" args="drawObject">
+            <![CDATA[
+                //search for the user and update its drawStatusIcon
+                var vList = parent._table.innerList.subviews;
+                for (var i=0;i<vList.length;i++) {
+                    //vList[i].updateIconByMod();
+                    if (vList[i].refObj.publicSID == drawObject.publicSID) {
+                        vList[i].refObj.canDraw = drawObject.canDraw;
+                        vList[i].updateIconByMod();
+                        break;
+                    }
+                }
+            ]]>
+        </handler>
+        
+        <handler name="onlastBroadCastingUser" reference="canvas" args="userObject">
+            <![CDATA[
+                
+                if (!userObject.isBroadcasting) {
+                    //Stop Broadcasting and close Dialog
+                    //Search, stop and remove video
+                    parent.parent.removeVideoByUser(userObject);
+                }
+                
+                //search for the user and update its drawStatusIcon
+                var vList = parent._table.innerList.subviews;
+                for (var i=0;i<vList.length;i++) {
+                    //vList[i].updateIconByMod();
+                    if (vList[i].refObj.publicSID == userObject.publicSID) {
+                        vList[i].refObj.isBroadcasting = userObject.isBroadcasting;
+                        vList[i].updateIconByMod();
+                        break;
+                    }
+                }
+                
+                parent._applyAndStatusIcons.updateIcons();
+            ]]>
+        </handler>
+        
+        <method name="updateIcons">
+            <![CDATA[
+                if (canvas.ismoderator) {
+                    this.showItem.setAttribute('started', true);
+                } else {
+                    this.setAttribute("height",0);
+                }
+                var vList = parent._table.innerList.subviews;
+                
+                for (var i=0;i<vList.length;i++) {
+                    vList[i].updateIconByMod();
+                }
+                parent._applyAndStatusIcons.updateIcons();
+            ]]>
+        </method>
+        
+        <labelText labelid="912" width="270" x="0" multiline="true" y="0" />
+        
+        <animator name="showItem" attribute="height" 
+                  to="60" duration="1000" started="false" />
+    </view>
+
+</class>
+
+
+</library>
\ No newline at end of file
diff --git a/WebContent/src/modules/conference/interviewuserlist/interviewModerationMiniIcons.lzx b/WebContent/src/modules/conference/interviewuserlist/interviewModerationMiniIcons.lzx
new file mode 100644
index 0000000..52de0c2
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/interviewModerationMiniIcons.lzx
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="interviewModerationMiniIcons" extends="view" valign="bottom" height="18">
+	
+	<attribute name="isMod" value="false" type="boolean"/>
+    <attribute name="isSuperModerator" value="false" type="boolean"/>
+	
+	<handler name="oninit">
+		this.isMod = canvas.getIsModeratorByPublicSID(parent.refObj.publicSID);
+		
+		if ($debug) Debug.write("this.isMod ",this.isMod);
+		
+		if (this.isMod) {
+			this._isMod.setAttribute("visibility","visible");
+			this._isModAddbutton.setAttribute("visibility","hidden");
+		} else {
+			this._isMod.setAttribute("visibility","hidden");
+            this._isModAddbutton.setAttribute("visibility","visible");
+		}
+		
+	</handler>
+        
+    <miniIcons name="_isMod" x="0" width="16" resource="participants_isMod_rsc" height="16">
+        <handler name="onclick">
+            <![CDATA[
+            
+                if (parent.isSuperModerator) {
+                    new lz.labelerrorPopup(canvas.main_content._content.inner,{errorlabelid:838});
+                    return;
+                }
+            
+                //if the label is set and this is a Moderator then this user should
+                //allow the click event => the click event will trigger
+                //this user away from beeing able to draw on the whiteboard
+                if (canvas.ismoderator) {
+                    //Do it 
+                    if ($debug) Debug.write("Do Remove It");
+                    if (parent.parent.refObj.publicSID != canvas.publicSID) {
+                        hib.removeModerator.publicSIDOfNewModerator = parent.parent.refObj.publicSID;
+                        hib.removeModerator.doCall();
+                    } else {
+                    	new lz.labelerrorPopup(canvas,{errorlabelid:682});
+                    }
+                    //parent.parent.setCanDraw.doCall();
+                }
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="675" />
+    </miniIcons>
+    
+    <miniIcons name="_isModAddbutton" opacity="0.5" x="0" width="16" resource="participants_isMod_rsc" height="16">
+        <handler name="onclick">
+            <![CDATA[
+                //if the label is set and this is a Moderator then this user should
+                //allow the click event => the click event will trigger
+                //this user away from beeing able to draw on the whiteboard
+                if (canvas.ismoderator) {
+                    //Do it 
+                    if ($debug) Debug.write("Do Add It");
+                    hib.addModerator.publicSIDOfNewModerator = parent.parent.refObj.publicSID;
+                    hib.addModerator.doCall();
+                    //parent.parent.setCanDraw.doCall();
+                }
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="676" />
+    </miniIcons>
+        
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/interviewuserlist/interviewUserList.lzx b/WebContent/src/modules/conference/interviewuserlist/interviewUserList.lzx
new file mode 100644
index 0000000..a42e6f1
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/interviewUserList.lzx
@@ -0,0 +1,254 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+ 
+<class name="interviewUserList" extends="view" width="$once{ parent.width }" 
+       height="${ parent.height-34 }">
+
+    <!--- holds a references to the videoview which is broadcasting -->
+    <attribute name="broadCastViewRef" value="null" />
+    
+    <!--- colors for each user -->
+    <attribute name="colorArray" value="null" />
+
+    <attribute name="showsVideoInSeparateComponent" value="false" type="boolean" />
+    
+    <handler name="oninit">
+        //set modus
+        canvas.thishib.modus = "interview";
+        
+        //set reference, this reference will be cleared at *ontabcontenctleave* event
+        canvas._videocontainer=this;
+        
+        // Reconnect User to its Room Id
+        canvas.thishib.userScope = canvas.thishib.currentroomid;
+        var src = hib.getUrl();
+        
+        if( $debug ) Debug.write("videoContainer: canvas.thishib: ",canvas.thishib.src,canvas.thishib);
+        
+        if (canvas.thishib.src != src) {
+            canvas.thishib.setAttribute('src',src);
+            
+			if (canvas.wicketsid == null){            
+	            canvas.thishib.reconnectionAction = true;
+	            canvas.thishib.reconnectObjRef = this;
+	            canvas.thishib.disconnect();
+            } else {
+            	this.reconnectSuccess();
+            }
+        } else {
+            //The user is already in the correct Scope
+            this.reconnectSuccess();
+        }
+    </handler>
+                  
+    <method name="reconnectSuccess">
+        if ($debug) Debug.warn("User Reloged In ",canvas.becomemoderator);
+        //Send to SWF10 video-container to connect on the conference room url 
+        //and wait for the as3ConnectionSuccess-Event
+        this._videoviewcontent.reconnectSuccess(true);
+    </method>
+    
+    <!---
+        We need to wait till the video-container / as3 app has the connection established
+        otherwise it can happen that the video tries to start playing before the rtmp-connection
+        was established
+     -->
+    <method name="as3ConnectionSuccess">
+        if ($debug) Debug.write("as3ConnectionSuccess continue loading");
+        //set default values and get already availible streams
+        //it can happen that if you click to exit the room the views are not 
+        //not cleaned up yet and you receive this event from the LocalConnection
+        if (this["getRoomModeratorsByRoomId"]) {
+            this.getRoomModeratorsByRoomId.doCall();
+        }
+    </method>
+    
+    <netRemoteCallHib name="getRoomModeratorsByRoomId" funcname="conferenceservice.getRoomModeratorsByRoomId" 
+                      remotecontext="$once{ canvas.thishib }" >  
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>    
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("getRoomModeratorsByRoomId: ",value);
+                canvas.becomeSuperModerator = false;
+                
+                parent.setRoomValues.applyDefaultModeration = canvas.becomemoderator;
+                
+                for (var i=0;i<value.length;i++) {
+                    
+                    if (value[i].user.user_id == canvas.user_id) {
+                        parent.setRoomValues.applyDefaultModeration = true;
+                        canvas.becomeSuperModerator = value[i].isSuperModerator;
+                        if ($debug) Debug.info("Make this User to an Moderator");
+                        break;
+                    }
+                    
+                }
+                
+                if ($debug) Debug.write("canvas.becomemoderator: ",canvas.becomemoderator);
+                if ($debug) Debug.write("canvas.becomeSuperModerator: ",canvas.becomeSuperModerator);
+                
+                canvas.currentusercolor = canvas.getColorForUser();
+                
+                var organisation_id = 1;
+            
+                if ($debug) Debug.write(hib.userobject); 
+                if ($debug) Debug.write(hib.currentdomainObj); 
+                
+                if (hib.currentdomainObj != null) {
+                    organisation_id = hib.currentdomainObj.organisation_id
+                }
+                
+                this.parent.setRoomValues.organisation_id = organisation_id;
+                this.parent.setRoomValues.doCall();
+            
+            ]]>
+        </handler>
+    </netRemoteCallHib>     
+
+    <netRemoteCallHib name="setRoomValues" funcname="setRoomValues" remotecontext="$once{ canvas.thishib }" >   
+        <attribute name="applyDefaultModeration" value="false" type="boolean" />
+        <attribute name="organisation_id" value="0" type="number" />
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>
+        <netparam><method name="getValue">return parent.applyDefaultModeration;</method></netparam>
+        <netparam><method name="getValue">return canvas.becomeSuperModerator;</method></netparam>
+        <netparam><method name="getValue">return parent.organisation_id;</method></netparam>
+        <netparam><method name="getValue">return canvas.currentusercolor;</method></netparam>
+        <handler name="ondata" args="roomStatus">
+            <![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            //if ($debug) Debug.write("setRoomValues1: ",value);
+            //if ($debug) Debug.write("setRoomValues2: ",hib.currentroomid);
+            
+            if (roomStatus.roomFull) {
+                canvas.thishib.showFullMessage = true;
+                canvas.thishib.disconnect();
+            }
+            
+            if (roomStatus.browserStatus.browserInited) {
+                var tObj = new Object();
+                tObj[0] = "newBrowserURL";
+                tObj[1] = roomStatus.browserStatus.currentURL;
+                canvas.startBrowser(tObj);
+            }
+            
+            var value = roomStatus.clientList;
+            
+            for (var i = 0; i < value.length; ++i){
+                if ( value[i].streamid == canvas.streamid ) {
+                    canvas.isAllowedToDraw = value[i].canDraw;
+                }
+
+                this.parent.addItem(value[i].connectedSince,value[i].isMod,value[i].streamid,value[i].username,
+                              '',value[i].formatedDate,value[i].userpos,value[i].usercolor,value[i]);
+            }
+            //this content must be inited _after_ setting the default values
+            canvas.thishib.getCurrentModeratorList.doCall(); 
+            //FIXME Issue-1076
+            canvas.thishib.checkLzRecording.doCall();
+            if (canvas._currentChatPanel.visible) {
+				canvas._currentChatPanel.toggleopen();
+			}
+            ]]>
+        </handler>  
+    </netRemoteCallHib>
+
+    <!-- invoked if another client logs into the room 
+    after choosing devices -->     
+    <method name="setAVSettingsToClient" args="rcl">
+         this._videoviewcontent.setAVSettingsToClient(rcl);
+    </method> 
+    
+    <method name="addItem" args="connectedSince,isMod,streamid,username,userroom,formatedDate,position,color,object">
+        <![CDATA[
+            if ($debug) Debug.write("initializeStreams addItem: ",connectedSince,object);
+            
+            //Do init only in case this stream is NOT the same as we are
+            if (streamid!=canvas.streamid){
+                //if ($debug) Debug.write("???????? object.isBroadcasting :: ",object.isBroadcasting);
+                this._videoviewcontent.createVideo(object.publicSID, object.firstname+' '+object.lastname, object.broadCastID, object.avsettings, object.interviewPodId, object);
+            }
+           
+            //do add self too
+            this._participants.addItem(object);
+        ]]>
+    </method>
+    
+    <method name="addClientItem" args="connectedSince,isMod,streamid,username,room_id,formatedDate,position,color,object">
+        <![CDATA[
+        if ($debug) Debug.write("### initializeStreams addClientItem: ",connectedSince,isMod,streamid,username,room_id,formatedDate);
+
+        if (canvas.publicSID != object.publicSID){
+            this._videoviewcontent.createVideoObject(object.publicSID, false, object.interviewPodId, object);
+        }
+
+        //Do Add it anyway
+        this._participants.addItem(object);
+        ]]>
+    </method>
+        
+    <!--
+        invoked whenever a User starts to Stream Video in this Room,
+        interviewPodId has only a meaning in the Room Type Interview
+     -->
+    <method name="startStream" args="publicSID,broadcastId,firstname,lastname,interviewPodId,VWidth,VHeight">
+        this._videoviewcontent.startStream(publicSID,broadcastId,firstname,lastname,interviewPodId,VWidth,VHeight);
+    </method>
+
+    <method name="updateMuteStatusVideoView" args="roomClient">
+        this._videoviewcontent.updateMuteStatusVideoView(roomClient);
+    </method>
+    
+    <method name="setSpeakingByPos" args="publicSID,bool">
+        this._videoviewcontent.setSpeakingByPos(publicSID, bool);
+    </method>  
+    
+    <!--- 
+        stops the streaming but does not destroy the view
+        @param int broadcastId broadcastId
+     -->
+    <method name="closeStreamClient" args="publicSID">
+        this._videoviewcontent.closeStreamClient(publicSID);
+    </method>
+    
+    <method name="removeVideoByUser" args="userObject">
+    	if ($debug) Debug.write("removeVideoByUser ",userObject);
+        this.closeStreamClient(userObject.publicSID);
+    </method>
+    
+    <method name="disconnectclient" args="publicSID">
+        this._videoviewcontent.disconnectclient(publicSID);
+        this._participants.disconnectclient(publicSID);
+    </method>
+    
+    <method name="resetAllValues">
+        this._videoviewcontent.resetAllValues();
+    </method>
+    
+    <interviewListInner name="_participants" />
+    
+    <commonVideoComponentAdapter name="_videoviewcontent"/>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/interviewuserlist/interviewUserListItem.lzx b/WebContent/src/modules/conference/interviewuserlist/interviewUserListItem.lzx
new file mode 100644
index 0000000..6ebe8c9
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/interviewUserListItem.lzx
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="interviewUserListItem" extends="view" showhandcursor="false" 
+	   bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" width="252" height="42">
+	
+	<attribute name="connectedSince" value="" type="string" />
+    <attribute name="isMod" value="" type="string" />
+    <attribute name="streamid" value="" type="string" />
+    <attribute name="username" value="" type="string" />
+    <attribute name="userroom" value="" type="string" />
+    <attribute name="formatedDate" value="" type="string" />
+    <attribute name="firstname" value="" type="string" />
+    <attribute name="lastname" value="" type="string" />
+    <attribute name="user_id" value="0" type="number" />
+    <attribute name="refObj" value="null" />
+    
+    <attribute name="isSuperModerator" value="false" type="boolean"/>
+    
+    <attribute name="isSelected" value="false" type="boolean" />
+    
+	<handler name="oninit">
+        <![CDATA[
+            //This is a workaround cause in LPS-4.2.x immediatelly loading does not work
+            lz.Timer.addTimer( new LzDelegate( this, "fadeText" ), 1000 );
+
+            if (this.isMod) {
+            	this.userStatus.setAttribute("frame",3);
+            }
+               
+            if (canvas.publicSID == this.refObj.publicSID) {
+                //this._userName.setAttribute("fontstyle","bold");
+                this.setAttribute("bgcolor",0x00FF00);
+            }
+            
+            this.updateIconByMod();
+        ]]>
+    </handler>
+    
+    <method name="update" args="obj">
+    	setAttribute('firstname', obj.firstname);
+    	setAttribute('lastname', obj.lastname);
+    	refObj = obj;
+    </method>
+     
+    <method name="updateIconByMod">
+    	this.isMod = canvas.getIsModeratorByPublicSID(this.refObj.publicSID);
+    	if (this.isMod) {
+            this.userStatus.setAttribute("frame",3);
+        } else if (this.refObj.canDraw) {
+        	this.userStatus.setAttribute("frame",2);
+        } else {
+        	this.userStatus.setAttribute("frame",1);
+        }
+        
+        if (this.isSelected) {
+        	this._miniIcons.oninit.sendEvent();
+        }
+    </method>
+    
+    <method name="fadeText" args="ignore=null"> 
+        <![CDATA[
+            this._userpic.setAttribute('src', canvas.getPictureUrl(this.refObj.picture_uri, '&moduleName=chat&remoteUserid='+this.user_id)); 
+        ]]>          
+    </method>
+     
+    <handler name="onclick">
+    	parent.parent.parent.selectItem(this);
+    </handler>
+     
+    <method name="select">
+    	if (!this.isSelected) {
+	    	new lz.interviewModerationMiniIcons(this,{name:'_miniIcons',align:'right',
+                isMod:this.isMod,
+                isSuperModerator:this.isSuperModerator});
+	    	this.isSelected = true;
+	    	this._userName.text = "";
+	    	this.showItem.setAttribute('started', true);
+    	}
+    </method>
+    
+    <method name="deselect">
+    	if (this.isSelected) {
+	    	this._miniIcons.destroy();
+	    	this.isSelected = false;
+	    	this._userName.text = this.firstname+' '+this.lastname;
+	    	this.closeItem.setAttribute('started', true);
+    	}
+    </method>
+     
+    <image name="_userpic" stretches="both" x="1" y="1">
+        <handler name="onload">
+            <![CDATA[
+                if (this.height > 38) {
+                    //If bigger then containter then scale it
+                    var width = this.width/(this.height/38);
+                    this.setAttribute('height',38);
+                    this.setAttribute('width',width);
+                }
+            ]]>
+        </handler>
+    </image>
+    
+	<method name="userTyping" args="v">
+	</method>
+    <view name="userStatus" align="right" frame="1" 
+    	  resource="userstatus_multiframe_rsc" />
+    
+    <labelText name="_userName" x="41" y="2"
+    		   text="$once{ (parent.firstname == null ? '' : parent.firstname) + ' ' + (parent.lastname == null ? '' : parent.lastname) }" />
+     
+    <animatorgroup name="showItem" started="false" process="simultaneous">
+    	<animator attribute="height" to="62" duration="750" />
+    	<animator attribute="width" to="252" duration="750" />
+    </animatorgroup>
+    
+    <animatorgroup name="closeItem" started="false" process="simultaneous">
+        <animator attribute="height" to="42" duration="750" />
+        <animator attribute="width" to="252" duration="750" />
+    </animatorgroup>
+                 
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/interviewuserlist/interviewVideoBox.lzx b/WebContent/src/modules/conference/interviewuserlist/interviewVideoBox.lzx
new file mode 100644
index 0000000..ea3bace
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/interviewVideoBox.lzx
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+
+<class name="interviewVideoChooseUser" extends="guiPresenter" resizeable="false"
+    width="220" height="100" closable="true" labelid="910" y="10" minimizable="false">
+    
+    <attribute name="refObj" value="null" />
+    
+    <handler name="oninit">
+        this.getClientListScope.doCall();
+    </handler>
+    
+    <netRemoteCallHib name="getClientListScope" funcname="getClientListScope" remotecontext="$once{ canvas.thishib }" >   
+        <handler name="ondata" args="value">
+		<![CDATA[
+			if ($debug) Debug.write("+++++++++++++++++ getClientListScope : ",value);
+			for (var i = 0; i < value.length; ++i) {
+				var name = (value[i].firstname == null ? "" : value[i].firstname) + ',' + (value[i].lastname == null ? "" : value[i].lastname);
+				parent._users.addItem(name + ' [' + value[i].username + ']', value[i].publicSID);
+			}
+			parent._users.selectItemAt(0);
+		]]>
+		</handler>  
+    </netRemoteCallHib>
+    
+    <labelText labelid="911" x="2" y="22"/>
+    
+    <resetCombobox name="_users" x="2" y="42" width="$once{ parent.width-4 }"/>
+    
+    <simpleLabelButton labelid="61" width="100" x="$once{ parent.width - 105 }" y="$once{ parent.height - 26 }">
+        <handler name="onclick">
+            this.parent.close();
+        </handler>
+    </simpleLabelButton>    
+    
+    <simpleLabelButton labelid="60" width="100" x="$once{ parent.width - 210 }" y="$once{ parent.height - 26 }">
+        <handler name="onclick">
+            var valueCombobox = parent._users.getValue();
+            if (this.parent.refObj.sendConfirmation(valueCombobox)) {
+                this.parent.close();
+            }
+        </handler>
+    </simpleLabelButton>   
+    
+</class>
+ 
+<class name="interviewVideoBox" extends="view" width="322" height="281" bgcolor="0x000000">
+    <attribute name="interviewPodId" value="0" type="number" />
+    
+    <method name="startInterView">
+        if ($debug) Debug.write("startInterView :: ");
+        var tx = this.getAttributeRelative("x",canvas);
+        var ty = this.getAttributeRelative("y",canvas);
+        canvas._videocontainer._videoviewcontent.showDevicePopUpInterview(false,this.interviewPodId,tx,ty,this.width,this.height);
+    </method>
+
+	<method name="sendConfirmation" args="publicSID">
+		if ($debug) Debug.write("sendConfirmation :: ",publicSID);
+		
+		canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = publicSID;
+		canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+		canvas.thishib.setBroadCastingFlag.canVideo = !canvas.currentRoomObj.isAudioOnly;
+		canvas.thishib.setBroadCastingFlag.interviewPodId = this.interviewPodId;
+		canvas.thishib.setBroadCastingFlag.doCall();
+		
+		return true;
+	</method>
+    
+    <netRemoteCallHib name="sendMessageWithClientByPublicSID" funcname="sendMessageWithClientByPublicSID" 
+                      remotecontext="$once{ canvas.thishib }" >  
+        <attribute name="messageObject" value="null" />
+        <attribute name="publicSID" value="" type="string" />
+        <netparam><method name="getValue">return parent.messageObject;</method></netparam>
+        <netparam><method name="getValue">return parent.publicSID;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("+sendMessageWithClientByPublicSID : ",value);
+                
+            ]]>
+        </handler>  
+    </netRemoteCallHib>
+    
+    <simpleLabelButton labelid="910" height="30" valign="middle" align="center"
+               visible="${ ((canvas.ismoderator) ? true : ((canvas.isAllowedToDraw) ? true : false )) }">
+        <handler name="onclick" args="refObj">
+            new lz.interviewVideoChooseUser(canvas,{
+                           isInterview:true,
+                           x:this.getAttributeRelative("x",canvas)-10,
+                           y:this.getAttributeRelative("y",canvas)-20,
+                           width:this.width+20,
+                           refObj:parent
+                        });
+        </handler>
+    </simpleLabelButton>
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/interviewuserlist/interviewWhiteboard.lzx b/WebContent/src/modules/conference/interviewuserlist/interviewWhiteboard.lzx
new file mode 100644
index 0000000..64f3f53
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/interviewWhiteboard.lzx
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="interviewWhiteboard" extends="view" clip="true">
+	<attribute name="checkPodsDelegate" value="null"/>
+	        
+	<handler name="oninit">
+	<![CDATA[
+		canvas._drawarea = this;
+		if (checkPodsDelegate == null && !_recStarted.visible) {
+			checkPodsDelegate = new LzDelegate(this, "checkPods");
+			lz.Timer.addTimer(checkPodsDelegate, 1000);
+		}
+		this.reloadStatus();
+	]]>
+	</handler>
+    
+    <handler name="ondestroy">
+		stopPodChecks();
+    </handler>
+    
+    <handler name="onopenWhiteBoard" >
+        if ($debug) Debug.write("-- onOpenWhiteBoard --");
+    </handler>
+    
+	<method name="newInterviewStarting" args="refObj">
+	<![CDATA[
+		this._videoviewcontent["interviewVideoBox"+refObj.interviewPodId].startInterView();
+	]]>
+	</method>
+	
+	<method name="stopPodChecks">
+		if (checkPodsDelegate != null) {
+			lz.Timer.removeTimer(checkPodsDelegate);
+			checkPodsDelegate = null;
+		}
+	</method>
+
+	<method name="onInterviewPodCount" args="count">
+		_interview._start.setAttribute("enabled", count > 0);
+	</method>
+	
+	<method name="checkPods" args="ignore=null">
+		//if ($debug) Debug.write(":: Pods :: check :: ");
+		canvas.sendViaLocalConnection(canvas.vid_lc_name, "getVideoObjectCount", [null]);
+		lz.Timer.resetTimer(checkPodsDelegate, 1000);
+	</method>
+	
+    <method name="reloadStatus">
+        this.getInterviewRecordingStatus.doCall();
+    </method>
+    
+    <!--
+    getInterviewRecordingStatus()
+     -->
+    <netRemoteCallHib name="getInterviewRecordingStatus" funcname="getInterviewRecordingStatus" 
+                      remotecontext="$once{ canvas.thishib }" >  
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("getInterviewRecordingStatus: ",value);
+                if (value) {
+                    parent._recStarted.setAttribute("visibility","visible");
+                } else {
+                    parent._recStarted.setAttribute("visibility","hidden");
+                }
+            ]]>
+        </handler>
+    </netRemoteCallHib> 
+    
+    <simplelayout axis="y" spacing="2" />
+    
+    <commonVideoViewContent name="_videoviewcontent" x="40" >
+        <simplelayout axis="x" spacing="2" />
+        
+        <interviewVideoBox name="interviewVideoBox1" interviewPodId="1" />
+        <interviewVideoBox name="interviewVideoBox2" x="324" interviewPodId="2" />
+    </commonVideoViewContent>
+    
+    <view name="_interview" align="center" visible="${ canvas.ismoderator }">
+        <!--
+           public synchronized Boolean startInterviewRecording()
+         -->
+        <netRemoteCallHib name="startInterviewRecording" funcname="startInterviewRecording" remotecontext="$once{ canvas.thishib }" >  
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    if ($debug) Debug.write("startInterviewRecording: ",value);
+                    if (!value) {
+                        new lz.labelerrorPopup(canvas,{errorlabelid:915});
+                    }
+                ]]>
+            </handler>
+        </netRemoteCallHib>          
+        
+        <netRemoteCallHib name="stopInterviewRecording" funcname="stopInterviewRecording" remotecontext="$once{ canvas.thishib }" >  
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    if ($debug) Debug.write("stopInterviewRecording: ",value);
+                    if (!value) {
+                        new lz.labelerrorPopup(canvas,{errorlabelid:916});
+                    }
+                ]]>
+            </handler>
+        </netRemoteCallHib>  
+        
+        <simplelayout axis="x" spacing="2" />
+        
+        <simpleLabelButton name="_start" labelid="913" height="30" width="200">
+            <handler name="onclick">
+                if ($debug) Debug.write("Start Recording");
+                parent.startInterviewRecording.doCall();
+            </handler>
+            <view x="2" y="4" resource="interview_record_start" />
+        </simpleLabelButton>
+        
+        <simpleLabelButton name="_stop" labelid="914" height="30" width="200">
+            <handler name="onclick">
+                if ($debug) Debug.write("Stop Recording");
+                parent.stopInterviewRecording.doCall();
+            </handler>
+            <view x="2" y="4" resource="interview_record_stop" />
+        </simpleLabelButton>
+        
+    </view>
+    
+    <view name="_recStarted" align="center" visibility="hidden">
+        <labelText labelid="917" />
+    </view>
+        
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/interviewuserlist/library.lzx b/WebContent/src/modules/conference/interviewuserlist/library.lzx
new file mode 100644
index 0000000..601b2f8
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/library.lzx
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<resource name="interview_record_start" src="resources/webstart_play.png" />
+	<resource name="interview_record_stop" src="resources/webstart_stop.png" />
+	
+    <include href="interviewUserList.lzx" />
+    <include href="interviewWhiteboard.lzx" />
+    <include href="interviewVideoBox.lzx" />
+    <include href="interviewModerationMiniIcons.lzx" />
+    <include href="interviewUserListItem.lzx" />
+    <include href="interviewListInner.lzx" />
+    <include href="moderationMiniIconsInterviewUserList.lzx" />
+    
+    
+</library>
diff --git a/WebContent/src/modules/conference/interviewuserlist/moderationMiniIconsInterviewUserList.lzx b/WebContent/src/modules/conference/interviewuserlist/moderationMiniIconsInterviewUserList.lzx
new file mode 100644
index 0000000..fedcea82
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/moderationMiniIconsInterviewUserList.lzx
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="moderationMiniIconsInterviewUserList" extends="view">
+	
+    <handler name="oninit">
+    	this.updateIcons();
+    </handler>	
+    
+    <method name="updateIcons">
+        if (canvas.ismoderator) {
+            this._isMod.setAttribute("visibility","visible");
+            this._isModAddbutton.setAttribute("visibility","hidden");
+        } else {
+            this._isMod.setAttribute("visibility","hidden");
+            this._isModAddbutton.setAttribute("visibility","visible");
+        }
+    </method>
+	
+    <miniIcons name="_isMod" x="0" width="16" resource="participants_isMod_rsc" 
+    		   height="16" showhandcursor="false">
+        <handler name="onclick">
+            <![CDATA[
+                //Nothing happens here
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="688" />
+    </miniIcons>
+    
+    <miniIcons name="_isModAddbutton" opacity="0.5" x="0" width="16" resource="participants_isMod_rsc" height="16">
+        <handler name="onclick">
+            <![CDATA[
+                //Apply for Moderation
+                canvas.thishib.applyForModeration.doCall();
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="685" />
+    </miniIcons>
+        
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/interviewuserlist/resources/webstart_play.png b/WebContent/src/modules/conference/interviewuserlist/resources/webstart_play.png
new file mode 100644
index 0000000..6d13683
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/resources/webstart_play.png
Binary files differ
diff --git a/WebContent/src/modules/conference/interviewuserlist/resources/webstart_stop.png b/WebContent/src/modules/conference/interviewuserlist/resources/webstart_stop.png
new file mode 100644
index 0000000..8389bf3
--- /dev/null
+++ b/WebContent/src/modules/conference/interviewuserlist/resources/webstart_stop.png
Binary files differ
diff --git a/WebContent/src/modules/conference/library.lzx b/WebContent/src/modules/conference/library.lzx
new file mode 100644
index 0000000..c4e238d
--- /dev/null
+++ b/WebContent/src/modules/conference/library.lzx
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!-- FamFam Icon Set -->
+    <resource name="resyncuser_rsc" src="resources/arrow_refresh_small.png" />
+
+	<!-- Derivative from FamFam Icon Set, author solomax -->
+	<resource name="typing_rsc">
+		<frame src="resources/base0.png" />
+		<frame src="resources/base1.png" />
+		<frame src="resources/base2.png" />
+		<frame src="resources/base3.png" />
+	</resource>
+    
+    <!-- APL author sebawagner -->
+    <resource name="speaking" src="resources/speaking.png" />
+    
+    <!-- APL author sebawagner -->
+    <resource name="lz_recorder_play" src="resources/webstart_play.png" />
+	
+    <include href="commonVideoViewContent.lzx"/>
+    <include href="commonVideoComponentAdapter.lzx"/>
+    <include href="screenSharingAdapter.lzx" />
+    <include href="typing.lzx" />
+
+	<include href="whiteboard/" /> 
+ 	
+   	<include href="tabcontent/" />
+   	<include href="popups/" />
+   	<include href="moderation/" />
+   	
+   	<include href="conference/" />
+   	
+    <!-- throws an Exception
+	<include href="browser/"/>  
+     -->
+    <include href="participants/" /> 
+    <include href="interviewuserlist/" /> 
+    
+    <include href="restricted/" />
+    <include href="browser/" />
+    <include href="testsetup/" />
+    <include href="sip/" />
+    
+    <include href="flexibleConferenceRoom/" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/moderation/applyForModeration.lzx b/WebContent/src/modules/conference/moderation/applyForModeration.lzx
new file mode 100644
index 0000000..1ad5de5
--- /dev/null
+++ b/WebContent/src/modules/conference/moderation/applyForModeration.lzx
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="userItem" extends="view" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" width="$once{ parent.width }" height="20">
+	<attribute name="streamid" value="0" type="string" />
+	<attribute name="username" value="" type="string" />
+	<attribute name="hasAnswered" value="false" type="boolean" />
+	<attribute name="answer" value="false" type="boolean" />
+	
+	<view name="inner" width="$once{ parent.width-2 }" height="$once{ parent.height-2 }" x="1" y="1"
+		onmouseover="this.setAttribute('bgcolor',canvas.getThemeColor('baseMousecolorizer'))"
+		onmouseout="this.setAttribute('bgcolor',0xFFFFFF)" bgcolor="0xFFFFFF">
+		<labelText text="$once{ parent.parent.streamid }" width="50" />
+		<labelText text="$once{ parent.parent.username }" x="50" width="300" />
+		<labelText name="answer" labelid="88" x="350" width="140" />
+	</view>
+</class>
+    
+<class name="applyForModeration"  extends="labelExplorerBox" labelid="81"
+	width="500" height="250" x="14" closable="true">
+	
+	<attribute name="applymessage" value="null" />
+	
+	<labelText labelid="93" y="30" x="2" />
+
+	<handler name="oninit">
+		canvas.currentModApply = this;
+		this.getClientListScope.doCall();
+		this.applymessage = new Array();
+		this.applymessage[0] = 'applyforMod';
+		this.checkRoomValues.doCall();
+	</handler>
+    
+    <!--
+        This is necessary as in some cases the user should not be allowed 
+        to apply for Moderation at all, this Function checks this
+     -->
+    
+    <netRemoteCallHib name="checkRoomValues" funcname="checkRoomValues" 
+                      remotecontext="$once{ canvas.thishib }" >   
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>
+        <handler name="ondata" args="value">
+            if (value) {
+                parent.sendMessageWithClient.doCall();
+            } else {
+                new lz.labelerrorPopup(canvas,{errorlabelid:641});
+                parent.close();
+            }
+        </handler>
+    </netRemoteCallHib>
+	
+	<method name="setUserAnswer" args="value">
+		<![CDATA[
+		if ($debug) Debug.write("*** setUserAnswer: ",value,this.userslist);
+
+		var t = this.userslist.userslist.userslist[value.client.streamid];
+		//Debug.write(" t: ",t);
+		t.hasAnswered = true;
+		var answer = value.message[1];
+		//Debug.write("answer: ",answer);
+		if (answer=='ok'){
+			t.inner.answer.setAttribute('text',canvas.getLabelName(94));
+			t.answer = true;
+		} else {
+			t.inner.answer.setAttribute('text',canvas.getLabelName(95));
+			t.answer = false;
+		}
+		]]>
+		this.checkForUpdates();
+	</method>
+	
+	<method name="rejectUser" args="value">
+		this.userslist.userslist.userslist[value.streamid].destroy();
+		this.checkForUpdates();
+	</method>
+	
+	<method name="checkForUpdates">
+		<![CDATA[
+		var b = true;
+		for (var i=0;i<this.userslist.userslist.userslist.subviews.length;i++){
+			//Debug.write("itemID : ",this.userslist.userslist.userslist.subviews[i]);
+			if (!this.userslist.userslist.userslist.subviews[i].answer){
+				b=false;
+				break;
+			}
+		}
+		if (b) this.applyButton.setAttribute('labelid',96);
+		this.applyButton.setAttribute('enabled',b);
+		]]>
+	</method>
+	
+	<netRemoteCallHib name="getClientListScope" funcname="getClientListScope" remotecontext="$once{ canvas.thishib }" >        
+       	<handler name="ondata" args="value">
+       		<![CDATA[
+           	//The onResult-Handler will be called be the rtmpconnection
+           	//Debug.write("INSTANCE getClientListScope : ",value);
+            for (var eg = 0; eg < value.length; ++eg) {
+				//Debug.write("value: ",eg,value,parent.userslist.userslist.userslist);
+				if (canvas.streamid!=value[eg].streamid) {
+				    new lz.userItem(parent.userslist.userslist.userslist,{name:value[eg].streamid,username:value[eg].username,streamid:value[eg].streamid});
+				}
+				//Debug.write("value: ",eg,value,parent.userslist.userslist.userslist);
+			}
+		    if (parent.userslist.userslist.userslist.subviews.length==0)
+				   parent.applyButton.setAttribute('enabled',true);
+           ]]>
+		</handler>   
+    </netRemoteCallHib> 
+     
+    <netRemoteCallHib name="sendMessageWithClient" funcname="sendMessageWithClient" remotecontext="$once{ canvas.thishib }" >  
+    	<netparam name="vars"><method name="getValue">return parent.parent.applymessage;</method></netparam>
+        <handler name="ondata" args="value">
+        	<![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            //Debug.write("sendMessageWithClient : ",value);
+
+            ]]>
+        </handler>   
+    </netRemoteCallHib>      
+	
+	<view name="userslist" y="60" x="4" height="140" clip="true" width="492" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >
+		<view name="userslist" y="1" x="1" height="138" clip="true" width="490" bgcolor="0xFFFFFF" >
+			<view name="userslist" layout="axis:y;spacing:2" width="$once{ parent.width }" />
+			<om_vscrollbar />
+		</view>
+	</view>	
+	
+    <simpleLabelButton name="applyButton" labelid="88" width="200" x="80" y="218" enabled="false">
+    	<handler name="onclick">
+    		//hib.setModerator.doCall();
+    		hib.addModerator.publicSIDOfNewModerator = canvas.publicSID;
+    		hib.addModerator.doCall();
+    		this.parent.close();
+    	</handler>
+    </simpleLabelButton>
+    
+    <simpleLabelButton labelid="83" width="200" x="290" y="218" 
+        onclick="this.parent.close();" />
+  
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/moderation/library.lzx b/WebContent/src/modules/conference/moderation/library.lzx
new file mode 100644
index 0000000..1affb90
--- /dev/null
+++ b/WebContent/src/modules/conference/moderation/library.lzx
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<resource name="applyformodicon_rsc" src="resources/user_add.png" />
+	
+	<!--  FamFam Icon Creative Commons -->
+	<resource name="start_screensharing_rsc" src="resources/monitor_go.png" />
+
+   	<include href="applyForModeration.lzx" />
+   	<include href="moderationPanel.lzx" />
+   	<include href="responseForModeration.lzx" />
+	
+</library>
diff --git a/WebContent/src/modules/conference/moderation/moderationPanel.lzx b/WebContent/src/modules/conference/moderation/moderationPanel.lzx
new file mode 100644
index 0000000..90abc25
--- /dev/null
+++ b/WebContent/src/modules/conference/moderation/moderationPanel.lzx
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="errorPopupUserInfo" extends="labelExplorerBox" labelid="204"
+    docking="true" resizeable="false" closable="true" 
+    width="224" x="300" height="230">
+
+    <attribute name="error" value="" type="string" />
+    <attribute name="user" value="null" />
+    
+    <handler name="oninit">
+        <![CDATA[
+            Debug.write(user);
+            var tString = this.error + "<BR/>"
+                    + user.username+"<BR/>" 
+                    + user.firstname + " " + user.lastname + "<BR/>"
+                    + parseDateToStringTime(user.roomEnter);
+            this.textInner._inner.setAttribute('text',tString);
+        ]]>
+    </handler>
+
+    <view name="textInner" y="24" width="218" height="200" x="2" clip="true">
+        <text name="_inner" fontsize="10" fontstyle="bold"
+            multiline="true" width="190" />
+        <om_vscrollbar />
+    </view>
+
+</class>
+
+<class name="moderationPanel" extends="view" layout="axis:x;spacing:2">
+    
+    <attribute name="recordingsName" value="" type="string" />
+    <attribute name="initial" value="true" type="boolean" />
+    <attribute name="recordingUser" value="null" />
+    <attribute name="publishingObj" value="null" />
+    
+    <attribute name="allowUserQuestions" value="true" type="boolean" />
+    <attribute name="roomName" value="" type="string" />
+    
+    <handler name="oninit">
+        <![CDATA[
+	        canvas._mymod = this;
+	        if (this.allowUserQuestions != null && !this.allowUserQuestions) {
+	            this.mod_btn.destroy();
+	        }
+	        this._roomName.setAttribute("text",this.roomName);
+	        if ($debug) Debug.write("moderationPanel.init: ", !canvas.currentRoomObj.hideScreenSharing && (canvas.ismoderator || canvas.becomemoderator || canvas.isAllowedToScreenShare), canvas.currentRoomObj);
+        ]]>
+    </handler>
+    
+    <method name="setMessage">
+        <![CDATA[
+            if ($debug) Debug.write("setMessage: ",this.recordingUser);
+            var tString = "";
+            if (this.recordingUser!=null){
+                tString += canvas.getLabelName(419)
+               		+ " " + this.recordingUser.username
+               		+ " " + this.recordingUser.firstname
+               		+ " " + this.recordingUser.lastname
+               		+ " " + parseDateToStringTime(this.recordingUser.roomEnter) + ";";
+            }
+			if (this.publishingObj != null) {
+            	tString += canvas.getLabelName(1504)
+					+ " " + this.publishingObj.user.username
+					+ " " + this.publishingObj.user.firstname
+					+ " " + this.publishingObj.user.lastname
+					+ " " + this.publishingObj.url + ";";
+            }
+			this._inner.setAttribute('text', tString);
+        ]]>
+    </method>   
+    
+	<method name="checkForApplyScreen" args="record">
+		lz.Browser.loadURL(canvas.getScreenSharingUrl(), '_blank');
+	</method>  
+    
+    <labelText name="_roomName" fgcolor="0xFFFFFF" y="4" fontstyle="bold" fontsize="12" /> 
+    
+    <miniIconsNew name="mod_btn" y="6" innerResource="applyformodicon_rsc" width="16" height="16"
+               visible="${ (canvas.ismoderator) ? false : true  }" showhandcursor="true">
+        <handler name="onclick">
+            //We do only ask the Moderator(s) to change Moderation
+            //new lz.applyForModeration(canvas.main_content._content.inner);
+            canvas.thishib.applyForModeration.doCall();
+        </handler>  
+        <labelTooltip inittwice="true" labelid="906" />      
+    </miniIconsNew>
+    
+    <miniIconsNew name="_doShare" y="6" innerResource="start_screensharing_rsc" width="16" height="16" showhandcursor="true"
+               visible="${ !canvas.currentRoomObj.hideScreenSharing &amp;&amp; (canvas.ismoderator || canvas.becomemoderator || canvas.isAllowedToScreenShare) }" >
+        <handler name="onclick">
+            this.parent.checkForApplyScreen("no");
+        </handler>
+        <labelTooltip labelid="239" />
+    </miniIconsNew>
+    
+    <labelText name="_inner" fgcolor="0xFF3300" y="4" />
+    
+    <view width="2" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/moderation/resources/monitor_go.png b/WebContent/src/modules/conference/moderation/resources/monitor_go.png
new file mode 100644
index 0000000..8af3eda
--- /dev/null
+++ b/WebContent/src/modules/conference/moderation/resources/monitor_go.png
Binary files differ
diff --git a/WebContent/src/modules/conference/moderation/resources/user_add.png b/WebContent/src/modules/conference/moderation/resources/user_add.png
new file mode 100644
index 0000000..deae99b
--- /dev/null
+++ b/WebContent/src/modules/conference/moderation/resources/user_add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/moderation/responseForModeration.lzx b/WebContent/src/modules/conference/moderation/responseForModeration.lzx
new file mode 100644
index 0000000..183cdf7
--- /dev/null
+++ b/WebContent/src/modules/conference/moderation/responseForModeration.lzx
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="responseForModeration"  extends="labelExplorerBox" labelid="81"
+	width="500" height="250" x="14" closable="true">
+	
+	<attribute name="applymessage" value="null" />
+    <!-- Time till automatically apply for modaration will be accepted -->
+	<attribute name="clientId" value="0" type="string" />
+	
+	<attribute name="userobject" value="null" />
+    
+    <attribute name="userautoTimerDelegate" value="null" />
+    <attribute name="userautoTimerCounter" value="31" type="number" />
+	
+	<handler name="oninit">
+		<![CDATA[
+            var dtString = '';
+            dtString += 'Name: '+userobject['username']+'<BR />';
+            dtString += 'Host: '+userobject['userip']+'<BR />';
+            dtString += 'Time: '+userobject['connectedSince']+'<BR />';
+            
+            this.userToAccept.setAttribute('text',dtString);
+            
+            this.userautoTimerDelegate = new LzDelegate( this, "autoResponse" );
+            lz.Timer.addTimer( this.userautoTimerDelegate, 1000 );            
+		]]>
+	</handler>
+
+    <method name="autoResponse" args="itemObj">
+        this.userautoTimerCounter--;
+        if (this.userautoTimerCounter!=0){
+            this._applyBtn.setAttribute('text',canvas.getLabelName(this._applyBtn.labelid)+" "+this.userautoTimerCounter);
+            lz.Timer.addTimer( this.userautoTimerDelegate, 1000 );
+        } else {
+            this._applyBtn.onclick.sendEvent();
+        }
+    </method>   
+	
+	<labelText labelid="89" y="20" x="2" />
+	
+	<labelText name="userToAccept" y="50" multiline="true" width="200" resize="false" />
+    
+    <simpleLabelButton labelid="90" width="200" x="80" y="218" name="_applyBtn" >
+    	<handler name="onclick">
+			parent.applymessage = new Array();
+			parent.applymessage[0] = 'applyModAnswer';
+			parent.applymessage[1] = 'ok';   
+			parent.sendMessageWithClientById.doCall();		
+    	</handler>
+    </simpleLabelButton>
+    
+    <simpleLabelButton labelid="91" width="200" x="290" y="218" >
+    	<handler name="onclick">
+			parent.applymessage = new Array();
+			parent.applymessage[0] = 'applyModAnswer';
+			parent.applymessage[1] = 'no'; 
+			parent.sendMessageWithClientById.doCall();	
+    	</handler>
+    </simpleLabelButton>
+     
+    <netRemoteCallHib name="sendMessageWithClientById" funcname="sendMessageWithClientById" remotecontext="$once{ canvas.thishib }" >  
+    	<netparam><method name="getValue">return parent.parent.applymessage;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.clientId;</method></netparam>
+        <handler name="ondata" args="value">
+        	<![CDATA[
+	            //The onResult-Handler will be called be the rtmpconnection
+	            //Debug.write("sendMessageWithClientById : ",value);
+				this.parent.close();
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/participants/library.lzx b/WebContent/src/modules/conference/participants/library.lzx
new file mode 100644
index 0000000..5457299
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/library.lzx
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <!--  FamFam Icon Creative Commons -->
+    <resource name="right_isactive_rsc" src="resources/accept.png" />
+    
+    <!--  FamFam Icon Creative Commons -->
+    <resource name="right_notactive_rsc" src="resources/delete.png" />
+    
+    <!--  FamFam Icon Creative Commons -->
+    <resource name="participants_isMod_rsc" src="resources/user_add.png" />
+    <!--  FamFam Icon Creative Commons -->
+    <resource name="participants_allow_drawing_rsc" src="resources/pencil_add.png" />
+    
+    <!--  FamFam Icon Creative Commons -->
+    <resource name="participants_deny_drawing_rsc" src="resources/pencil_delete.png" />
+    
+    <!--  APL author sebawagner -->
+    <resource name="participants_exclusive_audio_rsc" src="resources/micro_small.png" />
+    
+    <include href="participantList.lzx" />
+    <include href="participantListItem.lzx" />
+    <include href="participants.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/participants/participantList.lzx b/WebContent/src/modules/conference/participants/participantList.lzx
new file mode 100644
index 0000000..a4084ba
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/participantList.lzx
@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="innerlistViewparticipantsTable" extends="view" width="258" >
+    <simplelayout name="_layout" axis="y" spacing="0" />
+</class>
+    
+<class name="participantsTable" extends="view" height="${ parent.height-20 }" 
+    	bgcolor="0xFFFFFF" x="2" y="6" clip="true" width="$once{ parent.width-4 }" >
+        <innerlistViewparticipantsTable name="innerList" />
+    <om_vscrollbar />
+</class>
+
+<class name="participantList" extends="view"  width="$once{ parent.width }" height="${ parent.height-22 }" 
+       bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" y="22">
+    <!-- clip="true" -->
+    
+    <attribute name="sortType" value="alphabetical" type="string" />    
+    
+    <view width="$once{ parent.width-2 }" height="${ parent.height-2 }" 
+        x="1" y="1" bgcolor="0xFFFFFF" />
+        
+    <handler name="oninit">
+        <![CDATA[
+            var items = this._table.innerList.subnodes;
+            canvas.videoComp_lc.lc_setSoundMuted = function(publicSID,isMuted) {
+                if ($debug) Debug.write("lc_setSoundMuted: publicSID, isMuted",publicSID, isMuted);
+
+                for (var i=1; i<items.length; i++) {
+                    var listItem = items[i];
+                    if (listItem.refObj.publicSID == publicSID) {
+                        var muteView = listItem._miniIcons._mute;
+                        if (isMuted) {
+                            muteView.setAttribute('frame', 2);
+                            muteView._tip.setAttribute('labelid', 1075);
+                        } else {
+                            muteView.setAttribute('frame', 1);
+                            muteView._tip.setAttribute('labelid', 1074);
+                        }
+                        break;
+                    }
+                }
+            };
+        ]]>
+    </handler>
+
+    <method name="addItem" args="object">
+        <![CDATA[
+            if ($debug) Debug.write("participantList addItem: ",object,object.publicSID);
+            
+            for (var i=0;i<this._table.innerList.subviews.length;i++) {
+                if (this._table.innerList.subviews[i].refObj.publicSID == object.publicSID) {
+                    //if ($debug) Debug.warn("Already on List, do not add twice");
+                    return;
+                }
+            }
+            
+            var lastname = object.lastname == null ? "" : object.lastname;
+            
+            if ($debug) Debug.write("object.isSuperModerator ",object.isSuperModerator);
+            
+            if (object.isSuperModerator) {
+                lastname += " *";
+            }
+            
+            new lz.participantListItem(this._table.innerList,{
+                    user_id:object.user_id,
+                    isSuperModerator:object.isSuperModerator,
+                    firstname:object.firstname,
+                    lastname:lastname,
+                    width:this.width-17,
+                    refObj:object,
+                    connectedSince:object.connectedSince,
+                    isMod:object.isMod,
+                    streamid:object.streamid,
+                    username:object.username,
+                    formatedDate:object.formatedDate
+                });
+            
+            this.sortUserList();
+        ]]>
+    </method>
+    
+    <method name="sortUserList">
+        <![CDATA[ 
+        
+            if (this.sortType == "alphabetical") {
+                function sortByName(a,b) {
+                   
+                    if(a.firstname.toLowerCase() < b.firstname.toLowerCase()) return -1;
+                    else if(a.firstname.toLowerCase() > b.firstname.toLowerCase()) return 1;
+                    else return 0;
+                
+                }
+            
+                this._table.innerList.subviews.sort(sortByStreamId);
+                this._table.innerList._layout.subviews.sort(sortByStreamId);
+            } else {
+                function sortByStreamId(a,b) {
+                   
+                    if(Number(a.streamid) == Number(b.streamid)) return 0;
+                    else if(Number(a.streamid) > Number(b.streamid)) return 1;
+                    else return -1;
+                
+                }
+            
+                this._table.innerList.subviews.sort(sortByStreamId);
+                this._table.innerList._layout.subviews.sort(sortByStreamId);
+            }
+            
+            this._table.innerList._layout.update();  
+        ]]>
+    </method>    
+    
+    <method name="clearList">
+        this._table.destroy();
+        new lz.participantsTable(this,{name:'_table'});
+    </method>
+    
+    <method name="disconnectclient" args="publicSID">
+        <![CDATA[
+            for (var i=0;i<this._table.innerList.subviews.length;i++){
+                if (this._table.innerList.subviews[i].refObj.publicSID==publicSID){
+                    var item = this._table.innerList.subviews[i];
+                    item.destroy();
+                    break;
+                }
+            }
+        ]]>
+    </method>
+    
+    <!--- get a Objects List Item
+        @param string publicSID publicSID
+     -->
+	<method name="getUserListItemByPublicSID" args="publicSID">
+	<![CDATA[
+		var v = null;
+		var lst = this._table.innerList;
+		for (var i = 0; i < lst.subviews.length; i++) {
+			if (lst.subviews[i].refObj.publicSID == publicSID) {
+				v = lst.subviews[i];
+				break;
+			}
+		}
+		return v;
+	]]>
+	</method>
+    
+    <participantsTable name="_table" y="20" /> 
+
+    <view name="_miniIcons" x="112" y="0" height="18">
+        
+        <view width="1" height="${ parent.parent.height }" x="0"
+            bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />
+        <view name="_icon_mod" x="2" y="3" resource="participants_isMod_rsc" onclick="" showhandcursor="false">
+            <labelTooltip labelid="608" />
+        </view>
+        
+        <view width="1" height="${ parent.parent.height }" x="20"
+            bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />
+        <view name="_icon_draw" x="22" y="3" resource="participants_allow_drawing_rsc" onclick="" showhandcursor="false">
+            <labelTooltip labelid="609" />
+        </view>
+        
+        <view width="1" height="${ parent.parent.height }" x="40"
+            bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />
+        <view name="_icon_share" x="42" y="3" resource="screen_allow_rsc" onclick="" showhandcursor="false">
+            <labelTooltip labelid="1073" />
+        </view>
+        
+        <view width="1" height="${ parent.parent.height }" x="60"
+            bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />
+        <view name="_icon_remote" x="62" y="3" resource="remote_allow_rsc" onclick="" showhandcursor="false">
+            <labelTooltip labelid="1084" />
+        </view>
+    
+        <view width="1" height="${ parent.parent.height }" x="80"
+            bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />
+        <view name="_icon_exclusive_audio" x="82" y="3" resource="participants_exclusive_audio_rsc" onclick="" showhandcursor="false">
+            <labelTooltip labelid="1423" />
+        </view>
+        
+        <view width="1" height="${ parent.parent.height }" x="100"
+            bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />
+        <view name="_icon_av_allow" x="102" y="3" resource="av_allow_rsc" onclick="" showhandcursor="false">
+            <labelTooltip labelid="610" />
+        </view>
+        
+        <view width="1" height="${ parent.parent.height }" x="142"
+            bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />
+    </view>
+    
+    <view name="headerDivisionLine" width="${ parent.width }" 
+          bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" height="1" y="20" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/participants/participantListItem.lzx b/WebContent/src/modules/conference/participants/participantListItem.lzx
new file mode 100644
index 0000000..cc2d74c
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/participantListItem.lzx
@@ -0,0 +1,637 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<!-- 
+    The Width of each item is set in the participantList-Class
+ -->
+<class name="participantListItem" extends="view" bgcolor="0xDADADA" height="40" 
+       showhandcursor="false">
+    
+    <attribute name="connectedSince" value="" type="string" />
+    <attribute name="isMod" value="" type="string" />
+    <attribute name="streamid" value="" type="string" />
+    <attribute name="username" value="" type="string" />
+    <attribute name="userroom" value="" type="string" />
+    <attribute name="formatedDate" value="" type="string" />
+    <attribute name="firstname" value="" type="string" />
+    <attribute name="lastname" value="" type="string" />
+    <attribute name="user_id" value="0" type="number" />
+    <attribute name="isSuperModerator" value="false" type="boolean"/>
+    <attribute name="refObj" value="null" />
+    
+    <handler name="oninit">
+        <![CDATA[
+            //this._userpic.setAttribute('src',downloadurl); 
+            //This is a workaround cause in LPS-4.2.x immediatelly loading does not work
+            lz.Timer.addTimer( new LzDelegate( this, "fadeText" ), 1000 );
+                    
+            if (canvas.publicSID == this.refObj.publicSID) {
+                this._firstName.setAttribute("fontstyle","bold");
+                this._lastName.setAttribute("fontstyle","bold");
+            }
+            
+            this.updateIcons();
+        ]]>
+    </handler>
+    
+    <method name="update" args="obj">
+    	setAttribute('firstname', obj.firstname);
+    	setAttribute('lastname', obj.lastname);
+    	refObj = obj;
+    </method>
+     
+    <method name="fadeText" args="ignore=null"> 
+        <![CDATA[
+        	if ($debug) Debug.write("fadeText :1: ",this.refObj);
+        	if ($debug) Debug.write("fadeText :2: ",this.refObj.picture_uri);
+            this._userpic.setAttribute('src', canvas.getPictureUrl(this.refObj.picture_uri, '&moduleName=chat&remoteUserid='+this.user_id)); 
+        ]]>          
+    </method>
+    
+    <handler name="onismoderator" reference="canvas" args="m">
+        if ($debug) Debug.write("###### ismoderator ",m);
+        <![CDATA[
+            this.isMod = canvas.getIsModeratorByPublicSID(this.refObj.publicSID);
+            this.updateIcons();
+        ]]>
+    </handler>
+    
+    <handler name="ondrawAllowStatus" reference="canvas" args="drawObject">
+        <![CDATA[
+            if (this.refObj.publicSID == drawObject.publicSID) {
+                this.refObj.canDraw = drawObject.canDraw;
+                this.refObj.canShare = drawObject.canShare;
+                this.refObj.canRemote = drawObject.canRemote;
+                this.updateIcons();
+            }
+        ]]>
+    </handler>
+
+    <handler name="onexclusiveAudioAllowStatus" reference="canvas" args="rclObject">
+        <![CDATA[
+            if (this.refObj.publicSID == rclObject.publicSID) {
+                this.refObj.canGiveAudio = rclObject.canGiveAudio;
+                this.updateIcons();
+            }
+        ]]>
+    </handler>
+    
+    <handler name="onmicMutedStatusChangedItem" reference="canvas" args="roomClientObj">
+    	<![CDATA[
+    	    if ($debug) Debug.write("onmicMutedStatusChangedItem :1: ",roomClientObj.publicSID);
+            if (this.refObj.publicSID == roomClientObj.publicSID) {
+            	if ($debug) Debug.write("onmicMutedStatusChangedItem :2: ",roomClientObj.micMuted);
+                this.refObj.micMuted = roomClientObj.micMuted;
+                this.updateIcons();
+            }
+        ]]>
+    </handler>
+
+    <handler name="onMute" reference="canvas.thishib.switchMicMuted" args="event">
+        <![CDATA[
+            if ($debug) Debug.write("onMute ", event.publicSID, event.mute);
+            if(this.refObj.publicSID == event.publicSID) {
+                this.refObj.micMuted = event.mute;
+                this.updateIcons();
+            }
+        ]]>
+    </handler>
+    
+    <!--
+        Set actions to update the User-Rights and Information what he can do
+     -->
+    <method name="updateIcons">
+        <![CDATA[
+        
+            if ($debug) Debug.write("updateByMod,",this.isMod,canvas.streamid);
+        
+            //If this is one Mod he can also draw on the Whitboard
+            if (this.isMod) {
+                
+                
+                this._miniIcons._isMod.setAttribute("visibility","visible");
+                this._miniIcons._isModAddbutton.setAttribute("visibility","hidden");
+                this._miniIcons._canDraw.setAttribute("visibility","visible");
+                //the moderator can never remove the right to draw on the whiteboard for himself
+                this._miniIcons._canDraw.setAttribute("showhandcursor",false);
+                this._miniIcons._canDraw._text.setAttribute("text","");
+                this._miniIcons._canDrawModerator.setAttribute("visibility","hidden");
+                
+                this._miniIcons._allowShare.setAttribute("visibility","visible");
+                this._miniIcons._allowShare.setAttribute("showhandcursor",false);
+                this._miniIcons._allowShare._text.setAttribute("text","");
+                this._miniIcons._denyShare.setAttribute("visibility","hidden");
+                
+                this._miniIcons._allowRemote.setAttribute("visibility","visible");
+                this._miniIcons._allowRemote.setAttribute("showhandcursor",false);
+                this._miniIcons._allowRemote._text.setAttribute("text","");
+                this._miniIcons._denyRemote.setAttribute("visibility","hidden");
+
+                this._miniIcons._allowExclusiveAudio.setAttribute("visibility","visible");
+                this._miniIcons._allowExclusiveAudio.setAttribute("showhandcursor",false);
+                this._miniIcons._allowExclusiveAudio._text.setAttribute("text","");
+                this._miniIcons._denyExclusiveAudio.setAttribute("visibility","hidden");
+                
+                if (canvas.ismoderator) {
+                	this._x._kickUser.setAttribute("visibility","visible");
+                    if (canvas.ismoderator && canvas.publicSID != this.refObj.publicSID) {
+                        this._miniIcons._isMod.setAttribute("showhandcursor",true);
+                        this._miniIcons._isMod._text.setAttribute("text",canvas.getLabelName(675));
+                    } else {
+                        this._miniIcons._isMod._text.setAttribute("text","");
+                        this._miniIcons._isMod.setAttribute("showhandcursor",false);
+                    }
+                } else {
+                	this._x._kickUser.setAttribute("visibility","hidden");
+                    this._miniIcons._isMod._text.setAttribute("text","");
+                    this._miniIcons._isMod.setAttribute("showhandcursor",false);
+                }
+                
+            } else {
+                this._miniIcons._isMod.setAttribute("visibility","hidden");
+                    
+                //if this User is the Moderator he can grant access to whiteboard to anybody
+                if (canvas.ismoderator) {
+                	this._x._kickUser.setAttribute("visibility","visible");
+                    this._miniIcons._isModAddbutton.setAttribute("visibility","visible");
+                    
+                    
+                    this._miniIcons._canDraw._text.setAttribute("text",canvas.getLabelName(612));
+                    if (this.refObj.canDraw) {
+                        //Only in THIS case you can remove the Draw-to-whiteboard right 
+                        this._miniIcons._canDraw.setAttribute("visibility","visible");
+                        this._miniIcons._canDraw.setAttribute("showhandcursor",true);
+                        this._miniIcons._canDrawModerator.setAttribute("visibility","hidden");
+                    } else {
+                        this._miniIcons._canDraw.setAttribute("visibility","hidden");
+                        this._miniIcons._canDraw.setAttribute("showhandcursor",false);
+                        this._miniIcons._canDraw._text.setAttribute("text","");
+                        this._miniIcons._canDrawModerator.setAttribute("visibility","visible");
+                    }
+                    
+                  	this._miniIcons._allowShare._text.setAttribute("text",canvas.getLabelName(1068));
+                    if (this.refObj.canShare) {
+                    	this._miniIcons._allowShare.setAttribute("visibility","visible");
+                        this._miniIcons._allowShare.setAttribute("showhandcursor",true);
+                        this._miniIcons._denyShare.setAttribute("visibility","hidden");
+                    } else {
+                    	this._miniIcons._allowShare.setAttribute("visibility","hidden");
+                        this._miniIcons._allowShare.setAttribute("showhandcursor",false);
+                        this._miniIcons._denyShare.setAttribute("visibility","visible");
+                    }
+                    
+                    this._miniIcons._allowRemote._text.setAttribute("text",canvas.getLabelName(1079));
+                    if (this.refObj.canRemote) {
+                    	this._miniIcons._allowRemote.setAttribute("visibility","visible");
+                        this._miniIcons._allowRemote.setAttribute("showhandcursor",true);
+                        this._miniIcons._denyRemote.setAttribute("visibility","hidden");
+                    } else {
+                    	this._miniIcons._allowRemote.setAttribute("visibility","hidden");
+                        this._miniIcons._allowRemote.setAttribute("showhandcursor",false);
+                        this._miniIcons._denyRemote.setAttribute("visibility","visible");
+                    }
+
+					this._miniIcons._allowExclusiveAudio._text.setAttribute("text",canvas.getLabelName(1425));
+                    if (this.refObj.canGiveAudio) {
+                    	this._miniIcons._allowExclusiveAudio.setAttribute("visibility","visible");
+                        this._miniIcons._allowExclusiveAudio.setAttribute("showhandcursor",true);
+                        this._miniIcons._denyExclusiveAudio.setAttribute("visibility","hidden");
+                    } else {
+                    	this._miniIcons._allowExclusiveAudio.setAttribute("visibility","hidden");
+                        this._miniIcons._allowExclusiveAudio.setAttribute("showhandcursor",false);
+                        this._miniIcons._denyExclusiveAudio.setAttribute("visibility","visible");
+                    }
+                    
+                } else {
+                	this._x._kickUser.setAttribute("visibility","hidden");
+                    this._miniIcons._isModAddbutton.setAttribute("visibility","hidden");
+                    
+                    if (this.refObj.canDraw) {
+                        this._miniIcons._canDraw.setAttribute("visibility","visible");
+                    } else {
+                        this._miniIcons._canDraw.setAttribute("visibility","hidden");
+                    }
+                    
+                    if (this.refObj.canShare) {
+                        this._miniIcons._allowShare.setAttribute("visibility","visible");
+                    } else {
+                        this._miniIcons._allowShare.setAttribute("visibility","hidden");
+                    }
+                    
+                    if (this.refObj.canRemote) {
+                        this._miniIcons._allowRemote.setAttribute("visibility","visible");
+                    } else {
+                        this._miniIcons._allowRemote.setAttribute("visibility","hidden");
+                    }
+
+                    if (this.refObj.canGiveAudio) {
+                    	this._miniIcons._allowExclusiveAudio.setAttribute("visibility","visible");
+                    } else {
+                    	this._miniIcons._allowExclusiveAudio.setAttribute("visibility","hidden");
+                    }
+                    
+                    //No Update action available
+                    this._miniIcons._canDrawModerator.setAttribute("visibility","hidden");
+                    this._miniIcons._denyShare.setAttribute("visibility","hidden");
+                    this._miniIcons._denyRemote.setAttribute("visibility","hidden");
+                    this._miniIcons._denyExclusiveAudio.setAttribute("visibility","hidden");
+                    this._miniIcons._canDraw.setAttribute("showhandcursor",false);
+                    this._miniIcons._canDraw._text.setAttribute("text","");
+                    this._miniIcons._allowRemote._text.setAttribute("text","");
+                    this._miniIcons._allowExclusiveAudio._text.setAttribute("text","");
+                    this._miniIcons._allowShare._text.setAttribute("text","");
+                    
+                }
+                    
+            }
+            
+            if ($debug) Debug.write("onmicMutedStatusChangedItem :3: ",this.refObj.publicSID,this.refObj.micMuted);
+            
+            if (this.refObj.micMuted) {
+            	this._x._mute._text.setAttribute("labelid",1408);
+            	this._x._mute.setAttribute("frame",2);
+            } else {
+            	this._x._mute._text.setAttribute("labelid",1407);
+            	this._x._mute.setAttribute("frame",1);
+            }
+            
+            //this Icon is only available in case its the current User 
+            if (canvas.publicSID == this.refObj.publicSID) {
+                //if ($debug) Debug.write("IS SELF !!!!!!");
+                this._miniIcons._restartDevice.setAttribute("visibility","visible");
+            } else {
+                this._miniIcons._restartDevice.setAttribute("visibility","hidden");
+            }
+        ]]>
+    </method>
+    
+    <!--
+    public Boolean setCanDraw(String SID, String publicSID, boolean canDraw)
+     -->
+     
+    <netRemoteCallHib name="setCanDraw" funcname="whiteboardservice.setCanDraw"
+                       remotecontext="$once{ canvas.thishib }">
+        <netparam><method name="getValue"> return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.refObj.publicSID;</method></netparam>
+        <netparam><method name="getValue">return !parent.parent.refObj.canDraw;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            //Debug.write("whiteboardservice.setCanDraw : ",value);
+            
+            ]]>
+        </handler>   
+    </netRemoteCallHib>  
+            
+    <netRemoteCallHib name="setCanShare" funcname="whiteboardservice.setCanShare"
+                       remotecontext="$once{ canvas.thishib }">
+        <netparam><method name="getValue"> return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.refObj.publicSID;</method></netparam>
+        <netparam><method name="getValue">return !parent.parent.refObj.canShare;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            //Debug.write("whiteboardservice.setCanShare : ",value);
+            
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+    
+    <netRemoteCallHib name="setCanRemote" funcname="whiteboardservice.setCanRemote"
+                   remotecontext="$once{ canvas.thishib }">
+        <attribute name="publicSID" value="" type="string" />
+        <attribute name="canRemote" value="true" type="boolean" />
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.refObj.publicSID;</method></netparam>
+        <netparam><method name="getValue">return !parent.parent.refObj.canRemote;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("whiteboardservice.setCanRemote : ",value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib>
+
+    <netRemoteCallHib name="setCanGiveAudio" funcname="whiteboardservice.setCanGiveAudio"
+                   remotecontext="$once{ canvas.thishib }">
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.refObj.publicSID;</method></netparam>
+        <netparam><method name="getValue">return !parent.parent.refObj.canGiveAudio;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("setCanGiveAudio : ",value);
+            ]]>
+        </handler>
+    </netRemoteCallHib>
+            
+    <handler name="onmouseover">
+        this.setAttribute('bgcolor',canvas.getThemeColor('baseMousecolorizer'));
+    </handler>
+    
+    <handler name="onmouseout">
+        this.setAttribute('bgcolor',0xDADADA);
+    </handler>
+    
+    <image name="_userpic" stretches="both" x="1">
+        <handler name="onload">
+            <![CDATA[
+                if (this.height > 38) {
+                    //If bigger then containter then scale it
+                    var width = this.width/(this.height/38);
+                    this.setAttribute('height',38);
+                    this.setAttribute('width',width);
+                }
+                if (this.width > 38) {
+                    //If bigger then containter then scale it
+                    var height = this.height/(this.width/38);
+                    this.setAttribute('height',height);
+                    this.setAttribute('width',38);
+                }
+            ]]>
+        </handler>
+    </image>
+    
+    <labelText name="_firstName" fontsize="10" x="40" text="${ parent.firstname == null ? '' : parent.firstname }" />
+    <labelText name="_lastName" fontsize="10" x="40" y="20" text="${ parent.lastname == null ? '' : parent.lastname }" />
+    
+	<typingIcon name="_user_typing" x="132" y="2" width="30" height="16" visible="false"/>
+	<method name="userTyping" args="v">
+		_user_typing.setAttribute("visible", v);
+	</method>
+	    
+	<miniIcons name="_start_private_chat_rsc" x="114" y = "2" width="16" height="16"
+		resource="start_private_chat_rsc" showhandcursor="true"
+		visible="${ (canvas.currentRoomObj.hideChat == null || !canvas.currentRoomObj.hideChat) &amp;&amp; parent.refObj.publicSID != canvas.publicSID }">
+		
+		<handler name="onclick">
+			var refObj = parent.refObj;
+			if ($debug) Debug.write("Start Private Chat: ", refObj);
+			if (refObj.publicSID == canvas.publicSID) {
+				new lz.labelerrorPopup(canvas.main_content._content.inner
+					, {errorlabelid:1495});
+				return;
+			}
+			canvas._currentChatPanel.addChat(refObj);
+		</handler>
+		<labelTooltip labelid="1493" />
+	</miniIcons>
+    
+    <view name="_x" x="132" y="2">
+	     
+	    <miniIcons name="_mute" x="82" width="16" height="16" resource="mute_micro_btn_rsc" showhandcursor="true" >
+            <handler name="onclick">
+                <![CDATA[
+                    canvas._videocontainer._videoviewcontent.muteSound(parent.parent.refObj.publicSID, !parent.parent.refObj.micMuted);
+                ]]>
+            </handler>
+            <labelTooltip name="_text" text="" labelid="1407" />
+        </miniIcons>  
+        
+	    <miniIcons name="_kickUser" width="16" height="16" x="100"
+	               resource="kick_user_rsc" showhandcursor="true">
+	        <handler name="onclick">
+	        	
+	        	if (parent.parent.refObj.publicSID == canvas.publicSID) {
+	                new lz.labelerrorPopup(canvas.main_content._content.inner,{
+	                            errorlabelid:1214
+	                        });
+	                return;
+	            }
+	                
+	        	if (parent.isSuperModerator) {
+	                new lz.labelerrorPopup(canvas.main_content._content.inner,{errorlabelid:1217});
+	                return;
+	            }
+	        	
+	            if ($debug) Debug.write("USER Kick: ",parent.parent.refObj.publicSID);
+	            new lz.confirmationSingle(canvas.main_content._content.inner,{
+	                                           labelid:1216,labeliderror:1215,
+	                                           refObj:this,showCheckBox:false});
+	            
+	        </handler>
+	        
+	        <method name="sendConfirmation" args="yesno" >
+	            this.kickUserByPublicSID.publicSID = parent.parent.refObj.publicSID;
+	            this.kickUserByPublicSID.doCall();
+	        </method>
+	        
+	        <netRemoteCallHib name="kickUserByPublicSID" funcname="userservice.kickUserByPublicSID" 
+	                          remotecontext="$once{ canvas.thishib }" >    
+	            <attribute name="publicSID" value="" type="string" />  
+	            <netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+	            <netparam><method name="getValue"> return parent.publicSID; </method></netparam>
+	            <handler name="ondata" args="value">
+	                if ($debug) Debug.write("kickUserByPublicSID: ",value);
+	                //this.parent.destroy();
+	            </handler>
+	        </netRemoteCallHib> 
+	        
+	        <labelTooltip labelid="1213" />
+	    </miniIcons>   
+    </view>
+    
+    <view name="_miniIcons" x="113" y="22" height="18" >
+        
+        <miniIcons name="_isMod" x="0" width="16" resource="right_isactive_rsc" 
+                   height="16" showhandcursor="false">
+            <handler name="onclick">
+                <![CDATA[
+                
+                    if (parent.parent.isSuperModerator) {
+                        new lz.labelerrorPopup(canvas.main_content._content.inner,{errorlabelid:838});
+                        return;
+                    }
+                
+                    //if the label is set and this is a Moderator then this user should
+                    //allow the click event => the click event will trigger
+                    //this user away from beeing able to draw on the whiteboard
+                    if (canvas.ismoderator && this._text.text.length != 0) {
+                        //Do it 
+                        if ($debug) Debug.write("Do Remove It");
+                        hib.removeModerator.publicSIDOfNewModerator = parent.parent.refObj.publicSID;
+                        hib.removeModerator.doCall();
+                        //parent.parent.setCanDraw.doCall();
+                    }
+                ]]>
+            </handler>
+            <labelTooltip name="_text" text="" />
+        </miniIcons>
+        
+        <miniIcons name="_isModAddbutton" opacity="0.5" x="0" width="16" resource="right_notactive_rsc" 
+                   height="16" showhandcursor="true">
+            <handler name="onclick">
+                <![CDATA[
+                    //if the label is set and this is a Moderator then this user should
+                    //allow the click event => the click event will trigger
+                    //this user away from beeing able to draw on the whiteboard
+                    if (canvas.ismoderator && this._text.text.length != 0) {
+                        //Do it 
+                        if ($debug) Debug.write("Do Add It");
+                        hib.addModerator.publicSIDOfNewModerator = parent.parent.refObj.publicSID;
+                        hib.addModerator.doCall();
+                        //parent.parent.setCanDraw.doCall();
+                    }
+                ]]>
+            </handler>
+            <labelTooltip name="_text" labelid="676" />
+        </miniIcons>
+            
+        <miniIcons name="_canDraw" x="20" width="16" resource="right_isactive_rsc" 
+                   height="16" showhandcursor="false" >
+            <handler name="onclick">
+                <![CDATA[
+                    //if the label is set and this is a Moderator then this user should
+                    //allow the click event => the click event will trigger
+                    //this user away from beeing able to draw on the whiteboard
+                    if (canvas.ismoderator && this._text.text.length != 0) {
+                        //Do it 
+                        if ($debug) Debug.write("Do add draw to it");
+                        parent.parent.setCanDraw.doCall();
+                    }
+                ]]>
+            </handler>
+            <labelTooltip name="_text" text="" />
+        </miniIcons>
+        
+        <miniIcons name="_canDrawModerator" x="20" width="16" opacity="0.5"
+                   resource="right_notactive_rsc" height="16" showhandcursor="true">
+            <handler name="onclick">
+                //Do it 
+                if ($debug) Debug.write("Do it");
+                parent.parent.setCanDraw.doCall();
+            </handler>
+            <labelTooltip labelid="611" />
+        </miniIcons>
+        
+        <miniIcons name="_allowShare" x="40" width="16" resource="right_isactive_rsc" 
+                   height="16" showhandcursor="false" >
+            <handler name="onclick">
+                <![CDATA[
+                    //if the label is set and this is a Moderator then this user should
+                    //allow the click event => the click event will trigger
+                    //this user away from beeing able to draw on the whiteboard
+                    if (canvas.ismoderator && this._text.text.length != 0) {
+                        //Do it 
+                        if ($debug) Debug.write("Do add draw to it");
+                        parent.parent.setCanShare.doCall();
+                    }
+                ]]>
+            </handler>
+            <labelTooltip name="_text" text="" labelid="1068" />
+        </miniIcons>
+        
+        <miniIcons name="_denyShare" x="40" width="16" opacity="0.5"
+                   resource="right_notactive_rsc" height="16" showhandcursor="true">
+            <handler name="onclick">
+                //Do it 
+                if ($debug) Debug.write("Do it");
+                parent.parent.setCanShare.doCall();
+            </handler>
+            <labelTooltip labelid="1067" />
+        </miniIcons>
+        
+        
+        <miniIcons name="_allowRemote" x="60" width="16" resource="right_isactive_rsc" 
+                   height="16" showhandcursor="false" >
+            <handler name="onclick">
+                <![CDATA[
+                    //if the label is set and this is a Moderator then this user should
+                    //allow the click event => the click event will trigger
+                    //this user away from beeing able to draw on the whiteboard
+                    if (canvas.ismoderator && this._text.text.length != 0) {
+                        //Do it 
+                        if ($debug) Debug.write("Do add draw to it");
+                        parent.parent.setCanRemote.doCall();
+                    }
+                ]]>
+            </handler>
+            <labelTooltip name="_text" text="" labelid="1079" />
+        </miniIcons>
+        
+        <miniIcons name="_denyRemote" x="60" width="16" opacity="0.5"
+                   resource="right_notactive_rsc" height="16" showhandcursor="true">
+            <handler name="onclick">
+                //Do it 
+                if ($debug) Debug.write("Do it");
+                parent.parent.setCanRemote.doCall();
+            </handler>
+            <labelTooltip labelid="1078" />
+        </miniIcons>
+
+        <miniIcons name="_allowExclusiveAudio" x="80" width="16" resource="right_isactive_rsc"
+                   height="16" showhandcursor="false" >
+            <handler name="onclick">
+                <![CDATA[
+                    //if the label is set and this is a Moderator then this user should
+                    //allow the click event => the click event will trigger
+                    //this user away from beeing able to give exclusive audio
+                    if (canvas.ismoderator && this._text.text.length != 0) {
+                        if ($debug) Debug.write("Do it");
+                        parent.parent.setCanGiveAudio.doCall();
+                    }
+                ]]>
+            </handler>
+            <labelTooltip name="_text" text="" labelid="1425" />
+        </miniIcons>
+
+        <miniIcons name="_denyExclusiveAudio" x="80" width="16" opacity="0.5"
+                   resource="right_notactive_rsc" height="16" showhandcursor="true">
+            <handler name="onclick">
+                parent.parent.setCanGiveAudio.doCall();
+            </handler>
+            <labelTooltip labelid="1424" />
+        </miniIcons>
+        
+        
+        <miniIcons name="_restartDevice" x="100" width="16" height="16" resource="resyncuser_rsc" showhandcursor="true">
+            <handler name="onclick">
+                //TODO: local connection call
+                if ($debug) Debug.write("parent.parent.refObj.publicSID: ",parent.parent.refObj.publicSID);
+                canvas._videocontainer._videoviewcontent.showDevicePopUp(true);
+            </handler>
+            <labelTooltip labelid="610" />
+        </miniIcons>
+        
+        <view name="_loudness" x="120" >
+            <view x="0" y="0" name="loudness" resource="speaking" opacity="0.2"
+                  onmouseover="" onmouseout="" >      
+			    <handler name="onclick">
+					<![CDATA[
+				      	if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) {
+				            canvas.thishib.giveExclusiveAudio.setExclusiveAudio(parent.parent.parent.refObj.publicSID);
+				        } else {
+				        	new lz.labelerrorPopup(canvas.main_content._content.inner,{errorlabelid:1478});    
+				        }
+					]]>
+				</handler> 
+                <labelTooltip inittwice="true" labelid="372" />
+            </view>
+        </view>    
+    </view>
+    
+    <view name="divisionLine" width="$once{ parent.width }" 
+          bgcolor="0xFFFFFF" height="1" y="39" />
+    
+</class>
+ 
+</library>
diff --git a/WebContent/src/modules/conference/participants/participants.lzx b/WebContent/src/modules/conference/participants/participants.lzx
new file mode 100644
index 0000000..bdd0973
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/participants.lzx
@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="participants" extends="baseRoomInnerList" 
+       height="$once{ parent.height-34 }">
+
+    <!--- holds a references to the videoview which is broadcasting -->
+    <attribute name="broadCastViewRef" value="null" />
+    
+    <handler name="oninit">
+        //set modus
+        canvas.thishib.modus = "conference";
+       
+        //set reference, this reference will be cleared at *ontabcontenctleave* event
+        canvas._videocontainer=this;
+        
+        // Reconnect User to its Room Id
+        canvas.thishib.userScope = canvas.thishib.currentroomid;
+        var src = hib.getUrl();
+        
+        if( $debug ) Debug.write("videoContainer: canvas.thishib: ",canvas.thishib.src,canvas.thishib);
+        
+        if (canvas.thishib.src != src) {
+	        if( $debug ) Debug.write("SRC is WRONG ");
+            canvas.thishib.setAttribute('src',src);
+
+			if (canvas.wicketsid == null){            
+		        if( $debug ) Debug.write("Going to reconnect ");
+	            canvas.thishib.reconnectionAction = true;
+	            canvas.thishib.reconnectObjRef = this;
+	            canvas.thishib.disconnect();
+            } else {
+            	this.reconnectSuccess();
+            }
+        } else {
+            //The user is already in the correct Scope
+            this.reconnectSuccess();
+        }
+    </handler>
+    
+    <method name="initList">
+    	//
+    </method>
+
+    <commonVideoComponentAdapter name="_videoviewcontent" />
+
+    <method name="reconnectSuccess">
+        if ($debug) Debug.write("User Reloged In");
+        //Send to SWF10 video-container to connect on the conference room url
+        //and wait for the as3ConnectionSuccess-Event
+        this._videoviewcontent.reconnectSuccess(false);
+    </method>
+
+    <!---
+        We need to wait till the video-container / as3 app has the connection established
+        otherwise it can happen that the video tries to start playing before the rtmp-connection
+        was established
+     -->
+    <method name="as3ConnectionSuccess">
+    	if ($debug) Debug.write("as3ConnectionSuccess continue loading");
+    	//set default values and get already availible streams
+    	//it can happen that if you click to exit the room the views are not
+    	//not cleaned up yet and you receive this event from the LocalConnection
+    	if (this["getRoomModeratorsByRoomId"]) {
+            this.getRoomModeratorsByRoomId.doCall();
+    	}
+    </method>
+
+
+
+    <!---
+        Returns a list of all moderators of the current room and parses 
+        if the current user should receive the supermoderator flag or not
+     -->
+    <netRemoteCallHib name="getRoomModeratorsByRoomId" funcname="conferenceservice.getRoomModeratorsByRoomId" 
+                      remotecontext="$once{ canvas.thishib }" >  
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>    
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("getRoomModeratorsByRoomId: ",value);
+                canvas.becomeSuperModerator = false;
+                
+                parent.setRoomValues.applyDefaultModeration = canvas.becomemoderator;
+                canvas.becomeSuperModerator = canvas.becomemoderator;
+                
+                if (!canvas.becomeSuperModerator) {
+    	            for (var i=0;i<value.length;i++) {
+                        
+                        if (value[i].user.user_id == canvas.user_id) {
+                            parent.setRoomValues.applyDefaultModeration = true;
+                            canvas.becomeSuperModerator = value[i].isSuperModerator;
+                            if ($debug) Debug.info("Make this User to an Moderator");
+                            break;
+                        }
+                        
+                    }
+                }
+	            
+                if ($debug) Debug.write("canvas.becomemoderator: ",canvas.becomemoderator);
+                if ($debug) Debug.write("canvas.becomeSuperModerator: ",canvas.becomeSuperModerator);
+                
+                canvas.currentusercolor = canvas.getColorForUser();
+                
+                var organisation_id = 1;
+            
+                if ($debug) Debug.write(hib.userobject); 
+                if ($debug) Debug.write(hib.currentdomainObj); 
+                
+                if (hib.currentdomainObj != null) {
+                    organisation_id = hib.currentdomainObj.organisation_id
+                }
+                
+                this.parent.setRoomValues.organisation_id = organisation_id;
+                
+                if ($debug) Debug.write("setRoomValues CALL: ");
+                this.parent.setRoomValues.doCall();
+            
+            ]]>
+        </handler>
+    </netRemoteCallHib>     
+
+    <!---
+        Returns a list of all users currently in the conference room
+     -->
+    <netRemoteCallHib name="setRoomValues" funcname="setRoomValues" remotecontext="$once{ canvas.thishib }" >   
+        <attribute name="applyDefaultModeration" value="false" type="boolean" />
+        <attribute name="organisation_id" value="0" type="number" />
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>
+        <netparam><method name="getValue">return parent.applyDefaultModeration;</method></netparam>
+        <netparam><method name="getValue">return canvas.becomeSuperModerator;</method></netparam>
+        <netparam><method name="getValue">return parent.organisation_id;</method></netparam>
+        <netparam><method name="getValue">return canvas.currentusercolor;</method></netparam>
+        <handler name="ondata" args="roomStatus">
+            <![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("+++++++++++++++++");
+            if ($debug) Debug.write("+++++++++++++++++ setRoomValues1: ",roomStatus);
+            
+            if (roomStatus.roomFull) {
+                canvas.thishib.showFullMessage = true;
+                canvas.thishib.disconnect();
+            }
+            
+            if (roomStatus.browserStatus.browserInited) {
+                var tObj = new Object();
+                tObj[0] = "newBrowserURL";
+                tObj[1] = roomStatus.browserStatus.currentURL;
+                canvas.startBrowser(tObj);
+            }
+            
+            var value = roomStatus.clientList;
+            
+            for (var i = 0; i < value.length; ++i){
+                if ( value[i].streamid == canvas.streamid ) {
+                    canvas.isAllowedToDraw = value[i].canDraw;
+                }
+                //if ($debug) Debug.write("getClientListScope value: ",value[i]);
+                this.parent.addItem(value[i].connectedSince,value[i].isMod,value[i].streamid,value[i].username,
+                              '',value[i].formatedDate,value[i].userpos,value[i].usercolor,value[i]);
+            }
+            
+            //this content must be inited _after_ setting the default values
+            canvas.thishib.getCurrentModeratorList.doCall(); 
+            
+            canvas.thishib.checkLzRecording.doCall();
+            if (canvas._currentChatPanel.visible) {
+				canvas._currentChatPanel.toggleopen();
+			}
+		]]>
+        </handler>  
+    </netRemoteCallHib>
+
+    <!---
+        invoked if another client logs into the room 
+        after choosing devices
+     -->     
+    <method name="setAVSettingsToClient" args="rcl">
+        this._videoviewcontent.setAVSettingsToClient(rcl);
+    </method>
+
+    <method name="receiveExclusiveAudioFlag" args="publicSID">
+    <![CDATA[
+    	if ($debug) Debug.write("receiveExclusiveAudioFlag: ",publicSID);
+        var obj = this._participants.getUserListItemByPublicSID(publicSID);
+
+        for (var i=0; i<obj.parent.subviews.length; i++) {
+            var item = obj.parent.subviews[i];
+            var rcl = new Object();
+
+            rcl.publicSID = item.refObj.publicSID;
+            rcl.micMuted = !(publicSID == item.refObj.publicSID);
+            canvas.setMuteStatus(rcl);
+        }
+    ]]>
+    </method>
+    
+    <method name="addItem" args="connectedSince,isMod,streamid,username,userroom,formatedDate,position,color,object">
+        <![CDATA[
+            if ($debug) Debug.write("initializeStreams addItem: ",connectedSince,object);
+            
+            //Do init only in case this stream is NOT the same as we are
+            if (streamid!=canvas.streamid){
+            	//if ($debug) Debug.write("???????? object.isBroadcasting :: ",object.isBroadcasting);
+                this._videoviewcontent.createVideo(object.publicSID, object.firstname+' '+object.lastname, object.broadCastID, object.avsettings, -1, object);
+            }
+           
+            //do add self too
+            this._participants.addItem(object);
+        ]]>
+    </method>
+
+    <method name="setSpeakingByPos" args="publicSID,bool">
+    	var tObj = this._participants.getUserListItemByPublicSID(publicSID);
+    	if (tObj != null) {
+    		tObj._miniIcons._loudness.loudness.setAttribute('opacity', bool ? 1 : 0.2);
+        }
+        this._videoviewcontent.setSpeakingByPos(publicSID, bool);
+    </method>
+
+    <method name="closeStreamClient" args="publicSID">
+        this._videoviewcontent.closeStreamClient(publicSID);
+    </method>
+
+    <method name="updateMuteStatusVideoView" args="roomClient">
+        this._videoviewcontent.updateMuteStatusVideoView(roomClient);
+    </method>
+    
+    <method name="disconnectclient" args="publicSID">
+        this._videoviewcontent.disconnectclient(publicSID);
+        this._participants.disconnectclient(publicSID);
+    </method>
+
+    <method name="resetAllValues">
+        this._videoviewcontent.resetAllValues();
+    </method>
+    
+    <!--
+        invoked whenever a User starts to Stream Video in this Room,
+        interviewPodId has only a meaning in the Room Type Interview
+     -->
+    <method name="startStream" args="publicSID,broadcastId,firstname,lastname,interviewPodId,VWidth,VHeight">
+        this._videoviewcontent.startStream(publicSID,broadcastId,firstname,lastname,interviewPodId,VWidth,VHeight);
+    </method>
+    
+	<method name="addClientItem" args="connectedSince,isMod,streamid,username,room_id,formatedDate,position,color,object">
+	<![CDATA[
+		if ($debug) Debug.write("### initializeStreams addClientItem: ",connectedSince,isMod,streamid,username,room_id,formatedDate);
+		
+		if (canvas.publicSID != object.publicSID){
+		if ($debug) Debug.write("### initializeStreams createVideoObject: ", object);
+			this._videoviewcontent.createVideoObject(object.publicSID, false, -1, object);
+		}
+		
+		//Do Add it anyway
+		this._participants.addItem(object);
+	]]>
+	</method>
+    
+    <moderationMiniIconsEventUserList name="_applyAndStatusIcons" x="2" y="2" >
+        <handler name="onismoderator" reference="canvas" args="m">
+            this.updateIcons();
+        </handler>
+        <handler name="ondrawAllowStatus" reference="canvas" args="drawObject">
+            this.updateIcons();
+        </handler>
+        <handler name="onexclusiveAudioAllowStatus" reference="canvas" args="rclObject">
+            this.updateIcons();
+        </handler>
+        <handler name="onlastBroadCastingUser" reference="canvas" args="userObject">
+            this.updateIcons();
+        </handler>
+        <handler name="onmicMutedStatusChangedItem" reference="canvas" args="userObject">
+            this.updateIcons();
+        </handler>
+    </moderationMiniIconsEventUserList>
+    
+    <participantList name="_participants" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/participants/resources/accept.png b/WebContent/src/modules/conference/participants/resources/accept.png
new file mode 100644
index 0000000..89c8129
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/resources/accept.png
Binary files differ
diff --git a/WebContent/src/modules/conference/participants/resources/delete.png b/WebContent/src/modules/conference/participants/resources/delete.png
new file mode 100644
index 0000000..08f2493
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/resources/delete.png
Binary files differ
diff --git a/WebContent/src/modules/conference/participants/resources/micro_small.png b/WebContent/src/modules/conference/participants/resources/micro_small.png
new file mode 100644
index 0000000..215c831
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/resources/micro_small.png
Binary files differ
diff --git a/WebContent/src/modules/conference/participants/resources/pencil_add.png b/WebContent/src/modules/conference/participants/resources/pencil_add.png
new file mode 100644
index 0000000..902bbe6
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/resources/pencil_add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/participants/resources/pencil_delete.png b/WebContent/src/modules/conference/participants/resources/pencil_delete.png
new file mode 100644
index 0000000..d8944e6
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/resources/pencil_delete.png
Binary files differ
diff --git a/WebContent/src/modules/conference/participants/resources/user_add.png b/WebContent/src/modules/conference/participants/resources/user_add.png
new file mode 100644
index 0000000..deae99b
--- /dev/null
+++ b/WebContent/src/modules/conference/participants/resources/user_add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/popups/autoLoader.lzx b/WebContent/src/modules/conference/popups/autoLoader.lzx
new file mode 100644
index 0000000..14af187
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/autoLoader.lzx
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="autoLoader" extends="view" align="center" valign="middle" pixellock="true">
+
+	<attribute name="maxwidth" value="400" type="number" />
+	<attribute name="maxsteps" value="22" type="number" />
+	<attribute name="currentsteps" value="0" type="number" />
+	
+	<!-- 
+	<handler name="oninit">
+		this.setAttribute("y",Math.round(this.y));
+		this.setAttribute("y",Math.round(this.y));
+	</handler>
+	 -->
+	
+	<method name="close">
+		canvas.main_content.setAttribute('visibility','visible');
+		canvas._mainbgcontentNavi.setAttribute('visibility','visible');
+		canvas.thishib.loaderVar = null;
+		this.destroy();
+	</method>
+	
+	<method name="setProgress">
+		this.currentsteps += 1;
+		if($debug) Debug.write("autoLoader/setProgress ===== ",this.currentsteps);
+		var w = Math.round(((this.maxwidth)/this.maxsteps)*this.currentsteps);
+		this.loadingbar.setAttribute('visibility','visible');
+		if($debug) Debug.write("autoLoader/setResourceNumber == ",w);
+		this.loadingbar._loading.setAttribute('width',w);
+	</method>
+    
+    <text fontsize="11" name="error" y="20" fgcolor="0x666666"/>
+    <text fontsize="11" name="_src" y="50" align="center" fgcolor="0x666666" visibility="$once{ ($debug) ? 'visible' : 'hidden' }" />
+    
+    <view name="loadingbar"  height="1" pixellock="true"
+          x="-5" y="40" width="$once{ parent.maxwidth+2 }" visibility="hidden">
+          <view x="1" y="1" width="$once{ parent.width-2 }" height="1" opacity="0.3"
+          		bgcolor="$once{ canvas.getThemeColor('styleMenuBarBaseColor') }" />
+          <view name="_loading" x="1" y="1" width="0" height="1"  pixellock="true" 
+          		bgcolor="$once{ canvas.getThemeColor('styleMenuBarBaseColor') }"/>
+    </view>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/chooseNickName.lzx b/WebContent/src/modules/conference/popups/chooseNickName.lzx
new file mode 100644
index 0000000..66b2b09
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/chooseNickName.lzx
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+ 
+ <class name="chooseNickName" extends="labelExplorerBox" labelid="1287"
+    docking="true" resizeable="false" closable="false" 
+    width="324" x="$once{ parent.width/2 - this.width/2 }" y="100" height="200">
+
+	<handler name="oninit">
+	<![CDATA[
+		var tFirstname = "Guest"
+		var tLastname = "User " + getStringTimeWithSeconds();
+		
+		this.firstName.setAttribute("text", tFirstname);
+		this.lastName.setAttribute("text", tLastname);
+		this.mail.setAttribute("text", canvas.mail);
+	]]>
+	</handler>
+
+    <!--
+    public Long setUserNickName(String firstname, String lastname, String email)
+     -->
+    <netRemoteCallHib name="setUserNickName" activeErrorHandler="true" 
+                        funcname="xmlcrm.setUserNickName" remotecontext="$once{ canvas.thishib }">          
+        <netparam><method name="getValue">return parent.parent.firstName.getText();</method></netparam>
+        <netparam><method name="getValue">return parent.parent.lastName.getText();</method></netparam>
+        <netparam><method name="getValue">return parent.parent.mail.getText();</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("setUserNickName -1-: ",value);
+                
+                if (value<0){
+                    
+                } else {
+                    //canvas.thishib.getCurrentRoomClient.doCall();
+                    parent.close();
+                }
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+
+	<labelText y="26" x="4" labelid="1288" />
+		<customEdittext name="firstName" y="24" x="120" width="200" text="" />
+		
+	<labelText y="56" x="4" labelid="1289" />
+		<customEdittext name="lastName" y="54" x="120" width="200" text="" />
+		
+	<labelText y="86" x="4" labelid="1290" />
+		<customEdittext name="mail" y="84" x="120" width="200" regexpType="email" text="" />
+
+	<simpleLabelButton name="connect" x="$once{ parent.width-this.width-10 }" 
+					   y="$once{ parent.height-30 }" labelid="1291" width="120" >
+		<handler name="onclick">
+			<![CDATA[
+    			if (parent.firstName.getText().length < 4) {
+    				new lz.labelerrorPopup(canvas,{errorlabelid:1292});
+    				return;
+    			} else if (parent.lastName.getText().length < 4) {
+                    new lz.labelerrorPopup(canvas,{errorlabelid:1292});
+                    return;
+                } else if (parent.mail.getText() == "") {
+                    new lz.labelerrorPopup(canvas,{errorlabelid:1293});
+                    return;
+                }
+            
+                this.parent.setUserNickName.doCall();
+            ]]>    
+		</handler>
+	</simpleLabelButton>
+		
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/confirmationBox.lzx b/WebContent/src/modules/conference/popups/confirmationBox.lzx
new file mode 100644
index 0000000..3d3d256
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/confirmationBox.lzx
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="confirmationBox" extends="labelExplorerBox" labelid="18"
+    docking="true" resizeable="false" closable="true" width="400" x="100" height="240">
+    
+    <attribute name="refObj" value="null" />
+    
+    <attribute name="labeliderror" value="0" type="number" />
+    
+    <attribute name="doAskAgain" value="true" type="boolean" />
+
+	<view x="4" resource="warning_icon_rsc" y="24" />
+
+    <labelText labelid="$once{ parent.labeliderror }" y="24" 
+    		   width="$once{ parent.width - 40 }"
+    	multiline="true" resize="false" x="30" />
+    
+    <labelCheckbox name="holddatainSO" 
+    			   visibility="$once{ (parent.doAskAgain) ? 'visible' : 'hidden' }" 
+    			   labelid="64" x="10" y="220" />
+    
+    <simpleLabelButton labelid="61" width="100" x="70" y="196">
+    	<handler name="onclick">
+    		this.parent.close();
+    	</handler>
+    </simpleLabelButton>    
+    <simpleLabelButton labelid="65" width="100" x="180" y="196">
+    	<handler name="onclick">         
+    		var t = parent.holddatainSO.getValue();
+            this.parent.refObj.sendConfirmation(false,t);
+            this.parent.close();
+    	</handler>
+    </simpleLabelButton>
+    <simpleLabelButton labelid="60" width="100" x="290" y="196">
+    	<handler name="onclick">
+    		var t = parent.holddatainSO.getValue();
+            this.parent.refObj.sendConfirmation(true,t);
+            this.parent.close();
+    	</handler>
+    </simpleLabelButton>  
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/confirmationSingle.lzx b/WebContent/src/modules/conference/popups/confirmationSingle.lzx
new file mode 100644
index 0000000..324ed4f
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/confirmationSingle.lzx
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="confirmationSingle" extends="labelExplorerBox" labelid="832"
+    docking="true" resizeable="false" closable="true" height="140" width="300">
+    
+    <attribute name="refObj" value="null" />
+    
+    <attribute name="refReturnMethod" value="null" />
+    
+    <attribute name="showCheckBox" value="true" type="boolean" />
+    
+    <attribute name="labeliderror" value="0" type="number" />
+    
+    <attribute name="doCalcPosition" value="true" type="number" />
+    
+	<attribute name="iconResource" value="warning_popup_icon_rsc" type="string" />
+
+	<image x="4" src="$once{ canvas.getThemeImage(parent.iconResource) }" y="24" />
+
+    <labelText labelid="$once{ parent.labeliderror }" y="24" 
+    		   width="$once{ parent.width - 40 }"
+    	multiline="true" resize="false" x="30" />
+        
+    <handler name="oninit">
+        <![CDATA[
+        
+        	if (!this.doCalcPosition) {
+        		return;
+        	}
+        
+            //Set Position of Confirmation Box as Close as possible to the Mouse
+            var x = parent.getMouse("x");
+            var y = parent.getMouse("y");
+            var newx = x - (this.width/2);
+            var newy = y - (this.height/2);
+            
+            if ($debug) Debug.write("1",x,y,newx,newy);
+            
+            if (newx < 0) {
+                newx = 20;
+            }
+            if (newy < 0) {
+                newy = 20;
+            }
+            
+            //if ($debug) Debug.write("1.1",(this.width + newx + 20),parent.width,this.width);
+            
+            var relativeWidth = parent.width;
+            if (relativeWidth > canvas.width) {
+            	relativeWidth = canvas.width;
+            }
+            
+            if (this.width + newx + 20 > relativeWidth) {
+            	newx = relativeWidth-this.width-20;
+            }
+            
+            if (this.height + newy + 20 > parent.height) {
+            	newy = parent.height-this.height-20;
+            }
+            
+            if ($debug) Debug.write("2",newx,newy);
+            
+            this.setAttribute("x",newx);
+            this.setAttribute("y",newy);
+            
+        ]]>
+    </handler>
+    
+    <labelCheckbox name="holddatainSO" visibility="$once{ (parent.showCheckBox) ? 'visible' : 'hidden' }" 
+                   labelid="64" x="10" y="$once{ parent.height - 46 }" />
+    
+    <simpleLabelButton labelid="61" width="100" x="$once{ parent.width - 105 }" y="$once{ parent.height - 26 }">
+    	<handler name="onclick">
+    		var t = parent.holddatainSO.getValue();
+    		this.parent.close();
+    		if (parent.refReturnMethod == null) {
+    			if ($debug) Debug.write("refObj ",this.parent.refObj);
+    		    this.parent.refObj.sendNoConfirmation();
+    		} else {
+    			this.parent.refObj[parent.refReturnMethod](false,t);
+    		}
+    	</handler>
+    </simpleLabelButton>    
+    <simpleLabelButton labelid="60" width="100" x="$once{ parent.width - 210 }" y="$once{ parent.height - 26 }">
+    	<handler name="onclick">
+    		var t = parent.holddatainSO.getValue();
+    		this.parent.close();
+    		if (parent.refReturnMethod == null) {
+    		    this.parent.refObj.sendConfirmation(true,t);
+    		} else {
+                this.parent.refObj[parent.refReturnMethod](true,t);
+            }
+    	</handler>
+    </simpleLabelButton>    
+</class>
+
+<class name="rememberMessage" extends="labelExplorerBox" labelid="832"
+	   x="$once{ canvas.width/2 - this.width/2 }" y="100"
+	   docking="true" resizeable="false" closable="true" height="140" width="300">
+    
+    <attribute name="refObj" value="null" />
+    
+    <attribute name="showCheckBox" value="true" type="boolean" />
+    
+    <attribute name="labeliderror" value="0" type="number" />
+    
+    <view x="4" resource="warning_icon_rsc" y="24" />
+
+    <labelText labelid="$once{ parent.labeliderror }" y="24" 
+               width="$once{ parent.width - 40 }"
+        multiline="true" resize="false" x="30" />
+        
+    <labelCheckbox name="holddatainSO" visibility="$once{ (parent.showCheckBox) ? 'visible' : 'hidden' }" 
+                   labelid="64" x="10" y="$once{ parent.height - 46 }" />
+    
+    <simpleLabelButton labelid="642" width="100" x="$once{ parent.width - 105 }" y="$once{ parent.height - 26 }">
+        <handler name="onclick">
+        	var t = parent.holddatainSO.getValue();
+            this.parent.close();
+            this.parent.refObj.sendConfirmation(t);
+        </handler>
+    </simpleLabelButton>    
+     
+</class>
+	
+</library>
diff --git a/WebContent/src/modules/conference/popups/converterPopup.lzx b/WebContent/src/modules/conference/popups/converterPopup.lzx
new file mode 100644
index 0000000..76178ad
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/converterPopup.lzx
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="converterPopup" extends="labelExplorerBox" labelid="204"
+	docking="true" resizeable="true" closable="true" 
+    width="324" x="200" height="230">
+
+	<attribute name="error" value="null" />
+    
+    <handler name="oninit">
+        this.errorView.errorView.setAttribute('text',this.error);
+    </handler>
+
+	<view y="24" width="${ parent.width - 4 }" height="${ parent.height - 30 }" x="2" clip="true" name="errorView">
+		<text y="30" fontsize="10" fontstyle="bold" name="errorView"
+			multiline="true" width="${ parent.width - 14 }" selectable="true" />
+		<om_vscrollbar />
+	</view>
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/editWhiteboardDefault.lzx b/WebContent/src/modules/conference/popups/editWhiteboardDefault.lzx
new file mode 100644
index 0000000..59981ef
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/editWhiteboardDefault.lzx
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="questionCheckbox" extends="view" width="$once{parent.width-4}" >
+	<attribute name="labelid" value="0" type="number" />
+	<attribute name="valBool"  value="false" type="boolean" />
+	<labelCheckbox name="holddatainSO" x="2" y="0" 
+		value="$once{parent.valBool}" text="" />
+    <labelText labelid="$once{ parent.labelid }" width="$once{parent.width-24}"
+    	x="18" multiline="true" resize="false">	
+    	<handler name="onclick">
+    		this.parent.holddatainSO.onclick.sendEvent();
+    	</handler>
+    </labelText>
+</class>
+
+<class name="editWhiteboardDefault" extends="labelExplorerBox" labelid="66"
+    docking="true" resizeable="false" closable="true" width="400" x="100" height="240">
+    
+    <attribute name="refObj" value="null" />
+    
+    <view name="_settings" width="$once{parent.width-4}" height="180" y="24" clip="true">
+		<view name="inner" width="$once{parent.width}" >
+			<simplelayout axis="y" spacing="2" />
+		</view>
+    	<om_vscrollbar />
+    </view>
+    <!-- 
+    63
+     -->
+    
+    <handler name="oninit" >
+		var g = canvas.getUserData();
+         if (g["image"]==null) {
+         	g["image"]=new Array();
+         	g["image"]["clearField"]=false;
+         	g["image"]["askagainclear"]=false;
+         	g["image"]["donotaskagainrdc"]=false;
+         }
+         var t = new lz.questionCheckbox(this._settings.inner,{name:"clearField",labelid:63,valBool:g["image"]["clearField"]});
+         //Debug.write("t: ",t);
+         t = new lz.questionCheckbox(this._settings.inner,{name:"askagainclear",labelid:67,valBool:g["image"]["askagainclear"]});
+		 //Debug.write("t: ",t);
+		
+         if (g["wmlfile"]==null) {
+         	g["wmlfile"]=new Array();
+         	g["wmlfile"]["clearField"]=false;
+         	g["wmlfile"]["askagainclear"]=false;
+         }
+         t = new lz.questionCheckbox(this._settings.inner,{name:"askagainclearwml",labelid:212,valBool:g["wmlfile"]["askagainclear"]});
+         
+         t = new lz.questionCheckbox(this._settings.inner,{name:"donotaskagainrdc",labelid:1127,valBool:g["image"]["donotaskagainrdc"]});
+		 
+         
+		 if (g["doShowUpdateProfileMessage"] == null) {
+		 	new lz.questionCheckbox(this._settings.inner,{name:"doShowUpdateProfileMessage",labelid:1299,valBool:false});
+		 } else {
+		 	new lz.questionCheckbox(this._settings.inner,{name:"doShowUpdateProfileMessage",labelid:1299,valBool:g["doShowUpdateProfileMessage"]});
+		 }
+         
+		 
+		 //Debug.write("t: ",t);
+    </handler>    
+    
+    <method name="storesettings" >
+		var g = canvas.getUserData();
+		
+         if (g["image"]==null) g["image"]=new Array();
+         g["image"]["clearField"]=this._settings.inner.clearField.holddatainSO.getValue();
+         g["image"]["askagainclear"]=this._settings.inner.askagainclear.holddatainSO.getValue();
+         g["image"]["donotaskagainrdc"]=this._settings.inner.donotaskagainrdc.holddatainSO.getValue();
+		
+         if (g["wmlfile"]==null) g["wmlfile"]=new Array();
+		//always true
+         g["wmlfile"]["clearField"]=true;
+         g["wmlfile"]["askagainclear"]=this._settings.inner.askagainclearwml.holddatainSO.getValue();
+		
+         g["doShowUpdateProfileMessage"] = this._settings.inner.doShowUpdateProfileMessage.holddatainSO.getValue();
+         
+	     canvas.setUserData(g);
+    </method>
+    
+    <simpleLabelButton labelid="61" width="100" x="290" y="216">
+    	<handler name="onclick">
+    		this.parent.close();
+    	</handler>
+    </simpleLabelButton> 
+       
+    <simpleLabelButton labelid="60" width="100" x="180" y="216">
+    	<handler name="onclick">
+    		parent.storesettings();
+    		this.parent.close();
+    	</handler>
+    </simpleLabelButton>    
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/errorModeratorPopup.lzx b/WebContent/src/modules/conference/popups/errorModeratorPopup.lzx
new file mode 100644
index 0000000..f62ad33
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/errorModeratorPopup.lzx
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="errorModeratorPopup" extends="labelExplorerBox" labelid="204"
+	docking="true" resizeable="false" closable="true" 
+    width="224" x="300" height="230">
+
+	<attribute name="error" value="" type="string" />
+
+	<view y="24" width="218" height="170" x="2" clip="true">
+		<text y="30" fontsize="10" fontstyle="bold" text="${ parent.parent.error }"
+			multiline="true" width="190" />
+		<om_vscrollbar />
+	</view>
+    
+    <simpleLabelButton x="20" labelid="906" y="200" width="200">
+		<handler name="onclick">
+			//new lz.applyForModeration(canvas.main_content._content.inner);
+			canvas.thishib.applyForModeration.doCall();
+            this.parent.close();
+		</handler>
+    </simpleLabelButton>
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/errorPopup.lzx b/WebContent/src/modules/conference/popups/errorPopup.lzx
new file mode 100644
index 0000000..0ecc71c
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/errorPopup.lzx
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="errorPopup" extends="labelExplorerBox" labelid="204"
+	docking="true" resizeable="false" closable="true" y="100"
+    x="$once{ parent.width/2 - this.width/2 }" height="160" width="324">
+
+	<attribute name="error" value="" type="string" />
+	<attribute name="makeModal" value="false" type="boolean" />
+	<attribute name="onCloseFunc" type="object" value="null"/>
+		
+	<handler name="oninit">
+	   if (this.makeModal) {
+	       lz.ModeManager.makeModal(this);
+	   }
+	</handler>
+	
+	<handler name="onclose">
+		if (this.makeModal) {
+			lz.ModeManager.releaseAll();
+		}
+		if (onCloseFunc != null) {
+			onCloseFunc();
+		}
+	</handler>
+
+	<view x="4" resource="warning_icon_rsc" y="24" />
+
+	<view y="24" width="$once{ parent.width - 40 }" height="130" x="30" clip="true">
+		<text fontsize="10" fontstyle="bold" text="${ parent.parent.error }"
+			multiline="true" width="$once{ parent.width - 16 }" selectable="true" />
+	</view>
+    
+    <simpleLabelButton labelid="642" width="100" x="$once{ parent.width-105 }" 
+           y="$once{ parent.height-24 }" 
+           onclick="this.parent.close();" />
+
+</class>
+
+<class name="labelerrorPopup" extends="errorPopup">
+
+    <attribute name="errorlabelid" type="number" setter="setErrorLabelId(errorlabelid)" />
+    <method name="setErrorLabelId" args="errorlabelid" >
+        this.errorlabelid = errorlabelid;
+        this.setAttribute("error",canvas.getLabelName(this.errorlabelid));
+        if ($debug) Debug.write("labelerrorPopup: ",canvas.getLabelName(this.errorlabelid));
+    </method>
+    
+
+</class>
+
+<class name="singletonErrorPopup" extends="errorPopup">
+	<handler name="oninit">
+		lz.singletonErrorPopupHolder.dialogPresent = 1;
+		lz.singletonErrorPopupHolder.dialogObject = this;
+	</handler>
+	
+	<handler name="ondestroy">
+		lz.singletonErrorPopupHolder.dialogPresent = 0;
+		lz.singletonErrorPopupHolder.dialogObject = null;
+	</handler>
+</class>
+
+<class name="singletonErrorPopupHolder">
+	<attribute name="error" type="string" setter="setError(error)"/>
+	<attribute name="dialogPresent" allocation="class" value="0" />
+	<attribute name="dialogObject" allocation="class" />
+	
+	<method name="setError" args="error">
+	
+		if ( lz.singletonErrorPopupHolder.dialogPresent == 0 )
+		{
+			lz.singletonErrorPopupHolder.dialogPresent = 1;
+			lz.singletonErrorPopupHolder.dialogObject = new lz.singletonErrorPopup(canvas,{error:error});
+		}
+		else
+		{
+			lz.singletonErrorPopupHolder.dialogObject.error = error;
+		}
+	</method>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/headerMenu.lzx b/WebContent/src/modules/conference/popups/headerMenu.lzx
new file mode 100644
index 0000000..c3d6932
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/headerMenu.lzx
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="headerMenu" extends="view" layout="axis:x;spacing:4;inset:4" >
+	<text fontsize="11" fontstyle="bold" text="${ canvas.firstName+' '+canvas.lastName }" resize="true" />
+	
+	<labelText labelid="58" fontsize="11" fontstyle="bold" resize="true" />
+	<text fontsize="11" fontstyle="bold" text="${ canvas.currentcourseNameLong }" resize="true" />
+	
+	<labelText labelid="59" fontsize="11" fontstyle="bold" resize="true" />
+	<text fontsize="11" fontstyle="bold" text="${ canvas.currentlanguage }" resize="true" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/incomingScreenSharing.lzx b/WebContent/src/modules/conference/popups/incomingScreenSharing.lzx
new file mode 100644
index 0000000..dae9101
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/incomingScreenSharing.lzx
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="incomingScreenSharing" extends="labelExplorerBox" labelid="643"
+        docking="true" resizeable="false" closable="true" width="260"
+        x="$once{ canvas.width - this.width - 10 }" y="10" height="160">
+    
+    <attribute name="messageObj" value="null" />
+    <attribute name="refObj" value="null" />
+    
+    <handler name="oninit">
+        var tString = canvas.getLabelName(644) + " " 
+                + messageObj.rcl.firstName + " " + messageObj.rcl.lastName;
+        this._text.setAttribute("text",tString);
+    </handler>
+    
+    <labelText name="_text" text="" x="10" y="22"
+            width="$once{ parent.width - 20 }" multiline="true" resize="false"/>
+    
+    <simpleLabelButton labelid="645" width="100" 
+                       x="$once{ parent.width - 105 }" y="$once{ parent.height - 26 }">
+        <handler name="onclick">
+            lz.Browser.loadURL(parent.generateFileLink(),'_BLANK');  
+        </handler>
+    </simpleLabelButton>
+    
+    <method name="generateFileLink">
+        <![CDATA[
+            return canvas.getUrl() + 'RtpSharerServlet?publicSID='+this.messageObj.publicSID +
+                    '&room='+this.messageObj.room +
+                    '&room_id='+hib.currentroomid +
+                    '&sid='+canvas.sessionId;  
+        ]]>
+    </method>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/library.lzx b/WebContent/src/modules/conference/popups/library.lzx
new file mode 100644
index 0000000..1da3a8b
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/library.lzx
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!-- 
+	FamFam Icon set
+	Creative Commons 3.0
+	 -->
+	<resource name="warning_icon_rsc" src="resources/error.png" />
+    
+    <include href="rpcerrorDialog.lzx" />
+    <include href="errorPopup.lzx" />
+    <include href="messageWin.lzx" />
+    <include href="headerMenu.lzx" />
+    <include href="confirmationBox.lzx" />
+    <include href="editWhiteboardDefault.lzx" />
+	<include href="confirmationSingle.lzx" />
+    <include href="autoLoader.lzx" />
+    <include href="converterPopup.lzx" />
+    <include href="errorModeratorPopup.lzx" />
+    <include href="syncWin.lzx" />
+    <include href="meetingTimer.lzx" />
+    <include href="incomingScreenSharing.lzx" />
+    <include href="redirectBox.lzx" />
+    <include href="chooseNickName.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/popups/meetingTimer.lzx b/WebContent/src/modules/conference/popups/meetingTimer.lzx
new file mode 100644
index 0000000..7f8f8a1
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/meetingTimer.lzx
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="meetingTimer" extends="labelExplorerBox" labelid="638"
+        docking="true" resizeable="false" closable="false" width="260"
+        x="$once{ canvas.width - this.width - 10 }" y="10" height="160">
+    
+    <attribute name="roomobj" value="null" />
+    <attribute name="refObj" value="null" />
+    
+    <attribute name="demoTime" value="0" type="number" />
+    
+    <handler name="oninit">
+        this.dText = canvas.getLabelName(639);
+        this.demoTime = this.roomobj.demoTime;
+        this.fadeText(null);
+    </handler>
+    
+    <method name="fadeText" args="item">
+        <![CDATA[
+            if (this.demoTime > 0) {
+                var min = Math.floor(this.demoTime/60);
+                var restSeconds = this.demoTime - (min * 60);
+                if (restSeconds < 10) {
+                    restSeconds = "0"+restSeconds;
+                }
+                var tString = this.dText + min + "min " + restSeconds + "sec";
+                
+                this._text._text.setAttribute("text",tString);
+                this.demoTime--;
+                lz.Timer.addTimer( new LzDelegate( this, "fadeText" ), 1000 );
+            } else {
+                if ($debug) Debug.write("DEMO IS OVER ");
+                canvas.sendViaLocalConnection(canvas.vid_lc_name, "immediateExitRoom", [true,null]);
+            }
+        ]]>
+    </method>
+    
+    <!--
+    this.roomobj.demoTime
+     -->
+    
+    <view name="_text" x="2" width="$once{ parent.width -4 }" clip="true"
+        y="24" height="$once{ parent.height-25 }">
+        <labelText name="_text" text="" 
+            width="$once{ parent.width }" multiline="true" resize="false"/>
+    </view>
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/messageWin.lzx b/WebContent/src/modules/conference/popups/messageWin.lzx
new file mode 100644
index 0000000..3cedb37
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/messageWin.lzx
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="messageWin" extends="labelExplorerBox" labelid="18"
+    docking="true" resizeable="false" closable="true" 
+    width="400" x="100" height="240">
+    
+    <attribute name="labeliderror" value="0" type="number" />
+    
+    <view x="2" width="${ parent.width -4 }" clip="true"
+        y="24" height="$once{ parent.height-48 }">
+        <labelText labelid="$once{ parent.parent.labeliderror }" width="400"
+            y="22" multiline="true" resize="false"/>
+        <om_vscrollbar />
+    </view>
+	
+    <simpleLabelButton labelid="25" width="100" x="290" y="$once{ parent.height-22 }" 
+        onclick="this.parent.close();" />
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/redirectBox.lzx b/WebContent/src/modules/conference/popups/redirectBox.lzx
new file mode 100644
index 0000000..bb7eaf5
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/redirectBox.lzx
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="redirectBox" extends="labelExplorerBox" labelid="50"
+	   valign="middle" align="center"
+	   docking="true" resizeable="false" closable="false" width="260" height="140">
+    
+    <attribute name="timerDel" value="null" />
+    <attribute name="maxTime" value="5000" type="number" />
+    
+    <attribute name="redirectURL" value="" type="string" />
+    
+	<handler name="oninit">
+		lz.ModeManager.makeModal(this);
+		this.timerDel = new LzDelegate( this, "timeLineAction" );
+		this.timeLineAction();
+	</handler>
+
+	<handler name="onclose">
+		lz.ModeManager.release(this);
+	</handler>	
+		
+    <method name="timeLineAction">
+    	<![CDATA[
+    	
+    		var tString = canvas.getLabelName(1098);
+    		tString += " " + Math.round(this.maxTime/1000) + " sek";
+    		
+    	
+	    	this.messageText.setAttribute("text",tString);
+	    	
+	    	this.maxTime -= 1000;
+	    	
+	    	if (this.maxTime >= 0) {
+	    		
+	    		lz.Timer.addTimer( this.timerDel, 1000 );
+	    		
+	    	} else {
+	    		
+	            if ($debug) Debug.write("this.redirectURL ",this.redirectURL);
+	            redirectToUrl(this.redirectURL, null);
+	    	}
+    	]]>
+    </method>
+    
+    <attribute name="refObj" value="null" />
+    
+
+	<view x="4" resource="warning_icon_rsc" y="24" />
+
+    <labelText name="messageText" text="" y="24" 
+    		   width="$once{ parent.width - 40 }"
+    	multiline="true" resize="false" x="30" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/resources/error.png b/WebContent/src/modules/conference/popups/resources/error.png
new file mode 100644
index 0000000..628cf2d
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/resources/error.png
Binary files differ
diff --git a/WebContent/src/modules/conference/popups/rpcerrorDialog.lzx b/WebContent/src/modules/conference/popups/rpcerrorDialog.lzx
new file mode 100644
index 0000000..ac6c304
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/rpcerrorDialog.lzx
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="baseErrorDialog" extends="labelExplorerBox" labelid="204"
+    docking="true" resizeable="false" closable="true" width="300" 
+	x="$once{ canvas.width/2-this.width/2 }" height="130">
+	
+	<handler name="oninit">
+        this.bringToFront();
+        lz.Focus.setFocus(this);
+        if (errorid != 0) {
+			this.getErrorByCode.doCall();
+		}
+    </handler>
+	
+    <attribute name="errortext" value="" type="string" />
+    <attribute name="addInfo" value="" type="string" />
+	<attribute name="errorid" value="0" type="number" />
+
+	<netRemoteCallHib name="getErrorByCode" funcname="errorservice.getErrorByCode" remotecontext="$once{ canvas.thishib }" >      
+		<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+		<netparam><method name="getValue"> return parent.parent.errorid; </method></netparam>
+        <netparam><method name="getValue"> return canvas.thishib.userlang; </method></netparam>
+		<handler name="ondata" args="value">
+			<![CDATA[
+    			if ($debug) Debug.write("getErrorByCode ",value);
+    			//this.parent.destroy();
+    			this.parent.setAttribute('errortext',value.errmessage+" <br/><br/>"+parent.addInfo);
+    			this.parent.setAttribute('title',value.errortype);
+			]]>
+		</handler>
+	</netRemoteCallHib>		
+
+	<view x="4" resource="warning_icon_rsc" y="24" />
+
+	<view y="24" width="$once{ parent.width - 40 }" height="130" x="30" clip="true">
+		<text fontsize="10" fontstyle="bold" text="${ parent.parent.errortext }"
+			multiline="true" width="$once{ parent.width - 16 }" selectable="true" />
+	</view>
+	
+</class>
+	
+<class name="errorDialog" extends="baseErrorDialog">
+
+	<handler name="oninit">
+		lz.ModeManager.makeModal(this);
+	</handler>
+    <handler name="onclose">
+        lz.ModeManager.release(this);
+    </handler>
+	
+</class>
+	
+<class name="contentSaveWindow" extends="baseErrorDialog" labelid="936">
+	
+    <attribute name="saveObj" value="null" />
+    <attribute name="refObj" value="null" />
+    <attribute name="processNextIndex" value="0" type="number" />
+	<attribute name="errorid" value="0" type="number" />
+    
+    <handler name="oninit">
+        this.setAttribute('errorid',1545);
+        this.setAttribute('errortext',canvas.getLabelName(1545));
+        lz.ModeManager.makeModal(this);
+        if ($debug) Debug.write("contentsavewindow_errorid: ",errorid);
+        if ($debug) Debug.write("contentsavewindow_errortext: ",errortext);
+        this.startSave();
+    </handler>
+    
+    <handler name="onclose">
+        lz.ModeManager.release(this);
+    </handler>
+    
+    <method name="startSave">
+    	<![CDATA[
+    	for (var i=0;i<this.saveObj.length;i++){
+    		this.saveObj[i].prepareCall();
+    	}
+    	this.processNext();
+    	]]>
+    </method>
+	
+	<method name="errorByCode" args="eCode">
+		this.errorid = eCode;
+		this.getErrorByCode.doCall();
+	</method>
+    
+    <method name="processNext">
+    	<![CDATA[
+    	//Debug.write("processNext: ",this.saveObj.length,this.processNextIndex);
+    	if (this.saveObj.length>this.processNextIndex){
+    		this.saveObj[this.processNextIndex].returnObj=this;
+    		this.saveObj[this.processNextIndex].doCall();
+    		this.processNextIndex++;
+    	} else {
+    		//Debug.write("update process complete");
+    		this.refObj.onsavecompleted.sendEvent();
+    		this.close();
+    	}
+    	]]>
+    </method>
+	
+	<method name="doCallBack">
+		this.close();
+	</method>
+	
+    <simpleLabelButton name="_btn" labelid="333" width="100" x="$once{ parent.width-104 }" 
+		y="$once{ parent.height-24 }" onclick="parent.doCallBack();" /> 
+	
+</class>
+	
+<class name="rpcErrorDialog" extends="errorDialog" height="250">
+	
+	<method name="doCallBack">
+		this.close();
+	</method>
+	
+	<handler name="onclose">
+		if ( canvas.focusOnItem != null )
+		{
+			lz.Focus.setFocus( canvas.focusOnItem, true );
+		}
+	</handler>
+	
+    <simpleLabelButton name="_btn" labelid="333" width="120" x="$once{ parent.width-124 }" 
+		y="$once{ parent.height-24 }" onclick="parent.doCallBack();" /> 
+	
+</class>
+	
+<class name="callbackRpcErrorDialog" extends="errorDialog"
+	closable="false"  height="250">
+	
+	<attribute name="callBackObject" value="null" />
+	
+	<method name="doCallBack">
+		this.callBackObject.sendCallBack.sendEvent();
+		this.close();
+	</method>
+	
+	<handler name="onclose">
+		if ( canvas.focusOnItem != null )
+		{
+			lz.Focus.setFocus( canvas.focusOnItem, true );
+		}
+	</handler>
+	
+    <simpleLabelButton name="_btn" labelid="333" width="120" x="$once{ parent.width-124 }" 
+		y="$once{ parent.height-24 }" onclick="parent.doCallBack();" /> 
+	
+</class>
+   
+
+</library>
diff --git a/WebContent/src/modules/conference/popups/syncWin.lzx b/WebContent/src/modules/conference/popups/syncWin.lzx
new file mode 100644
index 0000000..dd1b387
--- /dev/null
+++ b/WebContent/src/modules/conference/popups/syncWin.lzx
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="syncWin" extends="labelText" multiline="true" resize="false" 
+       width="260" align="right" y="${ parent.height - this.height - 10 }" 
+       bgcolor="0xFFFFFF" fgcolor="0xFF3300">
+    
+    <attribute name="refObj" value="null" />
+    
+    <attribute name="labeliderror" value="0" type="number" />
+    
+    <handler name="oninit">
+        this.setAttribute('text',canvas.getLabelName(this.labeliderror));
+    </handler>    
+    
+    <method name="close">
+    	this.destroy();
+    </method>
+    
+    <handler name="onclick">
+        this.destroy();
+    </handler>
+    
+    <method name="setMessage" args="mess">
+        this.setAttribute('text',mess);
+    </method>
+    
+</class>
+	
+<!--
+<class name="syncWin" extends="labelExplorerBox" labelid="558"
+        docking="true" resizeable="false" closable="true" width="250"
+        x="$once{ canvas.width/2 - this.width/2 }" height="140">
+    
+	<handler name="oninit">
+		lz.ModeManager.makeModal(this);
+	</handler>
+    
+    <handler name="onclose">
+    	lz.ModeManager.release(this);
+    	canvas.syncWindow = null;
+    </handler>
+    
+    <attribute name="labeliderror" value="0" type="number" />
+    
+    <view x="2" width="$once{ parent.width -4 }" clip="true"
+        y="24" height="$once{ parent.height-25 }">
+        <labelText labelid="$once{ parent.parent.labeliderror }" 
+            width="$once{ parent.width }" multiline="true" resize="false"/>
+    </view>
+
+</class>
+ -->
+
+</library>
diff --git a/WebContent/src/modules/conference/resources/arrow_refresh_small.png b/WebContent/src/modules/conference/resources/arrow_refresh_small.png
new file mode 100644
index 0000000..d3087df
--- /dev/null
+++ b/WebContent/src/modules/conference/resources/arrow_refresh_small.png
Binary files differ
diff --git a/WebContent/src/modules/conference/resources/base0.png b/WebContent/src/modules/conference/resources/base0.png
new file mode 100644
index 0000000..d93774d
--- /dev/null
+++ b/WebContent/src/modules/conference/resources/base0.png
Binary files differ
diff --git a/WebContent/src/modules/conference/resources/base1.png b/WebContent/src/modules/conference/resources/base1.png
new file mode 100644
index 0000000..730666b
--- /dev/null
+++ b/WebContent/src/modules/conference/resources/base1.png
Binary files differ
diff --git a/WebContent/src/modules/conference/resources/base2.png b/WebContent/src/modules/conference/resources/base2.png
new file mode 100644
index 0000000..b4f3733
--- /dev/null
+++ b/WebContent/src/modules/conference/resources/base2.png
Binary files differ
diff --git a/WebContent/src/modules/conference/resources/base3.png b/WebContent/src/modules/conference/resources/base3.png
new file mode 100644
index 0000000..00ed840
--- /dev/null
+++ b/WebContent/src/modules/conference/resources/base3.png
Binary files differ
diff --git a/WebContent/src/modules/conference/resources/speaking.png b/WebContent/src/modules/conference/resources/speaking.png
new file mode 100644
index 0000000..2ca21a7
--- /dev/null
+++ b/WebContent/src/modules/conference/resources/speaking.png
Binary files differ
diff --git a/WebContent/src/modules/conference/resources/webstart_play.png b/WebContent/src/modules/conference/resources/webstart_play.png
new file mode 100644
index 0000000..6d13683
--- /dev/null
+++ b/WebContent/src/modules/conference/resources/webstart_play.png
Binary files differ
diff --git a/WebContent/src/modules/conference/restricted/library.lzx b/WebContent/src/modules/conference/restricted/library.lzx
new file mode 100644
index 0000000..598e945
--- /dev/null
+++ b/WebContent/src/modules/conference/restricted/library.lzx
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+    <include href="restrictedUserList.lzx" />
+    <include href="restrictedUserListItem.lzx" />
+    <include href="restrictedUserListInner.lzx" />
+    <include href="moderationMiniIconRestricted.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/restricted/moderationMiniIconRestricted.lzx b/WebContent/src/modules/conference/restricted/moderationMiniIconRestricted.lzx
new file mode 100644
index 0000000..3dcb693
--- /dev/null
+++ b/WebContent/src/modules/conference/restricted/moderationMiniIconRestricted.lzx
@@ -0,0 +1,423 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="moderationMiniIconRestricted" extends="view" y="20" x="2" height="18">
+	
+	<attribute name="isMod" value="false" type="boolean"/>
+    <attribute name="isSuperModerator" value="false" type="boolean"/>
+	
+	<handler name="oninit">
+	<![CDATA[
+		this.isMod = parent.parent.isMod;
+		this.isSuperModerator = parent.parent.isSuperModerator;
+		
+		if ($debug) Debug.write(" :: moderationMiniIconRestricted :. ",this.isMod);
+		var refObj = parent.parent.refObj;
+		
+		if (this.isMod) {
+			this._isMod.setAttribute("visibility","visible");
+			this._isModAddbutton.setAttribute("visibility","hidden");
+		} else {
+			this._isMod.setAttribute("visibility","hidden");
+            this._isModAddbutton.setAttribute("visibility","visible");
+		}
+		
+		if (this.isMod) {
+			this._canDraw.setAttribute("visibility","visible");
+            this._canDraw.isActive = false;
+            this._canDraw.setAttribute("showhandcursor",false);
+            this._canDraw._text.setAttribute("text",canvas.getLabelName(681));
+            this._canDrawModerator.setAttribute("visibility","hidden");
+		} else {
+			if (refObj != null && refObj.canDraw) {
+                this._canDraw.setAttribute("visibility","visible");
+                this._canDraw.isActive = true;
+                this._canDraw.setAttribute("showhandcursor",true);
+                this._canDraw._text.setAttribute("text",canvas.getLabelName(612));
+                this._canDrawModerator.setAttribute("visibility","hidden");
+            } else {
+                this._canDraw.setAttribute("visibility","hidden");
+                this._canDrawModerator.setAttribute("visibility","visible");
+            }
+		}
+		
+		if (this.isMod) {
+			this._allowScreen.setAttribute("visibility","visible");
+            this._allowScreen.isActive = false;
+            this._allowScreen.setAttribute("showhandcursor",false);
+            this._allowScreen._text.setAttribute("text",canvas.getLabelName(1069));
+            
+            this._allowRemote.setAttribute("visibility","visible");
+            this._allowRemote.isActive = false;
+            this._allowRemote.setAttribute("showhandcursor",false);
+            this._allowRemote._text.setAttribute("text",canvas.getLabelName(1083));
+
+            this._allowExclusiveAudio.setAttribute("visibility","visible");
+            this._allowExclusiveAudio.isActive = false;
+            this._allowExclusiveAudio.setAttribute("showhandcursor",false);
+            this._allowExclusiveAudio._text.setAttribute("text",canvas.getLabelName(1083));
+            
+            this._denyScreen.setAttribute("visibility","hidden");
+            this._denyRemote.setAttribute("visibility","hidden");
+            this._denyExclusiveAudio.setAttribute("visibility","hidden");
+		} else {
+			
+			if ($debug) Debug.write("refObj.canShare :: ", (refObj != null && refObj.canShare));
+		
+			if (refObj != null && refObj.canShare) {
+    			this._allowScreen.setAttribute("visibility","visible");
+                this._allowScreen.isActive = true;
+                this._allowScreen.setAttribute("showhandcursor",true);
+                this._allowScreen._text.setAttribute("text",canvas.getLabelName(1068));
+                this._denyScreen.setAttribute("visibility","hidden");
+			} else {
+				this._allowScreen.setAttribute("visibility","hidden");
+				this._denyScreen.setAttribute("visibility","visible");
+			}
+			
+			if (refObj != null && refObj.canRemote) {
+    			this._allowRemote.setAttribute("visibility","visible");
+                this._allowRemote.isActive = true;
+                this._allowRemote.setAttribute("showhandcursor",true);
+                this._allowRemote._text.setAttribute("text",canvas.getLabelName(1079));
+                this._denyRemote.setAttribute("visibility","hidden");
+			} else {
+				this._allowRemote.setAttribute("visibility","hidden");
+				this._denyRemote.setAttribute("visibility","visible");
+			}
+
+            if (refObj != null && refObj.canGiveAudio) {
+    			this._allowExclusiveAudio.setAttribute("visibility","visible");
+                this._allowExclusiveAudio.isActive = true;
+                this._allowExclusiveAudio.setAttribute("showhandcursor",true);
+                this._allowExclusiveAudio._text.setAttribute("text",canvas.getLabelName(1425));
+                this._denyExclusiveAudio.setAttribute("visibility","hidden");
+            } else {
+				this._allowExclusiveAudio.setAttribute("visibility","hidden");
+				this._denyExclusiveAudio.setAttribute("visibility","visible");
+            }
+		}
+		
+		if (refObj != null) {
+			this._allowDevice.setAttribute("visible", !refObj.isBroadcasting || !refObj.canVideo);
+			this._denyDevice.setAttribute("visible", refObj.isBroadcasting && refObj.canVideo);
+
+			this._allowAudio.setAttribute("visible", !refObj.isBroadcasting);
+			this._denyAudio.setAttribute("visible", refObj.isBroadcasting);
+		}
+		
+		if ($debug) Debug.write("Set micMuted ", (refObj != null && refObj.micMuted));
+		
+		if (refObj != null && refObj.micMuted) {
+			this._muteDevice.setAttribute("visibility","hidden");
+            this._unMuteDevice.setAttribute("visibility","visible");
+		} else {
+			this._muteDevice.setAttribute("visibility","visible");
+            this._unMuteDevice.setAttribute("visibility","hidden");
+		}
+		
+		this._start_private_chat_rsc.setAttribute('visible'
+			, (canvas.currentRoomObj.hideChat == null || !canvas.currentRoomObj.hideChat)
+				&& (refObj != null && refObj.publicSID != canvas.publicSID));
+	]]>
+	</handler>
+        
+    <miniIcons name="_isMod" x="0" width="16" showhandcursor="true"
+    		   resource="participants_isMod_rsc" height="16">
+        <handler name="onclick">
+            <![CDATA[
+            
+                if (parent.isSuperModerator) {
+                    new lz.labelerrorPopup(canvas.main_content._content.inner,{errorlabelid:838});
+                    return;
+                }
+            
+                //if the label is set and this is a Moderator then this user should
+                //allow the click event => the click event will trigger
+                //this user away from beeing able to draw on the whiteboard
+                if (canvas.ismoderator) {
+                    //Do it 
+                    if ($debug) Debug.write("Do Remove It");
+                    if (parent.parent.parent.refObj.publicSID != canvas.publicSID) {
+                        hib.removeModerator.publicSIDOfNewModerator = parent.parent.parent.refObj.publicSID;
+                        hib.removeModerator.doCall();
+                    } else {
+                    	new lz.labelerrorPopup(canvas,{errorlabelid:682});
+                    }
+                }
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="675" />
+    </miniIcons>
+    
+    <miniIcons name="_isModAddbutton" opacity="0.5" x="0" showhandcursor="true"
+    		   width="16" resource="participants_isMod_rsc" height="16">
+        <handler name="onclick">
+            <![CDATA[
+                //if the label is set and this is a Moderator then this user should
+                //allow the click event => the click event will trigger
+                //this user away from beeing able to draw on the whiteboard
+                if (canvas.ismoderator) {
+                    //Do it 
+                    if ($debug) Debug.write("Do Add It");
+                    hib.addModerator.publicSIDOfNewModerator = parent.parent.parent.refObj.publicSID;
+                    hib.addModerator.doCall();
+                }
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="676" />
+    </miniIcons>
+        
+    <miniIcons name="_canDraw" x="20" width="16" resource="participants_allow_drawing_rsc"
+               height="16" showhandcursor="false" >
+    	<attribute name="isActive" value="true" type="boolean" />
+        <handler name="onclick">
+            <![CDATA[
+                //if the label is set and this is a Moderator then this user should
+                //allow the click event => the click event will trigger
+                //this user away from beeing able to draw on the whiteboard
+                if (canvas.ismoderator && this.isActive) {
+                    //Do it 
+                    if ($debug) Debug.write("Do add draw to it");
+                    canvas.thishib.setCanDraw.publicSID = parent.parent.parent.refObj.publicSID;
+                    canvas.thishib.setCanDraw.canDraw = false;
+                    canvas.thishib.setCanDraw.doCall();
+                }
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="612" />
+    </miniIcons>
+    
+    <miniIcons name="_canDrawModerator" x="20" width="16" opacity="0.5"
+               resource="participants_allow_drawing_rsc" height="16" showhandcursor="true">
+        <handler name="onclick">
+            //Do it 
+            if (canvas.ismoderator) {
+                if ($debug) Debug.write("Do it");
+                canvas.thishib.setCanDraw.publicSID = parent.parent.parent.refObj.publicSID;
+                canvas.thishib.setCanDraw.canDraw = true;
+                canvas.thishib.setCanDraw.doCall();
+            }
+        </handler>
+        <labelTooltip labelid="611" />
+    </miniIcons>
+    
+    <miniIcons name="_allowScreen" x="40" width="16" height="16" 
+               resource="screen_allow_rsc" showhandcursor="true">
+    	<attribute name="isActive" value="true" type="boolean" />
+        <handler name="onclick">
+        	<![CDATA[
+                if ($debug) Debug.write("Deny Screen: ",parent.parent.parent.refObj.publicSID);
+                if (canvas.ismoderator && this.isActive) {
+                	canvas.thishib.setCanShare.publicSID = parent.parent.parent.refObj.publicSID;
+                    canvas.thishib.setCanShare.canShare = false;
+                    canvas.thishib.setCanShare.doCall();
+                }
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="1068" />
+    </miniIcons>
+    
+    <miniIcons name="_denyScreen" x="40" width="16" height="16"  opacity="0.5"
+               resource="screen_allow_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("Allow Screen: ",parent.parent.parent.refObj.publicSID);
+            if (canvas.ismoderator) {
+                canvas.thishib.setCanShare.publicSID = parent.parent.parent.refObj.publicSID;
+                canvas.thishib.setCanShare.canShare = true;
+                canvas.thishib.setCanShare.doCall();
+            }
+        </handler>
+        <labelTooltip labelid="1067" />
+    </miniIcons>  
+    
+     <miniIcons name="_allowRemote" x="60" width="16" height="16" 
+               resource="remote_allow_rsc" showhandcursor="true">
+    	<attribute name="isActive" value="true" type="boolean" />
+        <handler name="onclick">
+        	<![CDATA[
+                if ($debug) Debug.write("Deny Remote: ",parent.parent.parent.refObj.publicSID);
+                if (canvas.ismoderator && this.isActive) {
+                	canvas.thishib.setCanRemote.publicSID = parent.parent.parent.refObj.publicSID;
+                    canvas.thishib.setCanRemote.canRemote = false;
+                    canvas.thishib.setCanRemote.doCall();
+                }
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="1079" />
+    </miniIcons>
+    
+    <miniIcons name="_denyRemote" x="60" width="16" height="16"  opacity="0.5"
+               resource="remote_allow_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("Allow Remote: ",parent.parent.parent.refObj.publicSID);
+            if (canvas.ismoderator) {
+                canvas.thishib.setCanRemote.publicSID = parent.parent.parent.refObj.publicSID;
+                canvas.thishib.setCanRemote.canRemote = true;
+                canvas.thishib.setCanRemote.doCall();
+            }
+        </handler>
+        <labelTooltip labelid="1078" />
+    </miniIcons>        
+    
+    <miniIcons name="_allowAudio" x="80" width="16" height="16" resource="a_allow_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("ALLOW: ",parent.parent.parent.refObj.publicSID);
+            canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = parent.parent.parent.refObj.publicSID;
+            canvas.thishib.setBroadCastingFlag.canVideo = false;
+            canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+            canvas.thishib.setBroadCastingFlag.doCall(); 
+        </handler>
+        <labelTooltip labelid="1604" />
+    </miniIcons>
+    <miniIcons name="_denyAudio" x="80" width="16" height="16" resource="a_deny_rsc" opacity="0.5" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("ALLOW: ",parent.parent.parent.refObj.publicSID);
+            canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = parent.parent.parent.refObj.publicSID;
+            canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = false;
+            canvas.thishib.setBroadCastingFlag.doCall(); 
+        </handler>
+        <labelTooltip labelid="1605" />
+    </miniIcons>
+    <miniIcons name="_allowDevice" x="100" width="16" height="16" resource="av_allow_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("ALLOW: ",parent.parent.parent.refObj.publicSID);
+            canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = parent.parent.parent.refObj.publicSID;
+            canvas.thishib.setBroadCastingFlag.canVideo = true;
+            canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+            canvas.thishib.setBroadCastingFlag.doCall(); 
+        </handler>
+        <labelTooltip labelid="683" />
+    </miniIcons>
+    
+    <miniIcons name="_denyDevice" x="100" width="16" height="16" resource="av_deny_rsc" opacity="0.5" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("ALLOW: ",parent.parent.parent.refObj.publicSID);
+            canvas.thishib.setBroadCastingFlag.publicSIDOfNewModerator = parent.parent.parent.refObj.publicSID;
+            canvas.thishib.setBroadCastingFlag.canVideo = false;
+            canvas.thishib.setBroadCastingFlag.isAllowedToBroadCastAV = true;
+            canvas.thishib.setBroadCastingFlag.doCall(); 
+        </handler>
+        <labelTooltip labelid="684" />
+    </miniIcons>
+    
+    <miniIcons name="_muteDevice" x="120" width="16" height="16" resource="mute_btn_rsc" 
+    				opacity="0.5" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("mute: ",parent.parent.parent.refObj.publicSID);
+            canvas._videocontainer._videoviewcontent.muteSound(parent.parent.parent.refObj.publicSID, true);
+        </handler>
+        <labelTooltip labelid="1384" />
+    </miniIcons>
+    
+    <miniIcons name="_unMuteDevice" x="120" width="16" height="16" resource="unmute_btn_rsc" 
+    		   showhandcursor="true" visibility="hidden">
+        <handler name="onclick">
+            if ($debug) Debug.write("unmute: ",parent.parent.parent.refObj.publicSID);
+            canvas._videocontainer._videoviewcontent.muteSound(parent.parent.parent.refObj.publicSID, false);
+        </handler>
+        <labelTooltip labelid="1385" />
+    </miniIcons>
+
+    <miniIcons name="_allowExclusiveAudio" x="136" width="16" height="16"
+               resource="participants_exclusive_audio_rsc" showhandcursor="true">
+    	<attribute name="isActive" value="true" type="boolean" />
+        <handler name="onclick">
+        	<![CDATA[
+                if ($debug) Debug.write("Deny Give Exclusive Audio: ",parent.parent.parent.refObj.publicSID);
+                if (canvas.ismoderator && this.isActive) {
+                    canvas.thishib.setCanGiveAudio.sendValue(parent.parent.parent.refObj.publicSID,false);
+                }
+            ]]>
+        </handler>
+        <labelTooltip name="_text" labelid="1425" />
+    </miniIcons>
+
+    <miniIcons name="_denyExclusiveAudio" x="136" width="16" height="16" opacity="0.5"
+               resource="participants_exclusive_audio_rsc" showhandcursor="true">
+        <handler name="onclick">
+            if ($debug) Debug.write("Allow Give Exclusive Audio: ",parent.parent.parent.refObj.publicSID);
+            if (canvas.ismoderator) {
+                canvas.thishib.setCanGiveAudio.sendValue(parent.parent.parent.refObj.publicSID,true);
+            }
+        </handler>
+        <labelTooltip labelid="1424" />
+    </miniIcons>
+    
+	<miniIcons name="_kickUser" x="154" width="16" height="16"
+               resource="kick_user_rsc" showhandcursor="true">
+        <handler name="onclick">
+        	
+        	if (parent.parent.parent.refObj.publicSID == canvas.publicSID) {
+				new lz.labelerrorPopup(canvas.main_content._content.inner,{
+             				errorlabelid:1214
+        				});
+				return;
+			}
+        	
+        	if (parent.isSuperModerator) {
+                new lz.labelerrorPopup(canvas.main_content._content.inner,{errorlabelid:1217});
+                return;
+            }
+        	
+            if ($debug) Debug.write("USER Kick: ",parent.parent.parent.refObj.publicSID);
+            new lz.confirmationSingle(canvas.main_content._content.inner,{
+                                           labelid:1216,labeliderror:1215,
+                                           refObj:this,showCheckBox:false});
+            
+        </handler>
+        
+        <method name="sendConfirmation" args="yesno" >
+            this.kickUserByPublicSID.publicSID = parent.parent.parent.refObj.publicSID;
+            this.kickUserByPublicSID.doCall();
+        </method>
+        
+        <netRemoteCallHib name="kickUserByPublicSID" funcname="userservice.kickUserByPublicSID" 
+                          remotecontext="$once{ canvas.thishib }" >    
+            <attribute name="publicSID" value="" type="string" />  
+            <netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+            <netparam><method name="getValue"> return parent.publicSID; </method></netparam>
+            <handler name="ondata" args="value">
+                if ($debug) Debug.write("kickUserByPublicSID: ",value);
+            </handler>
+        </netRemoteCallHib> 
+        
+        <labelTooltip labelid="1213" />
+    </miniIcons>              
+    
+	<miniIcons name="_start_private_chat_rsc" x="172" y="2" width="16" height="16" resource="start_private_chat_rsc" showhandcursor="true">
+		
+		<handler name="onclick">
+			var refObj = parent.parent.parent.refObj;
+			if ($debug) Debug.write("Start Private Chat: ", refObj);
+			if (refObj.publicSID == canvas.publicSID) {
+				new lz.labelerrorPopup(canvas.main_content._content.inner
+					,{errorlabelid:1495});
+				return;
+			}
+			canvas._currentChatPanel.addChat(refObj);
+		</handler>
+		<labelTooltip labelid="1493" />
+	</miniIcons>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/restricted/restrictedUserList.lzx b/WebContent/src/modules/conference/restricted/restrictedUserList.lzx
new file mode 100644
index 0000000..469e42e
--- /dev/null
+++ b/WebContent/src/modules/conference/restricted/restrictedUserList.lzx
@@ -0,0 +1,326 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+ 
+<class name="restrictedUserList" extends="view" width="$once{ parent.width }" 
+       height="${ parent.height-34 }">
+
+    <!--- holds a references to the videoview which is broadcasting -->
+    <attribute name="broadCastViewRef" value="null" />
+    
+    <!--- colors for each user -->
+    <attribute name="colorArray" value="null" />
+    
+    <attribute name="allowUserQuestions" value="true" type="boolean" />
+
+	<attribute name="showsVideoInSeparateComponent" value="true" type="boolean" />
+	<attribute name="timeout" value="500" type="number"/>
+	<attribute name="batchSize" value="10" type="number"/>
+	<attribute name="counter" value="0" type="number"/>
+	<attribute name="batchCreateVideoDelegate" type="object" value="null"/>
+	<attribute name="initClients" type="object" />
+    
+    <handler name="onallowUserQuestions" args="bool">
+        if (bool != null) {
+            if (!bool) {
+                this._participants._applyAndStatusIcons.destroy();
+            }
+        }
+    </handler>
+    
+    <handler name="oninit">
+        //set modus
+        canvas.thishib.modus = "audience";
+        
+        //set reference, this reference will be cleared at *ontabcontenctleave* event
+        canvas._videocontainer=this;
+        
+        // Reconnect User to its Room Id
+        canvas.thishib.userScope = canvas.thishib.currentroomid;
+        var src = hib.getUrl();
+        
+        if( $debug ) Debug.write("videoContainer: canvas.thishib: ",canvas.thishib.src,canvas.thishib);
+        
+        if (canvas.thishib.src != src) {
+            canvas.thishib.setAttribute('src',src);
+            
+			if (canvas.wicketsid == null){            
+	            canvas.thishib.reconnectionAction = true;
+	            canvas.thishib.reconnectObjRef = this;
+	            canvas.thishib.disconnect();
+            } else {
+            	this.reconnectSuccess();
+            }
+        } else {
+            //The user is already in the correct Scope
+            this.reconnectSuccess();
+        }
+    </handler>
+
+    <commonVideoComponentAdapter name="_videoviewcontent"/>
+
+    <method name="reconnectSuccess">
+        if ($debug) Debug.write("User Reloged In");
+        //Send to SWF10 video-container to connect on the conference room url
+        //and wait for the as3ConnectionSuccess-Event
+        this._videoviewcontent.reconnectSuccess(false);
+    </method>
+
+    <!---
+        We need to wait till the video-container / as3 app has the connection established
+        otherwise it can happen that the video tries to start playing before the rtmp-connection
+        was established
+     -->
+    <method name="as3ConnectionSuccess">
+    	if ($debug) Debug.write("as3ConnectionSuccess continue loading");
+    	//set default values and get already availible streams
+    	//it can happen that if you click to exit the room the views are not
+    	//not cleaned up yet and you receive this event from the LocalConnection
+    	if (this["getRoomModeratorsByRoomId"]) {
+            this.getRoomModeratorsByRoomId.doCall();
+    	}
+    </method>
+
+    <netRemoteCallHib name="getRoomModeratorsByRoomId" funcname="conferenceservice.getRoomModeratorsByRoomId"
+                      remotecontext="$once{ canvas.thishib }" >  
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>    
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("getRoomModeratorsByRoomId: ",value);
+                canvas.becomeSuperModerator = false;
+                
+                parent.setRoomValues.applyDefaultModeration = canvas.becomemoderator;
+                canvas.becomeSuperModerator = canvas.becomemoderator;
+                
+                if (!canvas.becomeSuperModerator) {
+                    for (var i=0;i<value.length;i++) {
+                        
+                        if (value[i].user.user_id == canvas.user_id) {
+                            parent.setRoomValues.applyDefaultModeration = true;
+                            canvas.becomeSuperModerator = value[i].isSuperModerator;
+                            if ($debug) Debug.info("Make this User to an Moderator");
+                            break;
+                        }
+                        
+                    }
+                }
+                
+                if ($debug) Debug.write("canvas.becomemoderator: ",canvas.becomemoderator);
+                if ($debug) Debug.write("canvas.becomeSuperModerator: ",canvas.becomeSuperModerator);
+                
+                canvas.currentusercolor = canvas.getColorForUser();
+                
+                var organisation_id = 1;
+            
+                if ($debug) Debug.write(hib.userobject); 
+                if ($debug) Debug.write(hib.currentdomainObj); 
+                
+                if (hib.currentdomainObj != null) {
+                    organisation_id = hib.currentdomainObj.organisation_id
+                }
+                
+                this.parent.setRoomValues.organisation_id = organisation_id;
+                this.parent.setRoomValues.doCall();
+            
+            ]]>
+        </handler>
+    </netRemoteCallHib>     
+
+    <netRemoteCallHib name="setRoomValues" funcname="setRoomValues" remotecontext="$once{ canvas.thishib }" >   
+        <attribute name="applyDefaultModeration" value="false" type="boolean" />
+        <attribute name="organisation_id" value="0" type="number" />
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>
+        <netparam><method name="getValue">return parent.applyDefaultModeration;</method></netparam>
+        <netparam><method name="getValue">return canvas.becomeSuperModerator;</method></netparam>
+        <netparam><method name="getValue">return parent.organisation_id;</method></netparam>
+        <netparam><method name="getValue">return canvas.currentusercolor;</method></netparam>
+        <handler name="ondata" args="roomStatus">
+            <![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            //if ($debug) Debug.write("setRoomValues1: ",value);
+            //if ($debug) Debug.write("setRoomValues2: ",hib.currentroomid);
+            
+            //if ($debug) Debug.write("+++++++++++++++++ getClientListScope : ",value);
+            
+            if (roomStatus.roomFull) {
+                canvas.thishib.showFullMessage = true;
+                canvas.thishib.disconnect();
+            }
+            
+            if (roomStatus.browserStatus.browserInited) {
+                var tObj = new Object();
+                tObj[0] = "newBrowserURL";
+                tObj[1] = roomStatus.browserStatus.currentURL;
+                canvas.startBrowser(tObj);
+            }
+            
+            var value = roomStatus.clientList;
+            
+            for (var i = 0; i < value.length; ++i){
+                if ( value[i].streamid == canvas.streamid ) {
+                    value[i].selfItem = true;
+                    canvas.isAllowedToDraw = value[i].canDraw;
+                } else {
+                    value[i].selfItem = false;
+                }
+				parent.addItemInitial(value[i]);
+			}
+			parent.batchCreateVideoDelegate = new LzDelegate(parent, "batchCreateVideo");
+			parent.counter = 0;
+			parent.initClients = value;
+			lz.Timer.addTimer(parent.batchCreateVideoDelegate, 0);
+            
+            //Render and Show User-List
+            parent._participants.sortAndRenderList();
+            
+            if (canvas._currentChatPanel.visible) {
+				canvas._currentChatPanel.toggleopen();
+			}
+		]]>
+        </handler>  
+    </netRemoteCallHib>
+
+	<method name="batchCreateVideo" args="none">
+	<![CDATA[
+		if ($debug) Debug.write("interval 0 :: ", counter, initClients.length);
+		if (!batchCreateVideoDelegate) {
+			return;
+		}
+		var cl = new Array();
+		for (var i = 0; i < batchSize; ++i) {
+			cl[i] = initClients[counter++];
+			if (counter == initClients.length) {
+				break;
+			}
+		}
+		if ($debug) Debug.write("interval:: ", counter, cl.length);
+		this._videoviewcontent.batchCreateVideo(canvas.streamid, cl);
+		if (counter == initClients.length) {
+			lz.Timer.removeTimer(batchCreateVideoDelegate);
+			batchCreateVideoDelegate = null;
+			
+			//this content must be inited _after_ setting the default values
+			canvas.thishib.getCurrentModeratorList.doCall();
+			//FIXME Issue-1076
+			canvas.thishib.checkLzRecording.doCall();
+		} else {
+			lz.Timer.resetTimer(batchCreateVideoDelegate, timeout);
+		}
+	]]>
+	</method>
+
+    <!-- invoked if another client logs into the room 
+    after choosing devices -->     
+    <method name="setAVSettingsToClient" args="rcl">
+        this._videoviewcontent.setAVSettingsToClient(rcl);
+    </method> 
+
+	<method name="addItemInitial" args="object">
+	<![CDATA[
+		//if ($debug) Debug.write("initializeStreams addItem: ", object);
+		this._participants.initialAddItem(object);
+	]]>
+	</method>
+
+    <method name="receiveExclusiveAudioFlag" args="publicSID">
+    <![CDATA[
+        var vList = this._participants._table.renderList;
+        for (var i=0;i<vList.length;i++) {
+            var item = vList[i];
+            var rcl = new Object();
+
+            rcl.publicSID = item.publicSID;
+            rcl.micMuted = !(publicSID == item.publicSID);
+            canvas.setMuteStatus(rcl);
+        }
+    ]]>
+    </method>
+
+
+	<method name="addItem" args="connectedSince,isMod,streamid,username,userroom,formatedDate,position,color,object">
+	<![CDATA[
+		if ($debug) Debug.write("initializeStreams addItem: ",connectedSince,isMod,streamid,username,formatedDate);
+		
+		//Do init only in case this stream is NOT the same as we are
+		if (streamid != canvas.streamid) {
+			this._videoviewcontent.createVideo(object.publicSID, object.firstname+' '+object.lastname, object.broadCastID, object.avsettings, -1, object);
+		}
+		this._participants.addItem(object);
+	]]>
+	</method>
+    
+    <method name="addClientItem" args="connectedSince,isMod,streamid,username,room_id,formatedDate,position,color,object">
+        <![CDATA[
+        if ($debug) Debug.write("### initializeStreams addClientItem: ",connectedSince,isMod,streamid,username,room_id,formatedDate);
+
+        if (canvas.publicSID != object.publicSID){
+            this._videoviewcontent.createVideoObject(object.publicSID, false, -1, object);
+        }
+
+        //Do Add it anyway
+        this._participants.addItem(object);
+        ]]>
+    </method>
+        
+    <!--
+        invoked whenever a User starts to Stream Video in this Room, 
+        interviewPodId has only a meaning in the Room Type Interview
+     -->        
+    <method name="startStream" args="publicSID,broadcastId,firstname,lastname,interviewPodId,VWidth,VHeight">
+        this._videoviewcontent.startStream(publicSID,broadcastId,firstname,lastname,interviewPodId,VWidth,VHeight);
+    </method>
+
+    <method name="setSpeakingByPos" args="publicSID,bool">
+        this._videoviewcontent.setSpeakingByPos(publicSID, bool);
+    </method>
+
+    <method name="closeStreamClient" args="publicSID">
+        this._videoviewcontent.closeStreamClient(publicSID);
+    </method>
+
+    <method name="resetAllValues">
+        this._videoviewcontent.resetAllValues();
+    </method>
+    
+    <method name="removeVideoByUser" args="userObject">
+        this._videoviewcontent.removeVideoByUser(userObject.publicSID);
+    </method>
+    
+    <!--- 
+        stops the streaming but and destroys the view
+        @param int broadcastId broadcastId
+     -->
+    <method name="disconnectclient" args="publicSID">
+        this._videoviewcontent.disconnectclient(publicSID);
+        this._participants.disconnectclient(publicSID);
+    </method>
+
+    <method name="updateMuteStatusVideoView" args="roomClient">
+        this._videoviewcontent.updateMuteStatusVideoView(roomClient);
+    </method>
+    
+    <restrictedUserListInner name="_participants" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/restricted/restrictedUserListInner.lzx b/WebContent/src/modules/conference/restricted/restrictedUserListInner.lzx
new file mode 100644
index 0000000..d077a93
--- /dev/null
+++ b/WebContent/src/modules/conference/restricted/restrictedUserListInner.lzx
@@ -0,0 +1,521 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="restrictedUserListInner" extends="baseRoomInnerList"  
+       width="$once{ parent.width }" height="${ parent.height }" >
+    
+    <attribute name="selectedItem" value="null" />
+    
+    <attribute name="listType" value="eventUserListTable" type="string" />
+    
+    <attribute name="sortType" value="alphabetical" type="string" />
+    
+	<handler name="oninit">
+		this.initList();
+	</handler>
+    
+	<method name="initialAddItem" args="object">
+	<![CDATA[
+		if ($debug) Debug.write("restrictedUserListInner::initialAddItem : ",object.publicSID);
+		
+		object.firstname = object.firstname == null ? "" : object.firstname;
+		object.lastname = object.lastname == null ? "" : object.lastname;
+		if (object.isSuperModerator) {
+			object.lastname += " *";
+		}
+		
+		//Add item to list
+		if (this._table.renderList == null) {
+			this._table.renderList = new Array();
+		}
+		//Check for duplicates
+		var list = this._table.renderList;
+		for (var i = 0; i < list.length; ++i) {
+			if (list[i].publicSID == object.publicSID) {
+				//if ($debug) Debug.warn("Already on List, do not add twice");
+				return;
+			}
+		}
+		
+		object.isSelected = false;
+		this._table.renderList.push(object);
+	]]>
+	</method>
+    
+	<method name="addItem" args="object">
+	<![CDATA[
+		initialAddItem(object);
+		if ($debug) Debug.write("restrictedUserListInner::addItem: ", object.publicSID);
+		
+		object.selfItem = canvas.publicSID == object.publicSID;
+		this.sortUserList();
+		
+		this._table.scheduleRenderContent();
+		this.moderationPanel.updateIcons();
+	]]>
+	</method>
+    
+    <method name="sortAndRenderList">
+        this.sortUserList();
+        this._table.renderContent();
+    </method>
+    
+	<method name="sortUserList">
+	<![CDATA[
+		if (!this._table.renderList) {
+			return;
+		}
+		if (this.sortType == "alphabetical") {
+			function sortByName(a,b) {
+				if(a.firstname.toLowerCase() < b.firstname.toLowerCase()) return -1;
+				else if(a.firstname.toLowerCase() > b.firstname.toLowerCase()) return 1;
+				else return 0;
+			}
+			this._table.renderList.sort(sortByName);
+		} else {
+			function sortByStreamId(a,b) {
+				if(Number(a.streamid) == Number(b.streamid)) return 0;
+				else if(Number(a.streamid) > Number(b.streamid)) return 1;
+				else return -1;
+			}
+			this._table.renderList.sort(sortByStreamId);
+		}
+	]]>
+	</method>
+    
+    <method name="initList">
+        if ($debug) Debug.write("initList :: restrictedUserListInner");
+    </method>
+    
+    <method name="clearList">
+        if ($debug) Debug.write("clearList :: restrictedUserListInner");
+    </method>
+    
+    <method name="disconnectclient" args="publicSID">
+        <![CDATA[
+           for (var i=0;i<this._table.renderList.length;i++) {
+               if (this._table.renderList[i].publicSID == publicSID) {
+                   this._table.renderList.splice(i,1);
+                   break;
+               }
+           }
+           this._table.renderContent();
+           this.moderationPanel.updateIcons();
+        ]]>
+    </method>
+    
+	<method name="getUserListItemByPublicSID" args="publicSID">
+	<![CDATA[
+		var v = null;
+		var vList = this._table._innerlist._inn._inn.subviews;
+		for (var i = 0; i < vList.length; ++i) {
+			if (vList[i].refObj.publicSID == publicSID) {
+				v = vList[i];
+				break;
+			}
+		}
+		return v;
+	]]>
+    </method>
+    
+    <view name="userStatus" layout="axis:y">
+        <view>
+             <view resource="userstatus_multiframe_rsc" frame="1" />
+             <labelText x="16" labelid="677" />
+        </view>
+        <view>
+             <view resource="userstatus_multiframe_rsc" frame="2" />
+             <labelText x="16" labelid="678" />
+        </view>
+        <view>
+             <view resource="userstatus_multiframe_rsc" frame="3" />
+             <labelText x="16" labelid="679" />
+        </view>
+    </view>
+    
+    <moderationMiniIconsEventUserList name="_applyAndStatusIcons" x="$once{ parent.width-this.width-20 }" y="2" >
+		<handler name="onismoderator" reference="canvas" args="m">
+			this.updateIcons();
+		</handler>
+        <handler name="ondrawAllowStatus" reference="canvas" args="drawObject">
+            this.updateIcons();
+        </handler>
+        <handler name="onexclusiveAudioAllowStatus" reference="canvas" args="rclObject">
+            this.updateIcons();
+        </handler>
+        <handler name="onlastBroadCastingUser" reference="canvas" args="userObject">
+            this.updateIcons();
+        </handler>
+        <handler name="onmicMutedStatusChangedItem" reference="canvas" args="userObject">
+            this.updateIcons();
+        </handler>
+    </moderationMiniIconsEventUserList>
+    
+    
+    <turnOverListOrderedPaged name="_table" showTopBar="false" x="1"
+             height="${ parent.height-30-parent.moderationPanel.height }" 
+             y="30" itemHeight="40" listLabelId="1001" headerHeight="0"
+             listItemName="restrictedUserListItem" showHScrollbar="hidden"
+             multiselect="false" width="268">
+        
+        <attribute name="currentSelectedIndex" value="null" />
+        
+        <attribute name="resizeDelegate" value="null"/>
+        <attribute name="resizeDelegateStarted" value="false" type="boolean"/>
+        
+        <attribute name="isLoaded" value="false" type="boolean"/>
+        
+        <attribute name="renderDelegate" value="null"/>
+        <attribute name="renderDelegateStarted" value="false" type="boolean"/>
+        
+        <handler name="onheight" args="h">
+        	if (this.isLoaded) {
+        		if ($debug) Debug.write("isLoaded True onheight ",h);
+            	if (!this.resizeDelegateStarted) {
+            		this.resizeDelegateStarted = true;
+            		lz.Timer.addTimer( this.resizeDelegate, 1000 );
+            	} else {
+            		lz.Timer.resetTimer( this.resizeDelegate, 1000 );
+            	}
+        	}
+        </handler>
+        
+        <handler name="oninit">
+        	this.resizeDelegate = new LzDelegate( this, "renderByHeightChange" );
+        	this.renderDelegate = new LzDelegate( this, "renderByNewUser" );
+            this.addHeaderItem(1001,260);
+        </handler>
+        
+        <method name="scheduleRenderContent">
+        	if ($debug) Debug.warn("scheduleRenderContent ");
+        	if (!this.renderDelegateStarted) {
+                this.renderDelegateStarted = true;
+                lz.Timer.addTimer( this.renderDelegate, 1000 );
+            } else {
+            	if ($debug) Debug.warn("More then one user was arriving within 1 Second - Postpone the Rendering to prevent too much reloading");
+                lz.Timer.resetTimer( this.renderDelegate, 1000 );
+            }
+        </method>
+        
+        <method name="renderByNewUser" args="refObj">
+        	this.renderDelegateStarted = false;
+        	this.renderContent();
+        </method>
+        
+        <method name="renderByHeightChange" args="refObj">
+        	
+        	if ($debug) Debug.write("..:: renderByHeightChange ::..",refObj);
+        	
+        	lz.Timer.removeTimer( this.resizeDelegate );
+        	this.resizeDelegateStarted = false;
+        	
+        	this.clearList();
+        	this._innerlist._inn.initItems(this.listItemName);
+        	
+        	this.renderContent();
+        </method>
+        
+        <handler name="onclickedItem" args="refObj">
+            <![CDATA[
+                if ($debug) Debug.write("onclickedItem ",refObj);
+                
+                if (this.currentSelectedIndex != null) {
+                    this.renderList[this.currentSelectedIndex]["isselected"] = false;
+                }
+                
+                this.currentSelectedIndex = refObj.itemId;
+                this.renderList[refObj.itemId]["isselected"] = true;
+                
+                var list = this._innerlist._inn._inn;
+                for (var i=0;i<list.subviews.length;i++){
+                    list.subviews[i].deselect();
+                    list.subviews[i].hideModeratorIcons();
+                }
+                
+                refObj.select();
+                refObj.initModeratorIcons();
+            ]]>
+        </handler>
+        
+        <method name="renderContent">
+            <![CDATA[
+                this.isLoaded = true;
+                var list = this._innerlist._inn._inn;
+                
+                if (this.renderList == null) {
+                	this.renderList = new Array();
+                }
+                //this.renderList = records;
+                var records = this.renderList;
+                this._innerlist._inn.setAttribute("y",0);
+                this._innerlist._inn._inn.setAttribute("height",records.length*this.itemHeight);
+                this._innerlist._inn.resetItems();
+                
+                if ($debug) Debug.write(":: renderContent ::",this.renderList.length,list.subviews.length);
+                
+                this._records.setAttribute("text",records.length);
+                
+                for (var i=0;i<list.subviews.length;i++){
+                    if (records.length > i) {
+                        
+                        list.subviews[i].setAttribute("clickable",true);
+                        list.subviews[i].refObj = records[i];
+                        
+                        if (records[i]["isselected"] && records[i].isselected) {
+                            list.subviews[i].isselected = true;
+                            list.subviews[i].onmouseout.sendEvent();
+                            list.subviews[i].initModeratorIcons();
+                        } else {
+                            list.subviews[i].isselected = false;
+                            list.subviews[i].onmouseout.sendEvent();
+                            list.subviews[i].hideModeratorIcons();
+                        }
+                        
+                        list.subviews[i].setAttribute("user_id",records[i].user_id);
+                        list.subviews[i].setAttribute("firstname",records[i].firstname);
+                        list.subviews[i].setAttribute("isSuperModerator",records[i].isSuperModerator);
+                        list.subviews[i].setAttribute("lastname",records[i].lastname);
+                        list.subviews[i].setAttribute("connectedSince",records[i].connectedSince);
+                        list.subviews[i].setAttribute("canDraw",records[i].canDraw);
+                        list.subviews[i].setAttribute("canShare",records[i].canShare);
+                        list.subviews[i].setAttribute("canRemote",records[i].canRemote);
+                        list.subviews[i].setAttribute("canGiveAudio",records[i].canGiveAudio);
+                        list.subviews[i].setAttribute("micMuted",records[i].micMuted);
+                        list.subviews[i].setAttribute("isMod",records[i].isMod);
+                        list.subviews[i].isBroadcasting = records[i].isBroadcasting;
+                        list.subviews[i].setAttribute("selfItem",records[i].selfItem);
+                        list.subviews[i].streamid = records[i].streamid;
+                        list.subviews[i].setAttribute("username",records[i].username);
+                        list.subviews[i].setAttribute("formatedDate",records[i].formatedDate);
+                        
+                        list.subviews[i].setAttribute("itemId",i);
+                        
+                    } else {
+                        
+                        list.subviews[i].refObj = null;
+                        
+                        list.subviews[i].isselected = false;
+                        list.subviews[i].onmouseout.sendEvent();
+                        list.subviews[i].hideModeratorIcons();
+                        
+                        list.subviews[i].setAttribute("user_id","");
+                        list.subviews[i].setAttribute("firstname","");
+                        list.subviews[i].setAttribute("isSuperModerator","");
+                        list.subviews[i].setAttribute("lastname","");
+                        list.subviews[i].setAttribute("connectedSince","");
+                        list.subviews[i].setAttribute("canDraw",false);
+                        list.subviews[i].setAttribute("canShare",false);
+                        list.subviews[i].setAttribute("canRemote",false);
+                        list.subviews[i].setAttribute("canGiveAudio",false);
+                        list.subviews[i].setAttribute("micMuted",false);
+                        list.subviews[i].setAttribute("isMod",false);
+                        list.subviews[i].isBroadcasting = false;
+                        list.subviews[i].setAttribute("selfItem",false);
+                        list.subviews[i].streamid = "";
+                        list.subviews[i].setAttribute("username","");
+                        list.subviews[i].setAttribute("formatedDate","");
+                        list.subviews[i].setAttribute("itemId","");
+                        
+                        list.subviews[i].setAttribute("clickable",false);
+                    }
+                }
+            ]]>
+        </method>   
+        
+        <handler name="onScrollItem" args="item">
+            <![CDATA[
+                if (this.renderList.length > item.itemId) {
+                    item.setAttribute("clickable",true);
+                    item.refObj = this.renderList[item.itemId];
+                    
+                    if (this.renderList[item.itemId]["isselected"] && this.renderList[item.itemId].isselected) {
+                        item.isselected = true;
+                        item.onmouseout.sendEvent();
+                        item.initModeratorIcons();
+                    } else {
+                        item.isselected = false;
+                        item.onmouseout.sendEvent();
+                        item.hideModeratorIcons();
+                    }
+                    
+                    if ($debug) Debug.write(item.itemId,this.renderList[item.itemId].isMod,this.renderList[item.itemId].publicSID);
+                    
+                    item.setAttribute("user_id",this.renderList[item.itemId].user_id);
+                    item.setAttribute("firstname",this.renderList[item.itemId].firstname);
+                    item.setAttribute("isSuperModerator",this.renderList[item.itemId].isSuperModerator);
+                    item.setAttribute("lastname",this.renderList[item.itemId].lastname);
+                    item.setAttribute("connectedSince",this.renderList[item.itemId].connectedSince);
+                    item.setAttribute("canDraw",this.renderList[item.itemId].canDraw);
+                    item.setAttribute("canShare",this.renderList[item.itemId].canShare);
+                    item.setAttribute("canRemote",this.renderList[item.itemId].canRemote);
+                    item.setAttribute("canGiveAudio",this.renderList[item.itemId].canGiveAudio);
+                    item.setAttribute("micMuted",this.renderList[item.itemId].micMuted);
+                    item.isBroadcasting = this.renderList[item.itemId].isBroadcasting;
+                    item.setAttribute("isMod",this.renderList[item.itemId].isMod);
+                    item.setAttribute("selfItem",this.renderList[item.itemId].selfItem);
+                    item.streamid = this.renderList[item.itemId].streamid;
+                    item.setAttribute("username",this.renderList[item.itemId].username);
+                    item.setAttribute("formatedDate",this.renderList[item.itemId].formatedDate);
+                    
+                    item.setAttribute("itemId",item.itemId);
+                    
+                    item.updateIconByModScroll();
+                        
+                } else {
+                    item.isselected = false;
+                    item.onmouseout.sendEvent();
+                    item.hideModeratorIcons();
+                    
+                    item.refObj = null;
+                    
+                    item.setAttribute("user_id","");
+                    item.setAttribute("firstname","");
+                    item.setAttribute("isSuperModerator","");
+                    item.setAttribute("lastname","");
+                    item.setAttribute("connectedSince","");
+                    item.setAttribute("canDraw",false);
+                    item.setAttribute("canShare",false);
+                    item.setAttribute("canRemote",false);
+                    item.setAttribute("canGiveAudio",false);
+                    item.setAttribute("micMuted",false);
+                    item.setAttribute("isMod",false);
+                    item.isBroadcasting = false;
+                    item.setAttribute("selfItem",false);
+                    item.streamid = ""
+                    item.setAttribute("username","");
+                    item.setAttribute("formatedDate","");
+                    
+                    item.setAttribute("itemId","");
+                    
+                    item.setAttribute("clickable",false);
+                }
+                
+            ]]>
+        </handler>
+        
+    </turnOverListOrderedPaged> 
+       
+    <view name="moderationPanel" clip="true" 
+          height="${ (canvas.ismoderator) ? 40 : 0 }"
+          y="${ parent.height - this.height - 2 }">
+        
+		<handler name="onismoderator" reference="canvas" args="m">
+			if ($debug) Debug.write("###### ismoderator ",m);
+			if (canvas.currentClient) {
+				canvas.currentClient.isMod = m;
+			}
+			this.updateIcons(canvas.currentClient);
+		</handler>
+        
+		<handler name="onmicMutedStatusChangedItem" reference="canvas" args="roomClientObj">
+			updateIcons(roomClientObj);
+		</handler>
+        
+		<handler name="ondrawAllowStatus" reference="canvas" args="drawObject">
+			updateIcons(drawObject);
+		</handler>
+
+		<handler name="onexclusiveAudioAllowStatus" reference="canvas" args="rclObject">
+			updateIcons(rclObject);
+		</handler>
+        
+		<handler name="onlastBroadCastingUser" reference="canvas" args="userObject">
+		<![CDATA[
+			if ($debug) Debug.write(" :: onlastBroadCastingUser :: ");
+			if (!userObject.isBroadcasting) {
+				//Stop Broadcasting and close Dialog
+				//Search, stop and remove video
+				parent.parent.removeVideoByUser(userObject);
+			}
+			updateIcons(userObject);
+		]]>
+		</handler>
+        
+		<method name="updateIcons" args="userObject">
+		<![CDATA[
+			if ($debug) Debug.write(" :: updateIcons :: ", userObject);
+			if (!userObject) return;
+			
+			var vList = parent._table.renderList;
+			for (var i = 0; i < vList.length; ++i) {
+				if (vList[i].publicSID == userObject.publicSID) {
+					if ($debug) Debug.write(" :: updateIcons :: item1 found: ", vList[i]);
+					vList[i].isBroadcasting = userObject.isBroadcasting;
+					vList[i].canDraw = userObject.canDraw;
+					vList[i].canShare = userObject.canShare;
+					vList[i].canRemote = userObject.canRemote;
+					vList[i].canGiveAudio = userObject.canGiveAudio;
+					vList[i].micMuted = userObject.micMuted;
+					break;
+				}
+			}
+			
+			//search for the user and update its drawStatusIcon
+			var vList = parent._table._innerlist._inn._inn.subviews;
+			for (var i = 0; i < vList.length; ++i) {
+				if (vList[i].refObj.publicSID == userObject.publicSID) {
+					if ($debug) Debug.write(" :: updateIcons :: item2 found: ", vList[i]);
+					vList[i].refObj.isBroadcasting = userObject.isBroadcasting;
+					vList[i].isBroadcasting = userObject.isBroadcasting;
+					vList[i].refObj.canDraw = userObject.canDraw;
+					vList[i].canDraw = userObject.canDraw;
+					vList[i].refObj.canShare = userObject.canShare;
+					vList[i].canShare = userObject.canShare;
+					vList[i].refObj.canRemote = userObject.canRemote;
+					vList[i].canRemote = userObject.canRemote;
+					vList[i].refObj.canGiveAudio = userObject.canGiveAudio;
+					vList[i].canGiveAudio = userObject.canGiveAudio;
+					vList[i].refObj.micMuted = userObject.micMuted;
+					vList[i].micMuted = userObject.micMuted;
+					vList[i].updateIconByModScroll();
+					vList[i].updateModeratorIcons();
+					break;
+				}
+			}
+			
+			if (parent._applyAndStatusIcons != null) {
+				parent._applyAndStatusIcons.updateIcons();
+			}
+		]]>
+		</method>
+        
+        <method name="getItemByPublicSID" args="publicSID">
+            <![CDATA[
+                var vList = parent._table._innerlist._inn._inn.subviews;
+                
+                for (var i=0;i<vList.length;i++) {
+                    if (vList[i].refObj.publicSID == publicSID) {
+                        return vList[i];
+                    }
+                }
+                
+                return null;
+            ]]>
+        </method>
+        
+        <labelText labelid="680" width="270" x="0" multiline="true" y="0" />
+    </view>
+
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/restricted/restrictedUserListItem.lzx b/WebContent/src/modules/conference/restricted/restrictedUserListItem.lzx
new file mode 100644
index 0000000..3daba41
--- /dev/null
+++ b/WebContent/src/modules/conference/restricted/restrictedUserListItem.lzx
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="restrictedUserListItem" extends="basePagingListItem" showhandcursor="false" width="254" height="42">
+	
+	<attribute name="connectedSince" value="" type="string" />
+	
+    <attribute name="isMod" value="false" type="boolean" />
+    
+    <attribute name="streamid" value="" type="string" />
+    <attribute name="username" value="" type="string" />
+    <attribute name="userroom" value="" type="string" />
+    <attribute name="formatedDate" value="" type="string" />
+    <attribute name="firstname" value="" type="string" />
+    <attribute name="lastname" value="" type="string" />
+    <attribute name="user_id" value="0" type="number" />
+    <attribute name="refObj" value="null" />
+    
+    <attribute name="isSuperModerator" value="false" type="boolean"/>
+    
+    <attribute name="userpicURL" value="" type="string" />
+    <attribute name="userpicView" value="null" />
+    
+    <attribute name="selfItem" value="false" type="boolean"/>
+    
+    <method name="update" args="obj">
+    	setAttribute('firstname', obj.firstname);
+    	setAttribute('lastname', obj.lastname);
+    	refObj = obj;
+    </method>
+     
+    <handler name="onisMod">
+    	<![CDATA[
+        	if (this.isMod) {
+                this._content.userStatus.setAttribute("frame",3);
+            } else if (this.refObj != null && this.refObj.canDraw) {
+                this._content.userStatus.setAttribute("frame",2);
+            } else {
+                this._content.userStatus.setAttribute("frame",1);
+            }
+        ]]>
+    </handler>
+
+    <handler name="onMute" reference="canvas.thishib.switchMicMuted" args="event">
+        <![CDATA[
+            if ($debug) Debug.write("onMute ", event.publicSID, event.mute);
+            if(this.refObj.publicSID == event.publicSID) {
+                this.refObj.micMuted = event.mute;
+                this.updateModeratorIcons();
+            }
+        ]]>
+    </handler>
+
+	<method name="updateIconByMod">
+		if (this.clickable) {
+        	this.isMod = canvas.getIsModeratorByPublicSID(this.refObj.publicSID);
+        	//if ($debug) Debug.write(" :: updateIconByMod :: ",this.isMod)
+        	if (this.isMod) {
+                this._content.userStatus.setAttribute("frame",3);
+            } else if (this.refObj.canDraw) {
+            	this._content.userStatus.setAttribute("frame",2);
+            } else {
+            	this._content.userStatus.setAttribute("frame",1);
+            }
+		}
+    </method>  
+    
+    <method name="updateIconByModScroll">
+    	if (this.clickable) {
+        	if (this.isMod) {
+                this._content.userStatus.setAttribute("frame",3);
+            } else if (this.refObj.canDraw) {
+            	this._content.userStatus.setAttribute("frame",2);
+            } else {
+            	this._content.userStatus.setAttribute("frame",1);
+            }
+    	}
+    </method>  
+    
+    <method name="initModeratorIcons">
+    	//if ($debug) Debug.write(" :1: initModeratorIcons :: ");
+    	if (canvas.ismoderator) {
+    		//if ($debug) Debug.write(" :2: initModeratorIcons :: ");
+			this._content._iconsModerator.setAttribute("visibility","visible");
+			this._content._iconsModerator.oninit.sendEvent();
+    	}
+    </method>
+    
+    <method name="updateModeratorIcons">
+		if (this._content._iconsModerator.visibility == "visible") {
+            this._content._iconsModerator.oninit.sendEvent();
+		}
+    </method>
+    
+    <method name="hideModeratorIcons">
+    	if (this._content._iconsModerator.visibility == "visible") {
+            this._content._iconsModerator.setAttribute("visibility","hidden");
+    	}
+    </method>
+
+	<method name="userTyping" args="v">
+		this._content._user_typing.setAttribute("visible", v);
+	</method>
+	<view name="_content" width="254">
+		<view name="_contentIsCurrent" visible="${ parent.parent.selfItem }" width="254" height="40" bgcolor="0x7CFC00"/>
+          
+    	<labelText name="_userName" x="2" y="2" text="${ (parent.parent.firstname == null ? '' : parent.parent.firstname) + ' ' + (parent.parent.lastname == null ? '' : parent.parent.lastname) }" />
+    		   
+		<typingIcon name="_user_typing" x="132" y="2" width="30" height="16" visible="false"/>
+		<miniIcons name="_restartDevice" x="220" y="0" width="16" height="16" resource="resyncuser_rsc" showhandcursor="true"
+				visible="${ parent.parent.clickable &amp;&amp; parent.parent.selfItem &amp;&amp; canvas.isBroadCasting }">
+			<handler name="onclick">
+				if ($debug) Debug.write("parent.parent.refObj.publicSID: ",parent.parent.refObj.publicSID);
+				canvas._videocontainer._videoviewcontent.showDevicePopUp(true);
+			</handler>
+			<labelTooltip labelid="610" />
+		</miniIcons>
+		<view name="userStatus" visible="${ parent.parent.clickable }" x="238" frame="1" resource="userstatus_multiframe_rsc" />
+	    	
+	    <moderationMiniIconRestricted name="_iconsModerator" visibility="hidden"/>
+	</view>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/screenSharingAdapter.lzx b/WebContent/src/modules/conference/screenSharingAdapter.lzx
new file mode 100644
index 0000000..24deb35
--- /dev/null
+++ b/WebContent/src/modules/conference/screenSharingAdapter.lzx
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="screenSharingAdapter" extends="node">

+

+	<!---

+		Send via LocalConnection to SWF10 container

+		to show a new screen sharing video

+		@param rcl RoomClient Object

+	 -->

+	<method name="newScreenSharing" args="rcl, h">

+		//Send via LocalConnection to SWF10 container

+		canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "newScreenSharing", [rcl, h]);

+	</method>

+	

+	<!---

+        Send via LocalConnection to SWF10 container

+        to show multiple new screen sharing video

+        @param rcl RoomClient Object Map/list

+     -->

+    <method name="newScreenSharings" args="rcls, h">

+        //Send via LocalConnection to SWF10 container

+        canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "newScreenSharings", [rcls, h]);

+    </method>

+	

+	<!--- 

+		Send via LocalConnection to SWF10 container 

+		to close a single screen sharing session

+		@param rcl RoomClient Object

+	 -->

+	<method name="closeScreenSharing" args="rcl">

+		//Send via LocalConnection to SWF10 container

+		canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "closeScreenSharing", [rcl]);

+	</method>

+	

+	<!--- 

+		Send via LocalConnection to SWF10 container 

+		to close all screen sharing viewer videos

+	 -->

+	<method name="closeAllScreenSharings" >

+		//Send via LocalConnection to SWF10 container

+		if ($debug) Debug.write("closeAllScreenSharings SEND");

+		canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "closeAllScreenSharings", null);

+	</method>

+	

+	<!--- 

+		Send via LocalConnection to SWF10 container 

+		to update the mouse position of a certain screen sharing

+		@param cursorMap Map Object

+	 -->

+	<method name="updateCursorScreenSharing" args="cursorMap">

+		//Send via LocalConnection to SWF10 container

+		canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "updateCursorScreenSharing", [cursorMap]);

+	</method>

+

+</class>

+

+</library>
\ No newline at end of file
diff --git a/WebContent/src/modules/conference/sip/library.lzx b/WebContent/src/modules/conference/sip/library.lzx
new file mode 100644
index 0000000..dc5077f
--- /dev/null
+++ b/WebContent/src/modules/conference/sip/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+

+      http://www.apache.org/licenses/LICENSE-2.0

+

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+

+-->

+<library>

+

+    <include href="sipDialer.lzx" />

+

+</library>

diff --git a/WebContent/src/modules/conference/sip/sipDialer.lzx b/WebContent/src/modules/conference/sip/sipDialer.lzx
new file mode 100644
index 0000000..1457347
--- /dev/null
+++ b/WebContent/src/modules/conference/sip/sipDialer.lzx
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+

+      http://www.apache.org/licenses/LICENSE-2.0

+

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+

+-->

+<library>

+

+<class name="sipDialer" extends="window" bgcolor="gray" width="200">

+    <simplelayout axis="y" spacing="5"/>

+    <labelText labelid="1003"/>

+    <view name="phoneNumber" width="100%">

+        <inputtext name="input" width="$once{parent.width-parent.del.width}" height="20" bgcolor="white"/>

+        <button name="del" x="$once{parent.input.width}" width="30" height="20" onclick="this.del();">

+            ←

+            <method name="del">

+                var t = parent.input.text;

+                if(t.length != 0) {

+                    t = t.substr(0, t.length - 1);

+                    parent.input.setAttribute('text', t);

+                }

+            </method>

+        </button>

+    </view>

+

+    <view name="dialerButtons" align="center">

+        <vbox spacing="5">

+            <hbox spacing="5">

+                <button onclick="parent.parent.parent.parent.dial('1')" width="40">1</button>

+                <button onclick="parent.parent.parent.parent.dial('2')" width="40">2</button>

+                <button onclick="parent.parent.parent.parent.dial('3')" width="40">3</button>

+            </hbox>

+            <hbox spacing="5">

+                <button onclick="parent.parent.parent.parent.dial('4')" width="40">4</button>

+                <button onclick="parent.parent.parent.parent.dial('5')" width="40">5</button>

+                <button onclick="parent.parent.parent.parent.dial('6')" width="40">6</button>

+            </hbox>

+            <hbox spacing="5">

+                <button onclick="parent.parent.parent.parent.dial('7')" width="40">7</button>

+                <button onclick="parent.parent.parent.parent.dial('8')" width="40">8</button>

+                <button onclick="parent.parent.parent.parent.dial('9')" width="40">9</button>

+            </hbox>

+            <hbox spacing="5">

+                <button onclick="parent.parent.parent.parent.dial('*')" width="40">*</button>

+                <button onclick="parent.parent.parent.parent.dial('0')" width="40">0</button>

+                <button onclick="parent.parent.parent.parent.dial('#')" width="40">#</button>

+            </hbox>

+        </vbox>

+    </view>

+    <hbox spacing="10" align="center">

+        <simpleLabelButton labelid="1448" name="callButton">

+            <handler name="onclick">

+                parent.parent.joinToConfCall.doCall();

+                var g = canvas.getUserData();

+                g["lastsipnumber"] = parent.parent.phoneNumber.input.getText();

+                canvas.setUserData(g);

+            </handler>

+        </simpleLabelButton>

+        <simpleLabelButton labelid="85" name="closeButton">

+            <handler name="onclick">

+                canvas.sipDialer = null;

+                parent.parent.destroy();

+            </handler>

+        </simpleLabelButton>

+    </hbox>

+

+	<handler name="oninit">

+		if(canvas.sipDialer != null) {

+			canvas.sipDialer.destroy();

+		}

+		canvas.setAttribute('sipDialer', this);

+		var lastNum = canvas.getUserData()["lastsipnumber"];

+		if(lastNum != undefined) {

+			this.phoneNumber.input.setAttribute('text', lastNum);

+		}

+		this.bringToFront();

+    </handler>

+

+    <method name="dial" args="digit">

+        this.phoneNumber.input.setAttribute('text', this.phoneNumber.input.text + digit);

+    </method>

+

+    <netRemoteCallHib name="joinToConfCall" funcname="joinToConfCall" remotecontext="$once{ canvas.thishib }">

+        <netparam><method name="getValue">return parent.parent.phoneNumber.input.text</method></netparam>

+        <handler name="ondata" args="value">

+            <![CDATA[

+            //The onResult-Handler will be called be the rtmpconnection

+            if($debug) Debug.write("joinToConfCall : ",value);

+            ]]>

+        </handler>

+    </netRemoteCallHib>

+</class>

+

+</library>
\ No newline at end of file
diff --git a/WebContent/src/modules/conference/tabcontent/chat/baseTabChatPanel.lzx b/WebContent/src/modules/conference/tabcontent/chat/baseTabChatPanel.lzx
new file mode 100644
index 0000000..9bbb34d
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/baseTabChatPanel.lzx
@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!-- 
+	#################################################
+	Provides functions to chat and extends the chat with the panel for blinking
+	when new messages arrive when the tab is closed
+	#################################################
+	 -->
+
+	<class name="baseTabChatPanel" extends="basePropertyPanel" >
+
+		<attribute name="fadeDelegate" value="null" />
+		<attribute name="doBlink" value="false" type="boolean" />
+
+		<handler name="oninit">
+			canvas._currentChatPanel = this;
+			this.fadeDelegate = new LzDelegate( this, "showText" );
+		</handler>
+
+        <method name="newprivatechat" args="refObj">
+            this.addChatSync(refObj[1],true);
+        </method>
+        
+        <method name="closeprivatechat" args="value">
+            if ($debug) Debug.write("closeprivatechat _1a_ ",value);
+            var publicSID = value[1];
+            if ($debug) Debug.write("closeprivatechat _1b_ ",publicSID);
+            
+			for (var eg in this.content.chatbar.subviews) {
+				if(typeof this.content.chatbar.subviews[eg].objRef.refObj == 'undefined') {
+					continue;
+				}
+				if ($debug) Debug.write("closeprivatechat _2A_ ",this.content.chatbar.subviews[eg].objRef);
+				if ($debug) Debug.write("closeprivatechat _2B_ ",this.content.chatbar.subviews[eg].objRef.refObj);
+				if ($debug) Debug.write("closeprivatechat _2C_ ",this.content.chatbar.subviews[eg].objRef.refObj.publicSID);
+				    
+				if (this.content.chatbar.subviews[eg].objRef.refObj.publicSID == publicSID ) {
+					this.content.chatbar.removeObjectSynced(this.content.chatbar.subviews[eg]);
+					return;
+				}
+            }
+        </method>
+        
+        <method name="privatechat" args="value,client">
+            if ($debug) Debug.write("privatechat A ",client.publicSID);
+            if ($debug) Debug.write("privatechat B ",value[6]);
+            
+            for (var eg in this.content.subviews) {
+                if (this.content.subviews[eg].refObj != null) {
+                    
+                    if ($debug) Debug.write("privatechat _1_ ",this.content.subviews[eg].refObj);
+                    if ($debug) Debug.write("privatechat _2_ ",this.content.subviews[eg].refObj.publicSID);
+                    
+                    if (this.content.subviews[eg].refObj.publicSID == client.publicSID 
+                            || this.content.subviews[eg].refObj.publicSID == value[6] ) {
+                        this.content.subviews[eg]._chatoutputborder._chatoutput.addChatHistory(value,client);
+                    }
+                }
+            }
+        </method>
+        
+        <method name="addChat" args="refObj">
+            this.addChatSync(refObj,false);
+        </method>
+        
+        <method name="addChatSync" args="refObj,remoteOpen">
+            if (this.content.visibility == "hidden") {
+                this.toggleopen();
+            }
+            
+            for (var eg in this.content.subviews) {
+                if (this.content.subviews[eg].refObj != null) {
+                    if (this.content.subviews[eg].refObj.publicSID == refObj.publicSID) {
+                        new lz.labelerrorPopup(canvas.main_content._content.inner,{
+                                    errorlabelid:1496
+                                });
+                        return;
+                    }
+                }
+            }
+            
+            if ($debug) Debug.write("addChat :: ",refObj);
+            for (var eg in this.content.chatbar.subviews) {
+                this.content.chatbar.subviews[eg].isactive = false;
+                this.content.chatbar.subviews[eg].onmouseout.sendEvent(null);
+                this.content.chatbar.subviews[eg].objRef.setAttribute("visibility","hidden");
+            }
+            
+            var chatTabPrivateRef = new lz.chatTabPrivateChat(this.content,{
+                                                refObj:refObj,
+                                                remoteOpen:remoteOpen
+                                                
+                                            });
+            var tempWidth = this.content.chatbar.getCurrentSize();
+            
+            var tabname = (refObj.firstname == null ? "" : refObj.firstname) + " " + (refObj.lastname == null ? "" : refObj.lastname);
+            var tWhiteboardBtn = new lz.chatMiniButton(this.content.chatbar,{
+                                       objRef:chatTabPrivateRef,
+                                       width:tempWidth,
+                                       isactive:true,
+                                       btnName: tabname
+                                    });
+            
+            this.content.chatbar.currentBtn = tWhiteboardBtn;                       
+                                    
+            tWhiteboardBtn.onmouseout.sendEvent(null);
+        </method>
+        
+        <handler name="onisopen" args="o">
+			if ($debug) Debug.write("onisopen",o);
+			canvas.chatHeight = o ? 200 : 222;  
+			canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "hideChatContent", [!o]);
+			if (o) {
+				if ('doInitByOpen' in canvas._chatcontent) {
+					canvas._chatcontent.doInitByOpen();
+				}
+				if (canvas.currentRoomObject != null) {
+					content._content1._chattabbottom.updatefontbuttonvisible();
+				}
+				this.doBlink = false;
+				this._newMessage.setAttribute("visibility","hidden");
+				this._newMessage.setAttribute( "opacity", 0 );
+				this.content.setAttribute("visibility","visible");
+			} else {
+				this.content.setAttribute("visibility","hidden");
+			}
+		</handler>
+
+		<method name="startBlink">
+			if ($debug) Debug.write("startBlink",this.opacity);
+			if (this.isopen) return;
+			if (this.doBlink) {
+				if ($debug) Debug.write("doBlink already started !!!");
+			} else {
+				if ($debug) Debug.write("doBlink");
+				this.doBlink = true;
+				this._newMessage.setAttribute("visibility","visible");
+				lz.Timer.addTimer( this.fadeDelegate , 1000 );
+			}
+		</method>
+
+		<method name="showText" args="refObj">
+			if (this.doBlink) {
+				lz.Timer.addTimer( this.fadeDelegate , 1000 );
+				if (this._newMessage.opacity == 0) {
+					this._newMessage.animate( "opacity", 1.0, 400 );
+				} else {
+					this._newMessage.animate( "opacity", 0, 400 );
+				}
+			} else {
+				this._newMessage.setAttribute("visibility","hidden");
+			}
+		</method>
+
+        <view name="content" visibility="hidden" y="22"
+              height="${ parent.height-22 }" width="${ parent.width }">
+            <chatBarMenu name="chatbar">
+                <attribute name="refObj" value="null" />
+                <attribute name="objMessage" value="null" />
+                <attribute name="publicSID" value="" type="string" />
+                
+                <handler name="oninit">
+                    this.currentBtn = this._button1;
+                </handler>
+                
+                <handler name="onRemoveWindow" args="publicSID">
+                    <![CDATA[
+                    
+                        if ($debug) Debug.write("onRemoveWindow :: ",publicSID);
+                        
+                        this.publicSID = publicSID;
+                    
+                        this.objMessage = new Array();
+                        this.objMessage[0] = 'closeprivatechat';
+                        this.objMessage[1] = canvas.publicSID;
+                        
+                        this.sendMessageWithClientByPublicSID.doCall();
+                    ]]>
+                </handler>
+                
+                <netRemoteCallHib name="sendMessageWithClientByPublicSID" funcname="sendMessageWithClientByPublicSID" 
+                    remotecontext="$once{ canvas.thishib }" > 
+                    <netparam><method name="getValue"> return parent.parent.objMessage; </method></netparam>
+                    <netparam><method name="getValue"> return parent.parent.publicSID; </method></netparam>
+                    <handler name="ondata" args="value">
+                        <![CDATA[
+                            //The onResult-Handler will be called be the rtmpconnection
+                            if ($debug) Debug.write("sendMessageWithClientByPublicSID getValue : ",value);
+                        ]]>
+                    </handler>   
+                </netRemoteCallHib>
+                
+                <chatMiniButton name="_button1" isactive="true" isClosable="false" >
+                    <handler name="oninit">
+                        this.setAttribute("btnName", canvas.getLabelName(1494) + " 1");
+                        this.objRef = parent.parent._content1;
+                        this.onmouseout.sendEvent(this);
+                    </handler>
+                </chatMiniButton>
+                
+            </chatBarMenu>
+            
+            <chatTab name="_content1" />
+            
+        </view>
+			
+		<labelText labelid="1199" x="${ parent.width - this.width }" bgcolor="0xFFFFFF"
+        		   y="2" fontsize="10" fontstyle="bold" fgcolor="0xFF3300" />
+
+		<view name="_newMessage" y="0" x="${ parent.width-this.width }"
+			visibility="hidden">
+			<view x="1" y="2" resource="chat_message_incoming_rsc" />
+			<labelText x="22" y="2" fgcolor="0x008000" fontstyle="bold"
+				labelid="1417" />
+		</view>
+
+	</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/chat/chatOutput.lzx b/WebContent/src/modules/conference/tabcontent/chat/chatOutput.lzx
new file mode 100644
index 0000000..b3a312a
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/chatOutput.lzx
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<!--- chat output specialized for video-conference -->
+<class name="chatOutput" extends="view" height="${ parent.height-1 }" 
+            clip="true" width="${ parent.width-1 }" bgcolor="0xFFFFFF">
+
+    <attribute name="isAlreadyLoaded" value="false" type="boolean"/>
+<!---
+ Invoked from VideoContainer cause domain/room must be set first
+ -->
+    <method name="doInitByOpen">
+        <![CDATA[
+            if (!this.isAlreadyLoaded) {
+            	this.isAlreadyLoaded = true;
+            	this._cbtext.clearChatOutput();
+                this.getRoomChatHistory.doCall();
+            }
+        ]]>
+    </method>
+    
+    <method name="reload">
+        <![CDATA[
+        	this._cbtext.clearChatOutput();
+            this.getRoomChatHistory.doCall();
+        ]]>
+    </method>    
+    
+    <netRemoteCallHib name="getRoomChatHistory" funcname="chatservice.getRoomChatHistory" 
+        remotecontext="$once{ canvas.thishib }" > 
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if($debug) Debug.write("chatOutput/getRoomChatHistory: ",value);
+                for (var i=0;i<value.length;i++){
+                    if($debug) Debug.write(value[i].message,value[i].client);
+                    parent.addChatHistory(value[i].message,value[i].client);
+                }
+            ]]>
+        </handler>   
+    </netRemoteCallHib>
+    
+    <method name="getLog">
+    	<![CDATA[
+    		var tString = "";
+    		
+    		for (var i=0;i<this._cbtext.subviews.length;i++) {
+    			
+    			if (i!=0) {
+    				tString += "<br/>";
+    			}
+    			
+    			tString += this._cbtext.subviews[i].username + ': '
+    					+ this._cbtext.subviews[i].message;
+    			
+    		}
+    		
+    		return tString;
+    	
+    	]]>
+    </method>     
+    
+    <method name="addChatHistory" args="value,client">
+        <![CDATA[
+            //if($debug) Debug.write("chatOutput/addChatHistory: ",value,client);
+            canvas.currentBaseConferenceRoom._chatPanelStrict.startBlink();
+            var username = (client.firstname == null ? "" : client.firstname) + " " + (client.lastname == null ? "" : client.lastname);
+            var messageObj = value[value.length - 1];
+            var usercolor = value[5];
+            
+            var isDirectLink = null;
+            if (value[8] > 0) {
+            	isDirectLink = false;
+            } else {
+            	isDirectLink = true;
+            }
+            
+            if (canvas.isRemoteUser()) {
+                isDirectLink = true;               	
+            }
+            if ( usercolor==null || usercolor==0 || (usercolor !=null && usercolor.length==0) )usercolor=0xCCCCCC;
+            
+            
+            
+            if ($debug) Debug.write("addChatHistory userID: ",value[8],isDirectLink);
+            
+            new lz.chatTabItemEmoticons(this._cbtext,{
+            			rawMessage: value,
+		                messageObj:messageObj,
+	                    user_id:value[8],
+	                    publicSID:value[6],
+	                    message:value[4],
+	                    picture_uri:client.picture_uri,
+		                usercolor:usercolor,
+		                username:username,
+		                isDirectLink:isDirectLink,
+		                usertime:value[1]
+	                });
+            
+            this.setScrollToMax();              
+        ]]>
+    </method>           
+    
+    <method name="setScrollToMax">
+        <![CDATA[
+        if(_cbtext.height>this.height){
+            myscrollbar.scrolltarget.setAttribute(myscrollbar.scrollattr,(this.height-_cbtext.height));
+        }
+        
+        ]]>
+    </method>
+    
+    <view name="_cbtext" width="${ parent.width }" layout="axis:y;spacing:0" >
+    	<method name="clearChatOutput">
+    		<![CDATA[
+    			while (this.subviews.length>0){
+    				this.subviews[0].destroy();
+    			}
+    		]]>
+    	</method>
+    </view>
+    
+    <om_vscrollbar name="myscrollbar" />
+
+</class>
+    
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/chat/chatTab.lzx b/WebContent/src/modules/conference/tabcontent/chat/chatTab.lzx
new file mode 100644
index 0000000..beb93d3
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/chatTab.lzx
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!---
+Chat tabpane class. It contains chatOutput-class and catTabBottom-class.
+This is used in the conference.
+-->
+<class name="chatTab" extends="simpleBaseTabpane" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" x="0">
+	<view name="_chatoutputborder" height="${ parent.height-48 }" width="${ parent.width-2 }" 
+				bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }">
+		
+		<chatOutput name="_chatoutput" x="1" y="1" >
+			<handler name="oninit">
+				canvas._chatcontent = this;
+			</handler>
+		</chatOutput>
+	</view>
+	
+	<chatTabBottom name="_chattabbottom" 
+				   y="${ parent.height-46 }" x="0" width="${ parent.width-2 }" />
+				   
+</class>
+
+<class name="chatTabPrivateChat" extends="simpleBaseTabpane" y="22" height="${ parent.height-22 }" 
+                 width="${ parent.width }">
+
+	<attribute name="refObj" value="null"/>
+	<attribute name="objMessage" value="null"/>
+	<attribute name="remoteOpen" value="false" type="boolean"/>
+	
+	<handler name="oninit">
+		<![CDATA[
+			if (this.remoteOpen) {
+				return;
+			}
+			this.objMessage = new Array();
+			this.objMessage[0] = 'newprivatechat';
+			var u = canvas.thishib.userobject;
+			this.objMessage[1] = {
+				publicSID: canvas.publicSID
+				, firstname: u.firstname
+				, lastname: u.lastname
+				};
+			
+			this.sendMessageWithClientByPublicSID.doCall();
+			
+			if (canvas.currentRoomObject != null) {
+				_chattabbottom.updatefontbuttonvisible();
+			}
+		]]>
+	</handler>
+	
+    <netRemoteCallHib name="sendMessageWithClientByPublicSID" funcname="sendMessageWithClientByPublicSID" 
+        remotecontext="$once{ canvas.thishib }" > 
+        <netparam><method name="getValue"> return parent.parent.objMessage; </method></netparam>
+        <netparam><method name="getValue"> return parent.parent.refObj.publicSID; </method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("sendMessageWithClientByPublicSID getValue : ",value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib>
+	
+	<view name="_chatoutputborder" height="${ parent.height-48 }"
+       bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }"  width="${ parent.width-2 }">
+		
+		<chatOutput name="_chatoutput" x="1" y="1" />
+	</view>
+	
+	<chatTabBottom name="_chattabbottom" isPrivate="true" 
+				   y="${ parent.height-46 }" x="0" width="${ parent.width-2 }" />
+</class>
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/chat/chatTabBottom.lzx b/WebContent/src/modules/conference/tabcontent/chat/chatTabBottom.lzx
new file mode 100644
index 0000000..451ee05
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/chatTabBottom.lzx
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!--- View of the buttom area of chat. It contains buttons of message,emoticons,clear. -->
+	<class name="chatTabBottom" extends="view" height="42">
+		<attribute name="isPrivate" value="false" type="boolean" />
+		
+		<view x="0" y="0" height="20" width="${ parent.width-2 }" name="message"
+			bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+			<method name="getText">
+				return this._ctext.getText();
+			</method>
+			<method name="setText" args="txt">
+				this._ctext.setAttribute('text',txt);
+			</method>
+			<customInputtext name="_ctext" width="${ parent.width-2 }"
+				height="$once{ parent.height-2 }" x="1" y="1" bgcolor="white">
+				<handler name="onkeyup" args="key">
+	                <![CDATA[
+	                var reverse = canvas.reverseAll(parent.getText());
+	                
+	                // parent.setText(reverse);
+	                // 13 is return
+	                if ((key==27) || (key==13)) {
+	                	this.parent._button.onclick.sendEvent();
+	                }
+	                ]]>
+				</handler>
+			</customInputtext>
+
+			<attribute name="objMessage" value="null" />
+			
+			<simpleLabelButton name="_button" labelid="220"
+				height="21" width="80" x="$once{ parent.width-80 }">
+				<handler name="onclick">
+				<![CDATA[
+					var message = this.parent.getText();
+					if (message.length != 0) {
+						parent.objMessage = new Array();
+						var om = parent.objMessage;
+						om[0] = parent.parent.isPrivate ? 'privatechat' : 'chat';
+						//The server side will put time here
+						om[1] = "";
+						//if ($debug) Debug.write("Setting Message");
+						om[2] = 'newtextmessage';
+						om[3] = hib.userobject.login;
+						//if (parent.parent._inverseWording.getValue()) message = canvas.reverseAll(message)
+						om[4] = message;
+						om[5] = canvas.currentusercolor;
+						om[6] = parent.parent.isPrivate ? parent.parent.parent.refObj.publicSID : canvas.publicSID;
+						om[7] = canvas.isrtl;
+						om[8] = hib.userobject.user_id;
+						om[9] = canvas.currentRoomObject.chatModerated && !canvas.ismoderator;
+						if ($debug) Debug.write("send: ", parent.parent.parent);
+						if (parent.parent.isPrivate) {
+							parent.sendMessageWithClientByPublicSID.doCall();
+						} else {
+							hib.sendChatMessageWithClient.sendMessage(om);
+						}
+						this.parent.setText('');
+					}
+				]]>
+				</handler>
+			</simpleLabelButton>
+
+			<netRemoteCallHib name="sendMessageWithClientByPublicSID"
+				funcname="chatservice.sendMessageWithClientByPublicSID" remotecontext="$once{ canvas.thishib }">
+				<netparam><method name="getValue">return parent.parent.objMessage;</method></netparam>
+				<netparam><method name="getValue">return parent.parent.parent.parent.refObj.publicSID;</method></netparam>
+				<handler name="ondata" args="value">
+					//The onResult-Handler will be called be the rtmpconnection
+					if ($debug) Debug.write("chatservice.sendMessageWithClientByPublicSID getValue : ",value);
+				</handler>
+			</netRemoteCallHib>
+		</view>
+
+		<labelCheckbox name="_inverseWording" x="2" y="24"
+			labelid="580">
+			<attribute name="doUpdate" value="false" type="boolean" />
+			<handler name="oninit">
+				var g = canvas.getUserData();
+				var save = g["rtlCheckbox"];
+				//if ($debug) Debug.write("oninit doUpdate",save,g);
+				if(save) {
+					this.doUpdate = false;
+					this.setValue(true);
+				}
+				this.doUpdate = true;
+			</handler>
+			<handler name="onvalue" args="v">
+				if (this.doUpdate) {
+					//if ($debug) Debug.write("onvalue doUpdate",this.getValue());
+					var g = canvas.getUserData();
+					g["rtlCheckbox"]=this.getValue();
+					//if ($debug) Debug.write("onvalue doUpdate",g["rtlCheckbox"]);
+					canvas.setUserData(g);
+				}
+			</handler>
+			<labelTooltip labelid="581" />
+		</labelCheckbox>
+
+		<method name="updatefontbuttonvisible">
+			if ($debug) Debug.write("chatTabBottom updatefontbuttonvisible allowFontStyles",
+						canvas.currentRoomObject.allowFontStyles);
+			_button.fontbutton.setVisible(canvas.currentRoomObject.allowFontStyles == true ||
+			    			   canvas.currentRoomObject.allowFontStyles == null);
+		</method>
+
+		<view name="_button" width="140" y="22" align="right">
+
+			<miniIconsImage name="fontbutton" y="2" x="62" width="16" height="16" 
+				showhandcursor="true" src="$once{ canvas.getThemeImage('font_style') }" >
+        		<handler name="onclick">
+        			var pick = new lz.fontOptions(canvas,{
+						btnRef:this.parent.parent,
+						x:(this.getAttributeRelative('x',canvas)-130),
+						y:(this.getAttributeRelative('y',canvas)-42)
+					});
+					lz.ModeManager.makeModal(pick);   
+        		</handler>
+        		<handler name="onmouseover">
+        			<!-- lost selection workaround -->
+        			parent.parent.message._ctext.saveselection();
+        		</handler>
+        		<labelTooltip labelid="1530" />
+        	</miniIconsImage>
+
+			<miniIcons y="2" x="82" resource="smile_chat_log_rsc"
+				width="16" height="16" showhandcursor="true">
+				<handler name="onclick">
+					var pick = new lz.emotIconsSelector(canvas,{
+						btnRef:this.parent.parent,
+						x:(this.getAttributeRelative('x',canvas)-140),
+						y:(this.getAttributeRelative('y',canvas)-140)
+					});
+					lz.ModeManager.makeModal( pick );
+				</handler>
+				<labelTooltip labelid="445" />
+			</miniIcons>
+
+			<miniIcons y="2" x="102" resource="copy_chat_log_rsc"
+				width="16" height="16" showhandcursor="true" visible="$once{ !parent.parent.isPrivate }">
+				<handler name="onclick">
+                <![CDATA[
+                    var tString = canvas._chatcontent.getLog();
+                    new lz.showChatLog(canvas,{
+                                    error:tString
+                                });
+                ]]>
+				</handler>
+				<labelTooltip labelid="1200" />
+			</miniIcons>
+
+			<miniIconsImage src="$once{ canvas.getThemeImage('button_cancel_rsc') }"
+				y="2" x="122" width="16" height="16" showhandcursor="true"
+				visible="$once{ !parent.parent.isPrivate }">
+				<handler name="onclick">
+					if (!canvas.ismoderator) {
+					//Do not allow
+						new lz.labelerrorPopup(canvas,{errorlabelid:783});
+						return;
+					}
+					parent.clearChat.doCall();
+				</handler>
+				<labelTooltip labelid="442" />
+			</miniIconsImage>
+
+			<view width="1" />
+
+			<netRemoteCallHib name="clearChat" funcname="chatservice.clearChat"
+				remotecontext="$once{ canvas.thishib }">
+				<handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    if ($debug) Debug.write("clearChat : ",value);
+                ]]>
+				</handler>
+			</netRemoteCallHib>
+
+		</view>
+
+	</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/chat/chatTabItem.lzx b/WebContent/src/modules/conference/tabcontent/chat/chatTabItem.lzx
new file mode 100644
index 0000000..a9d61aa
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/chatTabItem.lzx
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<class name="chatTabItem" extends="view" 
+	   width="240" >
+
+	<attribute name="user_id" value="0" type="number" />
+	<attribute name="username" value="" type="string" />
+	<attribute name="usertime" value="" type="string" />
+	<attribute name="usercolor" value="0" type="string" />
+	<attribute name="cbtext" value="" type="string" />
+	
+	<handler name="oninit">
+		<![CDATA[
+			if($debug) Debug.write("chatTabItem/WIDTH: "+this.width);
+			if($debug) Debug.write("chatTab Item on init");
+	        var downloadurl = canvas.getUrl() + 'DownloadHandler?fileName=CHAT'
+	        		+'&moduleName=chat&parentPath=&room_id='
+	        		+'&remoteUserid='+this.user_id
+	        		+'&sid='+canvas.sessionId;
+	        //Debug.write("downloadurl "+downloadurl);
+	        this._userpic.setAttribute('src',downloadurl);	
+	        
+	        if(canvas.isrtl == 'true'){
+	        	this.header_user.stAttribute('textalign', 'right');
+	        	this.header_time.setAttribute('align', 'left');
+	        	this.multi.setAttribute('textalign', 'right');
+	        }
+	        
+	        
+	        
+	        
+	        //Debug.write("TIME: "+this.usertime);
+        ]]>
+	</handler>
+	
+	<image name="_userpic" />
+	
+	
+	<text text="$once{ parent.username }" x="40" resize="false" fontsize="10"
+		  width="$once{ parent.width - 40 }" bgcolor="$once{ parent.usercolor }"
+		  selectable="true" name="header_user">
+		  
+	</text>
+	<text text="$once{ parent.usertime }" align="right" fontsize="10" selectable="true" name="header_time" >
+		
+	</text>
+	
+	
+	
+	<text multiline="true" x="40" y="20" fontsize="10" text="$once{ parent.cbtext }"
+		  width="220" selectable="true" name="multi">
+		 
+	</text>
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/chat/chatTabItemEmoticons.lzx b/WebContent/src/modules/conference/tabcontent/chat/chatTabItemEmoticons.lzx
new file mode 100644
index 0000000..d3201cf
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/chatTabItemEmoticons.lzx
@@ -0,0 +1,286 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<class name="chatTabItemEmoticons" extends="view" width="$once{ parent.width }" bgcolor="$once{ this.usercolor }">
+
+	<attribute name="user_id" value="0" type="number" />
+	<attribute name="username" value="" type="string" />
+	<attribute name="usertime" value="" type="string" />
+	<attribute name="usercolor" value="0" type="string" />
+	<attribute name="publicSID" value="" type="string" />
+	<attribute name="messageObj" value="null" />
+	<attribute name="isDirectLink" value="false" type="boolean" />
+	<attribute name="message" value="" type="string" />
+	<attribute name="picture_uri" value="" type="string"/>
+	<attribute name="rawMessage" value="null" />
+	
+	<handler name="oninit">
+		<![CDATA[
+		    if ($debug) Debug.write("this.picture_uri :: ",this.picture_uri);
+            this._userpic.setAttribute('src', canvas.getPictureUrl(this.picture_uri, '&moduleName=chat&remoteUserid='+this.user_id)); 
+	        
+	        if(canvas.isrtl == 'true'){
+	         	if($debug) Debug.write("chatTabItemEmoticons RTL is set");
+	       
+	        	this.header_user.setAttribute('textalign', 'right');
+	        	this.header_time.setAttribute('align', 'left');
+	        	this.header_time.setAttribute('x', '40');
+	        	this.multi.setAttribute('textalign', 'right');
+	        	this.multi.setAttribute('align', 'right');
+	        }
+	        
+	        //Debug.write("TIME: "+this.usertime);
+        ]]>
+	</handler>
+	
+	<view name="bg" width="179" height="$once{ parent.height-1 }" bgcolor="0xFFFFFF" 
+		opacity="0.1">
+	</view>
+	
+	<image name="_userpic" stretches="both" x="1" y="1">
+		<handler name="onload">
+            <![CDATA[
+                if (this.height > 38) {
+                    //If bigger then containter then scale it
+                    var width = this.width/(this.height/38);
+                    this.setAttribute('height',38);
+                    this.setAttribute('width',width);
+                }
+                if (this.width > 38) {
+                	var height = this.height/(this.width/38);
+                	this.setAttribute('height',height);
+                    this.setAttribute('width',38);
+                }
+            ]]>
+        </handler>
+	</image>
+	
+	<text text="$once{ parent.username }" x="40" resize="false" fontsize="11" multiline="true"
+		  width="140" height="$once{ parent.height }"
+		  name="header_user">
+	</text>
+	
+	<state applied="$once{ parent.rawMessage[9] }">
+		<miniIcons resource="allow_ok_icon_rsc" width="16" height="16"
+			y="2" x="$once{ parent.width - 140 }" showhandcursor="true" >
+			<handler name="onclick">
+				this.setAttribute('visible', false);
+				parent.setAttribute('visible', false);
+				parent.rawMessage.length = parent.rawMessage.length - 1;
+				parent.rawMessage[parent.rawMessage.length - 1] = false;
+				//if ($debug) Debug.write("!!!!!!!!!!!!! allow message ", parent, parent.rawMessage);
+				hib.sendChatMessageWithClient.sendMessage(parent.rawMessage);
+			</handler>
+			<labelTooltip labelid="1514" />
+		</miniIcons> 
+	</state>
+	
+	<state applied="$once{ !parent.isDirectLink }">
+	
+	    <miniIconsImage name="add" src="$once{ canvas.getThemeImage('edit_add_rsc') }" width="16" height="16" 
+	                   y="2" x="$once{ parent.width - 122 }" showhandcursor="true">
+	        <handler name="onclick">
+	            if ($debug) Debug.write("Start Conference");
+	            if (hib.userobject.user_id == parent.user_id) {
+	                new lz.labelerrorPopup(canvas,{errorlabelid:1225});
+	                return;
+	            }
+	            parent.requestUserToContactList.doCall();
+	        </handler>
+	        <labelTooltip labelid="1186" />
+	    </miniIconsImage>
+    
+    </state>
+    
+    <!--
+    public Long requestUserToContactList(String SID, Long userToAdd_id, 
+                String domain, String port, String webapp)
+     -->
+    <netRemoteCallHib name="requestUserToContactList" funcname="userservice.requestUserToContactList" 
+                  remotecontext="$once{ canvas.thishib }" activeErrorHandler="true" >      
+        <netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+        <netparam><method name="getValue"> return parent.parent.user_id; </method></netparam>
+        <netparam><method name="getValue"> return canvas.getHttpHost(); </method></netparam>
+        <netparam><method name="getValue"> return canvas.red5httpport; </method></netparam>
+        <netparam><method name="getValue"> return canvas.httpRootKey; </method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("requestUserToContactList: ",value);
+                if (value > 0) {
+                    new lz.labelerrorPopup(canvas,{labelid:1267,errorlabelid:1266});
+                }
+            ]]>
+        </handler>
+    </netRemoteCallHib>
+    
+	
+	<!-- space between each line of text -->
+	<attribute name="leading" value="5" type="number" />
+	
+	<view name="bg_main" x="180" width="$once{ parent.width - 180 }" height="$once{ parent.height-1 }"  
+		opacity="0.3" bgcolor="0xFFFFFF">
+	</view>
+	
+	<text multiline="true" x="180" width="$once{ parent.width - 306 }" fontsize="11" selectable="true" name="multi" >
+		<handler name="oninit">
+			<![CDATA[
+				
+				if(canvas.isrtl!='true'){
+					this.sprite.__LZtextclip.wordWrap = false;
+					if($debug) Debug.write("New Text");
+					//Debug.write(this.sprite.getTextFormat());
+					tFormat = this.sprite.__LZtextclip.getTextFormat();
+					//Debug.write(this.sprite.__LZtextclip.getTextFormat());
+					tFormat.leading = 4;
+					this.sprite.__LZtextclip.setTextFormat(tFormat);
+					var items = parent.messageObj;
+					var t = "";
+					//items[0] = ["text","hello your are the hero lets check accomodation today i need some input"];
+					for (var i=0;i<items.length;i++) {
+						
+						//if ($debug) Debug.write("Item :0: ",items[i][0]);
+						
+						if (items[i][0]=="text"){
+							//if ($debug) Debug.write("Text :1: ",items[i][1]);
+							
+							t += items[i][1];
+						} else {
+							if (t.length!=0){
+								var tempString = calcLineWidthByTextField(this.width, t,this.fontsize,this.font);
+								var x = tempString[tempString.length-1]["lineWidth"];
+								var y = (tempString.length-1)*(getLineHeight()+parent.leading-1);
+							}else {
+								var x = 0;
+								var y = 0;
+							}
+							t += items[i][2];
+							
+							var swfurl = canvas.getUrl() + 'public/emoticons/'+items[i][1];
+							var m = new lz.chatInnerSmily(parent,{x:x+this.x,y:y+this.y,iconlabel:items[i][3]});
+							
+							//if ($debug) Debug.write("Smily :2: ",swfurl);
+							
+							m.setSource(swfurl);
+						}
+					}
+					//Debug.write("TTTT: ",t);"Verdana"
+					var tString = calcLineWidthByTextField(this.width, t,this.fontsize,this.font);
+					
+					for (var k = 0;k<tString.length;k++){
+						this.setAttribute('text',this.getText()+textObject[k]["text"]+"\r");
+						//if ($debug) Debug.write("text: ",k,textObject[k]["lineWidth"],textObject[k]["text"]);
+					}	
+					
+					//if ($debug) Debug.write("text: ",this.getText());
+					
+					//Debug.write(this.sprite.__LZtextclip.getTextFormat());
+					tFormat.leading = parent.leading;
+					this.sprite.__LZtextclip.setTextFormat(tFormat);
+					//Debug.write(this.sprite.__LZtextclip.textHeight);
+					//Debug.write(getLineHeight());
+					//Debug.write(this.sprite.__LZtextclip.textHeight+12);
+					this.setAttribute('height',this.sprite.__LZtextclip.textHeight+12);
+				}
+				else{
+					var t = "";
+					var items = parent.messageObj;
+					
+					for (var i=0;i<items.length;i++) {
+						if (items[i][0]=="text"){
+							t += items[i][1];
+						} 
+					}
+					
+					this.setAttribute('text',this.getText()+ t);
+				}
+				
+				parent.setAttribute('height',this.height);
+				parent.header_user.setAttribute('height',this.height);
+				parent.bg.setAttribute('height',this.height-1);
+				parent.bg_main.setAttribute('height',this.height-1);
+				
+			]]>
+		</handler>	
+		
+	</text>
+	
+	<state applied="$once{ !parent.isDirectLink }">
+	
+	    <miniIcons name="private_message_add" resource="private_message_add_rsc" width="16" height="16" 
+	                   y="0" x="$once{ parent.width - 104 }" showhandcursor="true">
+	        <handler name="onclick">
+	            if ($debug) Debug.write("Start Conference");
+	            new lz.newPrivateMessage(canvas,{
+	                                x:200,y:120,
+	                                refObj:null,
+	                                minimizable:true,
+	                                maximizable:true,
+	                                userObject:null,
+	                                isdragable:true,
+	                                user_id:parent.user_id,
+	                                width:canvas.width-300,
+	                                height:canvas.height-130
+	                            });
+	        </handler>
+	        <labelTooltip labelid="1253" />
+	    </miniIcons>
+	    
+	    <miniIcons resource="user_profile_rsc" width="16" height="16" 
+	               y="0" x="$once{ parent.width - 84 }" showhandcursor="true">
+	        <handler name="onclick">
+	            if ($debug) Debug.write("Start Conference");
+	            new lz.viewUserProfileWindow(canvas,{
+	                                userId:parent.user_id
+	                            });
+	        </handler>
+	        <labelTooltip labelid="1236" />
+	    </miniIcons>    		  
+			  
+	    <miniIcons y="0" x="$once{ parent.width - 64 }"
+	    		   resource="start_conference2_rsc" width="16" height="16" 
+	               showhandcursor="true">
+	        <handler name="onclick">
+	            if ($debug) Debug.write("Start Conference");
+	            new lz.chatParticipantsInviteConference(canvas,{
+	                            publicSID:parent.publicSID,
+	                            user_id:parent.user_id
+	                        });
+	        </handler>
+	        <labelTooltip labelid="1131" />
+	    </miniIcons>  
+    
+    </state>
+    		  
+	<text text="$once{ parent.usertime+'   ' }" align="right" fgcolor="0xAAAAAA"
+		  fontsize="10" name="header_time" />
+
+</class>						
+
+<class name="chatInnerTextBox" extends="text" resize="true" bgcolor="red" />
+
+<class name="chatInnerSmily" extends="view" onmouseover="" onmouseout="">
+	<attribute name="iconlabel" value="" type="string" />
+	<labelTooltip text="$once{ parent.iconlabel }" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/chat/library.lzx b/WebContent/src/modules/conference/tabcontent/chat/library.lzx
new file mode 100644
index 0000000..88b92ed
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/library.lzx
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<resource name="delete_chat_log_rsc" src="resources/cancel.png" />
+	<resource name="copy_chat_log_rsc" src="resources/edit-copy.png" />
+	<resource name="smile_chat_log_rsc" src="resources/smile.swf" />
+	<resource name="start_conference2_rsc" src="resources/connect.png" />
+	
+	<include href="simpleBaseTabpane.lzx" />
+	<include href="showChatLog.lzx" />
+	<include href="baseTabChatPanel.lzx" />
+	<include href="chatTabItem.lzx" />
+	<include href="chatTabItemEmoticons.lzx" />
+	<include href="chatOutput.lzx" />
+	<include href="chatTabBottom.lzx" />
+	<include href="chatTab.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/cancel.png b/WebContent/src/modules/conference/tabcontent/chat/resources/cancel.png
new file mode 100644
index 0000000..a432b49
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/cancel.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/connect.png b/WebContent/src/modules/conference/tabcontent/chat/resources/connect.png
new file mode 100644
index 0000000..024138e
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/connect.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/edit-copy.png b/WebContent/src/modules/conference/tabcontent/chat/resources/edit-copy.png
new file mode 100644
index 0000000..8dd48c4
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/edit-copy.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/font.png b/WebContent/src/modules/conference/tabcontent/chat/resources/font.png
new file mode 100644
index 0000000..fddeb4d
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/font.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/smile.swf b/WebContent/src/modules/conference/tabcontent/chat/resources/smile.swf
new file mode 100644
index 0000000..7578e2e
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/smile.swf
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/text_bold.png b/WebContent/src/modules/conference/tabcontent/chat/resources/text_bold.png
new file mode 100644
index 0000000..889ae80
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/text_bold.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/text_color.png b/WebContent/src/modules/conference/tabcontent/chat/resources/text_color.png
new file mode 100644
index 0000000..76fb17b
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/text_color.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/text_hyperlink.png b/WebContent/src/modules/conference/tabcontent/chat/resources/text_hyperlink.png
new file mode 100644
index 0000000..b8edc12
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/text_hyperlink.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/text_italic.png b/WebContent/src/modules/conference/tabcontent/chat/resources/text_italic.png
new file mode 100644
index 0000000..8482ac8
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/text_italic.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/resources/text_underline.png b/WebContent/src/modules/conference/tabcontent/chat/resources/text_underline.png
new file mode 100644
index 0000000..a9468a0
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/resources/text_underline.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/chat/showChatLog.lzx b/WebContent/src/modules/conference/tabcontent/chat/showChatLog.lzx
new file mode 100644
index 0000000..4294a4d
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/showChatLog.lzx
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!---
+Chat tabpane class. It contains chatOutput-class and catTabBottom-class.
+This is used in the conference.
+-->
+<class name="showChatLog" extends="labelExplorerBox" labelid="1201"
+	    docking="true" resizeable="true" closable="true" width="500" 
+	    x="$once{ parent.width/2 - this.width/2 }" height="240">
+    
+    <attribute name="error" value="" type="string" />
+    
+    <view x="2" width="${ parent.width - 4 }" clip="true"
+        				y="24" height="${ parent.height-50 }">
+        <labelText text="$once{ parent.parent.error }" width="${ parent.width - 18 }"
+        		   multiline="true" resize="false" selectable="true" />
+        <om_vscrollbar />
+    </view>
+	
+    <simpleLabelButton labelid="891" width="100" onclick="this.parent.close();" 
+		   x="${ parent.width-104 }" y="${ parent.height-24 }" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/chat/simpleBaseTabpane.lzx b/WebContent/src/modules/conference/tabcontent/chat/simpleBaseTabpane.lzx
new file mode 100644
index 0000000..3e5492a
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/chat/simpleBaseTabpane.lzx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+	<!--- Tabpane. it used by chat. -->

+	<class name="simpleBaseTabpane" extends="view" height="$once{ parent.height-20 }" 

+		   width="$once{ parent.width }" y="24" x="2" >

+		

+	</class>  

+

+</library>
\ No newline at end of file
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/dragItemFileExplorer.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/dragItemFileExplorer.lzx
new file mode 100644
index 0000000..99d73b1
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/dragItemFileExplorer.lzx
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="dragItemFileExplorer" extends="view">
+	
+	<attribute name="refObj" value="null"/>
+	
+	<attribute name="dragItemResource" value="" type="string"/>
+	
+	<attribute name="overItem" value="null"/>
+	
+	<attribute name="alreadySent" value="false" type="boolean" />
+	
+	<attribute name="fileExplorerItemId" value="0" type="number" />
+	<attribute name="newParentFileExplorerItemId" value="0" type="number" />
+    <attribute name="isOwner" value="false" type="boolean" />
+    <attribute name="moveToHome" value="false" type="boolean" />
+	
+	<handler name="oninit">
+		lz.Track.activate(canvas.currentImagesListdraw.currentTrackGroupName);
+		canvas.currentImagesListdraw.currentDragItem = this;
+		lz.Cursor.showHandCursor(false);
+		lz.ModeManager.globalLockMouseEvents();
+		this.dragger.apply();
+	</handler>
+	
+	<method name="sendOverItem" args="itemRef">
+		<![CDATA[
+    		if (this.refObj != itemRef) {
+    			
+    			if (this.refObj.isFolder) {
+    				if (!itemRef.isTrashCan && !itemRef.isFolder) {
+    					//No Folders to the whiteboard please
+    					return;
+    				}
+    			}
+    			
+        		this.overItem = itemRef;
+        		this._dragIcon.setAttribute("frame",2);
+    		}
+		]]>
+	</method>
+	
+	<method name="sendOutItem" args="itemRef">
+        this.overItem = null;
+        this._dragIcon.setAttribute("frame",1);
+    </method>
+	
+	<handler name="onmouseup" reference="lz.GlobalMouse" args="who">
+        this.close();
+    </handler>
+    
+    <method name="close">
+    <![CDATA[
+    	//This can happen when the confirmation pops up
+    	if (this.alreadySent) {
+    		return;
+    	}
+    	this.alreadySent = true;
+    	if ($debug) Debug.write("close Drag Item");
+    	lz.Cursor.showHandCursor(true);
+    	lz.Track.deactivate(canvas.currentImagesListdraw.currentTrackGroupName);
+    	lz.ModeManager.globalUnlockMouseEvents();
+    	canvas.currentImagesListdraw.currentDragItem = null;
+    	this.dragger.remove();
+    	
+    	if (this.overItem != null) {
+    		
+    		if ($debug) Debug.write("this.overItem ",this.overItem);
+    		
+    		if (this.overItem["isTrashCan"] && this.overItem.isTrashCan) {
+    			if ($debug) Debug.write("SEND TO GARBAGE");
+    			this.fileExplorerItemId = this.refObj.fileExplorerItemId;
+    			new lz.confirmationSingle(canvas,{
+            			   refObj:this,
+            			   labelid:710,
+            			   labeliderror:713,
+            			   showCheckBox:false,
+                           refReturnMethod:"sendConfirmation"
+            			});
+    		} else if (this.overItem["isFolder"] && this.overItem.isFolder){
+    			if ($debug) Debug.write("MOVE ITEM",this.refObj.fileExplorerItemId);
+    			if ($debug) Debug.write("MOVE TO PARENT",this.overItem.fileExplorerItemId);
+    			this.fileExplorerItemId = this.refObj.fileExplorerItemId;
+    			this.newParentFileExplorerItemId = this.overItem.fileExplorerItemId;
+    			if (this.overItem.fileExplorerItemId == 0) {
+    			    this.isOwner = this.overItem.isOwner;
+    			}
+    			
+    			//check if this is a home folder or not
+    			var checkForOwer = this.overItem.checkForIsOwner();
+    			if ($debug) Debug.write("checkForOwer ::",checkForOwer);
+    			this.moveToHome = checkForOwer;
+    			
+    			//check that the file is not moved inside itself
+    			if (this.overItem.checkForIsChild(this.refObj.fileExplorerItemId)) {
+    				new lz.labelerrorPopup(canvas,{errorlabelid:922});
+    				this.destroy();
+    				return;
+    			}
+    			
+    			this.moveFile();
+    		} else {
+    			if ($debug) Debug.warn("Drag to whiteboard !!! ");
+    			if (this.refObj.isVideo) {
+    				this.refObj.playVideo();
+    			} else if (this.refObj.isPresentation) {
+    			    this.refObj.loadDocumentToWhiteboard();
+    			} else if (this.refObj.isImage) {
+    				this.refObj.loadImageToWhiteboard();
+    			} else if (this.refObj.isWmlFile) {
+    				this.refObj.loadWmlFile();
+    			} else {
+    				if ($debug) Debug.warn("Should never happen dragItemFileExplorer unhandled case");
+    			}
+    			this.destroy();
+    		}
+    	} else {
+    		this.destroy();
+    	}
+    ]]>	
+    </method>
+    
+    <method name="sendConfirmation" args="bool,askAgain">
+    	if (bool) {
+    		this.deleteFileOrFolder();
+    	} else {
+    		this.destroy();
+    	}
+    </method>
+    
+    <method name="deleteFileOrFolder">
+        <![CDATA[
+            if ($debug) Debug.write("deleteFileOrFolder HTTP 2: ");
+            //this.getFileExplorerByRoom.doCall();
+            var downloadurl = canvas.getUrl()+'services/FileService/deleteFileOrFolderSelf?'
+                            +'SID='+canvas.sessionId
+                            +'&fileExplorerItemId='+this.fileExplorerItemId;
+            
+            this.deleteFileOrFolderSelf.setAttribute("src",downloadurl);
+            if ($debug) Debug.write("deleteFileOrFolderSelf doRequest ",downloadurl);
+            this.deleteFileOrFolderSelf.doRequest();
+        ]]>
+    </method>
+    
+    <dataset name="deleteFileOrFolderSelf" type="http" >
+        <handler name="ondata" args="d">
+            <![CDATA[
+                //if ($debug) Debug.write("ondata ",d);
+                if ($debug) Debug.write("deleteFileOrFolder: ",d);
+                parent.refObj.parent.parent.doOpen();
+                parent.destroy();
+            ]]>
+        </handler>
+    </dataset>
+    
+    <!--
+    <netRemoteCallHib name="deleteFileOrFolder" funcname="fileservice.deleteFileOrFolder" 
+        remotecontext="$once{ canvas.thishib }" > 
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.fileExplorerItemId;</method></netparam>
+        <handler name="ondata" args="value">    
+            if ($debug) Debug.write("deleteFileOrFolder: ",value);
+            parent.refObj.parent.parent.doOpen();
+            parent.destroy();
+        </handler>
+    </netRemoteCallHib> 
+     -->
+    
+    <!--
+    public Long moveFileSelf(String SID, Long fileExplorerItemId,
+            Long newParentFileExplorerItemId, Long room_id, Boolean isOwner,
+            Boolean moveToHome)
+     -->
+     
+    <method name="moveFile">
+        <![CDATA[
+            if ($debug) Debug.write("moveFile HTTP 1: ");
+            //this.getFileExplorerByRoom.doCall();
+            var downloadurl = canvas.getUrl()+'services/FileService/moveFileSelfInternal?'
+                            +'SID='+canvas.sessionId
+                            +'&fileExplorerItemId='+this.fileExplorerItemId
+                            +'&newParentFileExplorerItemId='+this.newParentFileExplorerItemId
+                            +'&roomId='+hib.currentroomid
+                            +'&isOwner='+this.isOwner
+                            +'&moveToHome='+this.moveToHome;
+            
+            this.moveFileSelf.setAttribute("src",downloadurl);
+            if ($debug) Debug.write("moveFileSelf doRequest ",downloadurl);
+            this.moveFileSelf.doRequest();
+        ]]>
+    </method>
+    
+    <dataset name="moveFileSelf" type="http" >
+        <handler name="ondata" args="d">
+            <![CDATA[
+                //if ($debug) Debug.write("ondata ",d);
+                if ($debug) Debug.write("moveFileSelf: ",d);
+                parent.overItem.doOpen();
+                parent.refObj.parent.parent.doOpen();
+                parent.destroy();
+            ]]>
+        </handler>
+    </dataset>
+    
+    <!--
+    <netRemoteCallHib name="moveFile" funcname="fileservice.moveFile" 
+        remotecontext="$once{ canvas.thishib }" > 
+        
+        <attribute name="fileExplorerItemId" value="0" type="number" />
+        
+        
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.fileExplorerItemId;</method></netparam>
+        <netparam><method name="getValue">return parent.newParentFileExplorerItemId;</method></netparam>  
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>         
+        <netparam><method name="getValue">return parent.isOwner;</method></netparam>
+        <netparam><method name="getValue">return parent.moveToHome;</method></netparam>
+          
+        <handler name="ondata" args="value">    
+            if ($debug) Debug.write("moveFile: ",value);
+            parent.overItem.doOpen();
+            parent.refObj.parent.parent.doOpen();
+            parent.destroy();
+        </handler>
+    </netRemoteCallHib>   
+     -->  
+   
+	<view name="_dragFileSymbol" x="10" y="10"
+		resource="$once{ parent.dragItemResource }" />
+	
+	<view name="_dragIcon" x="18" y="14" 
+		  resource="drag_n_drop_rsc" frame="1" />
+	
+	<dragstate name="dragger"/>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/dynamicFileName.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/dynamicFileName.lzx
new file mode 100644
index 0000000..033f205
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/dynamicFileName.lzx
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="dynamicFileName" extends="customInputtext" 
+	   fontsize="10" bgcolor="0xFFFFFF">
+	
+	<attribute name="isNew" value="false" type="boolean" />
+	
+	<!-- Only used in case its an update -->
+	<attribute name="fileExplorerItemId" value="0" type="number" />
+	
+	<attribute name="parentFileExplorerItemId" value="0" type="number" />
+	<attribute name="isOwner" value="false" type="boolean" />
+	
+	<attribute name="refObj" value="null" />
+	
+	<handler name="onblur">
+		lz.ModeManager.release(this);
+		if ($debug) Debug.write("Store and Destroy ",this.parentFileExplorerItemId);
+		if (this.isNew) {
+		    this.addFolder();
+		} else {
+			this.updateFileOrFolderName();
+		}
+	</handler>
+	
+	<handler name="onkeydown" args="k">
+		<![CDATA[
+    		if (k == 13 || k == 27) {
+    			this.onblur.sendEvent();
+    		}
+		]]>
+	</handler>
+	
+	<!--
+	public Long addFolderSelf(String SID, Long parentFileExplorerItemId,
+            String fileName, Long room_id, Boolean isOwner)
+     -->
+	
+	<method name="addFolder">
+        <![CDATA[
+            if ($debug) Debug.write("moveFile HTTP 1: ");
+            //this.getFileExplorerByRoom.doCall();
+            var downloadurl = canvas.getUrl()+'services/FileService/addFolderSelfInternal?'
+                            +'SID='+canvas.sessionId
+                            +'&parentFileExplorerItemId='+this.parentFileExplorerItemId
+                            +'&fileName='+this.text
+                            +'&roomId='+hib.currentroomid
+                            +'&isOwner='+this.isOwner;
+            
+            this.addFolderSelf.setAttribute("src",downloadurl);
+            if ($debug) Debug.write("addFolderSelf doRequest ",downloadurl);
+            this.addFolderSelf.doRequest();
+        ]]>
+    </method>
+    
+    <dataset name="addFolderSelf" type="http" >
+        <handler name="ondata" args="d">
+            <![CDATA[
+                //if ($debug) Debug.write("ondata ",d);
+                if ($debug) Debug.write("addFolderSelf: ",d);
+                parent.completed();
+            ]]>
+        </handler>
+    </dataset>
+	
+	<!--
+	<netRemoteCallHib name="addFolder" funcname="fileservice.addFolder" 
+        remotecontext="$once{ canvas.thishib }" >   
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.parentFileExplorerItemId;</method></netparam> 
+        <netparam><method name="getValue">return parent.parent.text;</method></netparam>   
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>  
+        <netparam><method name="getValue">return parent.parent.isOwner;</method></netparam>         
+        <handler name="ondata" args="value">    
+            if ($debug) Debug.write("addFolder: ",value);
+            parent.completed(value);
+        </handler>
+    </netRemoteCallHib>  
+     -->
+	
+	<!--
+    public Long updateFileOrFolderNameSelf(String SID, Long fileExplorerItemId,
+            String fileName)
+     -->
+    <method name="updateFileOrFolderName">
+        <![CDATA[
+            if ($debug) Debug.write("moveFile HTTP 1: ");
+            //this.getFileExplorerByRoom.doCall();
+            var downloadurl = canvas.getUrl()+'services/FileService/updateFileOrFolderNameSelf?'
+                            +'SID='+canvas.sessionId
+                            +'&fileExplorerItemId='+this.fileExplorerItemId
+                            +'&fileName='+this.text;
+            
+            this.updateFileOrFolderNameSelf.setAttribute("src",downloadurl);
+            if ($debug) Debug.write("updateFileOrFolderNameSelf doRequest ",downloadurl);
+            this.updateFileOrFolderNameSelf.doRequest();
+        ]]>
+    </method>
+    
+    <dataset name="updateFileOrFolderNameSelf" type="http" >
+        <handler name="ondata" args="d">
+            <![CDATA[
+                //if ($debug) Debug.write("ondata ",d);
+                if ($debug) Debug.write("updateFileOrFolderNameSelf: ",d);
+                parent.completedRename();
+            ]]>
+        </handler>
+    </dataset>
+    
+	<!--
+	<netRemoteCallHib name="updateFileOrFolderName" funcname="fileservice.updateFileOrFolderName" 
+        remotecontext="$once{ canvas.thishib }" >   
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.fileExplorerItemId;</method></netparam> 
+        <netparam><method name="getValue">return parent.parent.text;</method></netparam>   
+        <handler name="ondata" args="value">    
+            if ($debug) Debug.write("updateFileOrFolderName: ",parent.fileExplorerItemId);
+            parent.completedRename();
+        </handler>
+    </netRemoteCallHib>
+     -->
+    
+	<method name="completed">
+		//this.refObj.fileExplorerItemId = fileExplorerItemId;
+		this.refObj.setAttribute("fileName",this.getText());
+		this.refObj.parent.parent.doOpen();
+		this.destroy();
+	</method>
+	
+	<method name="completedRename">
+		this.refObj.setAttribute("fileName",this.getText());
+		this.destroy();
+	</method>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/fileExplorer.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/fileExplorer.lzx
new file mode 100644
index 0000000..07e0640
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/fileExplorer.lzx
@@ -0,0 +1,622 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<!-- ###################
+    Class fileExplorer
+ -->
+<class name="fileExplorer" extends="view" >
+    
+    <attribute name="parentFolderId" value="-2" type="number" />
+    
+    <attribute name="_selected" value="null" />
+    
+    <event name="onClose"/>
+    
+    <handler name="oninit">
+    	canvas.currentFileExplorer = this;
+        lz.Track.register(this._trashBar._trashIcon, canvas.currentImagesListdraw.currentTrackGroupName);
+    </handler>
+    
+    <handler name="onvisible">
+    	if ($debug) Debug.write("fileExplorer::onvisible this._selected ",this._selected);
+        //This is thrown whenever an uploaded Document has completed
+        if (this._selected == null) {
+            this.loadFiles();
+        } else {
+        	if (this._selected.isFolder) {
+            	this._selected.refresh();
+        	} else {
+        		this.loadFiles();
+        	}
+        }
+    </handler>
+    
+    <method name="selectItem" args="itemRef">
+        if (this._selected != null) {
+            this._selected.deselectItem();
+        }
+        
+        this._selected = itemRef;
+        this._selected.selectItem();
+        
+        //Set parent folder id for next Folder or uploaded file
+        if (this._selected.fileExplorerItemId == 0) {
+            if (this._selected.isOwner) {
+                this.parentFolderId = -2;
+            } else {
+                this.parentFolderId = 0;
+            }
+        } else {
+            this.parentFolderId = this._selected.fileExplorerItemId;
+        }
+        
+    </method>
+    
+    <method name="addFile">
+    	<![CDATA[
+	    	if ($debug) Debug.write("addFile :: ",this._selected,this.parentFolderId);
+	    	
+	    	if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+	    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+	    		return;
+	    	}
+	    	
+	    	var isOwner = 0;
+	    	if (this.parentFolderId == -2) {
+	    		isOwner = 1;
+	    	} else {
+	    		//Check if its a subfolder of a Owners Dir
+	    		if (this._selected != null) {
+	    			var checkForOwer = this._selected.checkForIsOwner();
+	    			if ($debug) Debug.write("checkForOwer ::",checkForOwer);
+	    			if (checkForOwer) {
+	    				isOwner = 1;
+	    			}
+	    		}
+	    	}
+	    	
+	    	if ($debug) Debug.write("addFile :: ",isOwner);
+	    	
+	        new lz.uploadWindowExplorer(canvas.main_content._content.inner,{
+	                            x:60,uploadmodule:canvas.uploadmoduleimg,
+	                            parentFolderId:this.parentFolderId,
+	                            isOwner:isOwner,
+	                            fileExplorerRef:this,
+	                            isOnlyImage:true,
+	                            servletName:'file.upload'
+	                        });
+        ]]>
+    </method>
+    
+    <method name="addFolder">
+    	<![CDATA[
+    		if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+	    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+	    		return;
+	    	}
+    
+	        if (this._selected == null) {
+	        	if ($debug) Debug.write("addFolder ::1 ",this._selected);
+	            this._filearea._contentarea.subviews[0].addFolder();
+	        } else {
+	            if (this._selected.isFolder) {
+	            	if ($debug) Debug.write("-1 this._selected.isFolder ",this._selected);
+	                this._selected.addFolder();
+	            } else {
+	            	if ($debug) Debug.write("-2 !this._selected.isFolder ",this._selected);
+	                this._selected.parent.parent.addFolder();
+	            }
+	        }
+	    ]]>
+    </method>
+    
+    <method name="loadWmlFile" args="itemObj">
+		this.selectItem(itemObj);
+		canvas._drawarea.prepareLoadWMLFile(itemObj); 
+		//canvas._drawarea.loadObjectList(itemObj); 
+	</method>
+
+    
+    <method name="loadDocument" args="itemObj">
+        this.selectItem(itemObj);
+        this._documentsTabs.setAttribute("height",20);
+        this._documentsTabs.setAttribute("visibility","visible");
+        this._documentsTabs.hideAll();
+        var t = new lz.presentationPreview(this,{
+                        documentObj:itemObj,
+                        refObjList:this
+                    });
+        //t.sendToBack();
+        //this._bg1.sendToBack();
+        //this._bg2.sendToBack();
+        this._documentsTabs.bringToFront();
+        return t;
+    </method>
+    
+    <method name="playVideo" args="itemObj">
+    	this.selectItem(itemObj);
+    	canvas._drawarea.playVideoSynced(itemObj.fileExplorerItemId,itemObj.fileName,itemObj.flvWidth,itemObj.flvHeight);
+    </method>
+    
+    <method name="loadFiles">
+    	<![CDATA[
+    	    if (this["getFileExplorerByRoomSelf"]) {
+                //this.getFileExplorerByRoom.doCall();
+                var downloadurl = canvas.getUrl()+'services/FileService/getFileExplorerByRoomSelfInternal?'
+                                +'SID='+canvas.sessionId
+                                +'&roomId='+hib.currentroomid;
+                
+                this.getFileExplorerByRoomSelf.setAttribute("src",downloadurl);
+                if ($debug) Debug.write("getFileExplorerByRoomSelf doRequest 1 ",downloadurl);
+                this.getFileExplorerByRoomSelf.doRequest();
+    	    }
+        ]]>
+    </method>
+    
+    <dataset name="getFileExplorerByRoomSelf" type="http" >
+    	<handler name="ondata" args="d">
+    		<![CDATA[
+    			if ($debug) Debug.write("ondata 1 ",this.src);
+                if ($debug) Debug.write("ondata 2 ",d);
+                parent.parseRootItems(parent.parseRootToRoomObject(d));
+            ]]>
+    	</handler>
+    </dataset>
+    
+    <method name="parseParentToRoomObject" args="dObj">
+        <![CDATA[
+            
+            var filesObject = new Array();
+            
+            var tFiles = dObj.childNodes[0].childNodes;
+            
+            if ($debug) Debug.write("parseParentToRoomObject tFiles ",tFiles);
+            
+            for (var i=0;i<tFiles.length;i++) {
+                
+                filesObject.push(this.parseToFileObj(tFiles[i].childNodes));
+                
+            }
+        
+            return filesObject;
+        ]]>
+    </method>
+    
+    <method name="parseRootToRoomObject" args="dObj">
+        <![CDATA[
+            
+            var roomObject = new Object();
+            
+            roomObject.userHome = new Array();
+            roomObject.roomHome = new Array();
+            roomObject.userHomeSize = 0;
+            roomObject.roomHomeSize = 0;
+            
+            var tFiles = dObj.childNodes[0].childNodes[0].childNodes;
+            
+            //if ($debug) Debug.write("tFiles ",tFiles);
+            
+            for (var i=0;i<tFiles.length;i++) {
+                
+                //if ($debug) Debug.write("nodeName",tFiles[i].nodeName);
+                
+                if (tFiles[i].nodeName == "userHomeSize") {
+                    if ($debug) Debug.write("roomHomeSize",tFiles[i].childNodes[0].data);
+                    roomObject.userHomeSize = Number(tFiles[i].childNodes[0].data);
+                } else if (tFiles[i].nodeName == "roomHomeSize") {
+                    if ($debug) Debug.write("roomHomeSize",tFiles[i].childNodes[0].data);
+                    roomObject.roomHomeSize = Number(tFiles[i].childNodes[0].data);
+                } else if (tFiles[i].nodeName == "roomHome") {
+                    roomObject.roomHome.push(this.parseToFileObj(tFiles[i].childNodes));
+                } else if (tFiles[i].nodeName == "userHome") {
+                    roomObject.userHome.push(this.parseToFileObj(tFiles[i].childNodes));
+                }
+                
+            }
+        
+            return roomObject;
+        ]]>
+    </method>
+    
+    <method name="parseToFileObj" args="dObj">
+        <![CDATA[
+        
+            var tFileObj = new Object();
+        
+            var type = "string";
+            
+            for (var i=0;i<dObj.length;i++) {
+                
+                type = "string";
+            
+                switch (dObj[i].nodeName){
+                    case "externalFileId":
+                        type = "int";
+                        break;
+                    case "fileExplorerItemId":
+                        type = "int";
+                        break;
+                    case "fileSize":
+                        type = "int";
+                        break;
+                    case "flvHeight":
+                        type = "int";
+                        break;
+                    case "flvWidth":
+                        type = "int";
+                        break;
+                    case "insertedBy":
+                        type = "int";
+                        break;
+                    case "isChart":
+                        type = "boolean";
+                        break;
+                    case "isFolder":
+                        type = "boolean";
+                        break;
+                    case "isImage":
+                        type = "boolean";
+                        break;
+                    case "isPresentation":
+                        type = "boolean";
+                        break;
+                    case "isStoredWmlFile":
+                        type = "boolean";
+                        break;
+                    case "isVideo":
+                        type = "boolean";
+                        break;
+                    case "ownerId":
+                        type = "int";
+                        break;
+                    case "parentFileExplorerItemId":
+                        type = "int";
+                        break;
+                    case "room_id":
+                        type = "int";
+                        break;
+                    default:
+                        break;
+                }
+                
+                //if ($debug) Debug.write("Obj attr ",dObj[i].nodeName,type);
+                
+                if (dObj[i].childNodes.length > 0) {
+                    switch (type) {
+                        case "int":
+                            tFileObj[dObj[i].nodeName] = Number(dObj[i].childNodes[0].data);
+                            break;
+                        case "boolean":
+                            tFileObj[dObj[i].nodeName] = (dObj[i].childNodes[0].data == "true") ? true : false;
+                            break;
+                        default:
+                            tFileObj[dObj[i].nodeName] = dObj[i].childNodes[0].data;
+                            break;
+                    }
+                } else {
+                    tFileObj[dObj[i].nodeName] = null;
+                }
+                
+                //if ($debug) Debug.write("Obj attr ",dObj[i].nodeName,tFileObj[dObj[i].nodeName]);
+                
+            }
+        
+            return tFileObj;
+            
+        ]]>
+    </method>
+    
+    <!--
+        Parse Items and generate Output
+     --> 
+    <method name="parseRootItems" args="roomObject">
+        <![CDATA[
+            this.clearContent();
+            
+            var homeSizeInMBytes = Math.round( (roomObject.userHomeSize / 1024 / 1024) * 100) / 100;
+            
+            this._userSpace._userHomeSize.setAttribute("text","" + homeSizeInMBytes + " MBytes");
+            
+            var roomHomeSizeInMBytes = Math.round( (roomObject.roomHomeSize / 1024 / 1024) * 100) / 100;
+            
+            this._userSpace._roomHomeSize.setAttribute("text","" + roomHomeSizeInMBytes + " MBytes");
+            
+            var homeIcon = new lz.rootFileExplorerItem(this._filearea._contentarea,{
+                                        open:true,
+                                        fileName:canvas.getLabelName(706),
+                                        name:'_home',
+                                        isRoot:true,
+                                        fileIcon:'file_explorer_folder_home_rsc',
+                                        isOwner:true,
+                                        refObjListRoot:this
+                                    });
+                                    
+            homeIcon.content.setAttribute("visibility","visible");
+            homeIcon.icon_folder_pre.setAttribute("frame",2);
+            homeIcon._folderIcon.setAttribute("frame",2);
+            
+            //Home area
+            for (var i=0; i<roomObject.userHome.length; i++) {
+                var fileExplorerItem = roomObject.userHome[i];
+                //if ($debug) Debug.write("fileExplorerItem, ",fileExplorerItem);
+                if (fileExplorerItem.isFolder) {
+                    new lz.folderFileExplorerItem(homeIcon.content,{
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileIcon:'icon_folder_rsc',
+                                            refObjListRoot:this
+                                        });
+                } else if (fileExplorerItem.isImage) {
+                    new lz.imageFileExplorerItem(homeIcon.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileHash:fileExplorerItem.fileHash,
+                                            isFolder:false,isImage:true,
+                                            fileIcon:'file_explorer_image_rsc',
+                                            refObjListRoot:this
+                                        });
+                } else if (fileExplorerItem.isPresentation) {
+                    new lz.documentFileExplorerItem(homeIcon.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileHash:fileExplorerItem.fileHash,
+                                            isFolder:false,isPresentation:true,
+                                            fileIcon:'file_explorer_document_rsc',
+                                            refObjListRoot:this
+                                        });
+                } else if (fileExplorerItem.isVideo) {
+                    new lz.videoFileExplorerItem(homeIcon.content,{
+                                            isFolder:false,
+                                            isVideo:true,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileHash:fileExplorerItem.fileHash,
+                                            isFolder:false,isImage:true,
+                                            fileIcon:'file_explorer_video_rsc',
+                                            flvHeight:fileExplorerItem.flvHeight,
+                                            flvWidth:fileExplorerItem.flvWidth,
+                                            refObjListRoot:this
+                                        });
+                } else if (fileExplorerItem.isStoredWmlFile) { 
+                	new lz.wmlFileExplorerItem(homeIcon.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileIcon:'file_explorer_wml_rsc',
+                                            isWmlFile: true,
+                                            refObjListRoot:this                	
+            							});
+                } else if (fileExplorerItem.isChart) { 
+                  new lz.wmlFileExplorerItem(homeIcon.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileIcon:'file_explorer_chart_rsc',
+                                            isChart:true,
+                                            refObjListRoot:this                 
+                          });
+
+            	}
+            }
+            //Public - Room Area
+            var roomHome = new lz.rootFileExplorerItem(this._filearea._contentarea,{
+                                        open:true,
+                                        fileName:canvas.getLabelName(707),
+                                        name:'_roomHome',
+                                        isRoot:true,
+                                        fileIcon:'file_explorer_folder_network_rsc',
+                                        refObjListRoot:this
+                                    });
+                                    
+            roomHome.content.setAttribute("visibility","visible");
+            roomHome.icon_folder_pre.setAttribute("frame",2);
+            roomHome._folderIcon.setAttribute("frame",2);
+            
+            //Public area
+            for (var i=0; i<roomObject.roomHome.length; i++) {
+                var fileExplorerItem = roomObject.roomHome[i];
+                //if ($debug) Debug.write("fileExplorerItem.fileExplorerItemId, ",fileExplorerItem.fileExplorerItemId);
+                //if ($debug) Debug.write("fileExplorerItem, ",fileExplorerItem);
+                if (fileExplorerItem.isFolder) {
+                    new lz.folderFileExplorerItem(roomHome.content,{
+                                            fileName:fileExplorerItem.fileName,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileIcon:'icon_folder_rsc',
+                                            refObjListRoot:this
+                                        });
+                } else if (fileExplorerItem.isImage) {
+                    new lz.imageFileExplorerItem(roomHome.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileHash:fileExplorerItem.fileHash,
+                                            isFolder:false,isImage:true,
+                                            fileIcon:'file_explorer_image_rsc',
+                                            refObjListRoot:this
+                                        });
+                } else if (fileExplorerItem.isPresentation) {
+                    new lz.documentFileExplorerItem(roomHome.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileHash:fileExplorerItem.fileHash,
+                                            isFolder:false,isPresentation:true,
+                                            fileIcon:'file_explorer_document_rsc',
+                                            refObjListRoot:this
+                                        });
+                } else if (fileExplorerItem.isVideo) {
+                    new lz.videoFileExplorerItem(roomHome.content,{
+                                            isFolder:false,
+                                            isVideo:true,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileHash:fileExplorerItem.fileHash,
+                                            isFolder:false,isImage:true,
+                                            fileIcon:'file_explorer_video_rsc',
+                                            flvHeight:fileExplorerItem.flvHeight,
+                                            flvWidth:fileExplorerItem.flvWidth,
+                                            refObjListRoot:this
+                                        });
+                } else if (fileExplorerItem.isStoredWmlFile) { 
+                	new lz.wmlFileExplorerItem(roomHome.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileIcon:'file_explorer_wml_rsc',
+                                            isWmlFile: true,
+                                            refObjListRoot:this                	
+            							});
+                } else if (fileExplorerItem.isChart) { 
+                  new lz.wmlFileExplorerItem(roomHome.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileIcon:'file_explorer_chart_rsc',
+                                            isChart:true,
+                                            refObjListRoot:this                 
+                          });
+           		}
+            }
+        ]]>
+    </method>
+    
+    <method name="clearContent">
+        <![CDATA[
+            for (var eg in this._filearea._contentarea.subviews) {
+                this._filearea._contentarea.subviews[eg].destroy();
+            }
+        ]]>
+    </method>
+    
+    <!--
+        Borders
+     -->
+               
+    <view name="_border2" x="0" y="${ 33 + parent._documentsTabs.height }" width="$once{ parent.width }" 
+          height="1" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" />     
+    
+    <!--
+        Documents - Tabbar
+     --> 
+    <documentsTabBar name="_documentsTabs" y="14" width="$once{ parent.width }"
+                    visibility="hidden" />
+    	
+    
+    <!--
+        File Tree Content Tabbar
+     --> 
+     
+    <view name="_fileBar" layout="axis:x" x="0" y="${ 14 + parent._documentsTabs.height }">
+        <baseChooseIconView labelid="702" height="20" width="19" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }"
+                            resourceN="file_explorer_add_file_rsc">
+            <handler name="onclick">
+                if ($debug) Debug.write("Upload File");
+                parent.parent.addFile();
+            </handler>
+        </baseChooseIconView>
+        <baseChooseIconView labelid="703" height="20" width="19" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }"
+                            resourceN="file_explorer_add_folder_rsc" >
+            <handler name="onclick">
+                if ($debug) Debug.write("Add Folder");
+                parent.parent.addFolder();
+            </handler>
+        </baseChooseIconView>
+        <baseChooseIconView labelid="704" height="20" width="19" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }"
+                            resourceN="file_explorer_reload_rsc" >
+            <handler name="onclick">
+                if ($debug) Debug.write("Refresh Folder");
+                parent.parent.loadFiles();
+            </handler>
+        </baseChooseIconView>
+        <view bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" height="20" width="1" />
+    </view>
+    
+    <!--
+        File Tree Content Trashbar
+     --> 
+     
+    <view name="_trashBar" layout="axis:x" x="$once{ parent.width - 20 }" 
+          y="${ 14 + parent._documentsTabs.height }">
+        <baseChooseIconView name="_trashIcon" labelid="705" height="20" width="19" 
+                         resourceN="file_explorer_trash_rsc" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }">
+            <attribute name="isTrashCan" value="true" type="boolean" />
+            <handler name="onclick">
+                if ($debug) Debug.write("Delete Folder and Files");
+            </handler>
+            <handler name="onmousetrackover">
+                //if ($debug) Debug.write("onmousetrackover");
+                canvas.currentImagesListdraw.currentDragItem.sendOverItem(this);
+                this.onmouseover.sendEvent();
+            </handler>
+            <handler name="onmousetrackout">
+                //if ($debug) Debug.write("onmousetrackout");
+                canvas.currentImagesListdraw.currentDragItem.sendOutItem(this);
+                this.onmouseout.sendEvent();
+            </handler>
+            <handler name="onmousetrackup">
+                if ($debug) Debug.write("onmousetrackup");
+                this.onmouseout.sendEvent();
+            </handler> 
+        </baseChooseIconView>
+        <view bgcolor="0xE0E0E0" height="20" width="1" />
+    </view>
+    
+    <!--
+        File Tree Content
+     --> 
+    
+    <view name="_filearea" x="1" y="${ 34 + parent._documentsTabs.height }" clip="true"
+          height="${ parent.height - 35 - parent._documentsTabs.height - parent._userSpace.height }" 
+          width="$once{ parent.width }">
+        
+        <attribute name="currentTrackGroupName" value="fileExplorer" type="string" />
+        
+        <attribute name="currentDragItem" value="null" />
+        
+        <handler name="oninit">
+            canvas.currentImagesListdraw = this;
+        </handler>
+        
+        <view name="_contentarea" layout="axis:y;inset:1" />
+        
+        <om_vscrollbar name="_scrollbar" />
+        <om_hscrollbar name="_hscrollbar" />
+    </view>
+    
+    <view name="_userSpace" height="40" valign="bottom" width="$once{ parent.width }">
+    	
+    	<labelText name="_userHomeSizeLabel" labelid="923" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }" />
+    	
+    	<labelText name="_userHomeSize" align="right" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }" />
+    	
+    	<labelText name="_roomHomeSizeLabel" labelid="924" y="20" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }" />
+    	
+    	<labelText name="_roomHomeSize" align="right" y="20" fgcolor="$once{ canvas.getThemeColor('menuTextColor') }" />
+    	
+    </view>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/library.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/library.lzx
new file mode 100644
index 0000000..d7ec4ec
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/library.lzx
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+    <include href="presentations/" />
+    <include href="tabbar/" />
+    
+    <include href="treeitems/" />
+    <include href="dynamicFileName.lzx" />
+    <include href="dragItemFileExplorer.lzx" />
+    <include href="fileExplorer.lzx" />
+
+    <resource name="drag_n_drop_rsc">
+    	<!-- APL Author sebawagner --> 
+        <frame src="resources/icon_drag_no.png" />
+        <!-- APL Author sebawagner --> 
+        <frame src="resources/icon_drag_add.png" />
+    </resource>    
+
+    <resource name="icon_folder_pre_rsc">
+    	<!-- APL Author sebawagner --> 
+        <frame src="resources/icon_folder_pre_closed_rsc.png" />
+        <!-- APL Author sebawagner --> 
+        <frame src="resources/icon_folder_pre_open_rsc.png" />
+    </resource>
+    
+    <resource name="icon_folder_rsc">
+    	<!-- FamFam Icon Set -->
+        <frame src="resources/folder.png" />
+        <frame src="resources/folder.png" />
+    </resource>
+    
+    <!-- FamFam Icon Set --> 
+    <resource name="file_explorer_video_rsc" src="resources/film.png" />	
+    <!-- FamFam Icon Set -->
+    <resource name="file_explorer_add_file_rsc" src="resources/add.png" />
+    <!-- FamFam Icon Set --> 
+    <resource name="file_explorer_add_folder_rsc" src="resources/folder_add.png" />
+    <!-- FamFam Icon Set --> 
+    <resource name="file_explorer_reload_rsc" src="resources/arrow_refresh_small.png" />
+    <!-- 
+    WPZOOM Creative Commons Attribution-ShareAlike 3.0 Unported License.
+    http://www.wpzoom.com/wpzoom/new-freebie-wpzoom-developer-icon-set-154-free-icons/
+     -->
+    <resource name="file_explorer_trash_rsc" src="resources/trash.png" />
+    <!-- APL Author sebawagner -->
+    <resource name="file_explorer_close_rsc" src="resources/remove_item.png" />
+    <!-- FamFam Icon Set --> 
+    <resource name="file_explorer_view_tree_rsc" src="resources/folder_explore.png" />   
+    
+    <!-- FamFam Icon Set --> 
+    <resource name="file_explorer_image_rsc" src="resources/photo.png" />
+    <!-- FamFam Icon Set --> 
+    <resource name="file_explorer_document_rsc" src="resources/report.png" />
+    <!-- FamFam Icon Set --> 
+    <resource name="file_explorer_wml_rsc" src="resources/map.png" />
+    <!-- FamFam Icon Set -->
+    <resource name="file_explorer_chart_rsc" src="resources/chart_pie.png" />
+    <!-- FamFam Icon Set -->
+    <resource name="file_explorer_folder_rsc" src="resources/folder.png" />
+    <!-- FamFam Icon Set -->
+    <resource name="file_explorer_folder_network_rsc" src="resources/world_link.png" />
+    <!-- FamFam Icon Set -->
+    <resource name="file_explorer_folder_home_rsc" src="resources/house_link.png" />
+    
+    
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/baseListPresentationItemExplorer.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/baseListPresentationItemExplorer.lzx
new file mode 100644
index 0000000..361ca67
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/baseListPresentationItemExplorer.lzx
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="baseListPresentationItemExplorer" extends="view" height="110" width="$once{ parent.width }" 
+    bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" focusable="true">
+    
+    <attribute name="uploadmodul" value="" type="string"/>
+    <attribute name="selectable" value="true" type="boolean" />
+    <attribute name="isselected" value="false" type="boolean" />
+    <attribute name="isoriginal" value="false" type="boolean" />
+    
+    <attribute name="uploadmoduleimgfolder" value="$once{ canvas.uploadmoduleimgfolder }" type="string" />
+    
+	<method name="formatURL" args="filename">
+	<![CDATA[
+		var downloadurl = canvas.getUrl() + 'DownloadHandler?' +
+			'fileName=' + encodeURIComponent(filename) +
+			'&moduleName=' + this.uploadmodul +
+			'&parentPath=' + encodeURIComponent(this.uploadmoduleimgfolder + '/') +
+			'&room_id=files' +
+			'&sid=' + canvas.sessionId;
+		////Debug.write("downloadurl: ",downloadurl);
+		return downloadurl;
+	]]>
+	</method>    
+
+    <handler name="onmouseover">
+        setCurrentMouseWheelObject(this.parent.parent._scrollbar);
+        if (!this.isselected){
+            this.setAttribute('bgcolor',canvas.getThemeColor('baseMouseOvercolorizer'));
+        }
+    </handler> 
+    <handler name="onmouseout">
+        disableCurrentMouseWheelObject();
+        if (!this.isselected){
+            this.setAttribute('bgcolor',canvas.getThemeColor('mainBackgroundColor'));
+        }
+    </handler>  
+       
+    <handler name="onfocus">
+        this.selectItem();
+    </handler>
+    <handler name="onblur">
+        this.disselectItem();
+    </handler>
+
+    <handler name="onkeyup" args="k"> 
+        //Debug.write("key " + k + " up");
+    </handler>
+    
+    <method name="selectItem">
+        //this.parent.selectItem(this);
+    </method>
+    <method name="disselectItem">
+        //this.parent.selectItem(this);
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/imageListInnerTableExplorer.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/imageListInnerTableExplorer.lzx
new file mode 100644
index 0000000..43aded1
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/imageListInnerTableExplorer.lzx
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="imageListInnerTableExplorer" extends="view" width="${ parent.width-2 }" 
+    height="${ parent.height-2 }" 
+	bgcolor="white" x="1" y="1" clip="true">
+    
+    <view name="_listcontent" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" width="$once{ parent.width }" >
+        <simplelayout name="_layout" axis="y" spacing="2" inset="1" />
+        
+        <!--
+	  	<netRemoteCallHib name="deleteFile" funcname="fileservice.deleteFile" remotecontext="$once{ canvas.thishib }" >   
+			<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+	  		<netparam><method name="getValue">return parent.String1;</method></netparam>
+        	<netparam><method name="getValue">return canvas.uploadmoduleimg;</method></netparam>
+			<netparam><method name="getValue">return parent.String2;</method></netparam>
+			<netparam><method name="getValue">return hib.currentroomid;</method></netparam>        	
+	        <handler name="ondata" args="value">	
+	        	//Debug.write("  deleteFile: ",value);  
+				//Debug.write("  deleteFile: ",this.String1);    
+				//Debug.write("  deleteFile: ",this.String2);   
+		  		var tempSendArray = new Array ();
+		  		tempSendArray[0] = 'fileslist';
+		  		var nowTime = new Date();
+		  		var datumsString = nowTime.getHours()+':'+nowTime.getMinutes();
+		  		tempSendArray[1] = datumsString;
+	  			//Debug.write("Setting Message");
+	  			tempSendArray[2] = 'newfile';
+	  			tempSendArray[3] = canvas.currentusename;
+		  		//Debug.write("send: ",tempSendArray);
+		  		canvas.objMessage = tempSendArray;
+		  		hib.sendMessage.doCall();         	          				
+	        </handler>	
+	  	</netRemoteCallHib> 
+	  	 -->	
+		
+		<method name="getconfirmationscode">
+			var g = canvas.getUserData();
+			 if (g["wmlfile"]==null) {
+				 g["wmlfile"]=new Array();
+				 g["wmlfile"]["clearField"]=false;
+				 g["wmlfile"]["askagainclear"]=true;
+				 canvas.setUserData(g);
+			 }
+			 return g["wmlfile"];
+		</method>
+		
+		<method name="resetDefaultConfirmations">
+			var g = canvas.getUserData();
+			 if (g["wmlfile"]==null) g["wmlfile"]=new Array();
+			 g["wmlfile"]["clearField"]=false;
+			 g["wmlfile"]["askagainclear"]=true;
+			 canvas.setUserData(g);
+	
+		</method>	
+		
+		<method name="sendConfirmation" args="yesno,askagain" >
+			
+			//Debug.write("clear yesno,askagain: ",yesno,askagain);
+			//can only be true in this case
+		
+			 var g = canvas.getUserData();
+			 if (g["wmlfile"]==null) g["wmlfile"]=new Array();
+			 g["wmlfile"]["clearField"]=yesno;
+			 g["wmlfile"]["askagainclear"]=!askagain;
+			 canvas.setUserData(g);
+	
+			 if (yesno){
+				 //Debug.write("clear field!!");
+				canvas._drawarea.setModus('plain');
+				this.loadWmlObject.doCall();
+			 }
+		</method>				
+		
+		<method name="loadWmlObjectConfirm">
+			<![CDATA[
+			var storedImageDate = this.getconfirmationscode();
+			//Debug.write(" g[wmlfile] ",storedImageDate);
+			if (storedImageDate["clearField"] && !storedImageDate["askagainclear"]){
+				canvas._drawarea.setModus('plain');
+				this.loadWmlObject.doCall();
+			} else if (!storedImageDate["askagainclear"] && !storedImageDate["clearField"]){
+				//this case will never happen
+				this.loadWmlObject.doCall();
+			} else if (storedImageDate["askagainclear"]){
+				new lz.confirmationSingle(canvas.main_content._content.inner,{labelid:210,labeliderror:211,refObj:this});
+			} else {
+				new lz.confirmationSingle(canvas.main_content._content.inner,{labelid:210,labeliderror:211,refObj:this});
+			}
+			]]>
+		</method>
+		
+	  	<netRemoteCallHib name="loadWmlObject" funcname="fileservice.loadWmlObject" remotecontext="$once{ canvas.thishib }" >   
+			<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+			<netparam><method name="getValue">return hib.currentroomid;</method></netparam>        	
+			  <netparam><method name="getValue">return parent.String1;</method></netparam>
+	        <handler name="ondata" args="value">	
+				<![CDATA[
+					if ($debug) Debug.write("  loadwmlObjectToStage ",value); 
+					canvas._drawarea.loadwmlObjectToStage(value,this.String1,hib.currentroomid,hib.conferencedomain,true,false);
+				]]>       	     				
+	        </handler>	
+	  	</netRemoteCallHib>
+        
+        
+        <method name="loadSWFPresentation" args="url,fileName,moduleName,parentPath,room,domain,slideNumber">
+            if ($debug) Debug.write("loadSWFPresentation");
+            canvas._drawarea.loadSWFPresentationSynced(url,fileName,moduleName,parentPath,room,domain,slideNumber,"");
+        </method>
+        
+        <method name="checkSWFPresentation" args="url,fileName,moduleName,parentPath,room,domain,slideNumber">
+            if ($debug) Debug.write("checkSWFPresentation");
+            return canvas._drawarea.checkSWFPresentation(url,fileName,moduleName,parentPath,room,domain,slideNumber);
+        </method>
+        
+        <method name="checkForOriginal" args="slideNumber">
+            <![CDATA[
+                var tWhiteBoard = false;
+                for (var i=0;i<this.subviews.length;i++){
+                    if (this.subviews[i].isoriginal){
+                        tWhiteBoard = this.subviews[i].checkSWFPresentation(slideNumber);
+                        if (!tWhiteBoard) {
+                            this.subviews[i].addSWFPresentation(slideNumber);
+                            break;
+                        }
+                    }
+                }
+                if ($debug) Debug.write("tWhiteBoard: ",tWhiteBoard);
+            ]]>
+        </method>
+		 	 
+    </view>
+
+    <om_vscrollbar name="_scrollbar" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/library.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/library.lzx
new file mode 100644
index 0000000..c302cc9
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+ 
+	<include href="imageListInnerTableExplorer.lzx" />
+    
+    <include href="baseListPresentationItemExplorer.lzx" />
+    <include href="listPresentationThumbExplorer.lzx" />
+    <include href="listPresentationFilePDFExplorer.lzx" />
+    <include href="listPresentationFileOrigExplorer.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/listPresentationFileOrigExplorer.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/listPresentationFileOrigExplorer.lzx
new file mode 100644
index 0000000..da90cb4
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/listPresentationFileOrigExplorer.lzx
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="listPresentationFileOrigExplorer" extends="listPresentationFilePDFExplorer">
+    
+    <attribute name="originalName" value="" type="string"/>
+    
+    <view name="_filesave_icon_original" x="120" y="6" resource="_filesave_icon_original_rsc"
+        onmouseover="" onmouseout="">
+        <handler name="onclick">
+            this.parent.loadFileByName(this.parent.originalName.filename);
+        </handler>
+        <labelTooltip labelid="247" />
+    </view>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/listPresentationFilePDFExplorer.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/listPresentationFilePDFExplorer.lzx
new file mode 100644
index 0000000..658ecb7
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/listPresentationFilePDFExplorer.lzx
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="listPresentationFilePDFExplorer" extends="baseListPresentationItemExplorer" selectable="false">
+    
+    
+    <attribute name="pdfname" value="null" />
+    <attribute name="swfName" value="null" />
+    
+    <attribute name="fileExplorerItemId" value="-1" type="number" />
+    
+    <method name="loadFileByName" args="filename">
+    	<![CDATA[
+    		var lzURLToLoad = this.formatURL(filename)+"&fileExplorerItemId="+this.fileExplorerItemId;
+    		if ($debug) Debug.write("lzURLToLoad ",lzURLToLoad);
+        	lz.Browser.loadURL(lzURLToLoad,'_parent');
+        ]]>
+    </method>
+
+    <handler name="onclick">
+        this.parent.loadSWFPresentation(this.formatURL(this.swfName.filename),this.swfName.filename,this.uploadmodul,this.uploadmoduleimgfolder,'files',hib.conferencedomain,1);
+    </handler>
+    
+    <method name="checkSWFPresentation" args="slideNumber">
+        return this.parent.checkSWFPresentation(this.formatURL(this.swfName.filename),this.swfName.filename,this.uploadmodul,this.uploadmoduleimgfolder,'files',hib.conferencedomain,slideNumber);
+    </method>    
+    
+    <method name="addSWFPresentation" args="slideNumber">
+        this.parent.loadSWFPresentation(this.formatURL(this.swfName.filename),this.swfName.filename,this.uploadmodul,this.uploadmoduleimgfolder,'files',hib.conferencedomain,slideNumber);
+    </method>    
+    
+    <view name="_filesave_icon_pdf" x="150" y="6" resource="_filesave_icon_pdf_rsc">
+        <handler name="onclick">
+            //Debug.write("this.parent.pdfname: ",this.parent.pdfname.filename);
+            //Debug.write("this.parent: ",this.parent);
+            this.parent.loadFileByName(this.parent.pdfname.filename);
+        </handler>
+        <labelTooltip labelid="248" />
+    </view>
+        
+    <labelText name="_Text" y="40" labelid="249" width="240" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/listPresentationThumbExplorer.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/listPresentationThumbExplorer.lzx
new file mode 100644
index 0000000..2640814
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/items/listPresentationThumbExplorer.lzx
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="listPresentationThumbExplorer" extends="baseListPresentationItemExplorer">
+    
+    <attribute name="thumbname" value="" type="string"/>
+    <attribute name="no" value="" type="string"/>
+    
+    <handler name="oninit">
+        this._thumb.setAttribute('src',this.formatURL(this.thumbname));
+    </handler>
+    
+    <handler name="onclick">
+        this.parent.checkForOriginal(Number(no));
+    </handler>    
+    
+    <image name="_thumb" x="10" y="1"/>
+    <text name="_thumbText" x="120" text="$once{ this.parent.no }" fontsize="10"
+        width="240" multiline="true"/>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/library.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/library.lzx
new file mode 100644
index 0000000..9cf7dd1
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/library.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<include href="items/" />
+	<include href="presentationFilesList.lzx" />
+    <include href="presentationPreview.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/presentationFilesList.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/presentationFilesList.lzx
new file mode 100644
index 0000000..bddaf0e
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/presentationFilesList.lzx
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+<!--  -->
+
+<class name="presentationFilesList" extends="view" 
+       x="0" y="40" height="${ parent.height-40 }" 
+        width="${ parent.width }" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+    
+    <event name="onclose" />
+    
+	<view width="$once{ parent.width-2 }" height="${ parent.height-2 }" 
+		  x="1" y="1" bgcolor="white" />
+
+	<attribute name="uploadmodul" value="$once{ canvas.uploadmoduleimg }" type="string" />
+
+    <method name="addPresentationThumb" args="thumbName,no">
+        new lz.listPresentationThumbExplorer(this._table._listcontent,{isExplorer:true,
+        					uploadmodul:this.uploadmodul,thumbname:thumbName,no:no});
+    </method>
+    
+    <method name="addListpresentationFileOrig" args="originalName,pdfname,swfName,fileExplorerItemId">
+    	if ($debug) Debug.write("addListpresentationFileOrig ",originalName,pdfname,swfName,fileExplorerItemId);
+        new lz.listPresentationFileOrigExplorer(this._table._listcontent,{
+	        				isExplorer:true,
+	        				isoriginal:true,
+	        				uploadmodul:this.uploadmodul,
+	        				originalName:originalName,
+	        				pdfname:pdfname,
+	        				swfName:swfName,
+	        				fileExplorerItemId:fileExplorerItemId
+        				});
+    </method>
+    
+    <method name="addListpresentationFilePDF" args="pdfname,swfName,fileExplorerItemId">
+    	if ($debug) Debug.write("addListpresentationFilePDF ",originalName,pdfname,swfName,fileExplorerItemId);
+        new lz.listPresentationFilePDFExplorer(this._table._listcontent,{
+	        				isExplorer:true,
+	        				isoriginal:true,
+	        				uploadmodul:this.uploadmodul,
+	        				pdfname:pdfname,
+	        				swfName:swfName,
+	        				fileExplorerItemId:fileExplorerItemId
+        				});
+    </method>
+	    
+    <method name="resetList">
+    	this._table.destroy();
+    	new lz.imageListInnerTableExplorer(this,{name:'_table'});
+    	this._hideForNonMods.bringToFront();
+    </method>
+    
+    <method name="highlightItem" args="obj">
+    	<![CDATA[
+    		for (var i=0;i<this._table._listcontent.subviews.length;i++){
+    			if (!this._table._listcontent.subviews[i].isPpt){
+                    //Debug.write("this._table._listcontent.subviews[i]: ",this._table._listcontent.subviews[i]);
+    				this._table._listcontent.subviews[i]._thumbText.setAttribute('text','<font>'+this._table._listcontent.subviews[i].filenamePure+'</font>');
+                }
+    		}
+    		obj._thumbText.setAttribute('text','<font><b>'+obj.filenamePure+'</b></font>');
+    	]]>
+    </method>
+    
+	<imageListInnerTableExplorer name="_table" y="20"
+						 height="${ parent.height-22 }" />
+	
+    <view name="_trashBar" layout="axis:x" x="$once{ parent.width - 20 }" y="0">
+        <baseChooseIconView name="_trashIcon" labelid="718" height="20" width="19" 
+                         resourceN="file_explorer_close_rsc">
+            <handler name="onclick">
+                parent.parent.onclose.sendEvent();
+            </handler>
+        </baseChooseIconView>
+        <view bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" height="20" width="1" />
+    </view>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/presentationPreview.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/presentationPreview.lzx
new file mode 100644
index 0000000..fed200f
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/presentations/presentationPreview.lzx
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="presentationPreview" extends="view" x="1" y="33" clip="true"
+        height="${ parent.height - 34 }" width="$once{ parent.width - 2 }">
+	
+	
+	<attribute name="documentObj" value="null" />
+	<attribute name="refObjList" value="null" />
+	
+	<attribute name="miniButton" value="null" />
+	
+	<handler name="oninit">
+		this.addFolderSequence();
+		if ($debug) Debug.write("presentationPreview 1 ",this.width);
+		if ($debug) Debug.write("presentationPreview 2 ",this.height);
+		this.miniButton = this.refObjList._documentsTabs.addItem(this);
+	</handler>
+	
+	<method name="addFolderSequence">
+        <![CDATA[
+        if ($debug) Debug.write("foldername 1 ",this.documentObj.fileHash);
+        if ($debug) Debug.write("foldername 2 ",this.documentObj.fileExplorerItemId);
+        canvas.uploadmoduleimgfolder = '/'+this.documentObj.fileHash;
+        this.getPresentationPreviewFileExplorer.doCall();
+        ]]>
+    </method>
+    
+    <netRemoteCallHib name="getPresentationPreviewFileExplorer" funcname="fileservice.getPresentationPreviewFileExplorer" 
+        remotecontext="$once{ canvas.thishib }" >   
+        <netparam><method name="getValue">return canvas.sessionId; </method></netparam>
+        <netparam><method name="getValue">return parent.parent.documentObj.fileHash;</method></netparam>
+        <handler name="ondata" args="value">    
+            if ($debug) Debug.write("getPresentationPreviewFileExplorer -1-: ",value);
+            if ($debug) Debug.write("getPresentationPreviewFileExplorer -3-: ",parent.documentObj.fileHash);
+            parent.renderItems(value);
+        </handler>
+    </netRemoteCallHib>     
+    
+    <method name="renderItems" args="presentationObject" >
+        if ($debug) Debug.write("this: ",this);
+        if ($debug) Debug.write("presentationObject: ",presentationObject);
+        <![CDATA[
+            
+            if ($debug) Debug.write("presentationObject: ",presentationObject);
+        
+            if (presentationObject.pdfDocument==null){
+                //Is PDF only
+                //Debug.write("Is PDF only");
+                this._imageslistdraw.addListpresentationFilePDF(presentationObject.originalDocument,presentationObject.swfDocument,this.documentObj.fileExplorerItemId);
+            } else {
+                //Is original Document + PDF-Document
+                //Debug.write("Is original Document + PDF-Document");
+                this._imageslistdraw.addListpresentationFileOrig(presentationObject.originalDocument,presentationObject.pdfDocument,presentationObject.swfDocument,this.documentObj.fileExplorerItemId);
+            }
+        
+            for (var eg=0;eg<presentationObject.thumbs.thumbs.length;eg++){
+                ////Debug.write(presentationObject.thumbs.thumbs[eg].filename);
+                this._imageslistdraw.addPresentationThumb(presentationObject.thumbs.thumbs[eg].filename,(eg+1));
+            }
+        
+        ]]>   
+    </method> 
+    
+    <presentationFilesList name="_imageslistdraw" x="0" y="0" width="$once{ parent.width }"
+    				height="${ parent.height }" >
+    	<handler name="onclose">
+    		parent.miniButton.close();
+    	</handler>
+    </presentationFilesList>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/add.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/add.png
new file mode 100644
index 0000000..6332fef
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/arrow_refresh_small.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/arrow_refresh_small.png
new file mode 100644
index 0000000..d3087df
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/arrow_refresh_small.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/chart_pie.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/chart_pie.png
new file mode 100644
index 0000000..fe00fa0
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/chart_pie.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/film.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/film.png
new file mode 100644
index 0000000..b0ce7bb
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/film.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder.png
new file mode 100644
index 0000000..784e8fa
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder_add.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder_add.png
new file mode 100644
index 0000000..529fe8f
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder_add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder_blue_open.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder_blue_open.png
new file mode 100644
index 0000000..2c55c56
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder_blue_open.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder_explore.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder_explore.png
new file mode 100644
index 0000000..0ba9391
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/folder_explore.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/house_link.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/house_link.png
new file mode 100644
index 0000000..be2c271
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/house_link.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_drag_add.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_drag_add.png
new file mode 100644
index 0000000..a12ae41
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_drag_add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_drag_no.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_drag_no.png
new file mode 100644
index 0000000..784df30
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_drag_no.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_folder_pre_closed_rsc.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_folder_pre_closed_rsc.png
new file mode 100644
index 0000000..a72275c
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_folder_pre_closed_rsc.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_folder_pre_open_rsc.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_folder_pre_open_rsc.png
new file mode 100644
index 0000000..1e1b042
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/icon_folder_pre_open_rsc.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/map.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/map.png
new file mode 100644
index 0000000..f90ef25
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/map.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/photo.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/photo.png
new file mode 100644
index 0000000..6c2aaaa
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/photo.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/remove_item.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/remove_item.png
new file mode 100644
index 0000000..5031ff4
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/remove_item.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/report.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/report.png
new file mode 100644
index 0000000..779ad58
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/report.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/trash.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/trash.png
new file mode 100644
index 0000000..b92592b
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/trash.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/world_link.png b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/world_link.png
new file mode 100644
index 0000000..b8edc12
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/resources/world_link.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/baseChooseIconView.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/baseChooseIconView.lzx
new file mode 100644
index 0000000..5b4e828
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/baseChooseIconView.lzx
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseChooseIconView" extends="view" width="24" height="24" 
+       bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }"  >
+    
+    <attribute name="resourceN" value="" type="string" />
+    <attribute name="isselected" value="false" type="boolean" />
+    <attribute name="labelid" value="0" type="number" />
+    
+    <handler name="oninit">
+        if (this.isselected){
+            this.onclick.sendEvent();
+        }
+    </handler> 
+    
+    <handler name="onmouseover">
+        this._bg.setAttribute("bgcolor",canvas.getThemeColor('baseMousecolorizer'));
+    </handler>
+    
+    <handler name="onmouseout">
+        this._bg.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+    </handler>
+    
+    <view name="_bg" x="1" y="1" width="$once{ parent.width-1 }" 
+          height="$once{ parent.height-2 }" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" />
+    
+    <view x="2" y="2" resource="$once{ parent.resourceN }" />
+             
+    <labelTooltip labelid="$once{ parent.labelid }" inittwice="true" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/documentsLoaderIcon.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/documentsLoaderIcon.lzx
new file mode 100644
index 0000000..60c8787
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/documentsLoaderIcon.lzx
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="documentsLoaderIcon" extends="view" height="20" width="19" 
+       bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }"  >
+    
+    <attribute name="resourceN" value="" type="string" />
+    <attribute name="isselected" value="false" type="boolean" />
+    <attribute name="labeltext" value="" type="string" />
+    
+    <attribute name="refObj" value="null" />
+    
+    <method name="hide">
+        this._bg.setAttribute("height",this.height-2);
+        parent.parent.hideSelection(this);
+    </method>
+    
+    <method name="setSelection">
+    	this._bg.setAttribute("height",this.height);
+    </method>
+    
+    <handler name="onclick">
+        parent.parent.sendSelection(this);
+    </handler>
+    
+    <handler name="oninit">
+        if (this.isselected){
+            this.onclick.sendEvent();
+        }
+    </handler> 
+    
+    <method name="close">
+    	parent.parent.close(this);
+    </method>
+    
+    <handler name="onmouseover">
+        this._bg.setAttribute("bgcolor",canvas.getThemeColor('baseMousecolorizer'));
+    </handler>
+    
+    <handler name="onmouseout">
+        this._bg.setAttribute("bgcolor",0xFFFFFF);
+    </handler>
+    
+    <view name="_bg" x="1" y="1" width="$once{ parent.width-1 }" 
+          height="$once{ parent.height-2 }" bgcolor="0xFFFFFF" />
+    
+    <view x="2" y="2" resource="$once{ parent.resourceN }" />
+             
+    <labelTooltip text="$once{ parent.labeltext }" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/documentsTabBar.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/documentsTabBar.lzx
new file mode 100644
index 0000000..3f4d6fc
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/documentsTabBar.lzx
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="documentsTabBar" extends="view" height="0" y="14" layout="axis:x" >
+    
+    <attribute name="currentItem"/>
+    
+    <method name="sendSelection" args="itemRef">
+        this.hideAll();
+        itemRef.setSelection();
+        if (itemRef.refObj == null) {
+            parent._filearea.setAttribute("visibility","visible");
+            parent._trashBar.setAttribute("visibility","visible");
+            parent._fileBar.setAttribute("visibility","visible");
+            parent._border2.setAttribute("visibility","visible");
+        } else {
+        	//if ($debug) Debug.write(itemRef.refObj);
+            itemRef.refObj.setAttribute("visibility","visible");
+        }
+    </method>
+    
+    <method name="hideSelection" args="itemRef">
+        if (itemRef.refObj == null) {
+            parent._filearea.setAttribute("visibility","hidden");
+            parent._trashBar.setAttribute("visibility","hidden");
+            parent._fileBar.setAttribute("visibility","hidden");
+            parent._border2.setAttribute("visibility","hidden");
+        } else {
+            itemRef.refObj.setAttribute("visibility","hidden");
+        }
+    </method>
+    
+    <method name="close" args="buttonRef">
+    	buttonRef.refObj.destroy();
+    	buttonRef.destroy();
+    	this._content.subviews[this._content.subviews.length-1].onclick.sendEvent();
+    </method>
+    
+    <method name="hideAll">
+        <![CDATA[
+            for (var eg in this._content.subviews) {
+                this._content.subviews[eg].hide();
+            }
+        ]]>
+    </method>
+    
+    <method name="addItem" args="tab">
+        var t = new lz.documentsLoaderIcon(this._content,{
+                   resourceN:tab.documentObj.fileIcon,
+                   refObj:tab,
+                   labeltext:tab.documentObj.fileName
+                });
+        t.onclick.sendEvent();
+        return t;
+    </method>
+    
+    <view name="_border2" x="0" y="19" options="ignorelayout: true"
+          width="$once{ parent.width }" height="2" 
+          bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" /> 
+           
+    <view name="_content" layout="axis:x">  
+        <documentsLoaderIcon name="_explorerTreeView" 
+            resourceN="file_explorer_view_tree_rsc" height="20" width="19" 
+            labeltext="$once{ canvas.getLabelName(717) }" />
+    </view>    
+    <view name="_border" height="20" width="1" 
+        bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/library.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/library.lzx
new file mode 100644
index 0000000..7810c74
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/tabbar/library.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+    <include href="baseChooseIconView.lzx" />
+    <include href="documentsLoaderIcon.lzx" />
+    <include href="documentsTabBar.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/baseFileExplorerItem.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/baseFileExplorerItem.lzx
new file mode 100644
index 0000000..647c45d
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/baseFileExplorerItem.lzx
@@ -0,0 +1,579 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseFileExplorerItem" extends="view">
+	
+	<attribute name="refObjListRoot" value="null"/>
+	
+	<attribute name="isRoot" value="false" type="boolean" />
+	
+	<attribute name="fileIcon" type="string" value="string" />
+	
+	<attribute name="open" value="false" type="boolean" />
+	
+	<attribute name="fileExplorerItemId" value="0" type="number" />
+	<attribute name="isOwner" value="false" type="boolean" />
+	
+	<attribute name="isFolder" value="true" type="boolean" />
+	<attribute name="isImage" value="false" type="boolean" />
+	<attribute name="isPresentation" value="false" type="boolean" />
+	<attribute name="isVideo" value="false" type="boolean" />
+	
+	<attribute name="fileName" value="" type="string" />
+	<attribute name="fileHash" value="" type="string" />
+	
+	<attribute name="selected" value="false" type="boolean"/>
+	
+	<attribute name="singleClickDelegate" value="null" />
+	<attribute name="singleClickStarted" value="false" type="boolean" />
+	
+	<attribute name="isMouseDownDragAction" value="false" type="boolean"/>
+	
+	<!-- If this is true, then this item has been drag-n-droped and it makes no 
+	       sense to handle any single or double click event -->
+	<attribute name="mouseDownClickUsed" value="false" type="boolean" />
+	<attribute name="mouseDownClickDelegate" value="null" />
+	
+	<attribute name="isTrashCan" value="false" type="boolean" />
+	
+	<handler name="oninit">
+		this.singleClickDelegate = new LzDelegate( this, "doSingleClick" );
+		this.resetClickDelegate = new LzDelegate( this, "doResetSingleClick" );
+		this.mouseDownClickDelegate = new LzDelegate( this, "doMouseDownClick" );
+		if (this.isFolder) {
+		    lz.Track.register(this._fileName, canvas.currentImagesListdraw.currentTrackGroupName);
+		}
+	</handler>
+	
+	<method name="doOpen">
+		this.open = true;
+		if (this.isFolder) {
+    		this.icon_folder_pre.setAttribute("frame",2);
+    		this.content.setAttribute("visibility","visible");
+			this._folderIcon.setAttribute("frame",2);
+		    this.loadFiles();
+		}
+	</method>
+	
+	<method name="doClose">
+		this.open = false;
+		if (this.isFolder) {
+            this.icon_folder_pre.setAttribute("frame",1);
+            this.content.setAttribute("visibility","hidden");
+            this._folderIcon.setAttribute("frame",1);
+		}
+	</method>
+	
+    <method name="doMouseDownClick" args="itemObj">
+    	<![CDATA[
+			if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+	    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+	    		return;
+	    	}
+	    	this.mouseDownClickUsed = true;
+	    	if ($debug) Debug.write("mouseDown CLICK Start Drag And Drop");
+	    	new lz.dragItemFileExplorer(canvas,{
+	    		        dragItemResource:this.fileIcon,
+	            	    refObj:this,
+	                    x:canvas.getMouse('x'),
+	                    y:canvas.getMouse('y')
+	            	});
+        ]]>
+    </method>
+    
+    <!--
+    	Check if this is the Owner
+     -->
+    <method name="checkForIsOwner">
+    	if (this.isRoot) {
+    		return this.isOwner;
+    	} else {
+    		return parent.parent.checkForIsOwner();
+    	}
+    </method>
+    
+    <!--
+    	Check if the user tries to move a file in its own tree,
+    	see moveFile
+     -->
+    <method name="checkForIsChild" args="compareFileExplorerItemId">
+    	if (this.isRoot) {
+    		return false;
+    	} else {
+    		if (this.fileExplorerItemId == compareFileExplorerItemId) {
+    			return true;
+    		} else {
+    			return parent.parent.checkForIsChild(compareFileExplorerItemId);
+    		}
+    	}
+    </method>
+    
+    <method name="deleteFile" args="labelid">
+    	<![CDATA[
+			if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+	    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+	    		return;
+	    	}
+	    	new lz.confirmationSingle(canvas,{
+	                           refObj:this,
+	                           labelid:labelid,
+	                           labeliderror:713,
+	                           showCheckBox:false
+	                        });
+    	]]>
+    </method>
+    
+    <method name="sendConfirmation" args="bool,askAgain">
+        if (bool) {
+            this.deleteFileOrFolder();
+        }
+    </method>
+    
+    <method name="deleteFileOrFolder">
+        <![CDATA[
+			if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+	    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+	    		return;
+	    	}
+	    	
+            if ($debug) Debug.write("deleteFileOrFolder HTTP 1: ");
+            //this.getFileExplorerByRoom.doCall();
+            var downloadurl = canvas.getUrl()+'services/FileService/deleteFileOrFolderSelf?'
+                            +'SID='+canvas.sessionId
+                            +'&fileExplorerItemId='+this.fileExplorerItemId;
+            
+            this.deleteFileOrFolderSelf.setAttribute("src",downloadurl);
+            if ($debug) Debug.write("deleteFileOrFolderSelf doRequest ",downloadurl);
+            this.deleteFileOrFolderSelf.doRequest();
+        ]]>
+    </method>
+    
+    <dataset name="deleteFileOrFolderSelf" type="http" >
+        <handler name="ondata" args="d">
+            <![CDATA[
+                //if ($debug) Debug.write("ondata ",d);
+                if ($debug) Debug.write("deleteFileOrFolder: ",d);
+                parent.parent.parent.doOpen();
+                parent.refObjListRoot._selected = null;
+                parent.refObjListRoot.parentFolderId = -2;
+            ]]>
+        </handler>
+    </dataset>
+    
+	<method name="doSingleClick" args="itemObj">
+		this.singleClickStarted = false;
+		//Cannot change name for Root Icons
+		if (this.isRoot) {
+            return;
+        }
+		this.addOrUpdateFolderName(this.fileExplorerItemId,false);
+	</method>
+	
+	<method name="doResetSingleClick" args="itmeObj">
+		this.singleClickStarted = false;
+	</method>
+	
+	<method name="addFile">
+		this.refObjListRoot.selectItem(this);
+		this.refObjListRoot.addFile();
+	</method>
+	
+	<method name="addFolder">
+		<![CDATA[
+			if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+	    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+	    		return;
+	    	}
+	
+			if (this.isFolder) {
+				if ($debug) Debug.write("NEW this.fileExplorerItemId INTO ",this);
+				if ($debug) Debug.write("NEW this.fileExplorerItemId ",this.fileExplorerItemId);
+				if (this["icon_folder_pre"]) {
+	    			this.icon_folder_pre.setAttribute("frame",2);
+	                this.content.setAttribute("visibility","visible");
+	                this._folderIcon.setAttribute("frame",2);
+	        		var t = new lz.folderFileExplorerItem(this.content,{
+	        			            isOwner:this.isOwner,
+	        			            isFolder:true,
+	                    		    fileIcon:'icon_folder_rsc',
+	                                refObjListRoot:this.refObjListRoot,
+	                    		    fileName:canvas.getLabelName(712)
+	                    		});
+	                t.addOrUpdateFolderName(this.fileExplorerItemId,true);
+				}
+			}
+		]]>
+	</method>
+	
+	<method name="refresh">
+		this.doOpen();
+	</method>
+	
+	<method name="playVideo">
+	<![CDATA[
+		if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+    		return;
+    	}
+		this.refObjListRoot.playVideo(this);
+	]]>
+	</method>
+	
+	<method name="editFolderName">
+	<![CDATA[
+		if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+    		return;
+    	}
+		this.addOrUpdateFolderName(this.fileExplorerItemId,false);
+	]]>
+	</method>
+	
+	<method name="loadDocument">
+	<![CDATA[
+		if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+    		return;
+    	}
+		this.refObjListRoot.loadDocument(this);
+	]]>
+	</method>
+	
+	<method name="loadWmlFile">
+	<![CDATA[
+		if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+    		return;
+    	}
+		this.refObjListRoot.loadWmlFile(this);
+	]]>
+	</method>
+
+	<method name="loadChart">
+	<![CDATA[
+		if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+    		return;
+    	}
+		this.refObjListRoot.loadChart(this);
+	]]>
+	</method>
+	
+	<method name="addOrUpdateFolderName" args="fileExplorerItemId,isNew">
+		<![CDATA[
+			if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+	    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+	    		return;
+	    	}
+		
+    		if ($debug) Debug.write("addOrUpdateFolderName ",fileExplorerItemId);
+    		var tWidth = this._fileName.width;
+    		if (tWidth < 160) {
+    			tWidth = 160;
+    		}
+    		var _y = this._fileName.getAttributeRelative("y",canvas);
+    		var _x = this._fileName.getAttributeRelative("x",canvas);
+    		if (isNew) {
+    			_y = 65; 
+    			_x += 10;
+    		}
+    		
+    		var t = new lz.dynamicFileName(canvas,{
+    			        parentFileExplorerItemId:fileExplorerItemId,
+    			        fileExplorerItemId:this.fileExplorerItemId, //Only used at update Name
+    			        isOwner:this.isOwner,
+    			        text:this.fileName,
+    			        isNew:isNew, //false means its a renaming
+    			        refObj:this,width:tWidth+10,
+            		    x:_x,
+            		    y:_y
+            		});
+            		
+            lz.Focus.setFocus(t,true);
+            lz.ModeManager.makeModal(t);
+            
+        ]]>
+	</method>
+	
+	<method name="toggleOpen" args="setSelection">
+		<![CDATA[
+			if (this.mouseDownClickUsed) {
+				if ($debug) Debug.write("mouseDownClickUsed RESET TO DEFAULT BUT DO NO ACTION Cause its a Drag and Drop Event");
+				this.mouseDownClickUsed = false;
+				return;
+			}
+			
+			if (this.singleClickStarted) {
+	            if ($debug) Debug.write("Is this selected => Double Click !!!");
+	            this.singleClickStarted = false;
+	            lz.Timer.removeTimer( this.singleClickDelegate );
+	            
+	            if (!canvas.isAllowedToDraw && !canvas.ismoderator) {
+		    		new lz.labelerrorPopup(canvas,{errorlabelid:1462});
+		    		return;
+		    	}
+	            
+	            if (this.isVideo) {
+	            	this.playVideo();
+	            } else if (this.isWmlFile){
+					this.loadWmlFile();
+				} else if (this.isFolder) {
+	                this.doSingleClick(null);
+	            } else if (this.isPresentation) {
+	                this.loadDocument();
+	            }
+	        } else {
+	        	
+	        	if (this.isFolder){
+	        		if (!this.open) {
+	        			this.doOpen();
+	        		} else {
+	        			if (setSelection) {
+	            			if (this.selected) {
+	            				if ($debug) Debug.write("Is this selected => Do Edit !!!");
+	            				this.singleClickStarted = true;
+	            			    lz.Timer.addTimer( this.singleClickDelegate, 300 );
+	            			} else {
+	            				
+	            				this.singleClickStarted = true;
+	            				lz.Timer.addTimer( this.resetClickDelegate, 300 );
+	            			}
+	        			} else {
+	        				this.doClose();
+	        			}
+	        		}
+	        	} else {
+	        		if (setSelection) {
+	                    if (this.selected) {
+	                        if ($debug) Debug.write("Is this selected => Do Edit !!!");
+	                        this.singleClickStarted = true;
+	                        lz.Timer.addTimer( this.singleClickDelegate, 300 );
+	                    } else {
+	                        this.singleClickStarted = true;
+	                        lz.Timer.addTimer( this.resetClickDelegate, 300 );
+	                    }
+	                }
+	        	}
+			}
+			
+			if (setSelection) this.refObjListRoot.selectItem(this);
+		]]>
+	</method>
+	
+	<method name="selectItem">
+		this.selected = true;
+		this._fileName.setAttribute("bgcolor",canvas.getThemeColor('baseMousecolorizer'));
+	</method>
+	
+	<method name="deselectItem">
+		this.selected = false;
+		if (this["_fileName"]) {
+            this._fileName.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+        } else {
+            if ($debug) Debug.warn("deselectItem:: _fileName is NULL ",this);
+        }
+    </method>
+	
+	<method name="clearContent">
+        <![CDATA[
+            for (var eg in this.content.subviews) {
+                this.content.subviews[eg].destroy();
+            }
+        ]]>
+    </method>
+    
+    <method name="loadFiles">
+    	<![CDATA[
+            //this.getFileExplorerByRoom.doCall();
+            var downloadurl = canvas.getUrl()+'services/FileService/getFileExplorerByParentSelfInternal?'
+                            +'SID='+canvas.sessionId
+                            +'&parentFileExplorerItemId='+this.fileExplorerItemId
+                            +'&roomId='+hib.currentroomid
+                            +'&isOwner='+this.isOwner;
+            
+            this.getFileExplorerByParentSelf.setAttribute("src",downloadurl);
+            if ($debug) Debug.write("getFileExplorerByParentSelf doRequest ",downloadurl);
+            this.getFileExplorerByParentSelf.doRequest();
+        ]]>
+    </method>
+    
+    <dataset name="getFileExplorerByParentSelf" type="http" >
+        <handler name="ondata" args="d">
+            <![CDATA[
+                //if ($debug) Debug.write("ondata ",d);
+                parent.renderFilesAndFolders(canvas.currentFileExplorer.parseParentToRoomObject(d));
+            ]]>
+        </handler>
+    </dataset>
+    
+    <!--
+        parent.parseRootItems(canvas.currentFileExplorer.parseToRoomObject(d));
+	 -->
+	<!--
+	   public List<FileExplorerItem> getFileExplorerByParent(String SID, Long parentFileExplorerItemId, 
+	               Long room_id, Boolean isOwner) {
+	<netRemoteCallHib name="getFileExplorerByParent" funcname="fileservice.getFileExplorerByParent" 
+        remotecontext="$once{ canvas.thishib }" >   
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.fileExplorerItemId;</method></netparam>  
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam>  
+        <netparam><method name="getValue">return parent.parent.isOwner;</method></netparam>         
+        <handler name="ondata" args="value">    
+            if ($debug) Debug.write("getFileExplorerByParent: ",value);
+            parent.renderFilesAndFolders(value);
+        </handler>
+    </netRemoteCallHib> 
+     --> 
+    
+    <method name="renderFilesAndFolders" args="roomHome">
+        <![CDATA[
+            this.clearContent();
+            
+            // Folder area
+            for (var i=0; i<roomHome.length; i++) {
+                var fileExplorerItem = roomHome[i];
+                if (fileExplorerItem.isFolder) {
+                    new lz.folderFileExplorerItem(this.content,{
+                                            fileName:fileExplorerItem.fileName,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileIcon:'icon_folder_rsc',
+                                            refObjListRoot:this.refObjListRoot
+                                        });
+                } else if (fileExplorerItem.isImage) {
+                    new lz.imageFileExplorerItem(this.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileHash:fileExplorerItem.fileHash,
+                                            isFolder:false,isImage:true,
+                                            fileIcon:'file_explorer_image_rsc',
+                                            refObjListRoot:this.refObjListRoot
+                                        });
+                } else if (fileExplorerItem.isPresentation) {
+                    new lz.documentFileExplorerItem(this.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileHash:fileExplorerItem.fileHash,
+                                            isFolder:false,isPresentation:true,
+                                            fileIcon:'file_explorer_document_rsc',
+                                            refObjListRoot:this.refObjListRoot
+                                        });
+                } else if (fileExplorerItem.isVideo) {
+                    new lz.videoFileExplorerItem(this.content,{
+                                            isFolder:false,
+                                            isVideo:true,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileHash:fileExplorerItem.fileHash,
+                                            isFolder:false,isImage:true,
+                                            fileIcon:'file_explorer_video_rsc',
+                                            flvHeight:fileExplorerItem.flvHeight,
+                                            flvWidth:fileExplorerItem.flvWidth,
+                                            refObjListRoot:this.refObjListRoot
+                                        });
+                } else if (fileExplorerItem.isStoredWmlFile) { 
+                	new lz.wmlFileExplorerItem(this.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileIcon:'file_explorer_wml_rsc',
+                                            isWmlFile: true,
+                                            refObjListRoot:this.refObjListRoot                	
+            							});
+                } else if (fileExplorerItem.isChart) { 
+                	new lz.chartFileExplorerItem(this.content,{
+                                            isFolder:false,
+                                            fileExplorerItemId:fileExplorerItem.fileExplorerItemId,
+                                            fileName:fileExplorerItem.fileName,
+                                            fileIcon:'file_explorer_chart_rsc',
+                                            refObjListRoot:this.refObjListRoot                	
+            							});
+
+            	}
+            }
+        ]]>
+    </method>
+    
+	
+	<view name="icon_folder_pre" 
+		  visibility="$once{ (parent.isFolder) ? 'visible' : 'hidden' }"
+		  resource="icon_folder_pre_rsc" frame="1" >
+		<handler name="onclick">
+			parent.toggleOpen(false);
+		</handler>
+	</view>
+	
+	<view name="_folderIcon" resource="$once{ parent.fileIcon }" x="16" y="2" >
+		<handler name="onmousedown">
+			if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.addTimer( parent.mouseDownClickDelegate, 300 );
+        </handler>
+        <handler name="onmouseup">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.removeTimer( parent.mouseDownClickDelegate );
+        </handler>
+		<handler name="onclick">
+			parent.toggleOpen(false);
+		</handler>
+	</view>
+	
+	<method name="getDownloadURL" args="fName, parentPath">
+	<![CDATA[
+		var downloadurl = canvas.getUrl() + 'DownloadHandler?' +
+			'fileName=' + fName +
+			'&moduleName=videoconf1' +
+			'&parentPath=/' + parentPath +
+			'&room_id=files'+
+			'&sid=' + canvas.sessionId +
+			"&fileExplorerItemId=" + this.fileExplorerItemId;
+		if ($debug) Debug.write("formatURL: ", this, downloadurl);
+		return downloadurl;
+	]]>
+	</method>
+
+	<method name="downloadDocumentByName">
+	<![CDATA[
+		var fName = this.fileHash;
+		var pos = this.fileName.lastIndexOf(".");
+		var strlen = this.fileName.length;
+		if (pos != -1 && strlen != pos + 1) {
+			var ext = this.fileName.split(".");
+			var len = ext.length;
+			var extension = ext[len - 1].toLowerCase();
+			fName += "." + extension;
+		}
+		lz.Browser.loadURL(this.getDownloadURL(fName, this.fileHash + '/'), '_parent');
+	]]>
+	</method>
+	
+	<method name="downloadImageByName">
+		lz.Browser.loadURL(this.getDownloadURL(this.fileHash, ''), '_parent');
+	</method>
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/chartFileExplorerItem.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/chartFileExplorerItem.lzx
new file mode 100644
index 0000000..bd2d17f
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/chartFileExplorerItem.lzx
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+  <class name="chartFileExplorerItem" extends="baseFileExplorerItem"
+    isFolder="true">
+
+    <attribute name="isChartFile" type="boolean" value="true" />
+
+    <text name="_fileName" x="36" text="${ parent.fileName }"
+      fontsize="10" resize="true" y="1">
+      <contextmenu>
+
+        <contextmenuitem caption="$once{ canvas.getLabelName(711) }"
+          onselect="parent.parent.parent.editFolderName()" />
+
+        <contextmenuitem caption="$once{ canvas.getLabelName(708) }"
+          separatorbefore="true" onselect="parent.parent.parent.addFile()" />
+
+        <contextmenuitem caption="$once{ canvas.getLabelName(709) }"
+          onselect="parent.parent.parent.addFolder()" />
+
+        <contextmenuitem caption="$once{ canvas.getLabelName(710) }"
+          onselect="parent.parent.parent.deleteFile(719)" />
+
+        <contextmenuitem caption="$once{ canvas.getLabelName(1314) }"
+          onselect="parent.parent.parent.loadChart()" />
+
+      </contextmenu>
+
+      <handler name="onmousetrackover">
+        Debug.write("onmousetrackover");
+        canvas.currentImagesListdraw.currentDragItem.sendOverItem(parent);
+        this.setAttribute("bgcolor",0x93FE92);
+      </handler>
+
+      <handler name="onmousetrackout">
+        Debug.write("onmousetrackout");
+        canvas.currentImagesListdraw.currentDragItem.sendOutItem(parent);
+        this.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+      </handler>
+
+      <handler name="onmousetrackup">
+        if ($debug) Debug.write("onmousetrackup");
+        this.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+      </handler>
+
+      <handler name="onmousedown">
+        if (parent.isRoot) {
+          return;
+        }
+        lz.Timer.addTimer(parent.mouseDownClickDelegate, 300);
+      </handler>
+      <handler name="onmouseup">
+        if (parent.isRoot) {
+          return;
+        }
+        lz.Timer.removeTimer( parent.mouseDownClickDelegate );
+      </handler>
+      <handler name="onclick">
+        parent.toggleOpen(true);
+      </handler>
+    </text>
+
+    <view name="content" x="12" y="18" layout="axis:y;inset:1"
+      visibility="hidden">
+    </view>
+  </class>
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/documentFileExplorerItem.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/documentFileExplorerItem.lzx
new file mode 100644
index 0000000..3760c1e
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/documentFileExplorerItem.lzx
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+ 
+<class name="documentFileExplorerItem" extends="baseFileExplorerItem" isFolder="true">
+	
+	<method name="formatURL" args="filename">
+        <![CDATA[
+            var uploadmoduleimgfolderVar = '/' + this.fileHash;
+            var downloadurl = canvas.getUrl()+'DownloadHandler?' +
+                'fileName=' + encodeURIComponent(this.fileHash + ".swf") +
+                '&moduleName=' + 'videoconf1' + 
+                '&parentPath=' + encodeURIComponent(uploadmoduleimgfolderVar + '/' )+
+                '&room_id=files'+ 
+                '&sid='+canvas.sessionId;
+            ////Debug.write("downloadurl: ",downloadurl);
+            return downloadurl;
+        ]]>
+    </method>    
+    
+	<method name="loadDocumentToWhiteboard">
+		if (canvas.ismoderator || canvas.isAllowedToDraw) {
+    		var uploadmoduleimgfolderVar = '/' + this.fileHash;
+            
+            if ($debug) Debug.write("loadDocumentToWhiteboard ",this.fileName);
+            
+    		canvas._drawarea.loadSWFPresentationSynced(this.formatURL(this.fileHash),this.fileHash + ".swf",
+    		              "videoconf1",uploadmoduleimgfolderVar,"files",hib.conferencedomain,1,
+                          this.fileName);
+		} else {
+			new lz.errorModeratorPopup(canvas,{error:canvas.getLabelName(721)});
+		}
+	</method>
+	
+	<text name="_fileName" x="36" text="${ parent.fileName }" fontsize="10" resize="true" y="1">
+		<contextmenu>
+			<contextmenuitem caption="$once{ canvas.getLabelName(711) }" onselect="parent.parent.parent.editFolderName()" />
+			
+            <!-- Load File To Whiteboard missing -->
+			<contextmenuitem name="_openDocument" caption="$once{ canvas.getLabelName(716) }" separatorbefore="true" onselect="parent.parent.parent.loadDocument()" />
+            				 
+            <contextmenuitem caption="$once{ canvas.getLabelName(719) }" onselect="parent.parent.parent.deleteFile(719)" />
+            <contextmenuitem caption="$once{ canvas.getLabelName(867) }" onselect="parent.parent.parent.downloadDocumentByName()" />
+        </contextmenu>
+        
+        <handler name="onmousedown">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.addTimer( parent.mouseDownClickDelegate, 300 );
+        </handler>
+        <handler name="onmouseup">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.removeTimer( parent.mouseDownClickDelegate );
+        </handler>
+		<handler name="onclick">
+            parent.toggleOpen(true);
+        </handler>
+	</text>
+	
+
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/folderFileExplorerItem.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/folderFileExplorerItem.lzx
new file mode 100644
index 0000000..4973ecc
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/folderFileExplorerItem.lzx
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="folderFileExplorerItem" extends="baseFileExplorerItem" isFolder="true">
+	
+	<text name="_fileName" x="36" text="${ parent.fileName }" fontsize="10" resize="true" y="1">
+		<contextmenu>
+			
+			<contextmenuitem caption="$once{ canvas.getLabelName(711) }" 
+							 onselect="parent.parent.parent.editFolderName()" />
+			
+            <contextmenuitem caption="$once{ canvas.getLabelName(708) }" 
+            				 separatorbefore="true"
+            				 onselect="parent.parent.parent.addFile()" />
+            				 
+            <contextmenuitem caption="$once{ canvas.getLabelName(709) }" 
+            				 onselect="parent.parent.parent.addFolder()" />
+            				 
+            <contextmenuitem caption="$once{ canvas.getLabelName(710) }" 
+            				 onselect="parent.parent.parent.deleteFile(719)" />
+            				 
+        </contextmenu>
+        
+        <handler name="onmousetrackover">
+            //if ($debug) Debug.write("onmousetrackover");
+            canvas.currentImagesListdraw.currentDragItem.sendOverItem(parent);
+            this.setAttribute("bgcolor",0x93FE92);
+        </handler>
+        
+        <handler name="onmousetrackout">
+            //if ($debug) Debug.write("onmousetrackout");
+            canvas.currentImagesListdraw.currentDragItem.sendOutItem(parent);
+            this.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+        </handler>
+        
+        <handler name="onmousetrackup">
+            if ($debug) Debug.write("onmousetrackup");
+            this.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+        </handler> 
+        
+        <handler name="onmousedown">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.addTimer( parent.mouseDownClickDelegate, 300 );
+        </handler>
+        <handler name="onmouseup">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.removeTimer( parent.mouseDownClickDelegate );
+        </handler>
+		<handler name="onclick">
+            parent.toggleOpen(true);
+        </handler>
+	</text>
+	
+	<view name="content" x="12" y="18" layout="axis:y;inset:1" visibility="hidden">
+		
+	</view>
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/imageFileExplorerItem.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/imageFileExplorerItem.lzx
new file mode 100644
index 0000000..c89b673
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/imageFileExplorerItem.lzx
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="imageFileExplorerItem" extends="baseFileExplorerItem" isFolder="true">
+	
+    <method name="generateFileLink">
+        <![CDATA[
+            return canvas.getUrl()+'DownloadHandler?' +
+            		'fileName='+ this.fileHash + 
+                    '&moduleName='+ "videoconf1" +
+                    '&parentPath='+ '/' +
+                    '&room_id=files' +
+                    '&sid='+canvas.sessionId;
+        ]]>
+    </method>
+    
+	<method name="loadImageToWhiteboard">
+		if (canvas.ismoderator || canvas.isAllowedToDraw) {
+    		var mouse_x = canvas._drawarea.getMouse("x");
+    		var mouse_y = canvas._drawarea.getMouse("y");
+    		canvas._drawarea.parent.parent.clearAreaAndAddImage(this.generateFileLink(),mouse_x,mouse_y,
+    		          canvas.getUrl()+'DownloadHandler',
+    		          this.fileHash,"videoconf1","/","files",hib.conferencedomain);
+		} else {
+            new lz.errorModeratorPopup(canvas,{error:canvas.getLabelName(721)});
+        }
+	</method>
+	
+	<text name="_fileName" x="36" text="${ parent.fileName }" fontsize="10" resize="true" y="1">
+		<contextmenu>
+			<contextmenuitem caption="$once{ canvas.getLabelName(711) }" onselect="parent.parent.parent.editFolderName()" />
+            <contextmenuitem caption="$once{ canvas.getLabelName(719) }" onselect="parent.parent.parent.deleteFile(719)" />
+            <contextmenuitem caption="$once{ canvas.getLabelName(867) }" onselect="parent.parent.parent.downloadImageByName()" />
+        </contextmenu>
+        
+        <handler name="onmousedown">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.addTimer( parent.mouseDownClickDelegate, 300 );
+        </handler>
+        <handler name="onmouseup">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.removeTimer( parent.mouseDownClickDelegate );
+        </handler>
+		<handler name="onclick">
+            parent.toggleOpen(true);
+        </handler>
+	</text>
+	
+
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/library.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/library.lzx
new file mode 100644
index 0000000..ad858e9
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/library.lzx
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+    <include href="baseFileExplorerItem.lzx" />
+    <include href="folderFileExplorerItem.lzx" />
+    <include href="imageFileExplorerItem.lzx" />
+    <include href="videoFileExplorerItem.lzx" />
+    <include href="documentFileExplorerItem.lzx" />
+    <include href="rootFileExplorerItem.lzx" />
+    <include href="wmlFileExplorerItem.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/rootFileExplorerItem.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/rootFileExplorerItem.lzx
new file mode 100644
index 0000000..4ecb0ef
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/rootFileExplorerItem.lzx
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="rootFileExplorerItem" extends="baseFileExplorerItem" isFolder="true" isRoot="true">
+	
+	<text name="_fileName" x="36" text="${ parent.fileName }" fontsize="10" resize="true" y="1">
+		<contextmenu>
+                              				 
+            <contextmenuitem caption="$once{ canvas.getLabelName(708) }" 
+            				 separatorbefore="true"
+            				 onselect="parent.parent.parent.addFile()" />
+            				 
+            <contextmenuitem caption="$once{ canvas.getLabelName(709) }" 
+            				 onselect="parent.parent.parent.addFolder()" />
+            				 
+        </contextmenu>
+        
+        <handler name="onmousetrackover">
+            //if ($debug) Debug.write("onmousetrackover");
+            canvas.currentImagesListdraw.currentDragItem.sendOverItem(parent);
+            this.setAttribute("bgcolor",0x93FE92);
+        </handler>
+        
+        <handler name="onmousetrackout">
+            //if ($debug) Debug.write("onmousetrackout");
+            canvas.currentImagesListdraw.currentDragItem.sendOutItem(parent);
+            this.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+        </handler>
+        
+        <handler name="onmousetrackup">
+            if ($debug) Debug.write("onmousetrackup");
+            this.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+        </handler> 
+        
+		<handler name="onclick">
+            parent.toggleOpen(true);
+        </handler>
+	</text>
+	
+	<view name="content" x="12" y="18" layout="axis:y;inset:1" visibility="hidden">
+		
+	</view>
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/videoFileExplorerItem.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/videoFileExplorerItem.lzx
new file mode 100644
index 0000000..72586d3
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/videoFileExplorerItem.lzx
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="videoFileExplorerItem" extends="baseFileExplorerItem" isFolder="true" isVideo="true">
+	
+    <method name="generateFileLink">
+        <![CDATA[
+            return canvas.getUrl()+'DownloadHandler?' +
+            		'fileName='+ this.fileHash + 
+                    '&moduleName='+ "videoconf1" +
+                    '&parentPath='+ '/' +
+                    '&room_id=files' +
+                    '&sid='+canvas.sessionId;
+        ]]>
+    </method>
+    
+	<method name="loadImageToWhiteboard">
+		if (canvas.ismoderator || canvas.isAllowedToDraw) {
+    		var mouse_x = canvas._drawarea.getMouse("x");
+    		var mouse_y = canvas._drawarea.getMouse("y");
+    		canvas._drawarea.parent.parent.clearAreaAndAddImage(this.generateFileLink(),mouse_x,mouse_y,
+    		          canvas.getUrl()+'DownloadHandler',
+    		          this.fileHash,"videoconf1","/","files",hib.conferencedomain);
+		} else {
+            new lz.errorModeratorPopup(canvas,{error:canvas.getLabelName(721)});
+        }
+	</method>
+	
+	<text name="_fileName" x="36" text="${ parent.fileName }" fontsize="10" resize="true" y="1">
+		<contextmenu>
+			
+			<contextmenuitem caption="$once{ canvas.getLabelName(1358) }" 
+							 onselect="parent.parent.parent.playVideo()" />
+			
+			<contextmenuitem caption="$once{ canvas.getLabelName(711) }" 
+							 onselect="parent.parent.parent.editFolderName()" />
+			
+            <contextmenuitem caption="$once{ canvas.getLabelName(719) }" 
+            				 onselect="parent.parent.parent.deleteFile(719)" />
+            				 
+        </contextmenu>
+        
+        <handler name="onmousedown">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.addTimer( parent.mouseDownClickDelegate, 300 );
+        </handler>
+        <handler name="onmouseup">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.removeTimer( parent.mouseDownClickDelegate );
+        </handler>
+		<handler name="onclick">
+            parent.toggleOpen(true);
+        </handler>
+	</text>
+	
+
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/wmlFileExplorerItem.lzx b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/wmlFileExplorerItem.lzx
new file mode 100644
index 0000000..4cf5907
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/fileexplorer/treeitems/wmlFileExplorerItem.lzx
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="wmlFileExplorerItem" extends="baseFileExplorerItem" isFolder="true">
+	
+	<attribute name="isWmlFile" type="boolean" value="true"/>
+	
+	<text name="_fileName" x="36" text="${ parent.fileName }" fontsize="10" resize="true" y="1">
+		<contextmenu>
+			
+			<contextmenuitem caption="$once{ canvas.getLabelName(711) }" 
+							 onselect="parent.parent.parent.editFolderName()" />
+			
+            <contextmenuitem caption="$once{ canvas.getLabelName(719) }" 
+            				 onselect="parent.parent.parent.deleteFile(719)" />
+            	
+            			 
+			<contextmenuitem caption="$once{ canvas.getLabelName(1314) }" 
+							 onselect="parent.parent.parent.loadWmlFile()" />
+            				 
+        </contextmenu>
+        
+        <handler name="onmousetrackover">
+            //if ($debug) Debug.write("onmousetrackover");
+            canvas.currentImagesListdraw.currentDragItem.sendOverItem(parent);
+            this.setAttribute("bgcolor",0x93FE92);
+        </handler>
+        
+        <handler name="onmousetrackout">
+            //if ($debug) Debug.write("onmousetrackout");
+            canvas.currentImagesListdraw.currentDragItem.sendOutItem(parent);
+            this.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+        </handler>
+        
+        <handler name="onmousetrackup">
+            if ($debug) Debug.write("onmousetrackup");
+            this.setAttribute("bgcolor",canvas.getThemeColor('mainBackgroundColor'));
+        </handler> 
+        
+        <handler name="onmousedown">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.addTimer( parent.mouseDownClickDelegate, 300 );
+        </handler>
+        <handler name="onmouseup">
+        	if (parent.isRoot) {
+                return;
+            }
+            lz.Timer.removeTimer( parent.mouseDownClickDelegate );
+        </handler>
+		<handler name="onclick">
+            parent.toggleOpen(true);
+        </handler>
+	</text>
+	
+	<view name="content" x="12" y="18" layout="axis:y;inset:1" visibility="hidden">
+		
+	</view>
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/library.lzx b/WebContent/src/modules/conference/tabcontent/library.lzx
new file mode 100644
index 0000000..edee094
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/library.lzx
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!-- FamFam Icon Set -->
+	<resource name="messagebox_info_rsc" src="resources/information.png" />
+	<!-- FamFam Icon Set -->
+	<resource name="_filesave_icon_pdf_rsc" src="resources/page_white_acrobat.png" />
+	<!-- APL Author sebawagner -->
+	<resource name="_filesave_icon_original_rsc" src="resources/download.png" />
+
+	<include href="fileexplorer/"/>
+	<include href="chat/" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/tabcontent/resources/download.png b/WebContent/src/modules/conference/tabcontent/resources/download.png
new file mode 100644
index 0000000..0c9013e
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/resources/download.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/resources/information.png b/WebContent/src/modules/conference/tabcontent/resources/information.png
new file mode 100644
index 0000000..12cd1ae
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/resources/information.png
Binary files differ
diff --git a/WebContent/src/modules/conference/tabcontent/resources/page_white_acrobat.png b/WebContent/src/modules/conference/tabcontent/resources/page_white_acrobat.png
new file mode 100644
index 0000000..8f8095e
--- /dev/null
+++ b/WebContent/src/modules/conference/tabcontent/resources/page_white_acrobat.png
Binary files differ
diff --git a/WebContent/src/modules/conference/testsetup/library.lzx b/WebContent/src/modules/conference/testsetup/library.lzx
new file mode 100644
index 0000000..93469dd
--- /dev/null
+++ b/WebContent/src/modules/conference/testsetup/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="testSetup.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/testsetup/testSetup.lzx b/WebContent/src/modules/conference/testsetup/testSetup.lzx
new file mode 100644
index 0000000..382e155
--- /dev/null
+++ b/WebContent/src/modules/conference/testsetup/testSetup.lzx
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!-- 
+#########################################
+
+Test the setup values before you enter a room => is moved to the SWF10 app
+
+The only thing remaining here to do, is to load the correct server 
+RTMP-host, RTMP/RTMPT-port for the session
+
+ -->
+ 
+<class name="testSetup" extends="view" 
+    x="$once{ parent.width/2 - 300 }" y="100" 
+    width="600" height="400">
+
+    <attribute name="roomClassName" type="string" value="" />
+    
+    <attribute name="roomObj" value="null"/>
+    
+    <attribute name="forceTest" value="false" type="boolean" />
+    
+    <attribute name="isDirectLink" value="false" type="boolean" />
+    
+    <!--- @keywords private if doJustClose is true the confirmation will be wait and 
+    then the window just closed -->
+    <attribute name="doJustClose" value="false" type="boolean" />
+    
+	<handler name="oninit">
+	<![CDATA[
+		clearStageContent();
+		if ($debug) Debug.warn("roomClassname : ", this.roomClassName);
+		if ($debug) Debug.warn("canvas.currentRoomObj will be : ", this.roomObj);
+		canvas.currentRoomObj = this.roomObj;
+		
+		new lz[this.roomClassName](canvas.main_content._content.inner, {
+					roomobj:this.roomObj
+					});
+		this.destroy();
+	]]>
+	</handler>
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/conference/typing.lzx b/WebContent/src/modules/conference/typing.lzx
new file mode 100644
index 0000000..d8a0505
--- /dev/null
+++ b/WebContent/src/modules/conference/typing.lzx
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="typingIcon" extends="view" width="30" height="16" resource="typing_rsc">
+	<attribute name="timerDelegate" value="null"/>
+	<attribute name="frm" value="0" type="number" />
+	          
+    <handler name="oninit">
+		//if ($debug) Debug.write("typingIcon::oninit ");
+    	startTyping();
+    </handler>
+    
+    <handler name="ondestroy">
+		//if ($debug) Debug.write("typingIcon::ondestroy ");
+		stopTyping();
+    </handler>
+    
+	<handler name="onvisible">
+		//if ($debug) Debug.write("typingIcon::onvisible ", this.visible);
+		toggle(this.visible);
+	</handler>
+	
+	<method name="startTyping">
+	<![CDATA[
+		//if ($debug) Debug.write("typingIcon::startTyping ");
+		if (timerDelegate == null && this.visible) {
+			frm = 0;
+			this.timerDelegate = new LzDelegate(this, "changeFrame");
+			lz.Timer.addTimer(this.timerDelegate, 1000);
+		}
+	]]>
+	</method>
+
+	<method name="stopTyping">
+		//if ($debug) Debug.write("typingIcon::stopTyping ");
+		if (timerDelegate != null) {
+			lz.Timer.removeTimer(timerDelegate);
+			timerDelegate = null;
+		}
+	</method>
+	 
+	<method name="toggle" args="v">
+		//if ($debug) Debug.write("typingIcon::toggle ", this.visible);
+		if (v) {
+			startTyping();
+		} else {
+			stopTyping();
+		}
+	</method>
+	
+	<method name="changeFrame" args="ignore=null">
+		//if ($debug) Debug.write("typingIcon::frm ", frm);
+		frm = (++frm) % 4;
+		this.setAttribute('frame', frm + 1);
+		lz.Timer.resetTimer(timerDelegate, 1000);
+		if (frm == 3) {
+			this.setAttribute('visible', false);
+		}
+	</method>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/baseDraw.lzx b/WebContent/src/modules/conference/whiteboard/base/baseDraw.lzx
new file mode 100644
index 0000000..d82373c
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/baseDraw.lzx
@@ -0,0 +1,1529 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDraw" extends="view" >
+
+	<attribute name="currentlayer" value="null" />
+	<attribute name="layers" value="null" />
+	
+	<attribute name="redolayers" value="null" />
+
+  	<attribute name="mx" type="number" value="0"/>
+  	<attribute name="my" type="number" value="0"/>
+  	<attribute name="prevx" type="number" value="0"/>
+  	<attribute name="prevy" type="number" value="0"/>
+  	
+  	<!--- If true it will try to load the ObjectIdentifier Extension from the Server -->
+  	<attribute name="isRemoteOID" value="false" type="boolean" />
+  	
+  	<attribute name="startx" value="0" type="number" />
+  	<attribute name="starty" value="0" type="number" />
+  	<attribute name="endx" value="0" type="number" />
+  	<attribute name="endy" value="0" type="number" />
+  	
+  	<attribute name="restricted" value="false" type="boolean"/>
+  	
+  	<!-- This Counter just adds, it dosen't shows the absolute number of items
+  		(ask this.layers.length to get the number of drawings) -->
+  	<attribute name="counter" value="0" type="number" />
+  	
+  	<event name="onupdateScale" />
+  	
+  	<attribute name="showGrid" type="boolean" value="false"/>
+  	<attribute name="isSnapToGrid" type="boolean" value="false"/>
+	<attribute name="gridWidth" value="24" type="number" />
+	
+	<attribute name="copyObject" value="null"/>
+	<attribute name="selectedObjects" value="null"/>
+	
+	<attribute name="ObjectByName" value="null" />
+
+  	<method name="getCounter">
+		//Debug.write("### getCounter :",this.counter);
+		var now = new Date();
+		return "_"+now.getTime();
+  	</method>
+  	
+  	<!--
+  	 not needed anymore, Issue 507
+    <netRemoteCallHib name="getOID" funcname="getOID" showLoading="false"
+    				  remotecontext="$once{ canvas.thishib }" > 
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if($debug) Debug.write("getOID: ",value);
+                parent.counter = value;
+            ]]>
+        </handler>   
+    </netRemoteCallHib>     
+     -->
+	
+	<method name="compareAndSetCounter" args="c">
+		<![CDATA[
+			if (c>this.counter) this.counter = c;
+		]]>
+	</method>
+  	
+	<attribute name="mousetracker_del" value="$once{ new LzDelegate(this, 'trackmouse' )}" />
+	
+	<!-- 
+	This is the very basic decision what to do
+	the modus pointer is only  a temp modus which is inited while draging
+	a new selected object
+	 -->
+	<attribute name="drawmodus" value="hand" type="string" />
+	
+	<!-- This List holds all ActionObject
+		currently paintings
+				  letters -->
+	<attribute name="baseactionobjectList" value="null" />
+	<attribute name="baseredoactionobjectList" value="null" />
+	
+	<!-- This List hold a reference to all 
+		Array of Drawing Action, it is needed for coping the view and undo/redo -->
+	<attribute name="basetempactionobjectList" value="null" />
+	
+	<attribute name="basdrawredoView" value="null" />
+	
+	<attribute name="hasprevious" value="false" type="boolean" />
+	<attribute name="hasenext" value="false" type="boolean" />
+	
+	<attribute name="doClearAll" value="false" type="boolean" />
+	<attribute name="doClearSlide" value="false" type="boolean" />
+	
+	<!-- For the dragging resizeing there is a bounding box -->
+	<attribute name="boundingIsActive" value="false" type="boolean" />
+	<attribute name="boundingref" value="null" />
+	
+	<!-- For sending messages in shared modus -->
+	<method name="onsharedMessage" args="action,obj" />
+	
+	<!-- this event must be triggered AFTER
+		the nesseccary room + domain for this conferenceView is set
+		-->
+	<event name="onopenWhiteBoard" />
+	
+	<attribute name="isDragging" value="false" type="boolean"/>
+	
+	<attribute name="last_x" value="0" type="number" />
+	<attribute name="last_y" value="0" type="number" />
+	
+	<!-- ############
+		init
+	 -->
+	<handler name="oninit">
+		if (this.isRemoteOID){
+            //wrong reference, swagner 20.09.2008
+			//this.getOID.doCall();
+		}
+        //Debug.write("********** this oninit: ",this);
+		this.basdrawredoView = new LzView(canvas,{visible:false,y:440});
+		this.layers = new Array();
+		this.last_x = this.x;
+		this.last_y = this.y;
+		this.redolayers = new Array();
+		this.baseactionobjectList = new Array();
+		this.baseredoactionobjectList = new Array();
+	</handler>
+      
+    <method name="clearSlideOnly">
+    	<![CDATA[
+            
+            var itemsToDelete = this.getCurrentSlideAnnotations();
+            
+            this.onsharedMessage('clearSlide',itemsToDelete); 
+            
+            this.clearSlideRemote(itemsToDelete);
+        ]]>
+    </method>  
+            
+	<method name="clearAll">
+		<![CDATA[
+			this.onsharedMessage('clear',null);	
+			this.clearRemote();
+		]]>
+	</method>
+	
+	<method name="getCurrentSlideAnnotations">
+		<![CDATA[
+		
+		    var currentSlideNumber = -1;
+		
+            for (var i=0;i<this.baseactionobjectList.length;i++) {
+            	
+            	if (this.baseactionobjectList[i][0] == "swf") {
+            		currentSlideNumber = this.baseactionobjectList[i][8];
+            		break;
+            	}
+            	
+            }
+            
+            var itemsToDelete = new Array();
+            
+            for (var i=0;i<this.baseactionobjectList.length;i++) {
+            	
+            	if (this.baseactionobjectList[i][0] == "ellipse" 
+                        || this.baseactionobjectList[i][0] == "drawarrow"
+                        || this.baseactionobjectList[i][0] == "line"
+                        || this.baseactionobjectList[i][0] == "paint"
+                        || this.baseactionobjectList[i][0] == "rectangle"
+                        || this.baseactionobjectList[i][0] == "uline"
+                        || this.baseactionobjectList[i][0] == "image"
+                        || this.baseactionobjectList[i][0] == "clipart"
+                        || this.baseactionobjectList[i][0] == "letter") {
+                        	
+                	var swfObj = this.baseactionobjectList[i][this.baseactionobjectList[i].length-7];
+                	
+                	if (swfObj.slide == currentSlideNumber) {
+                		itemsToDelete.push(this.baseactionobjectList[i][this.baseactionobjectList[i].length-1]);
+                	}
+                	
+                }
+            	
+            }
+            
+            return itemsToDelete;
+		]]>
+	</method>
+	
+	<method name="clearSlideRemote" args="itemsToDelete">
+        <![CDATA[
+        
+            var indexOfItemsToDelete = new Array();
+        
+            for (var i=0;i<this.baseactionobjectList.length;i++) {
+                
+            	
+            	for (var k=0;k<itemsToDelete.length;k++) {
+            	
+                    if (this.baseactionobjectList[i][this.baseactionobjectList[i].length-1] == itemsToDelete[k]) {
+                                
+                        indexOfItemsToDelete.push(i);
+                        
+                    }
+                
+            	}
+                
+            }
+            
+            for (var i=indexOfItemsToDelete.length-1;i>=0;i--) {
+                
+                var itemToDelete = this.baseactionobjectList[indexOfItemsToDelete[i]];
+                
+                var refObj = this.getObjectByName(itemToDelete[itemToDelete.length-1]);
+                
+                refObj.destroy();
+                
+                this.baseactionobjectList.splice(indexOfItemsToDelete[i],1);
+                
+            }   
+        ]]>
+    </method>        
+	
+	<method name="clearRemote">
+        <![CDATA[
+        
+            if (this.boundingref!=null) this.boundingref.removeIt();
+            while (this.subviews.length > 1) {
+                this.subviews[1].prepareForDelete.sendEvent();
+                this.subviews[1].destroy();
+            }
+            while (this.basdrawredoView.subviews.length > 0) {
+                this.basdrawredoView.subviews[0].destroy();
+            }   
+            
+            this.setAttribute("x",0);
+            this.setAttribute("y",0);
+            
+            this.getDisplayObject()._xscale = 100;
+            this.getDisplayObject()._yscale = 100;
+            
+            this.onupdateScale.sendEvent(null);
+            
+            parent.parent.zoombox.setWhiteboardValues(true,100);
+            
+            this.layers = new Array();
+            this.redolayers = new Array();
+            this.baseactionobjectList = new Array();
+            this.baseredoactionobjectList = new Array();    
+            this.checkStepLayers(); 
+            this.clearDocumentsBar();
+        ]]>
+    </method>
+	
+	<method name="doAction" args="modi">
+		if (modi=='saveobj'){
+			if (this.sendObject) this.sendObject.sendEvent();
+		} else if (modi=='loadobj'){
+		
+		}
+	</method>
+	
+	<method name="setModusWithUpdate" args="modi">
+		var paintToolBar = this.getPaintToolBar();
+		paintToolBar.updateToolSelection(modi);
+		this.setModus(modi);
+	</method>
+	
+	<method name="setModus" args="modi">
+		<![CDATA[
+		  
+		    if ($debug) Debug.write("setModus AAA: ",this.baseactionobjectList);
+		
+    		//check if previous modi has been txt, which might not be saved to the board yet
+            var previousModus = this.drawmodus;
+    		if ($debug) Debug.write("setModus: ",modi);
+    		if (this.drawmodus=='letter'){
+    			if (this.letterObjectIsActive){
+    				if ($debug) Debug.write("setModus:drawtoArray",modi);
+    				this.currentletterObj.drawtoArray();
+    			}
+    		}
+    		
+    		if (modi != 'print' && modi != 'plain') {
+    		    this.setAttribute('drawmodus',modi);
+    		} else if (modi == 'print') {
+    			var my_pj = new PrintJob();
+                var myResult = my_pj.start();
+                
+                if ($debug) Debug.write("myResult ",myResult);
+                
+                if (myResult) {
+                	
+                	var mc = this.getDisplayObject();
+                	
+                	// boolean to track whether addPage succeeded, change this to a counter
+                    // if more than one call to addPage is possible
+                    var pageAdded:Boolean = false;
+                
+                    // check the user's printer orientation setting
+                    // and add appropriate print area to print job
+                    if (my_pj.orientation == "portrait") {
+                        // Here, the printArea measurements are appropriate for an 8.5" x 11"
+                        // portrait page.
+                        pageAdded = my_pj.addPage(mc._parent,{xMin:0,xMax:600,yMin:0,yMax:800});
+                    } else {
+                        // my_pj.orientation is "landscape".
+                        // Now, the printArea measurements are appropriate for an 11" x 8.5"
+                        // landscape page.
+                        pageAdded = my_pj.addPage(mc._parent,{xMin:0,xMax:750,yMin:0,yMax:600});
+                    }
+                
+                    // send pages from the spooler to the printer
+                    if (pageAdded) {
+                        my_pj.send(); 
+                    }
+
+                	
+                	//if ($debug) Debug.write("mc ",mc);
+                	//if ($debug) Debug.write("mc.name ",mc._name);
+                	
+                    //myResult = my_pj.addPage(mc, null, {printAsBitmap:true}, 1);
+                    //my_pj.send();
+                    delete my_pj;
+                }
+    		}
+    		
+    		if (modi=='plainSlide'){
+    			this.doClearSlide = true;
+                this.doClearAll = false;
+    			new lz.confirmationSingle(canvas.main_content._content.inner,{
+                                           labelid:1339,labeliderror:1359,
+                                           refObj:this,showCheckBox:false});
+    			
+    			this.setAttribute('drawmodus',previousModus);
+    		} else if (modi=='plainConfirm'){
+    			this.doClearSlide = false;
+    			this.doClearAll = true;
+                new lz.confirmationSingle(canvas.main_content._content.inner,{
+                                           labelid:1339,labeliderror:1340,
+                                           refObj:this,showCheckBox:false});
+                //this.clearAll();
+                //if ($debug) Debug.write("clearAll and RESET Modus to",previousModus);
+                this.setAttribute('drawmodus',previousModus);
+            } else if (modi=='plain'){
+                this.clearAll();
+                //if ($debug) Debug.write("clearAll and RESET Modus to",previousModus);
+                this.setAttribute('drawmodus',previousModus);
+            } else if (modi=='hand' || modi=='letter' || modi=='triangle' 
+    			|| modi=='paint' || modi=='line' || modi=='uline' || modi=='clipart' 
+    			|| modi=='rectangle' || modi=='ellipse' || modi=='drawarrow'){
+    			if (this.boundingref!=null) this.boundingref.removeIt();
+    		}
+    		if (modi=='rectangle') {
+    			//Open Up Recording
+    			
+    		}
+		]]>
+	</method>
+	
+	<method name="sendConfirmation" args="yesno" >
+		if (this.doClearSlide) {
+			this.clearSlideOnly();
+		} else if (this.doClearAll) {
+            this.clearAll();
+        }
+    </method>
+    
+    <method name="sendNoConfirmation" args="ref">
+    	//Do nothing
+    </method>
+	
+	<method name="getModusItems" args="modi">
+		<![CDATA[
+		//Debug.write("getModusItems: ",modi,this.baseactionobjectList);
+		if (modi=='pointer'){
+			return this.baseactionobjectList;
+		} else {
+			var tempList = new Array();
+			//Debug.write("this.baseactionobjectList: ",modi);
+			for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+				//Debug.write("this.baseactionobjectList[eg][0]==modi",this.baseactionobjectList[eg][0],modi);
+				if (this.baseactionobjectList[eg][0]==modi) {
+					tempList.push(this.baseactionobjectList[eg]);
+				}
+			}		
+			return tempList;
+		}
+		]]>
+	</method>
+	
+	<method name="getObjectByName" args="objName">
+		if (this[objName]) {
+			return this[objName];
+		}
+		return null;
+	</method>
+	
+	<method name="getBaseObjectByName" args="bName">
+        <![CDATA[
+            //Debug.write("getModusItems: ",modi,this.baseactionobjectList);
+            //Debug.write("this.baseactionobjectList: ",modi);
+            for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+                //Debug.write("this.baseactionobjectList[eg][0]==modi",this.baseactionobjectList[eg][0],modi);
+                if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==bName) {
+                    return this.baseactionobjectList[eg];
+                }
+            }       
+            return null;
+        ]]>
+    </method>
+	
+	<method name="deleteItemByName" args="objName">
+        <![CDATA[
+            var newA = this.deleteItemByNameSync(objName);
+            if (newA[0]=='paint') newA[1] = new Array();
+            this.onsharedMessage('delete',newA);    
+        ]]>
+    </method>
+    
+	<method name="deleteItemByNameSync" args="objName">
+    	<![CDATA[
+    	    if ($debug) Debug.write("deleteItemByNameSync :: ",objName);
+    	    this[objName].prepareForDelete.sendEvent();
+    	    this[objName].destroy();
+            if (this.boundingref!=null) this.boundingref.removeIt();
+    		
+    		var pos = -1;
+    		for (var eg=0;eg<this.layers.length;eg++){
+    			if (this.layers[eg]['name']==objName) {
+    				pos = eg;
+    				//Debug.write("Found Object in Layer: ",eg);
+    				this.layers[eg].prepareForDelete.sendEvent();
+    				this.layers[eg].destroy();
+    			}
+    		}	
+    		if (pos!=-1) this.layers.splice(pos, 1);
+    		//get Item Position
+    		pos = -1;
+    		for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+    			if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==objName) {
+    				pos = eg;
+    				//Debug.write("Found Object: ",eg);
+    				break;
+    			}
+    		}
+    		
+    		if ($debug) Debug.write("deleteItemByNameSync Found Object: ",eg);
+    		
+    		var newA = this.baseactionobjectList[pos];
+    		
+    		for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+    			if (this.baseactionobjectList[eg][0]!="pointerWhiteBoard") {
+		    		if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-8]>newA[newA.length-8]) {
+		    				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-8]-=1;
+					}
+    			}
+    		}
+    		
+    		if (pos!=-1) this.baseactionobjectList.splice(pos, 1);
+    		
+    		//if ($debug) Debug.write("this.baseactionobjectList.length: ",this.baseactionobjectList.length);
+    		//if ($debug) Debug.write("this.layers.length: ",this.layers.length);
+    		
+    		if ($debug) Debug.warn("deleteItemByName :: ",objName);
+    		
+    		this.checkStepLayers();
+    		
+    		if (newA[0] == "swf") {
+                this.doDeleteFromDocumentsBar(objName);
+    		}
+    		
+    		return newA;
+    	]]>
+	</method>
+	
+	<method name="UpdateByObject" args="objRef">
+		<![CDATA[
+		//Debug.write("UpdateByObject : ",objRef,objRef.name);
+		var objName = objRef.name;
+		//for (var eg=0;eg<this.layers.length;eg++){
+		//	if (this.layers[eg]['name']==objName) {
+		//		//Debug.write("Found Object in Layer: ",this.layers[eg]);
+		//	}
+		//}
+		
+		var tx = objRef.x;
+        var ty = objRef.y;
+        
+        if(this.isSnapToGrid){   
+            
+            tx = Math.round(tx/this.gridWidth)*this.gridWidth;
+            ty = Math.round(ty/this.gridWidth)*this.gridWidth;
+            
+        }
+		
+		for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+			if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==objName) {
+				//Debug.write("Found Object: ",this.baseactionobjectList[eg]);
+				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5] = tx;
+				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4] = ty;
+				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-3] = objRef.width;
+				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-2] = objRef.height;
+				var newA = this.baseactionobjectList[eg];
+				if (newA[0]=='paint') newA[1] = new Array();				
+				this.onsharedMessage('size',newA);	
+			    break;
+			}
+		}	
+			
+		]]>
+	</method>
+	
+	<!-- ##############
+		undo/redo
+	 -->
+	
+	<method name="undoredo">
+		<![CDATA[
+		if (this.baseactionobjectList.length>0){
+			if (this.boundingref!=null) this.boundingref.removeIt();
+			var lastActionObject = this.baseactionobjectList.pop();
+			this.deleteItemByNameSync(lastActionObject[lastActionObject.length-1]);
+			this.onsharedMessage('undo',lastActionObject);
+		}
+		]]>
+	</method>
+
+	
+	<method name="checkStepLayers">
+		if (this.layers.length==0){
+			this.setAttribute('hasprevious',false);
+		} else {
+			this.setAttribute('hasprevious',true);
+		}
+		if (this.redolayers.length==0){
+			this.setAttribute('hasenext',false);
+		} else {
+			this.setAttribute('hasenext',true);
+		}	
+		//this.setAttribute('drawmodus',this.getAttribute('drawmodus'));				
+	</method>
+	
+	<method name="onmouseoverMethod">
+		
+	</method>
+	
+	<method name="onmouseoutMethod">
+        
+    </method>
+             
+	<method name="onmousedownMethod" >
+		<![CDATA[
+		if ($debug) Debug.write("onmousedownMethod this.drawmodus: ",this.drawmodus);
+		
+		
+		if(this.selectedObjects != null && this.selectedObjects.length > 0){
+			for (var eg=0;eg<this.selectedObjects.length;eg++){
+				var  objectToUpdate = this.getObjectByName(this.selectedObjects[eg][this.selectedObjects[eg].length-1]);
+	            objectToUpdate.setAttribute('opacity', 1);
+			}
+		}
+		
+		if (canvas.ismoderator || canvas.isAllowedToDraw) {
+			var knownModus = true;
+			var initialBoundingIsActive = this.boundingIsActive;
+			if (this.letterObjectIsActive){
+				this.currentletterObj.drawtoArray();
+				this.setModusWithUpdate("hand");
+				knownModus = false;
+			}
+			
+			if(this.drawmodus=="drag"){
+				this.isDragging = true;
+				this.dragger.apply();
+			} else if(this.drawmodus=="hand"){
+				this.doSetHandBodus();				
+			} else if(this.drawmodus=="paint"){
+				this.startPaint();
+				mousetracker_del.register(lz.Idle,'onidle');
+			} else if(this.drawmodus=="line"){
+				this.startLine(null);
+	  	 		this.startx = currentlayer.getMouse('x');
+				this.starty = currentlayer.getMouse('y'); 			
+				mousetracker_del.register(lz.Idle,'onidle');
+			} else if(this.drawmodus=="uline"){
+				this.startUline(null);
+	  	 		this.startx = currentlayer.getMouse('x');
+				this.starty = currentlayer.getMouse('y'); 			
+				mousetracker_del.register(lz.Idle,'onidle');
+			} else if(this.drawmodus=="drawarrow"){
+				this.startDrawarrowline(null);
+	  	 		this.startx = currentlayer.getMouse('x');
+				this.starty = currentlayer.getMouse('y'); 			
+				mousetracker_del.register(lz.Idle,'onidle');
+			} else if (this.drawmodus == 'rectangle') {
+				this.startRect(null);
+	  	 		this.startx = currentlayer.getMouse('x');
+				this.starty = currentlayer.getMouse('y'); 				
+	            mousetracker_del.register(lz.Idle,'onidle');
+	        } else if (this.drawmodus == 'ellipse') {
+				this.startEllipse(null);
+	  	 		this.startx = currentlayer.getMouse('x');
+				this.starty = currentlayer.getMouse('y'); 				
+	            mousetracker_del.register(lz.Idle,'onidle');
+	        } else if (this.drawmodus == 'letter') {
+                this.startLetter();
+                this.startx = currentlayer.getMouse('x');
+                this.starty = currentlayer.getMouse('y');               
+                mousetracker_del.register(lz.Idle,'onidle');
+            } else if (this.drawmodus == 'clipart') {
+            	this.startDrawClipArt(null);
+                this.startx = currentlayer.getMouse('x');
+                this.starty = currentlayer.getMouse('y');  
+                mousetracker_del.register(lz.Idle,'onidle');
+            } else if (this.drawmodus == 'triangle') {
+				this.startTriangle(null);
+	  	 		this.startx = currentlayer.getMouse('x');
+				this.starty = currentlayer.getMouse('y'); 				
+	            mousetracker_del.register(lz.Idle,'onidle');
+	        } else if (this.drawmodus == 'paste') {
+	  	 		var paste_x = parent.getMouse('x');
+				var paste_y = parent.getMouse('y'); 				
+	            this.paste(paste_x, paste_y);
+	            
+	            if ($debug) Debug.write("paste mouse down ",this);
+	        } else {
+	        	knownModus = false;
+	        	if ($debug) Debug.write("onmousedownMethod Unkown Modus ",this.drawmodus);
+	        }
+			if (knownModus && !initialBoundingIsActive && !this.letterObjectIsActive) {
+				startTyping();
+			}
+        }
+        ]]>
+	</method>
+
+	<method name="onmouseupMethod" >
+        if ($debug) Debug.write("onmouseupMethod this.drawmodus: ",this.drawmodus);
+		<![CDATA[	
+	        if (canvas.ismoderator || canvas.isAllowedToDraw) {
+				
+				var knownModus = true;
+	        	if(this.drawmodus=="drag"){
+	        		this.isDragging = false;
+	        		this.dragger.remove();
+	        		
+	        		this.setAttribute("x",Math.round(this.x));
+	        		this.setAttribute("y",Math.round(this.y));
+	        		
+	        		if (this.last_x == this.x && this.last_x == this.x) {
+	        			if ($debug) Debug.write("No Change");
+	        			return;
+	        		}
+	        		
+	        		this.last_x = this.x;
+	        		this.last_y = this.y;
+	        		
+	        		var tArray = new Array();
+		    		tArray[0] = "moveMap";
+		    		tArray[1] = this.x;
+		    		tArray[2] = this.y;
+		    		
+		    		this.onsharedMessage('moveMap',tArray);
+	        		
+	        	} else if(this.drawmodus=="paint"){
+					this.endPaint();
+					mousetracker_del.unregisterAll();
+				} else if(this.drawmodus=="line"){
+					this.endLine();
+					mousetracker_del.unregisterAll();
+				} else if(this.drawmodus=="drawarrow"){
+					this.endDrawarrowline();
+					mousetracker_del.unregisterAll();
+				} else if(this.drawmodus=="uline"){
+					this.endUline();
+					mousetracker_del.unregisterAll();
+				} else if(this.drawmodus=="letter"){
+					this.endLetter();
+					mousetracker_del.unregisterAll();
+				} else if (this.drawmodus == 'rectangle') {
+					this.endRect();
+		        	mousetracker_del.unregisterAll();
+		        } else if (this.drawmodus == 'ellipse') {
+					this.endEllipse();
+		        	mousetracker_del.unregisterAll();
+		        } else if (this.drawmodus == 'pointer') {
+		        	this.setAttribute('drawmodus','hand');
+					if (this.boundingIsActive){
+						this.boundingref._innerDrag.onmouseup.sendEvent();
+					}
+		        } else if (this.drawmodus == 'pointerWhiteboard') {
+                    if ($debug) Debug.write("pointerWhiteboard set New Point ");
+                    this.endPointerWhiteBoard();
+                } else if(this.drawmodus=="clipart"){
+                    this.endDrawClipArt();
+                    mousetracker_del.unregisterAll();
+                } else if (this.drawmodus == 'triangle') {
+					this.endTriangle();
+		        	mousetracker_del.unregisterAll();
+		        } else if (this.drawmodus == 'hand') {
+					this.endSelect();
+		        	mousetracker_del.unregisterAll();
+		        } else if (this.drawmodus == 'paste') {
+		        } else {
+					knownModus = true;
+		        	if ($debug) Debug.write("onmouseupMethod Unkown Modus ",this.drawmodus);
+		        }
+				if (knownModus && !this.boundingIsActive && !this.letterObjectIsActive) {
+					endTyping();
+				}
+	                
+				this.checkStepLayers();
+	        } else {
+	        	if (!this.restricted) {
+                    this.endPointerWhiteBoard();
+	        	}
+            }
+		]]>
+	</method>  
+    
+    <method name="startTyping">
+		if ($debug) Debug.info("Start typing ..... ", canvas.publicSID);
+		var msg = new Array();
+		msg[0] = 'typingActivity';
+		msg[1] = true;
+		msg[2] = canvas.publicSID;
+		canvas.objMessage = msg;
+		canvas.thishib.sendMessage.doCall();
+    </method>
+    
+    <method name="endTyping">
+		if ($debug) Debug.info("..... end typing ", canvas.publicSID);
+		var msg = new Array();
+		msg[0] = 'typingActivity';
+		msg[1] = false;
+		msg[2] = canvas.publicSID;
+		canvas.objMessage = msg;
+		canvas.thishib.sendMessage.doCall();
+    </method>
+    
+    <!--
+    <handler name="onclick" args="obj">
+        //Debug.write("click on whiteBoard ",obj);
+    </handler>
+     -->
+
+  	<method name="trackmouse" args="item">
+    	<![CDATA[
+
+    	this.mx = currentlayer.getMouse('x');
+    	this.my = currentlayer.getMouse('y');   
+	    	    	
+    	if (this.drawmodus=="paint"){	    	
+		    if (mx != prevx || my != prevy) {
+		        if (prevx == null) {
+		            prevx = mx;
+		        }
+		        if (prevy == null) {
+		            prevy = my;
+		        }
+	            var mmx = this.mx;
+	            var mmy = this.my;
+	            var px = this.prevx;
+	            var py = this.prevy;
+
+	            this.drawline(px, py, mmx, mmy);
+	            this.drawlineRegisterPaint(px, py, mmx, mmy);
+	            
+	            this.prevx  = this.mx;
+	            this.prevy = this.my;            
+	        } 
+	    } else if (this.drawmodus=="line"){	 
+	    	var oid_name = this.currentlayer.name;
+	    	this.currentlayer.destroy();
+	    	this.startLine(oid_name);
+			this.endx = this.mx;
+			this.endy = this.my;
+            this.drawline(this.startx, this.starty, this.endx, this.endy);
+	    } else if (this.drawmodus=="uline"){
+	    	var oid_name = this.currentlayer.name;
+	    	this.currentlayer.destroy();
+	    	this.startUline(oid_name);
+			this.endx = this.mx;
+			this.endy = this.my;
+            this.drawline(this.startx, this.starty, this.endx, this.endy);
+	    } else if (this.drawmodus=="drawarrow"){	
+	    	var oid_name = this.currentlayer.name;
+	    	this.currentlayer.destroy();
+	    	this.startDrawarrowline(oid_name);
+			this.endx = this.mx;
+			this.endy = this.my;
+	    } else if (this.drawmodus == 'rectangle') {
+	    	var oid_name = this.currentlayer.name;
+	    	this.currentlayer.destroy();
+	    	this.startRect(oid_name);
+			// stretchy rect mode
+			this.endx = this.mx;
+			this.endy = this.my;
+			this.drawrectangle (this.startx, this.starty, this.mx, this.my);
+		} else if (this.drawmodus == 'triangle') {
+	    	var oid_name = this.currentlayer.name;
+	    	this.currentlayer.destroy();
+	    	this.startTriangle(oid_name);
+			// stretchy rect mode
+			this.endx = this.mx;
+			this.endy = this.my;
+			this.drawtriangle (this.startx, this.starty, this.mx, this.my);
+		} else if (this.drawmodus == 'ellipse') {
+			var oid_name = this.currentlayer.name;
+	    	this.currentlayer.destroy();
+	    	this.startEllipse(oid_name);
+			// stretchy rect mode
+			this.endx = this.mx;
+			this.endy = this.my;
+			this.drawellipse (this.startx, this.starty, this.mx, this.my);			
+		} else if (this.drawmodus == 'letter') {
+			var oid_name = this.currentlayer.name;
+	    	this.currentlayer.destroy();
+	    	this.startLetter(oid_name);
+			// stretchy rect mode
+			this.endx = this.mx;
+			this.endy = this.my;
+			this.drawletterBoundingBox (this.startx, this.starty, this.mx, this.my);			
+		} else if (this.drawmodus=="clipart"){ 
+            //var oid_name = this.currentlayer.name;
+            //this.currentlayer.destroy();
+            this.trackDrawClipArt();
+            this.endx = this.mx;
+            this.endy = this.my;
+        } else if (this.drawmodus == 'copy') {
+	    	var oid_name = this.currentlayer.name;
+	    	this.currentlayer.destroy();
+	    	this.startSelect(oid_name);
+			// stretchy rect mode
+			this.endx = this.mx;
+			this.endy = this.my;
+			this.drawrectangle (this.startx, this.starty, this.mx, this.my);
+        }else if (this.drawmodus == 'hand') {
+	    	var oid_name = this.currentlayer.name;
+	    	this.currentlayer.destroy();
+	    	this.startSelect(oid_name);
+			// stretchy rect mode
+			this.endx = this.mx;
+			this.endy = this.my;
+			this.drawrectangle (this.startx, this.starty, this.mx, this.my);
+        }
+		
+    	]]>
+    </method>
+	
+	<!-- ####################
+		Handmodus
+	 -->
+	<method name="doSetHandBodus" >
+		<![CDATA[
+		////Debug.write("doSetHandBodus: ");
+		var objList = this.getObjectInBounds(this.getMouse('x'),this.getMouse('y'));
+		if(objList.length==1){
+			this.setAttribute('drawmodus','pointer');
+			////Debug.write(objList[0][objList[0].length-1]);
+			this.doShowObjectBounds(objList[0][objList[0].length-1]);
+		} else if (objList.length>1){
+			this.setAttribute('drawmodus','pointer');
+			////Debug.write(objList[objList.length-1][objList[objList.length-1].length-1]);
+			this.doShowObjectBounds(objList[objList.length-1][objList[objList.length-1].length-1]);
+		} else {
+			this.startSelect(null);
+  	 		this.startx = currentlayer.getMouse('x');
+			this.starty = currentlayer.getMouse('y'); 				
+            mousetracker_del.register(lz.Idle,'onidle');
+            if ($debug) Debug.write("this.startSelect ",this);
+	            
+			this.setModus("hand");
+		}
+		]]>
+	</method>
+	
+    <method name="doShowObjectBounds" args="val">
+    <![CDATA[
+    	if (val !=null && val!=''){
+	    	this.ObjectByName = this.getObjectByName(val);
+	    	//FIXME: Set Corrent Value to Document Toolbar or use another var
+               
+            var boundingDoUpdateOnInit = true;
+            if (this.ObjectByName instanceof lz.swfResourceView){
+                //Debug.write("is swf Presentation");
+                boundingDoUpdateOnInit=false;
+            }
+            
+            //if ($debug) Debug.write("this.ObjectByName ",val,this.ObjectByName);
+                
+	    	var x = this.ObjectByName.x;
+	    	var y = this.ObjectByName.y;
+            //if ($debug) Debug.write("doShowObjectBounds: ",x,y);
+	    	var width = this.ObjectByName.width;
+	    	var height = this.ObjectByName.height;
+	    	if (this.boundingref!=null)this.boundingref.removeIt();
+	    	this.boundingref = new lz.boundingBoxAll(this.parent.parent._drawareaMask._drawarea,{whiteboardRef:this,
+                    objRef:this.ObjectByName,x:x-200,y:y-200,width:width+400,height:height+400,
+                    canBeDragged:boundingDoUpdateOnInit,canBeResized:boundingDoUpdateOnInit,
+                    ex:x,ey:y,ewidth:width,eheight:height,boundingDoUpdateOnInit:boundingDoUpdateOnInit});
+	    	this.setAttribute('boundingIsActive',true);
+        
+            //if (!boundingDoUpdateOnInit) {
+            //    this.boundingref._inner._inner.setAttribute('width',this.ObjectByName._swfView.width);
+            //    this.boundingref._inner._inner.setAttribute('height',this.ObjectByName._swfView.height);
+            //    if ($debug) Debug.write("NEW WIDTH AND HEIGHT OF SWF ",this.ObjectByName._swfView.width,this.ObjectByName._swfView.height);
+            //    this.boundingref._inner.setAttribute('visible',true);
+            //    parent.parent.changeMenu(2,true);
+            //    this.doUpdateDocumentToolBar();
+            //} else {
+            //    parent.parent.changeMenu(1,true);
+            //}
+             
+    	}
+    ]]>
+    </method>   
+    
+    <method name="reselectShowObjectBounds" args="val">
+    <![CDATA[
+        if (val !=null && val!=''){
+            this.ObjectByName = this.getObjectByName(val);
+            //FIXME: Set Corrent Value to Document Toolbar or use another var
+               
+            
+            //if ($debug) Debug.write("this.ObjectByName ",val,this.ObjectByName);
+                
+            var x = this.ObjectByName.x;
+            var y = this.ObjectByName.y;
+            //if ($debug) Debug.write("doShowObjectBounds: ",x,y);
+            var width = this.ObjectByName.width;
+            var height = this.ObjectByName.height;
+            if (this.boundingref!=null)this.boundingref.removeIt();
+            this.boundingref = new lz.boundingBoxAll(this.parent.parent._drawareaMask._drawarea,{
+                                whiteboardRef:this,
+                                objRef:this.ObjectByName,
+                                x:x-200,y:y-200,
+                                width:width+400,height:height+400,
+                                canBeDragged:true,canBeResized:false,
+                                ex:x,ey:y,ewidth:width,eheight:height,
+                                boundingDoUpdateOnInit:false
+                            });
+            this.setAttribute('boundingIsActive',true);
+        
+            //if (!boundingDoUpdateOnInit) {
+            //    this.boundingref._inner._inner.setAttribute('width',this.ObjectByName._swfView.width);
+            //    this.boundingref._inner._inner.setAttribute('height',this.ObjectByName._swfView.height);
+            //    if ($debug) Debug.write("NEW WIDTH AND HEIGHT OF SWF ",this.ObjectByName._swfView.width,this.ObjectByName._swfView.height);
+            //    this.boundingref._inner.setAttribute('visible',true);
+            //    parent.parent.changeMenu(2,true);
+            //    this.doUpdateDocumentToolBar();
+            //} else {
+            //    parent.parent.changeMenu(1,true);
+            //}
+             
+        }
+    ]]>
+    </method>   
+	
+	<method name="updateObjectBounds">
+		if (this.boundingref!=null) this.boundingref.resetValues();
+	</method>
+	
+	<method name="removeObjectBounds">
+		if (this.boundingref!=null) this.boundingref.removeIt();
+	</method>
+    
+	<method name="getObjectInBounds" args="x,y">
+		<![CDATA[
+		var tempList = new Array();
+		if ($debug) Debug.write("getObjectInBounds this.baseactionobjectList1: ",x,y,this.baseactionobjectList);
+		
+		for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+			
+			
+			//if ($debug) Debug.write("c1 ",this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5],"<",x);
+            //if ($debug) Debug.write("c2 ",(this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5]+this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-3]),">",x);
+            //if ($debug) Debug.write("c3 ",this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4],"<",y);
+            //if ($debug) Debug.write("c4 ",( this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4]+this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-2] ),">",y);
+        
+			
+			if ( ( this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5]<=x 
+				&& ( (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5]+this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-3]) >=x ) ) 
+				&& ( this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4]<=y 
+				&& ( this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4]+this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-2] )>=y  ) ) {
+					
+				if (this.baseactionobjectList[eg][0] != "mindMapNode"
+				        && this.baseactionobjectList[eg][0] != "mindMapCenter")	{
+    				if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-7] == null) {
+        				tempList.push(this.baseactionobjectList[eg]);
+    		        } else {
+    		        	var swfObject = this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-7];
+    		        	
+    		        	if ($debug) Debug.write("getObjectInBounds :: swfObject ",swfObject.isVisible);
+    		        	
+    		        	if(swfObject.isVisible) {
+    	        	        tempList.push(this.baseactionobjectList[eg]);
+    		        	}
+    		        }
+		        }
+				////Debug.write("found obj: ",this.baseactionobjectList[eg]);
+			}
+		}		
+		return tempList;
+		]]>
+	</method>
+	
+	
+	<method name="getZIndex">
+		<![CDATA[
+			if ($debug) Debug.write("getZIndex ",this.subviews.length-1);
+			return this.subviews.length-1;
+		]]>
+	</method>
+	
+	
+	
+	<!-- ##################
+		SharedModus
+		action => type of action
+		actionObject => necessary information to reproduce the event
+		isWmlLoader => true means this object is loaded through a stored wml-file
+		so do not spread any update-notifications to connected clients for each 
+		object cause the file loading will make a seperate notification
+	 -->
+	<method name="sendWatchObject" args="action,actionObject,isWmlLoader">
+		if ($debug) Debug.write("sendWatchObject: ",action,actionObject);
+		<![CDATA[
+		if (action=='draw' || action=='redo'){
+			var lastactionObject = actionObject;
+			
+			//Redraw the View on the paintarea
+			if (actionObject[0]=='paint'){
+				this.paintactionHistory(lastactionObject,this);
+			} else if (actionObject[0]=='line'){
+				this.lineactionHistory(lastactionObject,this);
+			} else if (actionObject[0]=='uline'){
+				this.ulineactionHistory(lastactionObject,this);
+			} else if (actionObject[0]=='drawarrow'){
+				this.drawarrowlineactionHistory(lastactionObject,this);
+			} else if(action,actionObject[0]=='letter'){
+				this.drawactionHistory(lastactionObject,this);
+			} else if(actionObject[0]=='image'){
+				//Image will send the onwmlLoaderSend later cause it has to be send
+				//once the image has been loaded completely
+				this.addImageToLayerHistorySynced(lastactionObject,this);
+			} else if(actionObject[0]=='swf'){
+				//Image will send the onwmlLoaderSend later cause it has to be send
+				//once the image has been loaded completely
+				this.addSWFToLayerHistorySynced(lastactionObject,this);
+			} else if(actionObject[0]=='rectangle'){
+				this.drawrectangleToHistory(lastactionObject,this);
+			} else if(actionObject[0]=='triangle'){
+				this.drawtriangleToHistory(lastactionObject,this);
+			} else if(actionObject[0]=='ellipse'){
+				this.drawellipseToHistory(lastactionObject,this);
+			} else if(actionObject[0]=='pointerWhiteBoard'){
+                this.drawPointerToHistory(lastactionObject,this);
+            } else if(actionObject[0]=='flv'){
+                this.drawFlvToHistory(lastactionObject,this);
+            } else if(actionObject[0]=='mindMapCenter'){
+                this.drawMindMapCenterToHistory(lastactionObject,this);
+            } else if(actionObject[0]=='mindMapNode'){
+                this.drawMindMapNodeToHistory(lastactionObject,this);
+            } else if(actionObject[0]=='clipart'){
+                this.drawClipArtToHistory(lastactionObject,this);
+            }
+			//set counter to maximum otherwise trouble in naming conventions
+			//the 6th array index count from the end of each object is always the counter of the
+			//object
+			this.compareAndSetCounter(lastactionObject[lastactionObject.length-6]);
+			this.baseactionobjectList.push(lastactionObject);
+			
+			//Send a notifcation for the library loader sothat it can show progress
+			//and Browser does not hangUp and images can be proceed
+			//only send if type ain#t image cause image will send its own one after 
+			// it has been loaded completely
+			if (isWmlLoader && actionObject[0]!='image' && isWmlLoader && actionObject[0]!='swf') {
+				if (this.onwmlLoaderSend) this.onwmlLoaderSend.sendEvent(actionObject[0]);
+			}
+         
+        } else if(action=='clear'){
+            
+            this.clearRemote();
+            
+        } else if(action=='clearSlide'){
+            
+            this.clearSlideRemote(actionObject);
+            
+        } else if(action=='moveMap'){
+			
+			this.setAttribute("x",actionObject[1]);
+			this.setAttribute("y",actionObject[2]);
+			
+        } else if(actionObject[0]=='whiteboardObj'){
+            this.doUpdateFullFitAndZoomRemote(actionObject);
+		} else if(action=='flv'){
+			
+			this.playFLVRemote(actionObject);
+			
+		} else if(action=='addBrainStorming'){
+            
+            this.brainStormingIdeasGathering(actionObject);
+        
+        } else if(action=='addBrainStormingIdeaPhase2'){
+            
+        	//Adding Idea in Phase 2
+            this.addIdeaToPhase2(actionObject);
+        
+        } else if(action=='deleteBrainStorming'){
+			
+			this.brainStormingClose(actionObject);
+			
+		} else if(action=='updateBrainStormingPhase'){
+            
+            this.brainStormingPhase2(actionObject);
+            
+        } else if(action=='updateBrainStormingPhase'){
+            
+            this.brainStormingPhase2(actionObject);
+            
+        } else if(action=='updatePrioBrainStormingIdea'){
+            
+            this.updatePrioBrainStormingIdea(actionObject);
+        
+        } else if(action=='updateTextBrainStormingIdeaColor'){
+            
+            this.updateTextBrainStormingIdeaColor(actionObject);
+        
+        } else if(action=='updateBrainStormingGroupName'){
+            
+            this.updateBrainStormingGroupName(actionObject);
+            
+        } else if(action=='deleteBrainStormingGroup'){
+            
+            this.deleteBrainStormingGroup(actionObject);
+			
+		} else if(action=='deleteBrainStormingIdea'){
+            
+            this.deleteBrainStormingIdea(actionObject);
+			
+		} else if(action=='addBrainStormingGroup'){
+            
+            this.addNewGroupRemote(actionObject,false);
+            
+		} else if(action=='updateGroupBrainStormingIdea'){
+            
+			if (actionObject[3] == "") {
+                this.moveIdeaToResultListRemote(actionObject);
+			} else {
+                this.moveIdeaToGroupRemote(actionObject);
+			}
+			
+		} else if(action=='delete' || action=='undo'){
+			
+			var lastactionObject = actionObject;	
+			this.deleteItemByNameSync(lastactionObject[lastactionObject.length-1]);
+			
+		} else if(action=='size'){
+			
+			var lastactionObject = actionObject;	
+			
+			if (lastactionObject[0] == "clipart") {
+				
+				var obj = this.getObjectByName(lastactionObject[lastactionObject.length-1]);
+                obj.destroy();
+                
+                this.drawClipArtToHistory(lastactionObject,this);
+                
+                for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+                    if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==lastactionObject[lastactionObject.length-1]) {
+                        
+                        //if ($debug) Debug.write("Found Object 1: ",this.baseactionobjectList[eg]);
+                        
+                        this.baseactionobjectList[eg] = lastactionObject;
+                        
+                        break;
+                    }
+                }   
+                
+                if (this.boundingIsActive) {
+                    this.reselectShowObjectBounds(lastactionObject[lastactionObject.length-1]);
+                }
+				
+			} else {
+			
+    			var obj = this.getObjectByName(lastactionObject[lastactionObject.length-1]);
+    			
+    			if ($debug) Debug.write("Set Size for Object ",obj);
+    			obj.setAttribute('x',lastactionObject[lastactionObject.length-5]);
+    			obj.setAttribute('y',lastactionObject[lastactionObject.length-4]);
+    			obj.setAttribute('width',lastactionObject[lastactionObject.length-3]);
+    			obj.setAttribute('height',lastactionObject[lastactionObject.length-2]);
+    			
+    			this.updateBaseObjectByName(lastactionObject[lastactionObject.length-1],
+    			                         lastactionObject[lastactionObject.length-5],
+    			                         lastactionObject[lastactionObject.length-4],
+    			                         lastactionObject[lastactionObject.length-3],
+    			                         lastactionObject[lastactionObject.length-2]);
+    			                         
+    			//if ($debug) Debug.write("BaseObject List ?? ",this.baseactionobjectList);
+    			
+                if (this.boundingIsActive) {
+                	this.boundingref.sendRemoteUpdate(obj)
+                }
+            
+			}
+			                         
+		} else if (action=="loadwml"){
+			//Debug.write(actionObject,actionObject["wmlfileName"],actionObject["wmlroom"],actionObject["wmldomain"]);
+			this.remoteWmlLoader(actionObject["wmlfileName"],actionObject["wmlroom"],actionObject["wmldomain"]);
+		} else if (action=="editText"){
+            this.editTextByHistory(actionObject,this);
+		}else if (action=="editTextMindMapFontColor") {
+            this.editTextMindMapFontColor(actionObject,this);
+        } else if (action=="editTextMindMapColor"){
+            this.editTextMindMapColor(actionObject,this);   
+        } else if (action=="editTextMindMapNode"){
+            this.editTextMindMapNode(actionObject,this);
+        } else if (action=="sendItemToFront"){
+            this.bringItemToFrontByName(actionObject[1]);
+        } else if (action=="initgetVars"){
+			//Debug.write("initUser isMod ",canvas.ismoderator,actionObject);
+			if (canvas.ismoderator){
+				//Debug.write("send all whiteBoard objects to new user");
+				var obj = new Array();
+			    obj[0] = 'whiteboard';
+			    obj[1] = 'inituser';
+			    obj[2] = this.baseactionobjectList;
+				this.oninitUser(actionObject,obj);
+			}
+		} else if (action=="swf"){
+			this.remoteObjectUpdate(actionObject);	
+		}
+		]]>
+	</method>
+	
+	
+	<method name="updateBaseObjectByName" args="tName,x,y,width,height">
+		<![CDATA[
+		
+		    
+		
+            for (var i=0;i<this.baseactionobjectList.length;i++) {
+            	
+            	if (this.baseactionobjectList[i][this.baseactionobjectList[i].length-1] == tName) {
+            		this.baseactionobjectList[i][this.baseactionobjectList[i].length-5] = x;
+            		this.baseactionobjectList[i][this.baseactionobjectList[i].length-4] = y;
+            		this.baseactionobjectList[i][this.baseactionobjectList[i].length-3] = width;
+            		this.baseactionobjectList[i][this.baseactionobjectList[i].length-2] = height;
+            		return;
+            	}
+            	
+            }
+		    
+            
+            if ($debug) Debug.warn("Could Not Find Item on List ",tName);
+		]]>
+	</method>
+	
+	<method name="sendRecordedObject" args="action,actionObject,isWmlLoader">
+		//Debug.write("sendWatchObject: ",action,actionObject);
+		<![CDATA[
+		if (action=='draw' || action=='redo'){
+			var lastactionObject = actionObject;
+			
+			//Redraw the View on the paintarea
+			if (actionObject[0]=='paint'){
+				this.paintactionHistory(lastactionObject,this);
+			} else if (actionObject[0]=='line'){
+				this.lineactionHistory(lastactionObject,this);
+			} else if (actionObject[0]=='uline'){
+				this.ulineactionHistory(lastactionObject,this);
+			} else if (actionObject[0]=='drawarrow'){
+				this.drawarrowlineactionHistory(lastactionObject,this);
+			} else if(action,actionObject[0]=='letter'){
+				this.drawactionHistory(lastactionObject,this);
+			} else if(actionObject[0]=='image'){
+				//Image will send the onwmlLoaderSend later cause it has to be send
+				//once the image has been loaded completely
+				this.addImageToLayerHistoryRecorded(lastactionObject,this,isWmlLoader);
+			} else if(actionObject[0]=='swf'){
+				//Image will send the onwmlLoaderSend later cause it has to be send
+				//once the image has been loaded completely
+				this.addSWFToLayerHistoryRecording(lastactionObject,this,isWmlLoader);
+			} else if(actionObject[0]=='rectangle'){
+				this.drawrectangleToHistory(lastactionObject,this);
+			} else if(actionObject[0]=='ellipse'){
+				this.drawellipseToHistory(lastactionObject,this);
+			}
+			//set counter to maximum otherwise trouble in naming conventions
+			//the 6th array index count from the end of each object is always the counter of the
+			//object
+			this.compareAndSetCounter(lastactionObject[lastactionObject.length-6]);
+			this.baseactionobjectList.push(lastactionObject);
+			
+			//Send a notifcation for the library loader sothat it can show progress
+			//and Browser does not hangUp and images can be proceed
+			//only send if type ain#t image cause image will send its own one after 
+			// it has been loaded completely
+			if (isWmlLoader && actionObject[0]!='image' && isWmlLoader && actionObject[0]!='swf') {
+				if (this.onwmlLoaderSend) this.onwmlLoaderSend.sendEvent(actionObject[0]);
+			}
+            
+		} else if(action=='clear'){
+			this.clearAll();
+		} else if(action=='delete' || action=='undo'){
+			var lastactionObject = actionObject;	
+			var obj = this.getObjectByName(lastactionObject[lastactionObject.length-1]);
+			obj.destroy();
+		} else if(action=='size'){
+			var lastactionObject = actionObject;	
+			var obj = this.getObjectByName(lastactionObject[lastactionObject.length-1]);
+			obj.setAttribute('x',lastactionObject[lastactionObject.length-5]);
+			obj.setAttribute('y',lastactionObject[lastactionObject.length-4]);
+			obj.setAttribute('width',lastactionObject[lastactionObject.length-3]);
+			obj.setAttribute('height',lastactionObject[lastactionObject.length-2]);
+		} else if (action=="loadwml"){
+			//Debug.write(actionObject,actionObject["wmlfileName"],actionObject["wmlroom"],actionObject["wmldomain"]);
+			this.remoteWmlLoaderRecording(actionObject["wmlfileName"],actionObject["wmlroom"],actionObject["wmldomain"]);
+		} else if (action=="editText"){
+			this.editTextByHistory(actionObject,this);
+		} else if (action=="initgetVars"){
+			//Debug.write("initUser isMod ",canvas.ismoderator,actionObject);
+			if (canvas.ismoderator){
+				//Debug.write("send all whiteBoard objects to new user");
+				var obj = new Array();
+			    obj[0] = 'whiteboard';
+			    obj[1] = 'inituser';
+			    obj[2] = this.baseactionobjectList;
+				this.oninitUser(actionObject,obj);
+			}
+		} else if (action=="swf"){
+			this.remoteObjectUpdate(actionObject);	
+		}
+		]]>
+	</method>
+	
+  	<method name="getSWFDocumentStatus">
+  		<![CDATA[
+  		
+  		    for (var i=0;i<this.baseactionobjectList.length;i++) {
+  		    	
+  		    	if (this.baseactionobjectList[i][0] == "swf") {
+  		    		
+  		    		var tSWF = new Object();
+  		    		
+  		    		tSWF.name = this.baseactionobjectList[i][this.baseactionobjectList[i].length-1];
+  		    		tSWF.slide = this.baseactionobjectList[i][8];
+  		    		tSWF.isVisible = true;
+  		    		
+  		    		return tSWF;
+  		    	}
+  		    	
+  		    }
+  		    
+  		    return null;
+  		]]>
+  	</method>
+
+    <method name="checkSWFDocumentStatus" args="swfObj">
+        <![CDATA[
+        
+            if (swfObj != null) {
+        
+                var swfBaseObj = this.getBaseObjectByName(swfObj.name);
+                
+                if (swfBaseObj != null) {
+            
+                    if (swfObj.slide == swfBaseObj[8]) {
+                    	return true;
+                    } else {
+                    	return false;
+                    }
+                    
+                }
+            
+            }
+            
+            return true;
+        ]]>
+    </method>
+
+    <method name="doSWFDocumentStatus" args="refObj,swfObj">
+        <![CDATA[
+        
+            if (swfObj != null) {
+        
+                if (swfObj.isVisible) {
+                	
+                	refObj.setAttribute("visibility","visible");
+                	
+                } else {
+                	
+                	refObj.setAttribute("visibility","hidden");
+                	
+                }
+            
+            } else {
+            	
+            	refObj.setAttribute("visibility","visible");
+            	
+            }
+            
+        ]]>
+    </method>
+    
+    <method name="updateObjectsToSlideNumber" args="baseObject">
+    	<![CDATA[
+    	
+            var baseObjectName = baseObject[baseObject.length-1];
+            var slidesNumber = baseObject[8];
+    	   
+            if ($debug) Debug.write("updateObjectsToSlideNumber :: ",baseObjectName,slidesNumber)
+    	
+            for (var i=0;i<this.baseactionobjectList.length;i++) {
+    	   	
+                if (this.baseactionobjectList[i][0] == "ellipse" 
+                        || this.baseactionobjectList[i][0] == "drawarrow"
+                        || this.baseactionobjectList[i][0] == "line"
+                        || this.baseactionobjectList[i][0] == "paint"
+                        || this.baseactionobjectList[i][0] == "rectangle"
+                        || this.baseactionobjectList[i][0] == "uline"
+                        || this.baseactionobjectList[i][0] == "image"
+                        || this.baseactionobjectList[i][0] == "clipart"
+                        || this.baseactionobjectList[i][0] == "letter") {
+                	
+                	var swfObj = this.baseactionobjectList[i][this.baseactionobjectList[i].length-7];
+                	if ($debug) Debug.write("swfObj :: ",swfObj);
+                	
+                	if (swfObj != null) {
+                		
+                		if (swfObj.name == baseObjectName) {
+                			
+                			if (swfObj.slide == slidesNumber) {
+                				
+                				swfObj.isVisible = true;
+                				
+                				this.baseactionobjectList[i][this.baseactionobjectList[i].length-7] = swfObj; 
+                				
+                				this[this.baseactionobjectList[i][this.baseactionobjectList[i].length-1]].setAttribute("visibility","visible");
+                				
+                			} else {
+                				
+                				swfObj.isVisible = false;
+                				
+                				this.baseactionobjectList[i][this.baseactionobjectList[i].length-7] = swfObj; 
+                				
+                				this[this.baseactionobjectList[i][this.baseactionobjectList[i].length-1]].setAttribute("visibility","hidden");
+                				
+                			}
+                			
+                		}
+                		
+                	}
+                	
+                }
+    	   	
+            }
+    	
+    	]]>
+    </method>
+    
+    <method name="updateAllObjectsToSlideNumber">
+        <![CDATA[
+        
+            if ($debug) Debug.write(" :: updateAllObjectsToSlideNumber :: ")
+        
+            for (var i=0;i<this.baseactionobjectList.length;i++) {
+            
+                if (this.baseactionobjectList[i][0] == "ellipse" 
+                        || this.baseactionobjectList[i][0] == "drawarrow"
+                        || this.baseactionobjectList[i][0] == "line"
+                        || this.baseactionobjectList[i][0] == "paint"
+                        || this.baseactionobjectList[i][0] == "rectangle"
+                        || this.baseactionobjectList[i][0] == "uline"
+                        || this.baseactionobjectList[i][0] == "image"
+                        || this.baseactionobjectList[i][0] == "letter") {
+                    
+                    var swfObj = this.baseactionobjectList[i][this.baseactionobjectList[i].length-7];
+                    if ($debug) Debug.write("swfObj :: ",swfObj);
+                    
+                    if (swfObj != null) {
+                        
+                            
+                        if (swfObj.isVisible) {
+                            
+                            this[this.baseactionobjectList[i][this.baseactionobjectList[i].length-1]].setAttribute("visibility","visible");
+                            
+                        } else {
+                            
+                            this[this.baseactionobjectList[i][this.baseactionobjectList[i].length-1]].setAttribute("visibility","hidden");
+                            
+                        }
+                            
+                        
+                    }
+                    
+                }
+            
+            }
+        
+        ]]>
+    </method>
+
+    <dragstate name="dragger"/>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/baseDrawImage.lzx b/WebContent/src/modules/conference/whiteboard/base/baseDrawImage.lzx
new file mode 100644
index 0000000..5e883a7
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/baseDrawImage.lzx
@@ -0,0 +1,349 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDrawImage" extends="baseDrawLetter">
+	
+  	<!-- attribute shows if this image is loaded as part of a wml-file-object
+		if true it will send a onwmlLoaderSend message and NO extra loading bar
+		if false it will show a loading abr for that image
+	-->
+	<attribute name="isWmlLoaderImage" value="false" type="boolean" />
+    
+    <!-- indicates if this client is still loading an old image for the screenViwer -->
+    <attribute name="isScreenImageLoading" value="false" type="boolean" />
+    <attribute name="screenImageRefNumber" value="1" type="number" />
+    <attribute name="screenImageRef1" value="null" />
+    <attribute name="screenImageRef2" value="null" />
+	
+    <event name="setNewScreenUserName" />
+  	
+  	<!-- invoked by clicking on the confirmation dialog after 
+  		clicking on an image in the Library -->
+  	<method name="addNewSyncImage" args="urlname,posx,posy,baseurl,fileName,moduleName,parentPath,room,domain">
+  		if ($debug) Debug.write("urlname: ",urlname);
+  		var now = new Date();
+  		//This invokes a Method which is in the remoteWhiteboard.lzx
+  		this.startNewObjectSyncProcess.isStarting = true;
+  		this.startNewObjectSyncProcess.uniqueObjectSyncName = fileName + now.getTime();
+  		this.startNewObjectSyncProcess.doCall();
+  		this.addNewImage(urlname,posx,posy,baseurl,fileName,
+  			moduleName,parentPath,room,domain,
+  			this.startNewObjectSyncProcess.uniqueObjectSyncName,false);
+  	</method>
+  	
+  	<!-- standard add Function -->
+  	<method name="addNewImage" args="urlname,posx,posy,baseurl,fileName,moduleName,parentPath,room,domain,uniqueObjectSyncName,isLocalSync">
+  		if ($debug) Debug.write("urlname posx: ",urlname,posx);
+  		this.addImageToLayer(this,'image'+this.getCounter(),urlname,
+  			posx,posy,0,0,
+  			true,
+  			baseurl,fileName,moduleName,parentPath,room,domain,uniqueObjectSyncName,isLocalSync);
+  	</method>
+  	
+	<!--
+		alterModus => this is added by the mod not remotely
+		
+	 -->
+  	<method name="addImageToLayer" args="obj,nameing,urlname,posx,posy,width,height,alterModus,baseurl,fileName,moduleName,parentPath,room,domain,uniqueObjectSyncName,isLocalSync">
+        <![CDATA[
+			//only show if it is not part of wml-file-object
+			//do not show at all as this is handled via the remote Object
+			//if (!this.isWmlLoaderImage) {
+			//	this.loadimageDataWinRef = new lz.loadWhiteboardWindow(canvas.main_content._content.inner,{refObj:this});
+			//	this.loadimageDataWinRef.setMessage(canvas.getLabelName(this.imageLoadMessageId));
+			//}
+			
+            if ($debug) Debug.write("addImageToLayer ",urlname);
+        	//if ($debug) Debug.write("addImageToLayer ",obj,nameing,urlname,posx,posy,width,height,alterModus,baseurl,fileName,moduleName,parentPath,room,domain);
+			//if ($debug) Debug.write("addImageToLayer posx ",posx);
+        	
+	  		if ($debug) Debug.write("addImageToLayer urlname : ", canvas.getUrl() + 'DownloadHandler');
+			var src = canvas.getUrl() + 'DownloadHandler' + '?fileName=' + encodeURIComponent(fileName) + 
+				'&moduleName=' + moduleName +
+				'&parentPath=' + encodeURIComponent(parentPath) +
+				'&room_id=' + room + 
+				'&sid=' + canvas.sessionId;
+	
+	        if ($debug) Debug.write("addImageToLayer -src- ",src);
+		      
+			if ($debug) Debug.write("alterModus: ",alterModus);
+			
+	  		this.currentlayer = new lz.imageForDrawView(obj,{
+	  			src:src,refObj:this,name:nameing,x:posx,y:posy,
+	  			remotewidth:width,remoteheight:height,
+	  			downloadurl:urlname,alterModus:alterModus,
+	  			baseurl:baseurl,fileName:fileName,moduleName:moduleName,
+	  			parentPath:parentPath,room:room,domain:domain,
+	  			uniqueObjectSyncName:uniqueObjectSyncName,
+	  			isLocalSync:isLocalSync});	
+			
+			//this.parent.parent.isloadingImage.sendEvent(this.currentlayer);
+			//this.parent._loading.setAttribute('visible',true);
+			
+			//Add Layer to global Layer  	
+		    return this.currentlayer;
+		]]>
+  	</method>
+  	
+  	<!--
+  	    @deprecated
+  	 -->
+  	<method name="addImageToLayerRecorded" args="obj,nameing,urlname,posx,posy,width,height,alterModus,baseurl,fileName,moduleName,parentPath,room,domain">
+        <![CDATA[
+			//only show if it is not part of wml-file-object
+			if (!this.isWmlLoaderImage) {
+				this.loadimageDataWinRef = new lz.loadWhiteboardWindow(canvas.main_content._content.inner,{refObj:this});
+				this.loadimageDataWinRef.setMessage(canvas.getLabelName(this.imageLoadMessageId));
+			}
+			var src = baseurl+'?fileName='+fileName+'&moduleName='+moduleName+'&parentPath='+parentPath+'&room_id='+room+'&sid='+canvas.sessionId;
+	
+			this.currentlayer = new lz.imageForDrawView(obj,{
+				src:src,refObj:this,name:nameing,x:posx,y:posy,
+				downloadurl:urlname,remotewidth:width,remoteheight:height,
+				alterModus:alterModus,baseurl:baseurl,fileName:fileName,
+				moduleName:moduleName,parentPath:parentPath,
+				room:room,domain:domain,recorderModus:true});
+
+			this.parent.parent.isloadingImage.sendEvent(this.currentlayer);
+			//this.parent._loading.setAttribute('visible',true);
+			//Add Layer to global Layer  	
+		    return this.currentlayer;
+		]]>
+  	</method>
+  	
+  	<method name="incomingScreenSharing" args="value">
+        <![CDATA[
+		//only do if last image has been loading successfully
+            if (!this.isScreenImageLoading){
+                this.isScreenImageLoading = true;
+                var downloadurl = canvas.getUrl() + 'ScreenViewHandler?'
+                    +'fileName='+encodeURIComponent(value.fileName)
+                    +'&room='+hib.currentroomid
+                    +'&domain='+hib.conferencedomain
+                    +'&sid='+canvas.sessionId;
+            
+                //Debug.write("incomingScreenSharing URL: ",downloadurl);
+                if (this.screenImageRefNumber==1){
+                    this.screenImageRef1 = new lz.imageForScreenViewer(this,{visible:false,src:downloadurl,refObj:this,name:'screen1',x:0,y:0,downloadurl:downloadurl});
+                    this.screenImageRefNumber = 2;
+                } else if (this.screenImageRefNumber==2){
+                    this.screenImageRef2 = new lz.imageForScreenViewer(this,{visible:false,src:downloadurl,refObj:this,name:'screen2',x:0,y:0,downloadurl:downloadurl});
+                    this.screenImageRefNumber = 1;
+                }
+                this.setNewScreenUserName.sendEvent('Screen of User: '+value.user.firstname+','+value.user.lastname);
+            } else {
+                //Debug.write("frame dropped!");
+                Debug.warn("frame dropped!");
+                (new lz.singletonErrorPopupHolder()).setError(canvas.getLabelName(240));
+            }
+		]]>
+  	</method>   
+    
+    <!--
+    TODO: Make new Base Class including the Screen sharing Functions
+     -->
+    <method name="toggleVisibleScreenSharing">
+        if (this.screenImageRefNumber==1){
+            if (this.screenImageRef1) this.screenImageRef1.destroy();
+            this.screenImageRef2.setAttribute('visible',true);
+        } else if (this.screenImageRefNumber==2){
+            this.screenImageRef1.setAttribute('visible',true);
+            if (this.screenImageRef2) this.screenImageRef2.destroy();
+        }
+        this.isScreenImageLoading = false;
+    </method> 
+	
+	<!--
+		actionObject => attributes neccessary for loading image
+		refObj = drawarea
+		isWmlLoader => (true)is loaded as part of wml-object
+		
+		-->
+		
+	<!-- method adds a new Image to the Layer,
+	but without making an Update-Event, 
+	Image added by remote host -->	
+  	<method name="addImageToLayerHistorySynced" args="actionObject,refObj">
+  		if ($debug) Debug.write("addImageToLayerHistory: ",actionObject,refObj);
+  		//start sync process using the remote uniqueObjectSyncName as identifier
+  		//This invokes a Method which is in the remoteWhiteboard.lzx
+  		this.startNewObjectSyncProcess.isStarting = false;
+  		this.startNewObjectSyncProcess.uniqueObjectSyncName = actionObject[8];
+  		this.startNewObjectSyncProcess.doCall();
+  		this.addImageToLayer(refObj,actionObject[actionObject.length-1],actionObject[1],
+		  		actionObject[actionObject.length-5],actionObject[actionObject.length-4],
+		  		actionObject[actionObject.length-3],actionObject[actionObject.length-2],
+		  		false,
+		  		actionObject[2],actionObject[3],actionObject[4],actionObject[5],
+		  		actionObject[6],actionObject[7],actionObject[8],false);
+		  		
+  		this.doSWFDocumentStatus(this.currentlayer,actionObject[actionObject.length-7]);
+  	</method>
+  			
+  	<!--- 
+		invoke by the initial Loading process in remoteWhiteboard.lzx, 
+		does not invoke any Update Handler
+		once this object is loaded, it will throw an Update event of kind
+		addImageToLayerHistoryToLocalLoaded		
+  	 -->
+  	<method name="addImageToLayerHistoryToLocal" args="actionObject,refObj">
+  		if ($debug) Debug.write("addImageToLayerHistoryToLocal: ",actionObject,refObj);
+  		this.addImageToLayer(refObj,actionObject[actionObject.length-1],actionObject[1],
+		  		actionObject[actionObject.length-5],actionObject[actionObject.length-4],
+		  		actionObject[actionObject.length-3],actionObject[actionObject.length-2],
+		  		false,
+		  		actionObject[2],actionObject[3],actionObject[4],actionObject[5],
+		  		actionObject[6],actionObject[7],actionObject[8],true);
+  	</method>
+  	
+  	<!-- 
+  		this handler is implemented also in remoteWhiteboard.lzx to sync a Local Object list
+  		but throws NO Update Event, cause its only needed Locally, the whole Sync Process
+  		has a different Sync-Object for Loading the complete Object List from the Sever.
+  		Each Object is loaded Locally, once all Objects are loaded the Complete-Event is broadcasted
+  		to the server, but every Item on the List is only controlled locally
+  	-->
+  	<handler name="addImageToLayerHistoryToLocalLoaded" args="objRef">
+  		if ($debug) Debug.write("addImageToLayerHistoryToLocal: ",objRef);
+		this.syncImageRefObj = objRef;
+		
+		this.registerNewImage(this.syncImageRefObj.src,
+			this.syncImageRefObj.x,this.syncImageRefObj.y,
+			this.syncImageRefObj.width,this.syncImageRefObj.height,
+			this.syncImageRefObj.baseurl,this.syncImageRefObj.fileName,
+			this.syncImageRefObj.moduleName,this.syncImageRefObj.parentPath,
+			this.syncImageRefObj.room,this.syncImageRefObj.domain,
+			false,this.syncImageRefObj.uniqueObjectSyncName,this.getSWFDocumentStatus(),
+                this.getZIndex());
+  	</handler>
+  	
+  	<!--- @keywords deprecated
+  	TODO: uniqueObjectSyncName missing
+  	 -->
+  	<method name="addImageToLayerHistoryRecorded" args="actionObject,refObj,isWmlLoader">
+		this.isWmlLoaderImage = isWmlLoader;
+  		this.addImageToLayerRecorded(refObj,
+  			actionObject[actionObject.length-1],actionObject[1],
+  			actionObject[actionObject.length-5],actionObject[actionObject.length-4],
+  			actionObject[actionObject.length-3],actionObject[actionObject.length-2],
+  			false,
+  			actionObject[2],actionObject[3],actionObject[4],actionObject[5],
+  			actionObject[6],actionObject[7]);
+  	</method>
+  	
+  	<method name="registerNewImage" args="urlname,posx,posy,width,height,baseurl,fileName,moduleName,parentPath,room,domain,doCallUpdate,uniqueObjectSyncName,swfObj,zIndex">
+		if ($debug) Debug.write("registerNewImage doCallUpdate: ",doCallUpdate);
+		if ($debug) Debug.write("registerNewImage swfObj: ",swfObj);
+		var actionObject = new Array();
+	    actionObject.push('image');
+	    actionObject.push(urlname);
+		actionObject.push(baseurl);
+		actionObject.push(fileName);
+		actionObject.push(moduleName);
+		actionObject.push(parentPath);
+		actionObject.push(room);
+		actionObject.push(domain);
+		actionObject.push(uniqueObjectSyncName);
+		actionObject.push(zIndex);//-8
+		actionObject.push(swfObj);//-7
+		actionObject.push(this.counter);//-6
+	    actionObject.push(posx);//-5
+	    actionObject.push(posy);//-4
+	    actionObject.push(width);//-3
+	    actionObject.push(height);//-2
+	    actionObject.push(this.currentlayer.name);//-1
+	    this.baseactionobjectList.push(actionObject);	
+	    this.checkStepLayers();
+	    if (doCallUpdate) this.onsharedMessage('draw',actionObject);	
+  	</method>
+	
+	<!-- 
+		adds the Image to the Layers and throws a onsharedMessage,
+		this can only happen _after_ loading the Image cause you do not know its 
+		width and height 
+	-->
+	<method name="storeTempValsAndLoadSyncList" args="objRef">
+		if ($debug) Debug.write("storeTempValsAndLoadSyncList: ",objRef);
+		this.syncImageRefObj = objRef;
+		
+		//This invokes a Method which is in the remoteWhiteboard.lzx
+		this.sendCompletedObjectSyncEvent.uniqueObjectSyncName = this.syncImageRefObj.uniqueObjectSyncName;
+		this.sendCompletedObjectSyncEvent.doCall();
+		
+		this.registerNewImage(this.syncImageRefObj.src,
+			this.syncImageRefObj.x,this.syncImageRefObj.y,
+			this.syncImageRefObj.width,this.syncImageRefObj.height,
+			this.syncImageRefObj.baseurl,this.syncImageRefObj.fileName,
+			this.syncImageRefObj.moduleName,this.syncImageRefObj.parentPath,
+			this.syncImageRefObj.room,this.syncImageRefObj.domain,
+			true,this.syncImageRefObj.uniqueObjectSyncName,this.getSWFDocumentStatus(),
+                this.getZIndex());		
+	
+	</method>
+	
+	<!--- @keywords deprecated
+  	TODO: check Recorder Modus
+  	 -->
+	<method name="storeTempValsAndLoadSyncListRecording" args="objRef">
+		if ($debug) Debug.write("########### storeTempValsAndLoadSyncListRecording: ",objRef);
+		this.syncImageRefObj = objRef;
+		this.doRegisterAfterLoadingOrRecording();
+		this.sendCompleteImageSync();
+	</method>
+	
+	<method name="sendLoadNotificationImage" args="objRef" >
+		if ($debug) Debug.write("sendLoadNotificationImage: ",objRef);
+		this.syncImageRefObj = objRef;
+		this.registerNewImage(this.syncImageRefObj.src,
+			this.syncImageRefObj.x,this.syncImageRefObj.y,
+			this.syncImageRefObj.width,this.syncImageRefObj.height,
+			this.syncImageRefObj.baseurl,this.syncImageRefObj.fileName,
+			this.syncImageRefObj.moduleName,this.syncImageRefObj.parentPath,
+			this.syncImageRefObj.room,this.syncImageRefObj.domain,
+			false,this.syncImageRefObj.uniqueObjectSyncName,this.getSWFDocumentStatus(),
+                this.getZIndex());	
+		//This invokes a Method which is in the remoteWhiteboard.lzx
+		this.sendCompletedObjectSyncEvent.uniqueObjectSyncName = this.syncImageRefObj.uniqueObjectSyncName;
+		this.sendCompletedObjectSyncEvent.doCall();
+	</method>
+    
+    <!--- @keywords deprecated
+    TODO: Check recorder Modus
+     -->
+    <method name="doRegisterAfterLoadingOrRecording">
+    	if ($debug) Debug.write("########### doRegisterAfterLoadingOrRecording");
+		this.imageSyncMessageText = canvas.getLabelName(this.imageSyncMessageId);
+		//now send notifications to connected clients
+		this.setAttribute('drawmodus','image');
+		this.registerNewImage(this.syncImageRefObj.src,
+		              this.syncImageRefObj.x,this.syncImageRefObj.y,
+		              this.syncImageRefObj.width,this.syncImageRefObj.height,
+		              this.syncImageRefObj.baseurl,this.syncImageRefObj.fileName,
+		              this.syncImageRefObj.moduleName,this.syncImageRefObj.parentPath,
+		              this.syncImageRefObj.room,this.syncImageRefObj.domain,
+		              this.getSWFDocumentStatus(),
+                      this.getZIndex());		
+    </method>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/baseDrawLetter.lzx b/WebContent/src/modules/conference/whiteboard/base/baseDrawLetter.lzx
new file mode 100644
index 0000000..13106d2
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/baseDrawLetter.lzx
@@ -0,0 +1,321 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="whiteBoardTextField" extends="text" >
+	<handler name="prepareForDelete" args="tRef">
+		//Nothing
+	</handler>
+	<attribute name="typeOfObject" value="text" type="string" />
+	<method name="setTextEncoded" args="tString">
+		<![CDATA[
+		
+		    while (tString.indexOf("<") > 0) {
+		    	tString = tString.replace("<","&#60;");
+		    }
+    		
+		    while (tString.indexOf(">") > 0) {
+                tString = tString.replace(">","&#62;");
+		    }
+    		
+    		this.setAttribute("text",tString);
+		]]>
+	</method>
+</class>
+
+<class name="baseDrawLetter" extends="baseDrawObject">
+
+	<attribute name="currentletterObj" value="null" />
+	
+	<attribute name="letterObjectIsActive" value="false" type="boolean" />
+	
+	<attribute name="edittextLetterObject" value="null" />
+	
+	<attribute name="edittextLetter" value="false" type="boolean" />
+	
+	<method name="letterObjectFree" args="obj">
+		this.setAttribute('letterObjectIsActive',false);
+		if (this.edittextLetter){
+			this.edittextLetter = false;
+			this.setModus('hand');
+		}
+	</method>
+	<method name="letterObjectClose" args="obj">
+		this.setAttribute('letterObjectIsActive',true);
+	</method>
+	
+    <!-- The Color of the letter Object  -->
+  	<attribute name="currentlayerletter" value="0x000000" setter="this.setNewLayerLetter(currentlayerletter)" />
+    
+    <!-- The Size of the Letter Object -->
+  	<attribute name="currentlayersize" value="12" type="number" setter="this.setNewLayerSize(currentlayersize)" />
+  	
+  	<!-- "plain", "bold" , "italic" or "bolditalic". -->
+  	<attribute name="currentlayerstyle" value="plain" type="string" setter="this.setNewLayerStyle(currentlayerstyle)" />
+    
+    <method name="setNewLayerLetter" args="cl">
+        this.currentlayerletter=cl;
+        this.sendNewStyle.sendEvent();
+    </method>
+    
+    <method name="setNewLayerSize" args="cs">
+        this.currentlayersize=cs;
+        this.sendNewStyle.sendEvent();
+    </method>
+    
+    <method name="setNewLayerStyle" args="cs">
+        this.currentlayerstyle=cs;
+        this.sendNewStyle.sendEvent();
+    </method>
+  	
+    <!-- Send Update Events to current Letter Object -->
+    <handler name="sendNewStyle">
+        if (this.letterObjectIsActive){
+            this.currentletterObj.newStyleEvent.sendEvent()
+        }
+    </handler>
+    
+  	<attribute name="italic" value="false" type="boolean" setter="this.setitalic(italic)" />
+  	<attribute name="bold" value="false" type="boolean" setter="this.setbold(bold)" />
+  	<method name="setitalic" args="b">
+  		this.italic = b;
+  		this.doalterStyle();
+  	</method>
+  	<method name="setbold" args="b">
+  		this.bold = b;
+  		this.doalterStyle();
+  	</method>
+  	<method name="doalterStyle">
+  		<![CDATA[
+  		if (this.isinited){
+	  		if (this.bold && this.italic){
+	  			this.setAttribute('currentlayerstyle','bolditalic');
+	  		} else if(!this.bold && this.italic){
+	  			this.setAttribute('currentlayerstyle','italic');
+	  		} else if(this.bold && !this.italic){
+	  			this.setAttribute('currentlayerstyle','bold');
+	  		} else if(!this.bold && !this.italic){
+	  			this.setAttribute('currentlayerstyle','plain');
+	  		}
+	  		//Debug.write("d: ",this.getAttribute('currentlayerstyle'));
+  		}
+  		]]>
+  	</method>
+	
+	<method name="editTextByValues" args="obj,txtName,txt,x,y,width,height">
+		<![CDATA[
+			if (!this.letterObjectIsActive){
+			    //Debug.write("editTextByValues",height); 
+			    this.edittextLetterObject = obj;
+				this.currentletterObj = new lz.baseDrawWords(this,{refObj:this,x:x,y:y,
+					initTextName:txtName,inittext:txt,width:width,height:height});
+				this.edittextLetter = true;
+			}	
+		]]>
+	</method>
+  	
+		<method name="drawTextField" args="textforfield,width,height,x,y" >
+
+			//Debug.write("drawTextField: ",textforfield,width,x,y);
+			var tempO = this.newTextField(this, 'letter' + this.getCounter(),
+					textforfield, width, height, x, y, this.currentlayersize,
+					this.currentlayerletter, this.currentlayerstyle);
+			this.layers.push(tempO);
+			this.drawTextFieldregister(textforfield, width, x, y,
+					this.currentlayersize, this.currentlayerletter,
+					this.currentlayerstyle, tempO.height, this
+							.getSWFDocumentStatus(), this.getZIndex());
+		</method>
+	
+	<!-- editModus -->
+	<method name="setTextFieldByName" args="txtName,textforfield,width,x,y,height" >
+		if ($debug) Debug.write("drawTextFieldByName ",txtName,textforfield,width,x,y);
+		//this.checkForChanges(txtName,textforfield,width,x,y,height);
+		this.edittextLetterObject.setAttribute('text',textforfield);
+		this.edittextLetterObject.setTextEncoded(textforfield);
+		this.edittextLetterObject.setAttribute('width',width);
+		this.edittextLetterObject.setAttribute('height',height);
+		this.edittextLetterObject.setAttribute('visible',true);
+		this.edittextLetterObject.setAttribute('fontsize',this.currentlayersize);
+		this.edittextLetterObject.setAttribute('fgcolor',this.currentlayerletter);
+		this.edittextLetterObject.setAttribute('fontstyle',this.currentlayerstyle);
+		this.updateObjectBounds();
+		this.updateByEditLetterObject();
+		//this.setModus('hand');
+	</method>	
+	
+	<method name="startLetter" args="oid_name">
+		if (oid_name == null) {
+			oid_name = 'letterTemp'+this.getCounter();
+		}		
+    	this.currentlayer = new lz.drawViewNew(this,{name:oid_name,width:this.width+2,height:this.height+2});
+	</method>
+	
+	<method name="drawletterBoundingBox" args="x1,y1,x2,y2">
+   		<![CDATA[
+    		
+    		currentlayer.lineWidth = 1;
+    		currentlayer.beginPath();
+    		currentlayer.moveTo(x1,y1);
+    		currentlayer.lineTo(x1,y2);
+    		currentlayer.lineTo(x2,y2);
+    		currentlayer.lineTo(x2,y1);
+    		currentlayer.lineTo (x1,y1);
+    		currentlayer.closePath();
+    		
+    		currentlayer.strokeStyle = 0x000000;
+    		currentlayer.stroke();
+    		
+    	]]>   
+  	</method>    
+  	
+	<method name="endLetter">
+		<![CDATA[
+			if ($debug) Debug.write("endLetter: ", this.currentlayer);
+			this.currentlayer.destroy();
+			var xProp = 0;
+			var yProp = 0;
+			if (this.startx <= this.endx) {
+				var stx = this.startx;
+			} else {
+				var stx = this.endx;
+			}
+			if (this.starty <= this.endy) {
+				var sty = this.starty;
+			} else {
+				var sty = this.endy;
+			}
+			var width = Math.abs(this.startx - this.endx);
+			var height = Math.abs(this.starty - this.endy);
+			if (width < 20 && height < 20) {
+				width = 160;
+				height = 30;
+			}
+
+			this.currentletterObj = new lz.baseDrawWords(this, {
+						refObj : this,
+						x : xProp + stx,
+						y : yProp + sty,
+						width : width,
+						height : height
+					});
+
+			if ($debug) Debug.write("currentletterObj: ", this.currentletterObj.x, this.currentletterObj.y);
+		]]>
+	</method>
+	
+	
+	<method name="updateByEditLetterObject" >
+		<![CDATA[
+		if ($debug) Debug.write("UpdateByObject : ",this.edittextLetterObject,this.edittextLetterObject.name);
+		var objName = this.edittextLetterObject.name;
+
+		for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+			if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==objName) {
+				if ($debug) Debug.write("Found Object: ",this.baseactionobjectList[eg]);
+			    this.baseactionobjectList[eg][1] = this.edittextLetterObject.text;
+			    this.baseactionobjectList[eg][2] = this.edittextLetterObject.fgcolor;
+			    this.baseactionobjectList[eg][3] = this.edittextLetterObject.fontsize;
+			    this.baseactionobjectList[eg][4] = this.edittextLetterObject.fontstyle;			
+				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5] = this.edittextLetterObject.x
+				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4] = this.edittextLetterObject.y;
+				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-3] = this.edittextLetterObject.width;
+				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-2] = this.edittextLetterObject.height;
+				var newA = this.baseactionobjectList[eg];
+				if (newA[0]=='paint') newA[1] = new Array();				
+				this.onsharedMessage('editText',newA);	
+			    break;
+			}
+		}	
+			
+		]]>
+	</method>	
+	
+	<method name="editTextByHistory" args="actionObject,obj">
+		var editObj = this.getObjectByName(actionObject[actionObject.length-1]);
+		//Debug.write("editTextByHistory: ",editObj,actionObject,actionObject.length);
+		editObj.setAttribute('text',actionObject[1]);
+		editObj.setTextEncoded(actionObject[1]);
+		editObj.setAttribute('width',actionObject[actionObject.length-3]);
+		editObj.setAttribute('height',actionObject[actionObject.length-2]);
+		editObj.setAttribute('fontsize',actionObject[3]);
+		editObj.setAttribute('fgcolor',actionObject[2]);
+		editObj.setAttribute('fontstyle',actionObject[4]);
+	</method>
+	
+	<method name="checkForChanges" args="txtName,textforfield,width,x,y,height">
+		<![CDATA[
+			//Debug.write("checkForChanges: 1 ",txtName,textforfield,width,x,y,height);
+			//Debug.write("checkForChanges: 2 ",this.edittextLetterObject.name,this.edittextLetterObject.text,this.edittextLetterObject.width,this.edittextLetterObject.x,this.edittextLetterObject.y,this.edittextLetterObject.height);
+			//there is always a change
+			
+		]]>
+	</method>	
+	
+	<method name="drawactionHistory" args="actionObject,obj">
+		this.newTextField(obj,actionObject[actionObject.length-1],actionObject[1],
+		              actionObject[actionObject.length-3],actionObject[actionObject.length-2],
+		              actionObject[actionObject.length-5],actionObject[actionObject.length-4],
+		              actionObject[3],actionObject[2],actionObject[4]);
+		              
+		this.doSWFDocumentStatus(this.currentlayer,actionObject[actionObject.length-7]);
+	</method>
+	
+		<method name="newTextField" args="obj,naming,textforfield,width,height,x,y,fontsize,fgcolor,fontstyle">
+			this.currentlayer = new lz.whiteBoardTextField(obj, {
+						name : naming,
+						x : x,
+						y : y,
+						height : height,
+						multiline : true,
+						width : width,
+						text : textforfield,
+						fontsize : fontsize,
+						fgcolor : fgcolor,
+						fontstyle : fontstyle
+					});
+			this.currentlayer.setTextEncoded(textforfield);
+			//Add Layer to global Layer  	
+			return this.currentlayer;
+		</method>
+	
+	<method name="drawTextFieldregister" args="textforfield,width,x,y,fontsize,fgcolor,fontstyle,height,swfObj,zIndex">
+		var actionObject = new Array();
+	    actionObject[0] = "letter";
+	    actionObject[1] = textforfield;
+	    actionObject[2] = fgcolor;
+	    actionObject[3] = fontsize;
+	    actionObject[4] = fontstyle;
+	    actionObject[5] = zIndex;//-8
+	    actionObject[6] = swfObj;//-7
+		actionObject[7] = this.counter;//-6
+	    actionObject[8] = x;//-5
+	    actionObject[9] = y;//-4
+	    actionObject[10] = width;//-3
+	    actionObject[11] = height;//-2
+	    actionObject[12] = this.currentlayer.name;//-1	    	    
+	    this.baseactionobjectList.push(actionObject);	
+	    this.checkStepLayers();
+	    this.onsharedMessage('draw',actionObject);	
+	</method>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/baseDrawObject.lzx b/WebContent/src/modules/conference/whiteboard/base/baseDrawObject.lzx
new file mode 100644
index 0000000..4e2a238
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/baseDrawObject.lzx
@@ -0,0 +1,862 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDrawObject" extends="baseDrawPointer">
+    
+    <!-- it uses some of the attribute's defined in baseDrawImage -->
+    <attribute name="newSlideNumber" value="1" type="number" />
+    
+    <attribute name="fullFit" value="true" type="boolean" />
+    
+    <attribute name="modernToolbar" value="false" type="boolean" />
+
+    <!-- 
+    	Invoked by the Library directly
+    	Loads a SWFPresenation to the whiteBoard
+     -->
+    <method name="loadSWFPresentationSynced" args="url,fileName,moduleName,parentPath,room,domain,slideNumber,standardFileName">
+  		var now = new Date();
+  		//This invokes a Method which is in the remoteWhiteboard.lzx
+  		this.startNewObjectSyncProcess.isStarting = true;
+  		this.startNewObjectSyncProcess.uniqueObjectSyncName = fileName + now.getTime();
+  		this.startNewObjectSyncProcess.doCall();
+        //if ($debug) Debug.write("loadSWFPresentationSynced",url,fileName,moduleName,parentPath,room,domain,slideNumber,standardFileName);
+        this.addPresentationToLayer(this,url,'swfpresentationobject'+this.getCounter(),
+        	0,0,0,0,
+        	true,
+        	url,fileName,moduleName,parentPath,room,domain,slideNumber,
+        	100,0,0,0,0,
+        	this.startNewObjectSyncProcess.uniqueObjectSyncName,
+            standardFileName,this.fullFit);
+            
+        
+    </method>
+    
+    <method name="setCurrentScaleByFullFit" args="scaleFactor">
+    	<![CDATA[
+    	
+    		var tScale = Math.round(scaleFactor*100);
+    		
+    		this.getDisplayObject()._xscale = tScale;
+    		this.getDisplayObject()._yscale = tScale;
+    		
+    		this.setAttribute("x",0);
+    		this.setAttribute("y",0);
+    		
+    		//Already send by x,y change
+    		//this.onupdateScale.sendEvent(null);
+    		if ($debug) Debug.write("setCurrentScaleByFullFit -1- ",tScale);
+    		
+    		parent.parent.zoombox.setCurrentScaleByFullFit(tScale);
+    	
+    	]]>
+    </method>
+    
+    <method name="doUpdateFullFit" args="fullFit,zoom">
+    	<![CDATA[
+    	
+            if (canvas.ismoderator) {
+	    		if ($debug) Debug.write("doUpdateFullFit ",fullFit,zoom);
+	    	
+	    		var actionObject = new Array();
+	    		actionObject.push("whiteboardObj");
+	    		actionObject.push(fullFit);
+	    		
+	    		this.doFullFit(fullFit);
+	    		
+	    		actionObject.push(this.getDisplayObject()._xscale);
+	    		
+	    		if ($debug) Debug.write("doUpdateFullFit ",fullFit,this.getDisplayObject()._xscale);
+	    		this.onsharedMessage('whiteboardObj',actionObject);
+    		}	
+    	
+    	]]>
+    </method>
+    
+    <method name="doUpdateZoom" args="fullFit,zoom">
+    	<![CDATA[
+    	
+    		if ($debug) Debug.write("doUpdateZoom ",this.fullFit,zoom);
+    		
+    		this.getDisplayObject()._xscale = zoom;
+    		this.getDisplayObject()._yscale = zoom;
+    		
+    		if ($debug) Debug.write("doUpdateZoom is moderator ", canvas.ismoderator);
+            if (canvas.ismoderator) {
+	    		var actionObject = new Array();
+	    		actionObject.push("whiteboardObj");
+	    		actionObject.push(fullFit);
+	    		actionObject.push(zoom);
+    		
+	    		this.onupdateScale.sendEvent(null);
+	    		this.onsharedMessage('whiteboardObj',actionObject);	
+            }
+    	
+    	]]>
+    </method>
+    
+    <method name="doUpdateFullFitAndZoomRemote" args="actionObject">
+    	<![CDATA[
+    		parent.parent.zoombox.setWhiteboardValues(actionObject[1],actionObject[2]);
+    		if ($debug) Debug.write("doUpdateFullFitAndZoomRemote ",actionObject[1],actionObject[2]);
+
+    		this.doFullFit(actionObject[1]);
+    		
+    		if (!actionObject[1]) {
+	    		this.getDisplayObject()._xscale = actionObject[2];
+	    		this.getDisplayObject()._yscale = actionObject[2];
+	    		this.onupdateScale.sendEvent(null);
+    		}
+    	
+    	]]>
+    </method>
+    
+    <method name="doFullFit" args="v">
+        <![CDATA[
+        	if ($debug) Debug.write("Do Full Fit ? doFullFit: ", v);
+        	if ($debug) Debug.write(this.ObjectByName);
+        
+        	this.fullFit = v;
+        	
+            if (this.ObjectByName && this.ObjectByName.typeOfObject=="swf") {    
+                if (v) {
+                    if ($debug) Debug.write("Do Full Fit !");
+                    this.ObjectByName._swfView.initialLoadFullFit();
+                }
+            }
+            
+        ]]>
+    </method>
+    
+    <method name="checkSWFPresentation" args="url,fileName,moduleName,parentPath,room,domain,slideNumber">
+        //this.addPresentationToLayer(this,url,'swfpresentationobject'+this.getCounter(),0,0,0,0,true,url,fileName,moduleName,parentPath,room,domain,slideNumber);
+        <![CDATA[
+            for (var i=0;i<this.baseactionobjectList.length;i++){
+                if (fileName==this.baseactionobjectList[i][3]){
+                    var whiteBoardName = this.baseactionobjectList[i][this.baseactionobjectList[i].length-1];
+                    //Debug.write("Found File: ",whiteBoardName,this.baseactionobjectList[i]);
+                    //this.baseactionobjectList[i].bringToFront();
+                    this.doShowObjectBounds(whiteBoardName);
+                    this.newSlideNumber = slideNumber;
+                    this.doDocumentAction('setSlideNumber');
+                    return true;
+                }
+            } 
+            return false;
+        ]]>
+    </method>
+    
+	<!--
+		alterModus => this is added by the mod not remotely
+		
+		adds the SWF-Object to the Layer
+	 -->
+  	<method name="addPresentationToLayer" args="obj,urlName,nameing,posx,posy,width,height,alterModus,baseurl,fileName,moduleName,parentPath,room,domain,slideNumber,currentzoom,innerwidth,innerheight,innerx,innery,uniqueObjectSyncName,standardFileName,fullFit">
+        <![CDATA[
+            if ($debug) Debug.write("addPresentationToLayer",standardFileName);
+            //only show if it is not part of wml-file-object
+            //if (!this.isWmlLoaderImage) {
+            //    this.loadimageDataWinRef = new lz.loadWhiteboardWindow(canvas.main_content._content.inner,{refObj:this});
+            //    this.loadimageDataWinRef.setMessage(canvas.getLabelName(this.imageLoadMessageId));
+            //}
+        	//if ($debug) Debug.write("addPresentationToLayer uniqueObjectSyncName:",uniqueObjectSyncName,innerwidth,innerheight);
+            
+            var downloadurl = canvas.getUrl() + 'DownloadHandler?' +
+                    'fileName=' + encodeURIComponent(fileName) +
+                    '&moduleName=' + moduleName + 
+                    '&parentPath=' + encodeURIComponent(parentPath + '/') +
+                    '&room_id='+room + 
+                    '&sid='+canvas.sessionId;
+            
+            //var width= this.width;
+            //var height = this.height-200;
+            ////Debug.write("width:height: ",width,height);
+            
+            this.currentlayer = new lz.swfResourceView(obj,{refObj:this,name:nameing,
+            	x:posx,y:posy,alterModus:alterModus,
+            	baseurl:baseurl,fileName:fileName,moduleName:moduleName,parentPath:parentPath,
+            	room:room,domain:domain,slideNumber:slideNumber,
+            	currentzoom:currentzoom,fullFit:fullFit,
+                standardFileName:standardFileName,
+            	innerwidth:innerwidth,innerheight:innerheight,
+            	innerx:innerx,innery:innery,
+            	uniqueObjectSyncName:uniqueObjectSyncName});
+
+            //this.parent.parent.isloadingImage.sendEvent(this.currentlayer);
+            ////Debug.write("downloadurl. ",downloadurl);
+            this.currentlayer._swfView.setSource(downloadurl);
+            
+            this.addItemToDocumentToolBar();
+            this.doUpdateDocumentToolBar();
+		]]>
+  	</method>
+  	
+  	<!--
+  		TODO: check Recording
+  	
+  	<method name="addPresentationToLayerRecording" args="obj,urlName,nameing,posx,posy,width,height,alterModus,baseurl,fileName,moduleName,parentPath,room,domain,slideNumber,currentzoom,innerwidth,innerheight,innerx,innery">
+        <![CDATA[
+            //Debug.write("addPresentationToLayer",obj,nameing,posx,posy,width,height,alterModus,baseurl,fileName,moduleName,parentPath,room,domain,slideNumber);
+            //only show if it is not part of wml-file-object
+            if (!this.isWmlLoaderImage) {
+                this.loadimageDataWinRef = new lz.loadWhiteboardWindow(canvas.main_content._content.inner,{refObj:this});
+                this.loadimageDataWinRef.setMessage(canvas.getLabelName(this.imageLoadMessageId));
+            }
+            var downloadurl = canvas.getUrl()+'DownloadHandler?' +
+                    'fileName=' + encodeURIComponent(fileName) +
+                    '&moduleName=' + moduleName + 
+                    '&parentPath=' + encodeURIComponent(parentPath) +
+                    '&room_id='+room + 
+                    '&sid='+canvas.sessionId;
+            var width= this.width;
+            var height = this.height;
+            
+            this.currentlayer = new lz.swfResourceView(obj,{refObj:this,name:nameing,
+            	x:posx,y:posy,
+            	alterModus:alterModus,
+            	baseurl:baseurl,fileName:fileName,moduleName:moduleName,
+            	parentPath:parentPath,room:room,domain:domain,
+            	slideNumber:slideNumber,width:width,height:height,
+            	currentzoom:currentzoom,innerwidth:innerwidth,innerheight:innerheight,
+            	innerx:innerx,innery:innery,recorderModus:true});
+
+            this.parent.parent.isloadingImage.sendEvent(this.currentlayer);
+            this.currentlayer._swfView.setSource(downloadurl);
+            
+            //Add Layer to global Layer  	
+            return this.currentlayer;
+		]]>
+  	</method>  	
+    -->
+    
+    <method name="addSWFToLayerHistory" args="actionObject,refObj,isWmlLoader">
+        this.isWmlLoaderImage = isWmlLoader;
+        this.baseactionobjectList.push(actionObject);   
+        this.addPresentationToLayer(refObj,actionObject[1],actionObject[actionObject.length-1],
+            actionObject[actionObject.length-5],actionObject[actionObject.length-4],actionObject[actionObject.length-3],
+            actionObject[actionObject.length-2],false,actionObject[2],actionObject[3],actionObject[4],actionObject[5],
+            actionObject[6],actionObject[7],
+            actionObject[8],actionObject[16],actionObject[11],actionObject[12],actionObject[9],actionObject[10],
+            actionObject[17],actionObject[18],actionObject[19]);
+    </method>
+    
+    <!-- 
+    	Invoked by the remote Host, see sendWatchObject in baseDraw.lzx
+     -->
+    <method name="addSWFToLayerHistorySynced" args="actionObject,refObj">
+        this.baseactionobjectList.push(actionObject);	
+  		this.startNewObjectSyncProcess.isStarting = false;
+  		this.startNewObjectSyncProcess.uniqueObjectSyncName = actionObject[17];
+  		this.startNewObjectSyncProcess.doCall();        
+   		this.addPresentationToLayer(refObj,actionObject[1],actionObject[actionObject.length-1],
+  			actionObject[actionObject.length-5],actionObject[actionObject.length-4],
+  			actionObject[actionObject.length-3],actionObject[actionObject.length-2],
+  			false,
+  			actionObject[2],actionObject[3],actionObject[4],actionObject[5],actionObject[6],
+  			actionObject[7],actionObject[8],actionObject[16],actionObject[11],actionObject[12],
+  			actionObject[9],actionObject[10],actionObject[17],actionObject[18],actionObject[19]);
+  	</method>
+  	
+	<!--- 
+		invoke by the initial Loading process in remoteWhiteboard.lzx, 
+		does not invoke any Update Handler
+		once this object is loaded, it will throw an Update event of kind
+		addSWFToLayerHistoryToLocalLoaded
+  	 -->
+  	<method name="addSWFToLayerHistoryToLocal" args="actionObject,refObj">
+        this.baseactionobjectList.push(actionObject);	
+  		this.addPresentationToLayer(refObj,actionObject[1],actionObject[actionObject.length-1],
+  			actionObject[actionObject.length-5],actionObject[actionObject.length-4],
+  			actionObject[actionObject.length-3],actionObject[actionObject.length-2],
+  			false,
+  			actionObject[2],actionObject[3],actionObject[4],actionObject[5],actionObject[6],
+  			actionObject[7],actionObject[8],actionObject[16],actionObject[11],actionObject[12],
+  			actionObject[9],actionObject[10],actionObject[17],actionObject[18],actionObject[19]);
+  	</method>
+  	
+  	<!--
+  		TODO: Check Recording Process
+  	 
+  	<method name="addSWFToLayerHistoryRecording" args="actionObject,refObj,isWmlLoader">
+		this.isWmlLoaderImage = isWmlLoader;
+        this.baseactionobjectList.push(actionObject);	
+  		this.addPresentationToLayerRecording(refObj,actionObject[1],actionObject[actionObject.length-1],actionObject[actionObject.length-5],actionObject[actionObject.length-4],actionObject[actionObject.length-3],actionObject[actionObject.length-2],false,actionObject[2],actionObject[3],actionObject[4],actionObject[5],actionObject[6],actionObject[7],actionObject[8],actionObject[16],actionObject[11],actionObject[12],actionObject[9],actionObject[10]);
+  	</method>
+    -->
+  	
+  	<method name="registerNewSWF" args="urlname,posx,posy,width,height,baseurl,fileName,moduleName,parentPath,room,domain,slideNumber,innerx,innery,innerwidth,innerheight,zoomlevel,currentzoom,initwidth,initheight,uniquObjectSyncName,doUpdateMessage,standardFileName,fullFit,zIndex">
+		var actionObject = new Array();
+	    actionObject.push('swf');//0
+	    actionObject.push(urlname);//1
+		actionObject.push(baseurl);//2
+		actionObject.push(fileName);//3
+		actionObject.push(moduleName);//4
+		actionObject.push(parentPath);//5
+		actionObject.push(room);//6
+		actionObject.push(domain);//7
+        actionObject.push(slideNumber);//8
+        actionObject.push(innerx);//9
+        actionObject.push(innery);//10
+        actionObject.push(innerwidth);//11
+        actionObject.push(innerheight);//12
+        actionObject.push(zoomlevel);//13
+        actionObject.push(initwidth);//14
+        actionObject.push(initheight);//15
+        actionObject.push(currentzoom);//16
+        actionObject.push(uniquObjectSyncName);//17
+        actionObject.push(standardFileName);//18
+        actionObject.push(fullFit);//19
+        actionObject.push(zIndex);//-8
+        actionObject.push(null);//-7
+		actionObject.push(this.counter);//-6
+	    actionObject.push(posx);//-5
+	    actionObject.push(posy);//-4
+	    actionObject.push(width);//-3
+	    actionObject.push(height);//-2
+	    actionObject.push(this.currentlayer.name);//-1
+	    this.baseactionobjectList.push(actionObject);
+	    this.checkStepLayers();
+	    if (doUpdateMessage) this.onsharedMessage('draw',actionObject);	
+  	</method>    
+    
+	<!--
+		Invoked by the swfResource, if the alterModus = true,
+		throws an Update-Event to all connected Clients
+	 -->
+	<method name="storeTempValsAndLoadSyncListSWF" args="objRef">
+		this.syncImageRefObj = objRef;
+		this.doRegisterNewSwf(true);
+		this.sendCompletedObjectSyncEvent.uniqueObjectSyncName = this.syncImageRefObj.uniqueObjectSyncName;
+		this.sendCompletedObjectSyncEvent.doCall();
+	</method>    
+	
+	<!--
+		Invoked by the swfResource, if the alterModus = false,
+		throws NO Update-Event to all connected Clients
+	 -->
+	<method name="sendLoadNotificationSWF" args="objRef" >
+		this.syncImageRefObj = objRef;
+		this.doRegisterNewSwf(false);
+		this.sendCompletedObjectSyncEvent.uniqueObjectSyncName = this.syncImageRefObj.uniqueObjectSyncName;
+		this.sendCompletedObjectSyncEvent.doCall();
+	</method>
+	
+	<!-- 
+		TODO: Check Recording
+	-->
+	<method name="storeTempValsAndLoadSyncListSWFRecording" args="objRef">
+		this.syncImageRefObj = objRef;
+		//this.doRegisterNewSwf();
+		//this.sendCompleteSWFSync();
+		//This invokes a Method which is in the remoteWhiteboard.lzx
+		this.sendCompletedObjectSyncEvent.uniqueObjectSyncName = this.syncImageRefObj.uniqueObjectSyncName;
+		this.sendCompletedObjectSyncEvent.doCall();
+	</method>    
+    
+	
+
+	<!-- sending messages/notifications of sync process
+		syncing is now on server side implemented, swagner 12.06.2008
+	<netRemoteCallHib name="sendMessageWithClientSWF" funcname="sendMessageWithClient" remotecontext="$once{ canvas.thishib }" >   
+		<netparam name="vars"><method name="getValue">return parent.parent.imageLoadingCompleteMessage;</method></netparam>
+		<handler name="ondata" args="value">
+			<![CDATA[
+				//The onResult-Handler will be called be the rtmpconnection
+				////Debug.write("getValue : ",value);
+			]]>
+		</handler>   
+	</netRemoteCallHib>     
+     -->
+     
+	<!-- get list of clients before loading image cause
+		we have to show the sync process
+		
+		syncing is now on server side implemented, swagner 12.06.2008
+	
+    <netRemoteCallHib name="getSWFClientListScope" funcname="getClientListScope" remotecontext="$once{ canvas.thishib }" >          
+        <handler name="ondata" args="value">
+        	<![CDATA[
+				//The onResult-Handler will be called by the rtmpconnection
+				////Debug.write("getSWFClientListScope Instance: ",value);
+				parent._loadingUsersImageList = new Array();
+				for (var eg in value){
+					if (canvas.streamid != value[eg].streamid){
+						//Debug.write("parent._loadingUsersImageList value eg ",eg,value[eg]);
+						parent._loadingUsersImageList.push(value[eg]);
+					}
+				}
+				this.parent.doRegisterNewSwf();	
+				this.parent.startSWFsyncCheck();			
+            ]]>
+        </handler>   
+    </netRemoteCallHib>
+    	-->
+    
+    <method name="doRegisterNewSwf" args="doUpdateMessage">
+		//now send notifications to connected clients
+		this.setAttribute('drawmodus','hand');
+        
+		this.registerNewSWF(this.syncImageRefObj.baseurl,this.syncImageRefObj.x,
+                this.syncImageRefObj.y,this.syncImageRefObj._swfView.width,
+                this.syncImageRefObj._swfView.height,this.syncImageRefObj.baseurl,
+                this.syncImageRefObj.fileName,this.syncImageRefObj.moduleName,
+                this.syncImageRefObj.parentPath,this.syncImageRefObj.room,
+                this.syncImageRefObj.domain,this.syncImageRefObj.slideNumber,
+                this.syncImageRefObj._swfView.x,this.syncImageRefObj._swfView.y,
+                this.syncImageRefObj._swfView.width,this.syncImageRefObj._swfView.height,
+                this.syncImageRefObj.zoomlevel,this.syncImageRefObj.currentzoomFactor,
+                this.syncImageRefObj.initwidth,this.syncImageRefObj.initheight,
+                this.syncImageRefObj.uniqueObjectSyncName,doUpdateMessage,
+                this.syncImageRefObj.standardFileName,
+                this.syncImageRefObj.fullFit,
+                this.getZIndex());
+        
+		//set modus to hand so users can directly select that image
+		this.setModus('swf');
+    </method>
+	
+	<!-- after loading the objects check if all connected clients of that conference
+		have loaded the file completely, check it every 1 seconds
+		syncing is now on server side implemented, swagner 12.06.2008
+	<method name="startSWFsyncCheck">
+		<![CDATA[
+			if (this._loadingUsersImageList.length==0){
+				this.sendSyncNotificationSWF();
+			} else {
+				var txt = this.imageSyncMessageText+' '+this._loadingUsersImageList.length;
+				this.loadimageDataWinRef.setMessage(txt);
+				this.loadImageObjectTimer = new LzDelegate( this, "startImgaesyncCheck" );
+				lz.Timer.addTimer( this.loadImageObjectTimer, this.syncImageCheckTime );
+			}
+		]]>
+	</method>	
+	 -->
+
+	<method name="sendSyncNotificationSWF">
+		this.imageLoadingCompleteMessage = new Array();
+		this.imageLoadingCompleteMessage[0] = "whiteboard";
+		this.imageLoadingCompleteMessage[1] = "swfsynccomplete";
+		this.sendMessageWithClientSWF.doCall();
+	</method>	
+
+	<!-- invoked by remote client once he has completely loaded the wml-file 
+		remote client is waiting/still shows loading window untill all clients have 
+		completely loaded the object/moderator sends "synccomplete" message
+		
+		syncing is now on server side implemented, swagner 12.06.2008
+		
+	<method name="sendCompleteSWFLoadedRClient" args="client">
+		<![CDATA[
+			//detect self messageing
+			if (client.streamid!=canvas.streamid){
+				//remove client from sync list
+				for (var i=0;i<this._loadingUsersImageList.length;i++){
+					if (this._loadingUsersImageList[i].streamid==client.streamid){
+						////Debug.write("deleteing client from list: ",this._loadingUsersImageList[i].streamid);
+						this._loadingUsersImageList.splice(i,1);
+					}
+				}
+			}
+		]]>
+	</method>
+	
+	 -->
+	
+	<!-- invoked remotely by Moderator
+		all clients have succeed in loading the image
+		loading win can be closed
+		Alert: This notification will be send from Moderator and received by ALL clients INCLUDING
+		the moderator, so the moderator needs no extra command *close* for loading bar cause he
+		gets its own *sync* complete nofification
+		
+		syncing is now on server side implemented, swagner 12.06.2008
+			
+	<method name="sendCompleteSWFSync" args="client">
+		////Debug.write("sendCompleteSWFSync ",client);
+		this.loadimageDataWinRef.close();
+	</method>  
+     -->
+    
+    <!-- Document actions
+        this.ObjectByName is set by the method doShowObjectBounds of baseDraw and holds a reference to
+        the currently selected object on the whiteboard
+     -->
+    <method name="doDocumentAction" args="action">
+        <![CDATA[
+            if ($debug) Debug.info("doDocumentAction :1: sendCurrentSWFObject ",action);
+            if (this.ObjectByName.typeOfObject=="swf") {
+                if (action=="doc_first"){
+                    this.ObjectByName._swfView.setAttribute('frame',1);
+                } else if (action=="doc_pre"){
+                    if (this.ObjectByName._swfView.frame>1){
+                        this.ObjectByName._swfView.setAttribute('frame',(this.ObjectByName._swfView.frame-1));
+                    }
+                } else if (action=="doc_next"){
+                    if (this.ObjectByName._swfView.frame<this.ObjectByName._swfView.totalframes){
+                        this.ObjectByName._swfView.setAttribute('frame',(this.ObjectByName._swfView.frame+1));
+                    }
+                } else if (action=="doc_last"){
+                    this.ObjectByName._swfView.setAttribute('frame',(this.ObjectByName._swfView.totalframes));
+                } else if (action=="doc_zoom_minus"){
+                	
+                	if ($debug) Debug.write("doc_zoom_minus ");
+                	return;
+                	
+                    this.ObjectByName.currentzoomFactor-=this.ObjectByName.zoomlevel;       
+                    var newwidth = (this.ObjectByName.initwidth/100)*this.ObjectByName.currentzoomFactor;
+                    var newheight = (this.ObjectByName.initheight/100)*this.ObjectByName.currentzoomFactor;
+                    this.ObjectByName._swfView.setAttribute('width',newwidth);
+                    this.ObjectByName._swfView.setAttribute('height',newheight);
+                    this.boundingref.doSetInnerObjectsBounds(newwidth,newheight);
+                } else if (action=="doc_zoom_plus"){
+                	
+                	if ($debug) Debug.write("doc_zoom_plus ");
+                	return;
+                	
+                    this.ObjectByName.currentzoomFactor+=this.ObjectByName.zoomlevel;       
+                    //Debug.write("doc_zoom_plus 1",this.ObjectByName.currentzoomFactor,this.ObjectByName.zoomlevel);
+                    var newwidth = (this.ObjectByName.initwidth/100)*this.ObjectByName.currentzoomFactor;
+                    var newheight = (this.ObjectByName.initheight/100)*this.ObjectByName.currentzoomFactor;
+                    //Debug.write(this.ObjectByName);
+                    //Debug.write("doc_zoom_plus 2",newwidth,newwidth);
+                    this.ObjectByName._swfView.setAttribute('width',newwidth);
+                    this.ObjectByName._swfView.setAttribute('height',newheight);
+                    this.boundingref.doSetInnerObjectsBounds(newwidth,newheight);
+                } else if (action=="setSlideNumber"){
+                    if (this.newSlideNumber>0 && this.newSlideNumber<=this.ObjectByName._swfView.totalframes){
+                    	if ($debug) Debug.warn("Slide New Number ",this.newSlideNumber);
+                        this.ObjectByName._swfView.setAttribute('frame',this.newSlideNumber);
+                    } else {
+                        if ($debug) Debug.warn("Slide Number out of range of that document TotalFrames: ",this.ObjectByName._swfView.totalframes);
+                    }
+                }
+                this.ObjectByName.slideNumber =  this.ObjectByName._swfView.frame;
+                this.doUpdateDocumentToolBar();
+                
+                if ($debug) Debug.info("doDocumentAction :2: sendCurrentSWFObject");
+                
+                this.sendCurrentSWFObject(this.ObjectByName);
+                
+            }
+        ]]>
+    </method>
+    
+    <method name="addItemToDocumentToolBar">
+    	var docToolbar = this.getDocumentToolBar();
+    	docToolbar.addCurrentObject(this.currentlayer);
+    </method>
+    
+    <method name="setCurrentDocumentByToolBar" args="itemRefName">
+        if (this.boundingIsActive){
+        	if (this.boundingref.objRef.name != itemRefName) {
+        		this.boundingref._innerDrag.onmouseup.sendEvent();
+        	}
+        }
+        this.setCurrentDocument();
+    </method>
+    
+    <method name="setCurrentDocument" args="itemRefName">
+    	var t = this.getObjectByName(itemRefName);
+    	if (t==null) {
+    		return;
+    	}
+        this.ObjectByName = t;
+        this.doUpdateDocumentToolBar();
+        
+        if ($debug) Debug.write("setCurrentDocument ",itemRefName,this.ObjectByName);
+        
+        //not needed anymore
+        //this.sendItemToFront(itemRefName);
+        //this.bringItemToFrontByName(itemRefName);
+    </method>
+    
+    <method name="sendItemToFront" args="itemRefName">
+        var actionObject = new Array();
+        actionObject[0] = 'item';
+        actionObject[1] = itemRefName;
+        this.onsharedMessage('sendItemToFront',actionObject);
+    </method>    
+    
+    <method name="bringItemToFrontByName" args="itemRefName">
+        this.ObjectByName = this.getObjectByName(itemRefName);
+        this.ObjectByName.bringToFront();
+    </method>
+    
+    <method name="doUpdateDocumentToolBarByParticipant" args="itemObjName">
+        this.ObjectByName = this.getObjectByName(itemObjName);
+        this.doUpdateDocumentToolBar();
+    </method>
+    
+    <method name="doUpdateDocumentToolBar">
+    	<![CDATA[
+        	if (this.modernToolbar) {
+                //@deprecated
+                //this code is not valdi for the latest dev anymore, only inside for 
+                //backward compatibility
+    	        //this.parent.parent._documentmenu._currentSlideNo.setAttribute('text',this.ObjectByName._swfView.frame);
+    	        //this.parent.parent._documentmenu._totalSlideNo.setAttribute('text',this.ObjectByName._swfView.totalframes);
+    	        //this.parent.parent._documentmenu._zoom.setAttribute('text',this.ObjectByName.currentzoomFactor);
+        	
+            } else {
+                
+        		var docToolbar = this.getDocumentToolBar();
+        		
+                if ($debug) Debug.write("doUpdateDocumentToolBar ",docToolbar.parent.parent.ignoreUpdates);
+                docToolbar.parent.parent.ignoreUpdates = true;
+                
+        		if (this["ObjectByName"] && this.ObjectByName != null && this.ObjectByName._swfView) {
+                    
+                    if ($debug) Debug.warn("doUpdateDocumentToolBar ",this.ObjectByName.fullFit);
+                    
+        			docToolbar._currentSlideNo.setAttribute('text',this.ObjectByName._swfView.frame);
+                    docToolbar._totalSlideNo.setAttribute('text',this.ObjectByName._swfView.totalframes);
+                    //docToolbar._zoom.setAttribute('text',this.ObjectByName.currentzoomFactor);
+                    //docToolbar.parent._fullFit.setValue(this.ObjectByName.fullFit);
+        		} else {
+        			docToolbar._currentSlideNo.setAttribute('text',"0");
+                    docToolbar._totalSlideNo.setAttribute('text',"0");
+                    //docToolbar._zoom.setAttribute('text',"100");
+                    //docToolbar.parent._fullFit.setValue(false);
+        		}
+                
+                docToolbar.parent.parent.ignoreUpdates = false;
+    	        
+        	}
+    	]]>
+    </method>
+    
+    <method name="doDeleteFromDocumentsBar" args="itemRefName">
+    	var docToolbar = this.getDocumentToolBar();
+    	docToolbar.removeDocument(itemRefName);
+    </method>
+    
+    <method name="clearDocumentsBar">
+    	var docToolbar = this.getDocumentToolBar();
+    	docToolbar.clearDocumentsBar();
+    </method>
+    
+    <method name="sendCurrentSWFObject" args="objRef">
+		<![CDATA[
+            if ($debug) Debug.write("sendCurrentSWFObject :: ",objRef,objRef.name);
+            var objName = objRef.name;
+            for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+                if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==objName) {
+                    ////Debug.write("Found Object: ",this.baseactionobjectList[eg]);
+                    var sendSlideObjectUpdate = false;
+                    if (this.baseactionobjectList[eg][8] != objRef.slideNumber) {
+                    	sendSlideObjectUpdate = true;
+                    }
+                    this.baseactionobjectList[eg][8] = objRef.slideNumber;
+                    this.baseactionobjectList[eg][9] = objRef._swfView.x;
+                    this.baseactionobjectList[eg][10] = objRef._swfView.y;
+                    this.baseactionobjectList[eg][11] = objRef._swfView.width;
+                    this.baseactionobjectList[eg][12] = objRef._swfView.height;
+                    this.baseactionobjectList[eg][13] = objRef.zoomlevel;
+                    this.baseactionobjectList[eg][16] = objRef.currentzoomFactor;
+                    this.baseactionobjectList[eg][19] = objRef.fullFit;
+                    var newA = this.baseactionobjectList[eg];
+                    if (newA[0]=='paint') newA[1] = new Array();				
+                    this.onsharedMessage('swf',newA);	
+                    if (sendSlideObjectUpdate) {
+                        this.updateObjectsToSlideNumber(this.baseactionobjectList[eg]);
+                    }
+                    break;
+                }
+            }	
+		]]>
+	</method>
+    
+    <method name="remoteObjectUpdate" args="lastactionObject">
+        <![CDATA[
+        
+            var obj = this.getObjectByName(lastactionObject[lastactionObject.length-1]);
+            
+            if ($debug) Debug.write("remoteObjectUpdate :: ",obj.fullFit);
+            obj._swfView.doSendChangeValue = false;
+            var sendSlideObjectUpdate = false;
+            if (obj.slideNumber != lastactionObject[8]) {
+            	sendSlideObjectUpdate = true;
+            }
+			obj.slideNumber = lastactionObject[8];
+			obj._swfView.setAttribute('x',lastactionObject[9]);
+			obj._swfView.setAttribute('y',lastactionObject[10]);
+			obj._swfView.setAttribute('width',lastactionObject[11]);
+            obj._swfView.setAttribute('height',lastactionObject[12]);
+            //obj.zoomlevel = lastactionObject[13];
+            //obj.currentzoomFactor = lastactionObject[16];
+            obj.fullFit = lastactionObject[19];
+            
+            if ($debug) Debug.write("DO initialLoadFullFit ?? ",obj.fullFit);
+            
+            if (obj.fullFit) {
+                if ($debug) Debug.write("DO initialLoadFullFit !! ");
+                obj._swfView.initialLoadFullFit();
+            }
+            
+            obj._swfView.setAttribute('frame',obj.slideNumber);
+            obj._swfView.doSendChangeValue = true;
+            
+            this.doUpdateDocumentToolBarByParticipant(obj.name);
+            
+            this.remoteUpdateBaseObjectList(lastactionObject);
+            
+            if (sendSlideObjectUpdate) {
+                this.updateObjectsToSlideNumber(lastactionObject);
+            }
+        ]]>
+    </method>
+    
+    <method name="remoteUpdateBaseObjectList" args="actionObject">
+		<![CDATA[
+            ////Debug.write("remoteUpdateBaseObjectList : ",actionObject);
+            for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+                if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==actionObject[actionObject.length-1]) {
+                    this.baseactionobjectList[eg] = actionObject;
+                    break;
+                }
+            }	
+		]]>
+    </method>
+    
+    
+    
+    
+    
+    <method name="playVideoSynced" args="fileExplorerItemId,fileName,flv_width,flv_height">
+        <![CDATA[
+        
+            if ($debug) Debug.write("playVideoSynced : ",fileExplorerItemId,fileName,flv_width,flv_height);
+        
+            var tName = 'flv'+this.getCounter();
+            
+            this.currentlayer = new lz.whiteboardVideoPlayer(this,{
+                                            name:tName,
+                                            fileExplorerItemId:fileExplorerItemId,
+                                            title:fileName,
+                                            sendInit:true,
+                                            flv_width:flv_width,
+                                            flv_height:flv_height
+                                        });
+                                        
+            this.layers.push(this.currentlayer);  
+        ]]>
+    </method>
+    
+    <method name="sendNewVideoRemote" args="refObj">
+        <![CDATA[
+        
+            if ($debug) Debug.write("sendNewVideoRemote : ",refObj.fileExplorerItemId,refObj.title);
+        
+            this.flvregisterFinal(refObj.name,refObj.x,refObj.y,refObj.width,refObj.height,
+                                                refObj.fileExplorerItemId,refObj.title,
+                                                false, //isPlaying
+                                                refObj.flv_width,
+                                                refObj.flv_height,
+                                                this.getZIndex());
+                        
+            
+        ]]>
+    </method>
+    
+    <method name="flvregisterFinal" args="newName,x,y,width,height,fileExplorerItemId,fileName,isPlaying,flv_width,flv_height,zIndex">
+        var actionObject = new Array();
+        actionObject[0] = 'flv';
+        actionObject[1] = fileExplorerItemId;
+        actionObject[2] = fileName;
+        actionObject[3] = isPlaying;
+        actionObject[4] = flv_width; 
+        actionObject[5] = flv_height;   
+        actionObject[6] = zIndex;//-8
+        actionObject[7] = null;//-7
+        actionObject[8] = this.counter;//-6
+        actionObject[9] = x;//-5
+        actionObject[10] = y;//-4
+        actionObject[11] = width;//-3
+        actionObject[12] = height;//-2
+        actionObject[13] = newName;//-1
+        this.baseactionobjectList.push(actionObject);       
+        this.onsharedMessage('draw',actionObject);
+    </method>     
+    
+    <method name="drawFlvToHistory" args="lastActionObject,parentView">
+        <![CDATA[
+        
+            if ($debug) Debug.write("drawFlvToHistory PLAY :: ",lastActionObject[3]);
+        
+            this.currentlayer = new lz.whiteboardVideoPlayer(this,{
+                                            name:lastActionObject[lastActionObject.length-1],
+                                            fileExplorerItemId:lastActionObject[1],
+                                            title:lastActionObject[2],
+                                            flv_width:lastActionObject[4],
+                                            flv_height:lastActionObject[5]
+                                        });
+               
+            if (lastActionObject[3]) {
+                this.currentlayer.playRemote();
+            }
+                                        
+            this.layers.push(this.currentlayer);  
+            
+        ]]>
+    </method>
+    <!-- 
+     x:lastActionObject[lastActionObject.length-5],
+     y:lastActionObject[lastActionObject.length-4],
+     width:lastActionObject[lastActionObject.length-3],
+     height:lastActionObject[lastActionObject.length-2]
+     -->
+    
+    <method name="playFLV" args="refObj,play">
+        <![CDATA[
+            
+            for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+                if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==refObj.name) {
+                    ////Debug.write("Found Object: ",this.baseactionobjectList[eg]);
+                    
+                    this.baseactionobjectList[eg][3] = play;
+                    
+                    if ($debug) Debug.write("playFLV :: ",this.baseactionobjectList[eg]);
+                    this.onsharedMessage('flv',this.baseactionobjectList[eg]);
+                    
+                    break;
+                }
+            }
+            
+        ]]>
+    </method>
+    
+    <method name="playFLVRemote" args="actionObject">
+
+        var tObj = this.getObjectByName(actionObject[actionObject.length-1]);
+        
+        if (actionObject[3]) {
+            tObj.playRemote();
+        }
+        if (!actionObject[3]) {
+            tObj.stopRemote();
+        }
+
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/baseDrawSave.lzx b/WebContent/src/modules/conference/whiteboard/base/baseDrawSave.lzx
new file mode 100644
index 0000000..39b894c
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/baseDrawSave.lzx
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDrawSave" extends="baseDrawImage" >
+	
+	<!-- saveing a file to a wml Object -->
+	<attribute name="savefileName" value="savefileName1" type="string" />
+	<attribute name="fileData" value="null" />
+	<attribute name="savefileDataWinRef" value="null" />
+	
+	<!-- loading a file from a wml Object
+	<attribute name="loadfileData" value="null" />
+	<attribute name="loadfileDataIndex" value="0" type="number" />
+	<attribute name="loadfileDataWinRef" value="null" />
+	<attribute name="loadObjectTimer" value="null" />
+	<attribute name="loadmessageId" value="206" type="number" />
+	<attribute name="syncmessageId" value="207" type="number" />
+	<attribute name="_loadmessageTxt" value="" type="string" />
+	<attribute name="_loadingUsers" value="null" />
+	<attribute name="wmlfileName" value="" type="string" />
+	<attribute name="wmlroom" value="" type="string" />
+	<attribute name="wmldomain" value="" type="string" />
+	<attribute name="wmlspreadNews" value="false" type="boolean" />
+	<attribute name="wmlLoadingCompleteMessage" value="null" />
+	<attribute name="synccheckTime" value="1000" type="number" />
+	 -->
+	
+	<!-- loading all stage objects on init -->
+	<attribute name="isInitLoader" value="false" type="boolean" />
+    
+    <!-- Export Image Type -->
+    <attribute name="exportType" value="svg" type="string" />
+    
+	<!-- Vars for storing screenshot
+		removed cause of performance and 
+		no php backend availible anymore -->		
+    <attribute name="MCRef" value="null" />
+    
+    <attribute name="pixelArray" value="null" />
+    <attribute name="snap" value="null" />
+    <attribute name="bpData" value="null" />
+    <attribute name="MatrixValue" value="null" />
+    
+    <attribute name="w" value="0" type="number" />
+    <attribute name="h" value="0" type="number" />
+    
+    <attribute name="a" value="0" type="number" />
+    
+    <attribute name="pixel_del" value="$once{ new LzDelegate(this, 'buildPixelArray' )}" />
+    
+    <attribute name="sendpictureName" value="snapchot.jpg" type="string" />
+    
+    <attribute name="isSendPartArray" value="true" type="boolean" />
+    
+    <attribute name="isRecordingLoad" value="false" type="boolean" />
+    <attribute name="isinitRecordingLoad" value="false" type="boolean" />
+	
+	<!-- Start and Stop Event will be thrown by the loading process -->
+	<event name="onwmlloadStart" />
+	<event name="onwmlloadStop" />
+    
+    <!-- Images will be send in packages 
+    	so timeout is workaround
+     -->
+    <attribute name="sendPartURL" value="http://host/createimagefrombitmap.php" type="string" />
+    
+    <!-- create Image from whole Array
+    	Large Images will not be rendered correctly here cause
+    	there can be a timeout -->
+    <attribute name="sendURL" value="http://host/createimagefrombitmap.php" type="string" />
+    
+    <event name="onprogress" />
+    
+    <method name="catchSnapshot">
+        <![CDATA[
+        this.MCRef = this.getDisplayObject();
+        //Debug.write("this.MCRef: ",this.MCRef);
+        this.snap = new flash.display.BitmapData(this.width, this.height, false, 0 );
+        
+        //Matrix to scale the new image
+        this.MatrixValue = new flash.geom.Matrix();
+        this.MatrixValue.scale(1, 1);
+        //Copy video image
+        this.snap.draw(this.MCRef,  this.MatrixValue); 
+        
+        this.bpData = this.snap.getPixels(this.snap.rectangle);
+        
+        this.w = this.width;
+        this.h = this.height;
+        this.a = 0;
+        this.pixelArray = new Array();
+        
+        //pixel_del.register(lz.Idle,'onidle');
+        this.saveAsImage.doCall();
+        ]]>
+    </method>
+    
+	  	<netRemoteCallHib name="saveAsImage" funcname="fileservice.saveAsImage" remotecontext="$once{ canvas.thishib }" >   
+	  		<netparam><method name="getValue">return parent.parent.bpData;</method></netparam>
+	        <handler name="ondata" args="value">	
+	        	//Debug.write("  saveAsImage: ",value);              	          				
+	        </handler>	
+	  	</netRemoteCallHib>     
+    
+    <method name="buildPixelArray" args="item">
+        <![CDATA[
+        
+        for(var b=0; b<=this.h; b++){
+            var tmp = this.snap.getPixel(a, b);
+            this.pixelArray.push(tmp.toString(16));
+        }
+        var perc =  Math.round((this.a*100)/this.w);
+        if (this.onprogress) this.onprogress.sendEvent(perc);            
+        this.a++
+        if(this.a>this.w){ 
+            //Finish capturing
+            if (this.isSendPartArray){
+            	this.sendPHPData(this.pixelArray, this.h, this.w);
+            } else {
+	            this.sendPHPData(this.pixelArray, this.h, this.w);
+	        }
+            //free memory
+            this.snap.dispose();
+            pixel_del.unregisterAll();
+        }
+        
+        ]]>
+    </method>
+    
+    <method name="sendPHPData" args="pix,pixH,pixW">
+        //Debug.write("### sendPHPData: ",pix,pixH,pixW);
+        <![CDATA[
+	        //Create the LoadVars object and pass data to PHP script
+	        var output = new LoadVars();
+	        output.img = pix.toString();
+	        output.height = pixH;
+	        output.width = pixW;
+	        //The page (and this movie itself) should be in a server to work
+	        output.send(this.sendURL, "output", "POST");
+        ]]> 
+    </method>
+	
+	<!-- saving all object on whiteBoard as wml-file -->
+	
+	<handler name="sendObject">
+		if ($debug) Debug.write("sendObject doSave: ",this.baseactionobjectList);
+		this.fileData = this.baseactionobjectList;
+		this.savefileDataWinRef = new lz.saveAsWmlWindow(canvas.main_content._content.inner,{
+                                                refObj:this});
+	</handler>
+	
+	<method name="confirmSaveAsObject" args="fileName" >
+		this.savefileName = fileName;
+		this.saveAsObject.doCall();
+	</method>
+    
+  	<netRemoteCallHib name="saveAsObject" funcname="fileservice.saveAsObject" remotecontext="$once{ canvas.thishib }" >   
+  		<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+		<netparam><method name="getValue">return hib.currentroomid;</method></netparam>        				  
+		<netparam><method name="getValue"> return parent.parent.savefileName; </method></netparam>
+		<netparam><method name="getValue"> return parent.parent.fileData;</method></netparam>
+        <handler name="ondata" args="value">	
+			<![CDATA[
+				if ($debug) Debug.write("  saveAsImage: ",value);   
+			    if (value>0){
+					parent.savefileDataWinRef.close();
+					canvas.currentFileExplorer.loadFiles();
+				} else {
+					new lz.rpcErrorDialog(canvas.main_content._content.inner,{errorid:value});
+				}
+			]]>  	          				
+        </handler>	
+  	</netRemoteCallHib>  
+        
+    <method name="confirmSaveAsImageTypeExport" args="fileName,type">
+        this.savefileName = fileName;
+        this.exportType = type;
+        this.fileData = this.baseactionobjectList;
+        this.addPrintList.doCall();
+    </method> 
+     
+    <method name="confirmSaveAsImageExport" args="fileName">
+        this.savefileName = fileName;
+        this.exportType = "svg";
+        this.fileData = this.baseactionobjectList;
+        this.addPrintList.doCall();
+    </method>	
+    
+        <netRemoteCallHib name="addPrintList" funcname="printservice.addPrintList" remotecontext="$once{ canvas.thishib }" > 
+          
+            <netparam><method name="getValue">return canvas.sessionId; </method></netparam>
+            <!--             
+            <netparam><method name="getValue">return parent.parent.savefileName; </method></netparam>
+             -->
+            <netparam><method name="getValue">return parent.parent.fileData;</method></netparam>
+            <netparam><method name="getValue">return parent.parent.width;</method></netparam>
+            <netparam><method name="getValue">return parent.parent.height;</method></netparam>
+            <handler name="ondata" args="value">    
+                <![CDATA[
+                    if ($debug) Debug.write("addPrintList: ",value);   
+                    var downloadurl = canvas.getUrl()+'ExportToImage?' +
+					                    'fileName=' + parent.savefileName +
+					                    '&hash='+value + 
+                                        '&exportType=' + parent.exportType +
+					                    '&sid='+canvas.sessionId;
+                                        
+                    lz.Browser.loadURL(downloadurl,"_BLANK");
+                ]]>                             
+            </handler>  
+        </netRemoteCallHib>     
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/baseDrawWords.lzx b/WebContent/src/modules/conference/whiteboard/base/baseDrawWords.lzx
new file mode 100644
index 0000000..2ea27c3
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/baseDrawWords.lzx
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="styleableInput" extends="customInputtext" x="1" y="1" bgcolor="0xFFFFFF" multiline="true"
+		width="${ parent.width-2 }" height="${ parent.height-2 }" >
+
+	<attribute name="startAdjustHight" value="false" type="boolean" />
+	
+	<attribute name="setFocusOnInit" value="true" type="boolean" />
+	
+	<handler name="oninit">
+		if (this.setFocusOnInit) {
+		    lz.Focus.setFocus(this);	
+		}
+	</handler>
+	<handler name="ontext">
+	<![CDATA[
+		var gh = this.getTextHeight();
+		if (gh>20) {
+			if (gh+this.fontsize > this.height){
+				this.setAttribute("height",(gh+this.fontsize));
+			}
+		}
+	]]>
+	</handler>	
+	<handler name="onkeyup" args="key">
+       <![CDATA[
+       // 13 is return
+       if ((key==27) || (key==13)) {
+       		this.parent.parent.adjustHeight();
+       }
+       ]]>
+    </handler>	
+	<handler name="onheight">
+		if (this.startAdjustHight) this.parent.parent.adjustHeight();
+	</handler>
+	
+	<method name="getURLEncodedText">
+		<![CDATA[
+		
+		    var tString = this.getText();
+		    
+		    //tString = tString.replace("<","&#60;");
+		    //tString = tString.replace(">","&#62;");
+		    
+		    return tString;
+		
+		]]>
+	</method>
+	
+</class>
+
+<class name="baseDrawWords" extends="view" bgcolor="black" 
+	width="120" height="40">
+	
+	<attribute name="refObj" value="null" />
+	
+	<attribute name="inittext" value="" type="string" />
+	<attribute name="initTextName" value="" type="string" />
+
+	<method name="drawtoArray">
+		<![CDATA[
+		if ($debug) Debug.write("drawtoArray");
+		if (this._textview._textview.getURLEncodedText().length!=0 && this.inittext.length==0){
+            
+            //var scale = this.parent._drawarea.width / this.parent._drawarea.initW;
+		    var y = ( this.getAttributeRelative('y',this.refObj)-this.refObj.y+1 );
+            if ($debug) Debug.write("this.refObj.y ",this.refObj.y);
+			if ($debug) Debug.write("this.x-this.refObj.x-this.refObj.parent.x ",y);
+			var x = ( this.getAttributeRelative('x',this.refObj)-this.refObj.x+1 );
+			
+			if(canvas._drawarea.isSnapToGrid){        		
+	    			        	   
+	            x = Math.round(x/canvas._drawarea.gridWidth)*canvas._drawarea.gridWidth;
+		    	y = Math.round(y/canvas._drawarea.gridWidth)*canvas._drawarea.gridWidth;
+            
+            } 
+			
+        	this.refObj.drawTextField(this._textview._textview.getURLEncodedText(),
+                    this._textview._textview.width,
+                    this._textview._textview.height,x,y);
+                    
+        } else if (this._textview._textview.getURLEncodedText().length!=0 && this.inittext.length!=0){
+            
+        	if ($debug) Debug.write("edit modi ",this.initTextName);
+		    var y = (this.getAttributeRelative('y',this.refObj)-this.refObj.y+1);
+			if ($debug) Debug.write("this.x-this.refObj.x-this.refObj.parent.x ",y);
+			var x = (this.getAttributeRelative('x',this.refObj)-this.refObj.x+1);
+            
+			if(canvas._drawarea.isSnapToGrid){        		
+	    			        	   
+	            x = Math.round(x/canvas._drawarea.gridWidth)*canvas._drawarea.gridWidth;
+		    	y = Math.round(y/canvas._drawarea.gridWidth)*canvas._drawarea.gridWidth;
+            
+            } 
+			
+        	this.refObj.setTextFieldByName(this.initTextName,
+                this._textview._textview.getURLEncodedText(),
+                this._textview._textview.width,
+                x,y,this._textview._textview.height);
+                
+        } else {
+			if ($debug) Debug.write("text smaller then 0",this._textview._textview.getURLEncodedText());
+			
+			if ($debug) Debug.write("this.gridWidth",canvas._drawarea.gridWidth);
+			if ($debug) Debug.write("this.isSnapToGrid",canvas._drawarea.isSnapToGrid);
+		}
+        this.giveup();
+		]]>
+    </method>
+    
+	<method name="giveup">
+		this.refObj.letterObjectFree(this);
+		this.destroy();
+	</method>
+	    
+	<handler name="oninit">
+		//startAdjustHight is set to true later, cause otherwise update 
+		//Events would set the height to 
+		//text field default height
+		this.refObj.letterObjectClose(this);
+        var t = new lz.styleableInput(this._textview,{
+	                name:'_textview',text:this.inittext,
+	                fontstyle:this.refObj.currentlayerstyle,
+	                fontsize:this.refObj.currentlayersize,
+	                fgcolor:this.refObj.currentlayerletter
+                });
+        //if ( this.inittext.length==0 ) this.setAttribute('height',40);
+		if ( this.inittext.length!=0 ) {
+		    this.refObj.edittextLetterObject.setAttribute('visible',false);
+		    this.refObj.setModus('letter');
+	    }
+		t.startAdjustHight = true;
+	</handler>
+    
+    <handler name="newStyleEvent">
+        this.callNew(this._textview._textview.getText());
+    </handler>
+  
+	<method name="callNew" args="txxt">
+		//if ($debug) Debug.write("callNew height-2 ");
+		
+        var h = this.getHeight();
+        
+        //if ($debug) Debug.write("callNew height-3 ",this);
+        //if ($debug) Debug.write("callNew height-4 ",this.getHeight());
+        
+		this._textview._textview.destroy();
+		var t = new lz.styleableInput(this._textview,{
+			        setFocusOnInit:false,
+                    name:'_textview',text:txxt,
+                    fontstyle:this.refObj.currentlayerstyle,
+                    fontsize:this.refObj.currentlayersize,
+                    fgcolor:this.refObj.currentlayerletter
+                });
+        this.setAttribute("height",h);
+	</method>
+	<method name="adjustHeight">
+		if ($debug) Debug.write("+++ adjustHeight +++");
+		this.setAttribute('height',this._textview._textview.height+2);
+	</method>
+    
+    <method name="_removeResizestateFromThis">
+    	this.rs.remove();
+    </method>
+    
+    <view name="_textview" width="${ parent.width }" height="${ parent.height }" />
+    
+    <resizestate name="rs" >
+    	<text x="2" y="2" text="${ 'w: '+parent.width+' h: '+parent.height }" bgcolor="white"/>
+    </resizestate>
+	<view resource="_boundingBoxPointerUR" x="${ parent.width-this.width }" y="${ parent.height-this.height }" 
+		onmousedown="parent.rs.apply()" onmouseup="parent._removeResizestateFromThis()" >
+		<labelTooltip text="Resize this Object" />
+	</view>    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/drawViewNew.lzx b/WebContent/src/modules/conference/whiteboard/base/drawViewNew.lzx
new file mode 100644
index 0000000..dcfcf88
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/drawViewNew.lzx
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="drawViewInner" extends="drawview" x="0" y="0" >
+	
+</class>
+
+<!--
+    this is the Base Container for all Whiteboard Objects
+ -->
+<class name="drawViewNew" extends="drawview" cachebitmap="false" x="0" y="0" >
+	
+	<attribute name="typeOfObject" value="paint" type="string" />
+
+    <attribute name="initwidth" value="0" type="number" />
+    <attribute name="initheight" value="0" type="number" />
+    
+    <event name="prepareForDelete" />
+    
+    <handler name="oninit">
+        this.initwidth=this.width;
+        this.initheight=this.height;
+    </handler>
+    
+	<handler name="onwidth">
+        <![CDATA[
+	        if (this.isinited) {
+		        if(this.name.indexOf('line')>=0 
+		        	|| this.name.indexOf('uline')>=0 
+		        	|| this.name.indexOf('drawarrow')>=0
+		        	|| this.name.indexOf('paint')>=0) {
+		        	this.getDisplayObject()._xscale = (this.width/this.initwidth)*100;
+		        } else if (this.name.indexOf('rectangle')>=0) {
+	        		parent.redrawRectItemByScaling(this);
+	        	} else if  (this.name.indexOf('ellipse')>=0) {
+	        		parent.redrawEllipseItemByScaling(this);
+	        	}	        	
+	        }
+        ]]>
+    </handler>
+    
+    <handler name="onheight">
+    	<![CDATA[
+	        if (this.isinited) {
+		        if(this.name.indexOf('line')>=0 
+		        	|| this.name.indexOf('uline')>=0 
+		        	|| this.name.indexOf('drawarrow')>=0
+		        	|| this.name.indexOf('paint')>=0) {
+		        	this.getDisplayObject()._yscale = (this.height/this.initheight)*100;  
+		        } else if (this.name.indexOf('rectangle')>=0) {
+	        		parent.redrawRectItemByScaling(this);
+	        	} else if  (this.name.indexOf('ellipse')>=0) {
+	        		parent.redrawEllipseItemByScaling(this);
+	        	}	
+	        }  	
+        ]]>   
+    </handler>
+    <!-- 
+    <dragstate name="dragger" drag_axis="both"
+	    drag_min_x="0"
+	    drag_max_x="$once{parent.width - this.width}"
+	    drag_min_y="0"
+	    drag_max_y="$once{parent.height - this.height}">
+    </dragstate>
+     -->
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/imageForDrawView.lzx b/WebContent/src/modules/conference/whiteboard/base/imageForDrawView.lzx
new file mode 100644
index 0000000..9b6d544
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/imageForDrawView.lzx
@@ -0,0 +1,195 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="imageForDrawView" extends="image" stretches="both">
+	
+	<event name="prepareForDelete" />
+	
+	<attribute name="downloadurl" value="" type="string" />
+		
+	<attribute name="alterModus" value="true" type="boolean" />
+	<attribute name="isLocalSync" value="false" type="boolean" />
+	
+	<attribute name="recorderModus" value="false" type="boolean" />
+	
+	<attribute name="baseurl" value="" type="string" />
+	<attribute name="fileName" value="" type="string" />
+	<attribute name="moduleName" value="" type="string" />
+	<attribute name="parentPath" value="" type="string" />
+	<attribute name="room" value="" type="string" />
+	<attribute name="domain" value="" type="string" />
+	
+	<attribute name="remotewidth" value="0" type="number" />
+	<attribute name="remoteheight" value="0" type="number" />
+	
+	<attribute name="typeOfObject" value="image" type="string" />
+	
+	<!-- holds the reference_id to the SyncProcess -->
+	<attribute name="uniqueObjectSyncName" value="" type="string" />
+	
+		<!--
+			if (this.width>this.refObj.width){
+				var height = this.height/(this.width/this.refObj.width)
+				this.setAttribute('width',this.refObj.width);
+				this.setAttribute('height',height);
+				this.setAttribute('x',0);
+			}
+			if (this.height>this.refObj.height){
+				var width = this.width/(this.height/this.refObj.height)
+				this.setAttribute('height',this.refObj.height);
+				this.setAttribute('width',width);
+				this.setAttribute('y',0);
+			}
+			if(this.y+this.height>this.refObj.height){
+				this.setAttribute('y',0);
+			}
+			if(this.x+this.width>this.refObj.width){
+				this.setAttribute('x',0);
+			}	            	
+         -->            
+	<attribute name="refObj" value="null" />
+	<handler name="onload">
+		<![CDATA[
+			//Debug.write("image loaded");
+			//this.refObj.parent._loading.setAttribute('visible',false);
+			
+			if (this.remotewidth != 0 && this.remoteheight != 0){
+				this.setAttribute('width',this.remotewidth);
+				this.setAttribute('height',this.remoteheight);
+			} else {
+				
+				if (this.width>this.refObj.width){
+					var height = this.height/(this.width/this.refObj.width)
+					this.setAttribute('width',this.refObj.width);
+					this.setAttribute('height',height);
+					this.setAttribute('x',0);
+				}
+				
+				if (this.height>this.refObj.height){
+					var width = this.width/(this.height/this.refObj.height)
+					this.setAttribute('height',this.refObj.height);
+					this.setAttribute('width',width);
+					this.setAttribute('y',0);
+				}
+				
+				if(this.y+this.height>this.refObj.height){
+					this.setAttribute('y',0);
+				}
+				
+				if(this.x+this.width>this.refObj.width){
+					this.setAttribute('x',0);
+				}
+				
+			}
+	
+			//only send syncCommand if alterModus is true (meaning that this is the Moderator)
+			//otherwise just send a notification to moderator that this image has been loaded
+			//if this is just a recordContent-modi (recordingsViewer) then there should be no syncing
+			if (this.recorderModus) {
+				this.refObj.storeTempValsAndLoadSyncListRecording(this);
+			} else if (this.alterModus){
+				this.refObj.storeTempValsAndLoadSyncList(this);
+			} else if (this.isLocalSync){
+				this.refObj.addImageToLayerHistoryToLocalLoaded.sendEvent(this);
+			} else {
+				this.refObj.sendLoadNotificationImage(this);
+			}
+			this.refObj.layers.push(this);			
+			
+			this.oninit.sendEvent();
+			
+			//This is not needed anymore as it sync's against the server sid, swagner, 11.06.2008
+			//this.refObj.parent.parent.isloadedImage.sendEvent(this);
+			
+			//send notification to wml-loader
+			//this is send later then in normal objects cause it needs to be send after the image
+			//has been loaded completely
+			//if (this.refObj.isWmlLoaderImage){
+			//	this.refObj.isWmlLoaderImage=false;
+            //    //Debug.write("1 onwmlLoaderSend.sendEvent( image )");
+			//	if (this.refObj.onwmlLoaderSend) this.refObj.onwmlLoaderSend.sendEvent('image');
+			//}
+		]]>
+	</handler>
+	<handler name="onerror" args="error">
+		<![CDATA[
+		//Debug.write("onerror "+error);
+			//only send syncCommand if alterModus is true (meaning that this is the Moderator)
+			//otherwise just send a notification to moderator that this iamge has been loaded
+			if (this.recorderModus) {
+				this.refObj.storeTempValsAndLoadSyncListRecording(this);
+			} else if (this.alterModus){
+				this.refObj.storeTempValsAndLoadSyncList(this);
+			} else if (this.isLocalSync){
+				this.refObj.addImageToLayerHistoryToLocalLoaded.sendEvent(this);
+			} else {
+				this.refObj.sendLoadNotificationImage(this);
+			}
+			this.refObj.layers.push(this);			
+			
+			this.oninit.sendEvent();
+			
+			//This is not needed anymore as it sync's against the server sid, swagner, 11.06.2008
+			this.refObj.parent.parent.isloadedImage.sendEvent(this);
+			
+			//send notification to wml-loader
+			//this is send later then in normal objects cause it needs to be send after the image
+			//has been loaded completely
+			//if (this.refObj.isWmlLoaderImage){
+			//	this.refObj.isWmlLoaderImage=false;
+			//	if (this.refObj.onwmlLoaderSend) this.refObj.onwmlLoaderSend.sendEvent('image');
+			//}
+		]]>
+	</handler>
+	<handler name="ontimeout" args="error">
+		<![CDATA[
+		//Debug.write("ontimeout "+error);
+			//only send syncCommand if alterModus is true (meaning that this is the Moderator)
+			//otherwise just send a notification to moderator that this iamge has been loaded
+			if (this.recorderModus) {
+				this.refObj.storeTempValsAndLoadSyncListRecording(this);
+			} else if (this.alterModus){
+				this.refObj.storeTempValsAndLoadSyncList(this);
+			} else if (this.isLocalSync){
+				this.refObj.addImageToLayerHistoryToLocalLoaded.sendEvent(this);
+			} else {
+				this.refObj.sendLoadNotificationImage(this);
+			}
+			this.refObj.layers.push(this);			
+			
+			this.oninit.sendEvent();
+			
+			//This is not needed anymore as it sync's against the server sid, swagner, 11.06.2008
+			this.refObj.parent.parent.isloadedImage.sendEvent(this);
+			
+			//send notification to wml-loader
+			//this is send later then in normal objects cause it needs to be send after the image
+			//has been loaded completely
+			//if (this.refObj.isWmlLoaderImage){
+			//	this.refObj.isWmlLoaderImage=false;
+			//	if (this.refObj.onwmlLoaderSend) this.refObj.onwmlLoaderSend.sendEvent('image');
+			//}
+		]]>
+	</handler>	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/imageForScreenViewer.lzx b/WebContent/src/modules/conference/whiteboard/base/imageForScreenViewer.lzx
new file mode 100644
index 0000000..7e6d6a3
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/imageForScreenViewer.lzx
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="imageForScreenViewer" extends="image" stretches="both" x="0" y="0">
+	
+	<attribute name="downloadurl" value="" type="string" />
+		
+	<attribute name="alterModus" value="true" type="boolean" />
+	
+	<attribute name="baseurl" value="" type="string" />
+	<attribute name="fileName" value="" type="string" />
+	<attribute name="moduleName" value="" type="string" />
+	<attribute name="parentPath" value="" type="string" />
+	<attribute name="room" value="" type="string" />
+	<attribute name="domain" value="" type="string" />
+    
+    <attribute name="username" value="" type="string" />
+		
+	<attribute name="refObj" value="null" />
+	<handler name="onload">
+        this.refObj.layers.push(this);	
+        this.refObj.isScreenImageLoading=false;
+	    this.sendToBack();
+        
+        var height = this.height/(this.width/this.parent.width)
+        this.setAttribute('width',this.parent.width);
+        this.setAttribute('height',height);
+        this.setAttribute('x',0);
+            
+        this.refObj.toggleVisibleScreenSharing();
+	</handler>
+	<handler name="onerror" args="error">
+        this.refObj.toggleVisibleScreenSharing();
+	</handler>
+	<handler name="ontimeout" args="error">
+        this.refObj.toggleVisibleScreenSharing();
+	</handler>	
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/library.lzx b/WebContent/src/modules/conference/whiteboard/base/library.lzx
new file mode 100644
index 0000000..ab3ee19
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/library.lzx
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="drawViewNew.lzx" />
+	<include href="baseDraw.lzx" />
+    
+    <!-- extends basedraw with drawing Tools -->
+    <include href="tools/" /> 
+    
+	<include href="swfResourceView.lzx" />
+	<include href="baseDrawObject.lzx" />
+	<include href="baseDrawLetter.lzx" />
+	<include href="imageForDrawView.lzx" />
+	<include href="imageForScreenViewer.lzx" />
+	<include href="baseDrawImage.lzx" />
+	<include href="baseDrawSave.lzx" />
+	<include href="baseDrawWords.lzx" />
+	<include href="whiteboardVideoPlayer.lzx" />
+	<include href="remoteWhiteboard.lzx" />
+	<include href="whiteBoardPointer.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/remoteWhiteboard.lzx b/WebContent/src/modules/conference/whiteboard/base/remoteWhiteboard.lzx
new file mode 100644
index 0000000..bb47ca1
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/remoteWhiteboard.lzx
@@ -0,0 +1,336 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="remoteWhiteboard" extends="baseDrawSave">
+	
+	<attribute name="loadingObjectListId" value="0" type="number" />
+	<attribute name="loadingObjectList" value="null" />
+	
+	<attribute name="loadObjectDelegate" value="null" />
+	
+	<method name="loadObjectList" args="whiteBoardObject">
+		<![CDATA[
+		
+			if ($debug) Debug.info("loadObjectList :1: ",whiteBoardObject,whiteBoardObject.fullFit,whiteBoardObject.zoom);
+		
+			if (parent.parent["zoombox"]) {
+			    parent.parent.zoombox.setWhiteboardValues(whiteBoardObject.fullFit,whiteBoardObject.zoom);
+			}
+			
+			
+			this.setAttribute("x",whiteBoardObject.x);
+			this.setAttribute("y",whiteBoardObject.y);	
+			this.last_x = this.x;
+			this.last_y = this.y;
+			
+			/*
+			if (whiteBoardObject.brainStorming != null) {
+                this.loadBrainStormingObject(whiteBoardObject.brainStorming);
+            }
+            */
+			
+			this.fullFit = whiteBoardObject.fullFit;
+			
+			this.getDisplayObject()._xscale = whiteBoardObject.zoom;
+    		this.getDisplayObject()._yscale = whiteBoardObject.zoom;
+    		
+    		this.onupdateScale.sendEvent(null);
+			
+			this.loadingObjectList = new Array();
+			
+			for (var eg in whiteBoardObject.roomItems) {
+				this.loadingObjectList.push(whiteBoardObject.roomItems[eg]);
+			}
+			
+			//return;
+			//if ($debug) Debug.write("loadObjectList :2: ",this.loadingObjectList);
+			
+			function sortItemByIndex(a,b){
+                var a1 = a[a.length-8];
+                var b1 = b[b.length-8];
+                //_root.//Debug.write("natcompare: ",a1,b1,natcompare(a1,b1));
+                if(a1==b1){
+                    return 0;
+                } else if(a1>b1){
+                    return 1;
+                } else {
+                    return -1;
+                }
+            }
+            
+            //for (var i=0;i<this.loadingObjectList.length;i++) {
+            //	if ($debug) Debug.write(" 1 ",i,this.loadingObjectList[i][0],this.loadingObjectList[i][this.loadingObjectList[i].length-8]);
+            //}
+            
+            this.loadingObjectList.sort(sortItemByIndex);
+			
+            //for (var i=0;i<this.loadingObjectList.length;i++) {
+            //    if ($debug) Debug.write(" 2 ",i,this.loadingObjectList[i][0],this.loadingObjectList[i][this.loadingObjectList[i].length-8]);
+            //}
+            
+			this.loadingObjectListId = 0;
+			//this.loadObjectDelegate = new LzDelegate( this, "loadRemoteObject" );
+			//if (this.loadingObjectList.length != 0){
+			//	lz.Timer.addTimer( this.loadObjectDelegate, 250 );
+			//}
+			//for (var i=0;i<this.loadingObjectList.length;i++){
+			//	if ($debug) Debug.write("i this.loadingObjectList[i] ",i,this.loadingObjectList[i]);
+			//}
+			
+			if ($debug) Debug.write("Number of Whiteboard Objects ",this.loadingObjectList.length);
+			
+			if (this.loadingObjectList != null && this.loadingObjectList.length != 0){
+				this.startNewSyncprocess.doCall();
+			}
+		]]>
+	</method>
+	
+	<method name="loadSavedObjectList" args="objList">
+        <![CDATA[
+            
+            var tempArray = new Array();            
+            tempArray[0] = "loadSavedWhiteboard";
+            ///tempArray[1] = itemObj;
+            tempArray[1] = objList;
+            hib.sendMessageWithClient.sendMessage("whiteboard", tempArray);
+        
+            this.loadingObjectList = objList;
+            
+            if ($debug) Debug.write("loadObjectList :: ",this.loadingObjectList);
+            
+            function sortItemByIndex(a,b){
+                var a1 = a[a.length-8];
+                var b1 = b[b.length-8];
+                //_root.//Debug.write("natcompare: ",a1,b1,natcompare(a1,b1));
+                if(a1==b1){
+                    return 0;
+                } else if(a1>b1){
+                    return 1;
+                } else {
+                    return -1;
+                }
+            }
+            
+            for (var i=0;i<this.loadingObjectList.length;i++) {
+                if ($debug) Debug.write(" 1 ",i,this.loadingObjectList[i][0],this.loadingObjectList[i][this.loadingObjectList[i].length-8]);
+            }
+            
+            this.loadingObjectList.sort(sortItemByIndex);
+            
+            for (var i=0;i<this.loadingObjectList.length;i++) {
+                if ($debug) Debug.write(" 2 ",i,this.loadingObjectList[i][0],this.loadingObjectList[i][this.loadingObjectList[i].length-8]);
+            }
+            
+            this.loadingObjectListId = 0;
+            //this.loadObjectDelegate = new LzDelegate( this, "loadRemoteObject" );
+            //if (this.loadingObjectList.length != 0){
+            //  lz.Timer.addTimer( this.loadObjectDelegate, 250 );
+            //}
+            //for (var i=0;i<this.loadingObjectList.length;i++){
+            //  if ($debug) Debug.write("i this.loadingObjectList[i] ",i,this.loadingObjectList[i]);
+            //}
+            if (this.loadingObjectList != null && this.loadingObjectList.length != 0){
+                this.startSavedSyncprocess.doCall();
+            }
+            
+        ]]>
+    </method>
+    
+    <method name="prepareLoadWMLFile" args="itemObj">
+        if ($debug) Debug.write("loadWMLFile: ",itemObj);
+        
+        this.loadWMLFile.setAttribute('fileExplorerItemId', itemObj.fileExplorerItemId);
+                  
+        if ($debug) Debug.write("prepareLoadWMLFile 1: ",parent.parent.whiteboardId);
+        
+        this.loadWMLFile.doCall();
+    </method>
+    
+    
+    <netRemoteCallHib name="loadWMLFile" funcname="fileservice.loadWmlObject"
+        remotecontext="$once{ canvas.thishib }" >
+        <attribute name="fileExplorerItemId" type="number" value="0"/>
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return hib.currentroomid;</method></netparam> 
+        <netparam><method name="getValue">return parent.fileExplorerItemId;</method></netparam> 
+        <netparam><method name="getValue">return parent.parent.parent.parent.whiteboardId;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("loadWMLFile: ",value);
+                //canvas._drawarea.clearAll();
+                //parent.loadSavedObjectList(value);
+                
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+    
+    <method name="loadWmlToWhiteboardById" args="roomItems">
+    	this.clearRemote();
+    	this.loadSavedObjectList(roomItems);
+    </method>
+	
+    <netRemoteCallHib name="startNewSyncprocess" funcname="whiteboardservice.startNewSyncprocess"
+        remotecontext="$once{ canvas.thishib }" >
+        <handler name="ondata" args="value">
+            <![CDATA[
+            	//The onResult-Handler will be called be the rtmpconnection
+            	if ($debug) Debug.write("startNewSyncprocess: ",value);
+            	if (value.publicSID == canvas.publicSID){
+            		if ($debug) Debug.write("currentLoadingItem IS mine");
+                    //TODO: Check usage of currentLoadingItem
+            		//if (value.currentLoadingItem){
+            			parent.startInitialLoadinProcess();
+            		//}
+            	}
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+    
+     <netRemoteCallHib name="startSavedSyncprocess" funcname="whiteboardservice.startNewSyncprocess"
+        remotecontext="$once{ canvas.thishib }" >
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("startNewSyncprocess: ",value);
+                //if (value.publicSID == canvas.publicSID){
+                    if ($debug) Debug.write("currentLoadingItem IS mine");
+                    //TODO: Check usage of currentLoadingItem
+                    //if (value.currentLoadingItem){
+                        parent.startInitialLoadinProcess();
+                    //}
+                //}
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+    
+    <netRemoteCallHib name="sendCompletedSyncEvent" funcname="whiteboardservice.sendCompletedSyncEvent"
+        remotecontext="$once{ canvas.thishib }" >
+        <handler name="ondata" args="value">
+            <![CDATA[
+            	//The onResult-Handler will be called be the rtmpconnection
+            	if ($debug) Debug.write("sendCompletedSyncEvent: ",value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib>     	
+    
+    <method name="startInitialLoadinProcess">
+		this.loadObjectDelegate = new LzDelegate( this, "loadRemoteObject" );
+		if (this.loadingObjectList.length != 0){
+			lz.Timer.addTimer( this.loadObjectDelegate, 250 );
+		}
+    </method>
+	
+	<method name="loadRemoteObject" args="ref">
+		<![CDATA[
+			this.sendRemoteWatchObject(this.loadingObjectList[this.loadingObjectListId]);
+			this.loadingObjectListId++;
+			if (this.loadingObjectListId < this.loadingObjectList.length){
+				lz.Timer.addTimer( this.loadObjectDelegate, 250 );
+			} else {
+				this.sendCompletedSyncEvent.doCall();
+				this.updateAllObjectsToSlideNumber();
+				this.setModusWithUpdate("hand");
+				this.onupdateScale.sendEvent(null);
+			}
+		]]>
+	</method>
+	
+	<method name="sendRemoteWatchObject" args="actionObject">
+		if ($debug) Debug.write("[sendRemoteWatchObject]: ",actionObject);
+		<![CDATA[
+			
+			//Redraw the View on the paintarea
+			if (actionObject[0]=='paint'){
+				this.paintactionHistory(actionObject,this);
+			} else if (actionObject[0]=='line'){
+				this.lineactionHistory(actionObject,this);
+			} else if (actionObject[0]=='uline'){
+				this.ulineactionHistory(actionObject,this);
+			} else if (actionObject[0]=='drawarrow'){
+				this.drawarrowlineactionHistory(actionObject,this);
+			} else if(actionObject[0]=='letter'){
+				this.drawactionHistory(actionObject,this);
+			} else if(actionObject[0]=='image'){
+				this.addImageToLayerHistoryToLocal(actionObject,this);
+			} else if(actionObject[0]=='swf'){
+				this.addSWFToLayerHistory(actionObject,this,true);
+			} else if(actionObject[0]=='rectangle'){
+				this.drawrectangleToHistory(actionObject,this);
+			} else if(actionObject[0]=='ellipse'){
+				this.drawellipseToHistory(actionObject,this);
+			} else if(actionObject[0]=='flv'){
+                this.drawFlvToHistory(actionObject,this);
+            } else if(actionObject[0]=='mindMapCenter'){
+                this.drawMindMapCenterToHistory(actionObject,this);
+            } else if(actionObject[0]=='mindMapNode'){
+                this.drawMindMapNodeToHistory(actionObject,this);
+            } else if(actionObject[0]=='clipart'){
+                this.drawClipArtToHistory(actionObject,this);
+            }
+			
+			if ($debug) Debug.write("[store actionObject] ",actionObject);
+			
+			this.baseactionobjectList.push(actionObject);
+				
+		]]>
+	</method>	
+	
+	<!-- methods for syncing events -->
+    <netRemoteCallHib name="startNewObjectSyncProcess" funcname="whiteboardservice.startNewObjectSyncProcess"
+        remotecontext="$once{ canvas.thishib }" >
+    	<attribute name="isStarting" value="false" type="boolean" />
+    	<attribute name="uniqueObjectSyncName" value="" type="string" />
+    	<netparam><method name="getValue">return parent.uniqueObjectSyncName;</method></netparam>
+        <netparam><method name="getValue">return parent.isStarting;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+            	//The onResult-Handler will be called be the rtmpconnection
+            	if ($debug) Debug.write("startNewImagesSyncprocess: ",value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+    
+    <netRemoteCallHib name="sendCompletedObjectSyncEvent" funcname="whiteboardservice.sendCompletedObjectSyncEvent"
+        remotecontext="$once{ canvas.thishib }" >
+    	<attribute name="uniqueObjectSyncName" value="" type="string" />
+    	<netparam><method name="getValue">return parent.uniqueObjectSyncName;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+            	//The onResult-Handler will be called be the rtmpconnection
+            	if ($debug) Debug.write("sendCompletedImagesSyncEvent: ",value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib>   
+    
+    
+    <method name="startStreaming" args="messageObj">
+        new lz.incomingScreenSharing(canvas,{messageObj:messageObj});
+    </method>
+    
+    <method name="stopStreaming" args="messageObj">
+        
+    </method>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/swfResourceView.lzx b/WebContent/src/modules/conference/whiteboard/base/swfResourceView.lzx
new file mode 100644
index 0000000..ed48e33
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/swfResourceView.lzx
@@ -0,0 +1,305 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="swfResourceView" extends="view" >
+	
+	<event name="prepareForDelete" />
+    
+    <attribute name="refObj" value="null" />
+	<attribute name="alterModus" value="true" type="boolean" />
+    
+    <attribute name="standardFileName" value="" type="string"/>
+	
+	<attribute name="recorderModus" value="false" type="boolean" />
+    
+    <attribute name="fullFit" value="true" type="boolean" />
+	
+	<attribute name="baseurl" value="" type="string" />
+	<attribute name="fileName" value="" type="string" />
+	<attribute name="moduleName" value="" type="string" />
+	<attribute name="parentPath" value="" type="string" />
+	<attribute name="room" value="" type="string" />
+	<attribute name="domain" value="" type="string" />    
+    <attribute name="slideNumber" value="1" type="number" /> 
+    
+    <attribute name="currentzoomFactor" value="100" type="number" />
+    <attribute name="zoomlevel" value="20" type="number" />
+    <attribute name="initwidth" value="0" type="number" />
+    <attribute name="initheight" value="0" type="number" />
+    
+    <!-- for wml-loaded SWF's
+        attribute only set on init
+     -->
+    <attribute name="innerwidth" value="0" type="number" />
+    <attribute name="innerheight" value="0" type="number" />
+    <attribute name="innerx" value="0" type="number" />
+    <attribute name="innery" value="0" type="number" />
+    <attribute name="currentzoom" value="0" type="number" />
+    
+    <attribute name="typeOfObject" value="swf" type="string" />
+    
+	<!-- holds the reference_id to the SyncProcess -->
+	<attribute name="uniqueObjectSyncName" value="" type="string" />    
+    
+    <view name="_swfView" play="false">
+    	
+    	<!--
+    	<attribute name="timeisInited" value="false" type="boolean" />
+        <attribute name="sendObjectDel" value="null" />
+         -->
+        
+        <!-- Do not send update events in case 
+            this is sync event broadcasted by another user -->
+        <attribute name="doSendChangeValue" value="false" type="boolean" />
+        
+        <handler name="onframe" args="i">
+            ////Debug.write("onframe",i);
+        </handler>
+        
+        <handler name="onplay" args="i">
+            ////Debug.write("onplay",i);
+        </handler>
+        
+        <handler name="onstop" args="i">
+            ////Debug.write("onstop",i);
+        </handler>
+        
+        <!--
+        <handler name="oninit">
+            this.sendObjectDel = new LzDelegate( this, "sendObject" );
+        </handler>
+        
+        <handler name="onx" args="x">
+        	if (!this.doSendChangeValue) {
+        		return;
+        	}
+        	
+            if (!this.timeisInited){
+                this.timeisInited=true;
+                lz.Timer.addTimer( this.sendObjectDel, 250 );
+            } else {
+                lz.Timer.resetTimer( this.sendObjectDel, 250 );
+            }
+        </handler>
+        <handler name="ony" args="y">
+        	if (!this.doSendChangeValue) {
+                return;
+            }
+            
+            if (!this.timeisInited){
+                this.timeisInited=true;
+                lz.Timer.addTimer( this.sendObjectDel, 250 );
+            } else {
+                lz.Timer.resetTimer( this.sendObjectDel, 250 );
+            }
+        </handler>        
+        
+        <method name="sendObject" args="itemRef">
+            if ($debug) Debug.info("sendObject :: sendCurrentSWFObject");
+            this.parent.parent.sendCurrentSWFObject(this.parent);
+            this.timeisInited=false;
+        </method>
+         -->
+        
+        <method name="initialLoadFullFit">
+            <![CDATA[
+            
+            	if ($debug) Debug.write(" -- fullFit -- ",parent.parent.fullFit);
+            
+                if (parent.parent.fullFit) {
+                    
+                    if ($debug) Debug.write(" -- fullFit -2- ",this.width,this.height);
+                    if ($debug) Debug.write(" -- fullFit -3- ",parent.parent.width,parent.parent.height);
+                    
+                    //Scale to container width/height
+                    var xScale = (parent.parent.parent.width-16)/this.width;
+                    var yScale = (parent.parent.parent.height-16)/this.height;
+                    
+                    if ($debug) Debug.write(" -- fullFit -4- ",xScale,yScale);
+                    
+                    if (xScale < yScale) {
+                    	parent.parent.setCurrentScaleByFullFit(xScale);
+                    } else {
+                    	parent.parent.setCurrentScaleByFullFit(yScale);
+                    }
+                    
+                }
+            
+            ]]>
+        </method>
+        
+        <handler name="onload">
+            <![CDATA[
+                if ($debug) Debug.info("onload: ",this.width,this,height);
+                
+                ////Debug.write("onload: ",this.stop);
+                this.stop();
+                this.setAttribute('play',false);             
+                
+                this.parent.initwidth = this.width;
+                this.parent.initheight = this.height;
+                
+                this.setAttribute('frame',parent.slideNumber);
+                
+                //only send syncCommand if alterModus is true (meaning that this is the Moderator)
+                //otherwise just send a notification to moderator that this iamge has been loaded
+                if (this.parent.recorderModus) {
+					this.parent.refObj.storeTempValsAndLoadSyncListSWFRecording(this.parent);
+				} else if (this.parent.alterModus){
+                    
+                    //this code is invoked when the Moderator loads the Document
+                    
+                    this.parent.refObj.storeTempValsAndLoadSyncListSWF(this.parent);
+                    if ($debug) Debug.write("==> doShowObjectBounds MOD ");
+                    
+                    this.initialLoadFullFit();
+                    
+                    this.parent.refObj.doShowObjectBounds(this.parent.name);
+                    this.parent.refObj.doUpdateDocumentToolBar();
+                } else {
+                    
+                    //this code is invoked when any participants syncronizes and loads the document
+                    //because a Moderator has loaded it
+                    
+                    if ($debug) Debug.write("==> doShowObjectBounds Participant ");
+                    
+                    this.initialLoadFullFit();
+                    
+                    this.parent.refObj.sendLoadNotificationSWF(this.parent);
+                    
+                    this.parent.refObj.doUpdateDocumentToolBarByParticipant(this.parent.name);
+                    
+                }
+                
+                if ($debug) Debug.write("swf loaded -2- ",this.parent.refObj.isWmlLoaderImage);
+                if (this.parent.refObj.isWmlLoaderImage){
+                    if ($debug) Debug.write("swf loaded ",this.parent.innerwidth,this.parent.innerheight);
+                	if (this.parent.innerwidth != 0 && this.parent.innerheight != 0) {
+	                    this.setAttribute('width',this.parent.innerwidth);
+	                    this.setAttribute('height',this.parent.innerheight);
+	                    this.setAttribute('x',this.parent.innerx);
+	                    this.setAttribute('y',this.parent.innery);
+                	}
+                    this.parent.currentzoomFactor = this.parent.currentzoom;
+                }
+
+                this.parent.refObj.layers.push(this.parent);			
+                
+                this.doSendChangeValue = true;
+                
+                this.oninit.sendEvent();
+                //this.parent.refObj.parent.parent.isloadedImage.sendEvent(this);
+                
+                //send notification to wml-loader
+                //this is send later then in normal objects cause it needs to be send after the image
+                //has been loaded completely
+                //if (this.parent.refObj.isWmlLoaderImage){
+                //    this.parent.refObj.isWmlLoaderImage=false;
+                //    if (this.parent.refObj.onwmlLoaderSend) this.parent.refObj.onwmlLoaderSend.sendEvent('swf');
+                //}
+            ]]>
+        </handler>
+        <handler name="onerror" args="error">
+            <![CDATA[
+            ////Debug.write("onerror "+error);
+            
+            
+                new lz.errorPopup(canvas,{error:"onerror SWF!! "+error});
+                
+                this.parent.initwidth = this.width;
+                this.parent.initheight = this.height;
+                                
+                //only send syncCommand if alterModus is true (meaning that this is the Moderator)
+                //otherwise just send a notification to moderator that this iamge has been loaded
+                if (this.parent.recorderModus) {
+					this.parent.refObj.storeTempValsAndLoadSyncListSWFRecording(this.parent);
+				} else if (this.parent.alterModus){
+                    this.parent.refObj.storeTempValsAndLoadSyncListSWF(this.parent);
+                } else {
+                    this.parent.refObj.sendLoadNotificationSWF(this.parent);
+                }
+                this.parent.refObj.layers.push(this.parent);			
+                
+                this.oninit.sendEvent();
+                //this.parent.refObj.parent.parent.isloadedImage.sendEvent(this.parent);
+                
+                //send notification to wml-loader
+                //this is send later then in normal objects cause it needs to be send after the image
+                //has been loaded completely
+                //if (this.parent.refObj.isWmlLoaderImage){
+                //    this.parent.refObj.isWmlLoaderImage=false;
+                //    if (this.parent.refObj.onwmlLoaderSend) this.parent.refObj.onwmlLoaderSend.sendEvent('swf');
+                //}
+            ]]>
+        </handler>
+        <handler name="ontimeout" args="error">
+            <![CDATA[
+            ////Debug.write("ontimeout "+error);
+            
+                new lz.errorPopup(canvas,{error:"ontimeout SWF!! "+error});
+                
+                this.parent.initwidth = this.width;
+                this.parent.initheight = this.height;
+                                
+                //only send syncCommand if alterModus is true (meaning that this is the Moderator)
+                //otherwise just send a notification to moderator that this iamge has been loaded
+                if (this.parent.recorderModus) {
+					this.parent.refObj.storeTempValsAndLoadSyncListSWFRecording(this.parent);
+				} else if (this.parent.alterModus){
+                    this.parent.refObj.storeTempValsAndLoadSyncListSWF(this.parent);
+                } else {
+                    this.parent.refObj.sendLoadNotificationSWF(this.parent);
+                }
+                this.parent.refObj.layers.push(this.parent);			
+                
+                this.oninit.sendEvent();
+                //this.parent.refObj.parent.parent.isloadedImage.sendEvent(this.parent);
+                
+                //send notification to wml-loader
+                //this is send later then in normal objects cause it needs to be send after the image
+                //has been loaded completely
+                //if (this.parent.refObj.isWmlLoaderImage){
+                //    this.parent.refObj.isWmlLoaderImage=false;
+                //    if (this.parent.refObj.onwmlLoaderSend) this.parent.refObj.onwmlLoaderSend.sendEvent('swf');
+                //}
+            ]]>
+        </handler> 
+        
+        <handler name="onwidth" args="w">
+            if ($debug) Debug.write("onwidth ",w);
+        </handler>
+        
+        <handler name="onheight" args="h">
+            if ($debug) Debug.write("onheight ",h);
+        </handler>
+        
+    </view>    
+    
+    <!--
+    <om_vscrollbar name="_scrollstv"
+                visible="${ ((canvas.ismoderator) ? true : ((canvas.isAllowedToDraw) ? true : false )) }" /> 
+    <om_hscrollbar name="_scrollsth"
+                visible="${ ((canvas.ismoderator) ? true : ((canvas.isAllowedToDraw) ? true : false )) }" />
+     -->   
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawArrow.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawArrow.lzx
new file mode 100644
index 0000000..a904886
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawArrow.lzx
@@ -0,0 +1,367 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="baseDrawArrow" extends="baseDrawULine" >
+    
+    <!-- for drawing drawarrow -->
+    <attribute name="currentdrawarrowlinestroke" value="0x000000" />
+    <attribute name="currentdrawarrowlinestrokeDis" value="1" type="number" />
+    <attribute name="currentdrawarrowlinestrokeFill" value="0xFF6600" />
+    <attribute name="currentdrawarrowlinestrokeFillDis" value="1" type="number" />
+    
+    <attribute name="currentdrawarrowlinelineWidth" value="4" type="number" />   
+    <attribute name="currentdrawarrowOpacity" value="1" type="number" />
+      
+    <!-- ###########################
+    drawarrow
+     -->
+     
+    
+    <method name="startDrawarrowline" args="oid_name">
+        <![CDATA[
+	        if (oid_name == null) {
+	            oid_name = 'drawarrow'+this.getCounter();
+	        }
+	        
+	        this.currentlayer = new lz.drawViewNew(this,{
+		            name:oid_name,width:this.width,height:this.height,
+		            opacity:this.currentdrawarrowOpacity});
+            
+            var pArrowStart = new flash.geom.Point(this.startx,this.starty);
+            var pArrowEnd = new flash.geom.Point(this.endx,this.endy);
+            
+            //if ($debug) Debug.write("start,end,line",pArrowStart,pArrowEnd,this.currentdrawarrowlinelineWidth);
+            this.drawArrow(this.currentlayer,pArrowStart,pArrowEnd,this.currentdrawarrowlinelineWidth,
+                    this.currentdrawarrowlinestrokeDis,this.currentdrawarrowlinestroke,
+                    this.currentdrawarrowlinestrokeFill,this.currentdrawarrowlinestrokeFillDis);
+        ]]>
+    </method> 
+    
+    <method name="endDrawarrowline">
+        <![CDATA[
+            //if ($debug) Debug.write("endDrawarrowline",this.startx,this.starty,this.endx,this.endy);
+	        var tempName = this.currentlayer.name;
+	        //Debug.write("tempName: ",tempName);
+	        this.currentlayer.destroy();
+	        
+	        //GetBounds of that Object
+	        var minx = this.width+2000;
+	        var miny = this.height+2000;
+	        var maxx = -2;
+	        var maxy = -2;
+	
+	        if (this.startx<minx) minx=this.startx;
+	        if (this.endx<minx) minx=this.endx;
+	        
+	        if (this.startx>maxx) maxx=this.startx;
+	        if (this.endx>maxx) maxx=this.endx;
+	        
+	        if (this.starty<miny) miny=this.starty;
+	        if (this.endy<miny) miny=this.endy;
+	        
+	        if (this.starty>maxy) maxy=this.starty;
+	        if (this.endy>maxy) maxy=this.endy;
+	        
+	        var width = maxx-minx;
+	        var height = maxy-miny;
+	        
+	        //if ($debug) Debug.write("minx,miny,width,height: ",minx,miny,width,height);
+            //if ($debug) Debug.write("endDrawarrowline",this.startx,this.starty,this.endx,this.endy);
+            	                
+	        
+            if (minx == this.startx) {
+                var x1 = 0;
+                var x2 = width;
+            } else {
+                var x1 = width;
+                var x2 = 0;
+            }
+            if (miny == this.starty) {
+                var y1 = 0;
+                var y2 = height;
+            } else {
+                var y1 = height;
+                var y2 = 0;
+            }
+            
+            if(this.isSnapToGrid){        	
+	        	minx = Math.round(minx/this.gridWidth)*this.gridWidth;
+			    miny = Math.round(miny/this.gridWidth)*this.gridWidth;
+			    
+			    //x1 = Math.round(x1/this.gridWidth)*this.gridWidth;
+			    //y1 = Math.round(y1/this.gridWidth)*this.gridWidth;
+			    
+			    //x2 = Math.round(x2/this.gridWidth)*this.gridWidth;
+			    //y2 = Math.round(y2/this.gridWidth)*this.gridWidth;
+	        		        	
+        	}
+			                        
+	        this.currentlayer = new lz.drawViewNew(this,{
+	            name:tempName,x:minx,y:miny,width:width,height:height,
+	            opacity:this.currentdrawarrowOpacity});
+	            
+	        var pArrowStart = new flash.geom.Point(x1,y1);
+            var pArrowEnd = new flash.geom.Point(x2,y2);
+            
+            //if ($debug) Debug.write("start,end,line",pArrowStart,pArrowEnd,this.currentdrawarrowlinelineWidth);
+            this.drawArrow(this.currentlayer,pArrowStart,pArrowEnd,this.currentdrawarrowlinelineWidth,
+                    this.currentdrawarrowlinestrokeDis,this.currentdrawarrowlinestroke,
+                    this.currentdrawarrowlinestrokeFill,this.currentdrawarrowlinestrokeFillDis);
+	            
+	        //Add Layer to global Layer     
+	        this.layers.push(this.currentlayer);
+	        this.drawarrowlineregisterFinal(this.currentlayer.name,
+                this.currentdrawarrowlinestroke,this.currentdrawarrowlinelineWidth,
+                this.currentdrawarrowlinestrokeFill,this.currentdrawarrowlinestrokeDis,
+                this.currentdrawarrowlinestrokeFillDis,this.currentdrawarrowOpacity,
+                minx,miny,width,height,
+                x1,y1,x2,y2,true,this.getSWFDocumentStatus(),
+                this.getZIndex());
+	        //Debug.write("t: ",t);
+        ]]>
+    </method> 
+       
+    <method name="drawarrowlineregisterFinal" args="newName,stroke,line,fill,strokeDis,fillDis,opacity,x,y,width,height,x1,y1,x2,y2,doCall,swfObj,zIndex">
+        var actionObject = new Array();
+        actionObject[0] = 'drawarrow';
+        actionObject[1] = stroke;
+        actionObject[2] = line;
+        actionObject[3] = fill;
+        actionObject[4] = strokeDis;
+        actionObject[5] = fillDis;
+        actionObject[6] = opacity;
+        actionObject[7] = x1;  
+        actionObject[8] = y1;  
+        actionObject[9] = x2;    
+        actionObject[10] = y2;
+        actionObject[11] = zIndex;//-8
+        actionObject[12] = swfObj;//-7
+        actionObject[13] = this.counter;//-6 
+        actionObject[14] = x;//-5
+        actionObject[15] = y;//-4
+        actionObject[16] = width;//-3
+        actionObject[17] = height;//-2
+        actionObject[18] = newName;//-1
+        this.baseactionobjectList.push(actionObject);       
+        if (doCall) this.onsharedMessage('draw',actionObject);
+    </method>  
+    
+    <method name="drawarrowlineactionHistory" args="lastActionObject,parentView">
+        <![CDATA[
+            //Debug.write("## lineactionHistory",parentView," 2 ## NEW x,y ",lastActionObject[lastActionObject.length-5],lastActionObject[lastActionObject.length-4]," width,height: ",lastActionObject[lastActionObject.length-3],lastActionObject[lastActionObject.length-2]);
+            
+            var tmpCurrentlayer = new lz.drawViewNew(parentView,{
+                name:lastActionObject[lastActionObject.length-1],
+                x:lastActionObject[lastActionObject.length-5],
+                y:lastActionObject[lastActionObject.length-4],
+                width:lastActionObject[lastActionObject.length-3],
+                height:lastActionObject[lastActionObject.length-2],
+                opacity:lastActionObject[6]});
+            
+            var pArrowStart = new flash.geom.Point(lastActionObject[7],lastActionObject[8]);
+            var pArrowEnd = new flash.geom.Point(lastActionObject[9],lastActionObject[10]);
+            
+            //if ($debug) Debug.write("start,end,line",pArrowStart,pArrowEnd,this.currentdrawarrowlinelineWidth);
+            this.drawArrow(tmpCurrentlayer,pArrowStart,pArrowEnd,lastActionObject[2],
+                    lastActionObject[4],lastActionObject[1],
+                    lastActionObject[3],lastActionObject[5]);
+                
+            //Add Layer to global Layer     
+            this.layers.push(tmpCurrentlayer);
+
+            this.doSWFDocumentStatus(tmpCurrentlayer,lastActionObject[lastActionObject.length-7]);
+        ]]>
+    </method>
+    
+    <method name="drawArrow" args="graphics,start,end,thickness,strokeDis,stroke,fill,fillDis">
+        <![CDATA[
+    //(graphics:Graphics,
+    //            start:Point,end:Point,
+    //            style:Object=null):void {
+            
+            if (start.equals(end)) return;
+            
+            
+            var arrowStyle = {'shaftControlPosition':0.5,
+                    'shaftControlSize':0.5,
+                    'headLength':thickness*5, //Pixel Length of arrow head
+                    'headWidth':thickness*5,//Relative width of arrow head
+                    'edgeControlPosition':0.5,
+                    'edgeControlSize':0.5,
+                    'shaftPosition':0,
+                    'shaftThickness':thickness
+                    };
+            
+            var fullVect:Point = end.subtract(start);
+            var halfWidth:Number = (arrowStyle.headWidth != -1) ? arrowStyle.headWidth/2 : arrowStyle.headLength/2; 
+            
+            //Figure out the line start/end points
+            var startNorm = new flash.geom.Point(fullVect.y,-fullVect.x);
+            startNorm.normalize(arrowStyle.shaftThickness/2);
+            var start1 = start.add(startNorm);
+            var start2 = start.subtract(startNorm);
+            var end1 = end.add(startNorm);
+            var end2 = end.subtract(startNorm);
+            
+            //if ($debug) Debug.write("startNorm: ",startNorm.toString());
+            //if ($debug) Debug.write("start1: ",start1.toString());
+            //if ($debug) Debug.write("start2: ",start2.toString());
+            //if ($debug) Debug.write("end1: ",end1.toString());
+            //if ($debug) Debug.write("end2: ",end2.toString());
+            
+            //figure out where the arrow head starts
+            var headPnt = fullVect.clone();
+            //if ($debug) Debug.write("headPnt 1: ",headPnt.toString());
+            //if ($debug) Debug.write("headPnt.length 1: ",headPnt.length);
+            //if ($debug) Debug.write("arrowStyle.headLength 1: ",arrowStyle.headLength);
+            headPnt.normalize(headPnt.length-arrowStyle.headLength);
+            //if ($debug) Debug.write("headPnt 2: ",headPnt.toString());
+            headPnt = headPnt.add(start);
+            //if ($debug) Debug.write("headPnt 3: ",headPnt.toString());
+            
+            //calculate the arrowhead corners
+            var headPntNorm = startNorm.clone();
+            //if ($debug) Debug.write("headPntNorm ^^: ",headPntNorm.toString());
+            //if ($debug) Debug.write("halfWidth ^^: ",halfWidth);
+            headPntNorm.normalize(halfWidth);
+            //if ($debug) Debug.write("headPntNorm: ",headPntNorm.toString());
+            var edge1 = headPnt.add(headPntNorm);
+            var edge2 = headPnt.subtract(headPntNorm);
+            
+            //if ($debug) Debug.write("edge1: ",edge1.toString());
+            //if ($debug) Debug.write("edge2: ",edge2.toString());
+            
+            //Figure out where the arrow connects the the shaft, then calc the intersections
+            var shaftCenter = flash.geom.Point.interpolate(end,headPnt,arrowStyle.shaftPosition);
+            //if ($debug) Debug.write("end: ",end.toString());
+            //if ($debug) Debug.write("headPnt",headPnt.toString());
+            //if ($debug) Debug.write("arrowStyle.shaftPosition: ",arrowStyle.shaftPosition);
+            //if ($debug) Debug.write("shaftCenter",shaftCenter.toString());
+            var inter1 = this.getLineIntersection(start1,end1,shaftCenter,edge1);
+            var inter2 = this.getLineIntersection(start2,end2,shaftCenter,edge2);
+            
+            //if ($debug) Debug.write("inter1: ",inter1.toString());
+            //if ($debug) Debug.write("inter2: ",inter2.toString());
+            
+            //Figure out the control points
+            var edgeCenter = flash.geom.Point.interpolate(end,headPnt,arrowStyle.edgeControlPosition);
+            var edgeNorm = startNorm.clone();
+            edgeNorm.normalize(halfWidth*arrowStyle.edgeControlSize);
+            //if ($debug) Debug.write("halfWidth*arrowStyle.edgeControlSize: "+(halfWidth*arrowStyle.edgeControlSize));
+            //if ($debug) Debug.write("edgeNorm: "+edgeNorm.toString());
+            var edgeCntrl1 = edgeCenter.add(edgeNorm);
+            var edgeCntrl2 = edgeCenter.subtract(edgeNorm);
+
+            //if ($debug) Debug.write("edgeCntrl1: ",edgeCntrl1.toString());
+            //if ($debug) Debug.write("edgeCntrl2: ",edgeCntrl2.toString());
+
+            //if ($debug) Debug.write("moveTo: ",start1.x,start1.y);
+            //if ($debug) Debug.write("lineTo",inter1.x,inter1.y);
+            //if ($debug) Debug.write("lineTo",edge1.x,edge1.y);
+            //if ($debug) Debug.write("quadraticCurveTo",edgeCntrl1.x,edgeCntrl1.y,end.x,end.y);
+            //if ($debug) Debug.write("quadraticCurveTo",edgeCntrl2.x,edgeCntrl2.y,edge2.x,edge2.y);
+            //if ($debug) Debug.write("lineTo",inter2.x,inter2.y);
+            //if ($debug) Debug.write("lineTo",start2.x,start2.y);
+            //if ($debug) Debug.write("lineTo",start1.x,start1.y);
+            
+            graphics.moveTo(start1.x,start1.y);
+            graphics.lineTo(inter1.x,inter1.y);
+            graphics.lineTo(edge1.x,edge1.y);
+            graphics.quadraticCurveTo(edgeCntrl1.x,edgeCntrl1.y,end.x,end.y);
+            graphics.quadraticCurveTo(edgeCntrl2.x,edgeCntrl2.y,edge2.x,edge2.y);
+            graphics.lineTo(inter2.x,inter2.y);
+            graphics.lineTo(start2.x,start2.y);
+            graphics.lineTo(start1.x,start1.y);
+            
+            if (strokeDis!=-1){
+                graphics.strokeStyle = stroke;
+                graphics.stroke();
+            }
+
+            if (fillDis!=-1){
+                graphics.fillStyle = fill;
+                graphics.fill();
+            }
+        ]]>
+    </method>
+    
+    <method name="getLineIntersection" args="a1,a2,b1,b2">
+        <![CDATA[ 
+        
+            //calculate directional constants
+            var k1 = (a2.y-a1.y) / (a2.x-a1.x);
+            var k2 = (b2.y-b1.y) / (b2.x-b1.x);
+            
+            // if the directional constants are equal, the lines are parallel,
+            // meaning there is no intersection point.
+            if( k1 == k2 ) return null;
+            
+            var x = 0;
+            var y = 0;
+            var m1 = 0;
+            var m2 = 0;
+            
+            //if ($debug) Debug.write("k1",k1);
+            //if ($debug) Debug.write("k2",k2);
+            
+            // an infinite directional constant means the line is vertical
+            if( !isFinite(k1) ) {
+                
+                //if ($debug) Debug.write("k1 ^^ 0");
+                //if ($debug) Debug.write("k2",k2,(b2.y-b1.y));
+                //if ($debug) Debug.write("b1.getY(): "+b1.y);
+                //if ($debug) Debug.write("b2.getY(): "+b2.y);
+                // so the intersection must be at the x coordinate of the line
+                x = a1.x;
+                m2 = b1.y - k2 * b1.x;
+                //if ($debug) Debug.write("m2",m2);
+                y = k2 * x + m2;
+                //if ($debug) Debug.write("y",y);
+                
+            // same as above for line 2
+            } else if ( !isFinite(k2) ) {
+                
+                //if ($debug) Debug.write("k2 ^ 0");
+                
+                m1 = a1.y - k1 * a1.x;
+                x = b1.x;
+                y = k1 * x + m1;
+
+            // if neither of the lines are vertical
+            } else {
+                
+                //if ($debug) Debug.write("neither");
+            
+                m1 = a1.y - k1 * a1.x;
+                m2 = b1.y - k2 * b1.x;              
+                x = (m1-m2) / (k2-k1);
+                y = k1 * x + m1;
+                
+            }
+            
+            return new flash.geom.Point(x,y);
+        ]]>
+    </method>    
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawClipArt.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawClipArt.lzx
new file mode 100644
index 0000000..59b71b6
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawClipArt.lzx
@@ -0,0 +1,650 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+
+<class name="drawClipArtWhiteBoard" >
+    
+    <attribute name="clipArtEndx" value="0" type="number" />
+    <attribute name="clipArtEndy" value="0" type="number" />
+    
+    <!-- Not needed anymore, use LzView.setColor instead
+    <method name="setTint" args="color, brightness">
+        <![CDATA[
+        if (color != "" && color != null){
+            if (brightness == null) { brightness = 0; }
+            var rgb = color;
+            var red=(rgb >> 16) & 0xFF;
+            var green=(rgb >> 8) & 0xFF;
+            var blue=rgb & 0xFF;
+
+            this.setColorTransform( { ra : red, ga : green, ba : blue,
+                                        rb : 0, gb : 0, bb : 100 } );
+        }
+        ]]>
+    </method>
+     -->
+     
+</class>	
+    
+<class name="baseDrawClipArt" extends="baseDrawArrow" >
+	
+	<attribute name="minClipArtx" value="0" type="number" />
+	<attribute name="maxClipArtx" value="0" type="number" />
+	<attribute name="minClipArty" value="0" type="number" />
+    <attribute name="maxClipArty" value="0" type="number" />
+    <attribute name="deltaClipArtx" value="0" type="number" />
+    <attribute name="deltaClipArty" value="0" type="number" />
+    
+    <attribute name="clipArtEndx" value="0" type="number" />
+    <attribute name="clipArtEndy" value="0" type="number" />
+	
+	<attribute name="currentClipArtRessourceName" value="idea.png" type="string"/>
+	    
+    <method name="startDrawClipArt" args="oid_name">
+        <![CDATA[
+        if (oid_name == null) {
+            oid_name = 'clipart'+this.getCounter();
+        }
+        
+        this.currentlayer = new lz.drawViewNew(this,{
+                                    name:oid_name,width:this.width,height:this.height,
+                                    opacity:this.currentdrawarrowOpacity});
+         
+        this.startx = this.currentlayer.getMouse('x');
+        this.starty = this.currentlayer.getMouse('y');
+                                    
+        var imageurl = canvas.getUrl() + 'public/cliparts/'+this.currentClipArtRessourceName;
+        
+        if ($debug) Debug.write("imageurl :: ",imageurl);
+        
+        new lz.drawClipArtWhiteBoard(this.currentlayer,{
+        	                width:100,height:100,stretches:'both',
+                            x:this.startx,y:this.starty,
+                            //bgcolor:0xFF3300,
+                            resource:imageurl,name:'clipart'});
+
+        this.minClipArtx = this.startx;
+        this.minClipArty = this.starty;
+        this.maxClipArtx = this.startx+100;
+        this.maxClipArty = this.starty+100;
+        this.clipArtEndx = this.maxClipArtx;
+        this.clipArtEndy = this.maxClipArty;
+        this.deltaClipArtx = 0;
+        this.deltaClipArty = 0;
+            
+                            
+        ]]>
+    </method>
+    
+    <method name="setStartPoint" args="sx,sy">
+    	this.startx = sx;
+        this.starty = sy;
+    </method>
+     
+    <method name="trackDrawClipArt">   
+        <![CDATA[
+        //Add Resource
+        //var t = new lz.drawClipArtWhiteBoard(this.currentlayer,{
+        //                    resource:imageurl,x:this.startx,y:this.starty});
+        
+        //Color
+        //t.setTint(this.currentdrawarrowlinestroke,60);
+        //t.setColor(this.currentdrawarrowlinestroke);
+        var tEndX = this.currentlayer.getMouse('x');
+        var tEndY = this.currentlayer.getMouse('y');
+        
+        this.trackDrawClipArtDraw(tEndX,tEndY,this.currentlayer.clipart);
+        
+        ]]>
+    </method>    
+        
+    <method name="trackDrawClipArtDraw" args="tEndX,tEndY,t">   
+        <![CDATA[
+        //Add Resource
+        //var t = new lz.drawClipArtWhiteBoard(this.currentlayer,{
+        //                    resource:imageurl,x:this.startx,y:this.starty});
+        
+        //Color
+        //t.setTint(this.currentdrawarrowlinestroke,60);
+        //t.setColor(this.currentdrawarrowlinestroke);
+        
+        //if ($debug) Debug.write("trackDrawClipArtDraw ",tEndX,tEndY,t);
+        
+        this.clipArtEndx = tEndX;
+        this.clipArtEndy = tEndY;
+        
+        var tx = tEndX-this.startx;
+        var ty = tEndY-this.starty;
+        
+        var gegenkathete = Math.abs(ty);
+        var ankathete = Math.abs(tx); 
+        var hypothenuse = Math.sqrt((ankathete*ankathete)+(gegenkathete*gegenkathete));
+        var sinAlpha = (gegenkathete/hypothenuse);
+        var palpha = Math.asin(sinAlpha);
+        var alpha = palpha/(Math.PI/180);
+        
+        var tLength = Math.sqrt(2)/2*hypothenuse;
+        
+        //if ($debug) Debug.write("tx,ty,alpha,sinAlpha,tLength "+tx+" "+ty+" "+alpha+" "+sinAlpha+" "+tLength);
+        
+        //if ($debug) Debug.write("CALC tx,ty",tx,ty);
+        
+        if (Math.abs(tx) < 2 && Math.abs(ty) < 2) {
+        	
+        	this.minClipArtx = this.startx;
+            this.minClipArty = this.starty;
+            this.maxClipArtx = this.startx+100;
+            this.maxClipArty = this.starty+100;
+            this.clipArtEndx = this.maxClipArtx;
+            this.clipArtEndy = this.maxClipArty;
+            t.setAttribute('rotation',0);
+            
+            this.deltaClipArtx = 0;
+            this.deltaClipArty = 0;
+            
+            //if ($debug) Debug.write(" IS ZERO ",this.startx,this.starty);
+        	
+        } else if (tx>=0 && ty>=0){    
+            t.setAttribute('rotation',(alpha-45));
+            
+            var tRotate = (alpha-45);
+            var pRotate = tRotate * (Math.PI/180);
+            
+            //1. Quadrant  left-down
+            var ankathete_2 = Math.cos(pRotate)*tLength;
+            var gegenkathete_2 = Math.sin(pRotate)*tLength;
+            var tx2 = this.startx+ankathete_2;
+            var ty2 = this.starty+gegenkathete_2;
+            //if ($debug) Debug.write("_1  ",this.startx,this.starty,tx2,ty2);
+            
+            var tRotate2 = 180-(alpha+45);
+            var pRotate2 = tRotate2 * (Math.PI/180);
+            
+            var ankathete_4 = Math.sin(pRotate2)*tLength;
+            var gegenkathete_4 = Math.cos(pRotate2)*tLength;
+            var tx4 = this.startx-gegenkathete_4;
+            var ty4 = this.starty+ankathete_4;
+            
+            this.minClipArtx = tx4;
+            if (this.startx < tx4) {
+            	this.minClipArtx = this.startx;
+            }
+            
+            this.minClipArty = this.starty;
+            if (ty2 < this.starty) {
+            	this.minClipArty = ty2;
+            }
+            
+            this.maxClipArtx = tx2;
+            if (tEndX > tx2) {
+            	this.maxClipArtx = tEndX;
+            }
+            
+            this.maxClipArty = tEndY;
+            if (ty4 > tEndY) {
+            	this.maxClipArty = ty4;
+            }
+            
+            if (gegenkathete_4 > 0) {
+                this.deltaClipArtx = gegenkathete_4;
+                this.deltaClipArty = 0;
+            } else {
+            	this.deltaClipArtx = 0;
+            	this.deltaClipArty = Math.abs(gegenkathete_2);
+            }
+            
+            
+            //if ($debug) Debug.write("_1  ",gegenkathete_4,gegenkathete_2);
+            
+            //if ($debug) Debug.write("_1  ",this.startx,this.starty,tx4,ty4);
+            
+            //if ($debug) Debug.write("_2 ",pRotate2,tRotate2,Math.sin(pRotate2),gegenkathete_4);
+            //if ($debug) Debug.write("_1  ",this.starty,ty4,ankathete_4,"tRotate2,tLength",tRotate2,tLength);
+            
+        } else if (tx<0 && ty>=0){
+            t.setAttribute('rotation',(90+45)-(alpha));
+            
+            var tRotate = (alpha-45);
+            var pRotate = tRotate * (Math.PI/180);
+            
+            //1. Quadrant  left-down
+            var ankathete_2 = Math.cos(pRotate)*tLength;
+            var gegenkathete_2 = Math.sin(pRotate)*tLength;
+            var tx4 = this.startx-ankathete_2;
+            var ty4 = this.starty+gegenkathete_2;
+            
+            //if ($debug) Debug.write("_1  ",this.startx,this.starty,tx4,ty4);
+            
+            var tRotate2 = 180-(alpha+45);
+            var pRotate2 = tRotate2 * (Math.PI/180);
+            
+            var gegenkathete_4 = Math.sin(pRotate2)*tLength;
+            var ankathete_4 = Math.cos(pRotate2)*tLength;
+            var tx2 = this.startx+ankathete_4;
+            var ty2 = this.starty+gegenkathete_4;
+            
+            //if ($debug) Debug.write("_1  x,y",this.startx,this.starty,"tx2,ty2",tx2,ty2,"tx4,ty4",tx4,ty4);
+            
+            this.minClipArtx = tx4;
+            if (tEndX < tx4) {
+                this.minClipArtx = tEndX;
+            }
+            
+            this.minClipArty = this.starty;
+            if (ty4 < this.starty) {
+                this.minClipArty = ty4;
+            }
+            
+            this.maxClipArtx = tx2;
+            if (this.startx > tx2) {
+                this.maxClipArtx = this.startx;
+            }
+            
+            this.maxClipArty = tEndY;
+            if (ty2 > tEndY) {
+                this.maxClipArty = ty2;
+            }
+            
+            if (gegenkathete_2 > 0) {
+                this.deltaClipArtx = ankathete_2;
+                this.deltaClipArty = 0;
+            } else {
+                this.deltaClipArtx = this.maxClipArtx-this.minClipArtx;
+                this.deltaClipArty = Math.abs(gegenkathete_2);
+            }
+            
+        } else if (tx<0 && ty<0){
+            t.setAttribute('rotation',180+(alpha-45));
+            
+            var tRotate = (alpha-45);
+            var pRotate = tRotate * (Math.PI/180);
+            
+            //1. Quadrant  left-down
+            var ankathete_2 = Math.cos(pRotate)*tLength;
+            var gegenkathete_2 = Math.sin(pRotate)*tLength;
+            var tx4 = this.startx-ankathete_2;
+            var ty4 = this.starty-gegenkathete_2;
+            
+            var tRotate2 = 180-(alpha+45);
+            var pRotate2 = tRotate2 * (Math.PI/180);
+            
+            var gegenkathete_4 = Math.sin(pRotate2)*tLength;
+            var ankathete_4 = Math.cos(pRotate2)*tLength;
+            var tx2 = this.startx+ankathete_4;
+            var ty2 = this.starty-gegenkathete_4;
+            
+            this.minClipArtx = tx4;
+            if (tEndX < tx4) {
+                this.minClipArtx = tEndX;
+            }
+            
+            this.minClipArty = tEndY;
+            if (ty2 < tEndY) {
+                this.minClipArty = ty2;
+            }
+            
+            this.maxClipArtx = tx2;
+            if (this.startx > tx2) {
+                this.maxClipArtx = this.startx;
+            }
+            
+            this.maxClipArty = ty4;
+            if (this.starty > ty4) {
+                this.maxClipArty = this.starty;
+            }
+            
+            //if ($debug) Debug.write("_1  ",gegenkathete_2);
+            
+            if (gegenkathete_2 < 0) {
+                this.deltaClipArtx = this.maxClipArtx-this.minClipArtx;
+                this.deltaClipArty = gegenkathete_4;
+            } else {
+                this.deltaClipArtx = ankathete_2;
+                this.deltaClipArty = this.maxClipArty-this.minClipArty;
+            }
+            
+            
+        } else if (tx>0 && ty<=0){
+            t.setAttribute('rotation',((270+45)-alpha));
+            
+            //if ($debug) Debug.write("alpha :: ",alpha);
+            
+            //if ($debug) Debug.write("_1  ",gegenkathete_2);
+            var tRotate = (alpha-45);
+            var pRotate = tRotate * (Math.PI/180);
+            
+            //1. Quadrant  left-down
+            var ankathete_2 = Math.cos(pRotate)*tLength;
+            var gegenkathete_2 = Math.sin(pRotate)*tLength;
+            var tx4 = this.startx+ankathete_2;
+            var ty4 = this.starty-gegenkathete_2;
+            
+            //if ($debug) Debug.write("gegenkathete_2 :: ",gegenkathete_2);
+            
+            var tRotate2 = 180-(alpha+45);
+            var pRotate2 = tRotate2 * (Math.PI/180);
+            
+            var gegenkathete_4 = Math.sin(pRotate2)*tLength;
+            var ankathete_4 = Math.cos(pRotate2)*tLength;
+            var tx2 = this.startx-ankathete_4;
+            var ty2 = this.starty-gegenkathete_4;
+            
+            //if ($debug) Debug.write("ankathete_4 :: ",ankathete_4);
+            
+            this.minClipArtx = tx2;
+            if (this.startx < tx2) {
+                this.minClipArtx = this.startx;
+            }
+            
+            this.minClipArty = tEndY;
+            if (ty2 < tEndY) {
+                this.minClipArty = ty2;
+            }
+            
+            this.maxClipArtx = tEndX;
+            if (tx4 > tEndX) {
+                this.maxClipArtx = tx4;
+            }
+            
+            this.maxClipArty = this.starty;
+            if (ty4 > this.starty) {
+                this.maxClipArty = ty4;
+            }
+            
+            //if ($debug) Debug.write("_1  ",ankathete_4);
+            
+            if (ankathete_4 < 0) {
+                this.deltaClipArtx = 0;
+                this.deltaClipArty = gegenkathete_4;
+            } else {
+                this.deltaClipArtx = ankathete_4;
+                this.deltaClipArty = this.maxClipArty-this.minClipArty;
+                
+                //this.deltaClipArtx = 0;
+                //this.deltaClipArty = 0;
+            }
+            
+        }
+        
+        //if (tx)
+        
+        //Scaling
+        //var basicLength = Math.sqrt((t.width*t.width)+(t.width*t.width));
+        //t.getDisplayObject()._xscale = (hypothenuse/basicLength)*100;
+        //t.getDisplayObject()._yscale = (hypothenuse/basicLength)*100;
+        
+        //if ($debug) Debug.write("hypothenuse "+hypothenuse);
+        
+        
+        
+        t.setAttribute("width",tLength);
+        t.setAttribute("height",tLength);
+
+        //Set previous to null
+        this.prevx = this.currentlayer.getMouse('x');
+        this.prevy = this.currentlayer.getMouse('y');  
+        
+        ]]>
+    </method> 
+    
+    <method name="drawClipArtToHistory" args="lastActionObject,parentView">
+    	<![CDATA[
+    	
+    	   var tmpCurrentlayer = new lz.drawViewNew(parentView,{
+                name:lastActionObject[lastActionObject.length-1],
+                x:lastActionObject[lastActionObject.length-5],
+                y:lastActionObject[lastActionObject.length-4],
+                width:lastActionObject[lastActionObject.length-3],
+                height:lastActionObject[lastActionObject.length-2],
+                opacity:lastActionObject[4]
+                });
+    	
+           new lz.drawClipArtWhiteBoard(tmpCurrentlayer,{
+                                    width:lastActionObject[7],
+                                    height:lastActionObject[8],
+                                    stretches:'both',
+                                    x:lastActionObject[5],
+                                    y:lastActionObject[6],
+                                    rotation:lastActionObject[3],
+                                    resource:lastActionObject[2],
+                                    clipArtEndx:lastActionObject[9],
+                                    clipArtEndy:lastActionObject[10],
+                                    name:'clipart'
+                                });
+             
+            if ($debug) Debug.write("x,y ",tmpCurrentlayer.x,tmpCurrentlayer.y,tmpCurrentlayer.width,tmpCurrentlayer.height);
+                                
+            //Add Layer to global Layer     
+            this.layers.push(tmpCurrentlayer);                                
+              
+            this.doSWFDocumentStatus(tmpCurrentlayer,lastActionObject[lastActionObject.length-7]);
+    	]]>
+    </method>
+    
+    <method name="endDrawClipArtDrag" args="cLayer">
+        <![CDATA[
+        
+            var oid_name = cLayer.name;
+            var tSource = cLayer.clipart.resource;
+            var tRotation = cLayer.clipart.rotation;
+            var tX = cLayer.clipart.x;
+            var tY = cLayer.clipart.y;
+            var tWidth = cLayer.clipart.width;
+            var tHeight = cLayer.clipart.height;
+               
+            //if ($debug) Debug.write("END 0 ",tY);
+            
+            cLayer.destroy();
+           
+            //if ($debug) Debug.write("END 1 ",this.minClipArty,this.starty);
+            
+            this.currentlayer = new lz.drawViewNew(this,{
+                                        x:this.minClipArtx,
+                                        y:this.minClipArty,
+                                        name:oid_name,
+                                        width:this.maxClipArtx-this.minClipArtx,
+                                        height:this.maxClipArty-this.minClipArty
+                                        //bgcolor:0x0033FF
+                                    });
+            
+            //if ($debug) Debug.write(" IS ZERO END1 ",this.currentlayer.x,this.currentlayer.y);                        
+                                    
+            new lz.drawClipArtWhiteBoard(this.currentlayer,{
+                                    width:tWidth,height:tHeight,
+                                    stretches:'both',
+                                    x:this.deltaClipArtx,
+                                    y:this.deltaClipArty,
+                                    rotation:tRotation,
+                                    resource:tSource,
+                                    clipArtEndx:this.clipArtEndx-this.minClipArtx,
+                                    clipArtEndy:this.clipArtEndy-this.minClipArty,
+                                    name:'clipart'
+                                    //bgcolor:0xFF3300
+                                });
+        
+            for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+                if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==oid_name) {
+                    
+                    //if ($debug) Debug.write("Found Object 1: ",this.baseactionobjectList[eg]);
+                    
+                	//actionObject[3] = tRotation;
+        //actionObject[5] = deltaClipArtx;
+        //actionObject[6] = deltaClipArty;
+        //actionObject[7] = deltaClipWidth;
+        //actionObject[8] = deltaClipHeight;
+        //actionObject[9] = deltaClipEndx;
+        //actionObject[10] = deltaClipEndy;
+        //actionObject[14] = x;//-5
+        //actionObject[15] = y;//-4
+        //actionObject[16] = width;//-3
+        //actionObject[17] = height;//-2
+        
+            	    this.baseactionobjectList[eg][3] = tRotation;
+                	this.baseactionobjectList[eg][5] = this.deltaClipArtx;
+                	this.baseactionobjectList[eg][6] = this.deltaClipArty;
+                	this.baseactionobjectList[eg][7] = tWidth;
+                	this.baseactionobjectList[eg][8] = tHeight;
+                	this.baseactionobjectList[eg][9] = this.clipArtEndx-this.minClipArtx;
+                	this.baseactionobjectList[eg][10] = this.clipArtEndy-this.minClipArty;
+                	
+                    this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5] = this.minClipArtx;
+                    this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4] = this.minClipArty;
+                    this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-3] = this.maxClipArtx-this.minClipArtx;
+                    this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-2] = this.maxClipArty-this.minClipArty;
+                    
+                    var newA = this.baseactionobjectList[eg];
+                    
+                    this.onsharedMessage('size',newA);
+                    
+                    break;
+                }
+            }   
+                           
+            //Set previous to null
+            this.prevx = null;
+            this.prevy = null;  
+        
+        ]]>
+    </method>
+    
+    <method name="endDrawClipArt">
+    	<![CDATA[
+    	
+            var oid_name = this.currentlayer.name;
+    	    var tSource = this.currentlayer.clipart.resource;
+    	    var tRotation = this.currentlayer.clipart.rotation;
+    	    var tX = this.currentlayer.clipart.x;
+    	    var tY = this.currentlayer.clipart.y;
+    	    var tWidth = this.currentlayer.clipart.width;
+    	    var tHeight = this.currentlayer.clipart.height;
+    	
+    	    //if ($debug) Debug.write("END 0 ",tY);
+    	    
+    	    this.currentlayer.destroy();
+    	       	        	    
+    	    //if ($debug) Debug.write("END 1 ",this.minClipArty,this.starty);
+    	    
+	     	if(this.isSnapToGrid){        		
+	    		if ($debug) Debug.write("####  this.minClipArtx y ",this.minClipArtx,this.minClipArty);
+	    	
+		    	//this.minClipArtx = Math.round(this.minClipArtx/this.gridWidth)*this.gridWidth;
+		    	//this.minClipArty = Math.round(this.minClipArty/this.gridWidth)*this.gridWidth;
+		    	
+		    	tX = Math.round(tX/this.gridWidth)*this.gridWidth;
+		    	tY = Math.round(tY/this.gridWidth)*this.gridWidth;
+		    	
+		    	this.currentlayer = new lz.drawViewNew(this,{
+    	                                x:tX,
+    	                                y:tY,
+                                        name:oid_name,
+                                        width:this.maxClipArtx-this.minClipArtx,
+                                        height:this.maxClipArty-this.minClipArty
+                                        //bgcolor:0x0033FF
+                                    });
+		    	
+            }else{
+    	    
+	    	    this.currentlayer = new lz.drawViewNew(this,{
+	    	                                x:this.minClipArtx,
+	    	                                y:this.minClipArty,
+	                                        name:oid_name,
+	                                        width:this.maxClipArtx-this.minClipArtx,
+	                                        height:this.maxClipArty-this.minClipArty
+	                                        //bgcolor:0x0033FF
+	                                    });
+            
+            //if ($debug) Debug.write(" IS ZERO END1 ",this.currentlayer.x,this.currentlayer.y);                        
+            }                                                
+            new lz.drawClipArtWhiteBoard(this.currentlayer,{
+                                    width:tWidth,height:tHeight,
+                                    stretches:'both',
+                                    x:this.deltaClipArtx,
+                                    y:this.deltaClipArty,
+                                    rotation:tRotation,
+                                    resource:tSource,
+                                    clipArtEndx:this.clipArtEndx-this.minClipArtx,
+                                    clipArtEndy:this.clipArtEndy-this.minClipArty,
+                                    name:'clipart'
+                                    //bgcolor:0xFF3300
+                                });
+    	
+            //if ($debug) Debug.write(" IS ZERO END2 ",this.deltaClipArtx,this.deltaClipArty);                        
+            
+            //if ($debug) Debug.write("END 2 ",this.currentlayer.y,this.currentlayer.clipart.y);
+            
+    	    this.drawClipArtRegisterFinal(
+    	                   oid_name,
+    	                   tSource,
+    	                   tRotation,
+    	                   1,
+    	                   this.minClipArtx,
+    	                   this.minClipArty,
+    	                   this.maxClipArtx-this.minClipArtx,
+    	                   this.maxClipArty-this.minClipArty,
+    	                   this.deltaClipArtx,
+    	                   this.deltaClipArty,
+    	                   tWidth,
+    	                   tHeight,
+    	                   this.clipArtEndx-this.minClipArtx,
+                           this.clipArtEndy-this.minClipArty,
+    	                   true,
+    	                   this.getSWFDocumentStatus(),
+    	                   this.getZIndex());
+    	     
+            this.layers.push(this.currentlayer);
+            this.checkStepLayers();    	                   
+    	                   
+            //Set previous to null
+            this.prevx = null;
+            this.prevy = null;  
+    	
+    	]]>
+    </method>
+    
+    <method name="drawClipArtRegisterFinal" args="newName,tSource,tRotation,opacity,x,y,width,height,deltaClipArtx,deltaClipArty,deltaClipWidth,deltaClipHeight,deltaClipEndx,deltaClipEndy,doCall,swfObj,zIndex">
+        var actionObject = new Array();
+        actionObject[0] = 'clipart';
+        actionObject[1] = newName;
+        actionObject[2] = tSource;
+        actionObject[3] = tRotation;
+        actionObject[4] = opacity;
+        actionObject[5] = deltaClipArtx;
+        actionObject[6] = deltaClipArty;
+        actionObject[7] = deltaClipWidth;
+        actionObject[8] = deltaClipHeight;
+        actionObject[9] = deltaClipEndx;
+        actionObject[10] = deltaClipEndy;
+        actionObject[11] = zIndex;//-8
+        actionObject[12] = swfObj;//-7
+        actionObject[13] = this.counter;//-6 
+        actionObject[14] = x;//-5
+        actionObject[15] = y;//-4
+        actionObject[16] = width;//-3
+        actionObject[17] = height;//-2
+        actionObject[18] = newName;//-1
+        this.baseactionobjectList.push(actionObject);       
+        if (doCall) this.onsharedMessage('draw',actionObject);
+    </method>      
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawEllipse.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawEllipse.lzx
new file mode 100644
index 0000000..6107959
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawEllipse.lzx
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDrawEllipse" extends="baseDrawRect" >
+    
+    <!-- 
+        for drawing ellipse the variable 
+        with *Dis* indicates if the line/fil-color is active (+1/-1)
+     -->
+    <attribute name="currentellipsestroke" value="0xFF6600" />
+    <attribute name="currentellipsestrokeDis" value="1" type="number" />
+    <attribute name="currentellipsestrokeFill" value="0xFFFF33" />
+    <attribute name="currentellipsestrokeFillDis" value="1" type="number" />
+    <attribute name="currentellipselineWidth" value="4" />
+    <attribute name="currentellipseOpacity" value="1" type="number" />
+  
+    <!-- ################
+    Ellipse
+     -->
+    <method name="startEllipse" args="oid_name">
+        //Debug.write("startEllipse");
+        if (oid_name == null) {
+            oid_name = 'ellipse'+this.getCounter();
+        }
+        this.currentlayer = new lz.drawViewNew(this,{
+            name:oid_name,width:this.width+2,height:this.height+2,
+            opacity:this.currentellipseOpacity});
+        this.drawlineOnObject(this.currentlayer,-1,-1,0,0);
+        this.drawlineOnObject(this.currentlayer,this.width,this.height,this.width+1,this.height+1);
+    </method>    
+    
+    <method name="endEllipse">
+        <![CDATA[
+            ////Debug.write(" this.startx, this.starty , this.endx, this.endy ",this.startx, this.starty , this.endx, this.endy);
+            var tmpName = this.currentlayer.name;
+            this.currentlayer.destroy();
+            var x = this.startx;
+            var width = this.endx - this.startx;
+            if (this.endx<this.startx){
+                x = this.endx;
+                width = Math.abs(width);
+            }
+            var y = this.starty;
+            var height = this.endy - this.starty;
+            if (this.endy<this.starty){
+                y = this.endy;
+                height = Math.abs(height);
+            }
+            
+            if(this.isSnapToGrid){        		
+	    			        	   
+	            x = Math.round(x/this.gridWidth)*this.gridWidth;
+		    	y = Math.round(y/this.gridWidth)*this.gridWidth;
+            
+            } 
+            
+            this.currentlayer = new lz.drawViewNew(this,{
+                name:tmpName,x:x,y:y,width:width,height:height,
+                opacity:this.currentellipseOpacity});
+                
+            new lz.drawViewInner(this.currentlayer,{
+                name:'_innerEllipse',x:0,y:0,width:width,height:height});
+                
+            //this.drawellipse(0,0,width,height);
+            //Debug.write("this.currentellipsestroke,this.currentellipselineWidth: ",this.currentellipsestroke,this.currentellipselineWidth);
+            
+            this.drawellipseHistory(this.currentlayer,
+                0,0,width,height,
+                this.currentellipsestroke,this.currentellipselineWidth,
+                this.currentellipsestrokeFill,this.currentellipsestrokeDis,
+                this.currentellipsestrokeFillDis)
+            
+            //Draw On Object    
+                
+            this.drawellipseregisterFinal(this.currentlayer.name,
+                this.currentellipsestroke,this.currentellipselineWidth,
+                this.currentellipsestrokeFill,this.currentellipsestrokeDis,
+                this.currentellipsestrokeFillDis,
+                x,y,width,height,this.getSWFDocumentStatus(),this.getZIndex());
+            this.layers.push(this.currentlayer);
+            this.checkStepLayers();
+        ]]>
+    </method>
+    
+    <method name="drawellipseToHistory"  args="lastActionObject,parentView">
+
+        var tmpCurrentlayer = new lz.drawViewNew(parentView,{
+            name:lastActionObject[lastActionObject.length-1],
+            x:lastActionObject[lastActionObject.length-5],
+            y:lastActionObject[lastActionObject.length-4],
+            width:lastActionObject[lastActionObject.length-3],
+            height:lastActionObject[lastActionObject.length-2],
+            opacity:lastActionObject[6]});
+            
+        new lz.drawViewInner(tmpCurrentlayer,{
+                name:'_innerEllipse',x:0,y:0,
+                width:lastActionObject[lastActionObject.length-3],
+                height:lastActionObject[lastActionObject.length-2]});
+                
+        //Debug.write("lastActionObject[1],lastActionObject[2]: ",lastActionObject[1],lastActionObject[2]);
+        this.drawellipseHistory(tmpCurrentlayer,
+            0,0,lastActionObject[lastActionObject.length-3],lastActionObject[lastActionObject.length-2],
+            lastActionObject[1],lastActionObject[2],
+            lastActionObject[3],lastActionObject[4],
+            lastActionObject[5]);
+
+        this.doSWFDocumentStatus(tmpCurrentlayer,lastActionObject[lastActionObject.length-7]);
+    </method>
+    
+    <method name="redrawEllipseItemByScaling" args="objRef">
+        //if ($debug) Debug.write("redrawRectItemByScaling: "+objRef);
+        this.currentlayer = objRef;
+        this.currentlayer._innerEllipse.destroy();
+        new lz.drawViewInner(this.currentlayer,{
+            name:'_innerEllipse',x:0,y:0,width:objRef.width,height:objRef.height});
+        this.drawellipseHistory(this.currentlayer,0,0,
+            objRef.width,objRef.height,
+            this.currentellipsestroke,this.currentellipselineWidth,
+            this.currentellipsestrokeFill,this.currentellipsestrokeDis,
+            this.currentellipsestrokeFillDis);
+    </method> 
+    
+    <method name="drawellipseHistory" args="parentObj,x1,y1,x2,y2,stroke,line,fill,strokeDis,fillDis">
+        <![CDATA[
+        
+            //Debug.write("stroke,line: ",stroke,line);
+            var rx = (x1+x2)/2;
+            var ry = (y1+y2)/2;
+            var xradius = Math.abs(rx-x1);
+            var yradius = Math.abs(ry-y1);
+            
+            parentObj._innerEllipse.lineWidth = line;
+            parentObj._innerEllipse.oval(rx,ry,xradius,yradius);
+            
+            if (strokeDis!=-1){
+                parentObj._innerEllipse.strokeStyle = stroke;
+                parentObj._innerEllipse.stroke();
+            }
+
+            if (fillDis!=-1){
+                parentObj._innerEllipse.fillStyle = fill;
+                parentObj._innerEllipse.fill();
+            }
+
+        ]]>   
+    </method>   
+     
+    <method name="drawellipse" args="x1,y1,x2,y2">
+        <![CDATA[
+            //Debug.write("stroke,line: ",this.currentellipsestroke,this.currentellipselineWidth);
+            var rx = (x1+x2)/2;
+            var ry = (y1+y2)/2;
+            var xradius = Math.abs(rx-x1);
+            var yradius = Math.abs(ry-y1);
+            
+            currentlayer.lineWidth = this.currentellipselineWidth;
+            currentlayer.oval(rx,ry,xradius,yradius);
+            
+            if (this.currentellipsestrokeDis!=-1){
+                currentlayer.strokeStyle = this.currentellipsestroke;
+                currentlayer.stroke();
+            }
+            
+            if (this.currentellipsestrokeFillDis!=-1){
+                currentlayer.fillStyle = this.currentellipsestrokeFill;
+                currentlayer.fill(); 
+            }
+    
+        ]]>   
+    </method>
+    
+    <method name="drawellipseregisterFinal" args="newName,stroke,line,fill,strokeDis,fillDis,x,y,width,height,swfObj,zIndex" >
+        var actionObject = new Array();
+        actionObject[0] = 'ellipse';
+        actionObject[1] = stroke;
+        actionObject[2] = line;
+        actionObject[3] = fill;
+        actionObject[4] = strokeDis;
+        actionObject[5] = fillDis;
+        actionObject[6] = this.currentellipseOpacity;
+        actionObject[7] = zIndex;//-8
+        actionObject[8] = swfObj;//-7
+        actionObject[9] = this.counter;//-6
+        actionObject[10] = x;//-5
+        actionObject[11] = y;//-4
+        actionObject[12] = width;//-3
+        actionObject[13] = height;//-2 
+        actionObject[14] = newName;//-1
+        this.baseactionobjectList.push(actionObject);
+        this.onsharedMessage('draw',actionObject);
+    </method>
+
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawLine.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawLine.lzx
new file mode 100644
index 0000000..ce91a74
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawLine.lzx
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<class name="baseDrawLine" extends="baseDrawPaint" >
+      
+		<!-- for drawing line -->
+		<attribute name="currentlinestroke" value="0xFF6600" />
+		<attribute name="currentlinelineWidth" value="2" type="number" />   
+		<attribute name="currentlineOpacity" value="1" type="number" />
+        
+		<!-- ###########################
+			Line
+			 -->
+    
+		<method name="startLine" args="oid_name">
+
+			//Debug.write("startLine ",this.startx,this.starty);
+			if (oid_name == null) {
+				oid_name = 'line' + this.getCounter()
+			}
+			this.currentlayer = new lz.drawViewNew(this, {
+						name : oid_name,
+						width : this.width + 2,
+						height : this.height + 2,
+						x : -1,
+						y : -1,
+						opacity : this.currentlineOpacity
+					});
+			this.drawlineOnObject(this.currentlayer, -1, -1, 0, 0);
+			this.drawlineOnObject(this.currentlayer, this.width, this.height,
+					this.width + 1, this.height + 1);
+
+			//Set previous to null
+			this.prevx = null;
+			this.prevy = null;
+
+			currentlayer.strokeStyle = this.currentlinestroke;
+			currentlayer.lineWidth = this.currentlinelineWidth;
+			//currentlayer.fillstyle = '0x000000';
+
+		</method>
+    
+		<method name="endLine">
+        ////Debug.write("endLine",this.startx,this.starty,this.endx,this.endy);
+		<![CDATA[
+			var tempName = this.currentlayer.name;
+			this.currentlayer.destroy();
+
+			//GetBounds of that Object
+			var minx = this.width + 2;
+			var miny = this.height + 2;
+			var maxx = -2;
+			var maxy = -2;
+
+			if (this.startx < minx)
+				minx = this.startx;
+			if (this.endx < minx)
+				minx = this.endx;
+
+			if (this.startx > maxx)
+				maxx = this.startx;
+			if (this.endx > maxx)
+				maxx = this.endx;
+
+			if (this.starty < miny)
+				miny = this.starty;
+			if (this.endy < miny)
+				miny = this.endy;
+
+			if (this.starty > maxy)
+				maxy = this.starty;
+			if (this.endy > maxy)
+				maxy = this.endy;
+
+			var width = maxx - minx;
+			var height = maxy - miny;
+
+			var x1 = this.startx - minx + (this.currentlinelineWidth / 2);
+			var y1 = this.starty - miny + (this.currentlinelineWidth / 2);
+			var x2 = this.endx - minx + (this.currentlinelineWidth / 2);
+			var y2 = this.endy - miny + (this.currentlinelineWidth / 2);
+
+			if (this.isSnapToGrid) {
+
+				xgrid = Math.round((minx - 1 - (this.currentlinelineWidth / 2))
+						/ this.gridWidth)
+						* this.gridWidth;
+				ygrid = Math.round((miny - 1 - (this.currentlinelineWidth / 2))
+						/ this.gridWidth)
+						* this.gridWidth;
+
+				this.currentlayer = new lz.drawViewNew(this, {
+							name : tempName,
+							x : xgrid,
+							y : ygrid,
+							width : (width + this.currentlinelineWidth),
+							height : (height + this.currentlinelineWidth),
+							opacity : this.currentlineOpacity
+						});
+
+			} else {
+
+				this.currentlayer = new lz.drawViewNew(this, {
+							name : tempName,
+							x : (minx - 1 - (this.currentlinelineWidth / 2)),
+							y : (miny - 1 - (this.currentlinelineWidth / 2)),
+							width : (width + this.currentlinelineWidth),
+							height : (height + this.currentlinelineWidth),
+							opacity : this.currentlineOpacity
+						});
+			}
+			//this.currentlayer.fillstyle = '0x000000';
+			this.currentlayer.lineWidth = this.currentlinelineWidth;
+			this.currentlayer.strokeStyle = this.currentlinestroke;
+
+			this.drawline((x1), (y1), (x2), (y2));
+
+			//Add Layer to global Layer     
+			this.layers.push(this.currentlayer);
+
+			this.lineregisterFinal(this.currentlayer.name,
+					this.currentlinestroke, this.currentlinelineWidth,
+					this.currentlineOpacity, this.currentlayer.x,
+					this.currentlayer.y, this.currentlayer.width,
+					this.currentlayer.height, x1, y1, x2, y2, true, this
+							.getSWFDocumentStatus(), this.getZIndex());
+		]]>
+		</method> 
+    
+    
+		<method name="lineregisterFinal" args="newName,stroke,line,opacity,x,y,width,height,x1,y1,x2,y2,doCall,swfObj,zIndex">
+			var actionObject = new Array();
+			actionObject[0] = 'line';
+			actionObject[1] = stroke;
+			actionObject[2] = line;
+			actionObject[3] = opacity;
+			actionObject[4] = x1
+			actionObject[5] = y1;
+			actionObject[6] = x2;
+			actionObject[7] = y2;
+			actionObject[8] = zIndex;//-8
+			actionObject[9] = swfObj;//-7
+			actionObject[10] = this.counter;//-6
+			actionObject[11] = x;//-5
+			actionObject[12] = y;//-4
+			actionObject[13] = width;//-3
+			actionObject[14] = height;//-2
+			actionObject[15] = newName;//-1
+			this.baseactionobjectList.push(actionObject);
+			if (doCall)
+				this.onsharedMessage('draw', actionObject);
+		</method>       
+    
+    
+		<method name="lineactionHistory" args="lastActionObject,parentView">
+		<![CDATA[
+
+			//Debug.write("## lineactionHistory",parentView," 2 ## NEW x,y ",lastActionObject[lastActionObject.length-5],lastActionObject[lastActionObject.length-4]," width,height: ",lastActionObject[lastActionObject.length-3],lastActionObject[lastActionObject.length-2]);
+
+			var tmpCurrentlayer = new lz.drawViewNew(parentView, {
+						name : lastActionObject[lastActionObject.length - 1],
+						x : lastActionObject[lastActionObject.length - 5],
+						y : lastActionObject[lastActionObject.length - 4],
+						width : lastActionObject[lastActionObject.length - 3],
+						height : lastActionObject[lastActionObject.length - 2],
+						opacity : lastActionObject[3]
+					});
+
+			//this.currentlayer.fillstyle = lastActionObject[1];
+			tmpCurrentlayer.lineWidth = lastActionObject[2];
+			tmpCurrentlayer.strokeStyle = lastActionObject[1];
+
+			this.drawlineOnObject(tmpCurrentlayer, lastActionObject[4],
+					lastActionObject[5], lastActionObject[6],
+					lastActionObject[7]);
+
+			//Add Layer to global Layer     
+			this.layers.push(tmpCurrentlayer);
+
+			this.doSWFDocumentStatus(tmpCurrentlayer,
+					lastActionObject[lastActionObject.length - 7]);
+		]]>
+		</method>
+    
+	</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawPaint.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawPaint.lzx
new file mode 100644
index 0000000..00af3e9
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawPaint.lzx
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<class name="baseDrawPaint" extends="baseDraw" >
+    
+		<!-- paint -->
+		<attribute name="currentlayerstroke" value="0xFF6600" />
+		<attribute name="currentlayerlineWidth" value="2" type="number" />
+		<attribute name="currentlayerOpacity" value="1" type="number" />
+    
+		<!-- TODO: Check if needed, seems to have no reference -->
+		<attribute name="painttrans" value="false" type="boolean" />
+          
+		<!-- #####################
+				Paint
+			 -->
+    
+		<method name="drawline" args="x1,y1,x2,y2">
+		<![CDATA[
+			currentlayer.beginPath();
+			currentlayer.moveTo(x1, y1);
+			currentlayer.lineTo(x2, y2);
+			currentlayer.stroke();
+		]]>
+		</method>
+    
+		<method name="drawlineOnObject" args="obj,x1,y1,x2,y2">
+		<![CDATA[
+			obj.beginPath();
+			obj.moveTo(x1, y1);
+			obj.lineTo(x2, y2);
+			obj.stroke();
+		]]>
+		</method>
+        
+    
+		<method name="drawlineRegisterPaint" args="x1,y1,x2,y2">
+			var actionObject = new Array();
+			actionObject[0] = 'point';
+			actionObject[1] = x1;
+			actionObject[2] = y1;
+			actionObject[3] = x2;
+			actionObject[4] = y2;
+			this.basetempactionobjectList.push(actionObject);
+		</method> 
+         
+		<method name="startPaint">
+
+			//Debug.write("startPaint ",this.startx,this.starty);
+			this.currentlayer = new lz.drawViewNew(this, {
+						name : 'paint' + this.getCounter(),
+						width : this.width + 2,
+						height : this.height + 2,
+						x : -1,
+						y : -1,
+						opacity : this.currentlayerOpacity
+					});
+			this.drawlineOnObject(this.currentlayer, -1, -1, 0, 0);
+			this.drawlineOnObject(this.currentlayer, this.width, this.height,
+					this.width + 1, this.height + 1);
+
+			this.startx = this.currentlayer.getMouse('x');
+			this.starty = this.currentlayer.getMouse('y');
+
+			//Set previous to null
+			this.prevx = null;
+			this.prevy = null;
+
+			currentlayer.strokeStyle = this.currentlayerstroke;
+			currentlayer.lineWidth = this.currentlayerlineWidth;
+			currentlayer.fillstyle = '0x000000';
+
+			this.basetempactionobjectList = new Array();
+
+			//beginFill( the_colorpicker.selectedColor );
+		</method>
+
+		<method name="endPaint">
+        ////Debug.write("endPaint");
+		<![CDATA[
+			var tempName = this.currentlayer.name;
+			this.currentlayer.destroy();
+
+			//GetBounds of that Object
+			var minx = this.width + 2;
+			var miny = this.height + 2;
+			var maxx = -2;
+			var maxy = -2;
+
+			for (var eg = 0; eg < this.basetempactionobjectList.length; eg++) {
+				////Debug.write(this.basetempactionobjectList[eg][1],this.basetempactionobjectList[eg][3]);
+				if (this.basetempactionobjectList[eg][1] < minx)
+					minx = this.basetempactionobjectList[eg][1];
+				if (this.basetempactionobjectList[eg][3] < minx)
+					minx = this.basetempactionobjectList[eg][3];
+
+				if (this.basetempactionobjectList[eg][1] > maxx)
+					maxx = this.basetempactionobjectList[eg][1];
+				if (this.basetempactionobjectList[eg][3] > maxx)
+					maxx = this.basetempactionobjectList[eg][3];
+
+				if (this.basetempactionobjectList[eg][2] < miny)
+					miny = this.basetempactionobjectList[eg][2];
+				if (this.basetempactionobjectList[eg][4] < miny)
+					miny = this.basetempactionobjectList[eg][4];
+
+				if (this.basetempactionobjectList[eg][2] > maxy)
+					maxy = this.basetempactionobjectList[eg][2];
+				if (this.basetempactionobjectList[eg][4] > maxy)
+					maxy = this.basetempactionobjectList[eg][4];
+			}
+
+			for (var eg = 0; eg < this.basetempactionobjectList.length; eg++) {
+
+				this.basetempactionobjectList[eg][1] -= minx;
+				this.basetempactionobjectList[eg][2] -= miny;
+				this.basetempactionobjectList[eg][3] -= minx;
+				this.basetempactionobjectList[eg][4] -= miny
+
+			}
+
+			var width = maxx - minx;
+			var height = maxy - miny;
+			//if ($debug) Debug.info("## 1 ## NEW x,y ",minx,miny," width,height: ",width,height);
+
+			if (width < 2 && height < 2) {
+
+				//if ($debug) Debug.info("Add minimum size of Painting Line");
+
+				if (this.basetempactionobjectList.length > 0) {
+
+					var lastPoint = this.basetempactionobjectList[this.basetempactionobjectList.length
+							- 1];
+
+					var actionObject = new Array();
+					actionObject[0] = 'point';
+					actionObject[1] = lastPoint[3];
+					actionObject[2] = lastPoint[4];
+					actionObject[3] = lastPoint[3] + 2;
+					actionObject[4] = lastPoint[4] + 2;
+					this.basetempactionobjectList.push(actionObject);
+
+				} else {
+
+					//if ($debug) Debug.info("## 2 ## CURRENT width,height ",this.width,this.height);
+
+					minx = this.startx;
+					miny = this.starty;
+
+					var actionObject = new Array();
+					actionObject[0] = 'point';
+					actionObject[1] = 0;
+					actionObject[2] = 0;
+					actionObject[3] = 2;
+					actionObject[4] = 2;
+					this.basetempactionobjectList.push(actionObject);
+
+					width = 2;
+					height = 2;
+
+				}
+
+			}
+
+			if (this.isSnapToGrid) {
+
+				xgrid = Math.round((minx - 1) / this.gridWidth)
+						* this.gridWidth;
+				ygrid = Math.round((miny - 1) / this.gridWidth)
+						* this.gridWidth;
+
+				this.currentlayer = new lz.drawViewNew(this, {
+							name : tempName,
+							x : xgrid,
+							y : ygrid,
+							width : width,
+							height : height,
+							opacity : this.currentlayerOpacity
+						});
+			} else {
+				this.currentlayer = new lz.drawViewNew(this, {
+							name : tempName,
+							x : minx - 1,
+							y : miny - 1,
+							width : width,
+							height : height,
+							opacity : this.currentlayerOpacity
+						});
+			}
+
+			this.currentlayer.fillstyle = '0x000000';
+			this.currentlayer.lineWidth = this.currentlayerlineWidth;
+			this.currentlayer.strokeStyle = this.currentlayerstroke;
+
+			for (var eg = 0; eg < this.basetempactionobjectList.length; eg++)
+				this.drawline(this.basetempactionobjectList[eg][1],
+						this.basetempactionobjectList[eg][2],
+						this.basetempactionobjectList[eg][3],
+						this.basetempactionobjectList[eg][4]);
+
+			//this.currentlayer.setAttribute('stretches','both');
+
+			//Add Layer to global Layer     
+			this.layers.push(this.currentlayer);
+
+			this.registerFinal(this.getSWFDocumentStatus(), this.getZIndex());
+		]]>
+		</method>    
+
+		<method name="registerFinal" args="swfObj,zIndex">
+			var actionObject = new Array();
+			actionObject[0] = 'paint';
+			actionObject[1] = this.basetempactionobjectList;
+			actionObject[2] = currentlayer.fillstyle;
+			actionObject[3] = currentlayer.lineWidth;
+			actionObject[4] = currentlayer.strokeStyle;
+			actionObject[5] = this.currentlayerOpacity;
+			actionObject[6] = zIndex;//-8
+			actionObject[7] = swfObj;//-7
+			actionObject[8] = this.counter;//-6
+			actionObject[9] = currentlayer.x;//-5
+			actionObject[10] = currentlayer.y;//-4
+			actionObject[11] = currentlayer.width;//-3
+			actionObject[12] = currentlayer.height;//-2
+			actionObject[13] = this.currentlayer.name;//-1
+			if ($debug)
+				Debug.write("registerFinal :: ", actionObject);
+			this.baseactionobjectList.push(actionObject);
+			this.onsharedMessage('draw', actionObject);
+		</method>      
+    
+    
+		<method name="paintactionHistory" args="lastActionObject,parentView">
+		<![CDATA[
+			if ($debug) Debug.write("## paintactionHistory", parentView, " opacity:",
+						lastActionObject[5]);
+
+			var tmpCurrentlayer = new lz.drawViewNew(parentView, {
+						name : lastActionObject[lastActionObject.length - 1],
+						x : lastActionObject[lastActionObject.length - 5],
+						y : lastActionObject[lastActionObject.length - 4],
+						width : lastActionObject[lastActionObject.length - 3],
+						height : lastActionObject[lastActionObject.length - 2],
+						opacity : lastActionObject[5]
+					});
+					
+			if ($debug) ("paintactionHistory 1 ",tmpCurrentlayer.x,tmpCurrentlayer.y,tmpCurrentlayer.opacity);
+
+			tmpCurrentlayer.fillstyle = lastActionObject[2];
+			tmpCurrentlayer.lineWidth = lastActionObject[3];
+			tmpCurrentlayer.strokeStyle = lastActionObject[4];
+			
+			if ($debug) ("paintactionHistory 2 ",tmpCurrentlayer.fillstyle,tmpCurrentlayer.lineWidth,tmpCurrentlayer.strokeStyle);
+
+			for (var eg = 0; eg < lastActionObject[1].length; eg++) {
+				if ($debug) ("paintactionHistory 3 ",lastActionObject[1][eg][1], lastActionObject[1][eg][2],
+										lastActionObject[1][eg][3], lastActionObject[1][eg][4]);
+				this.drawlineOnObject(tmpCurrentlayer,
+						lastActionObject[1][eg][1], lastActionObject[1][eg][2],
+						lastActionObject[1][eg][3], lastActionObject[1][eg][4]);
+			}
+
+			//tmpCurrentlayer.setAttribute('stretches','both');
+			this.doSWFDocumentStatus(tmpCurrentlayer,
+					lastActionObject[lastActionObject.length - 7]);
+		]]>
+		</method>
+    
+	</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawPointer.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawPointer.lzx
new file mode 100644
index 0000000..e95316d
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawPointer.lzx
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDrawPointer" extends="baseDrawEllipse" >
+      
+    <!-- Pointers -->
+    
+    <method name="endPointerWhiteBoard">
+        this.drawPointerWhiteBoardFinal(
+                "pointer"+this.getCounter(),
+                this.getMouse('x'),this.getMouse('y'),
+                0,0
+            )
+    </method>
+
+    <method name="drawPointerToHistory" args="actionObject,parentObj">
+        new lz.whiteBoardPointer(parentObj,{
+            x:actionObject[actionObject.length-5],
+            y:actionObject[actionObject.length-4],
+            userName:actionObject[1]
+        })
+    </method>
+
+    <method name="drawPointerWhiteBoardFinal" args="newName,x,y,width,height" >
+    	var displayedName = canvas.currentuser;
+    	if (canvas.firstName.length > 0) {
+    		displayedName = canvas.firstName;
+    	}
+    	if (canvas.lastName.length > 0) {
+    		if (canvas.firstName.length > 0) {
+    			displayedName += " " + canvas.lastName;
+    		} else {
+    			displayedName = canvas.lastName;
+    		}
+    	}
+    	
+        var actionObject = new Array();
+        actionObject[0] = 'pointerWhiteBoard';
+        actionObject[1] = displayedName;
+        actionObject[2] = this.counter;//-6
+        actionObject[3] = x;//-5
+        actionObject[4] = y;//-4
+        actionObject[5] = width;//-3
+        actionObject[6] = height;//-2
+        actionObject[7] = newName;//-1
+        this.baseactionobjectList.push(actionObject);
+        this.onsharedMessage('draw',actionObject);
+        this.drawPointerToHistory(actionObject,this);
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawRect.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawRect.lzx
new file mode 100644
index 0000000..c3fcd4e
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawRect.lzx
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDrawRect" extends="baseDrawSelect" >
+    
+    <!--  
+        for drawing rectangles the variable 
+        with *Dis* indicates if the line/fil-color is active (+1/-1)
+     -->
+    <attribute name="currentrectanglestroke" value="0xFF6600" />
+    <attribute name="currentrectanglestrokeDis" value="1" type="number" />
+    <attribute name="currentrectanglestrokeFill" value="0xFFFF33" />
+    <attribute name="currentrectanglestrokeFillDis" value="1" type="number" />
+    <attribute name="currentrectangleineWidth" value="4" type="number" />
+    <attribute name="currentrectangleOpacity" value="1" type="number" />
+      
+    <!-- ###########################
+        Rectangle
+     -->
+    
+    <method name="startRect" args="oid_name">
+        if (oid_name == null){
+            oid_name = 'rectangle'+this.getCounter();
+        }
+        //Debug.write("startRect");
+        this.currentlayer = new lz.drawViewNew(this,{
+            name:oid_name,width:this.width,height:this.height,
+            opacity:this.currentrectangleOpacity});
+
+        this.drawlineOnObject(this.currentlayer,-1,-1,0,0);
+        this.drawlineOnObject(this.currentlayer,this.width,this.height,this.width+1,this.height+1);
+    </method>  
+
+    <method name="endRect">
+        <![CDATA[        
+        
+            ////Debug.write(" this.startx, this.starty , this.endx, this.endy ",this.startx, this.starty , this.endx, this.endy);
+            var tmpName = this.currentlayer.name;
+            this.currentlayer.destroy();
+            var x = this.startx;
+            var width = this.endx - this.startx;
+            if (this.endx<this.startx){
+                x = this.endx;
+                width = Math.abs(width);
+            }
+            var y = this.starty;
+            var height = this.endy - this.starty;
+            if (this.endy<this.starty){
+                y = this.endy;
+                height = Math.abs(height);
+            }
+            
+            if(this.isSnapToGrid){        		
+	    			        	   
+	            x = Math.round(x/this.gridWidth)*this.gridWidth;
+		    	y = Math.round(y/this.gridWidth)*this.gridWidth;
+            
+            } 
+            
+            this.currentlayer = new lz.drawViewNew(this,{
+                name:tmpName,x:x,y:y,width:width,height:height,
+                opacity:this.currentrectangleOpacity});
+                
+            new lz.drawViewInner(this.currentlayer,{
+                name:'_innerRect',x:0,y:0,width:width,height:height});
+                
+            this.drawrectangleHistory(this.currentlayer,0,0,width,height,
+                this.currentrectanglestroke,this.currentrectangleineWidth,
+                this.currentrectanglestrokeFill,this.currentrectanglestrokeDis,
+                this.currentrectanglestrokeFillDis);
+            //this.currentlayer.setAttribute('stretches','both');
+            this.drawrectregisterFinal(this.currentlayer.name,this.currentrectanglestroke,
+                this.currentrectangleineWidth,this.currentrectanglestrokeFill,
+                this.currentrectanglestrokeDis,this.currentrectanglestrokeFillDis,
+                x,y,width,height,this.getSWFDocumentStatus(),
+                this.getZIndex());
+            this.layers.push(this.currentlayer);
+            this.checkStepLayers();
+        ]]>
+    </method> 
+    
+    <!--
+        Terminate the usage of this function
+     --> 
+    <method name="drawrectangle" args="x1,y1,x2,y2">
+        <![CDATA[
+            
+            currentlayer.lineWidth = this.currentrectangleineWidth;
+            currentlayer.beginPath();
+            currentlayer.moveTo(x1,y1);
+            currentlayer.lineTo(x1,y2);
+            currentlayer.lineTo(x2,y2);
+            currentlayer.lineTo(x2,y1);
+            currentlayer.lineTo (x1,y1);
+            currentlayer.closePath();
+            
+            if (this.currentrectanglestrokeDis!=-1){
+                currentlayer.strokeStyle = this.currentrectanglestroke;
+                currentlayer.stroke();
+            }
+
+            if (this.currentrectanglestrokeFillDis!=-1){
+                currentlayer.fillStyle = this.currentrectanglestrokeFill;
+                currentlayer.fill();
+            }
+            
+        ]]>   
+    </method>   
+    
+    <method name="redrawRectItemByScaling" args="objRef">
+        //if ($debug) Debug.write("redrawRectItemByScaling: "+objRef);
+        this.currentlayer = objRef;
+        this.currentlayer._innerRect.destroy();
+        new lz.drawViewInner(this.currentlayer,{
+            name:'_innerRect',x:0,y:0,width:objRef.width,height:objRef.height});
+        this.drawrectangleHistory(this.currentlayer,0,0,
+            objRef.width,objRef.height,
+            this.currentrectanglestroke,this.currentrectangleineWidth,
+            this.currentrectanglestrokeFill,this.currentrectanglestrokeDis,
+            this.currentrectanglestrokeFillDis);
+    </method> 
+    
+    <method name="drawrectangleToHistory" args="lastActionObject,parentView">
+        var tmpCurrentlayer = new lz.drawViewNew(parentView,{
+            name:lastActionObject[lastActionObject.length-1],
+            x:lastActionObject[lastActionObject.length-5],
+            y:lastActionObject[lastActionObject.length-4],
+            width:lastActionObject[lastActionObject.length-3],
+            height:lastActionObject[lastActionObject.length-2],
+            opacity:lastActionObject[6]});
+        new lz.drawViewInner(tmpCurrentlayer,{
+                name:'_innerRect',x:0,y:0,
+                width:lastActionObject[lastActionObject.length-3],
+                height:lastActionObject[lastActionObject.length-2]});
+        this.drawrectangleHistory(tmpCurrentlayer,0,0,
+            lastActionObject[lastActionObject.length-3],lastActionObject[lastActionObject.length-2],
+            lastActionObject[1],lastActionObject[2],lastActionObject[3],lastActionObject[4],lastActionObject[5]);
+            
+        this.doSWFDocumentStatus(tmpCurrentlayer,lastActionObject[lastActionObject.length-7]);
+    </method>
+    
+    <method name="drawrectangleHistory" args="parentObj,x1,y1,x2,y2,stroke,line,fill,strokeDis,fillDis">
+        <![CDATA[
+            //Debug.write("drawrectangleHistory",parentObj,x1,y1,x2,y2,stroke,line,fill,strokeDis,fillDis);
+            parentObj._innerRect.lineWidth = line;
+            parentObj._innerRect.beginPath();
+            parentObj._innerRect.moveTo(x1,y1);
+            parentObj._innerRect.lineTo(x1,y2);
+            parentObj._innerRect.lineTo(x2,y2);
+            parentObj._innerRect.lineTo(x2,y1);
+            parentObj._innerRect.lineTo (x1,y1);
+            
+            if (strokeDis!=-1){
+                parentObj._innerRect.strokeStyle = stroke;
+                parentObj._innerRect.stroke();
+            }
+            
+            if (fillDis!=-1){
+                parentObj._innerRect.fillStyle = fill;
+                parentObj._innerRect.fill();
+            }
+            
+        ]]>   
+    </method>  
+    
+    <method name="drawrectregisterFinal" args="newName,stroke,line,fill,strokeDis,fillDis,x,y,width,height,swfObj,zIndex" >
+        Debug.write("drawrectregisterFinal",newName,stroke,line,fill,strokeDis,fillDis,x,y,width,height);
+        var actionObject = new Array();
+        actionObject[0] = 'rectangle';
+        actionObject[1] = stroke;
+        actionObject[2] = line;
+        actionObject[3] = fill;
+        actionObject[4] = strokeDis;
+        actionObject[5] = fillDis;
+        actionObject[6] = this.currentrectangleOpacity;
+        actionObject[7] = zIndex;//-8
+        actionObject[8] = swfObj;//-7
+        actionObject[9] = this.counter;//-6
+        actionObject[10] = x;//-5
+        actionObject[11] = y;//-4
+        actionObject[12] = width;//-3
+        actionObject[13] = height;//-2  
+        actionObject[14] = newName;//-1
+        this.baseactionobjectList.push(actionObject);
+        this.onsharedMessage('draw',actionObject);
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawSelect.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawSelect.lzx
new file mode 100644
index 0000000..932dded
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawSelect.lzx
@@ -0,0 +1,465 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDrawSelect" extends="baseDrawTriangle" >
+    
+    <!--  
+        for drawing rectangles the variable 
+        with *Dis* indicates if the line/fil-color is active (+1/-1)
+     -->
+    <attribute name="currentSelectanglestroke" value="0x8e8986" />
+    <attribute name="currentSelectanglestrokeDis" value="1" type="number" />
+    <attribute name="currentSelectanglestrokeFill" value="0x8e8986" />
+    <attribute name="currentSelectanglestrokeFillDis" value="1" type="number" />
+    <attribute name="currentSelectangleineWidth" value="4" type="number" />
+    <attribute name="currentSelectangleOpacity" value="0.2" type="number" />
+    
+    <method name="copyWhiteboardObjects">
+        this.doCopyWhiteboardObjects();
+    </method>
+    
+    <method name="cutWhiteboardObjects">
+    	<![CDATA[
+        	this.doCopyWhiteboardObjects();
+        	for (var eg=0;eg<this.copyObject.length;eg++){                
+                var itemToDelete = this.copyObject[eg][this.copyObject[eg].length-1];
+                this.deleteItemByName(itemToDelete);
+                
+                if ($debug) Debug.write("cut name ", this.copyObject[eg][this.copyObject[eg].length-1]);
+            }
+            
+            //if (this.boundingIsActive){
+            //    this.boundingref._innerDrag.onmouseup.sendEvent();
+            //}
+        ]]>
+    </method>
+    
+    <method name="doCopyWhiteboardObjects">
+        <![CDATA[  
+            if ($debug) Debug.write("tCopyObject :0: ",this.boundingIsActive);
+        
+            if (this.boundingIsActive) {
+            	
+            	this.copyObject = new Array();
+            	
+            	var tObject = new Array();
+                var tCopyObject = this.getBaseObjectByName(this.boundingref.objRef.name);
+                
+                if ($debug) Debug.write("tCopyObject :1: ",this.boundingref.objRef.name);
+                if ($debug) Debug.write("tCopyObject :2: ",tCopyObject);
+                
+                for (var i=0;i<tCopyObject.length;i++) {
+                    var tItemObject = tCopyObject[i];
+                    
+                    if (tItemObject instanceof Array) {
+                        
+                        var storingItemObject = new Array();
+                        
+                        for (var k=0;k<tItemObject.length;k++) {
+                            var kItemObject = tItemObject[k];
+                            
+                            if (kItemObject instanceof Array) {
+                                
+                                var subStoringItemObject = new Array();
+                                
+                                for (var l=0;l<kItemObject.length;l++) {
+                                    var lItemObject = kItemObject[l];
+                                    subStoringItemObject.push(lItemObject);
+                                }
+                                
+                                storingItemObject.push(subStoringItemObject);
+                            } else {
+                                storingItemObject.push(kItemObject);
+                            }
+                            
+                            
+                        }
+                        
+                        tObject[i] = storingItemObject;
+                        
+                    } else {
+                        tObject[i] = tItemObject;
+                    }
+                    
+                }
+                
+                this.copyObject.push(tObject);
+            	
+            } else {
+        
+            	this.copyObject = this.selectedObjects;
+            
+            }
+            
+            if ($debug) Debug.write("to this.copyObject ", this.copyObject);
+            
+        ]]>
+    </method>
+    
+    
+    
+    <method name="paste" args="paste_x, paste_y">
+        <![CDATA[       
+            //if ($debug) Debug.write("paste name ", this.copyObject[eg][this.copyObject[eg].length-1]);
+            if ($debug) Debug.write("paste copyObject", this.copyObject);
+            
+            if(this.isSnapToGrid){ 
+                paste_x = Math.round(paste_x/this.gridWidth)*this.gridWidth;
+                paste_y = Math.round(paste_y/this.gridWidth)*this.gridWidth;
+            }
+            
+            var shift_x = this.width+1;
+            var shift_y = this.height+1;
+            
+            for (var eg=0;eg<this.copyObject.length;eg++){
+            	
+            	var tx = this.copyObject[eg][this.copyObject[eg].length-5];
+            	var ty = this.copyObject[eg][this.copyObject[eg].length-4];  
+            	
+            	if (tx < shift_x) {
+            		shift_x = tx;
+            	}
+            	
+            	if (ty < shift_y) {
+                    shift_y = ty;
+                }
+            	
+            }
+            
+            if ($debug) Debug.write("paste_x,paste_y,shift_x,shift_y", paste_x,paste_y,shift_x,shift_y);
+            
+            for (var eg=0;eg<this.copyObject.length;eg++){
+                
+                //var itemToDelete = this.copyObject[eg][this.copyObject[eg].length-1];
+                //this.deleteItemByName(itemToDelete);
+                
+                //this.baseactionobjectList[eg][10] = this.baseactionobjectList[eg][10] + paste_x;
+                //this.baseactionobjectList[eg][11] = this.baseactionobjectList[eg][11] + paste_y;
+                
+                //this.copyObject[eg][10] = this.copyObject[eg][10] + paste_x -50;
+                //this.copyObject[eg][11] = this.copyObject[eg][11] + paste_y-50;
+                
+                var tempArr = this.copyObject[eg].slice(0);
+                
+                tempArr[tempArr.length-1] += tempArr[0]+this.getCounter(); //Math.round(Math.random()*10000);
+                
+                tempArr[tempArr.length-5] =  paste_x - shift_x + tempArr[tempArr.length-5];
+                tempArr[tempArr.length-4] = paste_y - shift_y + tempArr[tempArr.length-4];               
+                
+                //this.sendWatchObject("draw", this.copyObject[eg], false);
+                
+                if ($debug) Debug.write("paste tempArr :x,y: ", tempArr[tempArr.length-5],tempArr[tempArr.length-4]);
+                
+                this.sendWatchObject("draw", tempArr, false);
+                //this.sendRemoteWatchObject(tempArr);
+                
+                this.onsharedMessage('draw',tempArr);
+                
+                if ($debug) Debug.write("paste name ", this.copyObject[eg]);
+                
+                //if ($debug) Debug.write("paste this.copyObject[eg][10]", this.copyObject[eg][10]);
+                //if ($debug) Debug.write("paste this.copyObject[eg][11] ", this.copyObject[eg][11]);
+                //if ($debug) Debug.write("paste paste_x ", paste_x);
+                //if ($debug) Debug.write("paste paste_y ", paste_y);
+                
+            }
+        ]]>
+    </method>
+    
+      
+    <!-- ###########################
+        Select tool
+     -->
+    
+    <method name="startSelect" args="oid_name">
+        if (oid_name == null){
+            oid_name = 'select'+this.getCounter();
+        }
+        //Debug.write("startselect");
+        this.currentlayer = new lz.drawViewNew(this,{
+            name:oid_name,width:this.width,height:this.height,
+            opacity:this.currentSelectangleOpacity});
+        this.currentlayer
+        this.drawlineOnObject(this.currentlayer,-1,-1,0,0);
+        this.drawlineOnObject(this.currentlayer,this.width,this.height,this.width+1,this.height+1);
+    </method>  
+
+    <method name="endSelect">
+        <![CDATA[        
+        
+            ////Debug.write(" this.startx, this.starty , this.endx, this.endy ",this.startx, this.starty , this.endx, this.endy);
+            var tmpName = this.currentlayer.name;
+            this.currentlayer.destroy();
+            var x = this.startx;
+            var width = this.endx - this.startx;
+            if (this.endx<this.startx){
+                x = this.endx;
+                width = Math.abs(width);
+            }
+            var y = this.starty;
+            var height = this.endy - this.starty;
+            if (this.endy<this.starty){
+                y = this.endy;
+                height = Math.abs(height);
+            }
+            
+            if (width < 2 && height < 2) {
+            	return;
+            }
+            
+            //if(this.isSnapToGrid){        		
+	    			        	   
+	          //  x = Math.round(x/this.gridWidth)*this.gridWidth;
+		    	//y = Math.round(y/this.gridWidth)*this.gridWidth;
+            
+            //} 
+            
+            if(this.selectedObjects != null && this.selectedObjects.length > 0){
+                for (var eg=0;eg<this.selectedObjects.length;eg++){
+                        
+                    var  objectToUpdate = this.getObjectByName(this.selectedObjects[eg][this.selectedObjects[eg].length-1]);
+                    objectToUpdate.setAttribute('opacity', 1);
+                    
+                }
+            }
+            
+            this.selectedObjects = new Array();
+            
+            for (var eg=0;eg<this.baseactionobjectList.length;eg++){
+                //Debug.write("this.baseactionobjectList[eg][0]==modi",this.baseactionobjectList[eg][0],modi);
+                //if ($debug) Debug.write("############## baseactionobjectList select : ", this.baseactionobjectList[eg]);
+                //if ($debug) Debug.write("############## baseactionobjectList select x: ", this.baseactionobjectList[eg][10]);
+                //if ($debug) Debug.write("############## baseactionobjectList select y: ", this.baseactionobjectList[eg][11]);
+                //if ($debug) Debug.write("############## baseactionobjectList select opacity: ", this.baseactionobjectList[eg][6]);
+                //if ($debug) Debug.write("############## baseactionobjectList select name: ", this.baseactionobjectList[eg][14]);
+                
+                //if ($debug) Debug.write("############## baseactionobjectList select this x: ", x);
+                //if ($debug) Debug.write("############## baseactionobjectList select this y: ", y);
+                
+                //if ($debug) Debug.write("############## baseactionobjectList select this x+width: ", x+width);
+                //if ($debug) Debug.write("############## baseactionobjectList select this y+height: ", y+height);
+                
+                //if (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]==bName) {
+                    //return this.baseactionobjectList[eg];
+                //}
+                
+                if (
+                    (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5] >= x && this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4] >= y) &&
+                    (this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5] <= x+width && this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4] <= y+height)
+                   ) {
+                    //return this.baseactionobjectList[eg];
+                    //this.baseactionobjectList[eg][6] = 0.2;
+                    
+                   	var tObject = new Array();
+                   	var tCopyObject = this.baseactionobjectList[eg];
+                   	
+                   	for (var i=0;i<tCopyObject.length;i++) {
+                   		var tItemObject = tCopyObject[i];
+                   		
+                   		if (tItemObject instanceof Array) {
+                   			
+               			    var storingItemObject = new Array();
+                   			
+               			    for (var k=0;k<tItemObject.length;k++) {
+           				        var kItemObject = tItemObject[k];
+           				        
+           				        if (kItemObject instanceof Array) {
+           				        	
+           				        	var subStoringItemObject = new Array();
+           				        	
+           				        	for (var l=0;l<kItemObject.length;l++) {
+           				        		var lItemObject = kItemObject[l];
+           				        		subStoringItemObject.push(lItemObject);
+           				        	}
+           				        	
+           				        	storingItemObject.push(subStoringItemObject);
+           				        } else {
+           				        	storingItemObject.push(kItemObject);
+           				        }
+                   				
+                   				
+                   			}
+                   			
+                   			tObject[i] = storingItemObject;
+                   			
+                   		} else {
+                   			tObject[i] = tItemObject;
+                   		}
+                   		
+                   	}
+                   	
+                   	
+                   	
+                    this.selectedObjects.push(tObject);
+                    
+                    objectToUpdate = this.getObjectByName(this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-1]);
+                    objectToUpdate.setAttribute('opacity', 0.7);
+                    
+                    //this.baseactionobjectList[eg][14] += '_copy';
+                    //this.sendRemoteWatchObject(this.baseactionobjectList[eg]);
+                    //this.sendRemoteWatchObject(this.baseactionobjectList[eg]);                  
+                    
+                    if ($debug) Debug.write("############## objectToUpdate: ", objectToUpdate);
+                    if ($debug) Debug.write("############## baseactionobjectList select opacity if: ", this.baseactionobjectList[eg][6]);
+                }
+            }  
+            
+            /*
+            if(whiteboardObjects.length > 0){
+            	 = whiteboardObjects;
+            }
+            */
+            
+            if ($debug) Debug.write("############## endSelect this.selectedObjects: ",  this.selectedObjects);
+            
+            this.currentlayer = new lz.drawViewNew(this,{
+                name:tmpName,x:x,y:y,width:width,height:height,
+                opacity:this.currentSelectangleOpacity});
+                
+            new lz.drawViewInner(this.currentlayer,{
+                name:'_innerSelect',x:0,y:0,width:width,height:height});
+                
+            //this.drawSelectangleHistory(this.currentlayer,0,0,width,height,
+              //  this.currentSelectanglestroke,this.currentSelectangleineWidth,
+                //this.currentSelectanglestrokeFill,this.currentSelectanglestrokeDis,
+                //this.currentSelectanglestrokeFillDis);
+           
+            //this.drawSelectregisterFinal(this.currentlayer.name,this.currentSelectanglestroke,
+              //  this.currentSelectangleineWidth,this.currentSelectanglestrokeFill,
+                //this.currentSelectanglestrokeDis,this.currentSelectanglestrokeFillDis,
+                //x,y,width,height,this.getSWFDocumentStatus(),
+                //this.getZIndex());
+            //this.layers.push(this.currentlayer);
+            //this.checkStepLayers();
+        ]]>
+    </method> 
+    
+    <!--
+        Terminate the usage of this function
+     --> 
+     <!--
+    <method name="drawSelectangle" args="x1,y1,x2,y2">
+        <![CDATA[
+            
+            currentlayer.lineWidth = this.currentSelectangleineWidth;
+            currentlayer.beginPath();
+            currentlayer.moveTo(x1,y1);
+            currentlayer.lineTo(x1,y2);
+            currentlayer.lineTo(x2,y2);
+            currentlayer.lineTo(x2,y1);
+            currentlayer.lineTo (x1,y1);
+            this.closePath();
+            
+            if (this.currentSelectanglestrokeDis!=-1){
+                currentlayer.strokeStyle = this.currentSelectanglestroke;
+                currentlayer.stroke();
+            }
+
+            if (this.currentSelectanglestrokeFillDis!=-1){
+                currentlayer.fillStyle = this.currentSelectanglestrokeFill;
+                currentlayer.fill();
+            }
+            
+        ]]>   
+    </method>   
+    -->
+    <method name="redrawSelectItemByScaling" args="objRef">
+        //if ($debug) Debug.write("redrawSelectItemByScaling: "+objRef);
+        this.currentlayer = objRef;
+        this.currentlayer._innerSelect.destroy();
+        new lz.drawViewInner(this.currentlayer,{
+            name:'_innerSelect',x:0,y:0,width:objRef.width,height:objRef.height});
+        this.drawSelectangleHistory(this.currentlayer,0,0,
+            objRef.width,objRef.height,
+            this.currentSelectanglestroke,this.currentSelectangleineWidth,
+            this.currentSelectanglestrokeFill,this.currentSelectanglestrokeDis,
+            this.currentSelectanglestrokeFillDis);
+    </method> 
+    
+    <method name="drawSelectangleToHistory" args="lastActionObject,parentView">
+        var tmpCurrentlayer = new lz.drawViewNew(parentView,{
+            name:lastActionObject[lastActionObject.length-1],
+            x:lastActionObject[lastActionObject.length-5],
+            y:lastActionObject[lastActionObject.length-4],
+            width:lastActionObject[lastActionObject.length-3],
+            height:lastActionObject[lastActionObject.length-2],
+            opacity:lastActionObject[6]});
+        new lz.drawViewInner(tmpCurrentlayer,{
+                name:'_innerSelect',x:0,y:0,
+                width:lastActionObject[lastActionObject.length-3],
+                height:lastActionObject[lastActionObject.length-2]});
+        this.drawSelectangleHistory(tmpCurrentlayer,0,0,
+            lastActionObject[lastActionObject.length-3],lastActionObject[lastActionObject.length-2],
+            lastActionObject[1],lastActionObject[2],lastActionObject[3],lastActionObject[4],lastActionObject[5]);
+            
+        this.doSWFDocumentStatus(tmpCurrentlayer,lastActionObject[lastActionObject.length-7]);
+    </method>
+    
+    <method name="drawSelectangleHistory" args="parentObj,x1,y1,x2,y2,stroke,line,fill,strokeDis,fillDis">
+        <![CDATA[
+            //Debug.write("drawSelectangleHistory",parentObj,x1,y1,x2,y2,stroke,line,fill,strokeDis,fillDis);
+            parentObj._innerSelect.lineWidth = line;
+            parentObj._innerSelect.beginPath();
+            parentObj._innerSelect.moveTo(x1,y1);
+            parentObj._innerSelect.lineTo(x1,y2);
+            parentObj._innerSelect.lineTo(x2,y2);
+            parentObj._innerSelect.lineTo(x2,y1);
+            parentObj._innerSelect.lineTo (x1,y1);
+            
+            if (strokeDis!=-1){
+                parentObj._innerSelect.strokeStyle = stroke;
+                parentObj._innerSelect.stroke();
+            }
+            
+            if (fillDis!=-1){
+                parentObj._innerSelect.fillStyle = fill;
+                parentObj._innerSelect.fill();
+            }
+            
+        ]]>   
+    </method>  
+    
+    <method name="drawSelectregisterFinal" args="newName,stroke,line,fill,strokeDis,fillDis,x,y,width,height,swfObj,zIndex" >
+        Debug.write("drawSelectregisterFinal",newName,stroke,line,fill,strokeDis,fillDis,x,y,width,height);
+        var actionObject = new Array();
+        actionObject[0] = 'Selectangle';
+        actionObject[1] = stroke;
+        actionObject[2] = line;
+        actionObject[3] = fill;
+        actionObject[4] = strokeDis;
+        actionObject[5] = fillDis;
+        actionObject[6] = this.currentSelectangleOpacity;
+        actionObject[7] = zIndex;//-8
+        actionObject[8] = swfObj;//-7
+        actionObject[9] = this.counter;//-6
+        actionObject[10] = x;//-5
+        actionObject[11] = y;//-4
+        actionObject[12] = width;//-3
+        actionObject[13] = height;//-2  
+        actionObject[14] = newName;//-1
+        this.baseactionobjectList.push(actionObject);
+        this.onsharedMessage('draw',actionObject);
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawTriangle.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawTriangle.lzx
new file mode 100644
index 0000000..56baab0
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawTriangle.lzx
@@ -0,0 +1,277 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDrawTriangle" extends="baseDrawClipArt" >
+    
+    <!--  
+        for drawing rectangles the variable 
+        with *Dis* indicates if the line/fil-color is active (+1/-1)
+     -->
+    <attribute name="currenttrianglestroke" value="0xFF6600" />
+    <attribute name="currenttrianglestrokeDis" value="1" type="number" />
+    <attribute name="currenttrianglestrokeFill" value="0xFFFF33" />
+    <attribute name="currenttrianglestrokeFillDis" value="1" type="number" />
+    <attribute name="currenttriangleineWidth" value="4" type="number" />
+    <attribute name="currenttriangleOpacity" value="1" type="number" />
+     
+      
+    <!-- ###########################
+        triangle
+     -->
+    
+    <method name="startTriangle" args="oid_name">
+        if (oid_name == null){
+            oid_name = 'triangle'+this.getCounter();
+        }
+        //Debug.write("startTriangle");
+        this.currentlayer = new lz.drawViewNew(this,{
+            name:oid_name,width:this.width,height:this.height,
+            opacity:this.currenttriangleOpacity});
+        this.currentlayer
+        this.drawlineOnObject(this.currentlayer,-1,-1,0,0);
+        this.drawlineOnObject(this.currentlayer,this.width,this.height,this.width+1,this.height+1);
+    </method>  
+
+    <method name="endTriangle">
+        <![CDATA[        	
+        
+            ////Debug.write(" this.startx, this.starty , this.endx, this.endy ",this.startx, this.starty , this.endx, this.endy);
+            var tmpName = this.currentlayer.name;
+            this.currentlayer.destroy();
+            
+            var tTriangle = this.getTrianglePointByRect(this.startx,this.starty,this.endx,this.endy);
+            
+            var max_x = Math.max(this.startx,this.endx,tTriangle.x);
+            var min_x = Math.min(this.startx,this.endx,tTriangle.x);
+            var max_y = Math.max(this.starty,this.endy,tTriangle.y);
+            var min_y = Math.min(this.starty,this.endy,tTriangle.y);
+            
+            
+            var x = min_x;
+            var width = max_x - min_x;
+            var y = min_y;
+            var height = max_y - min_y;
+            
+            var tx1 = this.startx-x;
+            var ty1 = this.starty-y;
+            var tx2 = this.endx-x;
+            var ty2 = this.endy-y;
+            var tx3 = tTriangle.x-x;
+            var ty3 = tTriangle.y-y;
+            
+            if(this.isSnapToGrid){        		
+	    			        	   
+	            x = Math.round(x/this.gridWidth)*this.gridWidth;
+		    	y = Math.round(y/this.gridWidth)*this.gridWidth;
+            
+            } 
+            
+            this.currentlayer = new lz.drawViewNew(this,{
+                name:tmpName,x:x,y:y,width:width,height:height,
+                opacity:this.currenttriangleOpacity});
+                
+            new lz.drawViewInner(this.currentlayer,{
+                name:'_innerTriangle',x:0,y:0,width:width,height:height});
+                
+            this.drawtriangleHistory(this.currentlayer,0,0,width,height,
+            	tx1,ty1,tx2,ty2,tx3,ty3,
+                this.currenttrianglestroke,this.currenttriangleineWidth,
+                this.currenttrianglestrokeFill,this.currenttrianglestrokeDis,
+                this.currenttrianglestrokeFillDis);
+            //this.currentlayer.setAttribute('stretches','both');
+            this.drawTriangleregisterFinal(this.currentlayer.name,this.currenttrianglestroke,
+                this.currenttriangleineWidth,this.currenttrianglestrokeFill,
+                this.currenttrianglestrokeDis,this.currenttrianglestrokeFillDis,
+                x,y,width,height,
+                tx1,ty1,tx2,ty2,tx3,ty3,
+                this.getSWFDocumentStatus(),
+                this.getZIndex());
+            this.layers.push(this.currentlayer);
+            this.checkStepLayers();
+            if ($debug) Debug.write("############## this.endx : ", this.endx);
+        ]]>
+    </method> 
+    
+    <method name="getTrianglePointByRect" args="x1,y1,x2,y2">
+    	<![CDATA[
+    		if (x2 >= x1 && y1 >= y2) {
+
+               var a = y1 - y2;
+               var b = x2 - x1;
+               
+               return {'x':x2 + a,'y':y2 + b};
+
+           } else if (x2 >= x1 && y1 <= y2) {
+
+               var a = y2 - y1;
+               var b = x2 - x1;
+
+               return {'x':x2 - a,'y':y2 + b};
+
+           } else if (x2 <= x1 && y1 <= y2) {
+
+               var a = y2 - y1;
+               var b = x1 - x2;
+
+               return {'x':x2 - a,'y':y2 - b};
+               
+           } else if (x2 <= x1 && y1 >= y2) {
+
+               var a = y1 - y2;
+               var b = x1 - x2;
+
+               return {'x':x2 + a,'y':y2 - b};
+               
+           } else {
+
+               if ($debug) Debug.warn("DEFAULT drawtriangle ",x1,y1,x2,y2);
+
+           }
+           
+       ]]>
+    </method>
+    
+    <!--
+        Terminate the usage of this function
+     --> 
+    <method name="drawtriangle" args="x1,y1,x2,y2">
+       <![CDATA[
+
+           var tTriangle = this.getTrianglePointByRect(x1,y1,x2,y2);
+
+		   this.drawtriangleByCord(x1,y1,x2,y2,tTriangle.x,tTriangle.y)
+       ]]>   
+   </method> 
+   
+    <method name="drawtriangleByCord" args="tx1,ty1,tx2,ty2,tx3,ty3">
+       <![CDATA[
+
+		   currentlayer.lineWidth = this.currenttriangleineWidth;
+           currentlayer.beginPath();
+           currentlayer.moveTo(tx1, ty1);
+           currentlayer.lineTo(tx2, ty2);
+           currentlayer.lineTo(tx3, ty3);
+           currentlayer.lineTo(tx1, ty1);
+           currentlayer.closePath();
+
+           if (this.currenttrianglestrokeDis != -1) {
+               currentlayer.strokeStyle = this.currenttrianglestroke;
+               currentlayer.stroke();
+           }
+
+           if (this.currenttrianglestrokeFillDis != -1) {
+               currentlayer.fillStyle = this.currenttrianglestrokeFill;
+               currentlayer.fill();
+           }
+       ]]>   
+   </method> 
+    
+    <method name="redrawTriangleItemByScaling" args="objRef">
+        //if ($debug) Debug.write("redrawTriangleItemByScaling: "+objRef);
+        this.currentlayer = objRef;
+        this.currentlayer._innerTriangle.destroy();
+        new lz.drawViewInner(this.currentlayer,{
+            name:'_innerTriangle',x:0,y:0,width:objRef.width,height:objRef.height});
+        this.drawtriangleHistory(this.currentlayer,0,0,
+            objRef.width,objRef.height,
+            this.currenttrianglestroke,this.currenttriangleineWidth,
+            this.currenttrianglestrokeFill,this.currenttrianglestrokeDis,
+            this.currenttrianglestrokeFillDis);
+    </method> 
+    
+    <method name="drawtriangleToHistory" args="lastActionObject,parentView">
+        var tmpCurrentlayer = new lz.drawViewNew(parentView,{
+            name:lastActionObject[lastActionObject.length-1],
+            x:lastActionObject[lastActionObject.length-5],
+            y:lastActionObject[lastActionObject.length-4],
+            width:lastActionObject[lastActionObject.length-3],
+            height:lastActionObject[lastActionObject.length-2],
+            opacity:lastActionObject[6]});
+        new lz.drawViewInner(tmpCurrentlayer,{
+                name:'_innerTriangle',x:0,y:0,
+                width:lastActionObject[lastActionObject.length-3],
+                height:lastActionObject[lastActionObject.length-2]});
+        this.drawtriangleHistory(tmpCurrentlayer,0,0,
+            lastActionObject[lastActionObject.length-3],lastActionObject[lastActionObject.length-2],
+            lastActionObject[7],lastActionObject[8], //tx1,ty1
+            lastActionObject[9],lastActionObject[10], //tx2,ty2
+            lastActionObject[11],lastActionObject[12], //tx3,ty3
+            lastActionObject[1],lastActionObject[2],lastActionObject[3],lastActionObject[4],lastActionObject[5]);
+            
+        this.doSWFDocumentStatus(tmpCurrentlayer,lastActionObject[lastActionObject.length-7]);
+    </method>
+    
+    <method name="drawtriangleHistory" args="parentObj,x1,y1,x2,y2,tx1,ty1,tx2,ty2,tx3,ty3,stroke,line,fill,strokeDis,fillDis">
+        <![CDATA[
+            //Debug.write("drawtriangleHistory",parentObj,x1,y1,x2,y2,stroke,line,fill,strokeDis,fillDis);
+            parentObj._innerTriangle.lineWidth = line;
+            parentObj._innerTriangle.beginPath();
+            parentObj._innerTriangle.moveTo(tx1,ty1);
+            parentObj._innerTriangle.lineTo(tx2,ty2);
+            parentObj._innerTriangle.lineTo(tx3,ty3);
+            parentObj._innerTriangle.lineTo (tx1,ty1);
+            parentObj._innerTriangle.closePath();
+            
+            if (strokeDis!=-1){
+                parentObj._innerTriangle.strokeStyle = stroke;
+                parentObj._innerTriangle.stroke();
+            }
+            
+            if (fillDis!=-1){
+                parentObj._innerTriangle.fillStyle = fill;
+                parentObj._innerTriangle.fill();
+            }
+            
+        ]]>   
+    </method>  
+    
+    <method name="drawTriangleregisterFinal" args="newName,stroke,line,fill,strokeDis,fillDis,x,y,width,height,tx1,ty1,tx2,ty2,tx3,ty3,swfObj,zIndex" >
+        Debug.write("drawTriangleregisterFinal",newName,stroke,line,fill,strokeDis,fillDis,x,y,width,height);
+        var actionObject = new Array();
+        actionObject[0] = 'triangle';
+        actionObject[1] = stroke;
+        actionObject[2] = line;
+        actionObject[3] = fill;
+        actionObject[4] = strokeDis;
+        actionObject[5] = fillDis;
+        actionObject[6] = this.currenttriangleOpacity;
+        actionObject[7] = tx1;
+        actionObject[8] = ty1;
+        actionObject[9] = tx2;
+        actionObject[10] = ty2;
+        actionObject[11] = tx3;
+        actionObject[12] = ty3;
+        actionObject[13] = zIndex;//-8
+        actionObject[14] = swfObj;//-7
+        actionObject[15] = this.counter;//-6
+        actionObject[16] = x;//-5
+        actionObject[17] = y;//-4
+        actionObject[18] = width;//-3
+        actionObject[19] = height;//-2  
+        actionObject[20] = newName;//-1
+        this.baseactionobjectList.push(actionObject);
+        this.onsharedMessage('draw',actionObject);
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawULine.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawULine.lzx
new file mode 100644
index 0000000..dfa7e5b
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/baseDrawULine.lzx
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="baseDrawULine" extends="baseDrawLine" >
+    
+    <!-- for drawing uline -->
+    <attribute name="currentulinestroke" value="0xFF6600" />
+    <attribute name="currentulinelineWidth" value="20" type="number" />  
+    <attribute name="currentulineOpacity" value="0.5" type="number" />
+      
+    
+    <!-- ###########################
+    Underline
+     -->
+    <method name="startUline" args="oid_name">
+        if (oid_name == null){
+            oid_name = 'uline'+this.getCounter();
+        }
+        //Debug.write("startUline ",this.startx,this.starty);
+        this.currentlayer = new lz.drawViewNew(this,{
+            name:oid_name,width:this.width+2,height:this.height+2,
+            x:-1,y:-1,
+            opacity:this.currentulineOpacity});
+        this.drawlineOnObject(this.currentlayer,-1,-1,0,0);
+        this.drawlineOnObject(this.currentlayer,this.width,this.height,this.width+1,this.height+1);
+    
+        //Set previous to null
+        this.prevx = null;
+        this.prevy = null;  
+        
+        currentlayer.strokeStyle = this.currentulinestroke;
+        currentlayer.lineWidth = this.currentulinelineWidth;
+        currentlayer.fillstyle = '0x000000';
+    </method>  
+    
+    <method name="endUline">
+        //Debug.write("endUline",this.startx,this.starty,this.endx,this.endy);
+        <![CDATA[
+            var tempName = this.currentlayer.name;
+            //Debug.write("tempName: ",tempName);
+            this.currentlayer.destroy();
+            
+            //GetBounds of that Object
+            var minx = this.width+2;
+            var miny = this.height+2;
+            var maxx = -2;
+            var maxy = -2;
+    
+            if (this.startx<minx) minx=this.startx;
+            if (this.endx<minx) minx=this.endx;
+            
+            if (this.startx>maxx) maxx=this.startx;
+            if (this.endx>maxx) maxx=this.endx;
+            
+            if (this.starty<miny) miny=this.starty;
+            if (this.endy<miny) miny=this.endy;
+            
+            if (this.starty>maxy) maxy=this.starty;
+            if (this.endy>maxy) maxy=this.endy;
+            
+            var width = maxx-minx;
+            var height = maxy-miny;
+            
+            var x1 = this.startx-minx+(this.currentulinelineWidth/2);
+            var y1 = this.starty-miny+(this.currentulinelineWidth/2);
+            var x2 = this.endx-minx+(this.currentulinelineWidth/2);
+            var y2 = this.endy-miny+(this.currentulinelineWidth/2);
+            
+            //Debug.write("minx,miny,width,height: ",minx,miny,width,height);
+            
+            this.currentlayer = new lz.drawViewNew(this,{
+                name:tempName,x:(minx-1-(this.currentulinelineWidth/2)),
+                y:(miny-1-(this.currentulinelineWidth/2)),
+                width:(width+this.currentulinelineWidth),
+                height:(height+this.currentulinelineWidth),
+                opacity:this.currentulineOpacity});
+                
+            //this.currentlayer.fillstyle = '0x000000';
+            this.currentlayer.lineWidth = this.currentulinelineWidth;
+            this.currentlayer.strokeStyle = this.currentulinestroke;
+    
+            this.drawline((x1),(y1),(x2),(y2));
+    
+            //Add Layer to global Layer     
+            this.layers.push(this.currentlayer);  
+            this.ulineregisterFinal(this.currentlayer.name,this.currentulinestroke,
+                this.currentulinelineWidth,this.currentulineOpacity,
+                this.currentlayer.x,this.currentlayer.y,
+                this.currentlayer.width,this.currentlayer.height,
+                x1,y1,x2,y2,true,this.getSWFDocumentStatus(),
+                this.getZIndex());
+        ]]>
+    </method> 
+    
+    
+    <method name="ulineregisterFinal" args="newName,stroke,line,opacity,x,y,width,height,x1,y1,x2,y2,doCall,swfObj,zIndex">
+        var actionObject = new Array();
+        actionObject[0] = 'uline';
+        actionObject[1] = stroke;
+        actionObject[2] = line;
+        actionObject[3] = opacity;
+        actionObject[4] = x1  
+        actionObject[5] = y1;  
+        actionObject[6] = x2;    
+        actionObject[7] = y2;  
+        actionObject[8] = zIndex;//-8
+        actionObject[9] = swfObj;//-7
+        actionObject[10] = this.counter;//-6 
+        actionObject[11] = x;//-5
+        actionObject[12] = y;//-4
+        actionObject[13] = width;//-3
+        actionObject[14] = height;//-2
+        actionObject[15] = newName;//-1
+        this.baseactionobjectList.push(actionObject);       
+        if (doCall) this.onsharedMessage('draw',actionObject);
+    </method>       
+    
+    
+    <method name="ulineactionHistory" args="lastActionObject,parentView">
+        <![CDATA[
+        //Debug.write("## lineactionHistory",parentView," 2 ## NEW x,y ",lastActionObject[lastActionObject.length-5],lastActionObject[lastActionObject.length-4]," width,height: ",lastActionObject[lastActionObject.length-3],lastActionObject[lastActionObject.length-2]);
+        
+        var tmpCurrentlayer = new lz.drawViewNew(parentView,{
+                name:lastActionObject[lastActionObject.length-1],
+                x:lastActionObject[lastActionObject.length-5],
+                y:lastActionObject[lastActionObject.length-4],
+                width:lastActionObject[lastActionObject.length-3],
+                height:lastActionObject[lastActionObject.length-2],
+                opacity:lastActionObject[3]});
+            
+            //this.currentlayer.fillstyle = lastActionObject[1];
+            tmpCurrentlayer.lineWidth = lastActionObject[2];
+            tmpCurrentlayer.strokeStyle = lastActionObject[1];
+    
+            this.drawlineOnObject(tmpCurrentlayer, lastActionObject[4],lastActionObject[5],lastActionObject[6],lastActionObject[7]);
+            
+            //Add Layer to global Layer     
+            this.layers.push(tmpCurrentlayer);  
+            
+            this.doSWFDocumentStatus(tmpCurrentlayer,lastActionObject[lastActionObject.length-7]);
+
+        ]]>
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/tools/library.lzx b/WebContent/src/modules/conference/whiteboard/base/tools/library.lzx
new file mode 100644
index 0000000..c84782b
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/tools/library.lzx
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="baseDrawPaint.lzx" />
+    <include href="baseDrawLine.lzx" />
+    <include href="baseDrawULine.lzx" />
+    <include href="baseDrawClipArt.lzx" />
+    <include href="baseDrawArrow.lzx" />
+    <include href="baseDrawRect.lzx" />
+    <include href="baseDrawEllipse.lzx" />
+    <include href="baseDrawPointer.lzx" />
+    <include href="baseDrawTriangle.lzx" />
+    <include href="baseDrawSelect.lzx" />
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/base/whiteBoardPointer.lzx b/WebContent/src/modules/conference/whiteboard/base/whiteBoardPointer.lzx
new file mode 100644
index 0000000..c95beab
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/whiteBoardPointer.lzx
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+    <class name="whiteBoardPointer" extends="view"

+           resource="pointer_whiteboard_rsc" width="20" height="20" >

+        <attribute name="userName" value="" type="string" />

+        <attribute name="fadeDelegate" value="null" />

+        <labelText x="20" text="$once{ parent.userName }" />

+        <handler name="oninit">

+            this.play();

+            this.fadeDelegate = new LzDelegate( this, "fadeText" );

+            lz.Timer.addTimer( this.fadeDelegate, 5000 );

+        </handler>

+        <method name="fadeText" args="itemObj">

+            this.destroy();

+        </method>

+    </class>

+

+</library>
\ No newline at end of file
diff --git a/WebContent/src/modules/conference/whiteboard/base/whiteboardVideoPlayer.lzx b/WebContent/src/modules/conference/whiteboard/base/whiteboardVideoPlayer.lzx
new file mode 100644
index 0000000..461b341
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/base/whiteboardVideoPlayer.lzx
@@ -0,0 +1,344 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="whiteboardVideoPlayer" extends="labelExplorerBox" allowDragging="false"
+    docking="false" resizeable="false" closable="false" 
+    x="0" y="0" width="${ parent.width }" height="${ parent.height }">
+	
+	<attribute name="fileExplorerItemId" value="0" type="number" />
+	
+    <attribute name="timerDelegateStarted" value="false" type="boolean" />
+    
+    <attribute name="deltaInSeconds" value="0" type="number" />
+    
+    <attribute name="currentTime" value="0" type="number" /> 	
+    
+    <attribute name="recordingName" value="" type="string" />
+    
+    <attribute name="isLoaded" value="false" type="boolean" />
+	
+	<attribute name="sendInit" value="false" type="boolean" />
+	
+	<attribute name="flv_width" value="0" type="number" /> 
+	
+    <attribute name="flv_height" value="0" type="number" /> 
+    
+    <attribute name="isPaused" value="true" type="boolean" />
+    
+	<handler name="oninit">
+		if ($debug) Debug.write("whiteboardVideoPlayer :: ",this.fileExplorerItemId);
+		
+		this.recordingName = "UPLOADFLV_" + this.fileExplorerItemId + ".flv";
+		calcVideoWidthHeight();
+		this.copyFileToCurrentRoom.doCall();
+		
+		var t = this;
+		canvas.videoComp_lc.stopRecordingStream = function(tName) {
+            if (t.name == tName) {
+            	t.stopStream();
+            }
+        }
+        canvas.videoComp_lc.metaWhiteboardPlaybackStream = function(tName,duration) {
+            if (t.name == tName) {
+                t.deltaInSeconds = duration;
+                t.setDuration();
+            }
+        }
+        canvas.videoComp_lc.updateWhiteboardStreamTime = function(tName,time) {
+            if (t.name == tName) {
+                t.currentTime = time;
+                t.calcProgressBar();
+            }
+        }
+		
+	</handler>
+	
+	<handler name="prepareForDelete" args="tRef">
+		if ($debug) Debug.write("--- prepareForDelete ");
+		this.stopStream();
+	</handler>
+	
+	<handler name="onclose">
+		this.stopStreamPlay();
+	</handler>
+	
+	<handler name="onwidth" args="w">
+		calcVideoWidthHeight();
+	</handler>
+	
+	<handler name="onheight" args="h">
+		calcVideoWidthHeight();
+	</handler>
+	
+	<!--
+	public Long copyFileToCurrentRoom(String SID, Long flvFileExplorerId)
+	 -->
+    <netRemoteCallHib name="copyFileToCurrentRoom" funcname="fileservice.copyFileToCurrentRoom" 
+        remotecontext="$once{ canvas.thishib }" > 
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.fileExplorerItemId;</method></netparam>
+        <handler name="ondata" args="value">
+        	<![CDATA[    
+	            if ($debug) Debug.write("deleteFileOrFolder: ",value);
+	            parent.isLoaded = true;
+	            
+	            var downloadurl = canvas.getUrl()+'DownloadHandler?fileName=UPLOADFLV_'+parent.fileExplorerItemId+'.jpg'
+                                +'&moduleName=lzRecorderApp&parentPath=&room_id='
+                                +'&sid='+canvas.sessionId;
+	            
+                parent._content._preview.imagePreview.setAttribute("src",downloadurl)
+                    
+                parent._content._preview.bringToFront();
+                                
+	            if (parent.sendInit) {
+	                parent.parent.sendNewVideoRemote(parent);
+	            }
+            ]]>
+        </handler>
+    </netRemoteCallHib>
+    
+    <method name="startStreamPlay">
+    	parent.playFLV(this,true);
+    	this.startStream();
+    </method>
+    
+    <method name="stopStreamPlay">
+    	parent.playFLV(this,false);
+    	this.stopStream();
+    </method>
+    
+    <method name="playRemote">
+    	this.startStream();
+    </method>
+    
+    <method name="stopRemote">
+        this.stopStream();
+    </method>
+    
+    <method name="startStream">
+    	<![CDATA[
+	    	if (!this.isLoaded) {
+	    		return;
+	    	}
+	    	
+	    	if ($debug) Debug.write("startStream ",this.recordingName);
+	    	
+	    	if (this.recordingName != "") {
+	    		
+	    		this.isPaused = false;
+	    		
+	    		if (!this.timerDelegateStarted) {
+	    			this.timerDelegateStarted = true;
+	            }
+	            
+	        	if ($debug) Debug.write("PLAY STREAM ",this.recordingName);
+	        	
+	        	var tObjectDimension = calcVideoWidthHeight();
+	        	
+	        	if ($debug) Debug.write("SEND ",this.recordingName,0,tObjectDimension.x,tObjectDimension.y,tObjectDimension.width,tObjectDimension.height);
+	        	
+	            // this._content._videostream.playStream(this.recordingName,0,tObjectDimension.x,tObjectDimension.y,tObjectDimension.width,tObjectDimension.height);
+	            
+	        	var tx = this.getAttributeRelative("x",canvas)+tObjectDimension.x+this._content.x;
+	        	var ty = this.getAttributeRelative("y",canvas)+tObjectDimension.y+this._content.y;
+	        	
+	            canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "playbackWhiteboardVideo", [this.name,this.recordingName,0,tx,ty,tObjectDimension.width,tObjectDimension.height]);
+	    	}
+    	]]>
+    </method>   
+    
+    <!---
+        calculates the new x, y, width and height of the video so that it is 100% 
+        visible in the container
+     -->
+    <method name="calcVideoWidthHeight">
+        <![CDATA[
+        
+            if ($debug) Debug.write("calcVideoWidthHeight ",this.flv_width,this.flv_height);
+        
+            var ratio = this.flv_width / this.flv_height;
+            
+            //max height of container is new height of video;
+            //calc new width and x-position of video
+            var newHeight = this._content.height;
+            var newWidth = ratio * newHeight; 
+            var newx = (this._content.width - newWidth) / 2;
+            var newy = 0;
+            
+            if ($debug) Debug.write("calcVideoWidthHeight",ratio,this._content.width,this._content.height,newWidth,newHeight,newx,newy);
+         
+            if (newWidth > this._content.width) {
+                newWidth = this._content.width;
+                newHeight = newWidth / ratio;
+                newx = 0;
+                newy = (this._content.height - newHeight) / 2;
+            }
+            
+            var t = {'x':newx,'y':newy,'width':newWidth,'height':newHeight};
+            
+            if ($debug) Debug.write("t",t);
+            
+            this._content._preview.setAttribute("x",newx);
+            this._content._preview.setAttribute("y",newy);
+            this._content._preview.setAttribute("width",newWidth);
+            this._content._preview.setAttribute("height",newHeight);
+            
+            return {'x':newx,'y':newy,'width':newWidth,'height':newHeight};
+        ]]>
+    </method>
+    
+    <method name="setDuration">
+    	<![CDATA[
+           if ($debug) Debug.write("setDuration ",this.deltaInSeconds);
+           var tString = "";
+           if (this.deltaInSeconds > 60) {
+               var minutes = Math.floor(this.deltaInSeconds/60);
+               var restSeconds = Math.round(this.deltaInSeconds) - ( minutes * 60 );
+               tString = minutes + " min " + restSeconds + " sec";
+           } else {
+               tString = Math.round(this.deltaInSeconds) + " sec";
+           }
+           this._progress._progressbar._duration.setAttribute("text",tString);
+        ]]>
+    </method>
+    
+    <method name="calcProgressBar">
+    	<![CDATA[
+    	   if ($debug) Debug.write("calcProgressBar ",this.currentTime);
+    	   this._progress._progressbar._pointer.setAttribute("visibility","visible");
+    	   var tString = "";
+    	   if (this.currentTime > 60) {
+    	   	   var minutes = Math.floor(this.currentTime/60);
+    	   	   var restSeconds = Math.round(this.currentTime) - ( minutes * 60 );
+    	   	   tString = minutes + " min " + restSeconds + " sec";
+    	   } else {
+    	   	   tString = Math.round(this.currentTime) + " sec";
+    	   }
+    	   var tNewX = Math.round((this._progress._progressbar.width / this.deltaInSeconds) * this.currentTime);
+    	   this._progress._progressbar._time.setAttribute("text",tString);
+    	   this._progress._progressbar._pointer.setAttribute("x",tNewX);
+    	]]>
+    </method> 
+	
+	<method name="stopStream">
+    	if (this.timerDelegateStarted) {
+    		this.timerDelegateStarted = false;
+        }
+        this._progress._progressbar._time.setAttribute("text","");
+        this._progress._progressbar._pointer.setAttribute("x",0);
+        if ($debug) Debug.write("SEND stopWhiteboardVideo ",this.name);
+        canvas.sendViaLocalConnection(canvas.rtmp_lc_name, "stopWhiteboardVideo",[this.name]);
+        this.isPaused = true;
+    </method>
+    
+    <method name="toggleStream">
+    	if (canvas.ismoderator &amp;&amp; this.isPaused) {
+   			this.startStreamPlay();
+    	}
+    </method>
+	
+	<view name="_content" height="${ parent.height-62 }" bgcolor="0x000000"
+		  y="22" x="1" width="${ parent.width-1 }">
+		
+		<view name="_preview" width="0" height="0" >
+        	<image name="imagePreview" stretches="both"
+        		   width="${parent.width}" height="${parent.height}" />
+            <handler name="onclick">
+            	if ($debug) Debug.write("onclick -- toggleStream");
+                parent.parent.toggleStream();
+            </handler>		   
+            <view width="60" height="40" valign="middle" opacity="0.7"
+            	  align="center" bgcolor="0xFFFFFF">
+            	<view resource="lz_recorder_play" valign="middle" align="center" />
+            </view>
+        </view>
+	
+	</view>
+
+    <view name="_progress" height="18" y="${ parent.height - 40 }" width="${ parent.width-2 }"
+    	                  x="1" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+    	
+    	<view resource="flv_recorder_play_small_rsc" y="1" height="16" width="16"
+    		      bgcolor="$once{ canvas.getThemeColor('baseMouseOvercolorizer') }">
+    		<handler name="onmouseover">
+                this.setAttribute("bgcolor",0xFFFFFF);
+            </handler>
+            <handler name="onmouseout">
+                this.setAttribute("bgcolor",canvas.getThemeColor('baseMouseOvercolorizer'));
+            </handler>
+    		<handler name="onclick">
+    			if (canvas.ismoderator &amp;&amp; parent.parent.isPaused) {
+    			     parent.parent.startStreamPlay();
+    			}
+    		</handler>
+    		<labelTooltip labelid="875" />
+    	</view>
+    	
+    	<view name="_progressbar" x="16" width="${ parent.width - 32 }" y="1" 
+    		  height="16" bgcolor="$once{ canvas.getThemeColor('baseMouseOvercolorizer') }">
+    		
+    		<view x="0" width="${ parent.width }" y="0" height="16" bgcolor="0xFFFFFF" opacity="0.5" /> 
+    		
+    		<handler name="onclick">
+    			//parent.parent.seekStream(this.getMouse("x"));
+    		</handler>
+    		
+    		<view name="_pointer" resource="flv_progress_pointer_rsc" visibility="hidden" />
+    		
+    		<text name="_time" resize="true" fontsize="10" />
+    		
+    		<text name="_duration" align="right" resize="true" fontsize="10" />
+    		
+    	</view>
+    	
+    	<view resource="flv_recorder_stop_small_rsc" align="right" y="1" height="16" width="16"
+    		  bgcolor="$once{ canvas.getThemeColor('baseMouseOvercolorizer') }">
+    		<handler name="onmouseover">
+    			this.setAttribute("bgcolor",0xFFFFFF);
+    		</handler>
+    		<handler name="onmouseout">
+                this.setAttribute("bgcolor",canvas.getThemeColor('baseMouseOvercolorizer'));
+            </handler>
+            <handler name="onclick">
+            	if (canvas.ismoderator) {
+                    parent.parent.stopStreamPlay();
+            	}
+            </handler>
+            <labelTooltip labelid="876" />
+        </view>
+    	
+    </view>	
+    
+    <simpleLabelButton labelid="85" width="100" x="${ parent.width-118 }" 
+    				   y="${ parent.height-20 }" >
+        <handler name="onclick">
+            if (canvas.ismoderator) {
+            	this.parent.stopRemote();
+                this.parent.parent.deleteItemByName(this.parent.name);
+                this.parent.parent.deleteItemByNameSync(this.parent.name);
+            }
+        </handler>
+    </simpleLabelButton>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/basePropertyPanelWhiteboard.lzx b/WebContent/src/modules/conference/whiteboard/basePropertyPanelWhiteboard.lzx
new file mode 100644
index 0000000..9c10d3f
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/basePropertyPanelWhiteboard.lzx
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="basePropertyPanelWhiteboard" extends="view" >
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="isopen" value="true" type="boolean" />
+	
+	<!--- @keywords private is the Box minimized  -->
+	<attribute name="open" value="true" type="boolean" />		
+	
+	<!--- Title of this window -->
+	<attribute name="title" type="string" value="basePanel" />
+	
+	<!--- @keywords private  -->
+	<attribute name="initheight" value="0" type="number" />
+	
+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+	
+	<!--- if the box is allowed to be minimized  -->
+	<attribute name="allowToggle" value="true" type="boolean" />	
+		
+	<method name="setLabelId" args="_labelid" >
+		this.labelid = _labelid;
+		this.setAttribute("title",canvas.getLabelName(this.labelid));
+	</method>
+	
+	<method name="toggleopen">
+		if (!this.allowToggle) {
+			return;
+		}
+		////Debug.write("this.isopen",this.isopen);
+		this.setAttribute('isopen',!this.isopen);
+		if (this.isopen){		
+			this.setAttribute('height',this.initheight);
+			this.setAttribute('height',this.initheight);
+		} else {	
+			this.setAttribute('height',22);		
+		}
+	</method>
+	
+    <handler name="oninit">
+    	this.initheight=this.height;
+    </handler>
+	
+    <view x="0" y="1" width="${ this.parent.width }" height="20" bgcolor="0xE0E1EB" />
+    
+    <view x="0" y="0" width="${ this.parent.width }" height="1" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" />
+    
+    <view x="0" y="19" width="${ this.parent.width }" height="1" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" />
+	
+	<handler name="onclick">
+        this.toggleopen();
+    </handler>
+    
+    <text fontsize="11" height="17" x="2" y="1" text="${ this.parent.title }" 
+						fgcolor="$once{ canvas.getThemeColor('menuTextColor') }" resize="true" fontstyle="bold" />
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/fixedFileExplorerWhiteBoard.lzx b/WebContent/src/modules/conference/whiteboard/fixedFileExplorerWhiteBoard.lzx
new file mode 100644
index 0000000..b73230c
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/fixedFileExplorerWhiteBoard.lzx
@@ -0,0 +1,595 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!-- 
+############################
+
+    Class newWhiteBoard
+    
+    
+    @keywords deprecated
+    
+ -->
+
+
+<class name="fixedFileExplorerWhiteBoard" extends="view" showhandcursor="false">
+    
+    <attribute name="baseurl" value="" type="string" />
+    <attribute name="fileName" value="" type="string" />
+    <attribute name="moduleName" value="" type="string" />
+    <attribute name="parentPath" value="" type="string" />
+    <attribute name="room" value="" type="string" />
+    <attribute name="domain" value="" type="string" />
+    
+    <attribute name="downloadurl" value="" type="string" />
+    <attribute name="iamgex" value="" type="string" />
+    <attribute name="imagey" value="" type="string" />
+    
+    <attribute name="restricted" value="false" type="boolean" />
+    
+    <event name="onsharedMessage" />
+    
+    <attribute name="sendObject" value="null" />
+    <attribute name="sendObjectToClientID" value="0" type="number"  />
+    
+    <attribute name="confirmdialog" value="null" />
+    
+    <attribute name="documentmenuIsInited" value="false" type="boolean" />
+    
+    <handler name="oninit">
+        if ($debug) Debug.info("Init Whiteboard ",this.restricted);
+    </handler>
+
+    <handler name="ondestroy">
+		//if ($debug) Debug.write("############## fixedFileExplorerWhiteBoard::ondestroy : ", this);
+		this._drawareaMask._drawarea.clearRemote();
+    </handler>
+
+    <method name="sendConfirmation" args="yesno,askagain" >
+        
+        ////Debug.write("clear yesno,askagain: ",yesno,askagain);
+    
+         var g = canvas.getUserData();
+         if (g["image"]==null) g["image"]=new Array();
+         g["image"]["clearField"]=yesno;
+         g["image"]["askagainclear"]=!askagain;
+         canvas.setUserData(g);
+
+         if (yesno){
+            ////Debug.write("clear field!!");
+            canvas._drawarea.setModus('plain');
+            canvas._drawarea.addNewSyncImage(this.downloadurl,this.iamgex,this.imagey,this.baseurl,this.fileName,this.moduleName,this.parentPath,this.room,this.domain);
+         } else {
+            ////Debug.write("don't clear field!!");
+            canvas._drawarea.addNewSyncImage(this.downloadurl,this.iamgex,this.imagey,this.baseurl,this.fileName,this.moduleName,this.parentPath,this.room,this.domain);
+         }
+         this.confirmdialog.close();
+    </method>
+    
+    <method name="getconfirmationscode">
+        var g = canvas.getUserData();
+        if (g["image"]==null) {
+            g["image"]=new Array();
+            g["image"]["clearField"]=false;
+            g["image"]["askagainclear"]=true;
+            canvas.setUserData(g);
+        }
+        return g["image"];
+    </method>
+    
+    <method name="resetDefaultConfirmations">
+        var g = canvas.getUserData();
+        if (g["image"]==null) g["image"]=new Array();
+        g["image"]["clearField"]=false;
+        g["image"]["askagainclear"]=true;
+        canvas.setUserData(g);
+    </method>   
+    
+    <method name="clearAreaAndAddImage" args="downloadurlVal,xVal,yVal,baseurl,fileName,moduleName,parentPath,room,domain">
+        <![CDATA[
+        ////Debug.write("clearAreaAndAddImage: ",downloadurlVal,xVal,yVal,baseurl,fileName,moduleName,parentPath,room,domain);
+        this.downloadurl=downloadurlVal;
+        this.iamgex=xVal;
+        this.imagey=yVal;   
+        this.baseurl=baseurl;
+        this.fileName=fileName;
+        this.moduleName=moduleName;
+        this.parentPath=parentPath;
+        this.room=room;
+        this.domain=domain;
+        var storedImageDate = this.getconfirmationscode();
+        ////Debug.write(" g[image] ",storedImageDate);
+        if (storedImageDate["clearField"] && !storedImageDate["askagainclear"]){
+            canvas._drawarea.setModus('plain');
+            if ($debug) Debug.write(" canvas._drawarea.addNewImage 1 ",this.downloadurl,this.x,this.y);
+            canvas._drawarea.addNewImage(this.downloadurl,this.x,this.y,this.baseurl,this.fileName,this.moduleName,this.parentPath,this.room,this.domain);
+        } else if (!storedImageDate["askagainclear"] && !storedImageDate["clearField"]){
+            canvas._drawarea.addNewImage(this.downloadurl,this.x,this.y,this.baseurl,this.fileName,this.moduleName,this.parentPath,this.room,this.domain);
+            if ($debug) Debug.write(" canvas._drawarea.addNewImage 2 ",this.downloadurl,this.x,this.y);
+        } else if (storedImageDate["askagainclear"]){
+            this.confirmdialog = new lz.confirmationBox(canvas.main_content._content.inner,{labelid:62,labeliderror:63,refObj:this});
+        } else {
+            this.confirmdialog = new lz.confirmationBox(canvas.main_content._content.inner,{labelid:62,labeliderror:63,refObj:this});
+        }
+        ]]> 
+    </method>
+    
+    <event name="isloadingImage" />
+    <event name="isloadedImage" />
+    
+    
+    <text fontsize="11" x="10" y="2" 
+        name="_sharingClientName" fontstyle="bold" />    
+    
+    
+	<method name="checkForApplyScreen">
+		lz.Browser.loadURL(canvas.getScreenSharingUrl(), '_blank');
+	</method> 
+	
+    <!-- 
+        The Content Area    
+     -->
+    <view width="${ parent.parent.width-2 }" 
+          height="${ (canvas.ismoderator) ? (parent.parent.height-42-parent._propertyPanel.height) : ((canvas.isAllowedToDraw) ? (parent.parent.height-42-parent._propertyPanel.height) : (parent.parent.height-42)) }" 
+          y="0" name="_drawareaMask" clip="true" bgcolor="0xFFFFFF" >
+    	
+    	<handler name="oninit">
+            if ($debug) Debug.info("lz.Track.register ",canvas.currentImagesListdraw.currentTrackGroupName);
+            lz.Track.register(this, canvas.currentImagesListdraw.currentTrackGroupName);
+        </handler>
+    	
+    	<handler name="onmousedown">
+            this._drawarea.onmousedownMethod();
+        </handler>
+        
+        <handler name="onmouseup">
+            this._drawarea.onmouseupMethod();
+        </handler>
+        
+        <handler name="onmouseover">
+        	lz.Cursor.restoreCursor();
+        	lz.Cursor.showHandCursor(false);
+            this._drawarea.onmouseoverMethod();
+        </handler>
+        
+        <handler name="onmouseout">
+        	lz.Cursor.showHandCursor(true);
+        	lz.Cursor.unlock();
+            this._drawarea.onmouseoutMethod();
+        </handler>
+        
+        <handler name="onmousetrackover">
+            if ($debug) Debug.write("onmousetrackover");
+            canvas.currentImagesListdraw.currentDragItem.sendOverItem(this);
+            this.setAttribute("bgcolor",0x93FE92);
+        </handler>
+        
+        <handler name="onmousetrackout">
+            if ($debug) Debug.write("onmousetrackout");
+            canvas.currentImagesListdraw.currentDragItem.sendOutItem(this);
+            this.setAttribute("bgcolor",0xFFFFFF);
+        </handler>
+        
+        <handler name="onmousetrackup">
+            if ($debug) Debug.write("onmousetrackup");
+            this.setAttribute("bgcolor",0xFFFFFF);
+        </handler>   
+    	
+    	<remoteWhiteboard y="0" name="_drawarea" isRemoteOID="true" height="${parent.height}" width="${parent.height}"
+                          restricted="$once{ parent.parent.restricted }" >
+    		
+    		<attribute name="sendUpdate" value="true" type="boolean"/>
+    		
+    		<handler name="onx" args="x">
+                if (this.sendUpdate) {
+                    if ($debug) Debug.write("# x",x);
+					if ('scrollContainer' in parent.parent) {
+	                    parent.parent.scrollContainer.calcScrollContent();
+					}
+                }
+            </handler>
+            
+            <handler name="ony" args="y">
+                if (this.sendUpdate) {
+                    if ($debug) Debug.write("# y",y);
+					if ('scrollContainer' in parent.parent) {
+                    	parent.parent.scrollContainer.calcScrollContent();
+					}
+                }
+            </handler>
+            
+            <handler name="onheight" args="h">
+                if ($debug) Debug.write("# height",h);
+                //this.dragger.drag_min_x = parent.width - w;
+				if ('scrollContainer' in parent.parent) {
+	                parent.parent.scrollContainer.calcScrollContent();
+				}
+                parent.parent.zoombox.sendUpdate(null);
+            </handler>
+            
+            <handler name="onwidth" args="w">
+                if ($debug) Debug.write("# width",w);
+                //this.dragger.drag_min_y = parent.height - h;
+				if ('scrollContainer' in parent.parent) {
+	                parent.parent.scrollContainer.calcScrollContent();
+				}
+            </handler>
+            
+            <handler name="onupdateScale" args="tRef">
+                if ($debug) Debug.write("# updateScale",this.getDisplayObject()._xscale);
+				if ('scrollContainer' in parent.parent) {
+	                parent.parent.scrollContainer.calcScrollContent();
+				}
+            </handler>
+    		
+            <attribute name="initH"/>
+            <attribute name="initW"/>
+            <handler name="oninit">
+                canvas._drawarea = this; 
+            </handler>
+            
+            <handler name="onprogress" args="perc">
+                //Debug.write("onprogress: ",perc);
+                this.parent.parent._progress.setProgress(perc);
+            </handler>
+            <!--
+            <handler name="onmousedown" >
+                //Debug.write("onprogress: ",perc);
+            </handler>
+             -->
+            <handler name="ondrawmodus" args="d">
+                this.drawmodus = d;
+                //change Enabled Status of Toolbar Menu Button
+                parent.parent._propertyPanel.loadPanelByModus(this);
+            </handler>
+            <handler name="setNewScreenUserName" args="value">
+                this.parent.parent._sharingClientName.setAttribute('text',value);
+            </handler>
+            <!-- @overwrite -->
+            <method name="onsharedMessage" args="action,obj">
+                
+                if ($debug) Debug.write("###### onsharedMessage",action,obj);
+    
+                var tempSendArray = new Array ();
+                tempSendArray[0] = 'whiteboard';
+                tempSendArray[1] = new Date();
+                tempSendArray[2] = action;
+                tempSendArray[3] = obj;
+                     
+                parent.parent.onsharedMessage.sendEvent(tempSendArray);
+            </method>
+            
+            <handler name="onopenWhiteBoard" >
+                //parent.parent.getRoomItems.doCall();
+            </handler>
+            
+            <!-- clientid  = streamid of the user -->
+            <method name="oninitUser" args="clientid,objectList">
+                this.parent.parent.sendObjectToClientID = clientid;
+                this.parent.parent.sendObject = objectList;
+                this.parent.parent.sendMessageWithClientById.doCall();
+            </method>
+            
+            <handler name="onboundingIsActive" args="b">
+                if ($debug) Debug.write("boundingIsActive: ",b);
+                if (b){
+                    var boundingDoUpdateOnInit = true;
+                    if (this.ObjectByName instanceof lz.swfResourceView){
+                        //Debug.write("is swf Presentation");
+                        boundingDoUpdateOnInit=false;
+                    }
+                    if (!boundingDoUpdateOnInit) {
+                        parent.parent._propertyPanel.setObjectBounds(
+                            this.ObjectByName.x,this.ObjectByName.y,
+                            this.ObjectByName._swfView.width,this.ObjectByName._swfView.height);
+                    } else {
+                        parent.parent._propertyPanel.setObjectBounds(
+                            this.ObjectByName.x,this.ObjectByName.y,
+                            this.ObjectByName.width,this.ObjectByName.height);
+                    }
+                }
+            </handler>
+            
+            <!--  bounding Box (selection Box) -->
+            <handler name="onBoundingBox" args="boundingBoxRef">
+                var boundingDoUpdateOnInit = true;
+                if (boundingBoxRef.objRef instanceof lz.swfResourceView){
+                //Debug.write("is swf Presentation");
+                    boundingDoUpdateOnInit=false;
+                }
+                if (!boundingDoUpdateOnInit) {
+                    parent.parent._propertyPanel.setObjectBounds(
+                    boundingBoxRef.objRef.x,boundingBoxRef.objRef.y,
+                    boundingBoxRef.objRef._swfView.width,boundingBoxRef.objRef._swfView.height);
+                } else {
+                    parent.parent._propertyPanel.setObjectBounds(
+                    boundingBoxRef.objRef.x,boundingBoxRef.objRef.y,
+                    boundingBoxRef.objRef.width,boundingBoxRef.objRef.height);
+                }
+            </handler>
+            
+            <method name="getDocumentToolBar">
+                return parent.parent.panelArea.getDocumentsToolbar();
+            </method>
+            
+            <method name="getPaintToolBar">
+                return parent.parent.panelArea._mainToolsPanel;
+            </method>
+            
+            <view name="_grid" x="-2" y="-2" height="${parent.height}" width="${parent.height}" 
+                  visibility="${ (parent.showGrid) ? 'visible' : 'hidden'}"/>
+        </remoteWhiteboard>   
+    	
+    </view>
+    
+    
+    <view name="scrollContainer" width="${ parent.parent.width-2 }" 
+          visible="${ ((canvas.ismoderator) ? true : ((canvas.isAllowedToDraw) ? true : false )) }"
+          height="${ (canvas.ismoderator) ? (parent.parent.height-42-parent._propertyPanel.height) : ((canvas.isAllowedToDraw) ? (parent.parent.height-33-parent._propertyPanel.height) : (parent.parent.height-33)) }" >
+        
+        <attribute name="sendUpdate" value="true" type="boolean"/>
+        
+        <method name="calcScrollContent">
+            var rHeight = Math.round(parent._drawareaMask._drawarea.height * (parent._drawareaMask._drawarea.getDisplayObject()._xscale / 100));
+            var rWidth = Math.round(parent._drawareaMask._drawarea.width * (parent._drawareaMask._drawarea.getDisplayObject()._yscale / 100));
+            this.sendUpdate = false;
+            this.scrollview.setAttribute("x",parent._drawareaMask._drawarea.x);
+            this.scrollview.setAttribute("y",parent._drawareaMask._drawarea.y);
+            this.scrollview.setAttribute("height", Math.max(rHeight, parent._drawareaMask._drawarea.getDisplayObject()._height));
+            this.scrollview.setAttribute("width", Math.max(rWidth, parent._drawareaMask._drawarea.getDisplayObject()._width));
+            this.sendUpdate = true;
+        </method>
+        
+        <view name="scrollview">
+            
+            <attribute name="timeisInited" value="false" type="boolean" />
+            <attribute name="sendObjectDel" value="null" />
+            
+            <handler name="oninit">
+                this.sendObjectDel = new LzDelegate( this, "sendObject" );
+            </handler>
+            
+            <handler name="onx" args="x">
+                if (parent.sendUpdate) {
+                    if ($debug) Debug.write("# scrollview x",x);
+                    parent.parent._drawareaMask._drawarea.setAttribute("x",x);
+                    
+                    if (!this.timeisInited){
+                        this.timeisInited=true;
+                        lz.Timer.addTimer( this.sendObjectDel, 250 );
+                    } else {
+                        lz.Timer.resetTimer( this.sendObjectDel, 250 );
+                    }
+                }
+            </handler>
+            <handler name="ony" args="y">
+                if (parent.sendUpdate) {
+                    if ($debug) Debug.write("# scrollview y",y);
+                    parent.parent._drawareaMask._drawarea.setAttribute("y",y);
+                    
+                    if (!this.timeisInited){
+                        this.timeisInited=true;
+                        lz.Timer.addTimer( this.sendObjectDel, 250 );
+                    } else {
+                        lz.Timer.resetTimer( this.sendObjectDel, 250 );
+                    }
+                }
+            </handler>
+            
+            <method name="sendObject" args="itemRef">
+                if ($debug) Debug.info("sendObject :: scrollview");
+                
+                var tArray = new Array();
+                tArray[0] = "moveMap";
+                tArray[1] = Math.round(this.x);
+                tArray[2] = Math.round(this.y);
+                
+                this.parent.parent._drawareaMask._drawarea.onsharedMessage('moveMap',tArray);
+                this.timeisInited=false;
+            </method>
+        </view>
+    
+        <om_vscrollbar name="_scrollstv"/> 
+        <om_hscrollbar name="_scrollsth" /> 
+    
+    </view>    
+    
+    
+        <netRemoteCallHib name="sendMessageWithClientById" funcname="sendMessageWithClientById"
+            remotecontext="$once{ canvas.thishib }" >
+            <netparam><method name="getValue">return parent.parent.sendObject;</method></netparam>
+            <netparam><method name="getValue">return parent.parent.sendObjectToClientID;</method></netparam>
+            <handler name="ondata" args="value">
+                <![CDATA[
+                    //The onResult-Handler will be called be the rtmpconnection
+                    //Debug.write("sendMessageWithClientById : ",value);
+                ]]>
+            </handler>   
+        </netRemoteCallHib>     
+    
+    <view name="panelArea" width="${ parent.parent.width }" 
+          height="${ parent.parent.height-42-parent._propertyPanel.height }">
+        
+        <attribute name="objectRef" value="null" />
+        
+        <!--- @deprecated -->
+        <method name="_setSelection" args="obj">
+            parent._drawareaMask._drawarea.removeObjectBounds();
+            if (obj.setSelectionToItem){            
+                if (this.objectRef!=null){
+                    this.objectRef._isselected = false;
+                    this.objectRef._area.setAttribute('bgcolor',0xFFFFFF);
+                }
+                this.objectRef = obj;
+                this.objectRef._isselected = true;
+                this.objectRef._area.setAttribute('bgcolor',canvas.getThemeColor('basebgcolorizer'));
+                parent._drawareaMask._drawarea.setModus(this.objectRef.modi);
+            }
+        </method>
+        
+        <method name="setSelection" args="obj">
+            if ($debug) Debug.write("setSelection ",obj);
+            parent._drawareaMask._drawarea.removeObjectBounds();
+            if (obj.setSelectionToItem){            
+                if (this.objectRef!=null){
+                    this.objectRef._isselected = false;
+                    this.objectRef.setAttribute('enabled',true);
+                }
+                this.objectRef = obj;
+                this.objectRef._isselected = true;
+                this.objectRef.setAttribute('enabled',false);
+            }
+            if (obj.modi=="saveobj"){
+                parent._drawareaMask._drawarea.doAction(obj.modi);
+            } else {
+                parent._drawareaMask._drawarea.setModus(obj.modi);
+            }
+        </method>
+        
+        <method name="setSelectionWithoutEvent" args="obj">
+            if (obj.setSelectionToItem){         
+                if (this.objectRef!=null){
+                    this.objectRef._isselected = false;
+                    this.objectRef.setAttribute('enabled',true);
+                }
+                this.objectRef = obj;
+                this.objectRef._isselected = true;
+                this.objectRef.setAttribute('enabled',false);
+            }
+        </method>
+        
+        <!--
+                                
+         -->
+         
+        <method name="sendNewPropertyHeight" args="objRef">
+            <![CDATA[
+                for (var i=0;i<this.subviews.length;i++) {
+                    if (this.subviews[i].y != 0) {
+                        if (this.subviews[i] instanceof lz.mainToolsTopPanel) {
+                            if (objRef.height<=22){
+                                if (this.subviews[i].y+this.subviews[i].height+5>=parent.parent.height-objRef.initheight-21){
+                                    if ($debug) Debug.write("mainToolsTopPanel");
+                                    this.subviews[i].setAttribute('y',objRef.y-this.subviews[i].height);
+                                }
+                            } else {
+                                if (this.subviews[i].y+this.subviews[i].height+5>=objRef.y){
+                                    if ($debug) Debug.write("mainToolsTopPanel");
+                                    this.subviews[i].setAttribute('y',objRef.y-this.subviews[i].height);
+                                }
+                            }
+                        }   
+                    }
+                }
+            ]]>
+        </method>
+        
+        <method name="getDocumentsToolbar">
+            return parent._propertyPanel._content._documentsPanel;
+        </method>
+        
+        <mainToolsTopPanel x="100" y="0" name="_mainToolsPanel" 
+             visible="${ ((canvas.ismoderator) ? true : ((canvas.isAllowedToDraw) ? true : false )) }"/>
+        
+        <mainToolsLeftPanelPointer y="20" name="_mainToolsLeftPanelPointer" 
+             visible="${ (parent.parent.restricted) ? false : (((canvas.ismoderator) ? false : ((canvas.isAllowedToDraw) ? false : true ))) }"/>
+    </view> 
+    
+    <view name="zoombox" y="0" x="${ parent.parent.width-this.width-14 }" layout="axis:x;spacing:2">
+        
+        <attribute name="ignoreUpdates" value="false" type="boolean" />
+        
+        <handler name="onx" args="x">
+        	if (this._fullFit.getValue()) {
+        		if ($debug) Debug.write("on x sendUpdate ",x);
+        		lz.Timer.addTimer( new LzDelegate( this, "sendUpdate" ), 100 );
+        	}
+        </handler>
+        
+        <method name="sendUpdate" args="refObj">
+            if ($debug) Debug.write("fixedFileExplorer sendUpdate ",refObj);
+        	parent._drawareaMask._drawarea.doFullFit(true);
+        </method>
+        
+        <method name="setWhiteboardValues" args="fullFit,zoom">
+            if ($debug) Debug.write("setWhiteboardValues -1- ",fullFit,zoom);
+            this.ignoreUpdates = true;
+			if ('_zoom' in this) {
+	            this._zoom.setSliderValue(zoom);
+			}
+            this._fullFit.setValue(fullFit);
+            this.ignoreUpdates = false;
+        </method>
+        
+        <method name="setCurrentScaleByFullFit" args="tScale">
+            if ($debug) Debug.write("setCurrentScaleByFullFit -2- ",tScale);
+            this.ignoreUpdates = true;
+			if ('_zoom' in this) {
+	            this._zoom.setSliderValue(tScale);
+			}
+            this.ignoreUpdates = false;
+        </method>
+        
+        <labelCheckbox x="344" name="_fullFit" labelid="847" y="4" fontstyle="bold" bgcolor="0xFFFFFF"
+        		visible="${ ((canvas.becomemoderator) ? true : false ) }">
+            <handler name="onvalue" args="v">
+                if (parent.ignoreUpdates) {
+                    return;
+                }
+                if ($debug) Debug.warn("onvalue Full Fit ",v);
+                
+				if ('_zoom' in parent) {
+                	parent.parent._drawareaMask._drawarea.doUpdateFullFit(v,parent._zoom.initialNumber);
+				}
+            </handler>
+            <labelTooltip labelid="1212" multiline="true" />
+        </labelCheckbox>
+        
+        <changeWidthSlider name="_zoom" initialNumberInit="50" labelid="1328"
+	            boxPosition="down" initialNumber="50" maximum="200">
+            <handler name="oninitialNumber" args="i">
+                if (parent.ignoreUpdates) {
+                    return;
+                }
+                
+                if ($debug) Debug.warn("onvalue Zoom Fit ",this.initialNumber);
+                
+                parent._fullFit.setValue(false);
+				parent.parent._drawareaMask._drawarea.doUpdateZoom(parent._fullFit.getValue(),this.initialNumber);
+            </handler>
+        </changeWidthSlider>
+        
+        <view width="2" />
+        
+    </view>    
+    
+    <propertyPanel name="_propertyPanel" x="0" y="${ parent.parent.height-this.height-42 }" 
+                    visible="${ ((canvas.ismoderator) ? true : ((canvas.isAllowedToDraw) ? true : false )) }">
+        <handler name="onheight" args="h">
+            this.height = h;
+            if ($debug) Debug.write("onheight: ",h);
+            parent.panelArea.sendNewPropertyHeight(this);
+        </handler>
+    </propertyPanel>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/fixedFileExplorerWhiteboardPanel.lzx b/WebContent/src/modules/conference/whiteboard/fixedFileExplorerWhiteboardPanel.lzx
new file mode 100644
index 0000000..81da29d
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/fixedFileExplorerWhiteboardPanel.lzx
@@ -0,0 +1,350 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="multiWhiteboardPanel" extends="fixedFileExplorerWhiteBoard" y="42" x="1">
+	
+	<attribute name="whiteboardId" value="0" type="number" />
+	<attribute name="objWhiteboard" value="null" />
+	<attribute name="objMessage" value="null" />
+	
+    <handler name="onsharedMessage" args="obj">
+        //Debug.write("send: ",obj);
+        this.objWhiteboard = obj;
+        if (this.sendVarsByWhiteboardId != null){
+        	this.sendVarsByWhiteboardId.doCall();
+        }
+    </handler>
+    
+    <netRemoteCallHib name="sendVarsByWhiteboardId" funcname="sendVarsByWhiteboardId" 
+    				  	showLoading="false" remotecontext="$once{ canvas.thishib }" >
+        <netparam><method name="getValue">return parent.parent.objWhiteboard;</method></netparam>
+        <netparam><method name="getValue">return parent.parent.whiteboardId;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+            	//if ($debug) Debug.write("sendVarsByWhiteboardId : ",value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib>     
+    
+    <handler name="onvisible" args="v">
+    	<![CDATA[
+	    	if ($debug) Debug.write("onvisible :: ",v);
+    	]]>
+    </handler>
+    
+    <method name="sendActiveWindow">
+    	if ($debug) Debug.warn("sendActiveWindow :: ");
+    	if (canvas.ismoderator || canvas.isAllowedToDraw) {
+    		if ($debug) Debug.warn("DO sendActiveWindow :: ");
+    		canvas._drawarea = this._drawareaMask._drawarea;
+    		this.objMessage = new Array();
+    		this.objMessage[0] = "activateWhiteboard";
+    		this.objMessage[1] = this.whiteboardId;
+    		this.sendMessageToMembers.doCall();
+    	}
+    </method>
+    
+    <netRemoteCallHib name="sendMessageToMembers" funcname="sendMessageToMembers" 
+    				  	showLoading="false" remotecontext="$once{ canvas.thishib }" >
+        <netparam><method name="getValue">return parent.parent.objMessage;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            	if ($debug) Debug.write("sendMessageToMembers :: ",value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib> 
+    
+</class>
+    
+<class name="fixedFileExplorerWhiteboardPanel" extends="basePropertyPanelWhiteboard" allowToggle="false"
+	   labelid="615" visible="${((canvas.currentRoomObj.hideWhiteboard) ? false:true)}">
+	<attribute name="whiteboardCount" value="0" type="number" />	
+	<!--
+	
+	 -->
+	<handler name="oninit">
+		canvas._drawarea = this;
+	</handler>
+	
+	<handler name="onopenWhiteBoard" >
+        if ($debug) Debug.write(".. onopenWhiteBoard ..");
+        this.loadInitObject()
+    </handler>
+            
+    <!--
+    	##########################################
+    	Add, remove and change Focus of Whiteboard
+    	##########################################
+     -->
+     
+    <method name="addNewItem">
+    	this.getNewWhiteboardId.doCall();
+    </method>
+    
+    <!--
+    public Long getNewWhiteboardId() {
+     -->
+    <netRemoteCallHib name="getNewWhiteboardId" funcname="whiteboardservice.getNewWhiteboardId"
+        remotecontext="$once{ canvas.thishib }" >
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("############## getNewWhiteboardId : ",value);
+                parent.addNewItemSynced(value);
+                parent.sendNewWindow(value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib>       
+    
+    <method name="addNewItemSynced" args="whiteboardId">
+    	for (var eg in this._bar.subviews) {
+    		this._bar.subviews[eg].isactive = false;
+    		this._bar.subviews[eg].onmouseout.sendEvent(null);
+    		this._bar.subviews[eg].objRef.setAttribute("visibility","hidden");
+    	}
+    	
+    	var whiteboard = new lz.multiWhiteboardPanel(this,{
+								    		whiteboardId:whiteboardId
+								    	});
+    	var tempWidth = this._bar.getCurrentSize();
+    	
+    	var whiteboardName = canvas.getLabelName(615) + (whiteboardCount > 0 ? " " + whiteboardCount : "");
+    	whiteboardCount++;
+    	var tWhiteboardBtn = new lz.whiteboardMiniButton(this._bar,{
+                            	   objRef:whiteboard,
+                            	   width:tempWidth,
+                            	   isactive:true,
+                            	   btnName: whiteboardName
+                            	});
+        
+        this._bar.currentBtn = tWhiteboardBtn;                    	
+                            	
+    	tWhiteboardBtn.onmouseout.sendEvent(null);
+        this.addNewItemButton.updatePosition();
+        canvas.whiteboardCount++;
+        return whiteboard;
+    </method>
+    
+    <method name="sendNewWindow" args="whiteboardId">
+    	if ($debug) Debug.warn("sendNewWindow :: ");
+    	if (canvas.ismoderator || canvas.isAllowedToDraw) {
+    		if ($debug) Debug.warn("DO sendActiveWindow :: ");
+    		this.objMessage = new Array();
+    		this.objMessage[0] = "newWhiteboard";
+    		this.objMessage[1] = whiteboardId;
+    		this.sendMessageToMembers.doCall();
+    	}
+    </method>
+    
+    <method name="newWhiteboard" args="obj">
+    	if ($debug) Debug.write("newWhiteboard :: ",obj);
+    	this.addNewItemSynced(obj[1]);
+    </method>
+    
+    
+    <!--
+        ##########################################
+        Removal of Whiteboards
+        ##########################################
+     -->
+    <method name="sendRemoveWindow" args="whiteboardId">
+    	if ($debug) Debug.warn("sendRemoveWindow :: ");
+    	if (canvas.ismoderator || canvas.isAllowedToDraw) {
+    		this.deleteWhiteboard.whiteboardId = whiteboardId;
+    		this.deleteWhiteboard.doCall();
+    		if ($debug) Debug.warn("DO sendRemoveWindow :: ");
+    		this.objMessage = new Array();
+    		this.objMessage[0] = "removeWindow";
+    		this.objMessage[1] = whiteboardId;
+    		this.sendMessageToMembers.doCall();
+	        canvas.whiteboardCount--;
+    	}
+    </method>
+    
+    <!--
+    public Boolean deleteWhiteboard(Long whiteBoardId)
+     -->
+    <netRemoteCallHib name="deleteWhiteboard" funcname="whiteboardservice.deleteWhiteboard"
+        remotecontext="$once{ canvas.thishib }" >
+    	<attribute name="whiteboardId" value="0" type="number" />
+        <netparam><method name="getValue">return parent.whiteboardId;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                //The onResult-Handler will be called be the rtmpconnection
+                if ($debug) Debug.write("############## deleteWhiteboard : ", value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib>       
+    
+    <method name="removeWindow" args="obj">
+    	if ($debug) Debug.write("removeWindow :: ",obj);
+    	for (var eg in this._bar.subviews) {
+    		
+    		if (this._bar.subviews[eg].objRef.whiteboardId == obj[1]) {
+    			
+    			this._bar.removeObjectSynced(this._bar.subviews[eg]);
+    			return;
+    			
+    		}
+    		
+    	}
+    </method>
+    
+    <netRemoteCallHib name="sendMessageToMembers" funcname="sendMessageToMembers" 
+    				  	showLoading="false" remotecontext="$once{ canvas.thishib }" >
+        <netparam><method name="getValue">return parent.parent.objMessage;</method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+            //The onResult-Handler will be called be the rtmpconnection
+            	if ($debug) Debug.write("sendMessageToMembers :: ",value);
+            ]]>
+        </handler>   
+    </netRemoteCallHib>     
+    
+    <method name="sendWatchObjectByWhiteboard" args="obj">
+    	if ($debug) Debug.write("sendWatchObjectByWhiteboard :: ",obj);
+    	for (var eg in this.subviews) {
+    		if (obj.id == this.subviews[eg].whiteboardId) {
+    			this.subviews[eg]._drawareaMask._drawarea.sendWatchObject(obj.param[2],obj.param[3],false);
+    			return;
+    		}
+    	}
+    </method>
+    
+    <method name="loadWmlToWhiteboardById" args="obj">
+        if ($debug) Debug.write("loadWmlToWhiteboardById :: ",obj);
+        for (var eg in this.subviews) {
+            if (obj.id == this.subviews[eg].whiteboardId) {
+                this.subviews[eg]._drawareaMask._drawarea.loadWmlToWhiteboardById(obj.roomitems);
+                return;
+            }
+        }
+    </method>
+    
+    <method name="activateWhiteboard" args="obj">
+    	if ($debug) Debug.write("activateWhiteboard :: ",obj);
+    	for (var eg in this._bar.subviews) {
+    		
+    		if (this._bar.subviews[eg].objRef.whiteboardId == obj[1]) {
+    			
+    			this._bar.subviews[eg].activateSynced();
+    			return;
+    			
+    		}
+    		
+    	}
+    </method>
+    
+    <!--
+    	##########################################
+    	StarUp Loading Of Objects
+    	##########################################
+     -->
+    
+    <method name="loadInitObject">
+    	this.getRoomItemsBy.doCall();
+    </method>
+    
+	<netRemoteCallHib name="getRoomItemsBy" funcname="whiteboardservice.getRoomItemsBy"
+        remotecontext="$once{ canvas.thishib }" >
+        <handler name="ondata" args="value">
+            <![CDATA[
+            	//The onResult-Handler will be called be the rtmpconnection
+            	if ($debug) Debug.write("############## getRoomItemsBy : ",value);
+            	parent.loadWhiteboards(value.whiteboardObjects);
+            ]]>
+        </handler>   
+    </netRemoteCallHib>   
+    
+    <method name="loadWhiteboards" args="whiteboardObjects">
+    	<![CDATA[
+    	   if ($debug) Debug.write("whiteboardObjects :: ",whiteboardObjects.length);
+    	   var mainArray = new Array();
+    	   for (var eg in whiteboardObjects) {
+    	   	   mainArray.push(whiteboardObjects[eg]);
+    	   }
+    	   mainArray.reverse();
+    	   
+    	   for (var eg=0;eg<mainArray.length;eg++) {
+    	   	  var whiteBoard = this.addNewItemSynced(mainArray[eg].whiteBoardId);
+    	   	  
+    	   	  whiteBoard._drawareaMask._drawarea.loadObjectList(mainArray[eg]);
+    	   }
+    	]]>
+    </method>
+      
+    
+    <whiteboardBarMenu name="_bar" height="20" y="21">
+    	<attribute name="whiteboardId" value="-1" type="number" />
+    	
+    	<handler name="onsubview" args="newSub">
+    		parent.addNewItemButton.updatePosition();
+    	</handler>
+    	<handler name="onwidth" args="newSub">
+            parent.addNewItemButton.updatePosition();
+        </handler>
+    </whiteboardBarMenu>
+    
+    <view name="addNewItemButton" y="24" 
+    	  visible="${ ((canvas.ismoderator) ? true : ((canvas.isAllowedToDraw) ? true : false )) }"
+    	  >
+    	
+    	<attribute name="whiteboardId" value="-1" type="number" />
+    	
+    	<method name="updatePosition">
+    		if (parent._bar.subviews.length != 0) {
+        		var borderItem = parent._bar.subviews[parent._bar.subviews.length-1];
+        		this.setAttribute("x",borderItem.x + borderItem.width + 2);
+    		} else {
+    			this.setAttribute("x",2);
+    		}
+    	</method>
+    	
+    	<handler name="onmouseover" args="refOb">
+    		this.bg.setAttribute("visibility","visible");
+    	</handler>
+    	
+    	<handler name="onmouseout" args="refOb">
+            this.bg.setAttribute("visibility","hidden");
+        </handler>
+        
+        <handler name="onclick" args="refOb">
+            parent.addNewItem();
+        </handler>
+        
+        <view name="bg" bgcolor="0xEEEEEE" opacity="0.5" 
+        	  width="18" height="18" visibility="hidden" />
+    	
+    	<view resource="add_whiteboard_rsc" y="0" x="0" />
+    	
+    	<labelTooltip labelid="1596" />
+    </view>
+    
+    <view width="${ parent.width }" height="1" y="41"
+    	  bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+    	<attribute name="whiteboardId" value="-1" type="number" />
+    </view>
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/helper/boundingBoxAll.lzx b/WebContent/src/modules/conference/whiteboard/helper/boundingBoxAll.lzx
new file mode 100644
index 0000000..b6d91a0
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/helper/boundingBoxAll.lzx
@@ -0,0 +1,519 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<include href="utils/states/resizestatemin.lzx"/>
+
+<!--
+    The order of views is important in this class
+    otherwise the scrollbar of the swfPresentation would be not visible or partly overlayed
+    
+    
+    this is the selection Box for all Whiteboard Objects
+ -->
+ 
+<class name="boundingBoxAllRotationMarger" extends="view" 
+	   width="24" height="24" resource="bounding_item_rsc">
+	
+	<attribute name="dragStarted" value="false" type="boolean"/>
+	
+	<handler name="onmouseover">
+        lz.Cursor.setCursorGlobal("arrow_rotate_panel_cursor");
+    </handler>
+    <handler name="onmouseout">
+        lz.Cursor.unlock();
+    </handler>
+    
+    <handler name="onx" args="x">
+    	this.doMoveDragPoint();
+    </handler>
+    <handler name="ony" args="y">
+        this.doMoveDragPoint();
+    </handler>
+    
+    <method name="doMoveDragPoint">
+    	if (!this.dragStarted) {
+    		return;
+    	}
+    	parent.doMoveDragPoint(this.x+12,this.y+12);
+    </method>
+    
+    <handler name="onmousedown">
+    	this.dragStarted = true;
+    	parent.doStartDragPoint();
+        this.dragger.apply();
+    </handler>
+    <handler name="onmouseup">
+    	this.dragStarted = false;
+        this.dragger.remove();
+        parent.endDrawClipArtDrag();
+        lz.Cursor.unlock();
+    </handler>
+    
+    <dragstate name="dragger" />  
+    
+</class> 
+    
+<class name="boundingBoxAll" extends="view" focusable="true">
+    
+<!-- 
+	<method name="removeIt">
+		canvas._drawarea.setAttribute('boundingIsActive',true);
+	</method>
+ -->	
+	<method name="removeIt">
+		//Debug.write("removeIt +**********",this.isinited);
+		this.whiteboardRef.setAttribute('boundingIsActive',false);
+		if (this.rs) this.rs.remove();
+		if (this.dragger) this.dragger.remove();
+		this.destroy();
+	</method>
+
+	<attribute name="ex" value="0" type="number" />
+	<attribute name="ey" value="0" type="number" />
+	<attribute name="ewidth" value="0" type="number" />
+	<attribute name="eheight" value="0" type="number" />
+	
+	<attribute name="innerInsetScrollbars" value="0" type="number"/>
+	
+	<attribute name="startdragX" value="0" type="number" />
+	<attribute name="startdragY" value="0" type="number" />
+	<attribute name="startdragWidth" value="0" type="number" />
+	<attribute name="startdragHeight" value="0" type="number" />
+	
+	<attribute name="objRef" value="null" />
+	<attribute name="whiteboardRef" value="null" />
+	<attribute name="doHandlerUpdates" value="false" type="boolean" />	
+    <attribute name="boundingDoUpdateOnInit" value="true" type="boolean" />	 
+    
+    <attribute name="canBeDragged" value="true" type="boolean" />
+    <attribute name="canBeResized" value="true" type="boolean" />
+    
+    <!--- Minimum width for the windowy, default: 60.
+          @keywords final -->
+    <attribute name="minwidth" value="2"/>
+
+    <!--- Minimum height for the window, default: 50.
+          @keywords final -->
+    <attribute name="minheight" value="2"/>    
+	
+	<method name="__LZRemoveItem" args="itemRef">
+		this.whiteboardRef.deleteItemByName(this.objRef.name);
+		//Debug.write("__LZRemoveItem");
+	</method>
+	
+	<handler name="oninit">
+		<![CDATA[
+		    if (!this.boundingDoUpdateOnInit) {
+		    	if ($debug) Debug.write("DESTROY the clickable view");
+		    	//this._innerDrag.destroy();
+		    }
+		    
+		    if (!this.canBeResized) {
+		    	this._gripperNoResize.setAttribute("visibility","visible");
+		    	this._gripperResize.setAttribute("visibility","hidden");
+		    }
+		
+			this.setAttribute('x',this.ex);
+			this.setAttribute('y',this.ey);
+			this.setAttribute('width',this.ewidth);
+			this.setAttribute('height',this.eheight);	
+			this.setStartValues();		
+			if ($debug) Debug.write("Update Property Panel Settings to Object Properties ",this.objRef.name);
+			
+			lz.Focus.setFocus(this, false); 
+			
+			if (this.objRef.typeOfObject == "text") {
+				this._editText.setAttribute("visibility","visible");
+			}
+			
+            //FIXME - Add Ellipse, Line and Free Draw Tool to it
+            if (this.objRef.name.indexOf('rectangle') >= 0){
+				if ($debug) Debug.write("this.objRef._innerRect ",this.objRef._innerRect);
+				
+				if ($debug) Debug.write("strokeStyle: ",this.objRef._innerRect.strokeStyle);
+				if (this.objRef._innerRect.strokeStyle == '#000000') {
+					if ($debug) Debug.write("strokeStyle EMPTY ");
+					this.whiteboardRef.currentrectanglestrokeDis = -1;
+				} else {
+					this.whiteboardRef.currentrectanglestroke = this.objRef._innerRect.strokeStyle;
+					this.whiteboardRef.currentrectanglestrokeDis = 1;
+				}
+				
+				if ($debug) Debug.write("fillStyle: ",this.objRef._innerRect.fillStyle);
+				if (this.objRef._innerRect.fillStyle == '#000000') {
+					if ($debug) Debug.write("fillStyle EMPTY ");
+					this.whiteboardRef.currentrectanglestrokeFillDis = -1;
+				} else {
+					this.whiteboardRef.currentrectanglestrokeFill = this.objRef._innerRect.fillStyle;
+					this.whiteboardRef.currentrectanglestrokeFillDis = 1;
+				}
+				
+				if ($debug) Debug.write("lineWidth: ",this.objRef._innerRect.lineWidth);
+				this.whiteboardRef.currentrectangleineWidth = this.objRef._innerRect.lineWidth;
+				
+			} else if (this.objRef.name.indexOf('swf') >= 0) {
+                this.setAttribute("innerInsetScrollbars",16);
+            } else if (this.objRef.name.indexOf('clipart') >= 0) {
+            	this.canBeResized = false;
+            	this._gripperNoResize.setAttribute("visibility","visible");
+		    	this._gripperResize.setAttribute("visibility","hidden");
+            	
+            	new lz.boundingBoxAllRotationMarger(this,{
+                    	       x:this.objRef.clipart.clipArtEndx-12,
+                    	       y:this.objRef.clipart.clipArtEndy-12
+                        	});
+            	
+            }
+            
+            
+            this.whiteboardRef.parent.parent._propertyPanel.loadPanelByBoundingBox(this.whiteboardRef,this.objRef);
+            
+			this.doUpdateAction();
+		]]>
+	</handler>
+	
+	<method name="doStartDragPoint">
+		this.whiteboardRef.setStartPoint(this.objRef.clipart.x+this.x,this.objRef.clipart.y+this.y);
+	</method>
+	
+	<method name="doMoveDragPoint" args="x,y">
+		this.whiteboardRef.trackDrawClipArtDraw(this.x+x,this.y+y,this.objRef.clipart);
+	</method>
+	
+	<method name="endDrawClipArtDrag">
+        this.whiteboardRef.endDrawClipArtDrag(this.objRef);
+        this.whiteboardRef.reselectShowObjectBounds(this.objRef.name);
+    </method>
+    
+	<!--
+	   Do update the Selection-Box, in case another Moderator or User has moved the Object
+	   while you have it in focus
+	 -->
+    <method name="sendRemoteUpdate" args="obj">
+        <![CDATA[
+           
+           if (this.objRef.name == obj.name) {
+           	   
+           	    this.resetValues();
+           	
+           }
+        
+        ]]>
+    </method>
+    
+	
+	<method name="resetValues">
+		this.ex = this.objRef.x;
+		this.ey = this.objRef.y;
+		this.ewidth = this.objRef.width;
+		this.eheight = this.objRef.height;			
+		this.setAttribute('x',this.objRef.x);
+		this.setAttribute('y',this.objRef.y);
+		this.setAttribute('width',this.objRef.width);
+		this.setAttribute('height',this.objRef.height);	
+		this.setStartValues();	
+	</method>
+
+    <method name="doUpdateAction" >
+    	this.setAttribute('doHandlerUpdates',true);
+    	if (this.boundingDoUpdateOnInit) {
+    	    this._innerDrag.onmousedown.sendEvent();
+    	}
+    </method>
+    
+    <handler name="onheight">
+    	if(this.doHandlerUpdates){
+    		this.objRef.setAttribute('height',this.height);
+    	}
+    </handler>
+    
+    <handler name="onwidth">
+    	if(this.doHandlerUpdates){
+    		this.objRef.setAttribute('width',this.width);
+    	}
+    </handler>
+    
+    <handler name="onx">
+        if(this.doHandlerUpdates){
+            
+            var tx = this.getAttributeRelative('x',objRef);
+        
+            if(this.objRef.parent.isSnapToGrid){   
+                tx = Math.round(tx/this.objRef.parent.gridWidth)*this.objRef.parent.gridWidth;
+                this.setAttribute("x",Math.round(this.x/this.objRef.parent.gridWidth)*this.objRef.parent.gridWidth)
+            }
+            
+            this.objRef.setAttribute('x',tx);
+        }
+    </handler>
+    
+    <handler name="ony">
+        if(this.doHandlerUpdates){
+            
+            var ty = this.getAttributeRelative('y',objRef);
+        
+            if(this.objRef.parent.isSnapToGrid){   
+                ty = Math.round(ty/this.objRef.parent.gridWidth)*this.objRef.parent.gridWidth;
+                this.setAttribute("y",Math.round(this.y/this.objRef.parent.gridWidth)*this.objRef.parent.gridWidth)
+            }
+            
+            this.objRef.setAttribute('y',ty);
+        }
+    </handler>
+    
+    <handler name="onkeydown" args="key">
+        if ($debug) Debug.write("onkeydown ",key);
+
+        //this.objRef.parent.UpdateByObject(this.objRef);
+
+        if (key == 46) {
+        	this.__LZRemoveItem(this.objRef);
+        } else if (key == 40) {
+        	var shiftPressed = lz.Keys.isKeyDown("shift"); 
+        	if ($debug) Debug.write("shiftPressed ",shiftPressed);
+        	this.doHandlerUpdates = true;
+        	this.setAttribute("y",this.y+(shiftPressed ? 20 : 2));
+        	this.doHandlerUpdates = false;
+        	this.objRef.parent.UpdateByObject(this.objRef);
+			this.setStartValues();
+        } else if (key == 38) {
+        	var shiftPressed = lz.Keys.isKeyDown("shift"); 
+        	this.doHandlerUpdates = true;
+        	this.setAttribute("y",this.y-(shiftPressed ? 20 : 2));
+        	this.doHandlerUpdates = false;
+        	this.objRef.parent.UpdateByObject(this.objRef);
+			this.setStartValues();
+        } else if (key == 39) {
+        	var shiftPressed = lz.Keys.isKeyDown("shift"); 
+        	this.doHandlerUpdates = true;
+        	this.setAttribute("x",this.x+(shiftPressed ? 20 : 2));
+        	this.doHandlerUpdates = false;
+        	this.objRef.parent.UpdateByObject(this.objRef);
+			this.setStartValues();
+        } else if (key == 37) {
+        	var shiftPressed = lz.Keys.isKeyDown("shift"); 
+        	this.doHandlerUpdates = true;
+        	this.setAttribute("x",this.x-(shiftPressed ? 20 : 2));
+        	this.doHandlerUpdates = false;
+        	this.objRef.parent.UpdateByObject(this.objRef);
+			this.setStartValues();
+        }
+    </handler>
+	
+	<method name="setStartValues">
+		this.startdragX = this.x;
+		this.startdragY = this.y;
+		this.startdragWidth = this.width;
+		this.startdragHeight = this.height;			
+	</method>
+
+    <method name="_applyResizestateFromThis">
+    	lz.Focus.setFocus(this, true); 
+    	if ($debug) Debug.write("Apply resize State");
+    	if (!this.canBeResized) {
+            return;
+        }
+		this.setStartValues();		
+		this.rs.apply()
+	</method>
+    
+    <method name="_removeResizestateFromThis">
+		<![CDATA[
+		if (!this.canBeResized) {
+            return;
+        }
+    	this.rs.remove();
+		
+		if (this.startdragX != this.x || this.startdragY != this.y || this.startdragWidth != this.width || this.startdragHeight != this.height){
+			//Debug.write("value changed 1");
+			this.objRef.parent.UpdateByObject(this.objRef);
+			this.setStartValues();
+		}
+		if (parent.onBoundingBox) parent.onBoundingBox.sendEvent(this);
+			
+		]]>
+    </method>
+	
+	<method name="_applyDragstateFromThis">
+		lz.Focus.setFocus(this, true); 
+		if (!this.canBeDragged) {
+			return;
+		}
+		this.setStartValues();
+		this.dragger.apply()
+	</method>	
+    
+    <method name="_removeDragstateFromThis">
+		<![CDATA[
+		if (!this.canBeDragged) {
+            return;
+        }
+    	this.dragger.remove();
+		
+    	if (this.startdragX != this.x || this.startdragY != this.y || this.startdragWidth != this.width || this.startdragHeight != this.height){
+			//Debug.write("value changed 2");
+			this.objRef.parent.UpdateByObject(this.objRef);
+			this.setStartValues();
+		}
+		if (parent.onBoundingBox) parent.onBoundingBox.sendEvent(this);
+		
+		]]>			
+    </method>
+
+    <method name="doSetInnerObjectsBounds" args="w,h">
+        this._inner._inner.setAttribute('width',w);
+        this._inner._inner.setAttribute('height',h);
+    </method>
+    
+    <method name="applyScrollbarToObject">
+        <![CDATA[
+            //if ($debug) Debug.write("-- applyScrollbarToObject --",this.objRef.typeOfObject);
+	        if (this.objRef.typeOfObject == 'swf'){
+	            if (canvas.ismoderator || canvas.isAllowedToDraw) {
+                    //if ($debug) Debug.write("-- setCurrentMouseWheelObject --",this.objRef._scrollstv);
+                    //setCurrentMouseWheelObject(this.objRef._scrollstv);
+                }
+	        }
+        ]]>
+    </method>
+    
+    <method name="removeScrollbarToObject">
+        if (this.objRef.typeOfObject == 'swf'){
+            //Well disable, you can always disable without any problem
+            //and in case you do exactly switch the moderation now
+            //it will remove it in any case
+            disableCurrentMouseWheelObject();
+        }
+    </method>
+        
+    <resizestatemin name="rs"> 	
+    	<text x="2" y="2" text="${ 'w: '+parent.width+' h: '+parent.height }" bgcolor="white"/>
+    </resizestatemin>
+    
+   	<dragstate name="dragger">    
+		<text x="2" y="2" text="${ 'x: '+parent.getAttributeRelative('x',parent.objRef)+' y: '+parent.getAttributeRelative('y',parent.objRef) }" bgcolor="white"/>   	
+   	</dragstate>
+	
+	<view name="_innerDrag" width="${ parent.width-parent.innerInsetScrollbars }" 
+		  height="${ parent.height-parent.innerInsetScrollbars }" 
+		  onmouseover="parent.applyScrollbarToObject()" 
+          onmouseout="parent.removeScrollbarToObject()"
+		  onmousedown="parent._applyDragstateFromThis()" 
+    	  onmouseup="parent._removeDragstateFromThis()">
+    	
+    	<contextmenu>
+			<contextmenuitem caption="$once{ canvas.getLabelName(80) }" 
+							 onselect="parent.parent.parent.__LZRemoveItem()" />
+        </contextmenu>
+		 
+		<handler name="ondblclick">
+
+			//Debug.write("ondblclick: ",this.parent.objRef.typeOfObject);
+			if (this.parent.objRef.typeOfObject == "text") {
+				var x = this.parent.objRef.x; //this.parent.objRef.getAttributeRelative('x', canvas);
+				var y = this.parent.objRef.y; //this.parent.objRef.getAttributeRelative('y', canvas);
+				//Debug.write("x,y ",x,y);
+				this.parent.whiteboardRef
+						.editTextByValues(this.parent.objRef,
+								this.parent.objRef.name,
+								this.parent.objRef.text, x, y,
+								this.parent.objRef.width,
+								this.parent.objRef.height);
+			}
+		</handler>	
+		
+		<handler name="onmouseover">
+			if (this.parent.objRef.typeOfObject != "swf") {
+	           lz.Cursor.setCursorGlobal("arrow_draw_panel_cursor");
+			}
+		</handler>
+		
+		<handler name="onmouseout">
+			lz.Cursor.unlock();
+		</handler>
+		
+		
+	</view>
+	
+	<image src="$once{ canvas.getThemeImage('bounding_box_textedit_item_rsc') }" y="2"  width="16" height="16" stretches="both"
+				name="_editText" visibility="hidden" x="${ parent.width-this.width-parent.innerInsetScrollbars-18 }" >
+		<handler name="onclick">
+			this.parent.whiteboardRef
+						.editTextByValues(this.parent.objRef,
+								this.parent.objRef.name,
+								this.parent.objRef.text, 
+								this.parent.x, 
+								this.parent.y,
+								this.parent.objRef.width,
+								this.parent.objRef.height);
+		</handler>
+		<handler name="onmouseover">
+	        lz.Cursor.restoreCursor();
+	        lz.Cursor.showHandCursor(true);
+	    </handler>
+	    <handler name="onmouseout">
+	    	lz.Cursor.showHandCursor(false);
+	        lz.Cursor.unlock();
+	    </handler>
+    
+		<labelTooltip labelid="1463" />
+	</image>	
+	
+	<image src="$once{ canvas.getThemeImage('bounding_box_delete_item_rsc') }" y="2"  width="16" height="16"
+					x="${ parent.width-this.width-parent.innerInsetScrollbars-2 }" stretches="both">
+		<handler name="onclick">
+			//Debug.write("this.parent.objRef.name: ",this.parent.objRef.name);
+			//this.parent.whiteboardRef.deleteItemByName(this.parent.objRef.name);
+			parent.__LZRemoveItem(this.parent.objRef);
+		</handler>
+		<handler name="onmouseover">
+	        lz.Cursor.restoreCursor();
+	        lz.Cursor.showHandCursor(true);
+	    </handler>
+	    <handler name="onmouseout">
+	    	lz.Cursor.showHandCursor(false);
+	        lz.Cursor.unlock();
+	    </handler>
+    
+		<labelTooltip labelid="80" />
+	</image>	    
+    
+    <view resource="_boundingBoxPointerTL" x="0" y="0" />
+    <view resource="_boundingBoxPointerTR" x="${ parent.width-this.width }" y="0" />
+    <view name="_gripperResize" visibility="visible"
+        resource="_boundingBoxPointerUR" x="${ parent.width-this.width }" y="${ parent.height-this.height }" 
+        onmousedown="parent._applyResizestateFromThis()" onmouseup="parent._removeResizestateFromThis()" >
+    	<handler name="onmouseover">
+	        lz.Cursor.setCursorGlobal("arrow_resize_panel_cursor");
+	    </handler>
+	    <handler name="onmouseout">
+	        lz.Cursor.unlock();
+	    </handler>
+        <labelTooltip labelid="252" />
+    </view>
+    <view name="_gripperNoResize" visibility="hidden" 
+        resource="_boundingBoxPointerURNoGripper" x="${ parent.width-this.width }" y="${ parent.height-this.height }" />
+    <view resource="_boundingBoxPointerUL" x="0" y="${ parent.height-this.height }" />
+
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/helper/library.lzx b/WebContent/src/modules/conference/whiteboard/helper/library.lzx
new file mode 100644
index 0000000..04b6215
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/helper/library.lzx
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!-- APL author sebawagner -->
+	<resource name="bounding_item_rsc" src="resources/bounding_item.png" />
+
+    <include href="boundingBoxAll.lzx" />
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/helper/resources/bounding_item.fla b/WebContent/src/modules/conference/whiteboard/helper/resources/bounding_item.fla
new file mode 100644
index 0000000..23ecab3
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/helper/resources/bounding_item.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/helper/resources/bounding_item.png b/WebContent/src/modules/conference/whiteboard/helper/resources/bounding_item.png
new file mode 100644
index 0000000..638f9d4
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/helper/resources/bounding_item.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/library.lzx b/WebContent/src/modules/conference/whiteboard/library.lzx
new file mode 100644
index 0000000..95beb27
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/library.lzx
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!-- APL author sebawagner -->
+	<resource name="_boundingBoxPointerTR" src="resources/boundingBoxTR.png" />
+	<!-- APL author sebawagner -->
+	<resource name="_boundingBoxPointerTL" src="resources/boundingBoxTL.png" />
+	<!-- APL author sebawagner -->
+	<resource name="_boundingBoxPointerUR" src="resources/boundingBoxUR.png" />
+	<!-- APL author sebawagner -->
+	<resource name="_boundingBoxPointerURNoGripper" src="resources/boundingBoxULNoGripper.png" />
+	<!-- APL author sebawagner -->
+	<resource name="_boundingBoxPointerUL" src="resources/boundingBoxUL.png" />
+	<!-- APL author sebawagner -->
+	<resource name="pointer_whiteboard_rsc" src="resources/pointer.swf" />
+	<!-- FamFam Icon Set -->
+	<resource name="bold" src="resources/text_bold.png" />
+	<!-- FamFam Icon Set -->
+	<resource name="italic" src="resources/text_italic.png" />
+	<!-- FamFam Icon Set -->
+	<resource name="add_whiteboard_rsc" src="resources/add.png" />
+	
+	<include href="incubator/lzcombobox.lzx"/> 
+	<include href="base/" />
+	<include href="windows/" />
+	<include href="helper/" />
+	
+	<include href="panels/" />
+	
+	<include href="basePropertyPanelWhiteboard.lzx" />
+    <include href="fixedFileExplorerWhiteBoard.lzx" />
+    <include href="fixedFileExplorerWhiteboardPanel.lzx" />
+    <include href="whiteboardMiniButton.lzx" />
+    <include href="whiteboardBarMenu.lzx" />
+
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/panels/library.lzx b/WebContent/src/modules/conference/whiteboard/panels/library.lzx
new file mode 100644
index 0000000..7c30379
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/library.lzx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="maintoolspanel/" />
+	<include href="propertypanel" />
+	
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/library.lzx b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/library.lzx
new file mode 100644
index 0000000..b18b8fa
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/library.lzx
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!--  APL author sebawagner -->
+    <resource name="sub_menu_tools_panel_rsc" src="resources/sub_menu.png" />
+    <!--  APL author sebawagner -->
+    <resource name="sub_menu_top_grip_colored_rsc" src="resources/sub_menu_top_grip.swf" />	
+    
+    <!--
+        How to create image map:
+        $imageMagick/montage *.png -tile 20x -geometry 22x22+2+2 all_images.jpg
+     -->
+
+	<include href="mainToolsPanelItem.lzx" />  
+	<include href="mainToolsPanel.lzx" />  
+	<include href="subMenuIconToolsToUpload.lzx" />
+	
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/mainToolsPanel.lzx b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/mainToolsPanel.lzx
new file mode 100644
index 0000000..8188076
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/mainToolsPanel.lzx
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="verticalMenuIconBar" extends="view" y="22" x="4" clickable="true">
+	<simplelayout axis="y" spacing="2" />
+	<mainToolsPanelItem name="plain" modi="plainConfirm" labelid="69" resourceItem="plain" setSelectionToItem="false" />
+	<mainToolsPanelItem name="plainSlide" modi="plainSlide" labelid="1005" resourceItem="plainSlides" setSelectionToItem="false" />
+	
+	<!--
+	<mainToolsPanelItem name="drag" modi="drag" labelid="1113" resourceItem="arrow_draw_panel_tool_cursor" />
+	 -->
+
+	<mainToolsPanelItem name="saveobj" modi="saveobj" labelid="197" resourceItem="saveobj" setSelectionToItem="false" />
+	
+	<mainToolsHPanelSeperator>
+        <attribute name="modi" value="" type="string"/>
+    </mainToolsHPanelSeperator>
+	<redoUndoToolsPanelItem name="revert" doredo="false" labelid="70" resourceItem="revert" />
+	<mainToolsHPanelSeperator>
+		<attribute name="modi" value="" type="string"/>
+	</mainToolsHPanelSeperator>
+	<mainToolsPanelItem name="hand" modi="hand" labelid="72" _isselected="true" 
+						resourceItem="menupointer_rsc" />
+    <mainToolsPanelItem name="pointerWhiteboard" modi="pointerWhiteboard" 
+                        labelid="557" x_insetResource="1" y_insetResource="1"
+                        resourceItem="pointer_whiteboard_menu_rsc" />
+	<mainToolsPanelItem name="letter" modi="letter" labelid="73" resourceItem="letter" />
+	<mainToolsPanelItem name="paint" modi="paint" labelid="74" resourceItem="paint" />
+	<mainToolsPanelItem name="line" modi="line" labelid="75" resourceItem="line_rsc" />
+	<mainToolsPanelItem name="uline" modi="uline" labelid="76" resourceItem="uline_rsc" />
+	<mainToolsPanelItem name="rectangle" modi="rectangle" labelid="77" resourceItem="rectangle" />
+	<mainToolsPanelItem name="ellipse" modi="ellipse" labelid="78" resourceItem="ellipse" />
+	<mainToolsPanelItem name="drawarrow" modi="drawarrow" labelid="79" resourceItem="drawarrowicon_rsc" />
+
+    <mainToolsPanelItem name="clipart" modi="clipart" labelid="1323" >
+        
+        <handler name="oninit">
+            this._bgIcon.setAttribute("visibility","hidden");
+            var imageurl = canvas.getUrl() + 'public/cliparts/thumb/'
+                                           + canvas._drawarea.currentClipArtRessourceName;
+            
+            this._rscIcon.setSource(imageurl);
+        </handler>
+        
+        <!--
+        <view x="$once{ parent.x_insetResource }" y="$once{ parent.x_insetResource }" 
+              height="18" width="18" stretches="both" name="_bgIconIcon" />      
+         -->
+              
+        <view resource="sub_menu_tools_panel_rsc"
+              x="$once{ parent.width - 10 }" y="$once{ parent.height - 10 }">
+            <handler name="onclick">
+            	<![CDATA[
+                if ($debug) Debug.write("Show Sub Menu");
+                new lz.subMenuIconToolsToUpload(canvas,{
+                                x:500,
+                                y:82,
+                                refToolbar:parent
+                            });
+                ]]>
+            </handler>
+            <labelTooltip labelid="1335" />
+        </view>
+        
+    </mainToolsPanelItem>
+
+</class>
+
+<class name="horizontalMenuIconBar" extends="view" y="22" x="4" clickable="true">
+	<simplelayout axis="x" spacing="2" />
+	<mainToolsPanelItem name="plain" modi="plainConfirm" labelid="69" resourceItem="plain" setSelectionToItem="false" />
+	<mainToolsPanelItem name="plainSlide" modi="plainSlide" labelid="1005" resourceItem="plainSlides" setSelectionToItem="false" />
+	<!--
+	<mainToolsPanelItem name="drag" modi="drag" labelid="1113" resourceItem="arrow_draw_panel_tool_cursor" />
+     -->
+	<mainToolsPanelItem name="saveobj" modi="saveobj" labelid="197" resourceItem="saveobj" setSelectionToItem="false" />
+	
+	<mainToolsVPanelSeperator>
+        <attribute name="modi" value="" type="string"/>
+    </mainToolsVPanelSeperator>
+	<redoUndoToolsPanelItem name="revert" doredo="false" labelid="70" resourceItem="revert" />
+	<mainToolsVPanelSeperator>
+        <attribute name="modi" value="" type="string"/>
+    </mainToolsVPanelSeperator>	
+	<mainToolsPanelItem name="hand" modi="hand" labelid="72" _isselected="true" 
+						resourceItem="menupointer_rsc" />
+    <mainToolsPanelItem name="pointerWhiteboard" modi="pointerWhiteboard" 
+                        labelid="557" resourceItem="pointer_whiteboard_menu_rsc" />
+	<mainToolsPanelItem name="letter" modi="letter" labelid="73" resourceItem="letter" />
+	<mainToolsPanelItem name="paint" modi="paint" labelid="74" resourceItem="paint" />
+	<mainToolsPanelItem name="line" modi="line" labelid="75" resourceItem="line_rsc" />
+	<mainToolsPanelItem name="uline" modi="uline" labelid="76" resourceItem="uline_rsc" />
+	<mainToolsPanelItem name="rectangle" modi="rectangle" labelid="77" resourceItem="rectangle" />
+	<mainToolsPanelItem name="ellipse" modi="ellipse" labelid="78" resourceItem="ellipse" />
+	<mainToolsPanelItem name="drawarrow" modi="drawarrow" labelid="79" resourceItem="drawarrowicon_rsc" />
+	<mainToolsPanelItem name="clipart" modi="clipart" labelid="1323" >
+        
+        <handler name="oninit">
+            if (this["_bgIcon"]) {
+        	   this._bgIcon.setAttribute("visibility","hidden");
+        	}
+            var imageurl = canvas.getUrl() + 'public/cliparts/thumb/'
+                                           + canvas._drawarea.currentClipArtRessourceName;
+            
+            this._rscIcon.setSource(imageurl);
+        </handler>
+        
+        <view x="$once{ parent.x_insetResource }" y="$once{ parent.x_insetResource }" 
+              height="18" width="18" stretches="both" name="_bgIconIcon" />      
+        
+        <view resource="sub_menu_tools_panel_rsc"
+              x="$once{ parent.width - 10 }" y="$once{ parent.height - 10 }">
+            <handler name="onclick">
+                if ($debug) Debug.write("Show Sub Menu");
+                new lz.subMenuIconToolsToUpload(canvas,{
+                                x:500,
+                                y:82,
+                                refToolbar:parent
+                            });
+            </handler>
+            <labelTooltip labelid="1335" />
+        </view>
+        
+    </mainToolsPanelItem>
+</class>
+
+
+<class name="mainToolsTopPanel" extends="baseTopPanel" 
+	   width="420" height="33" title="" docking="true"
+	   activationClassBounding="mainToolsLeftPanel"
+	   activationVClassBounding="mainToolsTopPanel"
+	   leftClassPanel="mainToolsLeftPanel"
+	   topClassPanel="mainToolsTopPanel"
+	   bottomClassPanel="mainToolsTopPanel"
+	   rightClassPanel="mainToolsLeftPanel"
+	   verticalClassActive="true"
+	   hWidth="33" hHeight="420">
+	
+    <method name="updateToolSelection" args="modi">
+    	<![CDATA[
+            if ($debug) Debug.write("-updateToolSelection-  ",modi);
+            
+            for (var i=0;i<this._tools.subviews.length;i++){
+                
+            	if (this._tools.subviews[i].modi == modi) {
+            		
+            		this._tools.subviews[i].setSelectionWithoutEvent();
+            		return;
+            	}
+            	
+            }
+            
+        ]]>
+    </method>
+    
+	<horizontalMenuIconBar name="_tools" x="20" y="4" />
+</class>	
+	
+<class name="mainToolsLeftPanel" extends="baseLeftPanel" 
+	   width="33" height="420" title="" docking="true"
+	   activationClassBounding="mainToolsLeftPanel"
+	   activationVClassBounding="mainToolsTopPanel"
+	   topClassPanel="mainToolsTopPanel"
+	   bottomClassPanel="mainToolsTopPanel"
+	   leftClassPanel="mainToolsLeftPanel"
+	   rightClassPanel="mainToolsLeftPanel"
+	   verticalClassActive="false"
+	   vWidth="420" vHeight="33">
+	
+    <method name="updateToolSelection" args="modi">
+        <![CDATA[
+            if ($debug) Debug.write("-updateToolSelection-  ",modi);
+            
+            for (var i=0;i<this._tools.subviews.length;i++){
+                
+                if (this._tools.subviews[i].modi == modi) {
+                    
+                    this._tools.subviews[i].setSelectionWithoutEvent();
+                    return;
+                }
+                
+            }
+            
+        ]]>
+    </method>	
+	
+	<verticalMenuIconBar name="_tools" x="3" y="20" />
+</class>
+
+<!-- ################
+    Non Moderator Tools
+-->
+
+<class name="verticalMenuIconBarPointer" extends="view" y="22" x="4" clickable="true">
+    <simplelayout axis="y" spacing="2" />
+    <mainToolsPanelItem name="pointerWhiteboard" modi="pointerWhiteboard" labelid="557" 
+                        resourceItem="pointer_whiteboard_menu_rsc" />
+</class>
+
+<class name="horizontalMenuIconBarPointer" extends="view" y="22" x="4" clickable="true">
+    <simplelayout axis="x" spacing="2" />
+    <mainToolsPanelItem name="pointerWhiteboard" modi="pointerWhiteboard" labelid="557" 
+                        resourceItem="pointer_whiteboard_menu_rsc" />
+</class>
+
+<class name="mainToolsTopPanelPointer" extends="baseTopPanel" 
+       width="52" height="32" title="" docking="true"
+       activationClassBounding="mainToolsLeftPanelPointer"
+       activationVClassBounding="mainToolsTopPanelPointer"
+       leftClassPanel="mainToolsLeftPanelPointer"
+       topClassPanel="mainToolsTopPanelPointer"
+       bottomClassPanel="mainToolsTopPanelPointer"
+       rightClassPanel="mainToolsLeftPanelPointer"
+       verticalClassActive="true"
+       hWidth="32" hHeight="52">
+    
+    <horizontalMenuIconBarPointer x="20" y="4" />
+</class>    
+
+<class name="mainToolsLeftPanelPointer" extends="baseLeftPanel" 
+       width="32" height="52" title="" docking="true"
+       activationClassBounding="mainToolsLeftPanelPointer"
+       activationVClassBounding="mainToolsTopPanelPointer"
+       topClassPanel="mainToolsTopPanelPointer"
+       bottomClassPanel="mainToolsTopPanelPointer"
+       leftClassPanel="mainToolsLeftPanelPointer"
+       rightClassPanel="mainToolsLeftPanelPointer"
+       verticalClassActive="false"
+       vWidth="52" vHeight="32">
+    
+    <verticalMenuIconBarPointer x="2" y="20" />
+</class>	
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/mainToolsPanelItem.lzx b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/mainToolsPanelItem.lzx
new file mode 100644
index 0000000..565c710
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/mainToolsPanelItem.lzx
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+ 
+<class name="mainToolsPanelItem" extends="blueButton" 
+	   width="26" height="26">
+	
+	<attribute name="modi" value="" type="string" />
+	<attribute name="labelid" value="0" type="number" />
+	
+	<attribute name="setSelectionToItem" value="true" type="boolean" />
+	<attribute name="_isselected" value="false" type="boolean" />
+	
+	<handler name="oninit">
+		if (this._isselected) parent.parent.parent.setSelection(this);
+	</handler>
+	
+	<method name="setSelectionWithoutEvent">
+        parent.parent.parent.setSelectionWithoutEvent(this);
+    </method>
+	
+	<handler name="onmouseup">
+		//if ($debug) Debug.write("parent.parent.parent",parent.parent.parent);
+		parent.parent.parent.setSelection(this);
+	</handler>
+	<labelTooltip name="__labeltooltip" labelid="$once{ parent.labelid }" />
+</class>
+
+<class name="redoUndoToolsPanelItem" extends="mainToolsPanelItem" setSelectionToItem="false">
+	<attribute name="doredo" value="true" type="boolean" />
+	<handler name="onclick">	  
+          if(this.doredo){
+            this.parent.parent.parent.parent._drawareaMask._drawarea.doredo();
+          } else {
+            this.parent.parent.parent.parent._drawareaMask._drawarea.undoredo();
+          }
+        </handler>
+</class>
+
+<class name="mainToolsHPanelSeperator" extends="view" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }"
+	   width="26" height="1" ></class>
+	   
+<class name="mainToolsVPanelSeperator" extends="view" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }"
+	   width="1" height="26" ></class>
+
+    
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu.fla b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu.fla
new file mode 100644
index 0000000..cb6f4f5
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu.png b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu.png
new file mode 100644
index 0000000..e189bc9
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu_top_grip.fla b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu_top_grip.fla
new file mode 100644
index 0000000..64344b2
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu_top_grip.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu_top_grip.swf b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu_top_grip.swf
new file mode 100644
index 0000000..01de566
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/resources/sub_menu_top_grip.swf
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/subMenuIconToolsToUpload.lzx b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/subMenuIconToolsToUpload.lzx
new file mode 100644
index 0000000..e154f51
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/maintoolspanel/subMenuIconToolsToUpload.lzx
@@ -0,0 +1,354 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="miniIconSmybolExtraIcons" extends="view" width="22" height="22">
+	
+	<attribute name="modi" value="" type="string"/>
+	
+	<handler name="onclick">
+		parent.sendNewIcon(this,"");
+	</handler>
+	
+	<handler name="ondblclick">
+		parent.sendNewIcon(this,"");
+		parent.chooseSelect();
+	</handler>
+	
+	<labelTooltip text="$once{ parent.modi }" />
+	
+</class>
+
+<class name="miniIconSmybolExtraIconsImageMap" extends="view" >
+    
+    <handler name="onclick">
+        parent.parent.sendImageMapNewIcon(this);
+    </handler>
+    
+    <handler name="ondblclick">
+        parent.parent.sendImageMapNewIcon(this);
+        parent.chooseSelect();
+    </handler>
+    
+    <handler name="onmouseover" args="tObj">
+    	parent.onmouseover.sendEvent(tObj);
+    </handler>
+    
+    <handler name="onmouseout" args="tObj">
+    	parent.onmouseout.sendEvent(tObj);
+	</handler>
+    
+</class>
+
+<class name="miniIconSmybolExtraIconsSeparator" extends="view" width="$once{ parent.width }" 
+	   height="22">
+	
+	<attribute name="title" type="string" value="title" />
+	
+	<attribute name="isopen" value="true" type="boolean" />
+	
+	<method name="toggleopen">
+		this.setAttribute("isopen",!this.isopen);
+	</method>
+	
+	<handler name="onclick">
+		this.toggleopen();
+	</handler>
+	
+	<view width="${ this.parent.parent.width }" y="0" stretches="width"
+                resource="presenter_thumb_rsc" >
+        <handler name="oninit">
+            <![CDATA[
+                this.setTintRGB(canvas.getThemeColor('basebgcolorizer'),90);
+            ]]>
+        </handler>
+        <method name="setTintRGB" args="color, brightness">
+            <![CDATA[
+            if (color != "" && color != null){
+                
+                if (brightness == null) { brightness = 0; }
+                var rgb = color;
+                var red=(rgb >> 16) & 0xFF;
+                var green=(rgb >> 8) & 0xFF;
+                var blue=rgb & 0xFF;
+    
+                this.setColorTransform( { ra : red, ga : green, ba : blue,
+                                            rb : 0, gb : 0, bb : 0 } );
+                                            
+                if($debug) Debug.write("explorerBox/setTintRGB",this);
+                if($debug) Debug.write("explorerBox/setTintRGB", { ra : red, ga : green, ba : blue, rb : 0, gb : 0, bb : 0 } );
+            }
+            ]]>
+        </method>            
+    </view>	
+    
+    <view visible="${ !this.parent.isopen }" x="2" y="2" resource="conferenceBox_button_min_small_rsc" />
+    <view visible="${ this.parent.isopen }" x="2" y="2" resource="conferenceBox_button_max_small_rsc" />
+
+    <text fontsize="11" height="17" x="16" y="1" text="${ this.parent.title }" 
+            fgcolor="0xFFFFFF" resize="true" />
+            
+</class>
+
+<class name="miniIconSmybolExtraIconsContainer" extends="text" width="$once{ parent.width }">
+	
+	<attribute name="fName" value="" type="string"/>
+	<attribute name="folderName" value="" type="string"/>
+	<attribute name="iconList" value="null"/>
+	<attribute name="isopen" value="true" type="boolean" />
+	
+	<method name="sendNewIcon" args="tObj">
+        parent.sendNewIcon(tObj,this.folderName);
+    </method>
+    
+    <method name="calcImageMapNewIcon">
+    	var tX = Math.floor(this._content.getMouse('x')/26);
+    	var tY = Math.floor(this._content.getMouse('y')/26);
+    	
+    	var tNumber = tX + (tY * 20);
+    	
+    	if (tNumber > this.iconList.length) {
+    		return "";
+    	}
+    	
+    	return this.iconList[tNumber];
+    </method>
+    
+    <method name="sendImageMapNewIcon">
+        var tObj = new Object();
+        tObj["modi"] = this.calcImageMapNewIcon();
+        if (tObj["modi"] == "") {
+        	return;
+        }
+        this._content.clearToolTipReference();
+        parent.sendNewIcon(tObj,this.folderName);
+    </method>
+    
+    <method name="chooseSelect">
+    	this._content.clearToolTipReference();
+        parent.chooseSelect();
+    </method>
+
+	
+	<miniIconSmybolExtraIconsSeparator title="$once{ parent.fName }" isopen="$once{ parent.isopen }">
+		<handler name="onisopen" args="o">
+			if (o) {
+				parent._content.setAttribute("visibility","visible");
+			} else {
+				parent._content.setAttribute("visibility","hidden");
+			}
+		</handler>
+	</miniIconSmybolExtraIconsSeparator>
+	
+	<view name="_content" y="22" width="$once{ parent.width }">
+		
+		<attribute name="calcItem" value="false" type="boolean" />
+		
+		<attribute name="toolTipReference" value="null" />
+		
+		<method name="clearToolTipReference">
+			if (this.toolTipReference != null) {
+				this.toolTipReference.destroy();
+				this.toolTipReference = null;
+			}
+		</method>
+		
+		<handler name="onmouseover">
+			this.stillDownDelegate = new LzDelegate( this, "stillDownEventGenerator" );
+			this.calcItem = true;
+			this.toolTipReference = new lz.toolTipCustomPic(canvas);
+			lz.Timer.addTimer( this.stillDownDelegate, 100 );
+		</handler>
+		
+		<method name="stillDownEventGenerator" args="ignore" >
+			if (!this.calcItem) {
+				return;
+			}
+			var tString = parent.calcImageMapNewIcon();
+			this.toolTipReference.setAttribute("x", this.getAttributeRelative("x",canvas)+this.getMouse("x")+20);
+			this.toolTipReference.setAttribute("y", this.getAttributeRelative("y",canvas)+this.getMouse("y")+20);
+			this.toolTipReference.setAttribute("text", tString);
+			lz.Timer.removeTimer( this.stillDownDelegate );
+			lz.Timer.addTimer( this.stillDownDelegate, 100 );
+		</method>
+		
+		<handler name="onmouseout">
+			this.clearToolTipReference();
+			lz.Timer.removeTimer( this.stillDownDelegate );
+            this.calcItem = false;
+        </handler>
+		
+		<method name="sendNewIcon" args="tObj">
+            parent.sendNewIcon(tObj);
+        </method>
+        
+        <method name="chooseSelect">
+            parent.chooseSelect();
+        </method>
+
+	</view>
+	
+</class>
+
+<class name="toolTipCustomPic" extends="text" bgcolor="0xFFFFFF">
+	
+</class>
+	
+	
+<class name="subMenuIconToolsToUpload" extends="guiPresenter" labelid="1335" 
+    minimizable="false" maximizable="false" fullToolBar="true" 
+    resizeable="false" width="340" height="280" >
+	
+	<attribute name="currentSelected" value="null" />
+	<attribute name="refToolbar" value="null" />
+	
+	<handler name="oninit">
+		lz.ModeManager.makeModal(this);
+	</handler>
+	
+    <handler name="onclose">
+    	lz.ModeManager.release(this);
+    </handler>
+    
+    <!--- @keywords private -->
+    <method name="passModeEvent" args="eventStr,view" > 
+        <![CDATA[
+           if ( eventStr == "onmousedown"  ){
+               if ( view != null ) {
+                  if ( !view.childOf(this) ) {
+                       this.close();
+                  }
+               } else {
+                   this.close();
+               }
+           }
+           if (view && view.childOf(this)) {
+               if (view[ eventStr ]) {
+                   view[ eventStr ].sendEvent( view );
+               }
+               return false;
+           }
+          return true;
+       ]]> 
+    </method>  
+    
+    <method name="sendNewIcon" args="refObj,folderName">
+    	if ($debug) Debug.write("sendNewIcon :: ",refObj.modi);
+    	this.currentSelected = refObj;
+    	
+    	if (folderName != "") {
+    		folderName += "/";
+    	}
+    	
+    	var imageurl = canvas.getUrl() + 'public/cliparts/thumb/'+refObj.modi;
+    	
+        if ($debug) Debug.write("this.refToolbar :: ",this.refToolbar);        
+                                        
+    	this.refToolbar._rscIcon.setSource(imageurl);
+    	
+    	this.refToolbar.parent.parent.parent.setSelection(this.refToolbar);
+    	
+    	canvas._drawarea.currentClipArtRessourceName = folderName + refObj.modi;
+    	
+    	this.close();
+    </method>
+    
+    <method name="chooseSelect">
+    	if ($debug) Debug.write("chooseSelect :: ",this.currentSelected);
+    	this.close();
+    </method>
+    
+    <!--
+    <view resource="sub_menu_top_grip_colored_rsc" y="-14">
+    </view>
+     -->
+    
+    <view x="1" y="22" width="$once{ parent.width-4 }" clip="true" showhandcursor="false"
+    	  height="$once{ parent.height - 23 }" clickable="true">
+    	
+    	<view width="$once{ parent.width-15 }" x="1">
+    		
+    		<handler name="oninit">
+    			this.getClipArtIcons.doCall();
+    		</handler>
+    		
+		    <method name="sendNewIcon" args="tObj,folderName">
+                parent.parent.sendNewIcon(tObj,folderName);
+            </method>
+            
+            <method name="chooseSelect">
+                parent.parent.chooseSelect();
+            </method>
+
+    		
+    		<attribute name="currentContainer" value="null" />
+    		
+    		<!--
+    		getClipArtIcons()
+    		 -->
+            <netRemoteCallHib name="getClipArtIcons" funcname="whiteboardservice.getClipArtIcons"
+                remotecontext="$once{ canvas.thishib }" >
+                <handler name="ondata" args="value">
+                    <![CDATA[
+                        //The onResult-Handler will be called be the rtmpconnection
+                        //if ($debug) Debug.write("############## getClipArtIcons : ",value);
+                        parent.loadIconThumbs(value.generalList,"");
+                    ]]>
+                </handler>   
+            </netRemoteCallHib> 
+            
+            <method name="loadIconThumbs" args="list,folderName">
+            	<![CDATA[
+            	
+                    var imageurl = canvas.getUrl() + 'public/cliparts/thumb/';
+                    
+                    //if ($debug) Debug.write("imageurl :: ",imageurl);            	
+                        	
+                    for (var i=0;i<list.length;i++) {
+                    	
+                    	//if ($debug) Debug.write("list[i].indexOf() ",list[i],list[i].indexOf("."));
+                    	
+                    	if (list[i].indexOf(".") > 1 ) {
+                    	
+                            var iconresourceName = imageurl + list[i];
+                          
+                            new lz.miniIconSmybolExtraIcons(this,{
+                                          modi:list[i],
+                                          resource:iconresourceName,
+                                          stretches:'both'
+                                      });
+                                  
+                    	}
+                      
+                    }
+                
+                ]]>
+            </method>    		 
+    		
+    		<wrappinglayout axis="x" spacing="2" xinset="2" />
+    	</view> 
+    	
+    	<om_vscrollbar />
+    </view>
+    
+</class>
+	
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/panels/propertypanel/drawDocumentPanelItem.lzx b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/drawDocumentPanelItem.lzx
new file mode 100644
index 0000000..5fa1425
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/drawDocumentPanelItem.lzx
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+    

+	<class name="drawDocumentPanelItem" extends="blueButton" 

+		   width="26" height="26" 

+		   x_insetResource="2" y_insetResource="2"

+		   width_insetResource="22" height_insetResource="22">

+		

+		<attribute name="modi" value="" type="string" />

+		<attribute name="labelid" value="0" type="number" />

+		

+		<handler name="onclick">

+			//if ($debug) Debug.write("parent.parent.parent.parent: ",parent.parent.parent.parent);

+			if (parent.parent.parent.ignoreUpdates) {

+	            return;

+	        }

+	        parent.parent.parent.parent._drawareaMask._drawarea.setCurrentDocumentByToolBar(parent.parent.currentDocument.getValue());

+	        parent.parent.parent.parent._drawareaMask._drawarea.doDocumentAction(this.modi);

+		</handler>

+		

+		<labelTooltip name="__labeltooltip" labelid="$once{ parent.labelid }" />

+	    

+	</class>    

+

+</library>
\ No newline at end of file
diff --git a/WebContent/src/modules/conference/whiteboard/panels/propertypanel/library.lzx b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/library.lzx
new file mode 100644
index 0000000..4bb685a
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!-- APL Author sebawagner -->
+	<resource name="_button_rsc_letter_rsc" src="resources/button_rsc.swf" />
+	
+	<include href="propertyPanelLetterButton.lzx" />  
+	<include href="drawDocumentPanelItem.lzx" />  
+	<include href="propertyPanel.lzx" />  
+	
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/panels/propertypanel/propertyPanel.lzx b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/propertyPanel.lzx
new file mode 100644
index 0000000..162dfbf
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/propertyPanel.lzx
@@ -0,0 +1,355 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="propertyPanel" extends="basePropertyPanel" 
+	   width="${ parent.parent.width-1 }" height="80" labelid="843" >
+	
+	<attribute name="ignoreUpdates" value="false" type="boolean" />
+    
+	<method name="setObjectBounds" args="x,y,width,height">
+		if ($debug) Debug.write("setObjectBounds: ",x,y,width,height);
+		this._content._xvalue.setAttribute('text',x);
+		this._content._yvalue.setAttribute('text',y);
+		this._content._widthvalue.setAttribute('text',width);
+		this._content._heightvalue.setAttribute('text',height);
+	</method>
+	
+	<method name="onUpdateBoundByText">
+		if (canvas._drawarea.boundingref!=null){
+			if ($debug) Debug.write("onUpdateBoundByText boundingref: ",canvas._drawarea.boundingref);
+			canvas._drawarea.boundingref.setAttribute('x',Number(this._content._xvalue.getText()));
+			canvas._drawarea.boundingref.setAttribute('y',Number(this._content._yvalue.getText()));
+			canvas._drawarea.boundingref.setAttribute('width',Number(this._content._widthvalue.getText()));
+			canvas._drawarea.boundingref.setAttribute('height',Number(this._content._heightvalue.getText()));
+		}
+	</method>
+	
+	<method name="loadPanelByModus" args="drawArea">
+		if ($debug) Debug.write("loadPanelByModus drawmodus: ",drawArea.drawmodus);
+		this.ignoreUpdates = true;
+		if (drawArea.drawmodus == 'paint') {
+			this._content.lineColorChoose.setSelectedColor(drawArea.currentlayerstroke);
+			this._content.changeWidthSlider.setSliderValue(drawArea.currentlayerlineWidth);
+			this._content.fillColorChoose.setEnabled(false);
+			this._content.changeOpacitySlider.setSliderValue(drawArea.currentlayerOpacity*100);
+		} else if (drawArea.drawmodus == 'line') {
+			this._content.lineColorChoose.setSelectedColor(drawArea.currentlinestroke);
+			this._content.changeWidthSlider.setSliderValue(drawArea.currentlinelineWidth);
+			this._content.fillColorChoose.setEnabled(false);
+			this._content.changeOpacitySlider.setEnabled(false);
+			this._content.changeOpacitySlider.setSliderValue(drawArea.currentlineOpacity*100);
+		} else if (drawArea.drawmodus == 'uline') {
+			this._content.lineColorChoose.setSelectedColor(drawArea.currentulinestroke);
+			this._content.changeWidthSlider.setSliderValue(drawArea.currentulinelineWidth);
+			this._content.fillColorChoose.setEnabled(false);
+			this._content.changeOpacitySlider.setSliderValue(drawArea.currentulineOpacity*100);
+		} else if (drawArea.drawmodus == 'drawarrow') {
+			this._content.lineColorChoose.setSelectedColorWithDis(drawArea.currentdrawarrowlinestroke,
+                drawArea.currentdrawarrowlinestrokeDis);
+			this._content.changeWidthSlider.setSliderValue(drawArea.currentdrawarrowlinelineWidth);
+			this._content.fillColorChoose.setSelectedColorWithDis(drawArea.currentdrawarrowlinestrokeFill,
+                drawArea.currentdrawarrowlinestrokeFillDis);
+			this._content.changeOpacitySlider.setSliderValue(drawArea.currentdrawarrowOpacity*100);
+		} else if (drawArea.drawmodus == 'rectangle') {
+			this._content.lineColorChoose.setSelectedColorWithDis(drawArea.currentrectanglestroke,
+				drawArea.currentrectanglestrokeDis);
+			this._content.fillColorChoose.setSelectedColorWithDis(drawArea.currentrectanglestrokeFill,
+				drawArea.currentrectanglestrokeFillDis);
+			this._content.changeWidthSlider.setSliderValue(drawArea.currentrectangleineWidth);
+			this._content.changeOpacitySlider.setSliderValue(drawArea.currentrectangleOpacity*100);
+		} else if (drawArea.drawmodus == 'ellipse') {
+			this._content.lineColorChoose.setSelectedColorWithDis(drawArea.currentellipsestroke,
+				drawArea.currentellipsestrokeDis);
+			this._content.fillColorChoose.setSelectedColorWithDis(drawArea.currentellipsestrokeFill,
+				drawArea.currentellipsestrokeFillDis);
+			this._content.changeWidthSlider.setSliderValue(drawArea.currentellipselineWidth);
+			this._content.changeOpacitySlider.setSliderValue(drawArea.currentellipseOpacity*100);
+		} else if (drawArea.drawmodus == 'letter') {
+			this._content.lineColorChoose.setSelectedColor(drawArea.currentlayerletter);
+			this._content.fillColorChoose.setEnabled(false);
+			if ($debug) Debug.write("drawArea.currentlayersize ",drawArea.currentlayersize);
+			this._content.changeWidthSlider.setSliderValue(drawArea.currentlayersize);
+			this._content.changeOpacitySlider.setEnabled(false);
+			this._content._italic.setValue(canvas._drawarea.italic);
+			this._content._bold.setValue(canvas._drawarea.bold);
+		} else {
+			if ($debug) Debug.warn("Not known drawmodus",drawArea.drawmodus);
+			this._content.lineColorChoose.setEnabled(false);
+			this._content.changeWidthSlider.setEnabled(false);
+			this._content.fillColorChoose.setEnabled(false);
+			this._content.changeOpacitySlider.setEnabled(false);
+		}
+		
+		if (drawArea.drawmodus == 'letter'){
+            this._content._italic.setAttribute('enabled',true);
+            this._content._bold.setAttribute('enabled',true);           
+        } else {
+            this._content._italic.setAttribute('enabled',false);
+            this._content._bold.setAttribute('enabled',false);
+        }
+		
+		this.ignoreUpdates = false;
+	</method>
+	
+	<method name="loadPanelByBoundingBox" args="drawArea,objRef">
+		if ($debug) Debug.write("loadPanelByBoundingBox objRef: ",objRef);
+		
+        this.loadPanelByModus(drawArea);
+        
+        this.ignoreUpdates = true;
+        
+        if (objRef.name.indexOf('swf') >= 0) {
+            
+            this._content._documentsPanel._currentSlideNo.setAttribute("text",objRef.slideNumber);
+            //this._content._documentsPanel._zoom.setAttribute("text",objRef.currentzoomFactor);
+            //this._content._fullFit.setValue(objRef.fullFit);
+            
+        }
+		
+		this.ignoreUpdates = false;
+	</method>
+		
+	<method name="updateProperties">
+		if (!this.ignoreUpdates){
+			if (canvas._drawarea.drawmodus == 'paint'){
+				canvas._drawarea.currentlayerstroke = this._content.lineColorChoose.selectedColor;
+				canvas._drawarea.currentlayerlineWidth = this._content.changeWidthSlider.initialNumber;
+				canvas._drawarea.currentlayerOpacity = this._content.changeOpacitySlider.initialNumber/100;
+			} else if (canvas._drawarea.drawmodus == 'line'){
+				canvas._drawarea.currentlinestroke = this._content.lineColorChoose.selectedColor;
+				canvas._drawarea.currentlinelineWidth = this._content.changeWidthSlider.initialNumber;
+				canvas._drawarea.currentlineOpacity = this._content.changeOpacitySlider.initialNumber/100;
+			} else if (canvas._drawarea.drawmodus == 'uline'){
+				canvas._drawarea.currentulinestroke = this._content.lineColorChoose.selectedColor;
+				canvas._drawarea.currentulinelineWidth = this._content.changeWidthSlider.initialNumber;
+				canvas._drawarea.currentulineOpacity = this._content.changeOpacitySlider.initialNumber/100;
+			} else if (canvas._drawarea.drawmodus == 'drawarrow'){
+				canvas._drawarea.currentdrawarrowlinestroke = this._content.lineColorChoose.selectedColor;
+                canvas._drawarea.currentdrawarrowlinestrokeDis = this._content.lineColorChoose.selectedColorDis;
+                canvas._drawarea.currentdrawarrowlinestrokeFill = this._content.fillColorChoose.selectedColor;
+                canvas._drawarea.currentdrawarrowlinestrokeFillDis = this._content.fillColorChoose.selectedColorDis;
+                canvas._drawarea.currentdrawarrowlinelineWidth = this._content.changeWidthSlider.initialNumber;
+				canvas._drawarea.currentdrawarrowOpacity = this._content.changeOpacitySlider.initialNumber/100;
+			} else if (canvas._drawarea.drawmodus == 'rectangle'){
+				canvas._drawarea.currentrectanglestroke = this._content.lineColorChoose.selectedColor;
+				canvas._drawarea.currentrectanglestrokeDis = this._content.lineColorChoose.selectedColorDis;
+				canvas._drawarea.currentrectanglestrokeFill = this._content.fillColorChoose.selectedColor;
+				canvas._drawarea.currentrectanglestrokeFillDis = this._content.fillColorChoose.selectedColorDis;
+				canvas._drawarea.currentrectangleineWidth = this._content.changeWidthSlider.initialNumber;
+				canvas._drawarea.currentrectangleOpacity = this._content.changeOpacitySlider.initialNumber/100;
+			} else if (canvas._drawarea.drawmodus == 'ellipse'){
+				canvas._drawarea.currentellipsestroke = this._content.lineColorChoose.selectedColor;
+				canvas._drawarea.currentellipsestrokeDis = this._content.lineColorChoose.selectedColorDis;
+				canvas._drawarea.currentellipsestrokeFill = this._content.fillColorChoose.selectedColor;
+				canvas._drawarea.currentellipsestrokeFillDis = this._content.fillColorChoose.selectedColorDis;
+				canvas._drawarea.currentellipselineWidth = this._content.changeWidthSlider.initialNumber;
+				canvas._drawarea.currentellipseOpacity = this._content.changeOpacitySlider.initialNumber/100;
+			} else if (canvas._drawarea.drawmodus == 'letter'){
+				canvas._drawarea.setAttribute('currentlayerletter',this._content.lineColorChoose.selectedColor);
+				canvas._drawarea.setAttribute('currentlayersize',this._content.changeWidthSlider.initialNumber);
+				canvas._drawarea.italic = this._content._italic.getValue();
+				canvas._drawarea.bold = this._content._bold.getValue();
+				canvas._drawarea.doalterStyle();
+			} else {
+				if ($debug) Debug.warn("Not known drawmodus",canvas._drawarea.drawmodus);
+			}
+		}
+	</method>
+
+	<view name="_content" visible="${this.parent.isopen}" >
+		
+		<labelTextWidthTooltip name="_xvalueLabel" x="4" y="24"
+			labelid="545" labelLabelid="546"  /> 
+		<customEdittext name="_xvalue" x="24" y="24" regexpType="number" 
+			width="40" text="0" height="24"
+			onafterCheck="parent.parent.onUpdateBoundByText()" />
+		
+		<labelTextWidthTooltip name="_yvalueLabel" x="4" y="52"
+			labelid="547" labelLabelid="548"  /> 
+		<customEdittext name="_yvalue" x="24" y="52" regexpType="number"
+			width="40" text="0" height="24"
+			onafterCheck="parent.parent.onUpdateBoundByText()" />
+		
+		<labelTextWidthTooltip name="_widthvalueLabel" x="68" y="24"
+			labelid="549" labelLabelid="550" /> 
+		<customEdittext name="_widthvalue" x="88" y="24" regexpType="number" 
+			width="40" text="0" height="24"
+			onafterCheck="parent.parent.onUpdateBoundByText()" />
+		
+		<labelTextWidthTooltip name="_heightvalueLabel" x="68" y="52"
+			labelid="551" labelLabelid="552" /> 
+		<customEdittext name="_heightvalue" x="88" y="52" regexpType="number"
+			width="40" text="0" height="24"
+			onafterCheck="parent.parent.onUpdateBoundByText()" />
+			
+			
+		<lineColorChoose x="132" y="24" name="lineColorChoose" boxPosition="up" >
+			<handler name="onselectedColor" args="sel">
+				if ($debug) Debug.write("lineColorChoose sel: ",sel);
+				parent.parent.updateProperties();			
+			</handler>
+		</lineColorChoose>
+		
+		<fillColorChoose x="132" y="52" name="fillColorChoose" boxPosition="up" >
+			<handler name="onselectedColor" args="sel">
+				if ($debug) Debug.write("fillColorChoose sel: ",sel);
+				parent.parent.updateProperties();	
+			</handler>
+		</fillColorChoose>
+		
+		<changeWidthSlider x="222" y="24" name="changeWidthSlider" boxPosition="up" 
+			initialNumber="2" >
+			<handler name="oninitialNumber" args="i">
+				//this.parent.parent.parent._drawareaMask._drawarea.setAttribute('currentlayersize',i);
+				if ($debug) Debug.write("changeWidthSlider oninitialNumber sel: ",i);
+				parent.parent.updateProperties();	
+			</handler>
+		</changeWidthSlider> 
+		
+		<changeWidthSlider x="222" y="52" name="changeOpacitySlider" labelid="553" boxPosition="up"
+			initialNumber="100" >
+			<handler name="oninitialNumber" args="i">
+				//this.parent.parent.parent._drawareaMask._drawarea.setAttribute('currentlayersize',i);
+				if ($debug) Debug.write("changeOpacitySlider oninitialNumber sel: ",i);
+				parent.parent.updateProperties();	
+			</handler>
+		</changeWidthSlider> 
+
+	    <propertyPanelLetterButton name="_italic" x="286" y="24" labelid="86"
+                                   itemResourceName="italic" />
+	    
+	    <propertyPanelLetterButton name="_bold" x="312" y="24" labelid="87"
+                                   itemResourceName="bold" />
+		
+		<view name="_delemiter" width="2" bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }" 
+			  height="$once{ parent.height - this.y - 4 }" y="20" x="338"/>
+		
+		<labelText labelid="721" y="26" x="344" />
+		
+		<resetCombobox name="currentDocument" width="300" height="24" fontsize="11"
+                           editable="false" shownitems="7" x="480" y="24">
+            <attribute name="sendSelection" value="true" type="boolean"/>
+            <handler name="onselect" args="sel">
+                if (this.sendSelection) {
+                    parent.parent.parent._drawareaMask._drawarea.setCurrentDocument(sel.value);
+                }
+            </handler>
+        </resetCombobox>
+        <!--
+	    <labelCheckbox x="344" y="54" name="_fullFit" labelid="847" >
+            <handler name="onvalue" args="v">
+                if (parent.parent.ignoreUpdates) {
+                    return;
+                }
+                if ($debug) Debug.write("onvalue Full Fit ",v);
+                
+                parent.parent.parent._drawareaMask._drawarea.doFullFit(v);
+            </handler>
+            <labelTooltip labelid="1212" multiline="true" />
+	    </labelCheckbox> 
+	     -->       
+		
+		<view name="_documentsPanel" x="480" y="52" layout="axis:x;spacing:2">
+			
+			<handler name="oninit">
+                //if ($debug) Debug.write("oninit: ",this);
+                this._currentSlideNo.setAttribute('text',canvas.currentSlideNo);
+                this._totalSlideNo.setAttribute('text',canvas.currentSlideTotal);
+                //this._zoom.setAttribute('text',canvas.currentSlideZoom);
+            </handler>
+            <handler name="preclose">
+                //if ($debug) Debug.write("onclose: ",this);
+                canvas.currentSlideNo = Number(this._currentSlideNo.getText());
+                canvas.currentSlideTotal = Number(this._totalSlideNo.getText());
+                //canvas.currentSlideZoom = Number(this._zoom.getText());
+            </handler>
+			
+			<method name="addCurrentObject" args="itemObj">
+                //if ($debug) Debug.write("addCurrentObject ",itemObj.fileName,itemObj.name);
+                var docName = itemObj.standardFileName;
+		        if (docName.length == 0) {
+		            docName = itemObj.fileName;
+		        }
+		        
+		        parent.currentDocument.addItem(docName,itemObj.name);
+                parent.currentDocument.sendSelection = false;
+                parent.currentDocument.selectItem(itemObj.name);
+                parent.currentDocument.sendSelection = true;
+                
+                parent._clickLayer.setAttribute("visibility","hidden");
+            </method>
+            
+            <method name="removeDocument" args="refItemName">
+            	
+            	if ($debug) Debug.warn("removeDocument ",refItemName);
+            	
+                parent.currentDocument.removeItem(refItemName);
+                if (parent.currentDocument.getNumItems() != 0) {
+                    parent.currentDocument.selectItemAt(0);
+                    parent._clickLayer.setAttribute("visibility","hidden");
+                } else {
+                	parent.currentDocument.clearSelection(); 
+                	parent._clickLayer.setAttribute("visibility","visible");
+                }
+            </method>
+            
+            <method name="clearDocumentsBar">
+                parent.currentDocument.reset();
+                parent._clickLayer.setAttribute("visibility","visible");
+            </method>
+            
+            <drawDocumentPanelItem name="b3" modi="doc_first" resourceItem="doc_first" 
+                labelid="255" />        
+            <drawDocumentPanelItem name="b4" modi="doc_pre" resourceItem="doc_pre" 
+                labelid="256" />            
+            <drawDocumentPanelItem name="b5" modi="doc_next" resourceItem="doc_next" 
+                labelid="257" />        
+            <drawDocumentPanelItem name="b6" modi="doc_last" resourceItem="doc_last" 
+                labelid="258" />        
+        
+            <customEdittext name="_currentSlideNo" width="40" height="24" regexpType="number" >
+                <handler name="onblur">
+                    if (parent.parent.parent.ignoreUpdates) {
+                    	if ($debug) Debug.write("ignoreUpdates -- ");
+                        return;
+                    }
+                    parent.parent.parent.parent._drawareaMask._drawarea.setCurrentDocumentByToolBar(parent.parent.currentDocument.getValue());
+                    parent.parent.parent.parent._drawareaMask._drawarea.newSlideNumber = Number(this.getText());
+                    parent.parent.parent.parent._drawareaMask._drawarea.doDocumentAction("setSlideNumber");         
+                </handler>
+            </customEdittext>    
+            <labelText y="6" labelid="254" />     
+            <labelText name="_totalSlideNo" y="6" width="40" />  
+            
+		</view>
+		
+		<!-- 340 -->
+		<view name="_clickLayer" clickable="true" opacity="0.75" x="340"
+			  width="460" height="$once{ parent.height - this.y }" 
+			  y="20" showhandcursor="false" bgcolor="0xFFFFFF" />
+		
+	</view>
+
+</class>
+     
+    
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/panels/propertypanel/propertyPanelLetterButton.lzx b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/propertyPanelLetterButton.lzx
new file mode 100644
index 0000000..0cdf38b
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/propertyPanelLetterButton.lzx
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="propertyPanelLetterButton" extends="view" resource="_button_rsc_letter_rsc"  
+	   x="312" y="24" height="23" width="24" 
+	bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }" >
+	<attribute name="itemResourceName" value="" type="string" />
+	<attribute name="currentVal" value="false" type="boolean" />
+	
+    <attribute name="labelid" value="87" type="number"/>
+    
+	<attribute name="enabled" value="false" type="boolean"/>
+	
+	<handler name="onmouseover">
+		this.setAttribute('bgcolor',0xFFFFFF);
+	</handler>
+	<handler name="onmouseout">
+		this.updateByVal();
+	</handler>
+    <handler name="onclick">
+    	this.currentVal = !this.currentVal;
+    	this.updateByVal();
+        parent.parent.updateProperties();	
+    </handler>
+    <method name="getValue">
+    	return this.currentVal;
+    </method>
+    <method name="setValue" args="bool">
+    	this.currentVal = bool;
+    	this.updateByVal();
+    </method>
+    <method name="updateByVal">
+		if (this.currentVal){
+    		this.setAttribute('bgcolor',canvas.getThemeColor('basebgcolorizer'));
+    	} else {
+    		this.setAttribute('bgcolor',canvas.getThemeColor('baseMousecolorizer'));
+    	}    	
+    </method>
+    <view x="2" y="2" resource="$once{ parent.itemResourceName }" />
+    
+    <view name="_clickEnabled" width="$once{ parent.width }" height="$once{ parent.height }" 
+    	  visibility="${ (parent.enabled) ? 'hidden' : 'visible' }"
+    	  opacity="0.5" bgcolor="0xFFFFFF" clickable="true" showhandcursor="false" />
+    
+    <labelTooltip x="2" y="2" labelid="$once{ parent.labelid }" />
+    
+</class>
+    
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/panels/propertypanel/resources/button_rsc.swf b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/resources/button_rsc.swf
new file mode 100644
index 0000000..027e6d0
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/panels/propertypanel/resources/button_rsc.swf
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/add.png b/WebContent/src/modules/conference/whiteboard/resources/add.png
new file mode 100644
index 0000000..6332fef
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/add.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/boundingBox.png b/WebContent/src/modules/conference/whiteboard/resources/boundingBox.png
new file mode 100644
index 0000000..1c4b812
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/boundingBox.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/boundingBoxTL.png b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxTL.png
new file mode 100644
index 0000000..1c4b812
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxTL.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/boundingBoxTR.png b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxTR.png
new file mode 100644
index 0000000..0ae7230
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxTR.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/boundingBoxUL.png b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxUL.png
new file mode 100644
index 0000000..68f95ad
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxUL.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/boundingBoxULNoGripper.png b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxULNoGripper.png
new file mode 100644
index 0000000..fd428c9
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxULNoGripper.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/boundingBoxUR.fla b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxUR.fla
new file mode 100644
index 0000000..516062b
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxUR.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/boundingBoxUR.png b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxUR.png
new file mode 100644
index 0000000..61a2482
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/boundingBoxUR.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/pointer.fla b/WebContent/src/modules/conference/whiteboard/resources/pointer.fla
new file mode 100644
index 0000000..96068e9
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/pointer.fla
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/pointer.swf b/WebContent/src/modules/conference/whiteboard/resources/pointer.swf
new file mode 100644
index 0000000..97742bb
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/pointer.swf
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/text_bold.png b/WebContent/src/modules/conference/whiteboard/resources/text_bold.png
new file mode 100644
index 0000000..889ae80
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/text_bold.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/resources/text_italic.png b/WebContent/src/modules/conference/whiteboard/resources/text_italic.png
new file mode 100644
index 0000000..8482ac8
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/resources/text_italic.png
Binary files differ
diff --git a/WebContent/src/modules/conference/whiteboard/whiteboardBarMenu.lzx b/WebContent/src/modules/conference/whiteboard/whiteboardBarMenu.lzx
new file mode 100644
index 0000000..5760a69
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/whiteboardBarMenu.lzx
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="whiteboardBarMenu" extends="view" width="${ parent.width }" x="0" y="21" 
+    height="20" layout="axis:x;spacing:1;inset:2" bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }">
+    
+    <attribute name="staticwidth" type="number" value="120" />
+    <attribute name="currentBtn" value="null" />
+    
+    <method name="getCurrentSize">
+        <![CDATA[
+            if ( ((this.subviews.length+1)*(this.staticwidth+1)) <= this.width) {
+                return this.staticwidth;
+            } else {
+                var newwidth = Math.round((this.width-this.subviews.length)/(this.subviews.length+1));
+                for (var i=0;i<this.subviews.length;i++) {
+                    this.subviews[i].setAttribute('width',newwidth);
+                }
+                return newwidth;
+            }   
+        ]]>
+    </method>
+    
+    <handler name="onwidth">
+        <![CDATA[
+            if ( ((this.subviews.length)*(this.staticwidth+1)) <= this.width) {
+                for (var i=0;i<this.subviews.length;i++) {
+                    this.subviews[i].setAttribute('width',this.staticwidth);
+                }
+            } else {
+                var newwidth = Math.round((this.width-this.subviews.length)/(this.subviews.length));
+                for (var i=0;i<this.subviews.length;i++) {
+                    this.subviews[i].setAttribute('width',newwidth);
+                }
+            } 
+        ]]>
+    </handler>
+    
+    <method name="removeObject" args="btn">
+    	var whiteboardId = btn.objRef.whiteboardId;
+    	this.removeObjectSynced(btn);
+    	parent.sendRemoveWindow(whiteboardId);
+    </method>
+    
+    <method name="removeObjectSynced" args="btn">
+    <![CDATA[
+    	var removeCurrent = false;
+    	if (this.currentBtn == btn){
+    		removeCurrent = true;
+    	}
+    	btn.objRef.destroy();
+        btn.destroy();
+        if (this.subviews.length != 0 && removeCurrent) {
+        	this.sendActiveWindowSynced(this.subviews[this.subviews.length-1]);
+        }
+        parent.addNewItemButton.updatePosition();
+    ]]>
+    </method>
+
+    
+    <method name="sendActiveWindow" args="btn,win">
+        if ($debug) Debug.write("sendActiveWindow: ",btn,win);
+        this.sendActiveWindowSynced(btn);
+        this.currentBtn.objRef.sendActiveWindow();
+    </method>
+    
+    <method name="sendActiveWindowSynced" args="btn">
+    	<![CDATA[
+            if (this.currentBtn != null){
+                this.currentBtn.isactive=false;
+                if (this.currentBtn._minimizebtn_mo != null) this.currentBtn._minimizebtn_mo.setAttribute('visibility','hidden');
+                if (this.currentBtn._minimizebtn_dn != null) this.currentBtn._minimizebtn_dn.setAttribute('visibility','hidden');
+            }
+            this.currentBtn = btn;
+            this.currentBtn.objRef.setAttribute("visibility","visible");
+        	this.currentBtn.objRef.bringToFront();
+            ////if ($debug)  //Debug.write("sendActiveWindow2: ",this.currentBtn);
+            this.currentBtn._minimizebtn_mo.setAttribute('visibility','hidden');
+            this.currentBtn._minimizebtn_dn.setAttribute('visibility','visible');
+            this.currentBtn.isactive=true;
+        ]]>
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/whiteboardMiniButton.lzx b/WebContent/src/modules/conference/whiteboard/whiteboardMiniButton.lzx
new file mode 100644
index 0000000..adee5e0
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/whiteboardMiniButton.lzx
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="whiteboardMiniButton" extends="view" width="250" height="18" y="2"
+    bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+     
+    <attribute name="btnName" value="" type="string" />
+    <attribute name="objRef" value="null" />
+
+    <attribute name="zielx" value="200" type="number" />
+    <attribute name="zielwidth" value="100" type="number" />    
+    
+    <attribute name="isactive" value="true" type="boolean" />
+    
+    <attribute name="isHidden" value="false" type="boolean" />
+    
+    <handler name="oninit">
+        this.calcTextWidth();
+        parent.onwidth.sendEvent();
+    </handler>
+    
+    <handler name="onwidth">
+        if (this.isinited){
+            this.calcTextWidth();
+        }
+    </handler>
+    
+    <method name="disableItem">
+        //if ($debug) Debug.write("disableItem :: set visibility to hidden");
+        this.isHidden = true;
+        this.setAttribute("visibility","hidden");
+        //this.destroy();
+    </method>
+    
+    <method name="enableItem">
+        this.setAttribute("visibility","visible");
+        this.isHidden = false;
+    </method>
+    
+    <method name="calcTextWidth">
+        <![CDATA[
+            if (this.isHidden) {
+                return;
+            }
+            ////////if ($debug)  //Debug.write(this,this._text,this._text.getTextWidth());
+            if (this._text.getTextWidth()>(this.width-24)) {
+                this._long.setAttribute('visibility','visible');
+                this._text.setAttribute('width',this.width-26);
+            } else {
+                this._long.setAttribute('visibility','hidden');
+                this._text.setAttribute('width',this.width-18);
+            }
+        ]]>        
+    </method>
+        
+    <handler name="onclick">
+        if (this.isHidden) {
+            return;
+        }
+        this._minimizebtn_mo.setAttribute('visibility','visible');
+        this._minimizebtn_dn.setAttribute('visibility','hidden');
+        if ($debug) Debug.write(" :: onclick :: ");
+        this.sendActiveWindow(this.objRef);
+    </handler>
+    
+    <handler name="onmouseover">
+        if (this.isHidden) {
+            return;
+        }
+        this._minimizebtn_mo.setAttribute('visibility','visible');
+        this._minimizebtn_dn.setAttribute('visibility','hidden');
+    </handler>
+    <handler name="onmouseout">
+        if (this.isHidden) {
+            return;
+        }
+        if (this.isactive) {
+            this._minimizebtn_mo.setAttribute('visibility','hidden');
+            this._minimizebtn_dn.setAttribute('visibility','visible');
+        } else {
+            this._minimizebtn_mo.setAttribute('visibility','hidden');
+            this._minimizebtn_dn.setAttribute('visibility','hidden');
+        }        
+    </handler>
+    <handler name="onmousedown">
+        if (this.isHidden) {
+            return;
+        }        
+        this._minimizebtn_mo.setAttribute('visibility','hidden');
+        this._minimizebtn_dn.setAttribute('visibility','visible');
+    </handler>
+    <handler name="onmouseup">
+        if (this.isHidden) {
+            return;
+        }        
+        this._minimizebtn_mo.setAttribute('visibility','visible');
+        this._minimizebtn_dn.setAttribute('visibility','hidden');
+    </handler>
+    
+    <method name="sendActiveWindow" args="win">
+        this.parent.sendActiveWindow(this,win);
+    </method>    
+
+	<method name="activateSynced">
+		this.parent.sendActiveWindowSynced(this);
+	</method>
+    
+    <view name="_minimizebtn_mo" width="${ parent.width-2 }" height="16"
+        bgcolor="white" opacity="0.3" visibility="hidden" x="1" y="1" />
+
+    <view name="_minimizebtn_dn" width="${ parent.width-2 }" height="16"
+        bgcolor="black" opacity="0.3" visibility="hidden" x="1" y="1" />
+    
+
+    <text text="${ parent.btnName }" fgcolor="0xFFFFFF" resize="false" 
+        x="1" fontsize="10" name="_text" />
+    
+        <view y="1" x="${ parent.width-18 }" name="_close"
+            resource="btn_presenter_close"
+            opacity="${ ((canvas.ismoderator) ? 1 : ((canvas.isAllowedToDraw) ? 1 : 0.5 )) }" 
+            onmouseover="this.setAttribute('frame',2)"
+            onmouseout="this.setAttribute('frame',1)"
+            onmousedown="this.setAttribute('frame',3)"
+            onmouseup="this.setAttribute('frame',1)" >
+            <handler name="onclick">
+	            <![CDATA[
+	                this.setAttribute('frame',2);
+	                canvas._videocontainer._videoviewcontent.closeWhiteboard();
+	                var t = this;
+                    canvas.videoComp_lc.closeWhiteboard = function(confirm) {
+                        if ($debug) Debug.write("confirm closeWhiteboard:", confirm);
+                        if (confirm) {
+                            t.parent.parent.removeObject(t.parent);
+                        }
+                    }
+                ]]>
+            </handler>
+            <labelTooltip labelid="1364" />
+        </view>  
+        
+    <text y="1" name="_long" text="..." fgcolor="0xFFFFFF"
+        x="${ parent.width-28 }" fontsize="10" />
+
+    <labelTooltip text="${ parent.btnName }" />
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/windows/library.lzx b/WebContent/src/modules/conference/whiteboard/windows/library.lzx
new file mode 100644
index 0000000..1002108
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/windows/library.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<include href="saveAsWmlWindow.lzx" />
+	<include href="loadWhiteboardWindow.lzx" />
+	
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/windows/loadWhiteboardWindow.lzx b/WebContent/src/modules/conference/whiteboard/windows/loadWhiteboardWindow.lzx
new file mode 100644
index 0000000..c2da202
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/windows/loadWhiteboardWindow.lzx
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="loadWhiteboardWindow" extends="labelText" multiline="true" resize="false" 
+	   width="260" align="right" y="${ parent.height - this.height - 10 }" 
+	   bgcolor="0xFFFFFF" fgcolor="0xFF3300">
+    
+    <attribute name="refObj" value="null" />
+    
+    <handler name="onclick">
+    	this.destroy();
+    </handler>
+    
+    <method name="close">
+        this.destroy();
+    </method>    
+    
+    <method name="setMessage" args="mess">
+        this.setAttribute('text',mess);
+    </method>
+    
+</class>
+
+</library>
diff --git a/WebContent/src/modules/conference/whiteboard/windows/saveAsWmlWindow.lzx b/WebContent/src/modules/conference/whiteboard/windows/saveAsWmlWindow.lzx
new file mode 100644
index 0000000..823c9cf
--- /dev/null
+++ b/WebContent/src/modules/conference/whiteboard/windows/saveAsWmlWindow.lzx
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="saveAsWmlWindow" extends="labelExplorerBox" labelid="199"
+    docking="true" closable="true" width="260" x="200" y="0" height="220">
+    
+    <attribute name="refObj" value="null" />
+    
+    <handler name="oninit">
+    	lz.ModeManager.makeModal(this);
+    </handler>
+    
+    <handler name="onclose">
+    	lz.ModeManager.release(this);
+    </handler>
+    
+    <labelText y="22" labelid="201" width="200" />
+    <customEdittext name="_savefileName1" y="42" x="4" width="240" text="filename" />
+    
+    <!--
+    <labelText x="4" y="72" labelid="561" width="200" fgcolor="0x0000FF">
+        <handler name="onclick">
+            this.parent.refObj.confirmSaveAsImageTypeExport(this.parent._savefileName1.getText(),"png");
+            this.parent.close();
+        </handler>
+    </labelText>
+    
+    <labelText x="4" y="92" labelid="562" width="200" fgcolor="0x0000FF">
+        <handler name="onclick">
+            this.parent.refObj.confirmSaveAsImageTypeExport(this.parent._savefileName1.getText(),"jpg");
+            this.parent.close();
+        </handler>
+    </labelText>
+    
+    <labelText x="4" y="112" labelid="563" width="200" fgcolor="0x0000FF">
+        <handler name="onclick">
+            this.parent.refObj.confirmSaveAsImageTypeExport(this.parent._savefileName1.getText(),"pdf");
+            this.parent.close();
+        </handler>
+    </labelText>
+    
+    <labelText x="4" y="132" labelid="560" width="200" fgcolor="0x0000FF">
+        <handler name="onclick">
+            this.parent.refObj.confirmSaveAsImageExport(this.parent._savefileName1.getText());
+            this.parent.close();
+        </handler>
+    </labelText>
+    
+    <labelText x="4" y="152" labelid="564" width="200" fgcolor="0x0000FF">
+        <handler name="onclick">
+            this.parent.refObj.confirmSaveAsImageTypeExport(this.parent._savefileName1.getText(),"tif");
+            this.parent.close();
+        </handler>
+    </labelText>
+     -->
+    
+	<simpleLabelButton name="_confirm" x="40" y="190" 
+			labelid="203" width="100" height="20">
+		<handler name="onclick">
+			this.parent.refObj.confirmSaveAsObject(this.parent._savefileName1.getText());
+		</handler>
+	</simpleLabelButton>	
+    
+	<simpleLabelButton name="_cancel" x="150" y="190" 
+			labelid="202" width="100" height="20">
+		<handler name="onclick">
+			this.parent.close();
+		</handler>
+	</simpleLabelButton>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/dashboard/library.lzx b/WebContent/src/modules/dashboard/library.lzx
new file mode 100644
index 0000000..76f3047
--- /dev/null
+++ b/WebContent/src/modules/dashboard/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<include href="tabButtonMain.lzx" />
+
+</library>
diff --git a/WebContent/src/modules/dashboard/tabButtonMain.lzx b/WebContent/src/modules/dashboard/tabButtonMain.lzx
new file mode 100644
index 0000000..08ae57f
--- /dev/null
+++ b/WebContent/src/modules/dashboard/tabButtonMain.lzx
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="tabButtonMain" extends="view" focusable="true"

+	   width="$once{ (parent.width-2)/2 }" height="36" y="2">

+	

+	<attribute name="labelid" value="0" type="number" />

+	

+	<attribute name="selected" value="false" type="boolean" />

+	

+	<attribute name="textFontSize" value="14" type="number" />

+	

+	<attribute name="currentIconRsc" value="" type="string"/>

+	

+	<attribute name="showIcon" value="true" type="boolean" />

+	

+	<handler name="oninit">

+		if (this.selected) {

+			this.doSelection();

+		}

+	</handler>

+	

+	<handler name="onclick">

+		this.doSelection();

+	</handler>

+	

+	<method name="doSelection">

+		parent.parent.doSelection(this);

+	</method>

+	

+	<handler name="onmouseover">

+		if (!this.selected) {

+			this._bg2.setAttribute("visibility","visible");

+		}

+	</handler>

+	

+	<handler name="onmouseout">

+		if (!this.selected) {

+        	this._bg2.setAttribute("visibility","hidden");

+        }

+    </handler>

+	

+	<method name="select">

+		this.selected = true;

+		if (this.showIcon) this._icon.setAttribute("opacity",1);

+        this._selectedView.setAttribute("visibility","visible");

+        this._deselectedView.setAttribute("visibility","hidden");

+		this._bg2.setAttribute("visibility","hidden");

+		this._text.setAttribute("fontstyle","bold");

+		this._text.setAttribute("y",6);

+		if (this.showIcon) this._icon.setAttribute("y",6);

+		this._text.setAttribute("fgcolor",canvas.getThemeColor('menuTextColor'));

+	</method>

+     

+    <method name="deselect">

+        this.selected = false;

+        if (this.showIcon) this._icon.setAttribute("opacity",0.5);

+        this._selectedView.setAttribute("visibility","hidden");

+        this._deselectedView.setAttribute("visibility","visible");

+        this._text.setAttribute("y",8);

+        if (this.showIcon) this._icon.setAttribute("y",8);

+        this._text.setAttribute("fontstyle","plain");

+        this._text.setAttribute("fgcolor",canvas.getThemeColor('menuTextDisabledColor'));

+    </method>       

+    

+    <view name="_selectedView" bgcolor="$once{ canvas.getThemeColor('menuBackgroundColor') }" width="$once{ parent.width }" 

+            height="$once{ parent.height }" visibility="visible">

+        <view name="borderRight" width="1" x="0"

+        			bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="$once{ parent.height }" />  

+        <view name="borderTop" width="$once{ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" />

+        <view name="borderLeft" width="1" x="$once{ parent.width-1 }"

+        			bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="$once{ parent.height }" />  

+    </view>

+    

+    <view name="_deselectedView" bgcolor="0xFAFAFA" 

+    		width="$once{ parent.width }" y="2"

+            height="$once{ parent.height-3 }" visibility="visible">

+        <view name="borderRight" width="1" x="0"

+        			bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="$once{ parent.height }" />  

+        <view name="borderTop" width="$once{ parent.width }" bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="1" />

+        <view name="borderLeft" width="1" x="$once{ parent.width-1 }"

+        			bgcolor="$once{ canvas.getThemeColor('mainBorderColor') }" height="$once{ parent.height }" />  

+    </view>       

+          

+    <view name="_bg2" bgcolor="0xFFFFFF" width="$once{ parent.width-2 }" y="3" x="1"

+          height="$once{ parent.height-4 }" opacity="1" visibility="hidden"/>

+    

+    <state applied="$once{ parent.showIcon }" >

+	    <image x="6" y="6" name="_icon" src="$once{ canvas.getThemeImage( parent.currentIconRsc ) }" 

+    				width="20" height="20" stretches="both" />

+    </state>

+                

+    <labelText name="_text" x="$once{ (parent.showIcon) ? 28 : 6 }" fontsize="$once{ parent.textFontSize }" 

+    		valign="middle" fgcolor="0xFFFFFF" labelid="$once{ parent.labelid }" />

+	

+</class>

+

+</library>

diff --git a/WebContent/src/modules/invitation/autoloaderBarOnly.lzx b/WebContent/src/modules/invitation/autoloaderBarOnly.lzx
new file mode 100644
index 0000000..7222483
--- /dev/null
+++ b/WebContent/src/modules/invitation/autoloaderBarOnly.lzx
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="autoloaderBarOnly" extends="view" x="400" valign="middle" pixellock="true">
+
+	<attribute name="maxwidth" value="400" type="number" />
+	<attribute name="maxsteps" value="22" type="number" />
+	<attribute name="currentsteps" value="0" type="number" />
+	
+	<method name="close">
+		canvas.thishib.loaderVar = null;
+		this.destroy();
+	</method>
+	
+	<method name="setProgress">
+		this.currentsteps += 1;
+		if($debug) Debug.write("autoLoader/setProgress ===== ",this.currentsteps);
+		var w = Math.round(((this.maxwidth)/this.maxsteps)*this.currentsteps);
+		this.loadingbar.setAttribute('visibility','visible');
+		if($debug) Debug.write("autoLoader/setResourceNumber == ",w);
+		this.loadingbar._loading.setAttribute('width',w);
+	</method>
+      
+    <view name="loadingbar"  height="1" pixellock="true"
+          x="-5" y="40" width="$once{ parent.maxwidth+2 }" visibility="hidden">
+          <view x="1" y="1" width="$once{ parent.width-2 }" height="1" opacity="0.3"
+          		bgcolor="$once{ canvas.getThemeColor('styleMenuBarBaseColor') }" />
+          <view name="_loading" x="1" y="1" width="0" height="1"  pixellock="true" 
+          		bgcolor="$once{ canvas.getThemeColor('styleMenuBarBaseColor') }"/>
+    </view>  
+          
+    <netRemoteCallHib name="getLanguageByIdAndMax" funcname="languageservice.getLanguageByIdAndMax" 
+		remotecontext="$once{ canvas.thishib }" >
+    	<attribute name="start" value="0" type="number" />
+    	<attribute name="step" value="100" type="number" /> 
+    	<attribute name="max" value="1600" type="number" />    
+        <netparam><method name="getValue">return canvas.thishib.userlang;</method></netparam> 
+        <netparam><method name="getValue">return parent.start;</method></netparam> 
+        <netparam><method name="getValue">return parent.step;</method></netparam> 
+        <handler name="ondata" args="value">
+        	<![CDATA[
+        		//if ($debug) Debug.write("getLanguageByIdAndMax: ",value);
+        		setLabelObjectByHundred(this.start,value);
+	            //The onResult-Handler will be called be the rtmpconnection
+	            if (this.start <= max){
+	            	this.start += this.step;
+					canvas.thishib.loaderVar.setProgress();
+					this.doCall();
+	            } else {
+            		parent.setProgress();
+		            canvas.thishib.getTimeZones.doCall();
+		            parent.getUserSalutations.doCall();
+				}
+			]]>
+        </handler>  
+    </netRemoteCallHib>	 
+    
+    <netRemoteCallHib name="getUserSalutations" funcname="userservice.getUserSalutations" 
+		remotecontext="$once{ canvas.thishib }" >  
+		<netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue"> return hib.userlang; </method></netparam> 
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("getUserSalutations ",value);
+            canvas.salutationsInitValues = value;
+            parent.setProgress();
+            parent.getRoomTypes.doCall();
+        </handler>  
+    </netRemoteCallHib>   
+    
+    <netRemoteCallHib name="getRoomTypes" funcname="conferenceservice.getRoomTypes" 
+		remotecontext="$once{ canvas.thishib }" >  
+		<netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("getRoomTypes ",value);
+            canvas.roomTypesInitValues = value;
+            parent.setProgress();
+            parent.setUsernameAndSession.doCall();
+        </handler>  
+    </netRemoteCallHib>    	 
+	 
+    <netRemoteCallHib name="setUsernameAndSession" funcname="setUsernameAndSession" remotecontext="$once{ canvas.thishib }" >   
+        <netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+        <netparam><method name="getValue">return canvas.user_id;</method></netparam>
+        <netparam><method name="getValue">return canvas.currentuser;</method></netparam>
+        <netparam><method name="getValue">return canvas.firstName;</method></netparam>
+        <netparam><method name="getValue">return canvas.lastName;</method></netparam>      
+        <handler name="ondata" args="value">
+            //The onResult-Handler will be called be the rtmpconnection
+            if ($debug) Debug.write("setUsername: value, ",canvas.thishib.currentInvitation.room.roomtype.roomtypes_id);
+            clearStageContent();		
+            parent.close();
+            
+			if (canvas.thishib.currentInvitation.room.roomtype.roomtypes_id==1){
+				
+				new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.conferenceRoomModule,roomObj:canvas.thishib.currentInvitation.room});
+				
+			} else if (canvas.thishib.currentInvitation.room.roomtype.roomtypes_id==2){
+				
+				new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.restrictedRoomModule,roomObj:canvas.thishib.currentInvitation.room});
+				new lz.labelerrorPopup(canvas,{error:'No RoomType currently available for roomTypeId 2'});
+				
+			} else if (canvas.thishib.currentInvitation.room.roomtype.roomtypes_id==3){
+				
+				new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.restrictedRoomModule,roomObj:canvas.thishib.currentInvitation.room});
+				
+			} else if (canvas.thishib.currentInvitation.room.roomtype.roomtypes_id==4){
+                
+                new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.interviewRoomModule,roomObj:canvas.thishib.currentInvitation.room});
+                
+            } else if (canvas.thishib.currentInvitation.room.roomtype.roomtypes_id==5){
+                
+                new lz.testSetup(canvas,{isDirectLink:true,roomClassName:canvas.customRoomModule,roomObj:canvas.thishib.currentInvitation.room});
+                
+            }                 
+        </handler>  
+    </netRemoteCallHib>     
+          
+</class>
+
+</library>
diff --git a/WebContent/src/modules/invitation/invitationQuickLoader.lzx b/WebContent/src/modules/invitation/invitationQuickLoader.lzx
new file mode 100644
index 0000000..3400b41
--- /dev/null
+++ b/WebContent/src/modules/invitation/invitationQuickLoader.lzx
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	<!---
+	-->
+	<!-- label: data loading, please wait -->
+	<class name="invitationQuickLoader" extends="labelExplorerBox" labelid="230"
+			docking="true" resizeable="false" closable="false" width="324" 
+			x="$once{ canvas.width/2 - this.width/2 }" y="0" height="120">
+		 
+		<attribute name="userlang" value="1" type="number" />
+		
+		<handler name="oninit">
+			this.setRoomValues();
+			if (canvas.thishib.currentInvitation.passwordProtected){
+				if ($debug) Debug.write("Is Password Protected");
+				this.pass_label.setAttribute('visibility','visible');
+				this._password.setAttribute('visibility','visible');
+				this.invitation_pass.setAttribute('visibility','visible');
+			} else {
+				this.showLoginStep();
+                if ($debug) Debug.write("invitationQuickLoader:oninit userlang = [",userlang,"]; canvas.lang = [",canvas.language_id,"]");
+                if (canvas.language_id > 0) {
+                    this.isRoomFull.doCall();
+                } else {
+                    this.showLoginStep();
+                }
+			}
+		</handler>
+		
+		<method name="showLoginStep">
+			this.pass_label.setAttribute('visibility','hidden');
+			this._password.setAttribute('visibility','hidden');
+			this.invitation_pass.setAttribute('visibility','hidden');		
+			this.labellanguages.setAttribute('visibility','visible');
+			this.languages.setAttribute('visibility','visible');
+			this.connect.setAttribute('visibility','visible');
+		</method>
+		
+		<method name="checkPWD">
+			this.checkInvitationPass.doCall();
+		</method>
+		
+		<netRemoteCallHib name="isRoomFull" funcname="conferenceservice.isRoomFull" 
+							remotecontext="$once{ canvas.thishib }" activeErrorHandler="true" >  	
+        	<netparam name="pass"><method name="getValue">return canvas.thishib.currentInvitation.room.rooms_id;</method></netparam>
+        	<handler name="ondata" args="value">
+        		<![CDATA[
+            		//The onResult-Handler will be called be the rtmpconnection
+            		if ($debug) Debug.write(canvas.thishib.currentInvitation.room.rooms_id);
+					if ($debug) Debug.write("isRoomFull: ",value);
+					
+					if (value) {
+						new lz.labelerrorPopup(canvas,{errorlabelid:618});
+						parent.close();
+					} else {
+						parent.login();
+					}
+            	]]>
+        	</handler>   
+    	</netRemoteCallHib> 
+		
+		<netRemoteCallHib name="checkInvitationPass" funcname="invitationservice.checkInvitationPass" 
+							remotecontext="$once{ canvas.thishib }" activeErrorHandler="true" >  	
+	      	<netparam name="invitationHash"><method name="getValue">return canvas.invitationHash;</method></netparam>
+        	<netparam name="pass"><method name="getValue">return parent.parent._password.getText();</method></netparam>
+	        	
+        	<handler name="ondata" args="value">
+        		<![CDATA[
+            		//The onResult-Handler will be called be the rtmpconnection
+				if ($debug) Debug.write("checkInvitationPass : ",value);
+				if (value<0){
+				} else {
+					parent.showLoginStep();
+				}
+            ]]>
+        	</handler>   
+    	</netRemoteCallHib>  	
+	    
+		<method name="setRoomValues">
+			if (canvas.thishib.currentInvitation.room.roomtype.roomtypes_id==1){
+	    		canvas.isConference = true;
+	    	} else {
+	    		canvas.isConference = false;
+		    }
+	    	var roomObj = canvas.thishib.currentInvitation.room;
+        	hib.currentroomid = roomObj.rooms_id;
+        	
+		</method>
+		
+		<method name="login">
+		<![CDATA[
+			this.userlang = Number(this.languages.getValue());
+			this.labellanguages.setAttribute('visibility','hidden');
+			this.languages.setAttribute('visibility','hidden');
+			this.connect.setAttribute('visibility','hidden');
+			this.labelloading.setAttribute('visibility','visible');
+			
+			parent.userlang = Number(this.userlang);
+			
+			var invitee = canvas.thishib.currentInvitation.invitee;
+			var email = invitee.adresses.email;
+			var fName = invitee.firstname == null ? "" : invitee.firstname;
+			var lName = invitee.lastname == null || invitee.lastname == "" ? email : invitee.lastname;
+			//if ($debug) Debug.write("!!!!!!!!!!! invitee :: ", invitee);
+			
+			canvas.setAttribute('currentuser', email);
+			canvas.setAttribute('user_id', -invitee.user_id);
+			canvas.setAttribute('mail', email);
+			if (!invitee.firstname && !invitee.lastname) {
+				if ($debug) Debug.write("!!!!!!!!!!! Nickname invitation ", email);
+				new lz.chooseNickName(canvas);
+			}
+			canvas.setAttribute('firstName', fName);
+			canvas.setAttribute('lastName', lName);
+			canvas.setAttribute('lastLogin', invitee.lastlogin);
+			canvas.setAttribute('official_code','');
+			canvas.setAttribute('picture_uri', invitee.pictureuri);
+			canvas.setAttribute('language', invitee.language_id);
+			
+			hib.userobject = invitee;
+			hib.userobject.firstname = fName;
+			hib.userobject.lastname = lName;
+			
+			hib.userlang = Number(this.userlang);
+			canvas.thishib.loaderVar = new lz.autoloaderBarOnly(canvas);
+			canvas.thishib.loaderVar.setProgress();
+			this.close();
+			//if (canvas.language == canvas.thishib.userlang && canvas.thishib.initlanguageLoaded) { TODO  canvas.language seems to be dropped
+			if (canvas.language_id == canvas.thishib.userlang && canvas.thishib.initlanguageLoaded) {
+				canvas.thishib.loaderVar.getUserSalutations.doCall();
+			} else {
+				canvas.thishib.loaderVar.getLanguageByIdAndMax.doCall();
+			}
+		]]>         
+		</method>
+		 
+		<!-- label: password -->
+	    	<labelText name="pass_label" labelid="536" visibility="hidden" width="200" y="30" resize="false" x="10" />  
+		<customEdittext name="_password" password="true" visibility="hidden" width="170" y="30" x="120" />
+		
+		<!-- label: Check password -->
+	 	<simpleLabelButton name="invitation_pass" y="80" x="120" text="start" visibility="hidden" labelid="537"
+	 					   	width="170" height="20" onclick="parent.checkPWD();" />
+		
+		<!-- label: language -->
+		<labelText name="labellanguages" labelid="227" visibility="hidden" width="200" y="30" resize="false" x="10" />     
+		<resetCombobox name="languages" width="170" y="30" x="120" visibility="hidden" editable="false">
+	      	<netRemoteCallHib name="getLanguages" funcname="languageservice.getLanguages" remotecontext="$once{ canvas.thishib }" >      
+	            <handler name="oninit">
+                 	this.doCall();
+	            </handler>
+	            <handler name="ondata" args="value">
+	            	//The onResult-Handler will be called be the rtmpconnection
+                  	<![CDATA[
+                        var selVal = canvas.language_id;
+                        var found = false;
+                  		for (var i=0;i<value.length;i++){
+	                  		this.parent.addItem(value[i].name,value[i].language_id);
+                            if (value[i].language_id == selVal) {
+                                found = true;
+                            }
+		                }
+                		this.parent.selectItem((found) ? selVal : value[0].language_id);
+		            ]]>
+				</handler>  
+			</netRemoteCallHib>
+		</resetCombobox>		 
+
+		<!-- label: loading -->	
+		<labelText name="labelloading" y="30" x="10" fontstyle="bold" labelid="229" visibility="hidden" />
+		
+		<!-- label: enter -->
+		<simpleLabelButton name="connect" y="80" x="120" text="start" 
+						   visibility="hidden" labelid="228" width="170" height="20" 
+						   onclick="parent.isRoomFull.doCall();" />
+	</class>
+</library>
diff --git a/WebContent/src/modules/invitation/library.lzx b/WebContent/src/modules/invitation/library.lzx
new file mode 100644
index 0000000..481ae54
--- /dev/null
+++ b/WebContent/src/modules/invitation/library.lzx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="autoloaderBarOnly.lzx" />
+	<include href="invitationQuickLoader.lzx" />
+
+</library>
diff --git a/WebContent/src/modules/library.lzx b/WebContent/src/modules/library.lzx
new file mode 100644
index 0000000..dd6fe01
--- /dev/null
+++ b/WebContent/src/modules/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<include href="conference/" />
+	<include href="chat/" />
+	<include href="settings/" />
+	<include href="invitation/" />
+	<include href="dashboard/" />
+    <include href="sipintegration/" />
+	<include href="lzrecordcontent" />
+</library>
diff --git a/WebContent/src/modules/lzrecordcontent/library.lzx b/WebContent/src/modules/lzrecordcontent/library.lzx
new file mode 100644
index 0000000..eb17847
--- /dev/null
+++ b/WebContent/src/modules/lzrecordcontent/library.lzx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	<!-- APL author sebawagner -->
+	<resource name="flv_recorder_play_small_rsc" src="resources/webstart_play_small.png" />
+	<resource name="flv_progress_pointer_rsc" src="resources/progress_pointer.swf" />
+	<resource name="flv_recorder_stop_small_rsc" src="resources/webstart_stop_small.png" />
+</library>
diff --git a/WebContent/src/modules/lzrecordcontent/resources/progress_pointer.swf b/WebContent/src/modules/lzrecordcontent/resources/progress_pointer.swf
new file mode 100644
index 0000000..06eeb13
--- /dev/null
+++ b/WebContent/src/modules/lzrecordcontent/resources/progress_pointer.swf
Binary files differ
diff --git a/WebContent/src/modules/lzrecordcontent/resources/webstart_play_small.png b/WebContent/src/modules/lzrecordcontent/resources/webstart_play_small.png
new file mode 100644
index 0000000..a9a33ed
--- /dev/null
+++ b/WebContent/src/modules/lzrecordcontent/resources/webstart_play_small.png
Binary files differ
diff --git a/WebContent/src/modules/lzrecordcontent/resources/webstart_stop_small.png b/WebContent/src/modules/lzrecordcontent/resources/webstart_stop_small.png
new file mode 100644
index 0000000..6388bd8
--- /dev/null
+++ b/WebContent/src/modules/lzrecordcontent/resources/webstart_stop_small.png
Binary files differ
diff --git a/WebContent/src/modules/settings/library.lzx b/WebContent/src/modules/settings/library.lzx
new file mode 100644
index 0000000..3b48897
--- /dev/null
+++ b/WebContent/src/modules/settings/library.lzx
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+	<!-- APL Author sebawagner -->
+	<resource name="image_loading_placeholder_rsc" 
+			  src="resources/loading_symbol.swf" />
+	
+	<!-- APL Author sebawagner -->
+	<resource name="private_message_select_part_rsc" 
+			  src="resources/select_part.png" />	
+		
+	<!-- FamFam Icon Set -->
+	<resource name="private_message_send_rsc" 
+			  src="resources/email_go.png" />	 
+		
+	<!-- FamFam Icon Set -->
+	<resource name="private_message_add_rsc" 
+			  src="resources/email_add.png" />	
+		
+	<!-- FamFam Icon Set -->	  
+	<resource name="private_message_trash_rsc" 
+			  src="resources/email_delete.png" />	
+	
+	<!-- FamFam Icon Set -->
+	<resource name="private_message_folder_add_rsc" 
+			  src="resources/folder_add.png" />		
+	
+	<!-- FamFam Icon Set -->	  
+	<resource name="private_message_folder_rsc" 
+			  src="resources/folder.png" />	
+		
+	<!-- FamFam Icon Set -->	  
+	<resource name="private_message_inbox_rsc" 
+			  src="resources/basket_put.png" />	
+		
+	<!-- FamFam Icon Set -->	  
+	<resource name="user_contact_calendar_add_rsc" 
+              src="resources/calendar_add.png" />  
+	
+	<!-- FamFam Icon Set -->		  
+	<resource name="user_contact_calendar_delete_rsc" 
+              src="resources/calendar_delete.png" /> 
+      
+    <!-- FamFam Icon Set -->	        
+    <resource name="user_contact_calendar_system_undo_rsc" 
+              src="resources/arrow_undo.png" />   
+   
+    <include href="privatemessages/" />
+    <include href="usercontacts/" />
+    
+    <include href="viewUserProfile.lzx" />
+
+</library>
diff --git a/WebContent/src/modules/settings/privatemessages/library.lzx b/WebContent/src/modules/settings/privatemessages/library.lzx
new file mode 100644
index 0000000..c8cf80f
--- /dev/null
+++ b/WebContent/src/modules/settings/privatemessages/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+    <include href="newPrivateMessage.lzx" />
+
+</library>
diff --git a/WebContent/src/modules/settings/privatemessages/newPrivateMessage.lzx b/WebContent/src/modules/settings/privatemessages/newPrivateMessage.lzx
new file mode 100644
index 0000000..82f5413
--- /dev/null
+++ b/WebContent/src/modules/settings/privatemessages/newPrivateMessage.lzx
@@ -0,0 +1,466 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="newPrivateMessage" extends="guiPresenter" labelid="1209" isdragable="false" 
+    minimizable="false" maximizable="false" fullToolBar="true" 
+    resizeable="false" width="250" height="154" >
+	
+	<attribute name="refObj" value="null"/>
+	
+	<attribute name="userObject" value="null" />
+	
+	<attribute name="user_id" value="0" type="number"/>
+	
+	<attribute name="parentMessageId" value="0" type="number" />
+	
+	<attribute name="receipents" value="null" />
+	
+	<attribute name="saveRefObj" value="null" />
+	
+	<handler name="oninit">
+		<![CDATA[
+			if (this.userObject != null) {
+				
+				var tString = this.userObject.firstname + ' ' + this.userObject.lastname  + ' ' 
+							+ '<' + this.userObject.adresses.email + '>';
+				
+				this._to.sendUpdateText = false;
+				this._to.setAttribute("text",tString);
+				this._to.sendUpdateText = true;
+			} else if (this.user_id != 0) {
+				this.getUserById.doCall();
+			}
+		]]>
+	</handler>
+	
+	<netRemoteCallHib name="getUserById" funcname="userservice.getUserById" remotecontext="$once{ canvas.thishib }" > 
+        <netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+        <netparam><method name="getValue">return parent.parent.user_id;</method></netparam>
+        <handler name="ondata" args="value">
+       	<![CDATA[
+            if($debug) Debug.write("[admin]userValueForm/getUserById: ",value.lastname);
+            parent.userObject = value;
+            var tString = value.firstname + ' ' + value.lastname  + ' ' 
+                            + '<' + value.adresses.email + '>';
+                
+            parent._to.sendUpdateText = false;
+            parent._to.setAttribute("text",tString);
+            parent._to.sendUpdateText = true;
+        ]]>
+        </handler>
+    </netRemoteCallHib>
+	
+	<handler name="onclose">
+		if (this.refObj != null) {
+		    this.refObj.newMessageActive = false;
+		}
+	</handler>
+	
+	<method name="send">
+		<![CDATA[
+		
+			var tAString = this._to.getText().split(",");
+			
+			this.receipents = new Array();
+			
+			for (var i=0;i<tAString.length;i++) {
+				
+				var sString = tAString[i];
+				
+				var t1 = sString.indexOf("<");
+				var t2 = sString.indexOf(">");
+				
+				if ($debug) Debug.write("++ ",i,sString,t1,t2);
+				
+				var email = sString;
+				if (t1 > -1 && t2 > -1) {
+					email = sString.substring(t1 + 1, t2);
+				}
+				
+				if ($debug) Debug.write("++ ",email);
+				
+				this.receipents.push(email);
+				
+			}
+			
+			if ($debug) Debug.write("receipents :: ",this.receipents);
+			if ($debug) Debug.write("receipents :: ",this._richText.getText());
+			if ($debug) Debug.write("composeMail, parentId :: ",this.parentMessageId);
+		
+			this.composeMail.doCall();
+		]]>
+	</method>
+	
+	<!--
+	public Long composeMail(String SID, Map receipents, String subject, String message, Boolean bookedRoom, 
+    		Date validFromDate, String validFromTime, Date validToDate, String validToTime,
+    		Long parentMessageId, Long roomtype_id)
+	 -->
+	<netRemoteCallHib name="composeMail" funcname="userservice.composeMail" remotecontext="$once{ canvas.thishib }" >    
+    		
+    		<netparam><method name="getValue">return canvas.sessionId;</method></netparam>
+		    <netparam><method name="getValue">return parent.parent.receipents</method></netparam>
+            <netparam><method name="getValue">return parent.parent._subject.getText();</method></netparam>
+            <netparam><method name="getValue">return parent.parent._richText.getText();</method></netparam>
+            <netparam><method name="getValue">return parent.parent._bookRoom.getValue();</method></netparam>
+            <netparam><method name="getValue">return parseDateToStringTimeSeconds(parent.parent._valid_from.getDate());</method></netparam>
+            <netparam><method name="getValue">return parent.parent._timeFrom.getText();</method></netparam>
+            <netparam><method name="getValue">return parseDateToStringTimeSeconds(parent.parent._valid_to.getDate());</method></netparam>
+            <netparam><method name="getValue">return parent.parent._timeTo.getText();</method></netparam>
+            <netparam><method name="getValue">return parent.parent.parentMessageId;</method></netparam>
+            <netparam><method name="getValue">return Number(parent.parent._roomtype.getValue());</method></netparam>
+            <!--String domain, String port, String webapp-->
+            <netparam><method name="getValue"> return canvas.getHttpHost(); </method></netparam>
+            <netparam><method name="getValue"> return canvas.red5httpport; </method></netparam>
+            <netparam><method name="getValue"> return canvas.httpRootKey; </method></netparam>
+            <handler name="ondata" args="value">
+            	<![CDATA[
+                	//The onResult-Handler will be called be the rtmpconnection
+			if ($debug) Debug.write("composeMail : ",value);
+			if (parent.saveRefObj != null) {
+				parent.saveRefObj.saveNotification(parent._bookRoom.getValue());
+			}
+			parent.close();
+           ]]>
+		</handler>   
+	</netRemoteCallHib>	
+	
+	<labelText name="_labelTo" x="2" labelid="1210" y="24"/>
+	
+	<customScrollEdittext name="_to" y="22" x="80" width="$once{ parent.width-82 }" 
+						  text="" height="60">
+		
+		<attribute name="sendUpdateText" value="true" type="boolean"/>
+		<attribute name="sendSingleUpdateText" value="true" type="boolean"/>
+		
+		<handler name="oninit">
+			this.closeDelegate = new LzDelegate( this, "onblurFunction" );
+			this._list.refObj = this;
+			this._list.setAttribute("width",this.width);
+		</handler>
+		
+		<handler name="ontextChange" args="t">
+			<![CDATA[
+				if ($debug) Debug.write("-- ontextChange ",this.sendUpdateText,t);
+				
+				if (!this.sendUpdateText) {
+					return;
+				}
+				
+				var tAString = t.split(",");
+				
+				var tString = tAString[tAString.length-1];
+				
+				if ($debug) Debug.write("-1- tString ",tString);
+				
+				tString = tString.split(' ').join('');
+				
+				if ($debug) Debug.write("-2- tString ",tString);
+				
+				if (tString != "") {
+					
+					this.startSearch(tString);
+					
+				}
+				
+			]]>
+		</handler>
+		
+		<method name="addText" args="txt">
+			<![CDATA[
+			
+				if ($debug) Debug.write("-- addText ",txt);
+				
+				var t = this.getText();
+				var tAString = t.split(",");
+				
+				var nString = "";
+				
+				if ($debug) Debug.write("-- tAString.length ",tAString.length);
+				
+				for (var i=0; i<tAString.length-1; i++) {
+					if (i!=0) {
+						nString += ", ";
+					}
+					nString += tAString[i];
+					if ($debug) Debug.write("-- nString 1 ",nString);
+				}
+				
+				if ($debug) Debug.write("-- nString 2 ",nString);
+				
+				if (nString != "") {
+					nString += ", "
+				}
+				
+				nString += txt;
+				
+				if ($debug) Debug.write("-- nString 3 ",nString);
+				
+				this.sendUpdateText = false;
+				this.setAttribute("text",nString);
+				this.sendUpdateText = true;
+			
+			]]>
+		</method>
+		
+		<handler name="onblur">
+			<![CDATA[
+			
+				if (!this.sendUpdateText) {
+					return;
+				}
+				
+				lz.Timer.addTimer( this.closeDelegate, 10 );
+				
+			]]>
+		</handler>				
+				
+		<method name="onblurFunction" args="refObj" >
+			<![CDATA[
+				if ($debug) Debug.write("-- onblur");
+				
+				if (!this.sendSingleUpdateText) {
+					this.sendSingleUpdateText = true;
+					return;
+				}
+				
+				if (this._list.visibility == "visible") {
+					this._list.setAttribute("visibility","hidden");
+				}
+				
+				var t = this.getText();
+				var tAString = t.split(", ");
+				
+				var lastString = tAString[tAString.length-1];
+				
+				var lastChar = lastString.charAt(lastString.length-1);
+
+				if (lastChar != ">") {
+					var nString = "";
+					
+					for (var i=0;i<tAString.length-1;i++) {
+						if (i!=0) {
+							nString += ",";
+						}
+						nString += tAString[i];
+					}
+					
+					this.sendUpdateText = false;
+					this.setAttribute("text",nString);
+					this.sendUpdateText = true;
+					
+				}
+				
+			]]>
+		</method>
+		
+		<method name="startSearch" args="tString">
+			<![CDATA[
+			
+				if ($debug) Debug.write("startSearch :: ",tString);
+				var tResultA = new Array();
+				
+				for (var i=0; i<canvas.userContacts.length; i++) {
+					
+					if (canvas.userContacts[i].contact.firstname.startsWith(tString) 
+						|| canvas.userContacts[i].contact.lastname.startsWith(tString) 
+						|| canvas.userContacts[i].contact.adresses.email.startsWith(tString) ) {
+					
+						tResultA.push(canvas.userContacts[i]);
+							
+					}
+					
+				}
+				
+				if (tResultA.length > 0) {
+					this._list.removeAllItems();
+					
+					for (var k=0;k<tResultA.length;k++) {
+						
+						this._list.addItem(tResultA[k].contact.firstname +' '+ tResultA[k].contact.lastname + ' &#60;' + tResultA[k].contact.adresses.email + '&#62;', tResultA[k].contact.firstname +' '+ tResultA[k].contact.lastname + ' <' + tResultA[k].contact.adresses.email + '>'); 
+						
+					}
+					
+					
+				} else {
+					
+					this._list.removeAllItems();
+					
+					this._list.addItem("No Contact Found","0");
+					
+				}
+				
+				this.sendUpdateText = false;
+				this._list.sendUpdateAttr = false;
+				this._list.selectItemAt(0);
+				this._list.sendUpdateAttr = true;
+				
+				//lz.Focus.setFocus(this._list, true);
+				this.sendUpdateText = true;
+				
+				//this._list.setHilite(this._list.getItemAt(0));
+				this._list.setAttribute("visibility","visible");
+				
+				if ($debug) Debug.write("LIST :1: ",this._list.sendUpdateAttr);
+			
+			]]>
+		</method>
+		<floatinglist name="_list" width="100" 
+					  attach="bottom" visibility="hidden">
+			<attribute name="sendUpdateAttr" value="true" type="boolean"/>
+			<attribute name="refObj" value="null"/>
+			<handler name="onfocus">
+				if ($debug) Debug.write("onfocus");
+				this.refObj.sendSingleUpdateText = false;
+			</handler>
+			<handler name="onselect" args="sel">
+				if ($debug) Debug.write("onselect :1: ",this.sendUpdateAttr);
+				if (this.sendUpdateAttr) {
+					if ($debug) Debug.write("onselect :2: ",sel.value);
+					if (sel.value != "0") {
+						if ($debug) Debug.write("this.parent :: ",this.parent);
+						this.refObj.addText(sel.value);
+						this.setAttribute("visibility","hidden");
+					}
+				}
+			</handler>
+            <textlistitem text="one"/>
+            <textlistitem text="two"/>
+        </floatinglist>
+	</customScrollEdittext>
+	
+	<labelText name="_labelSubject" x="2" labelid="1211" y="86"/>
+	
+	<customEdittext name="_subject" y="84" x="80" width="$once{ parent.width-82 }" />
+
+	<customScrollEdittext name="_richText" y="108" clip="true" x="1"
+		width="$once{ parent.width-2 }" height="$once{ parent.height-225 }">
+		
+	</customScrollEdittext> 	
+	
+	<labelCheckbox name="_bookRoom" labelid="1218"
+				   width="270" y="$once{ parent.height-120 }" x="4">
+		<handler name="onvalue" args="v">
+			if ($debug) Debug.write("onvalue ",v);
+			if (parent._hideRoomConfig != null) {
+				parent._hideRoomConfig.setAttribute("visibility", v ? "hidden" : "visible");
+			}
+		</handler>
+	</labelCheckbox>
+	
+	<view name="_roomConfigBG" width="290" height="76" bgcolor="0xDDDDDD" 
+		   opacity="0.1" y="$once{ parent.height-104 }" x="2">
+	</view>
+	
+	<labelText labelid="194" width="200" y="$once{ parent.height-100 }" resize="false" x="4"/>  
+    <resetCombobox name="_roomtype" width="164" y="$once{ parent.height-100 }" x="120" editable="false" fontsize="11">
+        <handler name="oninit" >
+        <![CDATA[
+            for (var i=0;i<canvas.roomTypesInitValues.length;i++){
+                this.addItem(canvas.roomTypesInitValues[i].label.value,canvas.roomTypesInitValues[i].roomtypes_id);
+            }
+            this.selectItemAt(0);
+        ]]>
+        </handler> 
+    </resetCombobox> 
+        
+	<labelText labelid="1219" width="200" y="$once{ parent.height-76 }" resize="false" x="4"/>  
+	<dateField x="120" y="$once{ parent.height-76 }" name="_valid_from" 
+			   setDefaultToday="true" additionalDay="1" />		
+	<customEdittext name="_timeFrom" 
+					width="50" x="232" y="$once{ parent.height-76 }" 
+					regexpType="time">
+		<handler name="oninit">
+			<![CDATA[
+				var tDate = new Date();
+				var hour = tDate.getHours();
+				if (hour < 10) {
+					hour = "0"+hour;
+				}
+				
+				var minutes = tDate.getMinutes();
+				if (minutes < 15) {
+					minutes = "00";
+				} else if (minutes < 30) {
+					minutes = "15";
+				} else if (minutes < 45) {
+					minutes = "30";
+				} else {
+					minutes = "45";
+				}
+				
+				var hour2 = tDate.getHours()+1;
+				if (hour2 < 10) {
+					hour2 = "0"+hour2;
+				} else if (hour2 > 25) {
+					hour2 = 24;
+				}
+				
+				this.setAttribute("text",hour+":"+minutes);
+				parent._timeTo.setAttribute("text",hour2+":"+minutes);
+			]]>
+		</handler>
+	</customEdittext>
+        
+    <labelText labelid="1220" width="200" y="$once{ parent.height-52 }" resize="false" x="4"/>  
+	<dateField x="120" y="$once{ parent.height-52 }" name="_valid_to" 
+			   setDefaultToday="true" additionalDay="1" />		
+	<customEdittext name="_timeTo" 
+					width="50" x="232" y="$once{ parent.height-52 }" 
+					regexpType="time">
+	</customEdittext>
+	
+	<!-- allowUserQuestions Description -->          
+    <view resource="messagebox_info_rsc" x="302" y="$once{ parent.height-96 }" />
+    
+    <labelText labelid="1221" x="324" y="$once{ parent.height-96 }" fontstyle="italic"
+               multiline="true" width="$once{ parent.width-332 }" /> 
+	
+	<view name="_hideRoomConfig" width="290" height="76" bgcolor="0xFFFFFF" 
+		   opacity="0.6" y="$once{ parent.height-104 }" x="2">
+		<handler name="onclick">
+			parent._bookRoom.setValue(true);
+		</handler>
+	</view>
+		   
+	<!-- label: send -->
+	<simpleLabelButton labelid="218" x="$once{ parent.width-260 }" width="120" y="$once{ parent.height-26 }">
+		<handler name="onclick">
+			<![CDATA[
+                parent.baseUrl = canvas.getAppBaseUrl();
+				
+				parent.send();
+			]]>
+		</handler>
+	</simpleLabelButton>
+
+	<!-- label: cancel -->
+	<simpleLabelButton labelid="219" x="$once{ parent.width-130 }" width="120" y="$once{ parent.height-26 }">
+		<handler name="onclick">
+			parent.close();
+		</handler>
+	</simpleLabelButton>
+	   		   
+						  
+</class>	
+	
+</library>
diff --git a/WebContent/src/modules/settings/resources/arrow_undo.png b/WebContent/src/modules/settings/resources/arrow_undo.png
new file mode 100644
index 0000000..6972c5e
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/arrow_undo.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/basket_delete.png b/WebContent/src/modules/settings/resources/basket_delete.png
new file mode 100644
index 0000000..1349974
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/basket_delete.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/basket_put.png b/WebContent/src/modules/settings/resources/basket_put.png
new file mode 100644
index 0000000..be62faa
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/basket_put.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/calendar_add.png b/WebContent/src/modules/settings/resources/calendar_add.png
new file mode 100644
index 0000000..17679db
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/calendar_add.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/calendar_delete.png b/WebContent/src/modules/settings/resources/calendar_delete.png
new file mode 100644
index 0000000..69a3b10
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/calendar_delete.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/email_add.png b/WebContent/src/modules/settings/resources/email_add.png
new file mode 100644
index 0000000..6c93368
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/email_add.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/email_delete.png b/WebContent/src/modules/settings/resources/email_delete.png
new file mode 100644
index 0000000..a9932b1
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/email_delete.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/email_go.png b/WebContent/src/modules/settings/resources/email_go.png
new file mode 100644
index 0000000..4a6c5d3
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/email_go.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/folder.png b/WebContent/src/modules/settings/resources/folder.png
new file mode 100644
index 0000000..784e8fa
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/folder.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/folder_add.png b/WebContent/src/modules/settings/resources/folder_add.png
new file mode 100644
index 0000000..529fe8f
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/folder_add.png
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/loading_symbol.fla b/WebContent/src/modules/settings/resources/loading_symbol.fla
new file mode 100644
index 0000000..59efc05
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/loading_symbol.fla
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/loading_symbol.swf b/WebContent/src/modules/settings/resources/loading_symbol.swf
new file mode 100644
index 0000000..703fae7
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/loading_symbol.swf
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/select_part.fla b/WebContent/src/modules/settings/resources/select_part.fla
new file mode 100644
index 0000000..57b97e3
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/select_part.fla
Binary files differ
diff --git a/WebContent/src/modules/settings/resources/select_part.png b/WebContent/src/modules/settings/resources/select_part.png
new file mode 100644
index 0000000..fbd6488
--- /dev/null
+++ b/WebContent/src/modules/settings/resources/select_part.png
Binary files differ
diff --git a/WebContent/src/modules/settings/usercontacts/library.lzx b/WebContent/src/modules/settings/usercontacts/library.lzx
new file mode 100644
index 0000000..80e47c5
--- /dev/null
+++ b/WebContent/src/modules/settings/usercontacts/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+    <include href="userContacts.lzx" />
+
+</library>
diff --git a/WebContent/src/modules/settings/usercontacts/userContacts.lzx b/WebContent/src/modules/settings/usercontacts/userContacts.lzx
new file mode 100644
index 0000000..9e25868
--- /dev/null
+++ b/WebContent/src/modules/settings/usercontacts/userContacts.lzx
@@ -0,0 +1,530 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="userContacts" extends="view" height="${ parent.height }"
+	   width="276" x="$once{ canvas.width-this.width + 2 }">
+	
+	<method name="reload">
+		this._pendingContacts._table.getPendingUserContacts.doCall();
+		this._availableContacts._table.getUserContacts.doCall();
+	</method>
+	
+	<!--
+	public Long changePendingStatusUserContacts(
+		String SID, Long userContactId, Boolean pending) {
+	 -->
+	<view name="_pendingContacts" height="$once{ parent.height/2 }" >
+		
+		<!--
+		public List<UserContacts> getPendingUserContacts(String SID)
+		 -->
+		<handler name="oninit">
+			this._table.getPendingUserContacts.doCall();
+		</handler> 
+	    		 
+		
+		<labelText name="_labelPendingUsers" x="2" labelid="1189" fontstyle="bold" />
+		
+		<turnOverListOrderedPaged name="_table" showTopBar="false" x="2" 
+					  height="$once{ parent.height }" 
+		             y="0" itemHeight="40" listLabelId="1184" headerHeight="22" 
+		             listItemName="pendingContactsListItem" menuBarXIndent="100"
+		             multiselect="false" width="270">
+			
+			<netRemoteCallHib name="getPendingUserContacts" funcname="userservice.getPendingUserContacts" 
+					  remotecontext="$once{ canvas.thishib }" >      
+				<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+		    	<handler name="ondata" args="value">
+		    		<![CDATA[
+			    		if ($debug) Debug.write("getPendingUserContacts: ",value);
+			    		
+			    		this.parent.initValues(value.length);
+			    		
+			    		if (value.length == 0) {
+			    			parent.parent.setAttribute("height",20);
+			    			parent.setAttribute("visibility","hidden");
+			    		}
+			    		
+			    		this.parent.parent._labelPendingUsers.setAttribute("text",canvas.getLabelName(this.parent.parent._labelPendingUsers.labelid)+' <i>( '+value.length+' </i>)');  
+			    		
+			    		var tResult = new Array();
+			    		for (var t=0;t<value.length;t++) {
+			    			for (var i=0;i<canvas.salutationsInitValues.length;i++){
+			    				if (canvas.salutationsInitValues[i].salutations_id == value[t].owner.salutations_id) {
+					                value[t].owner["title"] = canvas.salutationsInitValues[i].label.value;
+					                break;
+			    				}
+				            }
+			    			tResult.push(value[t]);
+			    		}
+			    		
+			    		this.parent.renderContent(tResult);
+			    		
+		    		]]>
+		    	</handler>
+		    </netRemoteCallHib>	
+		
+			<handler name="oninit">
+	            this.addHeaderItem(1180,190);
+	            this.addHeaderItem(1185,60);
+	        </handler>
+	        
+	        <handler name="onclickedItem" args="refObj">
+	            <![CDATA[
+	            
+	                if ($debug) Debug.write("onclickedItem ",refObj.refObj.userContactId);
+	                
+	            ]]>
+	        </handler>
+	        
+	        <method name="setPendingStatus" args="userContactId,pending">
+	            <![CDATA[
+	            
+	                if ($debug) Debug.write("setPendingStatus ",userContactId,pending);
+	                
+	                this.changePendingStatusUserContacts.pending = pending;
+	                this.changePendingStatusUserContacts.userContactId = userContactId;
+	                this.changePendingStatusUserContacts.doCall();
+	            ]]>
+	        </method>
+	        
+	        <!--
+			public Long changePendingStatusUserContacts(String SID, Long userContactId, Boolean pending)
+			 -->
+		    <netRemoteCallHib name="changePendingStatusUserContacts" funcname="userservice.changePendingStatusUserContacts" 
+						  remotecontext="$once{ canvas.thishib }" activeErrorHandler="true" >      
+				<attribute name="userContactId" value="0" type="number" />
+				<attribute name="pending" value="true" type="boolean" />
+				<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+				<netparam><method name="getValue"> return parent.userContactId; </method></netparam>
+		    	<netparam><method name="getValue"> return parent.pending; </method></netparam>
+		    	<handler name="ondata" args="value">
+		    		<![CDATA[
+			    		if ($debug) Debug.write("changePendingStatusUserContacts: ",value);
+			    		parent.parent.parent.reload();
+		    		]]>
+		    	</handler>
+		    </netRemoteCallHib>	
+	        
+	        <method name="updatePendingStatus" args="itemId">
+	        	this.renderList[itemId]["pending"] = true;
+	        </method>
+	        
+	        <method name="renderContent" args="rList">
+	            <![CDATA[
+	            
+	            	this.renderList = rList;
+	            
+	                this.isLoaded = true;
+	                var list = this._innerlist._inn._inn;
+	                
+	                if (this.renderList == null) {
+	                	this.renderList = new Array();
+	                }
+	                //this.renderList = records;
+	                var records = this.renderList;
+	                this._innerlist._inn.setAttribute("y",0);
+	                this._innerlist._inn._inn.setAttribute("height",records.length*this.itemHeight);
+	                this._innerlist._inn.resetItems();
+	                
+	                if ($debug) Debug.write(":: renderContent ::",this.renderList.length,list.subviews.length);
+	                
+	                this._records.setAttribute("text",records.length);
+	                
+	                for (var i=0;i<list.subviews.length;i++){
+	                    
+	                    //if (i % 2 == 0) {
+	                    //    list.subviews[i].setIsSecond(true);
+	                    //} else {
+	                    //    list.subviews[i].setIsSecond(false);
+	                    //}
+	                    
+	                    if (records.length > i) {
+	                    	
+	                    	//if ($debug) Debug.write("Render Item ",records[i]);
+	                        
+	                        list.subviews[i].setAttribute("clickable",true);
+	                        list.subviews[i].refObj = records[i];
+	                        
+	                        if (records[i]["isselected"] && records[i].isselected) {
+	                            list.subviews[i].isselected = true;
+	                        } else {
+	                            list.subviews[i].isselected = false;
+	                        }
+	                        
+	                        list.subviews[i].setAttribute("username",records[i].owner.title + ' ' + records[i].owner.firstname+' '+records[i].owner.lastname);
+	                        
+	                        list.subviews[i].setAttribute("itemId",i);
+	                        
+	                    } else {
+	                        
+	                        list.subviews[i].refObj = null;
+	                        
+	                        list.subviews[i].isselected = false;
+	                        list.subviews[i].onmouseout.sendEvent();
+	                        
+	                        list.subviews[i].setAttribute("username",'');
+	                        
+	                        list.subviews[i].setAttribute("itemId","");
+	                        
+	                        list.subviews[i].setAttribute("clickable",false);
+	                        
+	                    }
+	                    
+	                }
+	                
+	                
+	                this.sendInitialWidthUpdate();
+	                
+	            ]]>
+	        </method>   
+		        
+	        <handler name="onScrollItem" args="item">
+	            <![CDATA[
+	                if (this.renderList.length > item.itemId) {
+	                    item.setAttribute("clickable",true);
+	                    item.refObj = this.renderList[item.itemId];
+	                    
+	                    //if (item.itemId % 2 == 0) {
+	                    //    item.setIsSecond(true);
+	                    //} else {
+	                    //    item.setIsSecond(false);
+	                    //}
+	                    
+	                    if (this.renderList[item.itemId]["isselected"] && this.renderList[item.itemId].isselected) {
+	                        item.isselected = true;
+	                        item.onmouseout.sendEvent();
+	                    } else {
+	                        item.isselected = false;
+	                        item.onmouseout.sendEvent();
+	                    }
+	                    
+	                    //if ($debug) Debug.write(item.itemId);
+	                    
+	                    item.setAttribute("username",this.renderList[item.itemId].owner.title + ' ' + this.renderList[item.itemId].owner.firstname+' '+this.renderList[item.itemId].owner.lastname);
+	                        
+	                    item.setAttribute("itemId",item.itemId);
+	                    
+	                } else {
+	                    
+	                    //if (item.itemId % 2 == 0) {
+	                    //    item.setIsSecond(true);
+	                    //} else {
+	                    //    item.setIsSecond(false);
+	                    //}
+	                    
+	                    item.isselected = false;
+	                    item.onmouseout.sendEvent();
+	                    
+	                    item.refObj = null;
+	                    
+	                    item.setAttribute("username","");
+	                    
+	                    item.setAttribute("itemId","");
+	                    
+	                    item.setAttribute("clickable",false);
+	                }
+	                
+	            ]]>
+	        </handler>
+	        
+			
+		</turnOverListOrderedPaged>
+		
+	</view> 
+	
+	<view name="_availableContacts" y="${ parent._pendingContacts.height + 2 }"
+		  height="${ parent.height - parent._pendingContacts.height - 4 }">
+		
+		
+		<!--
+		public List<UserContacts> getPendingUserContacts(String SID)
+		 -->
+		<handler name="oninit">
+			this._table.getUserContacts.doCall();
+		</handler> 
+		
+		<handler name="onheight" args="h">
+			this._table.renderByHeightChange();
+		</handler>
+	    		 
+		
+		<labelText name="_labelPendingUsers" x="2" labelid="1188" fontstyle="bold" />
+		
+		<turnOverListOrderedPaged name="_table" showTopBar="false" x="2" height="${ parent.height }" 
+		             y="0" itemHeight="40" listLabelId="1184" headerHeight="22" 
+		             listItemName="contactsListItem" menuBarXIndent="100"
+		             multiselect="false" width="270">
+			
+	        <method name="renderByHeightChange" >
+        	
+	        	this.clearList();
+	        	this._innerlist._inn.initItems(this.listItemName);
+	        	
+	        	this.renderContent(this.renderList);
+	        </method>
+			
+			<netRemoteCallHib name="getUserContacts" funcname="userservice.getUserContacts" 
+					  remotecontext="$once{ canvas.thishib }" >      
+				<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+		    	<handler name="ondata" args="value">
+		    		<![CDATA[
+			    		if ($debug) Debug.write("getUserContacts: ",value);
+			    		
+			    		canvas.userContacts = value;
+			    		
+			    		this.parent.initValues(value.length);
+			    		
+			    		this.parent.parent._labelPendingUsers.setAttribute("text",canvas.getLabelName(this.parent.parent._labelPendingUsers.labelid)+' <i>( '+value.length+' </i>)')
+			    		
+			    		var tResult = new Array();
+			    		for (var t=0;t<value.length;t++) {
+			    			value[t].contact["shareCalendar"] = value[t].shareCalendar;
+			    			value[t].contact["pending"] = value[t].pending;
+			    			value[t].contact["userContactId"] = value[t].userContactId;
+			    			for (var i=0;i<canvas.salutationsInitValues.length;i++){
+			    				if (canvas.salutationsInitValues[i].salutations_id == value[t].contact.salutations_id) {
+					                value[t].contact["title"] = canvas.salutationsInitValues[i].label.value;
+					                break;
+			    				}
+				            }
+			    			tResult.push(value[t].contact);
+			    		}
+			    		
+			    		this.parent.renderContent(tResult);
+			    		
+		    		]]>
+		    	</handler>
+		    </netRemoteCallHib>	
+		
+			<handler name="oninit">
+	            this.addHeaderItem(1180,170);
+	            this.addHeaderItem(1185,80);
+	        </handler>
+	        
+	        <handler name="onclickedItem" args="refObj">
+	            <![CDATA[
+	            
+	                if ($debug) Debug.write("onclickedItem ",refObj.refObj.userContactId);
+	                
+	            ]]>
+	        </handler>
+	        
+	        <method name="addMessage" args="userObject">
+	        	parent.parent.parent._privateMessages.newMessage(userObject);
+	        </method>
+	        
+	        <method name="removeContactUserMethod" args="userContactId">
+	            <![CDATA[
+	            
+	                if ($debug) Debug.write("removeUser ",userContactId,pending);
+	                
+	                this.removeContactUser.userContactId = userContactId;
+	                this.removeContactUser.doCall();
+	            ]]>
+	        </method>
+	        
+	        <!--
+			public Integer removeContactUser(String SID, Long userContactId)
+			 -->
+		    <netRemoteCallHib name="removeContactUser" funcname="userservice.removeContactUser" 
+						  remotecontext="$once{ canvas.thishib }" activeErrorHandler="true" >      
+				<attribute name="userContactId" value="0" type="number" />
+				<attribute name="pending" value="true" type="boolean" />
+				<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+				<netparam><method name="getValue"> return parent.userContactId; </method></netparam>
+		    	<handler name="ondata" args="value">
+		    		<![CDATA[
+			    		if ($debug) Debug.write("removeContactUser: ",value);
+			    		parent.parent.parent.reload();
+		    		]]>
+		    	</handler>
+		    </netRemoteCallHib>	
+		    
+		    <method name="setCalendarSharing" args="userContactId,doShare">
+                <![CDATA[
+                
+                    if ($debug) Debug.write("setPendingStatus ",userContactId,doShare);
+                    
+                    this.shareCalendarUserContact.doShare = doShare;
+                    this.shareCalendarUserContact.userContactId = userContactId;
+                    this.shareCalendarUserContact.doCall();
+                ]]>
+            </method>
+            
+            <!--
+            public void shareCalendarUserContact(String SID, Long userContactId, Boolean shareCalendar)
+             -->
+            <netRemoteCallHib name="shareCalendarUserContact" funcname="userservice.shareCalendarUserContact" 
+                          remotecontext="$once{ canvas.thishib }"  >      
+                <attribute name="userContactId" value="0" type="number" />
+                <attribute name="doShare" value="true" type="boolean" />
+                <netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+                <netparam><method name="getValue"> return parent.userContactId; </method></netparam>
+                <netparam><method name="getValue"> return parent.doShare; </method></netparam>
+                <handler name="ondata" args="value">
+                    <![CDATA[
+                        if ($debug) Debug.write("changePendingStatusUserContacts: ",value);
+                        parent.parent.parent.reload();
+                    ]]>
+                </handler>
+            </netRemoteCallHib> 
+	        
+	        <method name="renderContent" args="rList">
+	            <![CDATA[
+	            
+	            	this.renderList = rList;
+	            
+	                this.isLoaded = true;
+	                var list = this._innerlist._inn._inn;
+	                
+	                if (this.renderList == null) {
+	                	this.renderList = new Array();
+	                }
+	                //this.renderList = records;
+	                var records = this.renderList;
+	                this._innerlist._inn.setAttribute("y",0);
+	                this._innerlist._inn._inn.setAttribute("height",records.length*this.itemHeight);
+	                this._innerlist._inn.resetItems();
+	                
+	                if ($debug) Debug.write(":: renderContent ::",this.renderList.length,list.subviews.length);
+	                
+	                this._records.setAttribute("text",records.length);
+	                
+	                for (var i=0;i<list.subviews.length;i++){
+	                    
+	                    //if (i % 2 == 0) {
+	                    //    list.subviews[i].setIsSecond(true);
+	                    //} else {
+	                    //    list.subviews[i].setIsSecond(false);
+	                    //}
+	                    
+	                    if (records.length > i) {
+	                    	
+	                    	//if ($debug) Debug.write("Render Item ",records[i]);
+	                        
+	                        list.subviews[i].setAttribute("clickable",true);
+	                        list.subviews[i].refObj = records[i];
+	                        
+	                        if (records[i]["isselected"] && records[i].isselected) {
+	                            list.subviews[i].isselected = true;
+	                        } else {
+	                            list.subviews[i].isselected = false;
+	                        }
+	                        
+	                        var shareCalendar = records[i].shareCalendar;
+                            if (shareCalendar == null) {
+                                shareCalendar = false;
+                            }
+                        
+	                        list.subviews[i].setAttribute("shareCalendar",shareCalendar);
+	                        list.subviews[i].setAttribute("username",records[i].title + ' ' + records[i].firstname+' '+records[i].lastname);
+	                        
+	                        list.subviews[i].setAttribute("itemId",i);
+	                        
+	                    } else {
+	                        
+	                        list.subviews[i].refObj = null;
+	                        
+	                        list.subviews[i].isselected = false;
+	                        list.subviews[i].onmouseout.sendEvent();
+	                        
+	                        list.subviews[i].setAttribute("shareCalendar",false);
+	                        list.subviews[i].setAttribute("username",'');
+	                        
+	                        list.subviews[i].setAttribute("itemId","");
+	                        
+	                        list.subviews[i].setAttribute("clickable",false);
+	                        
+	                    }
+	                    
+	                }
+	                
+	                
+	                this.sendInitialWidthUpdate();
+	                
+	            ]]>
+	        </method>   
+		        
+	        <handler name="onScrollItem" args="item">
+	            <![CDATA[
+	                if (this.renderList.length > item.itemId) {
+	                    item.setAttribute("clickable",true);
+	                    item.refObj = this.renderList[item.itemId];
+	                    
+	                    //if (item.itemId % 2 == 0) {
+	                    //    item.setIsSecond(true);
+	                    //} else {
+	                    //    item.setIsSecond(false);
+	                    //}
+	                    
+	                    if (this.renderList[item.itemId]["isselected"] && this.renderList[item.itemId].isselected) {
+	                        item.isselected = true;
+	                        item.onmouseout.sendEvent();
+	                    } else {
+	                        item.isselected = false;
+	                        item.onmouseout.sendEvent();
+	                    }
+	                    
+	                    //if ($debug) Debug.write(item.itemId);
+	                    var shareCalendar = this.renderList[item.itemId].shareCalendar;
+	                    if (shareCalendar == null) {
+	                    	shareCalendar = false;
+	                    }
+	                    
+	                    item.setAttribute("shareCalendar",shareCalendar);
+	                    item.setAttribute("username",this.renderList[item.itemId].title + ' ' + this.renderList[item.itemId].firstname+' '+this.renderList[item.itemId].lastname);
+	                        
+	                    item.setAttribute("itemId",item.itemId);
+	                    
+	                } else {
+	                    
+	                    //if (item.itemId % 2 == 0) {
+	                    //    item.setIsSecond(true);
+	                    //} else {
+	                    //    item.setIsSecond(false);
+	                    //}
+	                    
+	                    item.isselected = false;
+	                    item.onmouseout.sendEvent();
+	                    
+	                    item.refObj = null;
+	                    
+	                    item.setAttribute("shareCalendar",false);
+	                    item.setAttribute("username","");
+	                    
+	                    item.setAttribute("itemId","");
+	                    
+	                    item.setAttribute("clickable",false);
+	                }
+	                
+	            ]]>
+	        </handler>
+	        
+			
+		</turnOverListOrderedPaged>
+		
+	</view>
+	
+</class>
+
+</library>
diff --git a/WebContent/src/modules/settings/viewUserProfile.lzx b/WebContent/src/modules/settings/viewUserProfile.lzx
new file mode 100644
index 0000000..9a76378
--- /dev/null
+++ b/WebContent/src/modules/settings/viewUserProfile.lzx
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="viewUserProfileWindow" extends="guiPresenter" labelid="1235" isdragable="true" 
+    minimizable="true" maximizable="false" fullToolBar="true" y="100" x="$once{ (parent.width-this.width)/2 }"
+    resizeable="false" width="470" height="$once{ parent.height-this.y-10 }" >
+	
+	<attribute name="userId" value="0" type="number"/>
+	
+	<handler name="oninit">
+		this.getUserById.doCall();
+	</handler>
+	
+	<!--
+	public Users getUserById(String SID, long user_id)
+	 -->
+	<netRemoteCallHib name="getUserById" funcname="userservice.getUserById" 
+			  remotecontext="$once{ canvas.thishib }" >      
+		<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+		<netparam><method name="getValue"> return parent.parent.userId; </method></netparam>
+    	<handler name="ondata" args="value">
+   		<![CDATA[
+    		parent.setAttribute("title",parent.title+" "+value.firstname+" "+value.lastname);
+    		this.parent.viewUserProfile.viewUserProfile.initFields(value);
+   		]]>
+    	</handler>
+    </netRemoteCallHib>	
+	
+    <!--
+    public Long requestUserToContactList(String SID, Long userToAdd_id, 
+                String domain, String port, String webapp)
+     -->
+    <netRemoteCallHib name="requestUserToContactList" funcname="userservice.requestUserToContactList" 
+                  remotecontext="$once{ canvas.thishib }" activeErrorHandler="true" >      
+        <netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+        <netparam><method name="getValue"> return parent.parent.viewUserProfile.viewUserProfile.userObject.user_id; </method></netparam>
+        <netparam><method name="getValue"> return canvas.getHttpHost(); </method></netparam>
+        <netparam><method name="getValue"> return canvas.red5httpport; </method></netparam>
+        <netparam><method name="getValue"> return canvas.httpRootKey; </method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("requestUserToContactList: ",value);
+                if (value > 0) {
+                    new lz.labelerrorPopup(canvas,{labelid:1267,errorlabelid:1266});
+                }
+            ]]>
+        </handler>
+    </netRemoteCallHib> 
+	
+	<view name="viewUserProfile" y="24" height="$once{ parent.height-60 }" 
+		  width="$once{ parent.width-2 }" clip="true">
+		
+		<viewUserProfile name="viewUserProfile" />
+		
+		<om_vscrollbar />
+		
+	</view>
+	
+	<simpleLabelButton labelid="1253" width="190" x="5" y="$once{ parent.height - 26 }">
+        <handler name="onclick">
+            new lz.newPrivateMessage(canvas,{
+                                x:200,y:120,
+                                refObj:null,
+                                minimizable:true,
+                                maximizable:true,
+                                isdragable:true,
+                                userObject:null,
+                                user_id:parent.viewUserProfile.viewUserProfile.userObject.user_id,
+                                width:canvas.width-300,
+                                height:canvas.height-130
+                            });
+        </handler>
+    </simpleLabelButton>  
+	
+	<simpleLabelButton labelid="1186" width="160" x="$once{ parent.width - 270 }" y="$once{ parent.height - 26 }">
+    	<handler name="onclick">
+    		if (hib.userobject.user_id == parent.viewUserProfile.viewUserProfile.userObject.user_id) {
+                new lz.labelerrorPopup(canvas,{errorlabelid:1225});
+                return;
+            }
+            parent.requestUserToContactList.doCall();
+    	</handler>
+    </simpleLabelButton>   
+	
+    <simpleLabelButton labelid="61" width="100" x="$once{ parent.width - 105 }" y="$once{ parent.height - 26 }">
+    	<handler name="onclick">
+    		this.parent.close();
+    	</handler>
+    </simpleLabelButton>
+	
+</class>	
+	
+<!--- User Profile Setting Panel -->
+<class name="viewUserProfile" extends="view" >
+	
+	<attribute name="userObject" value="null" />
+			
+	<method name="initFields" args="obj">
+    	<![CDATA[
+    	    this.userObject = obj;
+	        this._userpic.setAttribute('src', canvas.getPictureUrl(obj.pictureuri
+				, '&moduleName=remoteuserprofile&remoteUserid='+obj.user_id));
+	        
+	        var tUserName = "<u><FONT color='#0000CC'><a href='asfunction:_root.searchUsers,"+ this.removeWhitespace(obj.firstname) +"'>" + this.removeWhitespace(obj.firstname) + "</a></FONT></u>";
+    			
+	        tUserName += " <u><FONT color='#0000CC'><a href='asfunction:_root.searchUsers,"+ this.removeWhitespace(obj.lastname) +"'>" + this.removeWhitespace(obj.lastname) + "</a></FONT></u>";
+
+    		this.timezone.setAttribute("text",this.userObject.timeZoneId);
+    	
+    		this.username.setAttribute("text",tUserName);
+    		
+    		this.memberSince.setAttribute("text",parseDateToString(this.userObject.starttime));
+    		
+    		var aOfferings = obj.userOffers.split(",");
+    		
+    		var tOfferings = "";
+    		
+    		for (var t=0;t<aOfferings.length;t++) {
+    			
+    			tOfferings += "<u><FONT color='#0000CC'><a href='asfunction:_root.searchOffers,"+ this.removeWhitespace(aOfferings[t]) +"'>" + this.removeWhitespace(aOfferings[t]) + "</a></FONT></u>";
+    			
+    			if (t+1 < aOfferings.length) {
+    				tOfferings += ", ";
+    			}
+    		}
+    		
+    		this.userOffers._text.setAttribute("text",tOfferings);
+    		
+    		
+    		var aSearchs = obj.userSearchs.split(",");
+    		
+    		var tSearchs = "";
+    		
+    		for (var t=0;t<aSearchs.length;t++) {
+    			
+    			tSearchs += "<u><FONT color='#0000CC'><a href='asfunction:_root.searchInterest,"+ this.removeWhitespace(aSearchs[t]) +"'>" + this.removeWhitespace(aSearchs[t]) + "</a></FONT></u>";
+    			
+    			if (t+1 < aSearchs.length) {
+    				tSearchs += ", ";
+    			}
+    		}
+    		
+    		this.userSearchs._text.setAttribute("text",tSearchs);
+    		
+    		if (hib.userobject.user_id == this.userObject.user_id) {
+    			//Self always show
+    			this.showUserContactData();
+    		} else if (obj.showContactData) {
+    			this.showUserContactData();
+    		}  else if (obj.showContactDataToContacts) {
+                this.checkUserIsInContactList.doCall();
+            } else {
+    			this.userContactData.setAttribute("text",canvas.getLabelName(1268));
+    		}
+    		
+    	
+    	]]>
+	</method>
+	
+	<!--
+	public Boolean checkUserIsInContactList(String SID, Long user_id)
+	 -->
+	<netRemoteCallHib name="checkUserIsInContactList" funcname="userservice.checkUserIsInContactList" 
+              remotecontext="$once{ canvas.thishib }" >      
+        <netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
+        <netparam><method name="getValue"> return parent.parent.userObject.user_id; </method></netparam>
+        <handler name="ondata" args="value">
+            <![CDATA[
+                if ($debug) Debug.write("checkUserIsInContactList: ",value);
+                
+                if (value){
+                    parent.showUserContactData();
+                } else {
+                    parent.userContactData.setAttribute("text",canvas.getLabelName(1269));
+                }
+                
+            ]]>
+        </handler>
+    </netRemoteCallHib> 
+
+	<method name="showUserContactData">
+		<![CDATA[
+		
+			var tString = canvas.getNotNullString(this.userObject.adresses.street) + " " + canvas.getNotNullString(this.userObject.adresses.additionalname) + "<br/>";
+			tString += canvas.getNotNullString(this.userObject.adresses.zip) + " " + canvas.getNotNullString(this.userObject.adresses.town) + "<br/>";
+			tString += canvas.getNotNullString(this.userObject.adresses.states.name) + "<br/><br/>";
+			tString += canvas.getNotNullString(this.userObject.adresses.email) + "<br/>";
+			tString += canvas.getNotNullString(this.userObject.adresses.phone) + "<br/><br/>";
+			tString += canvas.getNotNullString(this.userObject.adresses.comment) + "<br/>";
+
+			this.userContactData.setAttribute("text",tString);
+
+		]]>
+	</method>
+	
+	<method name="removeWhitespace" args="str">
+		<![CDATA[
+		
+			//if ($debug) Debug.write("removeWhitespace 1 ",str);
+			//if ($debug) Debug.write("removeWhitespace 2 ",str.length);
+		
+			var tResultingString = "";
+			
+			for (var i=0;i<str.length;i++) {
+				
+				var tChar = str.substring(i,i+1);
+				
+				if (tChar != " ") {
+					tResultingString = str.substring(i,str.length);
+					break;
+				}
+				
+			}
+			
+			for (var i=tResultingString.length;i>0;i--) {
+				
+				var tChar = tResultingString.substring(i-1,i);
+				
+				if (tChar != " ") {
+					tResultingString = tResultingString.substring(0,i);
+					break;
+				}
+				
+			}
+			
+			
+			return tResultingString;
+			
+		
+		]]>
+	</method>
+	
+	<image y="10" x="10" name="_userpic" />
+	
+	<view x="180" width="260" y="10" height="120" bgcolor="0xFFFFFF" />
+	
+	<labelText name="usernameLabel" x="180" y="10" labelid="1164" />
+	<labelText name="username" x="260" y="10" />
+	
+	<labelText name="timezoneLabel" x="180" y="30" labelid="1165" />
+	<labelText name="timezone" x="260" y="30" />
+	
+	<labelText name="memberSinceLabel" x="180" y="50" labelid="1296" />
+    <labelText name="memberSince" x="260" y="50" />
+	
+	<labelText name="userFields" x="10" y="140" labelid="1166" fontstyle="bold" />
+	
+	<labelText name="userOffersLabel" x="10" y="160" labelid="1162" />
+	
+	<view name="userOffers" x="120" y="160" height="100" width="320" clip="true" bgcolor="0xFFFFFF">
+		<labelText name="_text" multiline="true" width="$once{ parent.width- 16 }" />
+		<om_vscrollbar />
+	</view>
+	
+	<labelText name="userSearchsLabel" x="10" y="270" labelid="1163" />
+	
+	<view name="userSearchs" x="120" y="270" height="100" width="320" clip="true" bgcolor="0xFFFFFF">
+		<labelText name="_text" multiline="true" width="$once{ parent.width- 16 }" />
+		<om_vscrollbar />
+	</view>
+	
+	<labelText name="userContact" x="10" y="380" labelid="1167" fontstyle="bold" />
+	
+	<labelText x="10" y="400" labelid="1270" />
+	
+	<labelText name="userContactData" x="120" y="400" multiline="true" width="320" 
+			   selectable="true" bgcolor="0xFFFFFF" resize="false" />
+	    	
+</class>
+
+
+</library>
diff --git a/WebContent/src/modules/sipintegration/library.lzx b/WebContent/src/modules/sipintegration/library.lzx
new file mode 100644
index 0000000..a0c1e01
--- /dev/null
+++ b/WebContent/src/modules/sipintegration/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+    <include href="sipLoader.lzx" />
+    
+</library>
diff --git a/WebContent/src/modules/sipintegration/sipLoader.lzx b/WebContent/src/modules/sipintegration/sipLoader.lzx
new file mode 100644
index 0000000..e948029
--- /dev/null
+++ b/WebContent/src/modules/sipintegration/sipLoader.lzx
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="sipLoader" extends="view" bgcolor="0xFFFFFF"
+	   align="center" valign="middle" 
+	   width="${ this._label.width + 50 }" height="40">
+
+    <view resource="warning_icon_rsc" x="10" y="10" />
+
+    <labelText labelid="900" name="_label"
+    		   fontsize="11" y="10" x="40" />
+    
+</class>
+
+</library>
diff --git a/WebContent/src/plugins/library.lzx b/WebContent/src/plugins/library.lzx
new file mode 100644
index 0000000..417d2c6
--- /dev/null
+++ b/WebContent/src/plugins/library.lzx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <!-- Add the Folder and Entry for your Plugin here -->
+
+    <!--
+    <include href="livewall/"/>
+     -->
+	
+</library>
diff --git a/WebContent/src/resources/library.lzx b/WebContent/src/resources/library.lzx
new file mode 100644
index 0000000..37cd9c5
--- /dev/null
+++ b/WebContent/src/resources/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!-- FamFam Icon Set -->
+<resource name="user_moderator_list_apply_rsc" src="tick.png" />
+
+<!-- add for calendar -->
+<!-- FamFam Icon Set -->
+<resource name="user_profile_rsc" src="user.png" />
+
+</library>
diff --git a/WebContent/src/resources/tick.png b/WebContent/src/resources/tick.png
new file mode 100644
index 0000000..a9925a0
--- /dev/null
+++ b/WebContent/src/resources/tick.png
Binary files differ
diff --git a/WebContent/src/resources/user.png b/WebContent/src/resources/user.png
new file mode 100644
index 0000000..79f35cc
--- /dev/null
+++ b/WebContent/src/resources/user.png
Binary files differ
diff --git a/WebContent/src/rest/rest-testclient.lzx b/WebContent/src/rest/rest-testclient.lzx
new file mode 100644
index 0000000..2702425
--- /dev/null
+++ b/WebContent/src/rest/rest-testclient.lzx
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" height="100%" title="REST Test-Application">
+	
+<debug width="450" x="460" y="600" height="100" />
+  
+<include href="incubator/lzcombobox.lzx" />
+
+<attribute name="_baseUrlRestTestGate" value="" type="string" />
+
+<method name="setBaseUrlGateway" args="txt">
+	if ($debug) Debug.write("setBaseUrlGateway: ",txt);
+	this.setAttribute("_baseUrlRestTestGate",txt);
+	var tString1 = txt+"/AddressBookService/findEntry";
+	if ($debug) Debug.write("tString1: ",tString1);
+	this.dset.setSrc(tString1);
+	this.dset.setQueryType("POST");
+	this.dset.setQueryParam("param1","awe");
+	this.dset.doRequest();
+	if ($debug) Debug.write("dset: ",this.dset);
+</method>
+
+<dataset name="dset" request="false" type="post" ondata="Debug.write('ondata: ',val,this.data,this)" >
+</dataset>
+
+<datapointer xpath="dset:/">
+	<handler name="ondata">
+		Debug.write('ondata: ',this);
+	</handler>
+</datapointer>
+
+<view layout="axis:y;spacing:4" width="450" x="0">
+	<text fontstyle="bold" text="Connection - Settings (user for both BroadCasting and Subscribing)" />
+	<view width="450">
+		<text text="BaseURL:" />
+		<edittext align="right" width="350" id="url" text="http://127.0.0.1:5080/openmeetings/services" />
+	</view>
+	<button align="right" width="200" text="connectRtmpConnection" 
+			onclick="canvas.setBaseUrlGateway(url.text)" />
+</view>
+
+
+<!-- some description -->
+<text fontstyle="italic" y="0" width="450" multiline="true" x="450">
+	Test-Client for Testing the WebService-Gateway (Axis2)<br/>
+	This uses the REST-Gateway, not the SOAP Gateway as OpenLaszlo does not<br/>
+	Understand/speak SOAP 1.2<br/>
+</text>
+
+
+</canvas>
diff --git a/WebContent/src/rest/rest-testclient.lzx.lzr=swf8.swf b/WebContent/src/rest/rest-testclient.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..e617ce9
--- /dev/null
+++ b/WebContent/src/rest/rest-testclient.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/subscribe.lzx.lzr=swf8.swf b/WebContent/src/subscribe.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..13e11e1
--- /dev/null
+++ b/WebContent/src/subscribe.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/test-setup.lzx.lzr=swf8.swf b/WebContent/src/test-setup.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..4998ea1
--- /dev/null
+++ b/WebContent/src/test-setup.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/test/Tutorat.swf b/WebContent/src/test/Tutorat.swf
new file mode 100644
index 0000000..317e163
--- /dev/null
+++ b/WebContent/src/test/Tutorat.swf
Binary files differ
diff --git a/WebContent/src/test/backup_whiteboard/baseDrawArrow.lzx b/WebContent/src/test/backup_whiteboard/baseDrawArrow.lzx
new file mode 100644
index 0000000..baafd01
--- /dev/null
+++ b/WebContent/src/test/backup_whiteboard/baseDrawArrow.lzx
@@ -0,0 +1,611 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="baseDrawArrow" extends="baseDrawULine" >
+    
+    <!-- for drawing drawarrow -->
+    <attribute name="currentdrawarrowlinestroke" value="0x000000" />
+    <attribute name="currentdrawarrowlinestrokeDis" value="1" type="number" />
+    <attribute name="currentdrawarrowlinestrokeFill" value="0xFF6600" />
+    <attribute name="currentdrawarrowlinestrokeFillDis" value="1" type="number" />
+    
+    <attribute name="currentdrawarrowlinelineWidth" value="4" type="number" />   
+    <attribute name="currentdrawarrowOpacity" value="1" type="number" />
+      
+    <!-- ###########################
+    drawarrow
+     -->
+     
+    
+    <method name="startDrawarrowline" args="oid_name">
+        <![CDATA[
+	        if (oid_name == null) {
+	            oid_name = 'drawarrow'+this.getCounter();
+	        }
+	        
+	        this.currentlayer = new lz.drawViewNew(this,{
+		            name:oid_name,width:this.width,height:this.height,
+		            opacity:this.currentdrawarrowOpacity});
+            
+            var pArrowStart = new flash.geom.Point(this.startx,this.starty);
+            var pArrowEnd = new flash.geom.Point(this.endx,this.endy);
+            
+            if ($debug) Debug.write("start,end,line",pArrowStart,pArrowEnd,this.currentdrawarrowlinelineWidth);
+            this.drawArrow(this.currentlayer,pArrowStart,pArrowEnd,this.currentdrawarrowlinelineWidth);
+        ]]>
+    </method> 
+    
+    <method name="endDrawarrowline">
+        //Debug.write("endDrawarrowline",this.startx,this.starty,this.endx,this.endy);
+        <![CDATA[
+        var tempName = this.currentlayer.name;
+        //Debug.write("tempName: ",tempName);
+        this.currentlayer.destroy();
+        
+        //GetBounds of that Object
+        var minx = this.width+2;
+        var miny = this.height+2;
+        var maxx = -2;
+        var maxy = -2;
+
+        if (this.startx<minx) minx=this.startx;
+        if (this.endx<minx) minx=this.endx;
+        
+        if (this.startx>maxx) maxx=this.startx;
+        if (this.endx>maxx) maxx=this.endx;
+        
+        if (this.starty<miny) miny=this.starty;
+        if (this.endy<miny) miny=this.endy;
+        
+        if (this.starty>maxy) maxy=this.starty;
+        if (this.endy>maxy) maxy=this.endy;
+        
+        var width = maxx-minx;
+        var height = maxy-miny;
+        
+        //Debug.write("minx,miny,width,height: ",minx,miny,width,height);
+
+        this.currentlayer = new lz.drawViewNew(this,{
+            name:tempName,x:minx,y:miny,width:width,height:height,
+            opacity:this.currentdrawarrowOpacity});
+            
+        this.currentlayer.fillstyle = '0x000000';
+        this.currentlayer.lineWidth = this.currentdrawarrowlinelineWidth;
+        this.currentlayer.strokeStyle = this.currentdrawarrowlinestroke;
+        
+        //Debug.write("this.currentlayer: ",this.currentlayer);
+
+        var t = new lz.drawArrowWhiteBoard(this.currentlayer,{x:0,y:0});
+
+        //Color
+        //t.setTint(this.currentdrawarrowlinestroke,60);
+        t.setColor(this.currentdrawarrowlinestroke);
+        
+        var tx = this.endx-this.startx;
+        var ty = this.endy-this.starty;
+
+        var gegenkathete = Math.abs(ty);
+        var ankathete = Math.abs(tx); 
+        var hypothenuse = Math.sqrt((ankathete*ankathete)+(gegenkathete*gegenkathete));
+        var sinAlpha = (gegenkathete/hypothenuse);
+        var alpha = Math.asin(sinAlpha);
+        alpha = alpha/(Math.PI/180);
+            
+        var newx = 0;
+        var newy = 0;
+        if (tx>=0 && ty>=0){    
+            t.setAttribute('rotation',(alpha-45));
+        } else if (tx<0 && ty>=0){
+            newx = width;
+            t.setAttribute('rotation',(45+90-alpha));
+        } else if (tx<0 && ty<0){
+            newy = height;
+            newx = width;
+            t.setAttribute('rotation',(alpha+45+90));
+        } else if (tx>0 && ty<=0){
+            newy = height;
+            t.setAttribute('rotation',(45-alpha-90));
+        }
+        
+        t.setAttribute('x',newx);
+        t.setAttribute('y',newy);
+        
+        //Scaling
+        var basicLength = Math.sqrt((t.width*t.width)+(t.width*t.width));
+        t.getDisplayObject()._xscale = (hypothenuse/basicLength)*100;
+        t.getDisplayObject()._yscale = (hypothenuse/basicLength)*100;
+        
+
+        //Set previous to null
+        this.prevx = null;
+        this.prevy = null;  
+        
+        //Add Layer to global Layer     
+        this.layers.push(this.currentlayer);  
+        ]]>
+        this.drawarrowlineregisterFinal();
+        this.currentlayer = new LzView();
+        //Debug.write("t: ",t);
+    </method> 
+       
+    
+    
+    <method name="drawArrow" args="graphics,start,end,thickness">
+        <![CDATA[
+    //(graphics:Graphics,
+    //            start:Point,end:Point,
+    //            style:Object=null):void {
+            
+            if (start.equals(end)) return;
+            
+            
+            var arrowStyle = {'shaftControlPosition':0.5,
+                    'shaftControlSize':0.5,
+                    'headLength':thickness*5, //Pixel Length of arrow head
+                    'headWidth':thickness*5,//Relative width of arrow head
+                    'edgeControlPosition':0.5,
+                    'edgeControlSize':0.5,
+                    'shaftPosition':0,
+                    'shaftThickness':thickness
+                    };
+            
+            var fullVect:Point = end.subtract(start);
+            var halfWidth:Number = (arrowStyle.headWidth != -1) ? arrowStyle.headWidth/2 : arrowStyle.headLength/2; 
+            
+            //Figure out the line start/end points
+            var startNorm = new flash.geom.Point(fullVect.y,-fullVect.x);
+            startNorm.normalize(arrowStyle.shaftThickness/2);
+            var start1 = start.add(startNorm);
+            var start2 = start.subtract(startNorm);
+            var end1 = end.add(startNorm);
+            var end2 = end.subtract(startNorm);
+            
+            //if ($debug) Debug.write("startNorm: ",startNorm.toString());
+            //if ($debug) Debug.write("start1: ",start1.toString());
+            //if ($debug) Debug.write("start2: ",start2.toString());
+            //if ($debug) Debug.write("end1: ",end1.toString());
+            //if ($debug) Debug.write("end2: ",end2.toString());
+            
+            //figure out where the arrow head starts
+            var headPnt = fullVect.clone();
+            //if ($debug) Debug.write("headPnt 1: ",headPnt.toString());
+            //if ($debug) Debug.write("headPnt.length 1: ",headPnt.length);
+            //if ($debug) Debug.write("arrowStyle.headLength 1: ",arrowStyle.headLength);
+            headPnt.normalize(headPnt.length-arrowStyle.headLength);
+            //if ($debug) Debug.write("headPnt 2: ",headPnt.toString());
+            headPnt = headPnt.add(start);
+            //if ($debug) Debug.write("headPnt 3: ",headPnt.toString());
+            
+            //calculate the arrowhead corners
+            var headPntNorm = startNorm.clone();
+            //if ($debug) Debug.write("headPntNorm ^^: ",headPntNorm.toString());
+            //if ($debug) Debug.write("halfWidth ^^: ",halfWidth);
+            headPntNorm.normalize(halfWidth);
+            //if ($debug) Debug.write("headPntNorm: ",headPntNorm.toString());
+            var edge1 = headPnt.add(headPntNorm);
+            var edge2 = headPnt.subtract(headPntNorm);
+            
+            //if ($debug) Debug.write("edge1: ",edge1.toString());
+            //if ($debug) Debug.write("edge2: ",edge2.toString());
+            
+            //Figure out where the arrow connects the the shaft, then calc the intersections
+            var shaftCenter = flash.geom.Point.interpolate(end,headPnt,arrowStyle.shaftPosition);
+            //if ($debug) Debug.write("end: ",end.toString());
+            //if ($debug) Debug.write("headPnt",headPnt.toString());
+            //if ($debug) Debug.write("arrowStyle.shaftPosition: ",arrowStyle.shaftPosition);
+            //if ($debug) Debug.write("shaftCenter",shaftCenter.toString());
+            var inter1 = this.getLineIntersection(start1,end1,shaftCenter,edge1);
+            var inter2 = this.getLineIntersection(start2,end2,shaftCenter,edge2);
+            
+            //if ($debug) Debug.write("inter1: ",inter1.toString());
+            //if ($debug) Debug.write("inter2: ",inter2.toString());
+            
+            //Figure out the control points
+            var edgeCenter = flash.geom.Point.interpolate(end,headPnt,arrowStyle.edgeControlPosition);
+            var edgeNorm = startNorm.clone();
+            edgeNorm.normalize(halfWidth*arrowStyle.edgeControlSize);
+            //if ($debug) Debug.write("halfWidth*arrowStyle.edgeControlSize: "+(halfWidth*arrowStyle.edgeControlSize));
+            //if ($debug) Debug.write("edgeNorm: "+edgeNorm.toString());
+            var edgeCntrl1 = edgeCenter.add(edgeNorm);
+            var edgeCntrl2 = edgeCenter.subtract(edgeNorm);
+
+            //if ($debug) Debug.write("edgeCntrl1: ",edgeCntrl1.toString());
+            //if ($debug) Debug.write("edgeCntrl2: ",edgeCntrl2.toString());
+
+            //if ($debug) Debug.write("moveTo: ",start1.x,start1.y);
+            //if ($debug) Debug.write("lineTo",inter1.x,inter1.y);
+            //if ($debug) Debug.write("lineTo",edge1.x,edge1.y);
+            //if ($debug) Debug.write("quadraticCurveTo",edgeCntrl1.x,edgeCntrl1.y,end.x,end.y);
+            //if ($debug) Debug.write("quadraticCurveTo",edgeCntrl2.x,edgeCntrl2.y,edge2.x,edge2.y);
+            //if ($debug) Debug.write("lineTo",inter2.x,inter2.y);
+            //if ($debug) Debug.write("lineTo",start2.x,start2.y);
+            //if ($debug) Debug.write("lineTo",start1.x,start1.y);
+            
+            graphics.moveTo(start1.x,start1.y);
+            graphics.lineTo(inter1.x,inter1.y);
+            graphics.lineTo(edge1.x,edge1.y);
+            graphics.quadraticCurveTo(edgeCntrl1.x,edgeCntrl1.y,end.x,end.y);
+            graphics.quadraticCurveTo(edgeCntrl2.x,edgeCntrl2.y,edge2.x,edge2.y);
+            graphics.lineTo(inter2.x,inter2.y);
+            graphics.lineTo(start2.x,start2.y);
+            graphics.lineTo(start1.x,start1.y);
+            
+            if (this.currentdrawarrowlinestrokeDis!=-1){
+                graphics.strokeStyle = this.currentdrawarrowlinestroke;
+                graphics.stroke();
+            }
+
+            if (this.currentdrawarrowlinestrokeFillDis!=-1){
+                graphics.fillStyle = this.currentdrawarrowlinestrokeFill;
+                graphics.fill();
+            }
+        ]]>
+    </method>
+    
+    <method name="getLineIntersection" args="a1,a2,b1,b2">
+        <![CDATA[ 
+        
+            //calculate directional constants
+            var k1 = (a2.y-a1.y) / (a2.x-a1.x);
+            var k2 = (b2.y-b1.y) / (b2.x-b1.x);
+            
+            // if the directional constants are equal, the lines are parallel,
+            // meaning there is no intersection point.
+            if( k1 == k2 ) return null;
+            
+            var x = 0;
+            var y = 0;
+            var m1 = 0;
+            var m2 = 0;
+            
+            //if ($debug) Debug.write("k1",k1);
+            //if ($debug) Debug.write("k2",k2);
+            
+            // an infinite directional constant means the line is vertical
+            if( !isFinite(k1) ) {
+                
+                //if ($debug) Debug.write("k1 ^^ 0");
+                //if ($debug) Debug.write("k2",k2,(b2.y-b1.y));
+                //if ($debug) Debug.write("b1.getY(): "+b1.y);
+                //if ($debug) Debug.write("b2.getY(): "+b2.y);
+                // so the intersection must be at the x coordinate of the line
+                x = a1.x;
+                m2 = b1.y - k2 * b1.x;
+                //if ($debug) Debug.write("m2",m2);
+                y = k2 * x + m2;
+                //if ($debug) Debug.write("y",y);
+                
+            // same as above for line 2
+            } else if ( !isFinite(k2) ) {
+                
+                //if ($debug) Debug.write("k2 ^ 0");
+                
+                m1 = a1.y - k1 * a1.x;
+                x = b1.x;
+                y = k1 * x + m1;
+
+            // if neither of the lines are vertical
+            } else {
+                
+                //if ($debug) Debug.write("neither");
+            
+                m1 = a1.y - k1 * a1.x;
+                m2 = b1.y - k2 * b1.x;              
+                x = (m1-m2) / (k2-k1);
+                y = k1 * x + m1;
+                
+            }
+            
+            return new flash.geom.Point(x,y);
+        ]]>
+    </method>    
+    
+     
+    
+    
+    <method name="drawarrowlineregisterFinal">
+        var actionObject = new Array();
+        actionObject[0] = 'drawarrow';
+        actionObject[1] = currentlayer.fillstyle;
+        actionObject[2] = currentlayer.lineWidth;
+        actionObject[3] = currentlayer.strokeStyle;
+        actionObject[4] = this.startx;  
+        actionObject[5] = this.starty;  
+        actionObject[6] = this.endx;    
+        actionObject[7] = this.endy;
+        actionObject[8] = this.currentdrawarrowOpacity;
+        actionObject[9] = this.counter;   
+        actionObject[10] = currentlayer.x;
+        actionObject[11] = currentlayer.y;
+        actionObject[12] = currentlayer.width;
+        actionObject[13] = currentlayer.height;  
+        actionObject[14] = this.currentlayer.name;
+        this.baseactionobjectList.push(actionObject);       
+        this.onsharedMessage('draw',actionObject);
+    </method>       
+    
+    
+    <method name="drawarrowlineactionHistory" args="lastActionObject,parentView">
+        <![CDATA[
+            //Debug.write("## lineactionHistory",parentView," 2 ## NEW x,y ",lastActionObject[lastActionObject.length-5],lastActionObject[lastActionObject.length-4]," width,height: ",lastActionObject[lastActionObject.length-3],lastActionObject[lastActionObject.length-2]);
+            
+            this.currentlayer = new lz.drawViewNew(parentView,{
+                name:lastActionObject[lastActionObject.length-1],
+                x:lastActionObject[lastActionObject.length-5],
+                y:lastActionObject[lastActionObject.length-4],
+                width:lastActionObject[lastActionObject.length-3],
+                height:lastActionObject[lastActionObject.length-2],
+                opacity:lastActionObject[8]});
+            
+            var t = new lz.drawArrowWhiteBoard(this.currentlayer,{x:0,y:0});
+            
+            //t.setTint(lastActionObject[3],60);
+            t.setColor(lastActionObject[3]);
+            
+            var tx = lastActionObject[6]-lastActionObject[4];
+            var ty = lastActionObject[7]-lastActionObject[5];
+    
+            var gegenkathete = Math.abs(ty);
+            var ankathete = Math.abs(tx); 
+            var hypothenuse = Math.sqrt((ankathete*ankathete)+(gegenkathete*gegenkathete));
+            var sinAlpha = (gegenkathete/hypothenuse);
+            var alpha = Math.asin(sinAlpha);
+            var alpha = alpha/(Math.PI/180);
+                
+            var newx = 0;
+            var newy = 0;
+            if (tx>=0 && ty>=0){    
+                t.setAttribute('rotation',(alpha-45));
+            } else if (tx<0 && ty>=0){
+                newx = lastActionObject[lastActionObject.length-3];
+                t.setAttribute('rotation',(45+90-alpha));
+            } else if (tx<0 && ty<0){
+                newy = lastActionObject[lastActionObject.length-2];
+                newx = lastActionObject[lastActionObject.length-3];
+                t.setAttribute('rotation',(alpha+45+90));
+            } else if (tx>0 && ty<=0){
+                newy = lastActionObject[lastActionObject.length-2];
+                t.setAttribute('rotation',(45-alpha-90));
+            }
+            
+            t.setAttribute('x',newx);
+            t.setAttribute('y',newy);
+            
+            //Scaling
+            var basicLength = Math.sqrt((t.width*t.width)+(t.width*t.width));
+            t.getDisplayObject()._xscale = (hypothenuse/basicLength)*100;
+            t.getDisplayObject()._yscale = (hypothenuse/basicLength)*100;
+            
+            this.currentlayer.fillstyle = lastActionObject[1];
+            this.currentlayer.lineWidth = lastActionObject[2];
+            this.currentlayer.strokeStyle = lastActionObject[3];
+
+        ]]>
+    </method>
+    
+    
+    
+    
+    
+    
+    <!--
+        @keywords deprecated
+     -->
+    <method name="_startDrawarrowline" args="oid_name">
+        <![CDATA[
+        if (oid_name == null) {
+            oid_name = 'drawarrow'+this.getCounter();
+        }
+        
+        this.currentlayer = new lz.drawViewNew(this,{
+            name:oid_name,width:this.width,height:this.height,
+            opacity:this.currentdrawarrowOpacity});
+            
+        this.drawlineOnObject(this.currentlayer,-1,-1,0,0);
+        this.drawlineOnObject(this.currentlayer,this.width,this.height,this.width+1,this.height+1);
+        
+        //Add Resource
+        var t = new lz.drawArrowWhiteBoard(this.currentlayer,{x:this.startx,y:this.starty});
+        
+        //Color
+        //t.setTint(this.currentdrawarrowlinestroke,60);
+        t.setColor(this.currentdrawarrowlinestroke);
+        
+        var tx = this.currentlayer.getMouse('x')-this.startx;
+        var ty = this.currentlayer.getMouse('y')-this.starty;
+
+        var gegenkathete = Math.abs(ty);
+        var ankathete = Math.abs(tx); 
+        var hypothenuse = Math.sqrt((ankathete*ankathete)+(gegenkathete*gegenkathete));
+        var sinAlpha = (gegenkathete/hypothenuse);
+        var alpha = Math.asin(sinAlpha);
+        alpha = alpha/(Math.PI/180);
+            
+        if (tx>=0 && ty>=0){    
+            t.setAttribute('rotation',(alpha-45));
+        } else if (tx<0 && ty>=0){
+            t.setAttribute('rotation',(45+90-alpha));
+        } else if (tx<0 && ty<0){
+            t.setAttribute('rotation',(alpha+45+90));
+        } else if (tx>0 && ty<=0){
+            t.setAttribute('rotation',(45-alpha-90));
+        }
+        
+        //Scaling
+        var basicLength = Math.sqrt((t.width*t.width)+(t.width*t.width));
+        t.getDisplayObject()._xscale = (hypothenuse/basicLength)*100;
+        t.getDisplayObject()._yscale = (hypothenuse/basicLength)*100;
+        
+
+        //Set previous to null
+        this.prevx = null;
+        this.prevy = null;  
+        
+        currentlayer.strokeStyle = this.currentdrawarrowlinestroke;
+        currentlayer.lineWidth = this.currentdrawarrowlinelineWidth;
+        currentlayer.fillstyle = '0x000000';
+        ]]>
+    </method> 
+    
+    <!--
+        @keywords deprecated
+     -->
+    <method name="__startDrawarrowline" args="oid_name">
+        <![CDATA[
+        if (oid_name == null) {
+            oid_name = 'drawarrow'+this.getCounter();
+        }
+        
+        this.currentlayer = new lz.drawViewNew(this,{
+            name:oid_name,width:this.width+2,height:this.height+2,
+            opacity:this.currentdrawarrowOpacity});
+            
+        var distance_x = Math.abs(this.startx - this.endx);
+        var distance_y = Math.abs(this.starty - this.endy);
+        
+        var point_distance_x = Math.round( distance_x/10 );
+        var point_distance_y = Math.round( distance_y/10 );
+        
+        if (this.startx <= this.endx && this.starty >= this.endy) {
+            
+            currentlayer.lineWidth = this.currentrectangleineWidth;
+            currentlayer.beginPath();
+            currentlayer.moveTo(this.startx,this.starty); //1
+            currentlayer.lineTo(this.startx-point_distance_x,this.starty-point_distance_y); //2
+            currentlayer.lineTo(this.endx-point_distance_x*3,this.endy+point_distance_y); //3
+            currentlayer.lineTo(this.endx-point_distance_x*4,this.endy); //4
+            currentlayer.lineTo(this.endx,this.endy); //5
+            currentlayer.lineTo(this.endx,this.endy+point_distance_y*4); //6
+            currentlayer.lineTo(this.endx-point_distance_x,this.endy+point_distance_y*3); //7
+            currentlayer.lineTo(this.startx+point_distance_x,this.starty+point_distance_y); //8
+            currentlayer.lineTo(this.startx,this.starty); //9
+            this.closePath();
+            
+            currentlayer.strokeStyle = 0x000000;
+            currentlayer.stroke();
+
+            currentlayer.fillStyle = this.currentdrawarrowlinelineWidth;
+            currentlayer.fill();
+            
+        }
+        
+        ]]>
+    </method>
+    <!--
+        @keywords deprecated
+     -->
+    <method name="_endDrawarrowline">
+        //Debug.write("endDrawarrowline",this.startx,this.starty,this.endx,this.endy);
+        <![CDATA[
+        var tempName = this.currentlayer.name;
+        //Debug.write("tempName: ",tempName);
+        this.currentlayer.destroy();
+        
+        //GetBounds of that Object
+        var minx = this.width+2;
+        var miny = this.height+2;
+        var maxx = -2;
+        var maxy = -2;
+
+        if (this.startx<minx) minx=this.startx;
+        if (this.endx<minx) minx=this.endx;
+        
+        if (this.startx>maxx) maxx=this.startx;
+        if (this.endx>maxx) maxx=this.endx;
+        
+        if (this.starty<miny) miny=this.starty;
+        if (this.endy<miny) miny=this.endy;
+        
+        if (this.starty>maxy) maxy=this.starty;
+        if (this.endy>maxy) maxy=this.endy;
+        
+        var width = maxx-minx;
+        var height = maxy-miny;
+        
+        //Debug.write("minx,miny,width,height: ",minx,miny,width,height);
+
+        this.currentlayer = new lz.drawViewNew(this,{
+            name:tempName,x:minx-1,y:miny-1,width:width,height:height,
+            opacity:this.currentdrawarrowOpacity});
+            
+        this.currentlayer.fillstyle = '0x000000';
+        this.currentlayer.lineWidth = this.currentdrawarrowlinelineWidth;
+        this.currentlayer.strokeStyle = this.currentdrawarrowlinestroke;
+        
+        //Debug.write("this.currentlayer: ",this.currentlayer);
+
+        var t = new lz.drawArrowWhiteBoard(this.currentlayer,{x:0,y:0});
+
+        //Color
+        //t.setTint(this.currentdrawarrowlinestroke,60);
+        t.setColor(this.currentdrawarrowlinestroke);
+        
+        var tx = this.endx-this.startx;
+        var ty = this.endy-this.starty;
+
+        var gegenkathete = Math.abs(ty);
+        var ankathete = Math.abs(tx); 
+        var hypothenuse = Math.sqrt((ankathete*ankathete)+(gegenkathete*gegenkathete));
+        var sinAlpha = (gegenkathete/hypothenuse);
+        var alpha = Math.asin(sinAlpha);
+        alpha = alpha/(Math.PI/180);
+            
+        var newx = 0;
+        var newy = 0;
+        if (tx>=0 && ty>=0){    
+            t.setAttribute('rotation',(alpha-45));
+        } else if (tx<0 && ty>=0){
+            newx = width;
+            t.setAttribute('rotation',(45+90-alpha));
+        } else if (tx<0 && ty<0){
+            newy = height;
+            newx = width;
+            t.setAttribute('rotation',(alpha+45+90));
+        } else if (tx>0 && ty<=0){
+            newy = height;
+            t.setAttribute('rotation',(45-alpha-90));
+        }
+        
+        t.setAttribute('x',newx);
+        t.setAttribute('y',newy);
+        
+        //Scaling
+        var basicLength = Math.sqrt((t.width*t.width)+(t.width*t.width));
+        t.getDisplayObject()._xscale = (hypothenuse/basicLength)*100;
+        t.getDisplayObject()._yscale = (hypothenuse/basicLength)*100;
+        
+
+        //Set previous to null
+        this.prevx = null;
+        this.prevy = null;  
+        
+        //Add Layer to global Layer     
+        this.layers.push(this.currentlayer);  
+        ]]>
+        this.drawarrowlineregisterFinal();
+        this.currentlayer = new LzView();
+        //Debug.write("t: ",t);
+    </method> 
+    
+</class>
+
+</library>
diff --git a/WebContent/src/test/content/audioTest.lzx b/WebContent/src/test/content/audioTest.lzx
new file mode 100644
index 0000000..511582c
--- /dev/null
+++ b/WebContent/src/test/content/audioTest.lzx
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+<!--
+	exmple class definition
+	
+	as soon as you see possibility try to make usage of classes
+	
+	in general: 
+	usage of layout is nice but it needs more views just for layouting.
+	in a simple scenario thats okay,
+	but in the openmeetings app itself most of the views are set *absolute* by x and y
+	cause this reduces the total amount of views
+	instancing (=making views dynamically like we do) is time critical .. if you create or destroy too many
+	views at one time the browser hangs and cpu will be at 100%
+	so in the openmeetings app try to use as less views as possible
+	use at less constraints as possible
+	use $once{ .. } instead of ${ .. } or use setters and getters
+	don't use canvas.setAttribute('myvar','foo') just use canvas.myvar='foo' 
+	whenever it is not necessary (it will throw some 
+	events which are useless if you don't have any constraints pointing to 'myvar' and which will cost 
+	performance)
+	
+	 
+	
+ -->
+
+	<!-- define resources once at one place instead of
+		linking with the path every time you want it
+		-->
+<resource name="_btn_play_rsc" src="../resources/play.png" />
+<resource name="_btn_stop_rsc" src="../resources/stop.png" />
+<resource name="_btn_volume_rsc" src="../resources/mix_volume.png" />
+<resource name="_btn_audio_scrubtrack_rsc" src="../resources/audio_scrubtrack.png" />
+<resource name="_btn_audio_scrubber_rsc" src="../resources/audio_scrubber.png" />
+	
+<class name="audioTest" extends="view" play="false" y="40">
+	
+	<!-- please write layout definition always on 
+		top or on bottom of the view content
+		or write it directly into the view definition -->
+	<simplelayout axis="y" spacing="5"/>
+	
+	   <view id="audioplayer" play="false" y="40" resource="http:resources/Star_in_the_east_solfege.mp3" 
+		   oninit="this.stop();">
+		   
+		   <!-- follow a structure by defining view contents:
+			   1.) define attributes
+			   2.) define handlers (event handlers oninit for example if not already in view definition)
+			   3.) define methods
+			   4.) define layout (if not already in view definition)
+			   5.) define content 
+			   -->
+		   
+		   <!-- comment about this attribute and don't forget type definition in attribute's:
+			   this attribute is volume-level -->
+			<attribute name="vol" value="100" type="number" />
+		   
+		    <simplelayout axis="x" spacing="10"/>
+		   
+			<view>
+				<simplelayout axis="x" spacing="-1"/>
+				<button width="40" onclick="audioplayer.stop()">
+					<view resource="_btn_stop_rsc" y="6" align="center"/>
+				</button>
+				<button width="40" onclick="audioplayer.play()">
+					<view resource="_btn_play_rsc" y="5" align="center"/>
+				</button>
+			</view>	 
+		          
+			<view>
+				<simplelayout axis="x" spacing="-1"/>
+				<button width="40" text="-"
+					onclick="audioplayer.setVolume( audioplayer.getVolume() -10)">
+					<view resource="_btn_volume_rsc" y="5" align="right"/>
+				</button>
+				<button width="40" text="+" 
+					onclick="audioplayer.setVolume( audioplayer.getVolume() +10)">
+					<view resource="_btn_volume_rsc" y="5" align="right"/>
+				</button>
+			</view>
+					        
+			
+			<view name="background" bgcolor="black" width="202" height="15" 
+					y="50" options="ignorelayout;">
+				<view name="loadbar" resource="_btn_audio_scrubtrack_rsc" 
+						width="${audioplayer.loadperc * 200}">
+					<view name="playbar" resource="_btn_audio_scrubber_rsc" 
+							y="1" x="${Math.round(180 * audioplayer.frame/audioplayer.totalframes)}"/>
+				</view>
+			</view>
+		   
+		</view>
+		
+		<!--
+			think about contraints ... if they really need to be updated always
+			${ canvas.myvar } => value will be updated every time 
+								myvar changes by canvas.setAttribute('myvar','foo')
+								normally this is not needed
+								high performance/cpu usage
+			$once{ canvas.myvar } => value will be only set once .. oninit of this attribute/view
+									lower perfomance/cpu usage 
+			try to use $once whenever possible
+			-->
+		<text text="$once{mess.listen_sound}" multiline="true" width="${this.parent.width - 20}" />
+
+		<view>
+			
+			<simplelayout axis="x" spacing="10"/>
+			
+			<button text="$once{ mess.no }">					                
+			</button>
+			<button text="$once{ mess.yes }">					                
+			</button>
+			
+		</view>
+	
+	<nextButton nextTabpane="$once{ this.parent.parent.parent.microTab }" text="$once{mess.next}" />
+	
+</class>
+
+</library>
diff --git a/WebContent/src/test/content/library.lzx b/WebContent/src/test/content/library.lzx
new file mode 100644
index 0000000..46f0847
--- /dev/null
+++ b/WebContent/src/test/content/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <include href="audioTest.lzx" />
+
+</library>
diff --git a/WebContent/src/test/html.lzx b/WebContent/src/test/html.lzx
new file mode 100644
index 0000000..2418fef
--- /dev/null
+++ b/WebContent/src/test/html.lzx
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<canvas debug="true" width="100%" height="100%" fontsize="14" title="OpenMeetings - Computer testing">
+	
+	<debug fontsize="14" oninit="Debug.showInternalProperties = true"/>
+
+                <edittext name="url" width="400"> 
+                    <handler name="onkeyup" args="key">
+                        if ((key == 27) || (key == 13)) {
+                            this.parent.readStart.onclick.sendEvent();
+                        }
+                    </handler>
+                </edittext>
+                
+                <button name="readStart" width="200" x="400" text="LOAD"
+                                y="2">
+                    <handler name="onclick">
+                        <![CDATA[
+                            var url = parent.url.getText();
+                            if ((url.indexOf("http://") < 0)
+                                    && (url.indexOf("https://") < 0)) {
+                                url = "http://" + url;
+                            }
+    
+                            parent.htmlviewer.setAttribute("src",url);
+                            parent.htmlviewer.setAttribute("visible",true);
+    
+                        ]]>
+                    </handler>
+                </button>
+                
+        <html name="htmlviewer" x="4" y="60" width="600" height="500" bgcolor="0xCCCCCC" >
+            <handler name="onloading" args="loading">
+                this.loading = loading;
+                if ($debug) Debug.write("LOADING ",loading);
+            </handler>
+            <handler name="onsrc" args="src">
+                this.src = src;
+                if ($debug) Debug.write("SRC ",loading);
+            </handler>
+        </html>
+	
+</canvas>
diff --git a/WebContent/src/test/html.lzx.swf8.swf b/WebContent/src/test/html.lzx.swf8.swf
new file mode 100644
index 0000000..2263944
--- /dev/null
+++ b/WebContent/src/test/html.lzx.swf8.swf
Binary files differ
diff --git a/WebContent/src/test/html.lzx.swf9.swf b/WebContent/src/test/html.lzx.swf9.swf
new file mode 100644
index 0000000..22d8cd7
--- /dev/null
+++ b/WebContent/src/test/html.lzx.swf9.swf
Binary files differ
diff --git a/WebContent/src/test/iFrame.lzx b/WebContent/src/test/iFrame.lzx
new file mode 100644
index 0000000..cdabb9b
--- /dev/null
+++ b/WebContent/src/test/iFrame.lzx
@@ -0,0 +1,245 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<!-- 
+
+Requirements :
+the html must contain the following in the HEAD :
+
+			function createIFrame(n,id,src,x,y,w,h){
+				var newChild = document.createElement('iframe');
+				newChild.style.visibility='hidden';
+				newChild.style.position='absolute';
+				newChild.style.top='0px';
+				newChild.id=id;
+				newChild.name=n;
+				newChild.src=src;
+				newChild.style.border='0px';
+				newChild.style.left=x+"px";
+				newChild.style.top=y+"px";
+				newChild.width=w+"px";
+				newChild.height=h+"px";
+				document.body.appendChild(newChild);
+			}
+			function centerIframe(iid,x,y,w,h) {
+				var frameRef=document.getElementById(iid);
+				frameRef.style.left=x+"px";
+				frameRef.style.top=y+"px";
+				frameRef.width=w+"px";
+				frameRef.height=h+"px";
+			}
+			function hideIFrame(){
+			    document.getElementById("ifrm1_id").style.visibility="hidden";
+			}
+			function showIFrame(){
+			    document.getElementById("ifrm1_id").style.visibility="visible";
+			}
+
+Attributes :
+ - isrc         : url for the iframeView
+ - iname        : name for the iframeView
+ - iid          : id for the iframeView
+ - callbackTimerDelay           : optional
+ - createIFrame_callbackCounter : optional
+ - createIFrame_callbackMax     : optional
+
+Exemple :
+
+      <canvas debug="true" >
+        
+        <include href="library/iFrame.lzx" />
+        
+        
+        <window id="w" x="100" y="50" width="350" height="250" resizable="true" >
+        
+          <handler name="oninit">
+            new LzDelegate(ifrm,"centerIframe",this,"onx");
+            new LzDelegate(ifrm,"centerIframe",this,"ony");
+          </handler>
+          
+          <iframeView name="ifrm"
+            width = "${immediateparent.width  }"
+            height= "${immediateparent.height }"
+            isrc  = "http://www.google.fr/"
+            iid   = "myIframeId"
+            iname = "myIfrName"
+          />
+          
+        </window>
+          
+        
+      </canvas>
+
+-->
+
+<library>
+
+  <class name="iframeView" extends="view" >
+  
+    <attribute name="isrc" type="string" setter="setIsrc(isrc)"/>
+    <attribute name="iname" type="string" />
+    <attribute name="iid" type="string" />
+    
+    <method name="display">
+      var s = "javascript:document.getElementById('"
+                        + iid 
+                        + "').style.visibility='visible'";
+      lz.Browser.loadJS(s);
+    </method>
+    
+    <method name="hide">
+      var s = "javascript:document.getElementById('"
+                        + iid 
+                        + "').style.visibility='hidden'";
+      //Debug.write("on hide l'iframe",iid," :",s);
+      lz.Browser.loadJS(s);
+    </method>    
+    
+    <method name="setIsrc" args="s">
+      if (!this.isinited || this.isrc== null) {                      //catch the case where this.time is being 
+        this.isrc = s;                                               //initialized during object instantiation
+        return;
+      }      
+      var s = "javascript:document.getElementById('"
+                        + iid 
+                        + "').src='"
+                        + s
+                        + "'";
+      lz.Browser.loadJS(s);
+    </method>
+    
+    <handler name="oninit" >
+      // First initialize the iFrame loading detection mechanism :
+      //initCreateIFrameDone();
+      // Now creating the iframeView :
+      //createIFrame();
+    </handler>
+
+    <method name="createIFrame" >
+    	//Debug.write("create IFRAME !!!!!!!!!!!!!!");
+      var s = "javascript:createIFrame('"
+                        + iname  + "','"
+                        + iid + "','"
+                        + isrc + "','"
+                        + this.getAttributeRelative("x",canvas)      + "','"
+                        + this.getAttributeRelative("y",canvas)      + "','"
+                        + (width +1) + "','"
+                        + (height+1)
+                        + "')";
+      // the browser must also tell our laszlo when the iframeView has been loaded :
+      s = s + ";document.getElementById('"
+                        + iid 
+                        + "').style.visibility='visible'";
+      s = s + ";lzSetCanvasAttribute('" + createIFrameDone_attr + "', true)";
+      ////Debug.write("Calling createIFrame ; loadJS : " + s);//
+      lz.Browser.loadJS(s);
+      // initializing the scheduled check of this iFrame's load state
+      if(typeof this.createIFrame_callbackDelegate == 'undefined') {
+         this.createIFrame_callbackDelegate = new LzDelegate( this, "createIFrame_callback" );
+      }
+      lz.Timer.resetTimer( this.createIFrame_callbackDelegate, callbackTimerDelay );
+    </method>
+    
+    <!-- Iframe load state detection state and initialization -->
+    <attribute name="createIFrameDone_attr" type="string"/><!-- is initialized in oninit() -->
+    <method name="initCreateIFrameDone">
+      // Initializes the iFrame loading detection mechanism.
+      // computing and setting the name of this iframeView's own
+      // load state attribute on the canvas :
+      this.createIFrameDone_attr = 'iFrame.createIFrameDone_' + this.iid;
+      // initializing this iframeView's own load state on the canvas :
+      canvas.setAttribute(createIFrameDone_attr, false);
+      ////Debug.write('createIFrameDone_attr='+this.createIFrameDone_attr);//
+      ////Debug.write('createIFrameDone='+this.createIFrameDone+canvas.getAttribute(createIFrameDone_attr));//
+	</method>
+	
+    <!-- IFrame load state scheduled check -->
+    <attribute name="callbackTimerDelay" type="number" value="100" />
+    <attribute name="createIFrame_callbackCounter" type="number" value="0" />
+    <attribute name="createIFrame_callbackMax" type="number" value="1000" />
+    <method name="createIFrame_callback">
+      ////Debug.write("createIFrame_callback : createIFrame_done=" + canvas.getAttribute(createIFrameDone_attr));//
+      if(!canvas.getAttribute(createIFrameDone_attr)) {
+         if (this.createIFrame_callbackCounter * callbackTimerDelay &lt; createIFrame_callbackMax) {
+            this.createIFrame_callbackCounter = this.createIFrame_callbackCounter + 1;
+            lz.Timer.resetTimer( this.createIFrame_callbackDelegate, callbackTimerDelay );
+         }
+      } else {
+         // creating iframeView moves listeners :
+         //Debug.write('createListeners');//
+         createListeners();
+         // now let's make sure the iframeView has been toggled by moving it
+         if (this.iFrameJsStack == 'javascript:') {
+            ////Debug.write('createListeners.move');//
+            // there's no javascript stack yet, so let's simply move the iframeView :
+            centerIframe();
+         } else {
+            ////Debug.write('createListeners.stacked '+this.iFrameJsStack);//
+            // some javascript has been scheduled to be loaded, so let's do it :
+            lz.Browser.loadJS(this.iFrameJsStack);
+         }
+      }
+    </method>
+    
+    <!-- Stackable javascript execution mechanisme -->
+    <attribute name="iFrameJsStack" type="string" value="javascript:" />
+    <method name="executeJs" args="s">
+      ////Debug.write("executeJs", s);//
+      if (canvas.getAttribute(createIFrameDone_attr)) {
+         ////Debug.write("executeJs.direct", s);//
+         lz.Browser.loadJS(s); // iframeView is loaded, so direct execution
+      } else {
+         ////Debug.write("executeJs.stacked", s);//
+         // else the iframeView has not yet been loaded, so let's stack it :
+         this.iFrameJsStack = this.iFrameJsStack + ';' + s ;
+      }
+    </method>
+	
+    <method name="createListeners" >
+      this.myDelx = new LzDelegate(this, "centerIframe", this, "onx");
+      this.myDely = new LzDelegate(this, "centerIframe", this, "ony");
+      this.myDelw = new LzDelegate(this, "centerIframe", this, "onwidth");
+      this.myDelh = new LzDelegate(this, "centerIframe", this, "onheight");
+    </method>
+    
+    <method  name="centerIframe">
+      // we use a timer in order to avoid too many js call (slow)
+      //Debug.write("centerIframe request");
+      if(typeof this.centerIframe_Delegate == 'undefined') {
+         this.centerIframe_Delegate = new LzDelegate( this, "centerIframe_jsCall" );
+      }
+      lz.Timer.resetTimer( this.centerIframe_Delegate, 20 );
+    </method>
+    
+    <method  name="centerIframe_jsCall">
+      var s = "javascript:centerIframe('"
+            + this.iid   + "','"
+            + this.getAttributeRelative("x",canvas)      + "','"
+            + this.getAttributeRelative("y",canvas)      + "','"
+            + (width +1) + "','"
+            + (height+1) + "')";
+      this.executeJs(s); // using the stackable js exec mechanism
+    </method>
+    
+  </class>
+
+</library>
+ 
diff --git a/WebContent/src/test/images/maindebug.lzx b/WebContent/src/test/images/maindebug.lzx
new file mode 100644
index 0000000..62b4f0d
--- /dev/null
+++ b/WebContent/src/test/images/maindebug.lzx
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" width="100%" height="100%" title="Geo Map Portal">
+    
+    <debug fontsize="11" oninit="Debug.showInternalProperties = true" />
+
+<handler name="oninit">
+    <![CDATA[
+    
+        LzLoadQueue.maxOpen = 100;
+
+    
+	    //
+        var url = new Array();
+	    
+	    
+        
+        url[5] = "http://openmeetings.googlecode.com/svn/docs/uml/images/openmeetings/diagram/ModerationChangeClientSide.jpg";
+		url[4] = "http://openmeetings.googlecode.com/svn/docs/uml/images/openmeetings/diagram/ModerationChangeClientSideBig.jpg";
+		url[3] = "http://openmeetings.googlecode.com/svn/docs/uml/images/openmeetings/diagram/VideoClass.png";
+		url[2] = "http://openmeetings.googlecode.com/svn/docs/LanguageNavigationErrors.png";
+		url[1] = "http://openmeetings.googlecode.com/svn/docs/OpenMeetingsSOAPGateway.png";
+		url[0] = "http://openmeetings.googlecode.com/svn/docs/OpenmeetingsAllTables.png";
+        url[6] = "http://openmeetings.googlecode.com/svn/docs/SOAPFlowDirectLogin.png";
+        url[7] = "http://openmeetings.googlecode.com/svn/docs/UserDiagram.png";
+        url[8] = "http://openmeetings.googlecode.com/svn/docs/UserGroupsOrganizationsAndRooms.png";
+        url[9] = "http://openmeetings.googlecode.com/svn/docs/architecture.jpg";
+        url[10] = "http://openmeetings.googlecode.com/svn/docs/moodle_plugin_audience.png";
+        url[11] = "http://openmeetings.googlecode.com/svn/docs/moodle_plugin_conference.png";
+        url[12] = "http://openmeetings.googlecode.com/svn/docs/newWhiteBoard.PNG";
+        url[13] = "http://openmeetings.googlecode.com/svn/docs/newWhiteBoard2.PNG";
+        url[14] = "http://openmeetings.googlecode.com/svn/docs/newWhiteBoard3.PNG";
+        url[15] = "http://openmeetings.googlecode.com/svn/docs/test_application_audio_video.png";
+        
+        
+        
+        
+        for (var i=0;i<16;i++) {
+            var d = new Date();
+            new layerImage(canvas.myView,{srcImage:url[i]+"?time="+i+d.getTime()});
+        }
+        
+        
+        for (var i=0;i<40;i++) {
+            var d = new Date();
+            new layerImage(canvas.myView,{srcImage:"http://openmeetings.googlecode.com/svn/docs/uml/images/openmeetings/diagram/ModerationChangeClientSideBig.jpg?time="+i+d.getTime()});
+        }
+
+    ]]>
+</handler>
+
+<class name="layerImage" extends="image">
+    <attribute name="layerid" value="0" type="number" />
+    <attribute name="type" value="" type="string" />
+    <attribute name="isLayerImage" value="true" type="boolean" />
+    <attribute name="srcImage" value="" type="string" setter="this.setImageSource(srcImage)" />
+    <method name="setImageSource" args="srcImage">
+        if ($debug) Debug.write("setImageSource",srcImage);
+        //var mcRef = this.getDisplayObject();
+        //mcRef.loadMovie(srcImage);
+        this.setSource(srcImage);
+    </method>
+</class>  
+
+<view name="myView" />
+  
+</canvas>
diff --git a/WebContent/src/test/images/maindebugTimer.lzx b/WebContent/src/test/images/maindebugTimer.lzx
new file mode 100644
index 0000000..95abcee
--- /dev/null
+++ b/WebContent/src/test/images/maindebugTimer.lzx
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" width="100%" height="100%" title="Geo Map Portal">
+    
+    <debug fontsize="11" oninit="Debug.showInternalProperties = true" />
+
+<attribute name="url" value="" type="string" />
+<attribute name="currentIndex" value="0" type="number" />
+
+<handler name="oninit">
+    <![CDATA[
+    
+	    LzLoadQueue.maxOpen = 100;
+	    
+	    this.url = new Array();
+	    
+	    this.url[5] = "http://openmeetings.googlecode.com/svn/docs/uml/images/openmeetings/diagram/ModerationChangeClientSide.jpg";
+	    this.url[4] = "http://openmeetings.googlecode.com/svn/docs/uml/images/openmeetings/diagram/ModerationChangeClientSideBig.jpg";
+	    this.url[3] = "http://openmeetings.googlecode.com/svn/docs/uml/images/openmeetings/diagram/VideoClass.png";
+	    this.url[2] = "http://openmeetings.googlecode.com/svn/docs/LanguageNavigationErrors.png";
+	    this.url[1] = "http://openmeetings.googlecode.com/svn/docs/OpenMeetingsSOAPGateway.png";
+	    this.url[0] = "http://openmeetings.googlecode.com/svn/docs/OpenmeetingsAllTables.png";
+	    this.url[6] = "http://openmeetings.googlecode.com/svn/docs/SOAPFlowDirectLogin.png";
+	    this.url[7] = "http://openmeetings.googlecode.com/svn/docs/UserDiagram.png";
+	    this.url[8] = "http://openmeetings.googlecode.com/svn/docs/UserGroupsOrganizationsAndRooms.png";
+	    this.url[9] = "http://openmeetings.googlecode.com/svn/docs/architecture.jpg";
+	    this.url[10] = "http://openmeetings.googlecode.com/svn/docs/moodle_plugin_audience.png";
+	    this.url[11] = "http://openmeetings.googlecode.com/svn/docs/moodle_plugin_conference.png";
+	    this.url[12] = "http://openmeetings.googlecode.com/svn/docs/newWhiteBoard.PNG";
+	    this.url[13] = "http://openmeetings.googlecode.com/svn/docs/newWhiteBoard2.PNG";
+	    this.url[14] = "http://openmeetings.googlecode.com/svn/docs/newWhiteBoard3.PNG";
+	    this.url[15] = "http://openmeetings.googlecode.com/svn/docs/test_application_audio_video.png";
+	    this.url[16] = "http://openmeetings.googlecode.com/svn/docs/uml/images/openmeetings/diagram/ModerationChangeClientSideBig.jpg";
+	    
+	    for (var k = 16;k<40;k++) {
+            this.url[k] = "http://openmeetings.googlecode.com/svn/docs/uml/images/openmeetings/diagram/ModerationChangeClientSideBig.jpg";
+        }
+	    
+	    this.fadeDelegate = new LzDelegate( this, "sendImage" );
+	    LzTimer.addTimer( this.fadeDelegate, 50 );
+        
+    ]]>
+</handler>
+
+<method name="sendImage">
+    <![CDATA[
+    
+        var d = new Date();
+        
+        new layerImage(canvas.myView,{srcImage:this.url[this.currentIndex]+"?time="+d.getTime()});
+        
+        this.currentIndex ++;
+        
+        if (this.currentIndex < 40) {
+            LzTimer.addTimer( this.fadeDelegate, 50 );
+        }
+
+    ]]>
+</method>
+
+<class name="layerImage" extends="image">
+    <attribute name="layerid" value="0" type="number" />
+    <attribute name="type" value="" type="string" />
+    <attribute name="isLayerImage" value="true" type="boolean" />
+    <attribute name="srcImage" value="" type="string" setter="this.setImageSource(srcImage)" />
+    <method name="setImageSource" args="srcImage">
+        if ($debug) Debug.write("setImageSource",srcImage);
+        //var mcRef = this.getDisplayObject();
+        //mcRef.loadMovie(srcImage);
+        this.setSource(srcImage);
+    </method>
+</class>  
+
+<view name="myView" />
+  
+</canvas>
diff --git a/WebContent/src/test/lang/en.lzx b/WebContent/src/test/lang/en.lzx
new file mode 100644
index 0000000..28d7146
--- /dev/null
+++ b/WebContent/src/test/lang/en.lzx
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+<script>
+<![CDATA[
+
+var mess = {};
+
+mess.home = "Home";
+mess.welcome = "Welcome !<br />We now determine if your configuration is good to have the best experience with OpenMeetings.";
+mess.sound = "Sound";
+mess.micro = "Micro";
+mess.webcam = "Webcam";
+mess.bandwidth = "Bandwidth";
+mess.latency = "Latency";
+mess.synthesis = "Synthesis";
+mess.next = "Next >";
+mess.listen_sound = "Do you hear the voice ?";
+mess.yes = "Yes";
+mess.no = "No";
+mess.microRecord = "Record your voice and click on \"Play\" button to hear if your micro works.";
+mess.webcamText = "Your webcam :";
+mess.bandwidthText = "We are testing the capacity of your Internet connexion.";
+mess.latencyText = "We are testing the delay between your computer and our server.";
+mess.synthesisText = "Your results :";
+]]>
+</script>
+</library>
diff --git a/WebContent/src/test/lazslo-rtltext/fonts/hebrew/arial.ttf b/WebContent/src/test/lazslo-rtltext/fonts/hebrew/arial.ttf
new file mode 100644
index 0000000..ff0815c
--- /dev/null
+++ b/WebContent/src/test/lazslo-rtltext/fonts/hebrew/arial.ttf
Binary files differ
diff --git a/WebContent/src/test/lazslo-rtltext/fonts/hebrew/arialbd.ttf b/WebContent/src/test/lazslo-rtltext/fonts/hebrew/arialbd.ttf
new file mode 100644
index 0000000..d0d857e
--- /dev/null
+++ b/WebContent/src/test/lazslo-rtltext/fonts/hebrew/arialbd.ttf
Binary files differ
diff --git a/WebContent/src/test/lazslo-rtltext/resources.lzx b/WebContent/src/test/lazslo-rtltext/resources.lzx
new file mode 100644
index 0000000..c39f8ed
--- /dev/null
+++ b/WebContent/src/test/lazslo-rtltext/resources.lzx
@@ -0,0 +1,35 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <!-- Fonts -->
+    <font name="default">
+      <face src="fonts/hebrew/arial.ttf"/>
+      <face src="fonts/hebrew/arialbd.ttf" style="bold"/>
+	</font>
+
+</library>
+<!--                                                                       -->
+<!-- Copyright 2001-2004 Laszlo Systems, Inc.  All Rights Reserved.        -->
+<!-- Use is subject to license terms.                                      -->
+<!--                                                                       -->
+<!--                                                                       -->
+<!-- Laszlo Presentation Server version 3.0b1 001227                     -->
+<!--                                                                       -->
diff --git a/WebContent/src/test/lazslo-rtltext/rtlText.lzx b/WebContent/src/test/lazslo-rtltext/rtlText.lzx
new file mode 100644
index 0000000..caf1e73
--- /dev/null
+++ b/WebContent/src/test/lazslo-rtltext/rtlText.lzx
@@ -0,0 +1,82 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!-- CLASS: rtlText ============================================ --> 
+	<!-- use this on dynamic data text tags. -->
+	<class name="rtlText" extends="text">
+		
+		<!-- ATTRIBUTES -->
+		<!-- text alignment: default is right -->
+    <attribute name="textAlign" value="right" type="string" /> 
+    
+    <method name="getTextAlign">    
+    	return this.textAlign;
+    </method>
+    
+    <method name="setTextAlign">
+    	switch ( this.getTextAlign() ) {
+				case "left" :
+					this.setX( 0 );
+				break;
+				case "center" :
+					this.setX( this.parent.width / 2 - this.getTextWidth() / 2 );
+				break;
+				case "right" :
+					this.setX( this.parent.width - this.getTextWidth() );
+				break;
+			}
+    </method>
+    
+    <method name="isLTR" args="c">
+		<![CDATA[
+			return ( c >= 48 && c <= 57 || c >= 65 && c <= 90 || c >= 97 && c <= 122 );
+		]]>
+	</method>
+    
+    <method name="isHEB" args="c">
+		<![CDATA[
+			return ( c >= 224 && c <= 250 );
+		]]>
+	</method>
+    
+    <method name="reverseWords" args="str">
+		<![CDATA[
+			if ( str == "" || str == null ) return ""; // undefined
+			// first char indicates the main directive of str (rtl/ltr)
+			if ( isLTR( str.charCodeAt( 0 ) ) ) return str; // english or number
+			var words_arr = str.split( "" ); // an array of chars
+			for ( var i = 0, str = ""; i < words_arr.length; i++ ) // reverse their order
+				str += words_arr[ words_arr.length - i - 1 ];
+			return str;
+		]]>
+	</method>
+		
+	<method name="applyData" args="rtl_str">
+		this.setAttribute('text', reverseWords( rtl_str ) );
+	</method>
+	
+	<handler name="ontext">
+		setTextAlign();
+	</handler>
+		
+	</class>
+
+</library>
diff --git a/WebContent/src/test/lazslo-rtltext/rtldata.xml b/WebContent/src/test/lazslo-rtltext/rtldata.xml
new file mode 100644
index 0000000..1d2f7d4
--- /dev/null
+++ b/WebContent/src/test/lazslo-rtltext/rtldata.xml
@@ -0,0 +1,56 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- Persons Data -->
+<dataset name="personsData">
+	<myXML>
+    <person>
+        <name>אריאל שרון</name>
+        <title>ראש הממשלה</title>
+    </person>
+    <person>
+        <name>גל פרידמן</name>
+        <title>מדליסט אולימפי</title>
+    </person>
+     <person>
+        <name>פיני גרשון</name>
+        <title>מאמן מכבי תל-אביב</title>
+    </person>
+    <person>
+        <name>שרי אריסון</name>
+        <title>מיליארדרית</title>
+    </person>
+    <person>
+        <name>שלמה ארצי</name>
+        <title>זמר</title>
+    </person>
+    <person>
+        <name>מיקי ברקוביץ</name>
+        <title>כדורסלן עבר</title>
+    </person>
+    <person>
+        <name>יוסי בניון</name>
+        <title>שחקן כדורגל</title>
+    </person>
+   <person>
+        <name>ביל גייטס</name>
+        <title>בעל חברת מיקרוסופט</title>
+    </person>
+	</myXML>
+</dataset>
diff --git a/WebContent/src/test/lazslo-rtltext/test.lzx b/WebContent/src/test/lazslo-rtltext/test.lzx
new file mode 100644
index 0000000..572932d
--- /dev/null
+++ b/WebContent/src/test/lazslo-rtltext/test.lzx
@@ -0,0 +1,42 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="false">     
+
+	<!-- DATASETS -->
+	<include href="rtldata.xml"/>
+
+	<!-- RESOURCES [FONTS] -->
+  <include href="resources.lzx"/> 
+
+	<!-- RTLTEXT CLASS DEFINITION -->
+  <include href="rtlText.lzx"/> 
+
+	
+	<view x="200" y="20">
+    <simplelayout axis="y" />
+    <view datapath="personsData:/myXML[1]/person" width="300" bgcolor="#cccccc">
+      <simplelayout axis="y" />
+    	<rtlText name="txtName" textAlign="center" fontsize="10" font="default" fontstyle="bold" datapath="name/text()"/>
+    	<rtlText name="txtTitle" fontsize="10" font="default" datapath="title/text()"/> 
+    	<text></text>
+    </view>
+  </view>
+
+</canvas>
diff --git a/WebContent/src/test/lib/library.lzx b/WebContent/src/test/lib/library.lzx
new file mode 100644
index 0000000..3f4ad02
--- /dev/null
+++ b/WebContent/src/test/lib/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <include href="nextButton.lzx" />
+
+</library>
diff --git a/WebContent/src/test/lib/nextButton.lzx b/WebContent/src/test/lib/nextButton.lzx
new file mode 100644
index 0000000..2885230
--- /dev/null
+++ b/WebContent/src/test/lib/nextButton.lzx
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="nextButton" extends="button" onclick="changeNextTabpane()">
+    
+    <attribute name="align" value="right" />
+    <attribute name="isdefault" value="true" />
+
+	<attribute name="nextTabpane" required="true" />
+
+    <method name="changeNextTabpane">
+      var object = this.getAttribute('nextTabpane');
+      object.setAttribute("selected","true");
+    </method>
+
+</class>
+
+</library>
diff --git a/WebContent/src/test/main.lzx b/WebContent/src/test/main.lzx
new file mode 100644
index 0000000..42784da
--- /dev/null
+++ b/WebContent/src/test/main.lzx
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<canvas debug="true" width="100%" height="100%" fontsize="14" title="OpenMeetings - Computer testing">
+	
+	<debug fontsize="14" oninit="Debug.showInternalProperties = true"/>
+
+<include href="lang/en.lzx"/>
+
+<include href="lib/"/>
+<include href="content/"/>
+
+            <tabs name="mainTabs">
+               <tabpane selected="true" text="${mess.home}">
+					<simplelayout axis="y" spacing="5"/>
+                    <text text="${mess.welcome}" multiline="true" width="${this.parent.width - 20}" />
+                    <nextButton nextTabpane="${this.parent.parent.soundTab}" text="${mess.next}" />
+                </tabpane>
+
+                <tabpane text="${mess.sound}" name="soundTab" onselect="//Debug.write('focus'); audioplayer.play();">
+					
+					<!-- define content areas which are 
+						kind of component in classes -->
+					 <audioTest name="_audiotest" />
+					
+                </tabpane>                
+                
+                <tabpane text="${mess.micro}" name="microTab">
+					<simplelayout axis="y" spacing="5"/>
+                    <text text="${mess.microRecord}" multiline="true" width="${this.parent.width - 20}" />
+					        <view>
+					            <simplelayout axis="x" spacing="-1"/>
+					           <button width="40" onclick="audioplayer.stop()">
+					                <view resource="resources/play.png" y="6" align="center"/>
+					            </button>
+					            <button width="40" onclick="audioplayer.play()">
+					                <view resource="resources/record.png" y="5" align="center"/>
+					            </button>
+					        </view>
+					        
+					        <view>
+					            <simplelayout axis="x" spacing="-1"/>
+					            <button width="40" onclick="audioplayer.setVolume( audioplayer.getVolume() -10)">
+					                    -<view resource="resources/mix_volume.png" y="5" align="right"/>
+					                </button>
+					            <button width="40" onclick="audioplayer.setVolume( audioplayer.getVolume() +10)">
+					                    +<view resource="resources/mix_volume.png" y="5" align="right"/>
+					                </button>
+					        </view>
+                    <nextButton nextTabpane="${this.parent.parent.webcamTab}" text="${mess.next}" />
+                </tabpane>                
+
+                <tabpane text="${mess.webcam}" name="webcamTab">
+					<simplelayout axis="y" spacing="5"/>
+                    <text text="${mess.webcamText}" multiline="true" width="${this.parent.width - 20}" />
+		<view id="v1" layout="axis:y; spacing:4">
+			<videoview id="live" type="rtmp" stream="$once{canvas.s1}" width="240" height="160">
+				<camera id="cam" show="true" fps="20" width="240" height="160" 
+																picturequality="0"/>
+				<microphone id="mic" capturing="false"/>
+				
+			</videoview>
+		</view>                    
+                    <nextButton nextTabpane="${this.parent.parent.messTab}" text="${mess.next}" />
+                </tabpane>                
+
+                <tabpane text="${mess.bandwidth}" name="messTab">
+					<simplelayout axis="y" spacing="5"/>
+                    <text text="${mess.bandwidthText}" multiline="true" width="${this.parent.width - 20}" />
+                    <nextButton nextTabpane="${this.parent.parent.latencyTab}" text="${mess.next}" />
+                </tabpane>                
+
+                <tabpane text="${mess.latency}" name="latencyTab">
+					<simplelayout axis="y" spacing="5"/>
+                    <text text="${mess.latencyText}" multiline="true" width="${this.parent.width - 20}" />
+                    <nextButton nextTabpane="${this.parent.parent.synthesisTab}" text="${mess.next}" />
+                </tabpane>                
+
+                <tabpane text="${mess.synthesis}" name="synthesisTab">
+					<simplelayout axis="y" spacing="5"/>
+                    <text text="${mess.synthesisText}" multiline="true" width="${this.parent.width - 20}" />
+                </tabpane>                
+            </tabs>
+
+	
+	<rtmpconnection src="rtmp://192.168.0.1/'+canvas.webAppRootKey+'/test" autoconnect="true"/>
+	<mediastream name="s1" type="rtmp"/>
+	<mediastream name="s2" type="rtmp"/>
+	<simplelayout/>
+
+<!--	
+	<text multiline="true" width="100%"> Instructions:
+		<br/> 1. Either run a flash media server on localhost (127.0.0.1), or ssh tunnel to a
+		media server at a known host
+		<br/> 2. Press the broadcast button. (Grant camera access permission if needed.) The
+		button should change to say "stop broadcasting"
+		<br/> 3. Press the receive button. You should be receiving audio and video from
+		yourself and the button should say "stop receiving."
+		<br/> 4. Try out the audio and video mute buttons. The video mute should freeze the
+		received picture. The audio mute should silence the received sound.
+		<br/> 5. Press the receive button. The received video should freeze and the button
+		should say "stop receiving".
+		<br/> 6. Press the receive button again. The video should resume and the button should
+		say "receiving".
+		<br/> 7. Press the broadcast button. The received video should freeze and the button
+		should say "broadcast".<br/> <br/> The indicator below shows the status of the video
+		connection.
+		</text>
+-->	
+</canvas>
diff --git a/WebContent/src/test/page/main.lzx b/WebContent/src/test/page/main.lzx
new file mode 100644
index 0000000..e05088f
--- /dev/null
+++ b/WebContent/src/test/page/main.lzx
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" width="100%" height="100%" 
+		fontsize="14" title="OpenMeetings - Computer testing">
+
+    <image name="_image" src="Добрыйдень.jpg" />
+    
+    <button text="loadImage2">
+    	<handler name="onclick">
+    		<![CDATA[
+    		   
+    	    ]]>
+    	</handler>
+    </button>
+    
+
+</canvas>
diff --git a/WebContent/src/test/page/main.lzx.swf8.swf b/WebContent/src/test/page/main.lzx.swf8.swf
new file mode 100644
index 0000000..cfd7b01
--- /dev/null
+++ b/WebContent/src/test/page/main.lzx.swf8.swf
Binary files differ
diff --git a/WebContent/src/test/page/test.jpg b/WebContent/src/test/page/test.jpg
new file mode 100644
index 0000000..51d5e80
--- /dev/null
+++ b/WebContent/src/test/page/test.jpg
Binary files differ
diff --git a/WebContent/src/test/regexp.jsp b/WebContent/src/test/regexp.jsp
new file mode 100644
index 0000000..031b348
--- /dev/null
+++ b/WebContent/src/test/regexp.jsp
@@ -0,0 +1,92 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+    pageEncoding="UTF-8"%>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<title>OpenMeetings</title>

+	<script type="text/javascript" src="swfobject.js"></script>

+	<style type="text/css">

+		

+		/* hide from ie on mac \*/

+		html {

+			height: 100%;

+			overflow: hidden;

+		}

+		

+		#flashcontent {

+			height: 100%;

+		}

+		/* end hide */

+	

+		body {

+			height: 100%;

+			margin: 0;

+			padding: 0;

+			background-color: #ffffff;

+		}

+	

+	</style>

+	<link rel="shortcut icon" href="favicon.ico"> 

+	<script type="text/javascript">

+		function reMatch(str, reg){

+			var s = unescape(str);

+			var re = new RegExp(eval(unescape(reg)));

+			return s.replace(re,unescape(rep));

+		}

+	</script>
+</head>
+<body onLoad="focusSWF()">

+

+

+	<div id="flashcontent">

+		<strong>You need to upgrade your Flash Player</strong>

+		This is replaced by the Flash content. 

+		Place your alternate content here and users without the Flash plugin or with 

+		Javascript turned off will see this. Content here allows you to leave out <code>noscript</code> 

+		tags.

+	</div>

+	

+	<script type="text/javascript">

+		// <![CDATA[

+		

+		var so = new SWFObject("test-regExp2.lzx?lzt=swf&lzr=swf8", "lzapp", "100%", "100%", "8", "#ffffff");

+		so.addParam("quality", "high");

+		so.addParam("id", "lzapp");

+		so.addParam("allowScriptAccess", "always");

+		so.addParam("scale", "noscale");

+		so.write("flashcontent");

+		

+		function focusSWF(){

+		

+		    if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){

+		    }else {

+		        document.getElementById('lzapp').focus();

+		    }

+		}   		

+		

+		// ]]>

+	</script>	

+

+

+</body>
+</html>
\ No newline at end of file
diff --git a/WebContent/src/test/resources/audio_scrubber.png b/WebContent/src/test/resources/audio_scrubber.png
new file mode 100644
index 0000000..b51da01
--- /dev/null
+++ b/WebContent/src/test/resources/audio_scrubber.png
Binary files differ
diff --git a/WebContent/src/test/resources/audio_scrubtrack.png b/WebContent/src/test/resources/audio_scrubtrack.png
new file mode 100644
index 0000000..1e7029b
--- /dev/null
+++ b/WebContent/src/test/resources/audio_scrubtrack.png
Binary files differ
diff --git a/WebContent/src/test/resources/mix_volume.png b/WebContent/src/test/resources/mix_volume.png
new file mode 100644
index 0000000..a010125
--- /dev/null
+++ b/WebContent/src/test/resources/mix_volume.png
Binary files differ
diff --git a/WebContent/src/test/resources/next.png b/WebContent/src/test/resources/next.png
new file mode 100644
index 0000000..95fc568
--- /dev/null
+++ b/WebContent/src/test/resources/next.png
Binary files differ
diff --git a/WebContent/src/test/resources/play.png b/WebContent/src/test/resources/play.png
new file mode 100644
index 0000000..b41fa2b
--- /dev/null
+++ b/WebContent/src/test/resources/play.png
Binary files differ
diff --git a/WebContent/src/test/resources/record.png b/WebContent/src/test/resources/record.png
new file mode 100644
index 0000000..d1eb150
--- /dev/null
+++ b/WebContent/src/test/resources/record.png
Binary files differ
diff --git a/WebContent/src/test/resources/stop.png b/WebContent/src/test/resources/stop.png
new file mode 100644
index 0000000..682c322
--- /dev/null
+++ b/WebContent/src/test/resources/stop.png
Binary files differ
diff --git a/WebContent/src/test/scrolledittext.lzx b/WebContent/src/test/scrolledittext.lzx
new file mode 100644
index 0000000..bc64ac5
--- /dev/null
+++ b/WebContent/src/test/scrolledittext.lzx
@@ -0,0 +1,170 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+    <include href="incubator/baseedittext.lzx" />
+    <include href="lz/vscrollbar.lzx"/>
+
+    <!--- Implements visual baseedittext with scrollbar. -->
+    <class name="scrolledittext" extends="baseedittext" 
+           multiline="true" clip="true" height="100">
+
+        <attribute name="border" value="0" />
+        
+        <view name="_face" bgcolor="0xffffff" 
+              width="${parent.width-parent.border*2}" 
+              height="${parent.height-parent.border*2}" 
+              x="${parent.border}" y="${parent.border}"/>
+
+        <_newinternalinputtext name="inp" 
+            x="${parent.border}" 
+            y="${parent.border}" 
+            height="${parent.height - parent.border * 2}" 
+            width="${parent.width - parent.vscrollwidth - parent.border*2}"
+            scrollevents="true">
+            <!-- Supplied by lztext now
+                attribute name="lineheight"
+                       value="${this.getTextHeight()/this.getMaxScroll()}"/-->
+            <attribute name="maxtextheight"
+                       value="${this.lineheight * this.maxscroll}"/>
+            <attribute name="maxheight" 
+                       value="${this.height + this.maxtextheight}"/>
+            <attribute name="pos" value="0" type="number"/>
+            
+            <setter name="pos" args="p">
+                if (this.inited) {
+                    var scroll = 1 - Math.floor(p / this.lineheight);
+                    if (scroll !== this.scroll) {
+                        this.setAttribute('scroll', scroll);
+                        //Debug.info('pos', p, this.scroll)
+                    }
+                    this.pos = p;
+                    if (this.onpos) this.onpos.sendEvent(p);
+                }
+            </setter>
+            
+            <handler name="onscroll" args="IGNORE_THIS_ARG">
+                this.setAttribute('pos', -this.lineheight * (this.scroll - 1));
+            </handler>
+        </_newinternalinputtext>
+
+        <!--- Width to give for scrollbar
+              @keywords private -->
+        <attribute name="vscrollwidth" value="0"/>
+        
+        <method name="setvscrollwidthfromvisibility" args="v">
+            this.setAttribute("vscrollwidth", (v ? this._vs.width : 0));
+        </method>
+        
+<!--
+        <om_vscrollbar name="_vs" axis="y" scrollattr="pos"
+            scrolltarget="parent.inp"
+            x="${parent.width - this.width - parent.border + 1}" 
+            stepsize="${parent.inp.lineheight}" 
+            scrollmax="${parent.inp.scrollheight}">
+        </om_vscrollbar>
+-->
+
+        <!--- Name of class to instantiate for vertical scroll bar.
+              @keywords public -->
+        <attribute name="vscrollbarclassname" type="string" value="vscrollbar"/>
+        
+        <!--- Our vertical scrollbar
+              @keywords private -->
+        <attribute name="_vs" value="null"/>
+        
+        <!--- @keywords private -->
+        <method name="ensurevscrollbar">
+            if (this['_vs'] == null) {
+                var classname = this.vscrollbarclassname;
+                if (classname == "") {
+                    classname = "vscrollbar";
+                }
+                if ($debug) {
+                    if (typeof(lz[classname]) == "undefined") {
+                        Debug.warn("scrollbarclassname undefined", this);
+                    }
+                }
+                if(typeof(lz[classname]) != "undefined"){
+                    this._vs = new lz[classname](this, 
+                                                 { axis: "y",
+                                                   scrollattr: "pos",
+                                                   scrollmax: "0",
+                                                   scrolltarget: this.inp});
+                                                   
+                    var xDel = new lz.Delegate(this, 'updateX');
+                    xDel.register(this['_vs'], 'onwidth');
+                    xDel.register(this, 'onwidth');
+                    xDel.register(this, 'onborder');
+                    
+                    new lz.Delegate(this, 'updateScrollMax', this.inp, 'onscrollheight');
+                    new lz.Delegate(this, 'updateStepSize', this.inp, 'onlineheight');
+                    // call once manually
+                    this.updateX();
+                    this.updateStepSize();
+                }
+
+            }
+        </method>
+        
+        <method name="updateX" args="IGNORE_THIS_ARG = null">
+            if(this['_vs']){
+                this._vs.setAttribute("x", this.width - this._vs.width );
+            }
+        </method>
+        
+        <method name="updateStepSize" args="IGNORE_THIS_ARG = null">
+            if(this['_vs']){
+                this._vs.setAttribute("stepsize", this.inp.lineheight);
+            }
+        </method>
+        
+        <method name="updateScrollMax" args="IGNORE_THIS_ARG = null">
+            if(this['_vs']){
+                this._vs.setAttribute("scrollmax", this.inp.scrollheight);
+            }
+        </method>
+        
+        <method name="init">
+            super.init();
+            this.ensurevscrollbar();
+            setvscrollwidthfromvisibility(this['_vs'] ? this._vs.visible : false);
+            this.myDel = new lz.Delegate(this, "setvscrollwidthfromvisibility", this['_vs'], "onvisible");
+        </method>
+
+ <!--- Overrides a parent method which calculates y position for text
+            in a way that doesn't make sense for this class. We just trap the 
+            call and do nothing. This field is positioned in y by the constraint
+            y=${parent.border}
+            Note: although this method is a no-op, it still has to be declared,
+            so the parent class's method does not get called on instances of 
+            this class. 
+        -->
+        <method name="_placeTextY">
+        </method>
+
+    </class>
+
+</library>
+<!-- * X_LZ_COPYRIGHT_BEGIN ***************************************************
+* Copyright 2006-2009 Laszlo Systems, Inc. All Rights Reserved.               *
+* Use is subject to license terms.                                            *
+* X_LZ_COPYRIGHT_END ****************************************************** -->
+<!-- @LZX_VERSION@                                                         -->
diff --git a/WebContent/src/test/simplebroadcast.lzx b/WebContent/src/test/simplebroadcast.lzx
new file mode 100644
index 0000000..fadcf2e
--- /dev/null
+++ b/WebContent/src/test/simplebroadcast.lzx
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" width="1000" height="700">
+	
+	<debug fontsize="14" oninit="Debug.showInternalProperties = true"/>
+	
+	<rtmpconnection src="rtmp://macbook/'+canvas.webAppRootKey+'/hibernate" autoconnect="true"/>
+	<mediastream name="s1" type="rtmp"/>
+	<mediastream name="s2" type="rtmp"/>
+	<simplelayout/>
+	
+	<text multiline="true" width="100%"> Instructions:
+		<br/> 1. Either run a flash media server on localhost (127.0.0.1), or ssh tunnel to a
+		media server at a known host
+		<br/> 2. Press the broadcast button. (Grant camera access permission if needed.) The
+		button should change to say "stop broadcasting"
+		<br/> 3. Press the receive button. You should be receiving audio and video from
+		yourself and the button should say "stop receiving."
+		<br/> 4. Try out the audio and video mute buttons. The video mute should freeze the
+		received picture. The audio mute should silence the received sound.
+		<br/> 5. Press the receive button. The received video should freeze and the button
+		should say "stop receiving".
+		<br/> 6. Press the receive button again. The video should resume and the button should
+		say "receiving".
+		<br/> 7. Press the broadcast button. The received video should freeze and the button
+		should say "broadcast".<br/> <br/> The indicator below shows the status of the video
+		connection.
+		</text>
+	<rtmpstatus/>
+	<view layout="axis:x; inset:10; spacing:10">
+		<view id="v1" layout="axis:y; spacing:4">
+			<videoview id="live" type="rtmp" stream="$once{canvas.s1}" width="240" height="160">
+				<camera id="cam" show="false" fps="20" width="240" height="160" 
+																picturequality="0"/>
+				<microphone id="mic" capturing="false"/>
+				
+			</videoview>
+			<edittext name="username">YourName</edittext>
+			<button text="broadcast">
+				<attribute name="text"
+					value="${(s1.broadcasting == false) ? 'broadcast' : 'stop broadcasting'}"/>
+				<handler name="onclick">
+					<![CDATA[
+                    if (cam.show == false) {
+                        live.stream.setAttribute('url', parent.username.text);
+                        live.stream.broadcast();
+							cam.setAttribute('show', true);
+                    } else {
+                        live.stream.stop();
+                        cam.setAttribute('show', false);
+                    }
+                  ]]>
+				</handler>
+			</button>
+			
+			<checkbox onvalue="s1.setAttribute('muteaudio', value)">Mute
+				Audio</checkbox>
+			<checkbox onvalue="s1.setAttribute('mutevideo', value)">Mute
+				Video</checkbox>
+			<button text="checkValues">
+				<handler name="onclick">
+					//Debug.write("this: ",live);
+					//Debug.write("this: ",cam);
+					//Debug.write("this: ",cam._dev);
+					//Debug.write("this: ",mic._dev);
+				</handler>
+			</button>
+		</view>
+		<view id="v2" layout="axis:y; spacing:4">
+			<videoview name="vid" type="rtmp" stream="$once{canvas.s2}"/>
+			<edittext name="username">YourName</edittext>
+			<button text="${s2.playing ? 'stop receiving' : 'receive'}"
+				onclick="s2.setAttribute('url', parent.username.text);
+                         if (s2.playing) s2.stop(); else s2.play();"/>
+		</view>
+	</view>
+	
+</canvas>
diff --git a/WebContent/src/test/simpletestedittext.lzx b/WebContent/src/test/simpletestedittext.lzx
new file mode 100644
index 0000000..ee80f95
--- /dev/null
+++ b/WebContent/src/test/simpletestedittext.lzx
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas height="400" debug="true">
+ 
+     <button text="Show then Fade" onclick="canvas.showText()" />
+     <text name="myText" opacity="0.0" bgcolor="#CCCCCC">The Invisible Man</text>
+     <simplelayout axis="y" spacing="10" />
+	
+	<attribute name="fadeDelegate" value="null" />
+ 
+     <method name="showText">
+         this.myText.setAttribute( "opacity", 1.0 );
+         this.fadeDelegate = new LzDelegate( this, "fadeText" );
+         lz.Timer.addTimer( this.fadeDelegate, 3000 );
+     </method>
+ 
+     <method name="fadeText">
+		 //Debug.write("fadeText: ",lz.Timer.countTimers(this.fadeDelegate));
+         this.myText.animate( "opacity", 0.0, 1000 );
+     </method>
+ 
+ </canvas>
diff --git a/WebContent/src/test/simpletestvalidBox.lzx b/WebContent/src/test/simpletestvalidBox.lzx
new file mode 100644
index 0000000..e23ddfb
--- /dev/null
+++ b/WebContent/src/test/simpletestvalidBox.lzx
@@ -0,0 +1,810 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas height="400" debug="true">
+	
+<include href="lz/textlistitem.lzx" />
+	
+<script>
+<![CDATA[
+	
+String.prototype.startsWith = function(prefix) {
+    return (this.indexOf(prefix) === 0);
+};	
+	
+]]>
+</script>
+	
+<attribute name="statesInitValues" value="null" />
+	
+<handler name="oninit">
+	<![CDATA[
+		var tChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+		var tCharsSmall = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
+		
+		this.statesInitValues = new Array();
+		var m = 0;
+		while (m<20){
+			for (var i = 0;i<26;i++){
+				for (var r=0;r<3;r++){
+					var t = new Array();
+					t["state_id"] = i*r;
+					t["name"] = tChars.charAt(i)+tCharsSmall.charAt(( Math.random()*100))+tCharsSmall.charAt(( Math.random()*100))+tCharsSmall.charAt(( Math.random()*100))+tCharsSmall.charAt(( Math.random()*100))+tCharsSmall.charAt(( Math.random()*100));
+					this.statesInitValues.push(t);
+				}
+			}
+			m++;
+		}
+		//Debug.write(this.statesInitValues);
+		
+		this._validbox.addItem("Da","1");
+		this._validbox.selectItem("1",true);
+	]]>
+</handler>
+	
+<method name="validateCountry" args="str">
+	//Debug.write("validateCountry: ",str);
+	<![CDATA[
+		if (str.length!=0){
+			var a = new Array();
+			for (var i=0;i<canvas.statesInitValues.length;i++){
+				if (canvas.statesInitValues[i].name.startsWith(str))a.push(canvas.statesInitValues[i]);
+				//this.addItem(canvas.statesInitValues[i].name,canvas.statesInitValues[i].state_id);
+			}
+			return a;
+		}
+	]]>	
+</method>	
+	
+
+    <include href="base/baseformitem.lzx" />
+    <include href="lz/list.lzx" />
+    <include href="lz/floatinglist.lzx" />
+	
+	<include href="lz/combobox.lzx" />
+
+    <!--- A dropdown list of selectable items. -->
+    <class name="baseValidCombobox" extends="baseformitem" focusable="false" width="100">
+        <!--- @keywords private -->
+        <attribute name="defaultplacement"  value="cblist" type="string"/>
+
+        <!-- attributes -->
+        <!--- The value of the combobox. -->
+        <attribute name="value" value="${cblist.value}"/>
+
+        <!--- Indicates whether or not the popup list is showing.  -->
+        <attribute name="isopen"       value="false"  setter="this.setOpen(isopen)" />
+
+        <!--- The border size ( in pixels ) of the popup list.  -->
+        <attribute name="bordersize"   value="1" />
+
+        <!--- The spacing size ( in pixels ) between items in the pop-up list.  -->
+        <attribute name="spacing"   value="0" />
+
+        <!--- The text that appears in the text field when no item is selected. -->
+        <attribute name="defaulttext"  value="" type="string" />
+
+        <!--- The number of the item that is initially selected. This overrides
+              the value defined in the defaulttext attribute -->
+        <attribute name="defaultselection"  value="null" type="number"  setter="this.setDefaultSelection( defaultselection )"/>
+
+        <!--- This event is sent when the default selection is set.  -->
+        <event name="ondefaultselection" />
+
+        <!--- The class that is used to create an item in the list when
+              itemdatapath is assigned. -->
+        <attribute name="itemclassname" setter="this.setItemclassname(itemclassname)"  value="" type="string" />
+
+        <!--- Sets the height of the combobox to show 'n' items. -->
+        <attribute name="shownitems"   value="-1" />
+
+        <!--- @keywords private  -->
+        <attribute name="mousedownintext" value="false"/>
+
+        <!--- @keywords private  -->
+        <attribute name="initcomplete" value="0" />
+
+        <!--- Whether a scrollbar should automatically show up when there are more
+              items than shownitems. -->
+        <attribute name="autoscrollbar" value="true"/>
+
+        <!--- The initial selected item. -->
+        <attribute name="selected" value="null"/>
+
+        <!--- This event is triggered whenever the user makes a selection. It
+              may be used as a script in the combobox tag or as an event method.
+              -->
+        <event name="onselect"/>
+
+        <!--- One of "lazy", "resize", "pooling", "none". -->
+        <attribute name="dataoption" value="none" type="string"/>
+
+        <!--- The vertical offset of the floatinglist attached to this
+              combobox. -->
+        <attribute name="attachoffset" value="-1" type="number"/>
+
+        <!--- the x position of the text. default: 2 -->
+        <attribute name="text_x" value="2" type="number"/>
+
+        <!--- the y position of the text. default: 2 -->
+        <attribute name="text_y" value="2" type="number"/>
+
+        <!--- the width the text. default: combowidth - 19 -->
+        <attribute name="text_width" value="${this.width - 19}" type="number"/>
+
+        <!--- The minimum width this component is allowed to be.
+              Defaults to 50 pixels.
+              @keywords defaultsetter -->
+        <attribute name="min_width" value="50" type="number" />
+        
+        <!--- The method to be called for validating -->
+        <attribute name="validate_method" value="null" />
+
+        <!--- Since we are not focusable, defer to the inputtext's next selection,
+              so that when floatinglist is tabbed out of, we can provide a next
+              selection since we are it's owner
+              @keywords private -->
+        <method name="getNextSelection">
+            // must ensure the floatinglist is closed so that if it is being tabbed from,
+            // we can change the focus. (focus is normally not allowed to escape from
+            // a modal view).
+            this.setOpen(false);
+            return lz.Focus.getNext(interior.cbtext);
+        </method>
+
+        <!--- since we are not focusable, this provides an api for asking what child to send focus
+              to, as is the case when floatinglist is shift-tabbed back to us.
+              @keywords private -->
+        <method name="resolveSelection">
+            // must ensure the floatinglist is closed so that if it is being tabbed from,
+            // we can change the focus. (focus is normally not allowed to escape from
+            // a modal view).
+            this.setOpen(false);
+            return interior.cbtext;
+        </method>
+
+        <view name="bkgnd" width="100%" focusable="false">
+        <!--- subclasses defined the 'look' by placing views here -->
+        </view>
+
+        <view name="interior"
+            x="$once{classroot.text_x}"
+            y="$once{classroot.text_y}"
+            width="${classroot.text_width}"
+             height="${classroot.height - 2*classroot.bordersize - 2}"
+             focusable="false">
+            <!--- @keywords private -->
+            <attribute name="_dsblfield" value="null"/>
+
+            <method name="setupText" >
+                var txt = classroot.cblist.getText();
+                if ( !txt ) {
+                    if ( classroot.defaultselection ) {
+                        if ( classroot.cblist._contentview != null ) {
+                            classroot.cblist.selectItemAt( classroot.defaultselection );
+                            txt = classroot.cblist.getText();
+                        }
+                    } else {
+                        txt = classroot.defaulttext;
+                    }
+                }
+                if (this.cbtext) this.cbtext.setAttribute('text', txt );
+                if (this._dsblfield) this._dsblfield.setAttribute('text', txt );
+                parent._applystyle( parent.style );
+            </method>
+
+                <view name="editbkgnd" bgcolor="white" width="100%" height="100%" />
+                <inputtext x="2" y="1" name="cbtext" width="$once{parent.width - 4}">
+                    <attribute name="text" type="string" />
+					
+					<attribute name="initSelect" value="false" type="boolean" />
+					
+                    <attribute name="timerDelegate" value="null"/>
+                    <attribute name="typetime" type="number" value="4000"/>
+					<attribute name="timerIsInited" value="false" type="boolean"/>
+
+                    <!-- arrow down and up both popup floatinglist, and pass the key event to it -->
+                    <handler name="onkeydown" args="key">
+                        <![CDATA[
+						//Debug.write("onkeydown: ",key);
+                        // 38 is up-arrow
+                        // 40 is down-arrow
+                        // 32 is space
+                        // 13 is return
+                            if ((key==38) || (key==40)) {
+                                if (!classroot.isopen) {
+                                    classroot.setOpen(true, true); // open, withKey
+                                }
+    
+                                // pass the key event on to the floatinglist
+                                classroot.cblist.onkeydown.sendEvent(key);
+                            } else {
+                                //Debug.write("onkeydown txt: ",this.getText());
+                                if (!this.initSelect){
+                                    ////Debug.write("onvalue: ",txt,this);
+                                    if (!this.timerIsInited){
+                                        this.timerIsInited = true;
+                                        this.timerDelegate = new LzDelegate( this, "validatedText" );
+                                        //Debug.write("+++++++++++++++++ addTimer");
+                                        //Debug.write("+++++++++++++++++ removeTimer ",lz.Timer.countTimers());
+                                        lz.Timer.addTimer( this.timerDelegate, this.typetime );
+                                    } else {
+                                        //Debug.write("############### resetTimer NO ADDING ");
+                                        //Debug.write("############### removeTimer ",lz.Timer.countTimers());
+                                        //lz.Timer.removeTimer( this.timerDelegate );
+                                    }
+                                } else {
+                                    this.initSelect = false;
+                                }
+                            }
+                        ]]>
+                    </handler>
+
+                    <!-- pass up to component level so focus rect will be visible, and subclassers can catch -->
+                    <handler name="onfocus" args="v">
+                        if ( classroot['onfocus'] ) classroot.onfocus.sendEvent(v);
+                    </handler>
+                    <!-- pass up to component level so subclassers can catch -->
+                    <handler name="onblur" args="v">
+                        this.initSelect=true;
+                        classroot.setAttribute('text', this.getText() );
+                        if ( classroot['onblur'] ) classroot.onblur.sendEvent(v);
+                    </handler>
+                    <!-- pass up to component level so subclassers can catch -->
+                    <handler name="onkeyup" args="kc">
+                        if ( classroot['onkeyup'] ) classroot.onkeyup.sendEvent(kc);
+                    </handler>
+                    <!-- pass up to component level so subclassers can catch -->
+                    <handler name="onkeydown" args="kc">
+                        if ( classroot['onkeydown'] ) classroot.onkeydown.sendEvent(kc);
+                    </handler>
+
+                    <method name="getFocusRect"  >
+                        return classroot.getFocusRect();
+                    </method>
+
+					<method name="validatedText">
+						<![CDATA[
+                            //Debug.write("validatedText: ",this.getText());
+                            //this.reset();
+                            if (!this.initSelect){
+                                var t = classroot.validate_method(this.getText());
+                                //Debug.write('t: ',t.length);
+                                //this.parent._cblist.setAttribute('visible',true);
+                                classroot.cblist.removeAllItems();
+                                for (var i=0;i<t.length;i++){
+                                    classroot.cblist.addItem(t[i].name,t[i].state_id);
+                                }
+                                //Debug.write("############### removeTimer ",lz.Timer.countTimers());
+                                for (var eg in lz.Timer){
+                                    //Debug.write("############### lz.Timer ",eg,lz.Timer[eg]);
+                                }
+                                for (var eg in lz.Timer.timerList){
+                                    //Debug.write("############### lz.Timer.timerList ",eg,lz.Timer.timerList[eg]);
+                                }
+
+                                ////Debug.write("validateText: ",this.getText());
+                                //if (!classroot.isopen) {
+                                //    classroot.setOpen(true, true); // open, withKey
+                                //}
+                                this.timerIsInited = false;
+                            } else {
+                                this.initSelect=false;
+                                this.timerIsInited = false;
+                            }
+						]]>
+					</method>					
+
+                </inputtext>
+
+        </view>
+
+        <floatinglist name="cblist"
+                      width="${owner.width - 1}"
+                      bordersize="${this.owner.bordersize}"
+                      spacing="${this.owner.spacing}"
+                      visible="false"
+                      shownitems="${this.owner.shownitems}"
+                      attach="bottom"
+                      attachoffset="${this.owner.attachoffset}"
+                      multiselect="false"
+                      autoscrollbar="${owner.autoscrollbar}"
+                      defaultselection="${owner.defaultselection ?
+                                          owner.defaultselection : (owner.defaulttext == '' ?
+                                                                    0 : null) }">
+            <!-- create a blank datapath so that it can be assigned a datapointer when combobox is assigned data -->
+               <datapath>
+                   <attribute name="datacontrolsvisibility" value="false" />
+               </datapath>
+
+            <handler name="onconstruct">
+                this.dataoption = owner.dataoption;
+            </handler>
+
+            <method name="_dokeyup" args="kc"
+                    event="onkeyup">
+                if (kc == 27) {  // escape needs to close floating list
+                    this.owner.setOpen(false);
+                }
+            </method>
+            <method name="removeAllItems" args="index"> 
+                for (var eg in _contentview.subviews){
+                    _removeitem(_contentview.subviews[eg]); 
+                } 
+            </method>			
+        </floatinglist>
+
+
+        <!--- Sets the number of the item that is initially selected. This overrides
+              the value defined in the defaulttext attribute.
+              @param Number ds: the number of items to initally select. -->
+        <method name="setDefaultSelection" args="ds" >
+            this.defaultselection = ds;
+            if ( ds == null ) return;
+            if ( defaulttext != "" ) {
+                this.defaulttext = "";
+                //Debug.write("defaultselection overrides defaulttext",this);
+            }
+            if ( this.ondefaultselection ) this.ondefaultselection.sendEvent();
+        </method>
+
+        <!--- @keywords private -->
+        <handler name="ondata" args="d">
+            this.cblist.datapath.setPointer( d );
+        </handler>
+
+        <!--- @keywords private -->
+        <event name="onitemclassname"/>
+
+        <!--- Sets the type of list items which will be created in floatinglist
+              when necessary.
+              @param String icn: the class name to use to create items with. -->
+        <method name="setItemclassname" args="icn" >
+            this.itemclassname = icn; // before anything is inited capture value
+            if ( this.isinited ) { // view is now inited so check classname with cblist
+
+               if (icn != "") {
+                  // then force this classname as the classname for cblist
+                  cblist.setAttribute('itemclassname',this.itemclassname);
+                } else {
+                  //use the default subview as the classname
+                  this.itemclassname = cblist.itemclassname;
+                }
+            }
+            if (this.onitemclassname) this.onitemclassname.sendEvent();
+        </method>
+
+        <!--- @keywords private -->
+        <event name="ontext"/>
+
+        <!--- @keywords private -->
+        <method name="determinePlacement" args="newsub, placement, iargs" >
+            if (placement == 'cblist') 
+                return this.cblist.determinePlacement(newsub, placement, iargs);
+            else 
+                return super.determinePlacement(newsub, placement, iargs);
+        </method>
+
+        <!--- @keywords private -->
+        <method name="init" >
+            this._initcomplete = true;
+			
+            super.init();
+
+            // reassign classname now that the instance is inited
+            this.setItemclassname(this.itemclassname);
+            cblist.setVisible(false);
+         </method>
+
+        <!--- @keywords private -->
+        <handler name="onblur" >
+           if ( lz.Focus.getFocus() != this.interior.cbtext )
+                this.setOpen(false);
+        </handler>
+
+        <!--- @keywords private -->
+        <method name="getFocusRect"  >
+           var fx = this.getAttributeRelative('x',canvas);
+           var fy = this.getAttributeRelative('y',canvas);
+           var fw = this.getAttributeRelative('width',canvas);
+           var fh = this.getAttributeRelative('height',canvas);
+           return [fx,fy,fw,fh];
+        </method>
+
+        <!--- Selects a specific item in the list.
+              @param Object item: the item to select. -->
+        <method name="select" args="item" >
+           this.cblist.select(item);
+        </method>
+
+        <!--- @keywords private -->
+        <attribute name="_fixseldel" value="$once{new LzDelegate(this, 'fixSelection')}"/>
+        <!--- @keywords private -->
+        <method name="fixSelection">
+            this.interior.cbtext.setSelection(_fixseldel.start, _fixseldel.end);
+        </method>
+
+        <!--- this method listens for the onselect event from the floating list
+              and then resends the onselect event to itself so that developers can easily
+              reference that without knowing the internals of combobox
+              @keywords private -->
+        <handler name="onselect" reference="this.cblist"  args="v" > 
+			<![CDATA[
+				this.interior.cbtext.initSelect=true;
+				this.setOpen(false);
+	
+				// anItem has been selected so update the input text field
+				this.selected = v;
+				if (v) this.setAttribute('text',v.text);
+				if (lz.Focus.getFocus() == this.interior.cbtext) {
+					_fixseldel.start = 0;
+					_fixseldel.end = v.text.length;
+					lz.Idle.callOnIdle( _fixseldel );
+	
+				}
+	
+				// resend the event so that developers can write thier own
+				// onselect methods without having to know the internals of
+				// this class.
+				if ( this.onselect ) this.onselect.sendEvent(v);
+            ]]>
+        </handler>
+
+        <!--- @keywords private -->
+        <method name="passModeEvent" args="eventStr,view" > <![CDATA[
+            // Once a view has been made modal, this method
+            // gets called ONLY when a user clicks on a view 'outside'
+            // the contents of this view, or clicks on a inputtext view anywhere
+            // on the screen even for a subview within this view.
+            if ( eventStr == "onmousedown"  ){
+                // first, we only care about the mousedown event.
+                // if the user has pressed the mouse down on a textfield
+                // within the component, then we will not know this unless
+                // we test it to see if it is a subview of this component.
+
+                if ( view != null ) { // view is a clickable view
+                    // view is not LITERALLY part of the class heirarchy but
+                    // it maybe part of the floatingview of this component, and if so
+                    // then treat it as if it were a child of the class.
+
+                   if ( !view.childOf(this.cblist) ) {
+                        // view is outside of combobox so close the combbobox
+                        this.setOpen(false);
+
+                   } else {
+                        // view is a child of cblist, so don't do anything.
+                   }
+
+                } else {
+                    this.setOpen(false);
+                }
+            }
+            // if we're inside a modal dialog, need to propagate event manually
+            // since floating list is a child of the canvas
+            if (view && view.childOf(this.cblist)) {
+                if (view[ eventStr ]) {
+                    view[ eventStr ].sendEvent( view );
+                }
+                return false;
+            }
+           // since a combox is not strictly modal, always return
+           // true to pass the event to the object (oustide combobox)
+           // that was clicked on
+           return true;
+        ]]> </method>
+
+        <!--- Toggles the open/close state of the popup list.
+            @param Boolean withkey: (optional) if true this is triggered by
+                  keyboard and focus indicators will be turned on;
+                  if false, this is triggered by mouse action and focus
+                  indicators will be turned off;
+                  if parameter is ommitted no change in focus indicator
+        -->
+        <method name="toggle" args="withkey">
+            this.setOpen(!this.isopen, withkey)
+        </method>
+
+        <!--- Sets the open/close state of the popup list.
+              @param Boolean open: true to open the list, else false to
+              close.
+              @param Boolean withkey: (optional) if true this is triggered by
+                    keyboard and focus indicators will be turned on;
+                    if false, this is triggered by mouse action and focus
+                    indicators will be turned off;
+                    if parameter is ommitted no change in focus indicator
+          -->
+        <method name="setOpen" args="open, withkey" >
+            if (!this.isinited) {
+                this.isopen = open;
+                return;
+            }
+            if (open) { // open combox
+                if (this.isopen) return; // tends to get called more than once, esp when
+                lz.ModeManager.makeModal( this );
+
+                this.cblist.bringToFront();
+                this.cblist.setVisible(true);
+                lz.Focus.setFocus(this.cblist, withkey);
+
+                this.isopen = true;
+                if (this['onisopen']) this.onisopen.sendEvent(true);
+            } else { // close combox
+                if (!this['isopen']) return;
+                this.isopen = false;
+
+                lz.ModeManager.release( this );
+                this.cblist.setVisible(false);
+                if (this['onisopen']) this.onisopen.sendEvent(false);
+                if ( lz.Focus.getFocus() == this.cblist ) {
+                    lz.Focus.setFocus(interior.cbtext, withkey);
+                }
+            }
+        </method>
+
+        <!--- @keywords private -->
+        <method name="applyData" args="d">
+            this.setAttribute('text', d );
+        </method>
+
+
+        <!--- Get the value for the combobox.
+              @return Object: the value selected or the value in the text
+              field, if no value was found. -->
+        <method name="getValue">
+           var rv;
+           var ra = this.cblist.getValue(); // an array of values
+           if (ra==null) {
+               rv  = this.interior.cbtext.getText();
+           } else {
+               rv = ra;
+           }
+           return rv;
+        </method>
+
+        <!--- Sets the displayed text.
+              @param String t: the text to display. -->
+        <method name="setText" args="t">
+            this.text = t;
+            this.interior.cbtext.setAttribute('text', t );
+            if (!this._enabled) interior._dsblfield.setAttribute('text', t );
+            if ( this.ontext ) this.ontext.sendEvent( t );
+        </method>
+
+        <!--- Get the displayed text.
+              @return String: the displayed text. -->
+        <method name="getText">
+           return this.interior.cbtext.getText();
+        </method>
+
+        <!--- Returns current selection.
+              @return Object: null if no selection, an item if single select
+              (default), or an array of items if multiselect. -->
+        <method name="getSelection">
+            return this.cblist.getSelection();
+        </method>
+
+        <!--- Add the specified item to list to the end of the list.
+              @param String txt: the text for the item.
+              @param Object val: the value for the item. -->
+        <method name="addItem" args="txt, val" >
+            this.cblist.addItem(txt,val);
+        </method>
+
+        <!--- Find a particular item by value. This method is not available with
+              dataoption="lazy" or dataoption="resize" (use data APIs instead).
+              @param Object value: the value for the item to get.
+              @return Object: the item found, or null, if not.
+              -->
+        <method name="getItem" args="value">
+            return this.cblist.getItem(value);
+        </method>
+
+        <!--- Find a particular item by its index. This method not available
+              with dataoption="lazy" or dataoption="resize"
+              (use data APIs instead).
+              @param Number index: the index for the item to get.
+              @return Object: the item found, or null, if not. -->
+        <method name="getItemAt" args="index">
+            return this.cblist.getItemAt(index);
+        </method>
+
+        <!--- Find the first item with the specified value and remove it from
+              the list.
+              @param Object value: the value of the item to remove. -->
+        <method name="removeItem" args="value" >
+            this.cblist.removeItem(value);
+        </method>
+
+        <!--- Remove an item by index (0 based count). This method is not
+            available with dataoption="lazy" or dataoption="resize"
+            (use data APIs instead).
+              @param Number index: the index of the item to remove. -->
+        <method name="removeItemAt" args="index" >
+            this.cblist.removeItemAt(index);
+        </method>
+
+        <!--- Select an item by value. This method is not available with
+              dataoption="lazy" or dataoption="resize".
+              @param Object value: the value of the item to select.
+			  initSelect = true will NOT throw a validating event -->
+        <method name="selectItem" args="value,initSelect">
+			if (initSelect) this.interior.cbtext.initSelect=true;
+            this.cblist.selectItem(value);
+        </method>
+
+        <!--- Select an item by index (0 based count).
+              @param Number index: the index of the item to select. -->
+        <method name="selectItemAt" args="index">
+            this.cblist.selectItemAt(index);
+        </method>
+
+        <!--- Clear the current selection in the list and sets the displayed
+            text to an empty string -->
+        <method name="clearSelection" >
+            this.cblist.clearSelection();
+            this.setAttribute('text',"");
+        </method>
+
+        <!--- @keywords private -->
+        <method name="_applystyle" args="s">
+            if (this.style != null) {
+                interior.editbkgnd.setAttribute("bgcolor", s.textfieldcolor);
+                interior.cbtext.setAttribute('bgcolor',s.textfieldcolor);
+                setTint(bkgnd, s.basecolor);
+           }
+        </method>
+
+        <!--- @keywords private -->
+        <method name="_showEnabled">
+           interior.cbtext.setVisible(this._enabled);
+            if (!this._enabled) {
+                if (interior._dsblfield == null) {
+                    var t = new LzText(interior,
+                        { name: '_dsblfield', x: 2, y: 1,
+                          width:interior.width, height:interior.height,
+                            fgcolor:this['style'] ? this.style.textdisabledcolor : null});
+                } else {
+                   interior._dsblfield.setVisible(true);
+                }
+                interior._dsblfield.setAttribute('text',this.getText());
+            } else {
+                if (interior._dsblfield) interior._dsblfield.setVisible(false);
+            }
+        </method>
+
+        <method name="setWidth" args="w">
+            super.setWidth(Math.max(w,this.min_width));
+        </method>
+    </class>
+
+
+    <!--- A dropdown list of selectable items. Can either be editable or
+          not. -->
+    <class name="validBox" extends="baseValidCombobox">
+		
+        <view name="lft" resource="lzcombobox_lft_rsc" placement="bkgnd"/>
+        <view name="mid" resource="lzcombobox_mid_rsc" stretches="width" placement="bkgnd"/>
+        <basebutton name="rgt" resource="lzcombobox_rgt_rsc" styleable="true"
+                placement="bkgnd" onclick="classroot.toggle(false)" />
+		
+        <stableborderlayout axis="x" placement="bkgnd"/>
+		
+               <!--- @keywords private -->
+        <method name="_showEnabled">
+           super._showEnabled();
+           if (_enabled) {
+				this.bkgnd.lft.setAttribute('frame', 1 );
+				this.bkgnd.mid.setAttribute('frame', 1 );
+            } else {
+				this.bkgnd.lft.setAttribute('frame', 3 );
+				this.bkgnd.mid.setAttribute('frame', 3 );
+            }
+        </method>
+
+    </class>		
+ <!--
+		<edittext name="state" width="270" y="20" x="120" fontsize="11">
+			
+			<attribute name="timerDelegate" value="null"/>
+			<attribute name="typetime" type="number" value="500"/>
+			<attribute name="timerIsInited" value="false" type="boolean"/>
+			
+			<attribute name="formervalue" value="" type="string"/>
+			<attribute name="startValidate" value="false" type="boolean"/>
+			
+			<method name="getValue"> return this.id; </method>
+			<method name="setValued" args="txt,id"> 
+				//Debug.write("setValue:",txt,id); 
+				this.id = id; this.setAttribute('text',txt); 
+			</method>
+			
+			<handler name="onfocus"> //Debug.write("onfocus ",this.getText());
+				this.startValidate = true; this.formervalue = this.getText();
+				</handler>
+			<handler name="onvalue" args="txt">
+				<![CDATA[
+				//Debug.write("onvalue: ",txt,this.startValidate);
+				if (!this.timerIsInited && this.startValidate){
+					this.timerIsInited = true;
+					this.timerDelegate = new LzDelegate( this, "validatedText" );
+					//Debug.write("############### addTimer");
+					lz.Timer.addTimer( this.timerDelegate, this.typetime );
+				} else {
+					lz.Timer.resetTimer( this.timerDelegate, this.typetime );
+				}
+				]]>
+			</handler>
+			<method name="validatedText">
+				<![CDATA[
+					//Debug.write("validatedText: ",this.getText());
+					//this.reset();
+					var t = canvas.validateCountry(this.getText());
+					//Debug.write('t: ',t.length);
+					this._cblist.setAttribute('visible',true);
+					this._cblist.removeAllItems();
+					for (var i=0;i<t.length;i++){
+						this._cblist.addItem(t[i].name,t[i].state_id);
+					}
+					lz.Timer.removeTimer(this.timerDelegate);
+					this.timerIsInited = false;
+					//Debug.write("validateText: ",this.getText());
+
+				]]>
+			</method>
+			<handler name="onblur" args="b"> //Debug.write("onblur: ",b);
+				<![CDATA[
+					if (b!=this._cblist){
+						var t = canvas.validateCountry(this.getText());
+						//Debug.write('t: ',t.length);
+						this._cblist.removeAllItems();
+						for (var i=0;i<t.length;i++){
+							this._cblist.addItem(t[i].name,t[i].state_id);
+						}
+						this.startValidate = false;
+						//this._cblist.setAttribute('visible',false);
+					} else {
+						//Debug.write("is this._cblist");
+					}
+				]]>
+				</handler>
+			
+			<floatinglist width="${ this.owner.width }" attach="bottom"
+				name="_cblist" visible="false" autoscrollbar="true" shownitems="7"
+				scrollbarclassname="scrollbarValidBox" >
+				<method name="removeAllItems" args="index"> 
+					for (var eg in _contentview.subviews){
+						_removeitem(_contentview.subviews[eg]); 
+					} 
+				</method>
+				<handler name="onselect" args="item"> 
+					//Debug.write("onselect:",item); 
+					//this.owner. 
+					this.setAttribute('visible',false);
+					lz.Focus.setFocus(this.owner); 
+				</handler>
+			</floatinglist>
+			
+		</edittext>
+  -->
+	
+	<validBox y="20" width="270" name="_validbox" 
+        shownitems="7" validate_method="$once{ canvas.validateCountry }" />
+    
+ </canvas>
diff --git a/WebContent/src/test/simpletestvalidText.lzx b/WebContent/src/test/simpletestvalidText.lzx
new file mode 100644
index 0000000..a71f716
--- /dev/null
+++ b/WebContent/src/test/simpletestvalidText.lzx
@@ -0,0 +1,290 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas height="400" debug="true">
+	
+<include href="lz/textlistitem.lzx" />
+<include href="lz/edittext.lzx" />
+<include href="lz/button.lzx" />
+	
+<script>
+<![CDATA[
+	
+String.prototype.startsWith = function(prefix) {
+    return (this.indexOf(prefix) === 0);
+};	
+	
+]]>
+</script>
+	
+<attribute name="statesInitValues" value="null" />
+	
+<handler name="oninit">
+	<![CDATA[
+		var tChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+		var tCharsSmall = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
+		
+		this.statesInitValues = new Array();
+		var m = 0;
+		while (m<20){
+			for (var i = 0;i<26;i++){
+				for (var r=0;r<3;r++){
+					var t = new Array();
+					t["state_id"] = i*r;
+					t["name"] = tChars.charAt(i)+tCharsSmall.charAt(( Math.random()*100))+tCharsSmall.charAt(( Math.random()*100))+tCharsSmall.charAt(( Math.random()*100))+tCharsSmall.charAt(( Math.random()*100))+tCharsSmall.charAt(( Math.random()*100));
+					this.statesInitValues.push(t);
+				}
+			}
+			m++;
+		}
+		//Debug.write(this.statesInitValues);
+		
+		this._validbox.addAndSelectItem("Da","1");
+	]]>
+</handler>
+	
+<method name="validateCountry" args="str">
+	//Debug.write("validateCountry: ",str);
+	<![CDATA[
+		if (str.length!=0){
+			var a = new Array();
+			for (var i=0;i<canvas.statesInitValues.length;i++){
+				if (canvas.statesInitValues[i].name.startsWith(str))a.push(canvas.statesInitValues[i]);
+				//this.addItem(canvas.statesInitValues[i].name,canvas.statesInitValues[i].state_id);
+			}
+			return a;
+		}
+	]]>	
+</method>	
+	
+
+    <class name="validText" extends="edittext">
+        
+        <!--- The method to be called for validating -->
+        <attribute name="validate_method" value="null" />
+        
+        <!--- the id-attribute of the resultset -->
+        <attribute name="resultId" value="id" type="string" />
+        <!--- the name-attribute of the resultset -->
+        <attribute name="resultName" value="name" type="string" />        
+					
+        <attribute name="initSelect" value="false" type="boolean" />
+					
+        <attribute name="timerDelegate" value="null"/>
+        <attribute name="typetime" type="number" value="500"/>
+        <attribute name="timerIsInited" value="false" type="boolean"/>
+        
+        <!--- items to be shown in the floatinglist -->
+        <attribute name="shownitems" value="7" type="number" />          
+        <attribute name="spacing" value="1" type="number" />  
+        <!--- The vertical offset of the floatinglist attached to this
+              combobox. -->
+        <attribute name="attachoffset" value="-1" type="number"/>
+        <!--- Whether a scrollbar should automatically show up when there are more
+              items than shownitems. -->
+        <attribute name="autoscrollbar" value="true"/>   
+
+        <!--- The border size ( in pixels ) of the popup list.  -->
+        <attribute name="bordersize"   value="1" />      
+        
+        <attribute name="currentValue" type="string" value="" />
+        
+        <!--- refernce to the current selected item -->
+        <attribute name="_selected" value="null" />    
+        
+        <method name="addAndSelectItem" args="txt,id">
+            this.cblist.addItem(txt,id);
+            this.currentValue = id;
+            this.setAttribute('text',txt);
+        </method>    
+        
+        <method name="setSelection" args="obj">
+            this._selected = obj;
+            this.currentValue = obj.value;
+            this.setAttribute('text',obj.text);
+            this.setOpen(false,true);
+            this.onselect.sendEvent();
+        </method>    
+        
+        <handler name="onselect" args="obj" />
+        
+        <method name="getValue">
+            return this.currentValue;
+        </method>
+
+                    <!-- arrow down and up both popup floatinglist, and pass the key event to it -->
+        <handler name="onkeydown" args="key">
+            <![CDATA[
+                //Debug.write("onkeydown: ",key);
+                // 38 is up-arrow
+                // 40 is down-arrow
+                // 32 is space
+                // 13 is return
+                if ((key==38) || (key==40)) {
+                    if (!this.isopen) {
+                        this.setOpen(true, true); // open, withKey
+                    } else {
+                        lz.Focus.setFocus(this.cblist, true);
+                    }
+                    // pass the key event on to the floatinglist
+                    this.cblist.onkeydown.sendEvent(key);
+                } else if (key==27){
+                    if (!this.isopen) {
+                        this.setOpen(true, true); // open, withKey
+                    } else {
+                        lz.Focus.setFocus(this.cblist, true);
+                    }
+                    this.cblist.onkeydown.sendEvent(key);
+                } else if (key!=13 && key!=9){
+                    //Don't handle Enter and Tab Events cause it will open the listItems
+                    ////Debug.write("onkeydown txt: ",this.getText());
+                    if (!this.initSelect){
+                        ////Debug.write("onvalue: ",txt,this);
+                        if (!this.timerIsInited){
+                            this.timerIsInited = true;
+                            this.timerDelegate = new LzDelegate( this, "validatedText" );
+                            ////Debug.write("+++++++++++++++++ addTimer");
+                            //Debug.write("+++++++++++++++++ removeTimer ",lz.Timer.countTimers());
+                            lz.Timer.addTimer( this.timerDelegate, this.typetime );
+                        } else {
+                            ////Debug.write("############### resetTimer NO ADDING ");
+                            //Debug.write("############### resetTimer ",lz.Timer.countTimers());
+                            lz.Timer.resetTimer( this.timerDelegate, this.typetime );
+                        }
+                    } else {
+                        this.initSelect = false;
+                    }
+                }
+            ]]>
+        </handler>
+        
+        <method name="validatedText">
+            <![CDATA[
+                ////Debug.write("validatedText: ",this.getText());
+                //this.reset();
+                if (!this.initSelect){
+                    var t = this.validate_method(this.getText());
+                    ////Debug.write('t: ',t.length);
+                    //this.parent._cblist.setAttribute('visible',true);
+                    this.cblist.removeAllItems();
+                    for (var i=0;i<t.length;i++){
+                        ////Debug.write(t[i][this.resultName],t[i][this.resultId]);
+                        this.cblist.addItem(t[i][this.resultName],t[i][this.resultId]);
+                    }                
+
+                    ////Debug.write("validateText: ",this.getText());
+                    if (!this.isopen) {
+                        this.setOpen(true, true); // open, withKey
+                    }
+                    this.timerIsInited = false;
+                } else {
+                    this.initSelect=false;
+                    this.timerIsInited = false;
+                }
+            ]]>
+        </method>	
+        
+        <attribute name="isopen" value="false" type="boolean" setter="this.setOpen(isopen)" />
+        
+        <handler name="onisopen" args="bool" />
+        
+        <method name="setOpen" args="open, withkey" >
+            if (!this.isinited) {
+                this.isopen = open;
+                return;
+            }
+            if (open) { // open combox
+                if (this.isopen) return; // tends to get called more than once, esp when
+
+                this.cblist.bringToFront();
+                this.cblist.setVisible(true);
+
+                this.isopen = true;
+                if (this['onisopen']) this.onisopen.sendEvent(true);
+            } else { // close combox
+                if (!this['isopen']) return;
+                this.isopen = false;
+
+                this.cblist.setVisible(false);
+                if (this['onisopen']) this.onisopen.sendEvent(false);
+                if ( lz.Focus.getFocus() == this.cblist ) {
+                    lz.Focus.setFocus(this, withkey);
+                }
+            }
+        </method>           
+
+        <floatinglist name="cblist"
+                      width="${owner.width - 1}"
+                      bordersize="${this.owner.bordersize}"
+                      spacing="${this.owner.spacing}"
+                      visible="false"
+                      shownitems="${this.owner.shownitems}"
+                      attach="bottom"
+                      attachoffset="${this.owner.attachoffset}"
+                      multiselect="false"
+                      autoscrollbar="${owner.autoscrollbar}" >
+
+            <method name="_dokeyup" args="kc"
+                    event="onkeyup">
+                if (kc == 27) {  // escape needs to close floating list
+                    this.owner.setOpen(false);
+                }
+            </method>
+            <method name="removeAllItems" args="index"> 
+                for (var eg in _contentview.subviews){
+                    _removeitem(_contentview.subviews[eg]); 
+                } 
+            </method>	
+            <handler name="onselect" args="obj">
+                ////Debug.write("obj: ",obj);
+                this.owner.setSelection(obj);
+            </handler>	            	
+        </floatinglist>        
+        
+         <handler name="onclick" reference="lz.GlobalMouse" args="who">
+           <![CDATA[ 
+               //need to use lz.GlobalMouse, since we don't get clicks if we're
+               //checked. NB that lz.GlobalMouse sends its events before the view
+               //receives the events, so we can just unlock it here, and the
+               //checkbox can do its normal onclick handling.
+               //Debug.write("onclick lz.GlobalMouse",lz.GlobalMouse,who);
+               //if (who != this.cblist && who.childOf(this.cblist)){
+               //    this.setOpen(false,false);
+               //} 
+               // LPP-3165
+           ]]>
+         </handler>        
+
+    </class>
+	
+
+	<validText y="20" width="270" name="_validbox" 
+        shownitems="7" validate_method="$once{ canvas.validateCountry }" 
+        resultId="state_id" resultName="name" />
+    
+    <button x="300" y="20" text="getValues">
+        <handler name="onclick">
+            //Debug.write(parent._validbox.getValue());
+            //Debug.write(parent._validbox.getText());
+            //Debug.write(parent._validbox._selected);
+        </handler>
+    </button>
+    
+ </canvas>
diff --git a/WebContent/src/test/simpletimertest.lzx b/WebContent/src/test/simpletimertest.lzx
new file mode 100644
index 0000000..521baba
--- /dev/null
+++ b/WebContent/src/test/simpletimertest.lzx
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas height="400" debug="true">
+    
+    <include href="lz/button.lzx" />
+ 
+    <simplelayout axis="y" spacing="10" />
+
+    <text name="myText" opacity="0.0" bgcolor="#CCCCCC">The Invisible Man</text>
+     
+     
+    <edittext >
+        <attribute name="timerDelegate" value="null"/>
+        <attribute name="typetime" type="number" value="2000"/>
+        <attribute name="timerIsInited" value="false" type="boolean"/>
+     
+        <handler name="onvalue">
+            //Debug.write("onvalue");
+            if (!this.timerIsInited){
+                this.timerIsInited = true;
+                canvas.myText.setAttribute( "opacity", 1.0 );
+                this.timerDelegate = new LzDelegate( this, "fadeText" );
+                //Debug.write("+++++++++++++++++ addTimer");
+                lz.Timer.addTimer( this.timerDelegate, this.typetime );
+            } else {
+                //Debug.write("############### resetTimer NO ADDING ");
+                lz.Timer.resetTimer( this.timerDelegate, this.typetime );
+            }
+        </handler>
+     
+        <method name="fadeText">
+            this.timerIsInited = false;
+            //Debug.write("fadeText ");
+            canvas.myText.animate( "opacity", 0.0, 1000 );
+        </method>
+    </edittext>
+    
+    
+ 
+ </canvas>
diff --git a/WebContent/src/test/swf/Google.swf b/WebContent/src/test/swf/Google.swf
new file mode 100644
index 0000000..061e1d3
--- /dev/null
+++ b/WebContent/src/test/swf/Google.swf
Binary files differ
diff --git a/WebContent/src/test/swf/main.lzx b/WebContent/src/test/swf/main.lzx
new file mode 100644
index 0000000..2ee557a
--- /dev/null
+++ b/WebContent/src/test/swf/main.lzx
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<canvas debug="true" width="100%" height="100%" fontsize="14" title="OpenMeetings - Computer testing">
+	
+	<debug fontsize="14" oninit="Debug.showInternalProperties = true"/>
+
+<button text="load SWF">
+    <handler name="onclick">
+        <![CDATA[
+	        if ($debug) Debug.write("load SWF");
+	        //parent.myView._swfView.setAttribute("src","Google.swf");
+	        parent.myView._swfView.setSource("http://localhost:5080/openmeetings/DownloadHandler?fileName=Google.swf&moduleName=videoconf1&parentPath=/Google&room_id=1&sid=a498726852b649da3cce4a5ee9cb3a9b");
+	        //parent.myView._swfView.setSource("http://localhost:5080/openmeetings/Google.swf");
+        ]]>
+    </handler>
+</button>
+
+<view name="myView" y="20">
+    <!--
+    play="false" stretches="both"
+     -->
+    <view name="_swfView" >
+        <handler name="onframe" args="i">
+            ////Debug.write("onframe",i);
+        </handler>
+        
+        <handler name="onplay" args="i">
+            ////Debug.write("onplay",i);
+        </handler>
+        
+        <handler name="onstop" args="i">
+            ////Debug.write("onstop",i);
+        </handler>
+        
+        <handler name="onload">
+            <![CDATA[
+                Debug.write("onload: ",this);
+            ]]>
+        </handler>
+        <handler name="onerror" args="error">
+            <![CDATA[
+                Debug.write("onerror "+error);
+            ]]>
+        </handler>
+        <handler name="ontimeout" args="error">
+            <![CDATA[
+                Debug.write("ontimeout "+error);
+            ]]>
+        </handler> 
+    </view>
+</view>
+
+</canvas>
diff --git a/WebContent/src/test/swf/main.lzx.lzr=swf8.swf b/WebContent/src/test/swf/main.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..e766630
--- /dev/null
+++ b/WebContent/src/test/swf/main.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/test/test-arrow.lzx b/WebContent/src/test/test-arrow.lzx
new file mode 100644
index 0000000..6bcd29b
--- /dev/null
+++ b/WebContent/src/test/test-arrow.lzx
@@ -0,0 +1,285 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<canvas debug="true" width="500" height="100%" >
+	
+	<debug oninit="Debug.showInternalProperties = true"/>
+	
+<class name="drawViewNew" extends="drawview" cachebitmap="false" x="-1" y="-1" >
+    
+</class>
+
+<drawview>
+    
+    <handler name="onconstruct">
+        <![CDATA[
+            //var pStart = {'x':100,'y':100};
+            //var pEnd = {'x':200,'y':200};
+            
+            var p = new flash.geom.Point(100,100);
+            var pEnd = new flash.geom.Point(100,200);
+            if ($debug) Debug.write("p",p);
+            
+            var normalizedPoint = new flash.geom.Point(-2, 4);
+			if ($debug) Debug.write(normalizedPoint.length); // 5
+			if ($debug) Debug.write(normalizedPoint.toString()); // (x=3, y=4)
+			normalizedPoint.normalize(10);
+			if ($debug) Debug.write(normalizedPoint.length); // 10
+			if ($debug) Debug.write(normalizedPoint.toString()); // (x=6, y=8)
+            
+            
+            var normalizedPoint = new flash.geom.Point(2, -4);
+            if ($debug) Debug.write(normalizedPoint.length); // 5
+            if ($debug) Debug.write(normalizedPoint.toString()); // (x=3, y=4)
+            normalizedPoint.normalize(10);
+            if ($debug) Debug.write(normalizedPoint.length); // 10
+            if ($debug) Debug.write(normalizedPoint.toString()); // (x=6, y=8)
+            
+            //normalizedPoint.normalize(5);
+            //if ($debug) Debug.write(normalizedPoint.length); // 10
+            //if ($debug) Debug.write(normalizedPoint.toString()); // (x=3, y=4)
+
+            if ($debug) Debug.write("##################");
+            
+            var pArrowStart = new flash.geom.Point(100,100);
+	        var pArrowEnd = new flash.geom.Point(200,100);
+	        
+	        var obj = new lz.drawViewNew(canvas);
+	        
+	        this.drawArrow(obj,pArrowStart,pArrowEnd,4);
+        ]]>
+    </handler>
+    
+    <method name="test">
+        var p1 = p.normalize(1);
+        if ($debug) Debug.write("p1",p1);
+        
+        var p11 = flash.geom.Point.interpolate(p,pEnd,0.5);
+        if ($debug) Debug.write("p11",p11);
+        
+        
+        var p12 = pEnd.subtract(p);
+        if ($debug) Debug.write("p12",p12);
+        
+        
+        var pArrowStart = new flash.geom.Point(100,100);
+        var pArrowEnd = new flash.geom.Point(200,200);
+        
+        var obj = new lz.drawViewNew(canvas);
+        
+        this.drawArrow(obj,pArrowStart,pArrowEnd,4);
+        
+        pArrowStart = new flash.geom.Point(300,300);
+        pArrowEnd = new flash.geom.Point(200,200);
+        obj = new lz.drawViewNew(canvas);
+        this.drawArrow(obj,pArrowStart,pArrowEnd,20);
+        
+        pArrowStart = new flash.geom.Point(600,300);
+        pArrowEnd = new flash.geom.Point(200,100);
+        obj = new lz.drawViewNew(canvas);
+        this.drawArrow(obj,pArrowStart,pArrowEnd,20);
+        
+        var p1 = new flash.geom.Point(-60, -100);
+        var p2 = new flash.geom.Point(20, 50);
+        var f = 0.5;
+        
+        var p3 = flash.geom.Point.interpolate(p1,p2,f);
+        if ($debug) Debug.write("p3",p3);
+    </method>
+    
+    <method name="drawArrow" args="graphics,start,end,thickness">
+        <![CDATA[
+    //(graphics:Graphics,
+    //            start:Point,end:Point,
+    //            style:Object=null):void {
+            
+            if (start.equals(end)) return;
+            
+            
+            var arrowStyle = {'shaftControlPosition':0.5,
+                    'shaftControlSize':0.5,
+                    'headLength':thickness*5, //Pixel Length of arrow head
+                    'headWidth':thickness*5,//Relative width of arrow head
+                    'edgeControlPosition':0.5,
+                    'edgeControlSize':0.5,
+                    'shaftPosition':0,
+                    'shaftThickness':thickness
+                    };
+            
+            var fullVect:Point = end.subtract(start);
+            var halfWidth:Number = (arrowStyle.headWidth != -1) ? arrowStyle.headWidth/2 : arrowStyle.headLength/2; 
+            
+            //Figure out the line start/end points
+            var startNorm = new flash.geom.Point(fullVect.y,-fullVect.x);
+            startNorm.normalize(arrowStyle.shaftThickness/2);
+            var start1 = start.add(startNorm);
+            var start2 = start.subtract(startNorm);
+            var end1 = end.add(startNorm);
+            var end2 = end.subtract(startNorm);
+            
+            //if ($debug) Debug.write("startNorm: ",startNorm.toString());
+            //if ($debug) Debug.write("start1: ",start1.toString());
+            //if ($debug) Debug.write("start2: ",start2.toString());
+            //if ($debug) Debug.write("end1: ",end1.toString());
+            //if ($debug) Debug.write("end2: ",end2.toString());
+            
+            //figure out where the arrow head starts
+            var headPnt = fullVect.clone();
+            //if ($debug) Debug.write("headPnt 1: ",headPnt.toString());
+            //if ($debug) Debug.write("headPnt.length 1: ",headPnt.length);
+            //if ($debug) Debug.write("arrowStyle.headLength 1: ",arrowStyle.headLength);
+            headPnt.normalize(headPnt.length-arrowStyle.headLength);
+            //if ($debug) Debug.write("headPnt 2: ",headPnt.toString());
+            headPnt = headPnt.add(start);
+            //if ($debug) Debug.write("headPnt 3: ",headPnt.toString());
+            
+            //calculate the arrowhead corners
+            var headPntNorm = startNorm.clone();
+            //if ($debug) Debug.write("headPntNorm ^^: ",headPntNorm.toString());
+            //if ($debug) Debug.write("halfWidth ^^: ",halfWidth);
+            headPntNorm.normalize(halfWidth);
+            //if ($debug) Debug.write("headPntNorm: ",headPntNorm.toString());
+            var edge1 = headPnt.add(headPntNorm);
+            var edge2 = headPnt.subtract(headPntNorm);
+            
+            //if ($debug) Debug.write("edge1: ",edge1.toString());
+            //if ($debug) Debug.write("edge2: ",edge2.toString());
+            
+            //Figure out where the arrow connects the the shaft, then calc the intersections
+            var shaftCenter = flash.geom.Point.interpolate(end,headPnt,arrowStyle.shaftPosition);
+            //if ($debug) Debug.write("end: ",end.toString());
+            //if ($debug) Debug.write("headPnt",headPnt.toString());
+            //if ($debug) Debug.write("arrowStyle.shaftPosition: ",arrowStyle.shaftPosition);
+            //if ($debug) Debug.write("shaftCenter",shaftCenter.toString());
+            var inter1 = this.getLineIntersection(start1,end1,shaftCenter,edge1);
+            var inter2 = this.getLineIntersection(start2,end2,shaftCenter,edge2);
+            
+            //if ($debug) Debug.write("inter1: ",inter1.toString());
+            //if ($debug) Debug.write("inter2: ",inter2.toString());
+            
+            //Figure out the control points
+            var edgeCenter = flash.geom.Point.interpolate(end,headPnt,arrowStyle.edgeControlPosition);
+            var edgeNorm = startNorm.clone();
+            edgeNorm.normalize(halfWidth*arrowStyle.edgeControlSize);
+            //if ($debug) Debug.write("halfWidth*arrowStyle.edgeControlSize: "+(halfWidth*arrowStyle.edgeControlSize));
+            //if ($debug) Debug.write("edgeNorm: "+edgeNorm.toString());
+            var edgeCntrl1 = edgeCenter.add(edgeNorm);
+            var edgeCntrl2 = edgeCenter.subtract(edgeNorm);
+
+            //if ($debug) Debug.write("edgeCntrl1: ",edgeCntrl1.toString());
+            //if ($debug) Debug.write("edgeCntrl2: ",edgeCntrl2.toString());
+
+            //if ($debug) Debug.write("moveTo: ",start1.x,start1.y);
+            //if ($debug) Debug.write("lineTo",inter1.x,inter1.y);
+            //if ($debug) Debug.write("lineTo",edge1.x,edge1.y);
+            //if ($debug) Debug.write("quadraticCurveTo",edgeCntrl1.x,edgeCntrl1.y,end.x,end.y);
+            //if ($debug) Debug.write("quadraticCurveTo",edgeCntrl2.x,edgeCntrl2.y,edge2.x,edge2.y);
+            //if ($debug) Debug.write("lineTo",inter2.x,inter2.y);
+            //if ($debug) Debug.write("lineTo",start2.x,start2.y);
+            //if ($debug) Debug.write("lineTo",start1.x,start1.y);
+            
+            graphics.moveTo(start1.x,start1.y);
+            graphics.lineTo(inter1.x,inter1.y);
+            graphics.lineTo(edge1.x,edge1.y);
+            graphics.quadraticCurveTo(edgeCntrl1.x,edgeCntrl1.y,end.x,end.y);
+            graphics.quadraticCurveTo(edgeCntrl2.x,edgeCntrl2.y,edge2.x,edge2.y);
+            graphics.lineTo(inter2.x,inter2.y);
+            graphics.lineTo(start2.x,start2.y);
+            graphics.lineTo(start1.x,start1.y);
+            
+            graphics.strokeStyle = 0x000000;
+            graphics.stroke();
+
+            graphics.fillStyle = 0x000000;
+            graphics.fill();
+        ]]>
+    </method>
+    
+    <method name="getLineIntersection" args="a1,a2,b1,b2">
+        <![CDATA[ 
+        
+            //calculate directional constants
+            var k1 = (a2.y-a1.y) / (a2.x-a1.x);
+            var k2 = (b2.y-b1.y) / (b2.x-b1.x);
+            
+            // if the directional constants are equal, the lines are parallel,
+            // meaning there is no intersection point.
+            if( k1 == k2 ) return null;
+            
+            var x = 0;
+            var y = 0;
+            var m1 = 0;
+            var m2 = 0;
+            
+            //if ($debug) Debug.write("k1",k1);
+            //if ($debug) Debug.write("k2",k2);
+            
+            // an infinite directional constant means the line is vertical
+            if( !isFinite(k1) ) {
+                
+                //if ($debug) Debug.write("k1 ^^ 0");
+                //if ($debug) Debug.write("k2",k2,(b2.y-b1.y));
+                //if ($debug) Debug.write("b1.getY(): "+b1.y);
+                //if ($debug) Debug.write("b2.getY(): "+b2.y);
+                // so the intersection must be at the x coordinate of the line
+                x = a1.x;
+                m2 = b1.y - k2 * b1.x;
+                //if ($debug) Debug.write("m2",m2);
+                y = k2 * x + m2;
+                //if ($debug) Debug.write("y",y);
+                
+            // same as above for line 2
+            } else if ( !isFinite(k2) ) {
+                
+                //if ($debug) Debug.write("k2 ^ 0");
+                
+                m1 = a1.y - k1 * a1.x;
+                x = b1.x;
+                y = k1 * x + m1;
+
+            // if neither of the lines are vertical
+            } else {
+                
+                //if ($debug) Debug.write("neither");
+            
+                m1 = a1.y - k1 * a1.x;
+                m2 = b1.y - k2 * b1.x;              
+                x = (m1-m2) / (k2-k1);
+                y = k1 * x + m1;
+                
+            }
+            
+            return new flash.geom.Point(x,y);
+        ]]>
+    </method>
+    
+    <method name="intermediatePoint" args="p1,p2,f">
+        <![CDATA[
+            
+            var d = Math.sqrt( Math.abs(p1.x - p2.x)^2 + Math.abs(p2.y - p2.y)^2 );
+        
+        ]]>
+    </method>
+    
+</drawview>
+  
+    
+</canvas>
diff --git a/WebContent/src/test/test-baseDraw.lzx b/WebContent/src/test/test-baseDraw.lzx
new file mode 100644
index 0000000..e62cae6
--- /dev/null
+++ b/WebContent/src/test/test-baseDraw.lzx
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<canvas debug="true" width="100%" height="100%" >
+	
+	<debug fontsize="14" oninit="Debug.showInternalProperties = true"/>
+	
+<drawview x="0" y="0" width="100" height="100">
+	
+	<handler name="onwidth">
+		Debug.write(this.isinited);
+	</handler>
+	
+	<handler name="onheight">
+		Debug.write(this.isinited);
+	</handler>
+	
+</drawview>
+  
+    
+</canvas>
diff --git a/WebContent/src/test/test-drawview.lzx b/WebContent/src/test/test-drawview.lzx
new file mode 100644
index 0000000..d447b49
--- /dev/null
+++ b/WebContent/src/test/test-drawview.lzx
@@ -0,0 +1,56 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" width="1000" height="800">
+
+    <debug x="250" height="500" /> 
+
+    <drawview width="200" height="100">
+        
+        <handler name="oninit">
+            this.drawBody(this,0,0,this.width,this.height,0xff3300,2);
+        </handler>
+        
+        <handler name="onclick">
+            this.drawBody(this,0,0,this.width,this.height,0xff3300,2);
+        </handler>
+        
+        <method name="drawBody" args="targetObj,x1,y1,x2,y2,fill,lineWidth">
+        <![CDATA[
+            
+            if ($debug) Debug.write("drawBody: ",targetObj,lineWidth);
+        
+            targetObj.lineWidth = lineWidth;
+            targetObj.beginPath();
+            targetObj.moveTo(x1,y1);
+            targetObj.lineTo(x1,y2);
+            targetObj.lineTo(x2,y2);
+            targetObj.lineTo(x2,y1);
+            targetObj.lineTo (x1,y1);
+            targetObj.closePath();
+
+            targetObj.fillStyle = fill;
+            targetObj.fill();
+            
+        ]]>   
+    </method>   
+        
+    </drawview>
+
+</canvas>
diff --git a/WebContent/src/test/test-menubar.lzx b/WebContent/src/test/test-menubar.lzx
new file mode 100644
index 0000000..083ecdf
--- /dev/null
+++ b/WebContent/src/test/test-menubar.lzx
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<canvas debug="true" width="100%" height="100%" fontsize="14" title="OpenMeetings - Computer testing">
+	
+	<debug fontsize="14" oninit="Debug.showInternalProperties = true"/>
+    
+    <!-- private class for conferenceMenubar class -->
+    <class name="_labelMenuItem" extends="menuitem" text="labelmenulabelmenulabelmenu">
+        <attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+        <method name="setLabelId" args="_labelid" >
+            this.labelid = _labelid;
+            this.setAttribute('text',"text "+this.labelid);
+        </method>
+    </class>    
+        
+    <!-- private class for conferenceMenubar class -->
+    <class name="_labelMenu" extends="menu" text="labelmenulabelmenulabelmenu">
+        <attribute name="labelid" type="number" setter="setLabelId(labelid)" />
+        <method name="setLabelId" args="_labelid" >
+            this.labelid = _labelid;
+            this.setAttribute('text',"text "+this.labelid);
+        </method>
+    </class>  
+    
+    <class name="conferenceMenubar" extends="menubar" height="28" >
+       <!-- exit room -->
+        <_labelMenu labelid="308" width="250">
+            <_labelMenuItem labelid="309" />
+        </_labelMenu>
+        <!-- moderator menu -->
+        <_labelMenu labelid="301" width="250">
+            <_labelMenuItem labelid="302" />
+        </_labelMenu>
+        <!-- file menu -->
+        <_labelMenu labelid="245" width="250">
+            <_labelMenuItem labelid="15" />
+        </_labelMenu>    
+       <!-- setteings menu --> 
+        <_labelMenu labelid="305" width="250">
+            <_labelMenuItem labelid="306" />
+            <_labelMenuItem labelid="307" />
+        </_labelMenu>   
+        <!-- poll memu -->     
+        <_labelMenu labelid="303" width="250">
+            <_labelMenuItem width="250" labelid="24" />
+            <_labelMenuItem width="250" labelid="37" />
+            <_labelMenuItem width="250" labelid="42" />
+        </_labelMenu>    
+    </class>    
+    
+    
+    <handler name="oninit">
+        new lz.conferenceMenubar(canvas);
+    </handler>
+    
+</canvas>
diff --git a/WebContent/src/test/test-regExp.lzx b/WebContent/src/test/test-regExp.lzx
new file mode 100644
index 0000000..088728e
--- /dev/null
+++ b/WebContent/src/test/test-regExp.lzx
@@ -0,0 +1,90 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" >
+  
+
+      <script when="immediate" >        
+        class LzRegExp extends Instance{
+          static var regexp_cnt = 0;
+          
+          static function initialize(){
+
+              /* if this was in the html-wrapper, would early instantiations be successful? */
+              lz.Browser.loadJS( "window.__lzregexp={};" + 
+                "window.__createRegExp=function(id,re,mod){window.__lzregexp[id]=new RegExp(re,mod);return true};" +
+                "window.__testRegExp=function(id,s){return window.__lzregexp[id].test(s)};" +
+                "window.__execRegExp=function(id,s){return window.__lzregexp[id].exec(s)};" +
+                "window.__deleteRegExp=function(id){delete window.__lzregexp[id]};" 
+              );
+
+          }
+          
+          function initialize( regexp, mod ){
+            super.initialize( this, arguments );
+
+              this.regexp_id = LzRegExp.regexp_cnt++;
+              this.__isready = true;
+              
+              var me = this;
+              lz.Browser.callJS( "window.__createRegExp", function(res){me.__isready = res == true}, this.regexp_id, regexp, mod );
+
+          }
+          
+          function test( s ){
+              if( this.__isready ){
+                return flash.external.ExternalInterface.call.apply( flash.external.ExternalInterface, ["window.__testRegExp", this.regexp_id, s] );
+              } else {
+                Debug.format( "called %w too early", arguments.callee.name );
+              }
+          }
+          
+          function exec( s ){
+              if( this.__isready ){
+                return flash.external.ExternalInterface.call.apply( flash.external.ExternalInterface, ["window.__execRegExp", this.regexp_id, s] );
+              } else {
+                Debug.format( "called %w too early", arguments.callee.name );
+              }
+          }
+          
+          function destroy(){
+            lz.Browser.callJS( "window.__deleteRegExp", null, this.regexp_id );
+          }
+        }
+      </script>
+
+  <button name="btn" text="test" />
+  
+  <handler name="oninit" reference="canvas" method="testRegExp" />
+  <handler name="onclick" reference="btn" method="testRegExp" />
+  
+  <method name="testRegExp" >
+    var regexp = new LzRegExp( ".ello" );
+    Debug.write( regexp.test( "Hello" ) );
+    Debug.write( regexp.test( "Hallo" ) );
+    regexp.destroy();
+
+    global.regexpflag = global["regexpflag"] == true;
+    if( !global.regexpflag ){
+      global.regexpflag = true;
+      lz.Timer.addTimer( new LzDelegate( canvas, "testRegExp" ), 500 );
+    }
+  </method>
+  
+</canvas>
diff --git a/WebContent/src/test/test-regExp.lzx.lzr=swf8.swf b/WebContent/src/test/test-regExp.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..df4a310
--- /dev/null
+++ b/WebContent/src/test/test-regExp.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/test/test-regExp2.lzx b/WebContent/src/test/test-regExp2.lzx
new file mode 100644
index 0000000..efedaf0
--- /dev/null
+++ b/WebContent/src/test/test-regExp2.lzx
@@ -0,0 +1,77 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" >
+  <script>
+    _browserjavascriptcallback = "";
+  </script>
+  
+     <attribute name="lzappId" type="string" value="lzapp" />
+     <attribute name="timer" type="number" value="10" />
+     <attribute name="prevalue" type="string" value="_browserjavascriptcallbackprevalue" />
+     <attribute name="value" />
+     
+     <handler name="onvalue" args="v">
+     	if ($debug) Debug.write("onvalue: ",v);
+     	
+     </handler>
+     
+	<edittext name="_hand" />
+  
+  <button name="btn" y="20" text="test" onclick="canvas.testRegExp()" />
+
+  <method name="testRegExp2">
+  	<![CDATA[
+  		var regExp = "[0-9]*";
+  		
+    	var fieldValue = this._hand.getText();
+  	    
+    	var returnValue = flash.external.ExternalInterface.call("replace",fieldValue,escape(regExp),escape);
+    	if ($debug) Debug.write("returnValue: ",returnValue);
+	]]>
+ </method>
+ 
+ <method name="testRegExp" >
+ 	<![CDATA[
+	var fieldValue = "9";
+	var regExp = "[0-9]*";
+    var regex = "/^"+regExp+"$/";
+    var script = "( !( (\""+ fieldValue +"\".replace("+ regex +" ,\"\").length == 0) && ( "+ regex +".test(\""+ fieldValue +"\")) ) ) ";
+  
+	var t = script.split("'").join("\\'");
+	var s = "document.getElementById('"+ lzappId + "').SetVariable('_browserjavascriptcallback', escape((" + t + ")));"
+
+	
+		lz.Browser.loadJS(s);
+		
+		if(typeof this.callDelegate == 'undefined')
+		this.callDelegate = new LzDelegate( this, "callback" );
+		lz.Timer.resetTimer( this.callDelegate, timer );
+		]]>
+   </method>
+
+ <method name="callback">
+	if(unescape(_browserjavascriptcallback) == this.prevalue)
+	lz.Timer.resetTimer( this.callDelegate, timer );
+	else
+	setAttribute("value", unescape(_browserjavascriptcallback));
+ </method>
+
+
+</canvas>
diff --git a/WebContent/src/test/test-regExp2.lzx.lzr=swf8.swf b/WebContent/src/test/test-regExp2.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..4d97d95
--- /dev/null
+++ b/WebContent/src/test/test-regExp2.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/test/test-regexp.html b/WebContent/src/test/test-regexp.html
new file mode 100644
index 0000000..26f4890
--- /dev/null
+++ b/WebContent/src/test/test-regexp.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html>
+<head>

+	<link rel="shortcut icon" href="favicon.ico" > 
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+	<title>vMapPortal</title>

+	<script type="text/javascript" src="swfobject.js"></script>

+	<style type="text/css">

+		

+		/* hide from ie on mac \*/

+		html {

+			height: 100%;

+			overflow: hidden;

+		}

+		

+		#flashcontent {

+			height: 100%;

+		}

+		/* end hide */

+	

+		body {

+			height: 100%;

+			margin: 0;

+			padding: 0;

+			background-color: #ffffff;

+		}

+	

+	</style>
+</head>
+<body onLoad="focusSWF()">

+

+

+	<div id="flashcontent">

+		<strong>You need to upgrade your Flash Player</strong>

+		This is replaced by the Flash content. 

+		Place your alternate content here and users without the Flash plugin or with 

+		Javascript turned off will see this. Content here allows you to leave out <code>noscript</code> 

+		tags.

+	</div>

+	

+	<script type="text/javascript">

+		// <![CDATA[

+		

+		var so = new SWFObject("portal.swf", "lzapp", "100%", "100%", "8", "#ffffff");

+		so.addParam("quality", "high");

+		so.addParam("id", "lzapp");

+		so.addParam("allowScriptAccess", "always");

+		so.addParam("scale", "noscale");

+		so.write("flashcontent");

+		

+		function focusSWF(){

+		

+		    if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){

+		    }else {

+		        document.getElementById('lzapp').focus();

+		    }

+		}   		

+		

+		// ]]>

+	</script>	

+

+

+</body>
+</html>
\ No newline at end of file
diff --git a/WebContent/src/test/test-scrollEdittext.lzx b/WebContent/src/test/test-scrollEdittext.lzx
new file mode 100644
index 0000000..0f820f1
--- /dev/null
+++ b/WebContent/src/test/test-scrollEdittext.lzx
@@ -0,0 +1,37 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" width="1000" height="800">
+
+    <debug x="250" height="500" /> 
+
+    <include href="scrolledittext.lzx"/>
+
+    <scrolledittext name="_scrolledittext" y="130" x="120" width="270" height="120"
+                                  text="" />
+                                  
+                                  
+    <view width="200" height="100" y="300" x="100" bgcolor="0xFFFFFF">
+        <inputtext multiline="true" width="${ parent.width - 14 }">
+            
+        </inputtext>
+        <om_vscrollbar />
+    </view>
+
+</canvas>
diff --git a/WebContent/src/test/test-setup.lzx b/WebContent/src/test/test-setup.lzx
new file mode 100644
index 0000000..60ecfab
--- /dev/null
+++ b/WebContent/src/test/test-setup.lzx
@@ -0,0 +1,564 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
+	license agreements. See the NOTICE file distributed with this work for additional 
+	information regarding copyright ownership. The ASF licenses this file to 
+	you under the Apache License, Version 2.0 (the "License"); you may not use 
+	this file except in compliance with the License. You may obtain a copy of 
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
+	by applicable law or agreed to in writing, software distributed under the 
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
+	OF ANY KIND, either express or implied. See the License for the specific 
+	language governing permissions and limitations under the License. -->
+<canvas debug="true" height="100%" title="Audio-Video Test-Application">
+
+	<debug width="450" x="460" y="600" height="100" />
+
+	<switch>
+		<when property="$as3">
+			<passthrough>
+			    import flash.events.*;
+	            import flash.net.*;
+	            import flash.media.*
+			</passthrough>
+		</when>
+	</switch>
+	
+	<class name="myListItem" extends="textlistitem">
+	</class>
+
+	<!--- NetConnection -->
+	<attribute name="_nc" value="null" />
+
+	<!--- NetStream -->
+	<attribute name="_nsBroadCast" value="null" />
+	<attribute name="_nsPlay" value="null" />
+
+	<!--- devices - Reference -->
+	<attribute name="_camera" value="null" />
+	<attribute name="_micro" value="null" />
+
+	<method name="connectRtmpConnection">
+		this._nc = new NetConnection();
+		this._nc.proxyType = "best";
+		Debug.write("connectRtmpConnection URL:",url.getText());
+		this._nc.connect(url.getText());
+		
+		this._nc.addEventListener(NetStatusEvent.NET_STATUS, _onStatus);
+		var clientObj = {};
+   		clientObj.setId = this.setId;
+   		
+   		this._nc.client = clientObj;
+    		
+		//this._nc.onStatus = function(info){
+		//Debug.write(info.code,info);
+		//}
+	</method>
+	
+	<method name="setId" args="tId">
+		if ($debug) Debug.write("setId ", tId);
+	</method>
+	
+    <method name="_onStatus" args="stats"><![CDATA[
+        if ($debug) {
+            Debug.write("devrtmpconnection", this, "_onStatus", stats.info.code);
+        }
+      ]]>
+    </method>
+
+	<method name="startBroadCast">
+	<![CDATA[
+	    if ($debug) Debug.write("startBroadCast 1");
+	    if (this._camera != null) {
+		  this._camera = Camera.getCamera(camDevices.getValue());
+		}
+		if ($debug) Debug.write("startBroadCast 2");
+		//sets the Mode
+		//see: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/Camera.html#setMode%28%29
+		if (this._camera != null) this._camera.setMode(Number(streamwidth.getText()),Number(streamheight.getText()),Number(streamfps.getText()),streamfavorarea.getValue());	
+		if ($debug) Debug.write("startBroadCast 3");
+		//sets the Quality
+		//see: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/Camera.html#setQuality%28%29
+		if (this._camera != null) this._camera.setQuality(Number(streambandwidth.getText()),Number(streamquality.getText()));	
+		if ($debug) Debug.write("startBroadCast 4");
+		if (useEnhancedMicrophone.getValue()) {
+			this._micro = Microphone.getEnhancedMicrophone(micDevices.getValue());
+			
+			if ($debug) Debug.write(this._micro.enhancedOptions);
+			
+		} else {
+			this._micro = Microphone.getMicrophone(micDevices.getValue());
+		}
+		if ($debug) Debug.write("startBroadCast 5");
+		this._micro.codec = SoundCodec.NELLYMOSER;
+		if ($debug) Debug.write("startBroadCast 6");
+		//sets the Microphone Rate in Khz
+		//see:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/Microphone.html#rate
+		this._micro.rate = Number(streamrate.getText());
+		if ($debug) Debug.write("startBroadCast 7");
+		this._micro.gain = 50;
+		if ($debug) Debug.write("startBroadCast 8");
+		//sets wether useEchoSupression should be used or not
+		//http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/Microphone.html#useEchoSuppression
+		this._micro.setUseEchoSuppression(streamuseEchoSuppression.getValue());
+		if ($debug) Debug.write("startBroadCast 9");
+		//attaches the Camera to the View
+		if (this._camera != null) broadCastVideo.attachVideo(this._camera);
+		if ($debug) Debug.write("startBroadCast 10");
+		this._nsBroadCast =  new NetStream(this._nc);
+		//see: http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/net/NetStream.html
+        //according to the docs the construct to catch event has to be implemented like this.
+        var t = this;
+		var clientObject = new Object();
+		if ($debug) Debug.write("startBroadCast 11");
+		clientObject.onMetaData = function(metadata:Object):void {
+			t.onMetaData(metadata);
+		};
+		clientObject.onPlayStatus = function(metadata:Object):void {
+			t.onPlayStatus(metadata);
+		};
+		clientObject.onCuePoint = function(metadata:Object):void {
+			t.onCuePoint(metadata);
+		};
+		clientObject.ioError = function(error:Object):void {
+			t.ioError(error);
+		};
+		clientObject.netStatus = function(status:Object):void {
+			t.netStatus(status);
+		};
+		clientObject.asyncError = function(error:Object):void {
+			t.asyncError(error);
+		};
+		if ($debug) Debug.write("startBroadCast 12");
+		this._nsBroadCast.client = clientObject;
+		//this is a workaround, attaching the event to the client object does not work
+		this._nsBroadCast.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus2);
+	    if ($debug) Debug.write("startBroadCast 13");
+		if (this._camera != null) this._nsBroadCast.attachCamera(this._camera);
+	    this._nsBroadCast.attachAudio(this._micro);
+	    if ($debug) Debug.write("startBroadCast 14");
+	    this._nsBroadCast.publish(streamname.getText(),"live");
+	    if ($debug) Debug.write("startBroadCast 15");
+    ]]>
+	</method>
+	
+	<method name="onNetStatus2" args="evt">
+		if($debug) Debug.write("netStream_onNetStatus: " , evt.info.code, evt.target);
+	</method>
+	
+	<method name="asyncError" args="error">
+		if($debug) Debug.write("simpleNetStream asyncError",error);
+	</method>
+	
+	<method name="netStatus" args="status">
+		if($debug) Debug.write("simpleNetStream netStatus",status);
+	</method>
+	
+	<method name="ioError" args="error">
+		if($debug) Debug.write("simpleNetStream ioError",error);
+	</method>
+
+    <method name="onCuePoint" args="info"><![CDATA[
+        if($debug) Debug.write("simpleNetStream onCuePoint",info);
+    ]]></method>
+
+    <method name="onPlayStatus" args="info"><![CDATA[
+        if($debug) Debug.write("simpleNetStream onPlayStatus",info);
+    ]]></method>
+
+    <method name="onMetaData" args="info"><![CDATA[
+        if($debug) Debug.write("simpleNetStream onMetaData",info);
+    ]]></method>
+
+	<method name="stopBroadCast">
+		this._nsBroadCast.publish(false);
+		broadCastVideo.attachVideo(null);
+		broadCastVideo.stopIt();
+		this._nsBroadCast.close();
+	</method>
+
+
+	<method name="playBroadCast">
+	<![CDATA[
+		//attaches the Camera to the View
+	
+		this._nsPlay =  new NetStream(this._nc);
+		//see: http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/net/NetStream.html
+        //according to the docs the construct to catch event has to be implemented like this.
+        var t = this;
+		var clientObject = new Object();
+		clientObject.onMetaData = function(metadata:Object):void {
+			t.onMetaData(metadata);
+		};
+		clientObject.onPlayStatus = function(metadata:Object):void {
+			t.onPlayStatus(metadata);
+		};
+		clientObject.onCuePoint = function(metadata:Object):void {
+			t.onCuePoint(metadata);
+		};
+		clientObject.ioError = function(error:Object):void {
+			t.ioError(error);
+		};
+		clientObject.netStatus = function(status:Object):void {
+			t.netStatus(status);
+		};
+		clientObject.asyncError = function(error:Object):void {
+			t.asyncError(error);
+		};
+		this._nsPlay.client = clientObject;
+		//this is a workaround, attaching the event to the client object does not work
+		this._nsPlay.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus2);
+	
+	    //sets the Buffer for the Playing
+	    //see: http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00002567.html#wp393038
+	    //this._nsPlay.setBufferTime(Number(this.streambuffer.getText())); 
+	    //=> disabled, cause this leads to Buffer-Full-Buffer-Empty-Events after re-syncing
+		playVideo.attachVideo(this._nsPlay);
+	    
+	    this._nsPlay.play(streamname.getText(),-1);
+    ]]>
+	</method>
+
+	<method name="stopPlayBroadCast">
+		this._nsPlay.pause();
+		this._nsPlay.close();
+		playVideo.attachVideo(null);
+		playVideo.stopIt();
+	</method>
+
+	<view layout="axis:y;spacing:4" width="450" x="0">
+		<text fontstyle="bold"
+			text="Connection - Settings (user for both BroadCasting and Subscribing)" />
+		<view width="450">
+			<text text="URL:" />
+			<edittext align="right" width="350" id="url"
+				text="rtmp://127.0.0.1:1935/openmeetings/testscope" />
+		</view>
+		<button align="right" width="200" text="connectRtmpConnection"
+			onclick="canvas.connectRtmpConnection()" />
+	</view>
+	<!-- some description -->
+	<text fontstyle="italic" y="0" width="450" multiline="true" x="450">
+		You can test all Settings of Audio and Video Streamings which are currently used in OpenMeetings here. <br /> 
+		Change the URL so that 127.0.0.1 points to your Red5-Installation! <br />
+		You first need to <b>connect</b> to a stream before you start to <b>broadcast</b>!<br />
+		You first need <b>broadcast</b> a stream with a name before you try to <b>subscribe</b> to it!<br />
+		If somebody already uses that streamname you get an NetStream *Bad.StreamName*, you can take an StreamName you like, but of course you have to tell the *player* that it will need to use that StreamName!
+		<br />
+	</text>
+
+	<checkbox name="modus" y="120"
+		text="Event Modus (320x240) or Conference Modus (128x96)" value="true">
+		<handler name="onvalue" args="v">
+			if (canvas.isinited) {
+				if (v){
+					broadCastVideo.setAttribute('width',320);
+					broadCastVideo.setAttribute('height',240);
+					broadCastVideo.applySizeToVid();
+					playVideo.setAttribute('width',320);
+					playVideo.setAttribute('height',240);
+					playVideo.applySizeToVid();
+				} else {
+					broadCastVideo.setAttribute('width',128);
+					broadCastVideo.setAttribute('height',96);
+					broadCastVideo.applySizeToVid();
+					playVideo.setAttribute('width',128);
+					playVideo.setAttribute('height',96);
+					playVideo.applySizeToVid();
+				}
+			}
+		</handler>
+	</checkbox>
+
+	<view bgcolor="black" width="${ canvas.width }" height="2" y="140" />
+
+	<!-- two columns left BroadCast, right Subscribe a Stream -->
+	<view y="144" height="$once{ canvas.height-this.y }" clip="true">
+		<!--- ScrollArea -->
+		<view layout="axis:x;spacing:10">
+			<!--- BroadCasting Area -->
+			<view layout="axis:y;spacing:4" width="450">
+
+				<!--- Video Area -->
+				<view id="broadCastVideo" bgcolor="black" width="320" height="240">
+				
+					<passthrough when="$as3">
+				        import flash.media.*;
+				        import flash.net.NetConnection;
+				        import flash.net.NetStream;
+				    </passthrough>
+				    
+				    <attribute name="__LZvideo" value="null" />
+								
+					<method name="init"><![CDATA[
+				        super.init();
+				        var mc = new Video(this.width, this.height);
+				        this.sprite.addChild(mc);
+				        this.__LZvideo = mc;
+				        this.applySizeToVid();
+				    ]]></method>
+					<method name="applySizeToVid">
+						if (this.__LZvideo == null) {
+							return;
+						}
+						var vid = this._getflashvideo();
+						vid.width = this.width;
+						vid.height = this.height;
+					</method>
+					<method name="_getflashvideo">
+						<![CDATA[
+				            //Debug.write("_getflashvideo()");
+				            return this.__LZvideo;
+				        ]]>
+				    </method>
+					<method name="stopIt">
+						if (this.__LZvideo == null) {
+							return;
+						}
+						var vid = this._getflashvideo();
+				    	vid.attachNetStream(null);
+						this.__LZvideo.clear();
+					</method>
+					<!--- shows the Video (can be a Cam-Instance or a NetStream) in the 
+						View -->
+					<method name="attachVideo" args="video">
+						if (this.__LZvideo == null) {
+							return;
+						}
+						var vid = this._getflashvideo();
+						vid.attachCamera(video);
+					</method>
+				</view>
+
+				<text fontstyle="bold" text="BroadCast - Settings" />
+				<view width="450">
+					<text text="StreamName (BroadCast):" />
+					<edittext align="right" width="150" id="streamname" text="stream1" />
+				</view>
+
+				<button align="right" width="200" text="startBroadCast"
+					onclick="canvas.startBroadCast()" />
+				<button align="right" width="200" text="stopBroadCast"
+					onclick="canvas.stopBroadCast()" />
+
+				<text fontstyle="bold" text="Video and Audio - Settings for Broad-Casting" />
+
+				<!--- Settings -->
+				<view width="450">
+					<text text="Camera:" />
+					<combobox align="right" width="350" id="camDevices"
+						editable="false" itemclassname="myListItem">
+						<switch>
+				            <when property="$as3">
+				                <passthrough>
+				                    import flash.media.Camera;
+				                </passthrough>
+				            </when>
+				        </switch>
+						<handler name="oninit">
+						<![CDATA[
+							//Get all availible Cam's
+							var tw = Camera.names;
+							var r = "";
+							for (var eg=0;eg<tw.length;eg++){
+								this.addItem(tw[eg],eg);
+								r=eg;
+							}
+							this.selectItem(String(r));  
+						]]>
+						</handler>
+					</combobox>
+				</view>
+				<!--- Width -->
+				<view width="450">
+					<text text="Width:" />
+					<edittext align="right" width="150" id="streamwidth"
+						text="$ { broadCastVideo.width }" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+						width:Number [optional] - The requested capture width, in pixels. The default value is 160.
+					</text>
+				</view>
+				<!--- Height -->
+				<view width="450">
+					<text text="Height:" />
+					<edittext align="right" width="150" id="streamheight"
+						text="$ { broadCastVideo.height }" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+						height:Number [optional] - The requested capture height, in pixels. The default value is 120.
+					</text>
+				</view>
+				<!-- Frames Per Second -->
+				<view width="450">
+					<text text="FPS:" />
+					<edittext align="right" width="150" id="streamfps" text="30" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+						fps:Number [optional] - The requested rate at which the camera should capture data, in frames per second. The default value is 15.
+					</text>
+				</view>
+				<!--- FavorArea -->
+				<view width="450">
+					<checkbox id="streamfavorarea" text="Favorarea" value="true" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+						favorArea:Boolean [optional] - A Boolean value that specifies how to manipulate the width, height, and frame rate if the camera does
+						not have a native mode that meets the specified requirements. The default value is true, which means that maintaining capture size
+						is favored; using this parameter selects the mode that most closely matches width and height values, even if doing so
+						adversely affects performance by reducing the frame rate. To maximize frame rate at the expense of camera height and width,
+						pass false for the favorArea parameter.
+					</text>
+				</view>
+				<!--- Bandwidth -->
+				<view width="450">
+					<text text="Bandwidth:" />
+					<edittext align="right" width="150" id="streambandwidth"
+						text="0" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+						bandwidth:Number [optional] - An integer that specifies the maximum amount of bandwidth that the current outgoing video feed
+						can use, in bytes per second. To specify that Flash video can use as much bandwidth as needed to maintain the value of frameQuality, pass 0 for bandwidth.
+					</text>
+				</view>
+				<!--- Quality -->
+				<view width="450">
+					<text text="Quality:" />
+					<edittext align="right" width="150" id="streamquality"
+						text="90" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+						quality:Number [optional] - An integer that specifies the required level of picture quality, as determined by the amount of
+						compression being applied to each video frame. Acceptable values range from 1 (lowest quality, maximum compression) to 100 (highest
+						quality, no compression). To specify that picture quality can vary as needed to avoid exceeding bandwidth, pass 0 for quality. The
+						default value is 0.
+					</text>
+				</view>
+				<!--- Choose Microphone -->
+				<view width="450">
+					<text text="Microphone:" />
+					<combobox align="right" width="350" id="micDevices"
+						editable="false" itemclassname="myListItem">
+						<switch>
+				            <when property="$as3">
+				                <passthrough>
+				                    import flash.media.Microphone;
+				                </passthrough>
+				            </when>
+				        </switch>
+						<handler name="oninit">
+						<![CDATA[
+							//Get all availible Cam's
+							var tw = Microphone.names;
+							var r = "";
+							for (var eg=0;eg<tw.length;eg++){
+								this.addItem(tw[eg],eg);
+								r=eg;
+							}
+							this.selectItem(String(r));  
+						]]>
+						</handler>
+					</combobox>
+				</view>
+				<!--- Audio-Rate -->
+				<view width="450">
+					<text text="Rate:" />
+					<edittext align="right" width="150" id="streamrate" text="22" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+						rate:Number - The rate at which the microphone should capture sound, in kHz. Acceptable values are 5, 8, 11, 22, and 44. The
+						default value is 8 kHz if your sound capture device supports this value. Otherwise, the default value is the next available capture
+						level above 8 kHz that your sound capture device supports, usually 11 kHz.
+					</text>
+				</view>
+				<!--- useEchoSupression -->
+				<view width="450">
+					<checkbox id="streamuseEchoSuppression" text="useEchoSuppression"
+						value="true" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+						public useEchoSuppression : Boolean [read-only] Property (read-only); a Boolean value of true if echo suppression is enabled, false
+						otherwise. The default value is false unless the user has selected Reduce Echo in the Flash Player Microphone Settings panel.
+						<br/><br/>
+						Echo suppression is an effort to reduce the effects of audio feedback, which is caused when sound going out the speaker is picked up by the microphone on the same system. (This is different from acoustic echo cancellation, which completely removes the feedback. The setUseEchoSuppression() method is ignored when you call the getEnhancedMicrophone() method to use acoustic echo cancellation.)
+					</text>
+				</view>
+				
+				<!--- enhanced Microphone -->
+				<view width="450">
+					<checkbox id="useEnhancedMicrophone" text="Use Enhanced Microphone"
+						value="true" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+					To use acoustic echo cancellation, set this value to true.
+					</text>
+				</view>
+			</view>
+
+			<!--- Play Area -->
+			<view layout="axis:y;spacing:4" width="450">
+
+				<!--- Video Output -->
+				<view id="playVideo" bgcolor="black" width="320" height="240">
+				
+					<passthrough when="$as3">
+				        import flash.media.*;
+				        import flash.net.NetConnection;
+				        import flash.net.NetStream;
+				    </passthrough>
+				
+					<method name="init"><![CDATA[
+				        super.init();
+				        var mc = new Video(this.width, this.height);
+				        this.sprite.addChild(mc);
+				        this.__LZvideo = mc;
+				        this.applySizeToVid();
+				    ]]></method>
+					<method name="applySizeToVid">
+						if (this.__LZvideo == null) {
+							return;
+						}
+						var vid = this._getflashvideo();
+						vid.width = this.width;
+						vid.height = this.height;
+					</method>
+					<method name="_getflashvideo">
+						<![CDATA[
+				            //Debug.write("_getflashvideo()");
+				            return this.__LZvideo;
+				        ]]>
+				    </method>
+					<method name="stopIt">
+						if (this.__LZvideo == null) {
+							return;
+						}
+						var vid = this._getflashvideo();
+				    	vid.attachNetStream(null);
+						this.__LZvideo.clear();
+					</method>
+					<!--- shows the Video (can be a Cam-Instance or a NetStream) in the 
+						View -->
+					<method name="attachVideo" args="video">
+						var vid = this._getflashvideo();
+						vid.attachNetStream(video);
+					</method>
+				</view>
+
+				<view height="20" />
+				<text fontstyle="bold"
+					text="Play-Broadcast(Subscribe to a Live Stream) - Settings" />
+				<view width="450">
+					<text text="StreamName (Play):" />
+					<edittext align="right" width="150" id="streamname2" text="stream1" />
+				</view>
+				<!--- Buffer Time -->
+				<view width="450">
+					<text text="BufferTime:" />
+					<edittext align="right" width="150" id="streambuffer"
+						text="0.3" />
+					<text fontstyle="italic" y="26" width="450" multiline="true">
+						public bufferTime : Number [read-only] The number of seconds assigned to the buffer by
+						NetStream.setBufferTime(). The default value is .1(one-tenth of a second). To determine the number of seconds currently in the
+						buffer, use NetStream.bufferLength.
+					</text>
+				</view>
+				<button align="right" width="200" text="playBroadCast"
+					onclick="canvas.playBroadCast()" />
+				<button align="right" width="200" text="stopPlayBroadCast"
+					onclick="canvas.stopPlayBroadCast()" />
+			</view>
+		</view>
+		<vscrollbar />
+	</view>
+
+</canvas>
diff --git a/WebContent/src/test/test-setup.lzx.swf11.swf b/WebContent/src/test/test-setup.lzx.swf11.swf
new file mode 100644
index 0000000..5f8a758
--- /dev/null
+++ b/WebContent/src/test/test-setup.lzx.swf11.swf
Binary files differ
diff --git a/WebContent/src/test/test-soap.lzx b/WebContent/src/test/test-soap.lzx
new file mode 100644
index 0000000..d7778e3
--- /dev/null
+++ b/WebContent/src/test/test-soap.lzx
@@ -0,0 +1,51 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" height="400" width="530">
+
+    <debug x="10" y="190" width="510" height="200"/>
+
+    <soap name="fileService" wsdl="http://localhost:5080/openmeetings/services/FileService?wsdl">
+        <handler name="onload">
+            Debug.write('fileService soap service loaded');
+        </handler>
+
+        <handler name="onerror" args="error">
+            Debug.write('error:', error);
+        </handler>
+
+        <!-- See RPC chapter for details on remotecall and how dataobject is
+             used to data bind to RPC operation results. --> 
+        <remotecall name="ping" funcname="ping">
+        	<param value="1"/>
+            <handler name="ondata" args="value">
+                Debug.write('result:\n', value);
+            </handler>
+        </remotecall>
+    </soap>
+
+    <view x="10" y="10" layout="spacing: 5">
+        <view layout="axis: x; spacing: 5">
+            <edittext id="s" text="SOAP"/>
+            <button text="search" onclick="Debug.write('Invoking search...'); fileService.ping.invoke()"/>
+        </view>
+
+    </view>
+
+</canvas>
diff --git a/WebContent/src/test/testLPP4154.lzx b/WebContent/src/test/testLPP4154.lzx
new file mode 100644
index 0000000..4ca73f3
--- /dev/null
+++ b/WebContent/src/test/testLPP4154.lzx
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<canvas debug="true" width="100%" height="100%" fontsize="14" title="OpenMeetings - Computer testing">
+	
+	<debug fontsize="14" oninit="Debug.showInternalProperties = true"/>
+    
+<class name="swfResourceView" extends="view" play="false" y="40">
+        
+        <handler name="onload">
+            //Debug.write("Resource loaded: ",this);
+            this.stop();
+            this.setAttribute('play',false);
+        </handler>
+        
+        <handler name="onclick">
+            //Debug.write("onclick: ",this.sprite);
+            //Debug.write("onclick: ",this.sprite.getDisplayObject());
+        </handler>        
+        
+        <handler name="onframe" args="i">
+            ////Debug.write("onframe",i);
+        </handler>
+        
+        <handler name="onplay" args="i">
+            //Debug.write("onplay",i);
+        </handler>
+        
+        <handler name="onstop" args="i">
+            //Debug.write("onstop",i);
+        </handler>        
+        
+</class>    
+    
+<button text="setSource" onclick="xyz.setSource('Tutorat.swf')" >
+    <handler name="onclick">
+        var tempView = new lz.swfResourceView(canvas,{id:'xyz'});
+        tempView.setSource('Tutorat.swf');
+    </handler>
+</button>
+
+  
+    
+</canvas>
diff --git a/WebContent/src/test/testLineWidth.lzx b/WebContent/src/test/testLineWidth.lzx
new file mode 100644
index 0000000..0142622
--- /dev/null
+++ b/WebContent/src/test/testLineWidth.lzx
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<canvas debug="true" width="100%" height="100%" fontsize="14" title="OpenMeetings - Computer testing">
+	
+	<debug fontsize="14" oninit="Debug.showInternalProperties = true"/>
+	
+<!--
+	Tests for calculating the linewidth in a multinline Textbox for each line
+	the meaning of several vars can be seen here:
+	http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/js/html/wwhelp.htm
+ -->	
+    
+<script>
+<![CDATA[
+
+	var maxsize = 220;
+	var textFieldtext = "";
+	var startIndex = 0;
+	var currentLine = 0;
+	var textObject = null;
+	var myTextFormat = null;
+	var lineHeight = 0;
+	
+	function calcLineWidthByTextField(maxsizeText,textForCalcing,fontsize, fontname){
+		
+		maxsize = maxsizeText;
+		startIndex = 0;
+		textObject = new Array();
+		
+		textFieldtext = textForCalcing;
+		myTextFormat = new TextFormat();
+		myTextFormat.size = fontsize;
+		myTextFormat.font = fontname;
+		
+		var metrics = myTextFormat.getTextExtent(textFieldtext, 100000);
+		Debug.write(metrics);
+		lineHeight = metrics.ascent+metrics.descent;
+		Debug.write(lineHeight);		
+		
+		measureLine();
+		
+		for (var k = 0;k<textObject.length;k++){
+			var metrics = myTextFormat.getTextExtent(textObject[k]["text"], 100000);
+			textObject[k]["lineWidth"] = metrics.width;
+			//Debug.write("text: ",metrics,k,textObject[k]["lineWidth"],textObject[k]["text"]);
+		}
+		
+		return textObject;
+	}
+	
+	function measureLine(){		
+		//Debug.write("restString: ",textFieldtext);
+		for (var i=textFieldtext.length;i>0;i--){
+			var testTxt = textFieldtext.slice(startIndex, i);
+			var metrics = myTextFormat.getTextExtent(testTxt, 100000);
+			//Debug.write("metrics: ",testTxt,startIndex,metrics.width);
+			if (metrics.width<=maxsize){
+
+				testTxt = textFieldtext.slice(startIndex, i-1);
+				textObject[currentLine] = new Array();
+				textObject[currentLine]["text"] = testTxt;
+				textFieldtext = textFieldtext.slice(i-1, textFieldtext.length);
+				
+				if (textFieldtext.length==1){
+					textObject[currentLine]["text"]+=textFieldtext;
+					return;
+				} else {
+					currentLine+=1;
+					return measureLine();
+				}
+			}
+		}		
+	}
+	
+	
+	
+	//function getLineWidth()
+]]>
+</script>
+
+<text multiline="true" x="40" y="20" width="220" selectable="true" >
+	<handler name="oninit">
+		<![CDATA[
+			this.sprite.__LZtextclip.wordWrap = false;
+			Debug.write(this.sprite.__LZtextclip);
+			var items = new Array();
+			var t = "";
+			//items[0] = ["text","hello your are the hero lets check accomodation today i need some input"];
+			items[0] = ["text","hello "];
+			items[0] = ["text","der hat drei ecken      und warum ist meni hut der knut      ?? warumST"]; 
+			for (var i=0;i<items.length;i++) {
+				if (items[i][0]=="text"){
+					t += items[i][1];
+				} else {
+					var tempString = calcLineWidthByTextField(this.width, t,this.fontsize,"Verdana");
+					tempString[tempString.length-1]["lineWidth"];
+				}
+			}
+			var tString = calcLineWidthByTextField(this.width, t,this.fontsize,"Verdana");
+			for (var k = 0;k<tString.length;k++){
+				this.setAttribute('text',this.getText()+textObject[k]["text"]+"\r");
+				Debug.write("line,width,text: ",k,textObject[k]["lineWidth"],textObject[k]["text"]);
+			}			
+			
+		]]>
+	</handler>
+</text>
+  
+    
+</canvas>
diff --git a/WebContent/src/test/testLineWidth.lzx.lzr=swf8.swf b/WebContent/src/test/testLineWidth.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..ccb5224
--- /dev/null
+++ b/WebContent/src/test/testLineWidth.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/test/testLoadSWF.lzx.lzr=swf8.swf b/WebContent/src/test/testLoadSWF.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..0700cc8
--- /dev/null
+++ b/WebContent/src/test/testLoadSWF.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/test/test_main.lzx b/WebContent/src/test/test_main.lzx
new file mode 100644
index 0000000..25e9ff8
--- /dev/null
+++ b/WebContent/src/test/test_main.lzx
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas>
+
+<text>Hello World</text>
+
+</canvas>
+
+
diff --git a/WebContent/src/test/test_onclick.lzx b/WebContent/src/test/test_onclick.lzx
new file mode 100644
index 0000000..fc93ebd
--- /dev/null
+++ b/WebContent/src/test/test_onclick.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" width="1000" height="700">
+
+    <class name="myView" extends="drawview" bgcolor="red" clip="true" 
+        width="200" height="200" 
+        onclick="//Debug.write('onclick',this)" 
+        onmouseup="//Debug.write('onmouseup',this)" />
+    
+<myView />
+    
+</canvas>
diff --git a/WebContent/src/test/test_upload.lzx b/WebContent/src/test/test_upload.lzx
new file mode 100644
index 0000000..8a62e2a
--- /dev/null
+++ b/WebContent/src/test/test_upload.lzx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<canvas debug="true" width="1000" height="700">
+
+<include href="oslmon/" />
+    
+    <handler name="oninit">
+        new lz.uploadWindow(canvas);
+    </handler>
+
+</canvas>
diff --git a/WebContent/src/test/testswf/test.pdf b/WebContent/src/test/testswf/test.pdf
new file mode 100644
index 0000000..234b7bb
--- /dev/null
+++ b/WebContent/src/test/testswf/test.pdf
Binary files differ
diff --git a/WebContent/src/test/testswf/test.swf b/WebContent/src/test/testswf/test.swf
new file mode 100644
index 0000000..d4e1894
--- /dev/null
+++ b/WebContent/src/test/testswf/test.swf
Binary files differ
diff --git a/WebContent/src/test/testswf/testLoadSWF.lzx b/WebContent/src/test/testswf/testLoadSWF.lzx
new file mode 100644
index 0000000..1dab29f
--- /dev/null
+++ b/WebContent/src/test/testswf/testLoadSWF.lzx
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<canvas debug="true" width="100%" height="100%" fontsize="14" title="OpenMeetings - SWF testing">
+	
+	<debug fontsize="14" oninit="Debug.showInternalProperties = true"/>
+	
+<view layout="axis:x;spacing:2">
+	<button name="_btn">
+		<handler name="onclick">
+			canvas._swfview.setAttribute('frame',canvas._swfview.frame+1);
+			//var mc = canvas._swfview.getDisplayObject();
+			//Debug.write(canvas._swfview);
+			//Debug.write(mc);
+			//mc._frame = 4;
+			//mc.play();
+		</handler>
+	</button>
+</view>
+	
+<view name="_swfview" y="20">
+	<handler name="oninit">
+		<![CDATA[
+			this.setSource("test.swf");
+		]]>
+	</handler>
+</view>
+  
+    
+</canvas>
diff --git a/WebContent/src/test/testswf/testLoadSWF.lzx.lzr=swf8.swf b/WebContent/src/test/testswf/testLoadSWF.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..5a03b59
--- /dev/null
+++ b/WebContent/src/test/testswf/testLoadSWF.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/src/test_main.lzx.lzr=swf8.swf b/WebContent/src/test_main.lzx.lzr=swf8.swf
new file mode 100644
index 0000000..ed0ab9e
--- /dev/null
+++ b/WebContent/src/test_main.lzx.lzr=swf8.swf
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/library.lzx b/WebContent/swf10/audioVideoTest/library.lzx
new file mode 100644
index 0000000..5b64b48
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/library.lzx
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+	<!-- APL author sebawagner -->
+	<resource name="level_meter_rsc" src="resources/level_meter.png" />
+	<!-- APL author sebawagner -->
+    <resource name="test_setup_record_rsc" src="resources/webstart_record.png" />
+    <!-- APL author sebawagner -->
+    <resource name="test_setup_play_rsc" src="resources/run.png" />
+    <!-- APL author sebawagner -->
+    <resource name="test_setup_stop_rsc" src="resources/stop.png" />
+    <!-- FamFam Icon Set -->
+    <resource name="test_setup_info_rsc" src="resources/information.png" />
+    
+    <include href="testingApplication.lzx" />
+    
+</library>
diff --git a/WebContent/swf10/audioVideoTest/resources/information.png b/WebContent/swf10/audioVideoTest/resources/information.png
new file mode 100644
index 0000000..12cd1ae
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/information.png
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/resources/level_meter.fla b/WebContent/swf10/audioVideoTest/resources/level_meter.fla
new file mode 100644
index 0000000..4e1a8c8
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/level_meter.fla
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/resources/level_meter.png b/WebContent/swf10/audioVideoTest/resources/level_meter.png
new file mode 100644
index 0000000..78192ef
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/level_meter.png
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/resources/record.fla b/WebContent/swf10/audioVideoTest/resources/record.fla
new file mode 100644
index 0000000..870b264
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/record.fla
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/resources/record.png b/WebContent/swf10/audioVideoTest/resources/record.png
new file mode 100644
index 0000000..99109da
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/record.png
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/resources/run.png b/WebContent/swf10/audioVideoTest/resources/run.png
new file mode 100644
index 0000000..c77b8d9
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/run.png
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/resources/stop.fla b/WebContent/swf10/audioVideoTest/resources/stop.fla
new file mode 100644
index 0000000..44a29f1
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/stop.fla
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/resources/stop.png b/WebContent/swf10/audioVideoTest/resources/stop.png
new file mode 100644
index 0000000..5b1adf3
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/stop.png
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/resources/webstart_record.fla b/WebContent/swf10/audioVideoTest/resources/webstart_record.fla
new file mode 100644
index 0000000..475f9dc
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/webstart_record.fla
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/resources/webstart_record.png b/WebContent/swf10/audioVideoTest/resources/webstart_record.png
new file mode 100644
index 0000000..d94b7f5
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/resources/webstart_record.png
Binary files differ
diff --git a/WebContent/swf10/audioVideoTest/testingApplication.lzx b/WebContent/swf10/audioVideoTest/testingApplication.lzx
new file mode 100644
index 0000000..bc986ad
--- /dev/null
+++ b/WebContent/swf10/audioVideoTest/testingApplication.lzx
@@ -0,0 +1,417 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<!-- 
+#########################################
+
+Test the setup values before you enter a room
+
+ -->
+ 
+<class name="testingApplication" extends="view" width="600" height="400">
+
+    <switch>
+        <when property="$as3">
+            <passthrough>
+                import flash.media.Camera;
+                import flash.media.Microphone;
+                import flash.net.SharedObject;
+                import flash.media.SoundCodec;
+            </passthrough>
+        </when>
+    </switch>
+	
+	<attribute name="lastRecorded" value="" type="string" />
+	
+	<attribute name="isRunning" value="false" type="boolean" />
+	
+	<attribute name="recordingsCounter" value="5" type="number" />
+	
+	<attribute name="timerIsRunning" value="false" type="boolean" />
+	
+	<attribute name="counterDelegate" value="null" />
+	
+	<handler name="oninit">
+		this.counterDelegate = new LzDelegate( this, "count" );
+	</handler>
+	
+	<method name="startTimer">
+		this.timerIsRunning = true;
+		this.timerWasUnmutedTheFirstTime = true;
+		lz.Timer.addTimer( this.counterDelegate, 1000 );
+	</method>
+	
+	<method name="count" args="calleeObj">
+		if (this.recordingsCounter != 0){
+			this.recordingsCounter -= 1;
+			lz.Timer.addTimer( this.counterDelegate, 1000 );
+			
+			this._text._info.setAttribute("text",""+this.recordingsCounter+" sec");
+			
+		} else {
+			this._text.setAttribute("visibility","hidden");
+			this.doStop();
+			this.timerIsRunning = false;
+			this.doPlay();
+		}
+	</method>
+	
+	<method name="startTimerToCount">
+		if (!this.timerIsRunning) {
+			this.startTimer();
+		}
+	</method>
+	
+	<method name="storeSettings">
+        <![CDATA[
+            if ($debug) Debug.write("storeSettings ");
+            var t:SharedObject = SharedObject.getLocal('userdata');
+            var g = t.data;
+            if (g==null) g = new Array();
+            g["cam"] = this.availibleCams.getValue();
+            g["mic"] = this.availibleMics.getValue();
+            t.flush();
+        ]]>
+    </method>   
+	
+	<method name="doninitalize">
+        <![CDATA[
+        
+            this._btnStartRecording.setAttribute("enabled",false);
+            
+            this.recordingsCounter = 5;
+            
+            this._text.setAttribute("visibility","visible");
+            this._text._info.setAttribute("text","5 sec");
+        
+            this.isRunning = true;
+            
+            var valCam = this.availibleCams.getValue();
+            var valMic = this.availibleCams.getValue();
+            
+            var videoview = this._publisher._chatvideoinner._videostream;
+            if ($debug) Debug.write("videoview: ",videoview);
+            if ($debug) Debug.write(valCam,valMic);
+            
+            var _micro = null;
+            var _camera = null;
+            if (valMic != null) {
+                 _micro = Microphone.getMicrophone(valMic);
+                 if (_micro != null) {
+                     _micro.codec = SoundCodec.NELLYMOSER;
+                     _micro.framesPerPacket = 1;
+                     _micro.setSilenceLevel(0, 2000);
+                     _micro.gain = 50;
+                     // this has no effect if enhanced microphone is obtained
+                    //Microphone setUseEchoSupression(bool)
+                    _micro.setUseEchoSuppression(true);
+                }
+            }
+            if (valCam != null) {
+                _camera = Camera.getCamera(valCam);
+            }
+            
+            if ($debug) Debug.write("_camera.setMode: ",videoview.width,videoview.height,canvas.framesPerSecond,true);
+
+            //Microphone.set
+            if ($debug) Debug.write("canvas.microphoneRateBest: ",canvas.microphoneRateBest);
+            if (_camera != null) {
+                if ($debug) Debug.write("_camera.setQuality BEST: ",this.isInterview,(canvas.bandwidthNeededBest*2),canvas.camQualityBest);
+                if (this.isInterview) {
+                    _camera.setMode(videoview.width,videoview.height,24,true);
+                    if ($debug) Debug.warn("IS INTERVIEW ");
+                    _camera.setQuality(0,98);
+                } else {
+                    _camera.setMode(videoview.width,videoview.height,canvas.framesPerSecond,true);
+                    if ($debug) Debug.warn("IS NO INTERVIEW ");
+                    _camera.setQuality(canvas.bandwidthNeededBest,canvas.camQualityBest);
+                }
+            }
+            
+            //The First start-timer message will come from the Flash Object
+            
+            if ($debug) Debug.warn("_camera.muted ",_camera.muted);
+            if ($debug) Debug.warn("_micro.muted ",_micro.muted);
+            
+            if (!_camera.muted) {
+                this.startTimer();
+            }
+
+            //start recording of client stream
+            
+            var t = new Date();
+            this.lastRecorded = "TEST_SETUP_"+t.getTime();
+            
+            this._publisher.setAttribute("visibility","visible");
+            this._viewer.setAttribute("visibility","hidden");
+            
+            videoview.record(this.lastRecorded,_camera,_micro);
+        ]]>
+    </method>
+    
+    <method name="doPlay">
+    	<![CDATA[
+    	
+    	   if (this.lastRecorded == "") {
+    	   	   //Error - nothing recorded yet
+    	   	   if ($debug) Debug.warn("Nothing to Play");
+    	   } else {
+    	   	   
+    	   	   this._play.setAttribute("visibility","visible");
+    	   	
+    	   	   this._publisher.setAttribute("visibility","hidden");
+               this._viewer.setAttribute("visibility","visible");
+               
+               var videoview = this._viewer._chatvideoinner._videostream;
+               
+               videoview.justPlayStream(this.lastRecorded+".flv",0);
+                
+    	   }
+    	
+    	]]>
+    </method>
+    
+    <method name="doStop">
+    	if (this.isRunning) {
+    		this.isRunning = false;
+    		
+    		var videoview = this._publisher._chatvideoinner._videostream;
+    		
+    		this._btnStartRecording.setAttribute("enabled",true);
+    		
+    		videoview._stop();
+    		
+    		this.doPlay();
+    	}
+    	
+    	var videoviewViewer = this._viewer._chatvideoinner._videostream;
+        videoviewViewer._stop();
+    </method>
+	
+	<labelText fontstyle="bold" labelid="758"
+			   width="$once{ parent.width-2 }" height="30" multiline="true" /> 
+	
+	<labelText name="availibleCamsLabel" labelid="52" fontsize="11" x="2" y="40" />
+
+    <resetCombobox fontsize="11" name="availibleCams" x="10" y="60" width="260" editable="false">
+        <switch>
+            <when property="$as3">
+                <passthrough>
+                    import flash.media.Camera;
+                    import flash.net.SharedObject;
+                </passthrough>
+            </when>
+        </switch>
+        <handler name="oninit">
+            <![CDATA[
+                //Get all availible Cam's
+                var tw = Camera.names;
+                var r = "";
+                for (var eg=0;eg<tw.length;eg++){
+                    this.addItem(tw[eg],eg);
+                    r=eg;
+                }
+                var t:SharedObject = SharedObject.getLocal('userdata');
+                var g = t.data;
+                var cam;
+                if (g != null){
+                    cam = g["cam"];
+                    if (cam == 'undefined') {
+                        cam = r;
+                    }
+                } else {
+                    cam = r;
+                }
+                this.selectItem(String(cam));
+            ]]>
+        </handler>
+    </resetCombobox>
+    
+    <labelText name="availibleMicsLabel" labelid="53" fontsize="11" x="2" y="84" />
+
+    <resetCombobox fontsize="11" name="availibleMics"  x="10" y="104" width="260" editable="false">
+        <switch>
+            <when property="$as3">
+                <passthrough>
+                    import flash.media.Microphone;
+                    import flash.net.SharedObject;
+                </passthrough>
+            </when>
+        </switch>
+        <handler name="oninit">
+            <![CDATA[
+                //Get all availible Mic's
+                var tw = Microphone.names;
+                var r = "";
+                for (var eg=0;eg<tw.length;eg++){
+                    r=eg;
+                    this.addItem(tw[eg],eg);
+                }
+
+                var t:SharedObject = SharedObject.getLocal('userdata');
+                var g = t.data;
+                var mic;
+                if (g != null){
+                if ($debug) Debug.write("Select mic 4: ",mic);
+                    mic = g["mic"];
+                    if (mic == 'undefined') {
+                    if ($debug) Debug.write("Select mic 3: ",mic);
+                        mic = r;
+                    }
+                } else {
+                if ($debug) Debug.write("Select mic 2: ",mic);
+                    mic = r;
+                }
+                if ($debug) Debug.write("Select mic 1: ",mic);
+                
+                this.selectItem(String(mic));
+            ]]>
+        </handler>
+    </resetCombobox>
+    
+    
+    <simpleLabelButton name="_btnStartRecording" labelid="775" 
+    				   width="170" x="100" y="150" height="28">
+    	<handler name="onclick">
+            parent._level_meter.startLevel();
+            parent.doninitalize();
+        </handler>
+        <view resource="test_setup_record_rsc" x="2" y="2" />
+    </simpleLabelButton>
+    
+	
+	<videoObjectTestBroadcast name="_publisher" x="340" y="40" width="240" height="180">
+		<handler name="sendCameraStatus" args="camStatus">
+            if ($debug) Debug.write("sendCameraStatus -1- ",camStatus);
+            if (camStatus == "Camera.Unmuted") {
+            	parent.startTimerToCount();
+            }
+        </handler>
+        
+        <handler name="sendMicroStatus" args="micStatus">
+            if ($debug) Debug.write("sendMicroStatus -1- ",micStatus);
+            if (micStatus == "Microphone.Unmuted") {
+                parent.startTimerToCount();
+            }
+        </handler>
+	</videoObjectTestBroadcast>
+	
+	<videoObjectPlayTestBroadcast name="_viewer" x="340" y="40" 
+								  width="240" height="180" visibility="hidden" />
+								  
+	<view name="_text" x="340" y="40" width="240" height="180" visibility="hidden">
+		<text name="_info" resize="true" bgcolor="0xFFFFFF" align="right"
+			  fontsize="12" fontstyle="bold" />
+	</view>
+	
+	<!--
+	<simpleLabelRoundButtonIcon name="_start" y="190" x="350" 
+				ressourceIcon="test_setup_record_rsc"
+				width="70" tlabelid="763" >
+		<handler name="onclick">
+			parent._level_meter.startLevel();
+			parent.doninitalize();
+		</handler>
+	</simpleLabelRoundButtonIcon>
+	
+	<simpleLabelRoundButtonIcon name="_stop" y="190" x="425" 
+				ressourceIcon="test_setup_stop_rsc"
+				width="70" tlabelid="766" >
+        <handler name="onclick">
+        	parent._level_meter.resetNewLevel();
+            parent.doStop();
+        </handler>
+    </simpleLabelRoundButtonIcon>
+    
+	<simpleLabelRoundButtonIcon name="_play" y="190" x="500" 
+				ressourceIcon="test_setup_play_rsc"
+				width="70" tlabelid="764" 
+				enabled="false">
+        <handler name="onclick">
+            parent.doPlay();
+        </handler>
+    </simpleLabelRoundButtonIcon>
+     -->
+     
+     <!-- ressourceIcon="test_setup_play_rsc" -->
+    <simpleLabelButton name="_play" y="190" x="490" visibility="hidden"
+                width="86" labelid="764" >
+        <handler name="onclick">
+            parent.doPlay();
+        </handler>
+    </simpleLabelButton>
+     
+    <labelText labelid="767" x="340" y="224" />
+    
+    <view name="_level_meter" x="340" y="244" width="240" height="20" clip="true" bgcolor="0x000000">
+    	
+    	 <!--- Level delegate, used to track level changes. 
+              @keywords private -->
+        <attribute name="_leveldel" value="$once{new LzDelegate(this, '_updateLevel')}"/>
+    	
+    	<method name="_updateLevel" args="no">
+    		<![CDATA[
+    		    //if ($debug) Debug.write("_updateLevel",no,parent._publisher._chatvideoinner._videostream.micro);
+    		    //if ($debug) Debug.write("_updateLevel",parent._publisher._chatvideoinner._videostream.micro);
+    		    //if ($debug) Debug.write("_updateLevel",parent._publisher._chatvideoinner._videostream.micro.activityLevel);
+    		    if (parent._publisher._chatvideoinner._videostream.micro == null)
+    		    {
+    		    	return;
+    		    }
+    		    this.setNewLevel(parent._publisher._chatvideoinner._videostream.micro.activityLevel);
+    		]]>
+    	</method>
+    	
+    	<method name="startLevel">
+    		this._leveldel.register(lz.Idle, "onidle");
+    	</method>
+    	
+    	<method name="resetNewLevel">
+    		this._leveldel.unregisterAll();
+    		this.setNewLevel(0);
+    	</method>
+    	
+    	<method name="setNewLevel" args="no">
+    		<![CDATA[
+    		
+                var newLevel = (238/100) * no;
+            
+                this._over.setAttribute("width",238-newLevel);
+                this._over.setAttribute("x",1+(newLevel));
+                
+            ]]>
+    	</method>
+    	
+    	<view name="_bg" width="238" height="18" x="1" y="1" bgcolor="0xFFFFFF" />
+    	<view name="_grip" resource="level_meter_rsc" x="1" y="1" />
+    	<view name="_over" width="238" height="18" x="1" y="1" bgcolor="0xFFFFFF" />
+    </view>
+    
+    <view y="292" resource="test_setup_info_rsc" x="16" />
+    
+    <labelText fontstyle="bold" labelid="765" x="39" y="290"
+               width="$once{ parent.width-50 }" multiline="true" />
+    
+</class>
+	
+</library>
+ 
diff --git a/WebContent/swf10/base/components/button/library.lzx b/WebContent/swf10/base/components/button/library.lzx
new file mode 100644
index 0000000..74f686a
--- /dev/null
+++ b/WebContent/swf10/base/components/button/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+	<include href="simpleLabelButton.lzx" />

+

+</library>

diff --git a/WebContent/swf10/base/components/button/simpleLabelButton.lzx b/WebContent/swf10/base/components/button/simpleLabelButton.lzx
new file mode 100644
index 0000000..183ad5e
--- /dev/null
+++ b/WebContent/swf10/base/components/button/simpleLabelButton.lzx
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="simpleLabelButton" extends="button" fontstyle="bold"

+	   fontsize="11" height="20" style="componentStyle">

+

+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />

+	<method name="setLabelId" args="_labelid" >

+		this.labelid = _labelid;

+		this.setAttribute('text',canvas.getLabelName(this.labelid));

+	</method>

+	

+</class>

+

+</library>

diff --git a/WebContent/swf10/base/components/explorer/explorerBox.lzx b/WebContent/swf10/base/components/explorer/explorerBox.lzx
new file mode 100644
index 0000000..6c9aaf3
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/explorerBox.lzx
@@ -0,0 +1,400 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="explorerBox" extends="view" width="250" y="100" visibility="hidden"

+    height="400" bgcolor="0x000088" 

+	onmousedown="this._startDragState(this)" onmouseup="this._removeDragState(this)" >

+

+    <switch>

+	  <when property="$as3">

+		<passthrough>

+		  import flash.filters.DropShadowFilter;

+		</passthrough>

+	  </when>

+	</switch>

+

+    <handler name="oninit">

+    	//if($debug) Debug.write("explorerBox/oninit showWindowEffect? ",canvas.showWindowEffect);

+    	if (canvas.showWindowEffect=="y"){

+    		//if($debug) Debug.write("explorerBox/showWindowEffect == YES");

+    		new lz.boxInitEffect(parent,{x:this.x+(this.width/2)-50,y:this.y+(this.height/2)-10,zielx:this.x,ziely:this.y,zielwidth:this.width,zielheight:this.height,objRef:this});

+    	} else {

+    		this.sendAnniComplete();

+    	}

+    </handler>

+    

+    <method name="sendAnniComplete">

+    	//if($debug) Debug.write("sendAnniComplete");

+    	this.setAttribute('visibility','visible');

+    	this.setShadow(true);

+    </method>

+

+    <method name="setShadow" args="bool">

+        this.hasshadow = bool;

+        <![CDATA[

+        if (this.isinited){

+            this.normalMC = this.getDisplayObject();

+            //Debug.write(this.normalMC);

+            ////Debug.write("this.normalMC: ",this.normalMC);

+            ////Debug.write("this: ",this);

+           	this.displacementMap = new DropShadowFilter();

+            this.normalMC.filters = [this.displacementMap];

+        }

+        ]]>              

+    </method>	

+          

+	<!--- The Title of this Box -->

+	<attribute name="title" value="defaulttitle" type="string" />

+	

+	<!--- if this Box should be closeable -->

+	<attribute name="closable" value="false" type="boolean" />

+    

+    <!--- if this Box should be resizeable  -->

+    <attribute name="resizeable" value="false" type="boolean" />

+	

+	<!--- Can this Box be docked to others and 

+			the width/height of parent compoent barrier -->

+	<attribute name="docking" value="false" type="boolean" />

+	

+	<!--- Hard to explain but its clear if you play around 

+		with that. Its the number of minimum pixels before 

+		the "docking" effect will be there -->

+	<attribute name="dockingbarrier" value="15" type="number" />

+	

+	<!--- the Event will be thrown if you close the Box -->

+	<event name="onclose" />

+	

+	<!---@keywords private the list of connected views -->

+	<attribute name="dockinglist" value="null" />

+	

+	<!--- @keywords private temp-older of x-distance to docked-Box  -->

+	<attribute name="tempXdistance" value="0" type="number" />

+

+	<!--- @keywords private temp-older of y-distance to docked-Box  -->

+	<attribute name="tempYdistance" value="0" type="number" />

+	

+	<!--- @keywords private is the Box minimized  -->

+	<attribute name="isopen" value="true" type="boolean" />

+	

+	<!--- @keywords private is the Box minimized  -->

+	<attribute name="open" value="true" type="boolean" />	

+	

+	<!--- @keywords private  -->

+	<attribute name="initheight" value="0" type="number" />

+	

+	<!--- @keywords private store initial height so toggleopen can reset height  -->

+	<handler name="oninit">

+		this.initheight=this.height;

+		////Debug.write("this.isopen: ",this.isopen);

+		if (!this.open) toggleopen();

+	</handler>

+	

+	<method name="close">

+		if (this.onclose) this.onclose.sendEvent();

+		this.doDestroy();

+	</method>

+	

+	<method name="toggleopen">

+		////Debug.write("this.isopen",this.isopen);

+		this.setAttribute('isopen',!this.isopen);

+		if (this.isopen){

+			_calcdockingList();

+			for (var eg in this.dockinglist){

+				if(this.dockinglist[eg].docking){

+					////Debug.write("this.dockinglist[eg]: ",this.dockinglist[eg].title);

+					////Debug.write("open new y",this.y+this.initheight);

+					this.dockinglist[eg].toggleOpenByParent(this.initheight-22);

+					this.dockinglist[eg].setAttribute('y',this.y+this.initheight);

+					

+				}

+			}			

+			this.setAttribute('height',this.initheight);

+		} else {

+			_calcdockingList();

+			for (var eg in this.dockinglist){

+				if(this.dockinglist[eg].docking){

+					////Debug.write("this.dockinglist[eg]: ",this.dockinglist[eg].title);

+					this.dockinglist[eg].toggleOpenByParent(-(this.initheight-22));

+					this.dockinglist[eg].setAttribute('y',this.y+22);

+				}

+			}	

+			this.setAttribute('height',22);		

+		}

+	</method>

+	

+	<method name="toggleOpenByParent" args="changeY">

+		////Debug.write("+++++ toggleOpenByParent +++++ changeY: ",this.title,changeY);

+		var tempList=new Array();

+		<![CDATA[

+		//check for dockable stuff which is connected to this Box

+		for (var eg in this.parent.subviews){

+			//check that you do not calc with yourself

+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){

+				// there are 4 cases which have to be proofed to check every possible situation

+				var proof=false;

+				////Debug.write("found some: ",this.parent.subviews[eg].title);

+				//top box-border

+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < 1 ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -1 ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){

+					proof=true;

+				}

+					

+				if (proof) tempList.push(this.parent.subviews[eg]);

+			}

+		}

+		]]>

+		////Debug.write("tempList.length: ",tempList.length);

+		if (tempList.length!=0){

+			for (var eg in tempList){

+				if(tempList[eg].docking){

+					////Debug.write("toggleOpenByParent 1 [eg],changeY: ",tempList[eg].title,changeY);

+					tempList[eg].toggleOpenByParent(changeY);

+					tempList[eg].setAttribute('y',tempList[eg].y+changeY);

+				}

+			}	

+		}

+		

+	</method>

+	

+	<!--- @keywords private  -->

+	<method name="_removeDragState" args="obj">

+		//It's important to remove the dragger and do docking stuff before you check for conencted Boxes

+		dragger.remove();

+		if (obj==this){

+			if (docking) arrangePosition();

+		} else {

+			if (docking) _lookforParentOnly(obj);

+		}

+			

+		//check for connected Boxes

+		for (var eg in this.dockinglist){

+			if(this.dockinglist[eg].docking){

+				this.dockinglist[eg]._removeDragState(this);

+			}

+		}

+

+	</method>

+

+	

+	<!--- @keywords private

+		the arg obj is needed because the dragging can be called by the Box itself

+		or by a Box which is connected to this Box!  -->

+	<method name="_startDragState" args="obj">

+		this.bringToFront();

+		_calcdockingList();

+		for (var eg in this.dockinglist){

+			if(this.dockinglist[eg].docking){

+				this.dockinglist[eg]._startDragState(this);

+			}

+		}

+		//store position cause it wasn't dragged by itself

+		if (obj!=this){

+			storeAdjustmentToParent(obj.x,obj.y);

+		}

+		dragger.apply();

+	</method>

+	

+	<!--- Calc the List of Boxes which will be dragged and setposition if this Box

+		will be dragged,docked or minimized/maximized  -->

+	<method name="_calcdockingList">

+		//Clear list of conencted Boxes

+		this.dockinglist=new Array();

+		<![CDATA[

+		//check for dockable stuff which is connected to this Box

+		for (var eg in this.parent.subviews){

+			//check that you do not calc with yourself

+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){

+				// there are 4 cases which have to be proofed to check every possible situation

+				var proof=false;

+

+				//top box-border

+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < 1 ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -1 ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){

+					proof=true;

+				}

+

+				if (proof) this.dockinglist.push(this.parent.subviews[eg]);

+			}

+		}

+		]]>

+		////Debug.write("this.dockinglist.length:",this.dockinglist.length);

+	</method>

+	

+	<!--- @keywords private  -->

+	<method name="arrangePosition">

+		//do the magic

+		//the idea is: look for all on the view container one level above this one

+		//and look for the width/height and 0/0 and look for "dockable" stuff there

+		var newx=this.x;

+		var newy=this.y;

+	  

+		<![CDATA[

+				

+		for (var eg in this.parent.subviews){

+			//check that you do not calc with yourself

+			if (this.parent.subviews[eg]!=this && this.parent.subviews[eg].docking){

+				// there are 4 cases which have to be proofed to check every possible situation

+				//left box-border

+				if ( ( ((this.x+this.width)-this.parent.subviews[eg].x) < this.dockingbarrier ) && ( ((this.x+this.width)-this.parent.subviews[eg].x) > -this.dockingbarrier ) &&  ( (this.y+this.height) > this.parent.subviews[eg].y ) &&  ( this.y < (this.parent.subviews[eg].y+this.parent.subviews[eg].height) ) ){

+					newx= ( this.parent.subviews[eg].x - this.width );

+				}

+				//right box-border

+				if ( ( ((this.parent.subviews[eg].x+this.parent.subviews[eg].width)-this.x)<this.dockingbarrier ) && ( ((this.parent.subviews[eg].x+this.parent.subviews[eg].width)-this.x)>-this.dockingbarrier ) &&  ( (this.y+this.height) > this.parent.subviews[eg].y ) &&  ( this.y < (this.parent.subviews[eg].y+this.parent.subviews[eg].height) ) ){

+					newx= ( this.parent.subviews[eg].x + this.parent.subviews[eg].width );

+				}

+				//top box-border

+				if  ( ( ((this.y+this.height)-this.parent.subviews[eg].y) < this.dockingbarrier ) && ( ((this.y+this.height)-this.parent.subviews[eg].y) > -this.dockingbarrier ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){

+					newy = this.parent.subviews[eg].y-this.height;

+				}

+				//bottom box-border

+				if ( ( ((this.parent.subviews[eg].y+this.parent.subviews[eg].height)-this.y) < this.dockingbarrier ) && ( ((this.parent.subviews[eg].y+this.parent.subviews[eg].height)-this.y) > -this.dockingbarrier ) && ( (this.x+this.width) > this.parent.subviews[eg].x )  && ( this.x < (this.parent.subviews[eg].x+this.parent.subviews[eg].width) ) ){

+					newy = this.parent.subviews[eg].y+this.parent.subviews[eg].height;

+				}

+			}

+		}

+		

+		//Check for Borders

+		//should be done _after_ checking for other dockable stuff so it gets 

+		//priority to dock against the border of parent view

+		if (this.x<this.dockingbarrier){

+			newx=0;

+		}

+		if (this.y<this.dockingbarrier){

+			newy=0;

+		}

+		if ( (this.parent.width-(this.x+this.width))<this.dockingbarrier){

+			newx=this.parent.width-this.width;

+		}

+		if ( (this.parent.height-(this.y+this.height))<this.dockingbarrier){

+			newy=this.parent.height-this.height;

+		}

+		

+		//set position

+		this.setAttribute('x',newx);

+		this.setAttribute('y',newy);

+		]]>

+	</method>

+	

+	<method name="storeAdjustmentToParent" args="objX,objY">

+		this.tempXdistance=objX-this.x;

+		this.tempYdistance=objY-this.y;

+	</method>

+	

+	<!--- @keywords private 

+		this method is needed because if the dragging end and

+		it was not dragged _itself_ it was draged just because a connected

+		dockable Box was dragged than it could be that the connected

+		Box was forced to dock against something different onmouseup

+		so you have to rearrange the old "adjustment"	-->

+	<method name="_lookforParentOnly" args="obj">

+		<![CDATA[		

+		var newx=obj.x-tempXdistance;

+		var newy=obj.y-tempYdistance;

+		

+		this.setAttribute('x',newx);

+		this.setAttribute('y',newy);

+		]]>

+	</method>

+	

+	<dragstate name="dragger" />

+    

+    <animator attribute="y" to="20" duration="1000" started="false" />

+        

+    <animator name="doOut" attribute="y" to="-500" duration="1000" started="false" onstop="parent.doDestroy()" />    

+    

+    <method name="doDestroy">

+        this.destroy();

+    </method>

+	

+	<view width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" 

+		  x="1" y="1" bgcolor="$once{ canvas.getThemeColor('mainBackgroundColor') }" />

+	<view x="1" y="1" width="${ this.parent.width-2 }" height="20" >

+		

+		<gradientview x="0" width="${ this.parent.width }" height="20"

+				colorFrom="$once{ canvas.getThemeColor('baseMousecolorizer') }"

+				colorTo="0x000088" >

+		</gradientview>

+		

+        <text fontsize="10" height="17" x="6" y="1" text="${ this.parent.parent.title }" 

+			fgcolor="0xFFFFFF" resize="true" fontstyle="bold" />

+	

+		<view visible="${ this.parent.parent.closable }" x="${ this.parent.parent.width-20 }" 

+			y="2" resource="btn_presenter_close"

+                onmouseover="this.setAttribute('frame',2)"

+                onmouseout="this.setAttribute('frame',1)"

+                onmousedown="this.setAttribute('frame',3)"

+                onmouseup="this.setAttribute('frame',1)" >

+			<handler name="onclick">

+				this.parent.parent.close();

+			</handler>									

+		</view>

+		<!-- 

+		<view visible="${ !this.parent.parent.isopen }" x="2" y="3" resource="explorer_button_min_rsc">

+			<handler name="onmouseover">

+				this.setAttribute('frame',2);

+			</handler>

+			<handler name="onmouseout">

+				this.setAttribute('frame',1);

+			</handler>

+			<handler name="onmousedown">

+				this.setAttribute('frame',3);

+			</handler>	

+			<handler name="onmouseup">

+				this.setAttribute('frame',1);

+				this.parent.parent.toggleopen();

+			</handler>									

+		</view>

+		<view visible="${ this.parent.parent.isopen }" x="2" y="3" resource="explorer_button_max_rsc">

+			<handler name="onmouseover">

+				this.setAttribute('frame',2);

+			</handler>

+			<handler name="onmouseout">

+				this.setAttribute('frame',1);

+			</handler>

+			<handler name="onmousedown">

+				this.setAttribute('frame',3);

+			</handler>	

+			<handler name="onmouseup">

+				this.setAttribute('frame',1);

+				this.parent.parent.toggleopen();

+			</handler>									

+		</view>

+		 -->

+	</view>

+    <handler name="onaddsubview" args="v">

+		////Debug.write("onaddsubview",v);

+		if (v.parent.subviews.length>2) this._resizeview.bringToFront();

+    </handler>

+    <view visible="${ this.parent.resizeable }" name="_resizeview" 

+    	  x="${ this.parent.width - 17 }" y="${ this.parent.height - 17 }" 

+        resource="explorer_resize_rsc" cursor="explorer_resizemouse_rsc" 

+        onmousedown="this.parent.rs.apply()"

+        onmouseup="this.parent.rs.remove()" >

+    	<handler name="oninit">

+    		//if ($debug) Debug.write("setTint");

+    		//TODO: Fix this, does not work at the moment

+    		//http://code.google.com/p/openmeetings/issues/detail?id=470

+    		this.setColor(canvas.getThemeColor('baseMousecolorizer'));

+    	</handler>  	

+    </view>

+    <resizestate name="rs"/>

+</class>

+

+</library>

diff --git a/WebContent/swf10/base/components/explorer/labelexplorerBox.lzx b/WebContent/swf10/base/components/explorer/labelexplorerBox.lzx
new file mode 100644
index 0000000..e0670ac
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/labelexplorerBox.lzx
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="labelExplorerBox" extends="explorerBox" >

+

+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />

+	<method name="setLabelId" args="_labelid" >

+		this.labelid = _labelid;

+		this.title=canvas.getLabelName(this.labelid);

+	</method>

+	

+</class>

+

+</library>

diff --git a/WebContent/swf10/base/components/explorer/library.lzx b/WebContent/swf10/base/components/explorer/library.lzx
new file mode 100644
index 0000000..c16ca18
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/library.lzx
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+	<include href="incubator/gradientview.lzx" /> 

+

+	<include href="resources/" />

+	

+	<include href="explorerBox.lzx" />

+	<include href="labelexplorerBox.lzx" />

+

+    

+</library>

diff --git a/WebContent/swf10/base/components/explorer/resources/close_dn.png b/WebContent/swf10/base/components/explorer/resources/close_dn.png
new file mode 100644
index 0000000..57fcf20
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/close_dn.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/close_mo.png b/WebContent/swf10/base/components/explorer/resources/close_mo.png
new file mode 100644
index 0000000..b9d0f94
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/close_mo.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/close_up.png b/WebContent/swf10/base/components/explorer/resources/close_up.png
new file mode 100644
index 0000000..79d3b72
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/close_up.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/explorbar_maximize_dn.png b/WebContent/swf10/base/components/explorer/resources/explorbar_maximize_dn.png
new file mode 100644
index 0000000..e5ae343
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/explorbar_maximize_dn.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/explorbar_maximize_mo.png b/WebContent/swf10/base/components/explorer/resources/explorbar_maximize_mo.png
new file mode 100644
index 0000000..093a0b0
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/explorbar_maximize_mo.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/explorbar_maximize_no.png b/WebContent/swf10/base/components/explorer/resources/explorbar_maximize_no.png
new file mode 100644
index 0000000..fca6ec8
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/explorbar_maximize_no.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/explorbar_minimize_dn.png b/WebContent/swf10/base/components/explorer/resources/explorbar_minimize_dn.png
new file mode 100644
index 0000000..e05de83
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/explorbar_minimize_dn.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/explorbar_minimize_mo.png b/WebContent/swf10/base/components/explorer/resources/explorbar_minimize_mo.png
new file mode 100644
index 0000000..faba70d
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/explorbar_minimize_mo.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/explorbar_minimize_no.png b/WebContent/swf10/base/components/explorer/resources/explorbar_minimize_no.png
new file mode 100644
index 0000000..b4dafa3
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/explorbar_minimize_no.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/explorerbar.png b/WebContent/swf10/base/components/explorer/resources/explorerbar.png
new file mode 100644
index 0000000..4cb2d59
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/explorerbar.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/library.lzx b/WebContent/swf10/base/components/explorer/resources/library.lzx
new file mode 100644
index 0000000..2c123a6
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/library.lzx
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<!-- APL author sebawagner -->

+<resource src="explorerbar.png" name="explorer_thumb_rsc" />

+

+<!-- APL author sebawagner -->

+<resource name="explorer_button_min_rsc" >

+	<frame src="explorbar_minimize_no.png" />

+	<frame src="explorbar_minimize_mo.png" />

+	<frame src="explorbar_minimize_dn.png" />

+</resource>

+

+<!-- APL author sebawagner -->

+<resource name="explorer_button_max_rsc" >

+	<frame src="explorbar_maximize_no.png" />

+	<frame src="explorbar_maximize_mo.png" />

+	<frame src="explorbar_maximize_dn.png" />

+</resource>

+

+<!-- APL author sebawagner -->

+<resource name="explorer_resize_rsc" src="resizer.swf" />

+

+<!-- APL author sebawagner -->

+<resource name="btn_presenter_minimize" src="minimize_up.png" />

+<!-- APL author sebawagner -->

+<resource name="btn_presenter_maximize" src="maximize_up.png" />

+<!-- APL author sebawagner -->

+<resource name="btn_presenter_maximize2" src="maximize2_up.png" />

+

+<!-- APL author sebawagner -->

+<resource name="btn_presenter_close">

+    <frame src="close_up.png" />

+    <frame src="close_mo.png" />

+    <frame src="close_dn.png" />

+</resource> 

+

+<!-- APL author sebawagner -->

+<resource name="explorer_resizemouse_rsc" src="resizemouse.png" />

+

+</library>

diff --git a/WebContent/swf10/base/components/explorer/resources/maximize2_up.png b/WebContent/swf10/base/components/explorer/resources/maximize2_up.png
new file mode 100644
index 0000000..1edd23b
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/maximize2_up.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/maximize_up.png b/WebContent/swf10/base/components/explorer/resources/maximize_up.png
new file mode 100644
index 0000000..778c05c
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/maximize_up.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/minimize_up.png b/WebContent/swf10/base/components/explorer/resources/minimize_up.png
new file mode 100644
index 0000000..1637298
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/minimize_up.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/resizemouse.png b/WebContent/swf10/base/components/explorer/resources/resizemouse.png
new file mode 100644
index 0000000..be3164f
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/resizemouse.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/resizer.fla b/WebContent/swf10/base/components/explorer/resources/resizer.fla
new file mode 100644
index 0000000..07de957
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/resizer.fla
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/resizer.png b/WebContent/swf10/base/components/explorer/resources/resizer.png
new file mode 100644
index 0000000..2c951fe
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/resizer.png
Binary files differ
diff --git a/WebContent/swf10/base/components/explorer/resources/resizer.swf b/WebContent/swf10/base/components/explorer/resources/resizer.swf
new file mode 100644
index 0000000..2e5d0da
--- /dev/null
+++ b/WebContent/swf10/base/components/explorer/resources/resizer.swf
Binary files differ
diff --git a/WebContent/swf10/base/components/labelCheckbox.lzx b/WebContent/swf10/base/components/labelCheckbox.lzx
new file mode 100644
index 0000000..8660ce8
--- /dev/null
+++ b/WebContent/swf10/base/components/labelCheckbox.lzx
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+          

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="labelCheckbox" extends="checkbox" style="componentStyle" fontsize="11" >

+    <attribute name="labelid" type="number" setter="setLabelId(labelid)" />

+    <method name="setLabelId" args="_labelid" >

+        this.labelid = _labelid;

+        this.setAttribute('text',canvas.getLabelName(this.labelid));

+    </method>

+</class>

+

+</library>
\ No newline at end of file
diff --git a/WebContent/swf10/base/components/library.lzx b/WebContent/swf10/base/components/library.lzx
new file mode 100644
index 0000000..b79c839
--- /dev/null
+++ b/WebContent/swf10/base/components/library.lzx
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+    <include href="resetCombobox.lzx" />

+    <include href="miniIconsPresenter.lzx" />

+    <include href="labelCheckbox.lzx" />

+    

+    <include href="text/" />

+    <include href="scrollbars/" />

+    <include href="lps/" />

+    <include href="button/" />

+    <include href="explorer/" /> 

+      

+</library>

diff --git a/WebContent/swf10/base/components/lps/basePropertySelector.lzx b/WebContent/swf10/base/components/lps/basePropertySelector.lzx
new file mode 100644
index 0000000..2d9a099
--- /dev/null
+++ b/WebContent/swf10/base/components/lps/basePropertySelector.lzx
@@ -0,0 +1,48 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+	
+<class name="hidePropertyView" extends="view"
+	   width="$once{ parent.width }" height="$once{ parent.height }"
+	   opacity="0.7" bgcolor="0xFFFFFF" />
+
+<class name="basePropertySelector" extends="view">
+	
+	<!--- position of the SliderWin or ColorPicker -->
+	<attribute name="boxPosition" value="down" type="string" />
+	
+	<attribute name="isEnabled" value="true" type="boolean" />
+	<attribute name="enabledView" value="null" />
+	
+	<method name="setEnabled" args="b">
+		this.setAttribute('isEnabled',b);
+		if (this.enabledView != null) {
+			this.enabledView.destroy();
+			this.enabledView = null;
+		}
+		if (!b) {
+			this.enabledView = new lz.hidePropertyView(this);
+		} 
+	</method>
+    
+    
+</class>
+
+</library>
diff --git a/WebContent/swf10/base/components/lps/changeWidthSlider.lzx b/WebContent/swf10/base/components/lps/changeWidthSlider.lzx
new file mode 100644
index 0000000..dfa746a
--- /dev/null
+++ b/WebContent/swf10/base/components/lps/changeWidthSlider.lzx
@@ -0,0 +1,168 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>  
+
+<class name="changeWidthSlider" extends="basePropertySelector" bgcolor="0xFFFFFF" width="60" height="24">
+
+    <attribute name="numberAlign" value="right" type="string"/>
+    <attribute name="minimum" type="number" value="1" />
+    <attribute name="maximum" type="number" value="100" />
+    <attribute name="step" value="1" type="number"/>
+    <attribute name="initialNumberInit" value="1" type="number"/>
+    <attribute name="initialNumber" value="3" type="number"/>
+    
+    <attribute name="boxPosition" value="down" type="string"/>
+    
+    <attribute name="labelid" value="429" type="number"/>
+    
+    <event name="onplus" />
+    <event name="onminus" />
+    
+    <handler name="oninit">
+        this.initialNumberInit=initialNumber;
+    </handler>
+    
+    <method name="getValue">
+        return this.initialNumber;
+    </method>
+    
+    <method name="setSliderValue" args="v">
+    	this.initialNumber = v;
+    	this.numericValue.setAttribute('tempValue',this.initialNumber);
+    	this.numericValue.setAttribute('text',this.initialNumber);
+    	if ($debug) Debug.write("setSliderValue ",v);
+    	this.setEnabled(true);
+    </method>
+
+    <edittext name="numericValue" width="34" height="24" text="$once{ parent.initialNumber }" >
+        <attribute name="tempValue" value="$once{ parent.initialNumber }" type="number" />
+        <handler name="onfocus">
+            this.tempValue = Number(this.getText());
+        </handler>            
+        <handler name="onblur">
+            <![CDATA[
+                var t = parseInt(this.getText());
+                if (isNaN(t) || t > this.parent.maximum || t < this.parent.minimum){
+                    t = this.tempValue;
+                    this.setAttribute('text',t);
+                    lz.Focus.setFocus(this);
+                } else {
+                    this.tempValue = t;
+                    parent.setAttribute('initialNumber',t);
+                }
+            ]]>
+        </handler>
+    </edittext>
+
+
+    <button name="arrowView" x="36" width="24" y="1" height="23" >
+        <view name="arrow_down_slider" resource="arrow_down_slider_rsc" 
+            x="4" y="3" />
+            <handler name="onclick">
+            	if (this.parent.boxPosition=="up"){
+            		var pick = new lz.changeWidthSliderWin(canvas,{
+					            			initialNumber:parent.numericValue.tempValue,
+					            			btnRef:this.parent,x:(parent.getAttributeRelative('x',canvas)),
+					            			maxvalue:parent.maximum,
+					            			y:(parent.getAttributeRelative('y',canvas)-140+parent.height)
+				            			});
+            	} else {
+            		var pick = new lz.changeWidthSliderWin(canvas,{
+					            			initialNumber:parent.numericValue.tempValue,
+					            			btnRef:this.parent,x:(parent.getAttributeRelative('x',canvas)),
+					            			maxvalue:parent.maximum,
+					            			y:(parent.getAttributeRelative('y',canvas))
+				            			});
+            	}
+                lz.ModeManager.makeModal( pick );
+            </handler>
+        <labelTooltip labelid="$once{ parent.parent.labelid }" />
+    </button>
+    
+</class>
+    
+<class name="closableView" extends="view">
+    <method name="close">
+        lz.ModeManager.release(this);
+        this.destroy();
+    </method>
+</class>    
+    
+<class name="changeWidthSliderWin" extends="closableView" bgcolor="white" 
+    clickable="true" width="58" height="140" >
+    
+    <attribute name="btnRef" value="null" />
+    <attribute name="initialNumber" value="3" type="number"/>
+    <attribute name="maxvalue" value="100" type="number" />
+    
+    <!--- @keywords private -->
+    <method name="passModeEvent" args="eventStr,view" > 
+        <![CDATA[
+            if ( eventStr == "onmousedown"  ){
+                if ( view != null ) {
+                   if ( !view.childOf(this) ) {
+                        this.close();
+                   }
+                } else {
+                    this.close();
+                }
+            }
+            if (view && view.childOf(this)) {
+                if (view[ eventStr ]) {
+                    view[ eventStr ].sendEvent( view );
+                }
+                return false;
+            }
+            return true;
+        ]]> 
+    </method>
+
+    <view bgcolor="$once{ canvas.getThemeColor('baseMousecolorizer') }" width="58" height="138" x="1" y="1" />
+    
+    <vslider name="_slider" height="120" y="10" x="10" minvalue="1" maxvalue="$once{ parent.maxvalue }" 
+        initvalue="$once{ parent.initialNumber }" showrange="false" showvalue="true">
+        <handler name="onvalue" args="v">
+            //if ($debug) Debug.write("onvalue",v);
+            parent.btnRef.numericValue.tempValue = Number(v);
+            parent.btnRef.numericValue.setAttribute('text',v);
+            parent.btnRef.setAttribute('initialNumber',v);
+        </handler>
+        <handler name="onvalueChosenFinal">
+            parent.close();
+        </handler>        
+    </vslider>
+    
+    <view name="_close" x="$once{ parent.width-this.width-2 }" y="2"
+        resource="btn_presenter_close"
+        onmouseover="this.setAttribute('frame',2)"
+        onmouseout="this.setAttribute('frame',1)"
+        onmousedown="this.setAttribute('frame',3)"
+        onmouseup="this.setAttribute('frame',1)" >
+        <handler name="onclick">
+            this.setAttribute('frame',2);
+            this.parent.close();
+        </handler>
+        <labelTooltip labelid="430" />
+    </view>     
+        
+</class>    
+
+</library>
diff --git a/WebContent/swf10/base/components/lps/library.lzx b/WebContent/swf10/base/components/lps/library.lzx
new file mode 100644
index 0000000..7344bcc
--- /dev/null
+++ b/WebContent/swf10/base/components/lps/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <!-- APL author sebawagner -->
+    <resource name="arrow_down_slider_rsc" src="resources/arrow_down_slider.png" /> 
+
+    <include href="basePropertySelector.lzx" />
+    <include href="vslider.lzx" /> 
+    <include href="changeWidthSlider.lzx" />
+    
+</library>
diff --git a/WebContent/swf10/base/components/lps/resources/arrow_down_slider.png b/WebContent/swf10/base/components/lps/resources/arrow_down_slider.png
new file mode 100644
index 0000000..f5107d7
--- /dev/null
+++ b/WebContent/swf10/base/components/lps/resources/arrow_down_slider.png
Binary files differ
diff --git a/WebContent/swf10/base/components/lps/vslider.lzx b/WebContent/swf10/base/components/lps/vslider.lzx
new file mode 100644
index 0000000..986a4f2
--- /dev/null
+++ b/WebContent/swf10/base/components/lps/vslider.lzx
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- X_LZ_COPYRIGHT_BEGIN ************************************************
+* Copyright 2006, 2009 Laszlo Systems, Inc.  All Rights Reserved.              *
+* Use is subject to license terms.                                       *
+* X_LZ_COPYRIGHT_END ************************************************** -->
+<!--
+    vertical slider contributed by Sebastian Wagner
+-->
+<library>
+  
+  <class name="vslidertrack" extends="view" bgcolor="0x000000">
+        <view width="${ parent.width-2}" height="${ parent.height-2 }" 
+          x="1" y="1" bgcolor="0xFFFFFF"/>
+        <view width="${ parent.width-2}" bgcolor="0xCCCCCC"
+          x="1" y="${ (this.parent.parent.switchaxis) ? 
+                parent.parent._sliderthumb.y : 1 }" 
+          visible="${ parent.parent.showrange }" 
+          height="${ (this.parent.parent.switchaxis) ? 
+        (parent.parent._vslidertrack.height - parent.parent._sliderthumb.y-1) : 
+        parent.parent._sliderthumb.y }" />
+  </class>
+  
+  <class name="vsliderthumb" extends="button" bgcolor="0x999999" 
+        height="10" width="20" 
+    onmousedown="dragger.setAttribute('applied', true)" onmouseup="dragger.setAttribute('applied', false)">
+        <attribute name="drag_min" value="0" type="number" />
+        <attribute name="showvalue" type="boolean" value="true" />
+        <attribute name="drag_max" value="0" type="number" />
+        <handler name="oninit">
+                //Setting the initVal
+                this.setAttribute('y', getPosFromValue(this.parent.initvalue));
+        </handler>
+        
+        <method name="getValueFromPos">
+                var delta1 = this.parent.maxvalue-this.parent.minvalue;
+                var perc = (this.parent.switchaxis) ? 1-(y / (this.parent.height-this.height)) : (y / (this.parent.height-this.height));
+                //Debug.write(delta1,perc);
+                return (Math.round(perc*delta1))+this.parent.minvalue;
+        </method>
+        
+        <method name="getPosFromValue" args="val">
+                var perc = (val-this.parent.minvalue) / (this.parent.maxvalue-this.parent.minvalue);
+                //Debug.write(perc);
+                var valY = (this.parent.switchaxis) ? ( (1-perc) * (this.parent.height-this.height)) : (perc * (this.parent.height-this.height));
+                //Debug.write("valY: ",Math.round(valY));
+                return Math.round(valY);
+        </method>
+        
+        <setter name="y" args="v">
+                super.setAttribute('y', v);
+                var thumbVal = getValueFromPos();
+                if (thumbVal != parent.value) {
+                        this.parent.setValue(thumbVal);
+                }               
+        </setter>
+    <dragstate name="dragger" drag_axis="y"
+        drag_min_y="${ this.drag_min }"  
+        drag_max_y="${ this.drag_max }">
+            <text name="t1" x="-24" text="${ this.parent.parent.value }" y="-4" resize="true" />
+    </dragstate>
+  </class>
+
+  <class name="vslider" extends="view" >
+        <!--- Minimum Value -->
+        <attribute name="minvalue" type="number" value="0"/>
+        
+        <!--- Maximum Value -->
+        <attribute name="maxvalue" type="number" value="100"/>
+        
+        <!--- Showrange should the slidertrack be with color while 'sliding' -->
+        <attribute name="showrange" type="boolean" value="true"/>
+        
+        <!--- showvalue should the slider show the numbers of min/max -->
+        <attribute name="showvalue" type="boolean" value="true"/>
+        
+        <!--- switchaxis true means minimum-value is 
+                t op maximum is bottom false turns around -->
+        <attribute name="switchaxis" type="boolean" value="false"/>
+        
+        <!-- Initial Value -->
+        <attribute name="initvalue" value="0" type="number" />          
+        
+    <!--- @keywords private -->
+    <event name="onvalue"/>
+        
+    <!--- @keywords private -->
+    <attribute name="value" value="0" setter="setValue(value)"/>
+    <method name="setValue" args="v">
+        if (!isinited) {
+          this.value = v;
+          return;
+        }
+        if (this.value == v) return;
+        this.value = v;
+        if (onvalue) onvalue.sendEvent(v);
+    </method>
+       
+        <vslidertrack name="_vslidertrack" x="5" 
+        width="10" height="${ parent.height }" />
+        <vsliderthumb name="_sliderthumb" 
+        drag_max="${ parent.height-this.height }" 
+        showvalue="${ parent.showvalue }" />
+        
+        <text text="${ ( (this.parent.switchaxis) ? 
+                this.parent.maxvalue : this.parent.minvalue ) }" 
+        visible="${ parent.showvalue }" 
+        y="-8" x="${ this.parent._vslidertrack.width+10 }" />
+        
+        <text text="${ ( (this.parent.switchaxis) ? 
+                this.parent.minvalue : this.parent.maxvalue ) }" 
+          visible="${ parent.showvalue }" 
+          y="${ this.parent.height-10 }" 
+          x="${ this.parent._vslidertrack.width+10 }" />
+  </class>
+  
+  
+
+</library>
diff --git a/WebContent/swf10/base/components/miniIconsPresenter.lzx b/WebContent/swf10/base/components/miniIconsPresenter.lzx
new file mode 100644
index 0000000..1d58a24
--- /dev/null
+++ b/WebContent/swf10/base/components/miniIconsPresenter.lzx
@@ -0,0 +1,51 @@
+<library>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+

+<class name="miniIconsPresenter" extends="view">

+    

+    <attribute name="iconRessourceName" value="" type="string"/>

+    

+    <handler name="onmouseover">

+        this._bg.setAttribute("bgcolor",0xFFFFFF);

+        this._bg.setAttribute("visibility","visible");

+    </handler>

+    

+    <handler name="onmouseout">

+        this._bg.setAttribute("visibility","hidden");

+    </handler>

+    

+    <handler name="onmousedown">

+        this._bg.setAttribute("bgcolor",canvas.getThemeColor('basebgcolorizer'));

+        this._bg.setAttribute("visibility","visible");

+    </handler>

+    

+    <handler name="onmouseup">

+        this._bg.setAttribute("visibility","hidden");

+    </handler>

+    

+    <view name="_bg" visibility="hidden" opacity="0.7"

+          width="14" height="14" x="1" y="1" bgcolor="0xFFFFFF" />

+          

+    <view name="_itemRsc" resource="$once{ parent.iconRessourceName }" />

+    

+</class>

+

+</library>

diff --git a/WebContent/swf10/base/components/resetCombobox.lzx b/WebContent/swf10/base/components/resetCombobox.lzx
new file mode 100644
index 0000000..f95abff
--- /dev/null
+++ b/WebContent/swf10/base/components/resetCombobox.lzx
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+    <class name="resetCombobox" extends="combobox" editable="false" shownitems="12"

+    	   style="componentStyle" itemclassname="labeldTextListItem">

+    

+        <method name="reset" >

+            <![CDATA[

+                var currentCount = this.cblist.getNumItems();

+                for (var i = 0; i < currentCount; i++)

+                    this.removeItemAt(0);

+                this.clearSelection();

+            ]]>

+        </method>

+    

+    </class>

+        

+</library>

diff --git a/WebContent/swf10/base/components/scrollbars/library.lzx b/WebContent/swf10/base/components/scrollbars/library.lzx
new file mode 100644
index 0000000..9ee00e1
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/library.lzx
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+	<!-- APL Author sebawagner -->

+	<resource name="omscrolltrack_y_rsc" src="resources/y_scrolltrack.swf" />

+	

+	<!-- APL Author sebawagner -->

+    <resource name="omscrollbar_ythumbmiddle_rsc" src="resources/scrollthumb_y_mid.swf" />

+    <!-- APL Author sebawagner -->

+    <resource name="omscrollbar_ythumbtop_rsc" src="resources/scrollthumb_y_top.swf" />

+    <!-- APL Author sebawagner -->

+    <resource name="omscrollbar_ythumbbottom_rsc" src="resources/scrollthumb_y_bottom.swf" />

+    <!-- APL Author sebawagner -->

+   	<resource name="omscrolltrack_x_rsc" src="resources/x_scrolltrack.swf" />

+	<!-- APL Author sebawagner -->

+    <resource name="omscrollbar_xthumbmiddle_rsc" src="resources/scrollthumb_x_mid.swf" />

+    <!-- APL Author sebawagner -->

+    <resource name="omscrollbar_xthumbleft_rsc" src="resources/scrollthumb_x_left.swf" />

+    <!-- APL Author sebawagner -->

+    <resource name="omscrollbar_xthumbright_rsc" src="resources/scrollthumb_x_right.swf" />

+

+	<include href="om_vscrollbar.lzx"/>

+	<include href="om_hscrollbar.lzx"/>

+

+</library>

diff --git a/WebContent/swf10/base/components/scrollbars/om_hscrollbar.lzx b/WebContent/swf10/base/components/scrollbars/om_hscrollbar.lzx
new file mode 100644
index 0000000..036fed6
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/om_hscrollbar.lzx
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="om_hscrollbar" extends="basescrollbar" styleable="false"
+    axis="x">
+
+    <!--- @keywords private -->
+    <attribute name="height" value="10"/>
+    
+    <!--- @keywords private -->
+    <method name="_showEnabled">
+        <![CDATA[
+        if (!_enabled) {
+        	//this.scrolltrack.thumb.setAttribute('height', 0);
+            this.scrolltrack.thumb.setAttribute('visibility', 'hidden');
+        } else {
+            this.scrolltrack.thumb.setAttribute('visibility', 'visible');
+        }
+        super._showEnabled();
+    ]]>
+    </method>
+
+	<view name="rightarrow" width="0" />
+    <view name="scrolltrack">
+    	 <basescrolltrack name="left"
+           resource="omscrolltrack_x_rsc" stretches="width">
+         	<attribute name="height" value="${parent.height}"/>
+            <attribute name="width" value="${parent.width}"/>  
+         </basescrolltrack>
+         <basescrollthumb name="thumb" x="1">
+             <view resource="omscrollbar_xthumbleft_rsc"/>
+             <view resource="omscrollbar_xthumbmiddle_rsc" stretches="both"/>
+             <view resource="omscrollbar_xthumbright_rsc"/>
+             <stableborderlayout axis="x"/>
+        </basescrollthumb>
+    </view>
+
+	<view height="0" name="leftarrow" />
+    <stableborderlayout axis="x"/>
+
+</class>
+</library>
diff --git a/WebContent/swf10/base/components/scrollbars/om_vscrollbar.lzx b/WebContent/swf10/base/components/scrollbars/om_vscrollbar.lzx
new file mode 100644
index 0000000..98623ed
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/om_vscrollbar.lzx
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+<class name="om_vscrollbar" extends="basescrollbar" styleable="false"
+    axis="y">
+
+    <!--- @keywords private -->
+    <attribute name="width" value="10"/>
+    
+    <!--- @keywords private -->
+    <method name="_showEnabled">
+        <![CDATA[
+        if (!_enabled) {
+        	//this.scrolltrack.thumb.setAttribute('height', 0);
+            this.scrolltrack.thumb.setAttribute('visibility', 'hidden');
+        } else {
+            this.scrolltrack.thumb.setAttribute('visibility', 'visible');
+        }
+        super._showEnabled();
+    ]]>
+    </method>
+
+	<view name="toparrow" height="0" />
+    <view name="scrolltrack">
+    	 <basescrolltrack name="top"
+           resource="omscrolltrack_y_rsc" stretches="height">
+         	<attribute name="height" value="${parent.height}"/>
+            <attribute name="width" value="${parent.width}"/>  
+         </basescrolltrack>
+         <basescrollthumb name="thumb" x="1">
+             <view resource="omscrollbar_ythumbtop_rsc"/>
+             <view resource="omscrollbar_ythumbmiddle_rsc" stretches="both"/>
+             <view resource="omscrollbar_ythumbbottom_rsc"/>
+             <stableborderlayout axis="y"/>
+        </basescrollthumb>
+    </view>
+
+	<view height="0" name="bottomarrow" />
+    <stableborderlayout axis="y"/>
+
+</class>
+</library>
diff --git a/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_x_left.swf b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_x_left.swf
new file mode 100644
index 0000000..fd9411b
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_x_left.swf
Binary files differ
diff --git a/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_x_mid.swf b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_x_mid.swf
new file mode 100644
index 0000000..fff3744
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_x_mid.swf
Binary files differ
diff --git a/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_x_right.swf b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_x_right.swf
new file mode 100644
index 0000000..74ea64a
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_x_right.swf
Binary files differ
diff --git a/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_y_bottom.swf b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_y_bottom.swf
new file mode 100644
index 0000000..09a370b
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_y_bottom.swf
Binary files differ
diff --git a/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_y_mid.swf b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_y_mid.swf
new file mode 100644
index 0000000..af9015f
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_y_mid.swf
Binary files differ
diff --git a/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_y_top.swf b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_y_top.swf
new file mode 100644
index 0000000..c701740
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/resources/scrollthumb_y_top.swf
Binary files differ
diff --git a/WebContent/swf10/base/components/scrollbars/resources/x_scrolltrack.swf b/WebContent/swf10/base/components/scrollbars/resources/x_scrolltrack.swf
new file mode 100644
index 0000000..937dd8d
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/resources/x_scrolltrack.swf
Binary files differ
diff --git a/WebContent/swf10/base/components/scrollbars/resources/y_scrolltrack.swf b/WebContent/swf10/base/components/scrollbars/resources/y_scrolltrack.swf
new file mode 100644
index 0000000..b05b88a
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/resources/y_scrolltrack.swf
Binary files differ
diff --git a/WebContent/swf10/base/components/scrollbars/scrollbar_yresources.lzx b/WebContent/swf10/base/components/scrollbars/scrollbar_yresources.lzx
new file mode 100644
index 0000000..bc08ffe
--- /dev/null
+++ b/WebContent/swf10/base/components/scrollbars/scrollbar_yresources.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+

+    

+</library>
\ No newline at end of file
diff --git a/WebContent/swf10/base/components/text/borderedInputtext.lzx b/WebContent/swf10/base/components/text/borderedInputtext.lzx
new file mode 100644
index 0000000..851449e
--- /dev/null
+++ b/WebContent/swf10/base/components/text/borderedInputtext.lzx
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="borderedInputtext" extends="view" bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }" >

+	<attribute name="width" value="200" type="size" />

+	<attribute name="height" value="18" type="size" />

+    <attribute name="tvalue" type="string" value="default"/>

+    <attribute name="sendchange" value="false" type="boolean" />

+    <attribute name="multiline" value="false"/>

+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />

+	<method name="setLabelId" args="_labelid" >

+		this.labelid = _labelid;

+		this.setAttribute('text',canvas.getLabelName(this.labelid));

+	</method>

+    <attribute name="checkIsNumber" value="false" type="boolean" />

+    <attribute name="checkIsDouble" value="false" type="boolean" />

+    <attribute name="editable" value="true" setter="setEditable(editable)" type="boolean" />

+    <method name="setEditable" args="value">

+        this.editable=value;

+    	this.field.setEnabled(value);

+    </method>

+    <event name="onblur" />

+    <method name="setItemEnabled" args="value">

+    	this.field.setEnabled(value);

+    </method>    

+    <attribute name="maxlength" value="null" type="number"/>         	

+	<attribute name="text" type="string" value="" />

+		<!-- -->

+  <inputtext name="field" fontsize="10" text="${ this.parent.text }" x="1" y="1" bgcolor="0xFFFFFF" 

+  	multiline="$once{parent.multiline}" width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" >

+  		<attribute name="preText" value="" type="string" />

+  		<handler name="onfocus">

+  			this.preText = this.getText();

+  		</handler>

+      	<handler name="onblur">

+      		var t = this.getText();

+      		if (this.parent.checkIsNumber){

+      			if ( isNaN( Number(t) ) ){

+      				if (this.parent.checkIsDouble){

+      					t="0.00";

+      				} else {

+      					t=this.preText;

+      				}

+      				this.setAttribute('text',t);

+      			}

+      		}

+            if (this.parent.sendchange) this.parent.parent.sendchange(this.parent,this.parent.tvalue,this.getText());

+            if (this.parent.onblur) this.parent.onblur.sendEvent();

+      	</handler>

+        <handler name="oninit">

+            this.setEnabled(this.parent.editable);

+        </handler>       	           

+	</inputtext>	   

+	 

+	<method name="getText">

+		return this.field.getText();

+	</method>

+	<method name="setText" args="txt">

+		this.setAttribute('text',txt);

+	</method> 		

+</class>

+

+<class name="borderedMultiInputtext" extends="view">

+	<attribute name="width" value="200" type="size" />

+	<attribute name="height" value="18" type="size" />

+    <attribute name="tvalue" type="string" value="default"/>

+    <attribute name="sendchange" value="false" type="boolean" />

+    <attribute name="multiline" value="false"/>

+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />

+	<method name="setLabelId" args="_labelid" >

+		this.labelid = _labelid;

+		this.setAttribute('text',canvas.getLabelName(this.labelid));

+	</method>

+    <attribute name="checkIsNumber" value="false" type="boolean" />

+    <attribute name="checkIsDouble" value="false" type="boolean" />

+    <attribute name="editable" value="true" setter="setEditable(editable)" type="boolean" />

+    <method name="setEditable" args="value">

+        this.editable=value;

+    	this.field.setEnabled(value);

+    </method>

+    <method name="setItemEnabled" args="value">

+    	this.field.setEnabled(value);

+    </method>    

+    <attribute name="maxlength" value="null" type="number"/>         	

+	<attribute name="bgcolor" value="0xA3B2CC" type="color" />

+	<attribute name="text" type="string" value="" />

+		<!-- -->

+  <inputtext name="field" fontsize="10" text="${ this.parent.text }" x="1" y="1" bgcolor="0xFFFFFF" 

+  	multiline="true" width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" >

+      	<handler name="onblur">

+      		var t = this.getText();

+      		if (this.parent.checkIsNumber){

+      			if ( isNaN( Number(t) ) ){

+      				if (this.parent.checkIsDouble){

+      					t="0.00";

+      				} else {

+      					t="0";

+      				}

+      				this.setAttribute('text',t);

+      			}

+      		}

+            if (this.parent.sendchange) this.parent.parent.sendchange(this.parent,this.parent.tvalue,this.getText());

+      	</handler>   

+        <handler name="oninit">

+            this.setEnabled(this.parent.editable);

+            if(this.multiline) this.init();

+        </handler>       	           

+        <method name="init">

+            super.init();        

+        </method>

+	</inputtext>	   

+	 

+	<method name="getText">

+		return this.field.getText();

+	</method>

+	<method name="setText" args="txt">

+		this.setAttribute('text',txt);

+	</method> 		

+</class>

+

+<class name="borderedPasswordText" extends="view">

+	<attribute name="width" value="200" type="size" />

+	<attribute name="height" value="18" type="size" />

+    <attribute name="tvalue" type="string" value="default"/>

+    <attribute name="sendchange" value="false" type="boolean" />

+    <attribute name="multiline" value="false"/>

+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />

+	<method name="setLabelId" args="_labelid" >

+		this.labelid = _labelid;

+		this.setAttribute('text',canvas.getLabelName(this.labelid));

+	</method>

+    <attribute name="checkIsNumber" value="false" type="boolean" />

+    <attribute name="checkIsDouble" value="false" type="boolean" />

+    <attribute name="editable" value="true" setter="setEditable(editable)" type="boolean" />

+    <method name="setEditable" args="value">

+        this.editable=value;

+    	this.field.setEnabled(value);

+    </method>

+    <method name="setItemEnabled" args="value">

+    	this.field.setEnabled(value);

+    </method>    

+    <attribute name="maxlength" value="null" type="number"/>         	

+	<attribute name="bgcolor" value="0xA3B2CC" type="color" />

+	<attribute name="text" type="string" value="" />

+		<!-- -->

+  <inputtext name="field" fontsize="10" text="${ this.parent.text }" x="1" y="1" bgcolor="0xFFFFFF" 

+  	multiline="$once{parent.multiline}" password="true" width="${ this.parent.width-2 }" height="${ this.parent.height-2 }" >

+      	<handler name="onblur">

+      		var t = this.getText();

+      		if (this.parent.checkIsNumber){

+      			if ( isNaN( Number(t) ) ){

+      				if (this.parent.checkIsDouble){

+      					t="0.00";

+      				} else {

+      					t="0";

+      				}

+      				this.setAttribute('text',t);

+      			}

+      		}

+            if (this.parent.sendchange) this.parent.parent.sendchange(this.parent,this.parent.tvalue,this.getText());

+      	</handler>   

+        <handler name="oninit">

+            this.setEnabled(this.parent.editable);

+        </handler>       	           

+	</inputtext>	   

+	 

+	<method name="getText">

+		return this.field.getText();

+	</method>

+	<method name="setText" args="txt">

+		this.setAttribute('text',txt);

+	</method> 		

+</class>

+

+</library>

diff --git a/WebContent/swf10/base/components/text/labelText.lzx b/WebContent/swf10/base/components/text/labelText.lzx
new file mode 100644
index 0000000..c5f961c
--- /dev/null
+++ b/WebContent/swf10/base/components/text/labelText.lzx
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="labelText" extends="text" resize="true" fontsize="11" >

+

+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />

+	<method name="setLabelId" args="_labelid" >

+		this.labelid = _labelid;

+		this.setAttribute('text',canvas.getLabelName(this.labelid));

+	</method>

+	

+</class>

+

+

+<class name="labelTextWidthTooltip" extends="text" resize="true" 

+	   onmouseover="" onmouseout=""

+	   fontsize="11" >

+	

+	<attribute name="labelLabelid" type="number" value="-1" />

+

+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />

+	<method name="setLabelId" args="_labelid" >

+		this.labelid = _labelid;

+		this.setAttribute('text',canvas.getLabelName(this.labelid));

+	</method>

+	

+	<labelTooltip name="_labelTooltip" labelid="$once{ parent.labelLabelid }" />

+	

+</class>

+

+<class name="labeldTextListItem" extends="textlistitem">

+	<attribute name="labelid" type="number" setter="setLabelId(labelid)" />

+    <method name="setLabelId" args="_labelid" >

+        this.labelid = _labelid;

+        this.setAttribute('text',canvas.getLabelName(this.labelid));

+    </method>

+    <labelTooltip initByDataPathparent="true" />

+</class>

+

+</library>

diff --git a/WebContent/swf10/base/components/text/labelTooltip.lzx b/WebContent/swf10/base/components/text/labelTooltip.lzx
new file mode 100644
index 0000000..442eb3c
--- /dev/null
+++ b/WebContent/swf10/base/components/text/labelTooltip.lzx
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="labelTooltip" extends="view" visible="false" >

+

+	<attribute name="inittwice" value="false" type="boolean" />

+    <attribute name="multiline" value="false" type="boolean" />

+    <attribute name="ismenubuttonlabel" value="false" type="boolean" />

+    <attribute name="initByDataPathparent" value="false" type="boolean" />

+    

+    <attribute name="holder" value="null" />

+    

+    <event name="setContent" />

+        

+    <handler name="onmouseover" reference="this.parent">

+    	<![CDATA[

+            this.doonmouseover();

+        ]]>        

+    </handler>

+    <handler name="onmouseout" reference="this.parent">

+        this.cleanHolder();

+    </handler>

+    

+    <method name="doonmouseover">

+    	<![CDATA[

+            this.setContent.sendEvent();

+	    	if (this.ismenubuttonlabel){

+	    		this.parent.setLabel();

+	    	}

+	    	if (this.inittwice){

+	    		this.setAttribute('text',canvas.getLabelName(this.labelid));

+	    	}

+	    	if (this.initByDataPathparent){

+                this.setAttribute('text',parent.text);

+            }

+	        var xVal = canvas.getMouse('x');

+	        var yVal = canvas.getMouse('y');

+			////Debug.write("mytext: ",this.mytext);

+			if (this.multiline && this.text.length!=0){

+				this.holder = new lz.xmlCrmTooltipMulti(canvas,{text:this.text,holder:this});

+			} else if (this.text.length!=0){

+				this.holder = new lz.xmlCrmTooltip(canvas,{text:this.text,holder:this});

+			}

+	        if (xVal<canvas.width/2){

+	            xVal += 0;

+	        } else {

+	            xVal -= this.holder.width-14;

+	        }

+	        if (yVal<canvas.height/2){

+	            yVal += 24;

+	        } else {

+	            yVal -= 24;

+	        }

+	        this.holder.setAttribute('x',xVal);

+	        this.holder.setAttribute('y',yVal);

+	        canvas.registerToolTip(this);

+        ]]>        

+    </method>

+    

+    <handler name="onmouseup" reference="this.parent">

+        this.cleanHolder();

+    </handler>

+    <handler name="onclick" reference="this.parent">

+        this.cleanHolder();

+    </handler>  

+    

+    <method name="cleanHolder">

+        if (this.holder!=null) {

+            this.holder.destroy();

+            this.holder = null; 

+            canvas.clearToolTip();

+        }

+    </method> 

+      

+    <attribute name="labelid" type="number" setter="setLabelId(labelid)" />

+    <method name="setLabelId" args="_labelid" >

+        this.labelid = _labelid;

+        this.setAttribute('text',canvas.getLabelName(this.labelid));

+    </method>

+    <attribute name="text" value="" type="string" />

+</class>

+

+<class name="xmlCrmTooltip" extends="view" bgcolor="0x000000"

+    width="${ this._text.width+2 }" height="${ this._text.height+2 }" >

+    <switch>

+	  <when property="$as3">

+		<passthrough>

+		  import flash.filters.DropShadowFilter;

+		</passthrough>

+	  </when>

+	</switch>

+    <attribute name="text" value="" type="string" />

+    <attribute name="holder" value="null" />

+    <text x="1" y="1" text="${ parent.text }" resize="true" 

+        fontsize="10" name="_text" bgcolor="0xFFFFFF" />

+    <handler name="onmouseout">

+        this.destroy();

+    </handler>

+    <handler name="oninit">

+        this.setShadow();

+    </handler>

+    <method name="setShadow" >

+        <![CDATA[

+        if (this.isinited){

+            this.normalMC = this.getDisplayObject();

+           	this.displacementMap = new DropShadowFilter();

+            this.normalMC.filters = [this.displacementMap];

+        }

+        ]]>              

+    </method> 

+</class>

+

+<class name="xmlCrmTooltipMulti" extends="view" bgcolor="0x000000" 

+    width="${ this._text.width+2 }" height="${ this._text.height+2 }" >

+    <switch>

+	  <when property="$as3">

+		<passthrough>

+		  import flash.filters.DropShadowFilter;

+		</passthrough>

+	  </when>

+	</switch>

+    <attribute name="text" value="" type="string" />

+    <attribute name="holder" value="null" />

+    <text x="1" y="1" text="${ parent.text }" resize="true" 

+        fontsize="10" name="_text" bgcolor="0xFFFFFF" multiline="true" />

+    <handler name="oninit">

+        this.setShadow();

+    </handler>

+    <method name="setShadow" >

+        <![CDATA[

+        if (this.isinited){

+            this.normalMC = this.getDisplayObject();

+           	this.displacementMap = new DropShadowFilter();

+            this.normalMC.filters = [this.displacementMap];

+        }

+        ]]>              

+    </method>	    

+    <handler name="onmouseout">

+        this.destroy();

+    </handler>

+</class>

+

+</library>

diff --git a/WebContent/swf10/base/components/text/library.lzx b/WebContent/swf10/base/components/text/library.lzx
new file mode 100644
index 0000000..962a736
--- /dev/null
+++ b/WebContent/swf10/base/components/text/library.lzx
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+	

+	<include href="borderedInputtext.lzx" />

+	<include href="labelText.lzx" />

+	<include href="labelTooltip.lzx" />

+	

+

+</library>

diff --git a/WebContent/swf10/base/functions.lzx b/WebContent/swf10/base/functions.lzx
new file mode 100644
index 0000000..7ed7d0c
--- /dev/null
+++ b/WebContent/swf10/base/functions.lzx
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<!-- 
+
+NOTICE:
+All contents regarding "chat" are moved to /modules/chat/globalMethods.lzx
+Issue353. 2008.3.28 H.kuze(minamotonoason)
+
+-->
+
+
+<script>
+<![CDATA[
+
+// Load Labels from List
+var labels = new Object();
+
+String.prototype.startsWith = function(prefix) {
+    return (this.indexOf(prefix) === 0);
+};	
+
+function setLabelObjectByHundred(no, obj){
+   	for (var i = 0; i < obj.length; ++i) {
+	    labels["id" + obj[i].id] = obj[i].value;
+   	}
+}
+
+function getLabelTag(labelid){
+	var l = labels["id" + labelid];
+	if (l == undefined) {
+		l = "Error Missing [" + labelid + "]";
+	}
+    return l;
+}
+
+]]>
+</script>
+		
+</library>
diff --git a/WebContent/swf10/base/hibernate/hibRtmpConnection.lzx b/WebContent/swf10/base/hibernate/hibRtmpConnection.lzx
new file mode 100644
index 0000000..307cffd
--- /dev/null
+++ b/WebContent/swf10/base/hibernate/hibRtmpConnection.lzx
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+    

+<dataset name="myresultnavi" />

+

+<dataset name="languagesSet" />        

+

+<class name="userStatus" extends="view" width="250" height="30">

+    <attribute name="statusText" type="string" />

+    <attribute name="statusColor" type="number" value="0" />

+

+    <text name="status" width="240" height="20" x="5" y="5" fontstyle="bold" fgcolor="0" text="defaulttext" fontsize="10"/>

+

+    <handler name="oninit">

+        this.status.setAttribute("text", this.statusText);

+        this.status.setAttribute("fgcolor", this.statusColor);

+        this.setAttribute("visibility", "visible");

+        lz.Timer.addTimer( new LzDelegate( this, "selfDestroy" ), 3000 );

+    </handler>

+

+    <method name="selfDestroy" args="ignore=null">

+        this.destroy();

+    </method>

+</class>

+

+<class name="hibRtmpConnection" extends="rtmpConnection" debug="false" src="" >

+

+     <!--

+        The onconnect Method is triggered several times:

+             - When you enter a room the NetConnection will close and reconnect to the Scope of the Room

+             - When you leave the room again it will be re-connected to the default scope again

+      -->

+     <handler name="onconnect">

+		if($debug) Debug.info("hibRtmpConnection/onconnect send to LocalConnection ");

+		canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'as3ConnectionSuccess');

+		

+		//reset rights

+        canvas.isAllowedToGiveExclusiveAudio = false;

+        // this.overwritePublicSID.doCall();

+        //this.setUsernameReconnect.doCall();

+    </handler>

+

+    <netRemoteCallHib name="overwritePublicSID" funcname="overwritePublicSID" >

+    	<netparam><method name="getValue"> return canvas.publicSID;</method></netparam>

+        <handler name="ondata" args="value">

+            //The onResult-Handler will be called be the rtmpconnection

+            if ($debug) Debug.write("overwritePublicSID: ",value);

+        </handler>

+    </netRemoteCallHib>

+

+    <handler name="onerror" args="value">

+        if ($debug) Debug.write("Connection error ",value);

+        // this.connect();

+    </handler>

+    

+</class>

+

+<hibRtmpConnection name="thishib" id="hib" />

+

+</library>

diff --git a/WebContent/swf10/base/hibernate/library.lzx b/WebContent/swf10/base/hibernate/library.lzx
new file mode 100644
index 0000000..78d99f9
--- /dev/null
+++ b/WebContent/swf10/base/hibernate/library.lzx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+	<include href="netRemoteCallHib.lzx" />

+	<include href="hibRtmpConnection.lzx" />

+

+</library>

diff --git a/WebContent/swf10/base/hibernate/netRemoteCallHib.lzx b/WebContent/swf10/base/hibernate/netRemoteCallHib.lzx
new file mode 100644
index 0000000..bf28b46
--- /dev/null
+++ b/WebContent/swf10/base/hibernate/netRemoteCallHib.lzx
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="netRemoteCallHib" extends="netremotecall">

+

+	<!-- this should be the contentSaveWindow -->

+	<attribute name="returnObj" value="null" />

+	 

+	<!-- if true this object will register at the update-observer -->

+	<attribute name="registerObject" value="false" type="boolean" />

+	

+	<!-- show Error Messages with normal Box -->

+    <attribute name="activeErrorHandler" value="false" type="boolean" />	

+    

+	<!-- show Error Messages with normal Box -->

+    <attribute name="showLoading" value="true" type="boolean" />    

+	

+	<!-- show Error Messages with Callback Box -->

+	<attribute name="isCallBackHandler" value="false" type="boolean" />	

+	

+	<handler name="oninit">

+		if (this.registerObject) this.parent.addViewToObserver(this);

+	</handler>	

+	<method name="doCall">

+        //if (this.showLoading) canvas._loadingAll.setAttribute('visible',true);

+		//if($debug) Debug.write("netRemoteCallHib/doCall: [ " , this.funcname , " ]",this.parent);

+		this.callRPC(null);

+	</method>

+	

+	<event name="sendCallBack" />

+	

+	<!--

+

+	 -->

+	<handler name="ondata" args="value">

+		<![CDATA[

+			//Debug.write("ondata: ",this.funcname,value);

+			

+			//if (this.showLoading) canvas._loadingAll.setAttribute('visible',false);

+			

+			//Another Error Handler for the Form-Components

+			if (this.returnObj!=null && Number(value)>0) {

+				//Debug.write("this.returnObj.processNext");

+				this.returnObj.processNext();

+			} else if (this.returnObj!=null && Number(value)<0) {

+				this.returnObj.errorByCode(Number(value));

+			} else if (this.returnObj!=null && value==null) {

+				this.returnObj.errorByCode(-1);

+			}

+			

+            if (this.activeErrorHandler) {

+                if (Number(value)<0){

+                    if ($debug) Debug.warn("Received Error ID: ",value);					

+					if (this.isCallBackHandler) 

+					{

+					   //TODO: Fix error messages

+					   

+					} else {

+					   //TODO: Fix error messages

+					}

+                }

+            }			

+		]]>

+	</handler>	

+</class>

+

+</library>

diff --git a/WebContent/swf10/base/library.lzx b/WebContent/swf10/base/library.lzx
new file mode 100644
index 0000000..cde16f9
--- /dev/null
+++ b/WebContent/swf10/base/library.lzx
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+    <include href="functions.lzx" />

+    <include href="mainAttributes.lzx" />

+    <include href="mainDatasets.lzx" />

+    <include href="mainMethods.lzx" />

+    

+    <include href="remote/" />

+    <include href="components/" />

+    <include href="hibernate/" />

+	

+</library>

diff --git a/WebContent/swf10/base/mainAttributes.lzx b/WebContent/swf10/base/mainAttributes.lzx
new file mode 100644
index 0000000..e7a5233
--- /dev/null
+++ b/WebContent/swf10/base/mainAttributes.lzx
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+

+<!-- all attributes for main.lzx -->

+

+<library>

+	

+	<!--- 

+	   Audio-Video Quality Settings

+		overwritten by values from the public/config.xml 

+	 -->

+	<attribute name="codecType" value="h264" type="string" />

+	<attribute name="framesPerSecond" value="30" type="number" />

+	<attribute name="bandwidthNeededNormal" value="16384" type="number" />

+	<attribute name="bandwidthNeededBest" value="32768" type="number" />

+	<attribute name="camQualityNormal" value="75" type="number" />

+	<attribute name="camQualityBest" value="75" type="number" />

+	<attribute name="microphoneRateBest" value="22" type="number" /> 

+	<attribute name="echoPath" value="128" type="number" /> 

+	<attribute name="echoSuppression" value="true" type="string" />

+		

+

+	<!--- 

+        Holds a reference to the current VideoCOntainer Object

+        containing the VideoViews

+        and some more references to temp-objects

+	 -->

+	<attribute name="_videocontainer" value="null" />

+

+	<attribute name="currentNC" value="null" />

+

+	<attribute name="currentRoomObject" value="null"/>

+

+	<attribute name="userobject" value="null"/>

+

+	<attribute name="webAppRootKey" value="" type="string" />

+	

+	<!--- 

+		URL/IP to use for the Server for HTTP and HTTPS traffic.

+	    If this value is empty it will use the rtmphostlocal 

+	    variable (and in that way try to connect to the 

+	    domain-name the OpenMeetings-Client has been loading from)

+	 -->

+	<attribute name="httphostlocal" value="" type="string" />

+	

+	<!--- 

+	    Port to use for the Server

+	    This port is used to connect to the HTTP-Servlet

+	    of the Red5-Servlet

+	 -->

+	<attribute name="red5httpport" value="5080" type="string" />

+

+	<attribute name="httpRootKey" value="/" type="string" />

+	

+	<attribute name="protocol" value="/" type="string" />

+	

+	<attribute name="proxyType" value="none" type="string" />

+

+	<!---

+		A reference to the current screenSharingDialogContainer or 

+		null if there is nothing to stream

+	 -->

+	<attribute name="screenSharingDialogContainer" value="null" />

+	

+	<!--

+	    this value indicates if this user is allowed to draw to the Whiteboard

+	    If this user is currently Moderator => he ALWAYS can draw to whiteboard

+	    even if this isAllowedToDraw == false

+	 -->

+	<attribute name="isAllowedToDraw" value="false" type="boolean" />

+	

+	<attribute name="isAllowedToScreenShare" value="false" type="boolean" />

+	

+	<attribute name="isAllowedToRemoteControl" value="false" type="boolean" />

+	

+	<attribute name="isAllowedToGiveExclusiveAudio" value="false" type="boolean" />

+	

+	<attribute name="ismoderator" value="false" type="boolean" />

+	

+	<attribute name="isInterview" value="false" type="boolean" />

+	

+	<!--

+	   Those values are fixed values of the video positions of the videos from the interview room type

+	 -->

+	<attribute name="interviewPod1_x" value="320" type="number" />

+	<attribute name="interviewPod1_y" value="28" type="number" />

+	

+	<attribute name="interviewPod2_x" value="644" type="number" />

+    <attribute name="interviewPod2_y" value="28" type="number" />

+    

+    <!-- 

+		Holds a reference to the current tooltip, if there is one

+	 -->

+	<attribute name="currentToolTip" value="null" />

+	

+	<!-- Attributes for wicket login (since it hard not to break anything)-->

+	<attribute name="wicketsid" type="string" />

+	<attribute name="wicketroomid" value="0" type="number" />

+	

+	<!-- Attributes for show chat dialog when screen sharing open-->

+	<attribute name="chatHeight" value="0" type="number" />

+	

+	<method name="registerToolTip" args="viewInstance">

+		if (this.currentToolTip != null) {

+			this.currentToolTip.cleanHolder();

+		}

+		this.currentToolTip = viewInstance;

+	</method>

+	

+	<method name="clearToolTip">

+		if (this.currentToolTip != null) {

+			this.currentToolTip.cleanHolder();

+			this.currentToolTip = null;

+		}

+	</method>

+

+</library>

diff --git a/WebContent/swf10/base/mainDatasets.lzx b/WebContent/swf10/base/mainDatasets.lzx
new file mode 100644
index 0000000..d4420e2
--- /dev/null
+++ b/WebContent/swf10/base/mainDatasets.lzx
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+

+<!-- all datasets for main.lzx -->

+

+<library>

+

+	<method name="getLocalBaseUrl">

+	<![CDATA[

+		var urlObject = lz.Browser.getBaseURL();

+		//If Port is Null or undefinied use port 80

+		var port = (urlObject.port != null && urlObject.port != undefined) ? urlObject.port : 80;

+		//if($debug) Debug.write("getBaseUrl:: [urlObject, port]", urlObject, port);

+		var url = "" + urlObject.protocol + "://" + urlObject.host + (port != 80 ? ":" + port : "") + urlObject.path;

+		//if($debug) Debug.write("!!!!!!! getBaseUrl:: [urlObject, port, url]", urlObject, port, url);

+		url = url + (url.slice(-1) == '/' ? '' : '/');

+		//if($debug) Debug.write("!!!!!!! getBaseUrl:: [last, url]", url.slice(-1), url);

+		return url;

+	]]>

+	</method>

+

+	<method name="getServerBaseUrl">

+	<![CDATA[

+		var protocol = lz.Browser.getInitArg('protocol');

+		var host = lz.Browser.getInitArg('host');

+		var port = lz.Browser.getInitArg('port');

+		var context = lz.Browser.getInitArg('context');

+		if (protocol != undefined && host != undefined && port != undefined && !isNaN(port) && context != undefined) {

+			return protocol + "://" + host + ":" + port + "/" + context + "/public/";

+		} else {

+			return getLocalBaseUrl();

+		}

+	]]>

+	</method>

+

+<!-- get values from public/config.xml -->

+<dataset type="http" name="myConfigSet" request="false" ondata="parent.mainTheme.loadTheme()" proxied="false">

+    <handler name="oninit">

+        var d = new Date();

+        this.setAttribute("src", canvas.getServerBaseUrl() + "config.xml?random=" + d.getTime());

+        this.doRequest();

+    </handler>

+    <handler name="ondata">

+        if ($debug) Debug.write("ondata");

+    </handler>

+    <handler name="onerror" args="e">

+        if ($debug) Debug.write("onerror",e);

+    </handler>

+    <handler name="ontimeout" args="e">

+        if ($debug) Debug.write("ontimeout",e);

+    </handler>

+</dataset>

+

+<method name="reloadConfig">

+	

+</method>

+

+<!-- get values from public/config.xml -->

+<dataset type="http" name="mainTheme" request="false" ondata="canvas.myinit()" proxied="false">

+    <method name="loadTheme">

+        var d = new Date();

+        this.setAttribute("src", canvas.getServerBaseUrl() + "theme.xml?random=" + d.getTime());

+        this.doRequest();

+    </method>

+    <handler name="ondata">

+        if ($debug) Debug.write("ondata");

+    </handler>

+    <handler name="onerror" args="e">

+        if ($debug) Debug.write("onerror",e);

+    </handler>

+    <handler name="ontimeout" args="e">

+        if ($debug) Debug.write("ontimeout",e);

+    </handler>

+</dataset>

+

+</library>

diff --git a/WebContent/swf10/base/mainMethods.lzx b/WebContent/swf10/base/mainMethods.lzx
new file mode 100644
index 0000000..8e20f88
--- /dev/null
+++ b/WebContent/swf10/base/mainMethods.lzx
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+

+<!-- methods for main.lzx -->

+

+<library>

+    

+    <method name="onError" args="errorEvent">

+		canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'remoteLogWrite', "error " + errorEvent);

+	</method>

+    

+    <method name="myinit">

+        <![CDATA[

+        // Add listener to all uncaught flash errors

+        this.getDisplayObject().loaderInfo.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onError);

+        

+        canvas.mediaerrortimeout = 30000;

+        canvas.medialoadtimeout = 30000;

+        

+        if($debug) Debug.write("main.lzx/config.xml ondata",this);

+        

+        //Audio-Video-Settings

+        this.setAttribute('loudnessAcitviation',canvas.myConfigSet.getPointer().xpathQuery('config/loudnessAcitviation/text()'));

+        this.setAttribute('codecType',canvas.myConfigSet.getPointer().xpathQuery('config/codecType/text()'));

+        this.setAttribute('framesPerSecond',Number(canvas.myConfigSet.getPointer().xpathQuery('config/framesPerSecond/text()')));  

+        this.setAttribute('bandwidthNeededNormal',Number(canvas.myConfigSet.getPointer().xpathQuery('config/bandwidthNeededNormal/text()')));  

+        this.setAttribute('bandwidthNeededBest',Number(canvas.myConfigSet.getPointer().xpathQuery('config/bandwidthNeededBest/text()')));  

+        this.setAttribute('camQualityNormal',Number(canvas.myConfigSet.getPointer().xpathQuery('config/camQualityNormal/text()')));  

+        this.setAttribute('camQualityBest',Number(canvas.myConfigSet.getPointer().xpathQuery('config/camQualityBest/text()')));  

+        this.setAttribute('microphoneRateBest',Number(canvas.myConfigSet.getPointer().xpathQuery('config/microphoneRateBest/text()')));  

+        this.setAttribute('echoPath',Number(canvas.myConfigSet.getPointer().xpathQuery('config/echoPath/text()')));

+        this.setAttribute('echoSuppression',canvas.myConfigSet.getPointer().xpathQuery('config/echoSuppression/text()'));

+        

+        //httphostlocal variable is loaded from the SWF8 application, cause it needs value, SWF10 app

+        //knows nothing about the rtmphostlocal, and we don't want to parse the URL from the browser

+        //in both applications to find out where the user loaded the SWF from and extract the domain/ip 

+        //from it

+        

+        this.setAttribute('httpRootKey',canvas.myConfigSet.getPointer().xpathQuery('config/httpRootKey/text()'));

+        this.setAttribute('protocol',canvas.myConfigSet.getPointer().xpathQuery('config/protocol/text()')); 

+        this.setAttribute('proxyType',canvas.myConfigSet.getPointer().xpathQuery('config/proxyType/text()'));  

+

+        var _url = this.getDisplayObject().loaderInfo.url;

+        if($debug) Debug.write("_url: ",_url);

+        

+        ]]>

+    </method>

+    

+    <method name="getLabelName" args="id">

+    	// return "label "+id;

+        //if($debug) Debug.write("main.lzx/getLabelName()",id);

+        return getLabelTag(id);

+    </method>

+    

+    <method name="getThemeImage" args="tName">

+		if ($debug) Debug.write("load Image by Name SWF10: ",tName);

+		var tPath = canvas.mainTheme.getPointer().xpathQuery("theme/resource[@name='"+tName+"']/@src");

+		if ($debug) Debug.write("tPath SWF10 "+tPath);

+		return tPath;

+	</method>

+	

+	<method name="getThemeColor" args="tColor">

+		if ($debug) Debug.write("load Color by Name SWF10: ",tColor);

+		var tColor = canvas.mainTheme.getPointer().xpathQuery("theme/color[@name='"+tColor+"']/@value");

+		if ($debug) Debug.write("tColor SWF10 "+tColor);

+		return tColor;

+	</method>

+	

+	<!-- 

+		httphostlocal is synced from the SWF8 application, it will always point to the master

+	 -->

+	<method name="getHttpHost">

+		return canvas.httphostlocal;

+    </method>

+	

+	<method name="getUrl">

+		<![CDATA[

+			return canvas.protocol + '://' + getHttpHost()

+				+ ':' + canvas.red5httpport + canvas.httpRootKey;

+		]]>

+	</method>

+    

+	<method name="getPictureUrl" args="pictureuri,extraParams">

+	<![CDATA[

+		var pUri = (pictureuri == null || pictureuri.length == 0) ? "d.jpg" : pictureuri;

+		var downloadurl = pUri;

+		if (!pUri.startsWith("http://") && !pUri.startsWith("https://")) {

+			pUri = "_profile_" + pUri;

+			

+			downloadurl = canvas.getUrl() + 'DownloadHandler?fileName=' + pUri

+				+ '&room_id=&r=' + (new Date()).getTime()

+				+ extraParams + '&sid='+canvas.sessionId;

+		}

+		if($debug) Debug.write("getPictureUrl/downloadurl ", downloadurl);

+		return downloadurl;

+	]]>

+	</method>

+		

+</library>

diff --git a/WebContent/swf10/base/remote/baseVideoStream.lzx b/WebContent/swf10/base/remote/baseVideoStream.lzx
new file mode 100644
index 0000000..13df059
--- /dev/null
+++ b/WebContent/swf10/base/remote/baseVideoStream.lzx
@@ -0,0 +1,381 @@
+<library>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+

+<!---

+	extends the Video-View with Streaming functions

+ -->

+

+<class name="baseVideoStream" extends="baseVideoView">

+

+    <switch>

+    <when property="$as3">

+        <passthrough>

+        	import flash.events.*;

+            import flash.net.*;

+            import flash.media.*

+        </passthrough>

+    </when>

+    </switch>

+    

+    <attribute name="yDebug" value="-20" type="number" />

+    

+    <method name="getYDebug">

+    	this.yDebug += 20;

+    	return this.yDebug;

+    </method>

+

+	<!--- the NetStream Object

+              @keywords final -->

+	<attribute name="_ns" value="null" />

+

+	<!--- This value does indicate if this stream play or broadcasts

+              @keywords readonly -->

+	<attribute name="mode" value="play" type="string" />

+

+	<!--- This is the current buffer used, in Live Streaming this MUST be 0

+              @keywords readonly -->

+	<attribute name="bufferTime" value="0" type="number" />

+

+	<!--- This is a reference to the current microphone, only set if broadcasting

+              @keywords readonly -->

+	<attribute name="micro" value="null" />

+

+	<!--- This is a reference to the current camara, only set if broadcasting

+              @keywords readonly -->

+	<attribute name="camera" value="null" />

+

+	<!--- Reference To the Sound Object

+		@keywords final -->

+	<attribute name="soundRef" value="null" />

+	<!--- Reference To the Sound MovieClip

+		@keywords final -->

+	<attribute name="soundRefMC" value="null" />

+

+    <!--- Default mic gain -->

+    <attribute name="micGain" value="50" type="number"/>

+    

+    <attribute name="micMuted" value="false" />

+

+	<event name="onMetaDataEvent" />

+	<event name="onPlayStatusEvent" />

+	<event name="onCuePointEvent" />

+	<event name="onAsyncError" />

+	<event name="onNetStatus" />

+	<event name="onIoError" />

+

+	<!-- save value for restart -->

+        <attribute name="streamName" />

+        <attribute name="delay" />

+	<!--- @keywords private -->

+	<method name="createStream">

+		var tStream = this._findnc();

+        if (!tStream.connected) {

+        	if ($debug) Debug.warn("NetConnection is not connected");

+        }

+		this._ns = new NetStream(tStream);

+		//see: http://livedocs.adobe.com/flash/9.0_de/ActionScriptLangRefV3/flash/net/NetStream.html

+        //according to the docs the construct to catch event has to be implemented like this.

+        var t = this;

+		var clientObject = new Object();

+		clientObject.onMetaData = function(metadata:Object):void {

+			t.onMetaData(metadata);

+		};

+		clientObject.onPlayStatus = function(metadata:Object):void {

+			t.onPlayStatus(metadata);

+		};

+		clientObject.onCuePoint = function(metadata:Object):void {

+			t.onCuePoint(metadata);

+		};

+		clientObject.ioError = function(error:Object):void {

+			t.ioError(error);

+		};

+		clientObject.netStatus = function(status:Object):void {

+			t.netStatus(status);

+		};

+		clientObject.asyncError = function(error:Object):void {

+			t.asyncError(error);

+		};

+		this._ns.client = clientObject;

+		//this is a workaround, attaching the event to the client object does not work

+		this._ns.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus2);

+	</method>

+	

+	<method name="onNetStatus2" args="evt">

+		if($debug) Debug.write("netStream_onNetStatus: " , evt.info.code, evt.target);

+		this.onNetStatus.sendEvent(evt.info);

+	</method>

+	

+	<method name="asyncError" args="error">

+		if($debug) Debug.write("simpleNetStream asyncError",error);

+		this.onAsyncError.sendEvent(error);

+	</method>

+	

+	<method name="netStatus" args="status">

+		if($debug) Debug.write("simpleNetStream netStatus",status);

+		this.onNetStatus.sendEvent(status);

+	</method>

+	

+	<method name="ioError" args="error">

+		if($debug) Debug.write("simpleNetStream ioError",error);

+		this.onIoError.sendEvent(error);

+	</method>

+

+    <method name="onCuePoint" args="info"><![CDATA[

+        if($debug) Debug.write("simpleNetStream onCuePoint",info);

+        this.onCuePointEvent.sendEvent(info);

+    ]]></method>

+

+    <method name="onPlayStatus" args="info"><![CDATA[

+        if($debug) Debug.write("simpleNetStream onPlayStatus",info);

+        this.onPlayStatusEvent.sendEvent(info);

+    ]]></method>

+

+    <method name="onMetaData" args="info"><![CDATA[

+        if($debug) Debug.write("simpleNetStream onMetaData",info);

+        this.onMetaDataEvent.sendEvent(info);

+    ]]></method>

+

+    <!--- Find the Flash NetConnection object.

+          @keywords private -->

+    <method name="_findnc">

+    	if (canvas.currentNC == null) {

+    		if ($debug) Debug.warn("canvas.currentNC is NULL, maybe connection did fail?");

+    	}

+        return canvas.currentNC;

+    </method>

+

+	<!---

+		Plays a Video Stream, makes a new Instance of a NetStream, if previous NetStream

+		is still open it will first close that, used to subscribe to a live-stream

+		@param string streamName the streamname to play

+		@param number delay The time it should seek, for Live-Streams this value should be -1

+	 -->

+	<method name="playStream" args="streamName,delay">

+		<![CDATA[

+			this.streamName=streamName;

+			this.delay=delay;

+			if (this._ns!=null){

+				this._stop();

+			}

+			this.mode = "play";

+			this.createStream();

+			//invokes Method in baseVideoView which shows the stream

+			this.attachVideo(this._ns);

+			//FIXME: Commented out, cause this leads to Buffer-Full/Buffer-Empty Events

+			//after re-syncing the stream

+			//this.setBuffer(0.1);

+			if (delay == 0) {

+			    this._ns.play(streamName);

+			} else {

+			    this._ns.play(streamName,delay);

+			}

+		]]>

+	</method>

+

+	<method name="justPlayStream" args="streamName,delay">

+        <![CDATA[

+            this.streamName=streamName;

+            this.delay=delay;

+            if (this._ns!=null){

+            	if ($debug) Debug.write("STOP NS is NOT null ")

+                this._stop();

+            }

+            this.mode = "play";

+            this.createStream();

+            //invokes Method in baseVideoView which shows the stream

+            this.attachVideo(this._ns);

+            //FIXME: Commented out, cause this leads to Buffer-Full/Buffer-Empty Events

+            //after re-syncing the stream

+

+            this.setBuffer(6);

+

+            if ($debug) Debug.write("Play Stream "+streamName);

+

+            this._ns.play(streamName,delay);

+        ]]>

+    </method>

+

+	<method name="prepare" args="mode,streamName,camReference,micReference">

+		if (this._ns != null){

+			this._stop();

+		}

+		this.mode = mode;

+		this.createStream();

+		

+		if (camReference != null) {

+			this.setAttribute('camera', camReference);

+			this._ns.attachCamera(camReference);

+			//invokes Method in baseVideoView which shows the cam

+			this.attachCamera(camReference);

+			

+			var videoStreamSettings = null;

+			if ($debug) Debug.write("codecType=" + canvas.codecType);

+			if (canvas.codecType === "h264") {

+				videoStreamSettings = new H264VideoStreamSettings();

+				videoStreamSettings.setProfileLevel(H264Profile.BASELINE, H264Level.LEVEL_5_1);

+			} else {

+				videoStreamSettings = new VideoStreamSettings();

+			}

+			videoStreamSettings.setQuality(camReference.bandwidth, camReference.quality);

+			videoStreamSettings.setKeyFrameInterval(camReference.keyFrameInterval);

+			if ($debug) Debug.write("::keyFrameInterval " + camReference.keyFrameInterval);

+			videoStreamSettings.setMode(camReference.width, camReference.height, camReference.fps);

+			this._ns.videoStreamSettings = videoStreamSettings;

+		}

+		if (micReference != null) {

+			this.setAttribute('micro', micReference);

+			this._ns.attachAudio(micReference);

+			muteMicro(this.micMuted);

+		}

+		

+		this._ns.publish(streamName, (mode == "broadcast") ? "live" : mode);

+	</method>

+	<!---

+		BroadCasts a Stream

+		@param string streamName the streamname to broadcast

+		@param camera camReference a reference to the Camera-Object to stream

+		@param micropone micReference a reference to the Micropohne Object to stream

+	 -->

+	<method name="broadcast" args="streamName,camReference,micReference">

+		prepare("broadcast", streamName, camReference, micReference);

+	</method>

+

+	<method name="record" args="streamName,camReference,micReference">

+		prepare("record", streamName, camReference, micReference);

+    </method>

+    

+	<!---

+		Stops playing or broadcasting a Stream and clears the Video-Object

+	 -->

+	<method name="_stop">

+		if ($debug) Debug.write("STOP: ",this.mode,this._ns);

+		//Stop NetStream

+		if (this._ns==null) return;

+		this.camera = null;

+		this.micro = null;

+		if (this.mode == "play") {

+            this.soundRefMC = null;

+			this.soundRef = null;

+			this._ns.pause();

+			this._ns.close();

+			//remove NetStream from Video-Object

+			this.clear();

+			this._ns = null;

+		} else if (this.mode == "broadcast") {

+            this._ns.publish(false);

+            //remove NetStream from Video-Object

+            this.clear();

+            this._ns.close();

+            this._ns = null;

+        } else if (this.mode == "record") {

+            this._ns.publish(false);

+            //remove NetStream from Video-Object

+            this.clear();

+            this._ns.close();

+            this._ns = null;

+        } else {

+            this.clear();

+            this._ns.close();

+            this._ns = null;

+			if ($debug) Debug.warn("Not known Mode: ",this.mode,this);

+		}

+	</method>

+

+	<method name="restart">

+	     this._stop();

+	     this.playStream(this.streamName ,this.delay);

+	</method>

+	

+	<method name="setBuffer" args="time">

+	    if ($debug) Debug.warn("setBuffer has no 1:1 equivalent in AS3 ");

+	    return;

+		if(this._ns!=null){

+			this.bufferTime = time;

+			this._ns.setBufferTime(time);

+		} else {

+			if ($debug) Debug.warn("setBuffer but no NetStream initialized",this);

+		}

+	</method>

+

+	<!--- sets the Volume of the VideoStream

+		@param number volume Number between 0 and 100

+	 -->

+	<method name="setSoundVolume" args="volume">

+		//if ($debug) Debug.write(":: setSoundVolume ", parent.parent.publicSID);

+		//this.soundRef.setVolume(volume);

+		if (this._ns!=null){

+			this._ns.soundTransform = new SoundTransform(volume/100.0);

+		}

+	</method>

+

+	<method name="muteMicro" args="mute">

+		if ($debug) Debug.write(":: muteMicro ", mute, parent.parent.publicSID);

+		this.micMuted = mute;

+		if(this.micro != null) {

+			if(mute) {

+				if (this.micro.gain == 0) {

+					return;

+				}

+				if ($debug) Debug.write("Make Gain mute again from ",this.micro.gain);

+				this.setAttribute('micGain', this.micro.gain);

+				this.micro.gain = 0;

+			} else {

+				if ($debug) Debug.write("Make Gain loud again to ",this.micGain);

+				this.micro.gain = this.micGain;

+			}

+		}

+	</method>

+    

+    <!---

+        pause or resumes the NetStream

+        @args pauseStatus true pause, false resume

+     -->

+    <method name="pause" args="pauseStatus">

+    	if ($debug) Debug.write("do Pause",pauseStatus);

+    	if (this._ns==null){

+    		if ($debug) Debug.warn("No NetStream");

+    		return;

+    	}

+    	if (pauseStatus) {

+    		this._ns.pause();

+    	} else {

+    		this._ns.resume();

+    	}

+    </method>

+    

+    <!---

+        Seek the stream to a flvTime

+        this might only work if there are keyframes in the FLV, normally it should 

+        try to use the nearest keyframe available for the specified time.

+     -->

+    <method name="seekStream" args="flvTime">

+    	if ($debug) Debug.write("do seek",flvTime);

+        if (this._ns==null){

+            if ($debug) Debug.warn("No NetStream");

+            return;

+        }

+        this._ns.seek(flvTime);

+    </method>

+

+</class>

+

+

+</library>

diff --git a/WebContent/swf10/base/remote/baseVideoStreamDevice.lzx b/WebContent/swf10/base/remote/baseVideoStreamDevice.lzx
new file mode 100644
index 0000000..b0a939b
--- /dev/null
+++ b/WebContent/swf10/base/remote/baseVideoStreamDevice.lzx
@@ -0,0 +1,171 @@
+<library>

+	<!-- Licensed to the Apache Software Foundation (ASF) under one or more 

+		contributor license agreements. See the NOTICE file distributed with this 

+		work for additional information regarding copyright ownership. The ASF licenses 

+		this file to you under the Apache License, Version 2.0 (the "License"); you 

+		may not use this file except in compliance with the License. You may obtain 

+		a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless 

+		required by applicable law or agreed to in writing, software distributed 

+		under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES 

+		OR CONDITIONS OF ANY KIND, either express or implied. See the License for 

+		the specific language governing permissions and limitations under the License. -->

+

+	<!--- extends the baseVideoStream with functions to catch Device Events 

+		this Class uses Events from the Base Class baseVideoStream onmicro and oncamera, 

+		which are thrown, once a device was set -->

+

+	<class name="baseVideoStreamDevice" extends="baseVideoStream">

+

+		<switch>

+			<when property="$as3">

+				<passthrough>

+					import flash.events.StatusEvent;

+					import flash.events.ActivityEvent;

+				</passthrough>

+			</when>

+		</switch>

+

+		<!--- Shows if there is Activity on the Microphone -->

+		<attribute name="micactive" value="false" type="boolean" />

+

+		<!--- Level delegate, used to track level changes.

+			@keywords private -->

+		<attribute name="_leveldel"

+			value="$once{new LzDelegate(this, '_updateLevel')}" />

+

+		<!--- Audio level, 0-100, the amount of sound detected by this microphone. 

+			Reset to 0 when there is no audio (no activity or not allowed).

+			@keywords readonly -->

+		<attribute name="level" type="number" value="0" />

+

+		<!--- Shows if there is Activity on the Camera -->

+		<attribute name="camactive" value="false" type="boolean" />

+

+		<!--- Message to send to Clients -->

+		<attribute name="objMessage" value="null" />

+		<!--- indicates if the message should be send, you can change the notification 

+			level by changing the loudnessAcitviation in the public/config.xml -->

+		<attribute name="isgreater" value="false" type="boolean" />

+

+		<attribute name="doSendNotification" value="true" type="boolean" />

+

+		<!--- If true the component will send an event via LocalConnection when 

+			sound is louder or less 5% -->

+		<attribute name="sendNotificationViaLocalConnection" value="true"

+			type="boolean" />

+

+		<event name="sendCameraStatus" />

+

+		<event name="sendMicroStatus" />

+

+		<handler name="oncamera" args="c">

+			//if ($debug) Debug.write("Cam: ",c);

+			c.addEventListener(ActivityEvent.ACTIVITY, onActivity);

+			c.addEventListener(StatusEvent.STATUS, onStatus);

+		</handler>

+

+		<method name="onStatus" args="stats">

+			if ($debug) Debug.write("CamStatus: ",stats);

+			this.sendCameraStatus.sendEvent(stats.code);

+		</method>

+

+		<method name="onActivity" args="event">

+			this.setAttribute("camactive", event.activating);

+		</method>

+

+		<handler name="onmicro" args="m">

+			//if ($debug) Debug.write("onmicro: ",m);

+			var t = this;

+			//send mic active to true to start the onActivity callback Idle job

+			this.setAttribute("micactive", true);

+			m.addEventListener(ActivityEvent.ACTIVITY, onMicActivity);

+			m.addEventListener(StatusEvent.STATUS, onMicStatus);

+		</handler>

+

+		<method name="onMicStatus" args="stats">

+			if ($debug) Debug.write("onMicStatus 1: ",stats);

+			this.sendMicroStatus.sendEvent(stats.code);

+		</method>

+

+		<method name="onMicActivity" args="event">

+			if ($debug) Debug.write("onMicActivity: ",event);

+		</method>

+

+		<!--- Handler for the Flash Microphone onActivity callback.

+			@keywords private -->

+		<handler name="onmicactive">

+		<![CDATA[

+			if (this.onlevel) {

+				if (this.micactive) {

+					this._leveldel.register(lz.Idle, "onidle");

+				} else {

+					this._leveldel.unregisterAll();

+					this.setAttribute("level", 0);

+				}

+			}

+		]]>

+		</handler>

+

+		<!--- Handler for updating the microphone activity level attribute.

+			@keywords private -->

+		<method name="_updateLevel" args="arg">

+		<![CDATA[

+			if (this.micro == null) {

+				return;

+			}

+			var level = this.micro.activityLevel;

+			if (level < 0) {

+				level = 0;

+			}

+

+			if (level != this.level) {

+				this.setAttribute("level", level);

+			}

+		]]>

+		</method>

+

+		<!-- these methods send a Notification to all Connected users of a Room 

+			about the onActivity-Change -->

+		<handler name="onlevel" args="level">

+		<![CDATA[

+			//if ($debug) Debug.write("onlevel ",this.level,level);

+			

+			if (!this.doSendNotification) {

+				return;

+			}

+			

+			//greater 5 means the green dot starts to blink if the loudness is greater then 5%

+			//it makes no sense to set this to zero as there will be 1000 of events send

+			//per minute to change the status just of this icon, swagner 12.02.2012

+			var tVal = (level > 8);

+			

+			if (this.isgreater != tVal) {

+				//if ($debug) Debug.write("Level sendNotification ",this.isgreater,tVal,level);

+				this.isgreater = tVal;

+				this.sendNotification();

+			}

+		]]>

+		</handler>

+

+		<method name="sendNotification">

+			//if ($debug) Debug.write("Level sendNotification ",this.isgreater);

+			if (!this.sendNotificationViaLocalConnection) {

+				return;

+			}

+			if (parent.parent._loudness != null) {

+				parent.parent._loudness.setSpeaking(this.isgreater);

+			}

+			this.objMessage = new Array ();

+			this.objMessage[0] = 'audioActivity';

+			this.objMessage[1] = this.isgreater;

+			this.objMessage[2] = parent.parent.publicSID;

+			//if ($debug) Debug.write("Level sendNotification ",this.objMessage);

+			this.sendMessage.doCall();

+		</method>

+

+		<netRemoteCallHib name="sendMessage" funcname="sendMessage"

+			remotecontext="$once{ canvas.thishib }" showLoading="false">

+			<netparam><method name="getValue"> return parent.parent.objMessage; </method></netparam>

+		</netRemoteCallHib>

+	</class>

+</library>

diff --git a/WebContent/swf10/base/remote/baseVideoView.lzx b/WebContent/swf10/base/remote/baseVideoView.lzx
new file mode 100644
index 0000000..097a53a
--- /dev/null
+++ b/WebContent/swf10/base/remote/baseVideoView.lzx
@@ -0,0 +1,102 @@
+<library>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+

+

+<!---

+	This class provides the basic functions for the video-output

+

+	    @START_CODE

+            <baseVideoView x="20" y="20" width="320" height="240" bgcolor="black" />

+        @END_CODE

+ -->

+

+<class name="baseVideoView" width="${parent.width}" height="${parent.height}">

+

+    <passthrough when="$as3">

+        import flash.media.*;

+        import flash.net.NetConnection;

+        import flash.net.NetStream;

+    </passthrough>

+

+    <attribute name="_sound" value="null"/>

+    <attribute name="__LZvideo" value="null"/>

+

+	<method name="init"><![CDATA[

+        super.init();

+        var mc = new Video(this.width, this.height);

+        this.sprite.addChild(mc);

+        this.__LZvideo = mc;

+        this.applySizeToVid();

+    ]]></method>

+

+	<method name="applySizeToVid">

+		var vid = this._getflashvideo();

+        if(vid != null) {

+            vid.width = this.width;

+            vid.height = this.height;

+        } else {

+            if ($debug) Debug.warn("applySizeToVid IS NULL ",this.width,this.height);

+        }

+	</method>

+

+    <handler name="onwidth" args="w">

+    	//if ($debug) Debug.info("onwidth ",this.width,this.height);

+        this.applySizeToVid();

+    </handler>

+

+    <handler name="onheight" args="h">

+    	//if ($debug) Debug.info("onheight ",this.width,this.height);

+        this.applySizeToVid();

+    </handler>

+

+	<method name="_getflashvideo">

+	<![CDATA[

+		if (__LZvideo == null) {

+			init();

+		}

+		//if ($debug) Debug.write("_getflashvideo()");

+		return this.__LZvideo;

+	]]>

+	</method>

+

+    <method name="attachCamera" args="camera">

+        var vid = this._getflashvideo();

+    	vid.attachCamera(camera);

+    </method>

+

+    <!--- shows the Video (NetStream) in the View -->

+    <method name="attachVideo" args="video">

+    	var vid = this._getflashvideo();

+    	vid.attachNetStream(video);

+    </method>

+

+	<method name="clear">

+	    if ($debug) Debug.write("Select unattach :3");

+		var vid = this._getflashvideo();

+		vid.attachNetStream(null);

+		vid.attachCamera(null);

+		this.__LZvideo.clear();

+		if ($debug) Debug.write("Select unattach : 4");

+	</method>

+</class>

+

+

+</library>

diff --git a/WebContent/swf10/base/remote/library.lzx b/WebContent/swf10/base/remote/library.lzx
new file mode 100644
index 0000000..18b8cb8
--- /dev/null
+++ b/WebContent/swf10/base/remote/library.lzx
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+	

+	<!-- new Library -->

+	<include href="baseVideoView.lzx" />

+	<include href="baseVideoStream.lzx" />

+	<include href="baseVideoStreamDevice.lzx" />

+	<include href="rtmpConnection.lzx" />

+	<include href="sharedObject.lzx" />

+    

+</library>

diff --git a/WebContent/swf10/base/remote/rtmpConnection.lzx b/WebContent/swf10/base/remote/rtmpConnection.lzx
new file mode 100644
index 0000000..1cfb69f
--- /dev/null
+++ b/WebContent/swf10/base/remote/rtmpConnection.lzx
@@ -0,0 +1,375 @@
+<library>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+

+

+<class name="rtmpConnection" extends="node">

+

+        <switch>

+            <when property="$as3">

+                <passthrough>

+                    import flash.net.NetConnection;

+                    import flash.events.NetStatusEvent;

+                </passthrough>

+            </when>

+        </switch>

+

+    	<attribute name="debug" value="false" type="boolean" />

+    	

+    	<event name="onconnect"/>

+    	<event name="onerror"/>

+        

+        <!-- this attribute holds a reference to the current/last called netremoteCall,

+        in case of error you can debug that way which call did fail -->

+        <attribute name="lastCalled" value="null" />

+    	

+    	<attribute name="src" value="" type="string"/>

+

+		<method name="connect">

+            this._nc = new NetConnection();

+

+            // local reference to rtmpconnection

+            //this._nc.t = this;

+            

+            this._nc.proxyType = canvas.proxyType;

+            

+            var ok = this._nc.connect(src == "null" ? null : src, true); //isAVClient = true

+            if (this.debug) {

+            	if($debug) Debug.write("*** debug ***");

+            }

+            

+            this._nc.addEventListener(NetStatusEvent.NET_STATUS, _onStatus);

+            

+    		if($debug) Debug.write("devRtmpConnection/registerMethods()");

+    		var clientObj = {};

+    		clientObj.setId = this.setId;

+    		

+    		this._nc.client = clientObj;

+    		

+			//Register Methods

+			//this.registerMethods();

+		</method>

+		

+		<method name="setId" args="tId">

+			if ($debug) Debug.write("setId ", tId);

+		</method>

+		

+        <method name="_onStatus" args="stats"><![CDATA[

+            if ($debug) {

+                Debug.write("devrtmpconnection", this, "_onStatus", stats.info.code);

+            }

+

+            var msg = "";

+            var s;

+

+            switch (stats.info.code) {

+

+                case "NetConnection.Connect.Success": {

+                    // The connection attempt succeeded.

+                    //canvas.currentNC is the reference to the NetConnection that is used in the NetStream

+                    msg = stats.info.code;

+                    canvas.currentNC = this._nc;

+                    s = 2;

+                    break;

+                }

+                

+                case "NetConnection.Connect.Closed": {

+                    msg = stats.info.code;

+                    this._nc = null;

+                    canvas.currentNC = null;

+                    s = 0;

+                    break;

+                }

+

+                default: {

+                    msg = stats.info.code;

+                    s = 0;

+                    break;

+                }

+

+            }

+

+            this.setAttribute("status", msg);

+

+            if (s == 2) {

+                this.onconnect.sendEvent();

+            } else {

+            	this.onerror.sendEvent();

+            }

+

+          ]]>

+        </method>	

+        

+        <method name="disconnect">

+        	if ($debug) Debug.write(" DISCONNECT ");

+        	if (this._nc != null) {

+                this._nc.close();

+            }

+        </method>

+    <!--- 

+        With this function all methods are registered to the NetConnection

+        A server can invoke this Method with a call for it from the Client

+        Only subnodes of rtmpconnections which are a instance of netRemoteCallHib

+        are registered, to add dynamically methods to the remotefunction you will

+        have to invoke this method once again

+        -swagner

+     -->

+    <method name="registerMethods">

+        <![CDATA[

+	        if (this.subnodes!=null){

+	            var clientObj = {};

+		        //Register all methods which are onstanceof netRemoteCallHib

+		        for (var i=0;i<this.subnodes.length;i++){

+		            //If it is of Type netRemoteCallHib then register it to the NetConnection

+		            if (this.subnodes[i] instanceof lz.netRemoteCallHib){

+		                clientObj[this.subnodes[i].funcname] = function( args ){

+                            return canvas.thishib.remoteCallMethod(arguments.callee,arguments);

+		                    //return hib.remoteCallMethod(arguments.callee,args);

+		                }

+		            }

+		        }

+		        this._nc.client = clientObj;

+        	}

+        ]]>

+    </method>

+    

+    <!-- 

+        Process the RemoteCall to the Right Funtion

+        -swagner

+     -->

+    <method name="remoteCallMethod" args="callee,args">

+        <![CDATA[

+            for (var eg in this._nc){

+                if (this._nc[eg]==callee){

+                    if (this.debug) {

+                        //_root.Debug.write.write("DEBUG invoked a function remotely: ",eg,args);

+                    }    

+                    if (args.length == 1) {

+                        return this.callFuntion(eg,args[0]);

+                    } else {

+                        return this.callFuntion(eg,args);

+                    }

+                    //return this.callFuntion(eg,args);

+                }

+            }

+        ]]>

+    </method>

+    

+    <!-- 

+        Map the Function to a netRemoteCallHib

+        -swagner

+     -->

+    <method name="callFuntion" args="funcname,args">

+        <![CDATA[

+            for (var i=0;i<this.subnodes.length;i++){

+                if (this.subnodes[i].funcname==funcname){

+                    return this.subnodes[i].onResult(args);

+                }

+            }

+        ]]>

+    </method>		

+    

+    <method name="callRPC" args="func, obj, params">

+    	//if ($debug) Debug.write("*** call: func, obj, params",func,obj, typeof (params) ,params.length);

+    	if (params.length != 0){

+	    	//does this really work?

+	    	//ASSetPropFlags(_global, null, 8, 1);

+            //setPropertyIsEnumerable(8, 1);

+	    	//Debug.write("does it work?",arguments);

+	    	<!--

+	    	this._nc.call.apply(this._nc,arguments);

+	    	 -->

+			if (params.length==1){

+			    this._nc.call(func, obj,params[0]);

+			} else if (params.length==2){

+			    this._nc.call(func, obj,params[0],params[1]);

+			} else if (params.length==3){

+			    this._nc.call(func, obj,params[0],params[1],params[2]);

+			} else if (params.length==4){

+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3]);

+			} else if (params.length==5){

+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4]);

+			} else if (params.length==6){

+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5]);

+			} else if (params.length==7){

+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6]);

+			} else if (params.length==8){

+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7]);

+			} else if (params.length==9){

+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8]);

+			} else if (params.length==10){

+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9]);

+			} else if (params.length==11){

+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10]);

+			} else if (params.length==12){

+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11]);

+			} else if (params.length==13){

+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12]);

+			} else if (params.length==14){

+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13]);

+			} else if (params.length==15){

+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14]);

+			} else if (params.length==16){

+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15]);

+			} else if (params.length==17){

+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16]);

+			} else if (params.length==18){

+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16],params[17]);

+			} else if (params.length==19){

+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16],params[17],params[18]);

+			} else if (params.length==20){

+			    this._nc.call(func, obj,params[0],params[1],params[2],params[3],params[4],params[5],params[6],params[7],params[8],params[9],params[10],params[11],params[12],params[13],params[14],params[15],params[16],params[17],params[18],params[19]);

+			}	    	 

+        } else {

+            this._nc.call(func, obj);

+        }

+    </method>

+    

+</class>

+

+

+    <!---

+        Net remote call. 

+        @todo Document netremotecall class.

+    -->

+    <class name="netremotecall" extends="node">

+

+        <switch>

+            <when property="$as3">

+                <passthrough>

+                    import flash.net.Responder;

+                </passthrough>

+            </when>

+        </switch>

+

+        <!--- Name of the remote function. -->

+        <attribute name="funcname" value="$once{null}" type="string" />

+    

+        <attribute name="remotecontext" value="null" />

+    

+        <attribute name="dataobject" value="null" />

+

+        <attribute name="responder" value="null" />

+		

+        <!--- Data handling event. args="value"  -->

+        <event name="ondata" />

+

+        <!--- Error handling event. -->

+        <event name="onerror"/>

+

+        <!--- Call the remote method, passing the array of params. -->

+        <method name="callRPC" args="params"><![CDATA[

+            if (this.funcname == null) {

+                //Debug.write("No funcname given");

+                if (this.onerror) this.onerror.sendEvent("No funcname given");

+                return;

+            }

+

+            if (params == null) {

+                params = new Array();

+

+                var subnodes = this.subnodes;

+                if (subnodes != null) {

+                    var i;

+                    var n = subnodes.length;

+                    for (i = 0; i < n; i++) {

+                        // If getValue method is declared in param, call that

+                        // instead to get value.

+                        var tsi = subnodes[i];

+                        //TODO: fixme

+                        //if ((tsi["getValue"] != null) && (tsi.getValue["prototype"] != null)) {

+                        //    params[i] = tsi.getValue();

+                        //    Debug.write("tsi.getValue():", tsi.getValue());

+                        //} else {

+                        //    params[i] = tsi.value;

+                        //}

+                        params[i] = tsi.getValue();

+                    }

+                }

+

+            } else if (params.__proto__ != Array.prototype) {

+                //Debug.write(this.name, "error: first argument (params) is not an array");

+                return -1;

+            }

+

+            //if ($debug) Debug.write("call", this, this.parent, this.parent.status);

+            var rtmpObject = null;

+            if (this.parent instanceof lz.rtmpConnection){

+        	    rtmpObject = this.parent;

+            } else if(this.remotecontext  instanceof lz.rtmpConnection){

+        	    rtmpObject = this.remotecontext;

+            } else {

+        	    if ($debug) Debug.warn("ERROR: no remotecontext availible abort call", this.funcname, this);

+        	    return;

+            }

+        	//Debug.write('call', this, rtmpObject, rtmpObject.status);

+        	//Debug.write('call', this.remotecontext);

+            if (rtmpObject.debug) Debug.write('call', this, rtmpObject, rtmpObject.status);

+            rtmpObject.lastCalled = this;

+

+            this.responder = new Responder(onResult);

+

+            rtmpObject.callRPC(this.funcname, this.responder, params);

+

+          ]]>

+        </method>

+

+        <!--- Handle the result returned from the remote method. -->

+        <method name="onResult" args="value"><![CDATA[

+            // Can be overriden.

+            // Would be great if it can be used with dataobject,

+            // but I don't know how to convert Array/primitive to LzDataset/LzDataPointer.

+            ////Debug.write("netremotecall", this, "onResult", value);

+

+            if (this.dataobject!=null) {

+                if ( this.dataobject instanceof LzDataset ) {

+                    //Debug.write("onResult: ",this,value,dataobject);

+                    var element = LzDataElement.valueToElement(value);

+                    this.dataobject.setData(element.childNodes);

+                } else if ( this.dataobject instanceof LzDataElement ) {

+                    var element = LzDataElement.valueToElement(value);

+                    this.dataobject.appendChild( element );

+                } else {

+                    //TODO:fixme

+                    //Debug.warn("dataobject is not LzDataset or LzDataElement: ",this,this.dataobject,delegate);

+                }

+            }

+            this.ondata.sendEvent(value);		

+          ]]>

+        </method>

+

+

+    </class>

+

+

+    <!---

+        Net parameter.

+        Element to use inside netremotecall.

+        @todo Document netparam class.

+    -->

+    <class name="netparam" extends="node">

+

+        <!--- The value of the netparam. -->

+        <attribute name="value" value="null"/>

+

+    </class>

+

+

+</library>

diff --git a/WebContent/swf10/base/remote/sharedObject.lzx b/WebContent/swf10/base/remote/sharedObject.lzx
new file mode 100644
index 0000000..9c7cd96
--- /dev/null
+++ b/WebContent/swf10/base/remote/sharedObject.lzx
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="sharedObject" extends="node">

+

+    <switch>

+        <when property="$as3">

+            <passthrough>

+                import flash.net.SharedObject;

+            </passthrough>

+        </when>

+    </switch>

+

+	<attribute name="so" value="null" />

+	<attribute name="onStatus" value="null" />

+	

+

+	<method name="connect" args="so_Name,nc,persistant">

+

+		//Debug.write("connect SharedObject: ",nc.uri);

+		this.so = this.getRemote(so_Name,nc.uri,persistant);

+		

+		var t = this;

+		this.so.onSync = function (evtObj){

+			if (t.onStatus)t.onStatus.sendEvent(evtObj);

+			//_root.Debug.write.write("Shared Object onSync",evtObj,arguments);

+		}

+		

+		this.so.connect(nc);

+		

+	</method>

+	

+    

+    <method name="getRemote" args="so_Name,nc,persistant">

+

+        //Debug.write("connect SharedObject: ",nc.uri);

+        this.so = this.getRemote(so_Name,nc.uri,persistant);

+

+        var t = this;

+        this.so.onSync = function (evtObj){

+            if (t.onStatus)t.onStatus.sendEvent(evtObj);

+            //_root.Debug.write.write("Shared Object onSync",evtObj,arguments);

+        }

+    </method>

+    

+    <!--- create Object if not existing  -->

+    <method name="getLocal" args="name">

+

+        this.so = this.getLocal(name);

+

+        var t = this;

+        this.so.onSync = function (evtObj){

+            if (t.onStatus)t.onStatus.sendEvent(evtObj);

+            //_root.Debug.write.write("Shared Object onSync",evtObj,arguments);

+        }

+        

+    </method>

+    

+    <!--- 

+        force write to disk

+        @return true(success) false(User has forbidden to store data local)

+      -->

+    <method name="flush">

+        return this.so.flush();

+    </method>

+

+    <method name="getData" args="key">

+        if (this.so.data["key"] == undefined){

+            return null;

+           //_root.Debug.write.write("key undefined",key);

+        } else {

+            return this.so.data["key"];

+        }

+    </method>

+	

+    <method name="setSharedData" args="key,val">

+    	//Debug.write("this...... so: ",this.so);

+        this.so.data["key"] = val;

+    </method>

+

+		

+</class>

+

+</library>

diff --git a/WebContent/swf10/commonVideoViewContentSWF10.lzx b/WebContent/swf10/commonVideoViewContentSWF10.lzx
new file mode 100644
index 0000000..11e9802
--- /dev/null
+++ b/WebContent/swf10/commonVideoViewContentSWF10.lzx
@@ -0,0 +1,631 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+

+<class name="commonVideoViewContentSWF10" extends="view">

+

+    <switch>

+        <when property="$as3">

+            <passthrough>

+                import flash.net.LocalConnection;

+                import flash.external.ExternalInterface;

+            </passthrough>

+        </when>

+    </switch>

+

+    <attribute name="offsetLength" type="number" value="40"/>

+    <attribute name="videoWidth" type="number" value="132"/>

+    <attribute name="videoHeight" type="number" value="132"/>

+    <attribute name="SIDEPANEL_WIDTH" type="number" value="270" />

+    

+    <handler name="oninit">

+        <![CDATA[

+

+            var client = {};

+            client.t = this;

+

+            client.toggleVideo = this.toggleVideo;

+            client.createEditRecordStream = this.createEditRecordStream;

+            client.createVideoObject = this.createVideoObject;

+            client.createVideo = this.createVideo;

+            client.batchCreateVideo = this.batchCreateVideo;

+            client.getVideoObjectByPublicSID = this.getVideoObjectByPublicSID;

+            client.getVideoObjectFreePos = this.getVideoObjectFreePos;

+            client.getVideoObjectCount = this.getVideoObjectCount;

+            client.disconnectclient = this.disconnectclient;

+            client.resetAllValues = this.resetAllValues;

+            client.closeStreamClient = this.closeStreamClient;

+            client.setSpeakingByPos = this.setSpeakingByPos;

+            client.setAVSettingsToClient = this.setAVSettingsToClient;

+            client.startStream = this.startStream;

+            client.removeVideoByUser = this.removeVideoByUser;

+            client.muteSound = this.muteSound;

+            client.updateMuteStatusVideoView = this.updateMuteStatusVideoView;

+            client.ismoderatorChanged = this.ismoderatorChanged;

+            // update rights to SWF10 client

+            client.updateModerationFlag = this.updateModerationFlag;

+            client.changeDevice = this.changeDevice;

+            client.setDrawAllowStatus = this.setDrawAllowStatus;

+            client.setExclusiveAudioAllowStatus = this.setExclusiveAudioAllowStatus;

+            client.exitRoom = this.exitRoom;

+            client.immediateExitRoom = this.immediateExitRoom;

+            client.closeWhiteboard = this.closeWhiteboard;

+            client.arrangeWindows = this.arrangeWindows;

+            client.updateFirstLastName = this.updateFirstLastName;

+            client.setSessionId = this.setSessionId;

+

+            var lc:LocalConnection = new LocalConnection();

+            lc.connect(canvas.vid_lc_name);

+            lc.client = client;

+            canvas.setAttribute("lc", lc);

+

+        ]]>

+    </handler>

+    

+	<method name="toggleVideo" args="value">

+		if($debug) Debug.info("toggleVideo ", value);

+		canvas.userobject.canVideo = value;

+	</method>

+    

+	<method name="createEditRecordStream" args="syncUpdate,isInterview,interviewPodId">

+		if($debug) Debug.info("createEditRecordStream,", syncUpdate, isInterview, interviewPodId, canvas.userobject);

+		if (canvas.inner.editRecordStream != null)

+			canvas.inner.editRecordStream.destroy();

+			new lz.editRecordStreamSWF10(canvas.inner, {

+					name:"editRecordStream",

+					isSyncUpdate:syncUpdate,

+					isInterview:isInterview,

+					interviewPodId:interviewPodId

+				});

+		return;

+	</method>

+

+	<method name="batchCreateVideo" args="selfStreamId, clients">

+	<![CDATA[

+		if ($debug) Debug.info("batchCreateVideo: ", selfStreamId, clients.length);

+		for (var i = 0; i < clients.length; ++i) {

+			var c = clients[i];

+			if (c.streamid != selfStreamId) {

+				if (c.isBroadcasting) {

+					createVideo(c.publicSID, c.firstname + ' ' + c.lastname, c.broadCastID, c.avsettings, -1, c);

+				} else {

+					createVideoObject(c.publicSID, false, -1, c);

+				}

+			}

+		}

+	]]>

+	</method>

+	

+	<!-- 

+		Method that creates the video views when another user enters a room and his 

+		item in the list of participants is created.

+		The method to "play" the stream is invoked later, when the user

+		really starts to stream and not only when he just enters the room.

+	 -->

+    <method name="createVideoObject" args="publicSID,isBroadcasting,interviewPodId,object">

+        if($debug) Debug.info("createVideoObject, publicSID: ",publicSID, "isBroadcasting: ", isBroadcasting, "object", object);

+        var vidContainer = getVideoObjectByPublicSID(publicSID);

+        if(vidContainer == null) {

+            vidContainer = isBroadcasting ? this.getNewVideoObject(publicSID) : this.getNewVideoObjectByPos(publicSID);

+            vidContainer.publicSID = publicSID;

+        }

+        if ($debug) Debug.write("Is interview ? ",canvas.isInterview);

+        if (canvas.isInterview) {

+        	if ($debug) Debug.write("Is interview ",interviewPodId,"x",canvas["interviewPod"+interviewPodId+"_x"]);

+			if (interviewPodId != null) {

+				vidContainer.setAttribute("interviewPodId", interviewPodId);

+				vidContainer.setAttribute("x",canvas["interviewPod"+interviewPodId+"_x"]);

+				vidContainer.setAttribute("y",canvas["interviewPod"+interviewPodId+"_y"]);

+			}

+            vidContainer.setAttribute("width",322);

+            vidContainer.setAttribute("height",281);

+        }

+        vidContainer.clientVars = object;

+        vidContainer.setAttribute('visibility','hidden');

+        return vidContainer;

+    </method>

+

+	<!-- 

+		

+		Method that creates the video views when user(self) initially entering a room.

+		Creates the video-view AND starts to stream/play the video

+	 -->

+    <method name="createVideo" args="publicSID,displayName,broadcastId,avsettings,interviewPodId,object">

+        <![CDATA[

+            if ($debug) Debug.info("createVideo, publicSID: ",publicSID,"broadcastId: ",broadcastId,"AVsettings: ",avsettings);

+            if ($debug) Debug.write(" createVideo ALL vars ",object);

+            var vidContainer = getVideoObjectByPublicSID(publicSID);

+            if(vidContainer == null) {

+                vidContainer = this.getNewVideoObjectByPos(publicSID);

+                vidContainer.clientVars = object;

+                vidContainer.setAttribute('chatpartnername',displayName);

+                if (avsettings=="n"){

+                    vidContainer.setVideouserProfilePic(object);

+                    vidContainer.setAttribute("visibility","hidden");

+                } else if (avsettings=="a"){

+                    vidContainer.setVideouserProfilePic(object);

+                    if ($debug) Debug.warn("start play");

+                    vidContainer._chatvideoinner._videostream.playStream(broadcastId,-1);

+                    vidContainer.setAttribute("visible", false);

+                } else if (avsettings=="v" || avsettings=="av") {

+                    //this means avsettings is either: "v" or "av"

+                	vidContainer.setDefaultVideoSize(object.VWidth,object.VHeight);

+                    vidContainer._chatvideoinner._videostream.playStream(broadcastId,-1);

+                    vidContainer.setAttribute("visibility","visible");

+                } else {

+                	//this means user did not select anything yet and streaming has not started

+                	vidContainer.setAttribute("visibility","hidden");

+                }

+                vidContainer.setAttribute("interviewPodId", interviewPodId);

+                vidContainer.updateAVSettingsSymbol(object);

+                if (object.micMuted) {

+            	    vidContainer.setMicMuted(object.micMuted);

+           	 	}

+            }

+            

+            

+            if ($debug) Debug.write("Is interview ? ",canvas.isInterview);

+            if (canvas.isInterview && interviewPodId != null && interviewPodId > 0) {

+                if ($debug) Debug.write("Is interview ",interviewPodId,"x",canvas["interviewPod"+interviewPodId+"_x"]);

+                vidContainer.setAttribute("interviewPodId", interviewPodId);

+                vidContainer.setAttribute("x",canvas["interviewPod"+interviewPodId+"_x"]);

+                vidContainer.setAttribute("y",canvas["interviewPod"+interviewPodId+"_y"]);

+                vidContainer.setAttribute("width",322);

+                vidContainer.setAttribute("height",281);

+            }

+			return;

+        ]]>

+    </method>

+    

+    <method name="getVideoObjectByPublicSID" args="publicSID">

+    	<![CDATA[

+    		//if ($debug) Debug.write("getVideoObjectByPublicSid SEARCH: ",publicSID);

+        	for (var i=0;i<this.subviews.length;i++){

+        	    //if ($debug) Debug.write("this.subviews[i].publicSID ",this.subviews[i].publicSID);

+    			if (this.subviews[i].publicSID==publicSID){

+    				return this.subviews[i];

+    			}

+    		}

+    		if ($debug) Debug.warn(" - getVideoObjectByPublicSID - DID NOT FIND THE USER BY ",publicSID);

+            return null;

+    	]]>

+    </method>

+

+    <method name="getNewVideoObjectByPos" args="publicSID">

+        <![CDATA[

+            //Get a Free VideoView Slot

+            var freePos = this.getVideoObjectFreePos(this.offsetLength,this.videoWidth,this.videoHeight);

+

+            return new lz.videoObjectPlayBroadcast(this,{

+                    publicSID:publicSID,

+                    width:videoWidth,

+                    height:videoHeight,

+                    x:freePos[0],

+                    y:freePos[1],

+                    isInterview:canvas.isInterview

+                });

+        ]]>

+    </method>

+

+	<method name="getNewVideoObject" args="publicSID">

+	<![CDATA[

+		this.broadCastViewRef = getNewVideoObjectByPos(publicSID);

+		this.broadCastViewRef._chatvideoinner.r.destroy();

+		if ($debug) Debug.write("getNewVideoObject canvas.userobject ",publicSID,canvas.userobject);

+		this.broadCastViewRef.setAttribute('chatpartnername',canvas.userobject.firstname+' '+canvas.userobject.lastname);

+		return this.broadCastViewRef;

+	]]>

+	</method>

+

+    <method name="getVideoObjectByInterviewPodId" args="interviewPodId">

+        <![CDATA[

+            for (var i=0;i<this.subviews.length;i++){

+                if (this.subviews[i].interviewPodId==interviewPodId){

+                    return this.subviews[i];

+                }

+            }

+            if ($debug) Debug.warn(" - getVideoObjectByInterviewPodId - DID NOT FIND THE USER BY ",interviewPodId);

+            return null;

+        ]]>

+    </method>

+

+	<method name="getVideoObjectCount" args="a">

+	<![CDATA[

+		var count = 0;

+		for (var i = 0; i < this.subviews.length; ++i) {

+			if (this.subviews[i].visible) {

+				count++;

+			}

+		}

+		//if ($debug) Debug.debug("COUNT :: ", count);

+		canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'onInterviewPodCount', count);

+	]]>

+	</method>

+

+    <method name="getVideoObjectFreePos" args="offsetLength,videoWidth,videoHeight">

+        <![CDATA[

+            var newx = 20;

+            if (canvas.currentRoomObject.hideWhiteboard) {

+                newx += SIDEPANEL_WIDTH;

+            }

+            var newy = 0;

+            var posFound = false;

+            if (offsetLength == undefined) {

+                offsetLength=10;

+            }

+            while (!posFound) {

+                posFound = true;

+                for (var i=0;i<this.subviews.length;i++){

+                    var subview = this.subviews[i];

+                    var left = subview.x;

+                    var right = subview.x + subview.width;

+                    var top = subview.y;

+                    var bottom = subview.y + subview.height;

+

+                    if( !(newx > right

+                        || (newx + videoWidth) < left

+                        || newy > bottom

+                        || (newy + videoHeight) < top ))

+                    {

+                        newx = right + offsetLength;

+                        posFound = false;

+                    }

+                    if ((newx + videoWidth) >= canvas.width) {

+                        newx = 20;

+                        if (canvas.currentRoomObject.hideWhiteboard) {

+                            newx += SIDEPANEL_WIDTH;

+                        }

+                        newy += 10;

+                        posFound = false;

+                    }

+                }

+            }

+

+            if ((newy + videoHeight) >= canvas.height) {

+                newy = 0;

+            }

+

+            var result = [newx, newy];

+            return result;

+        ]]>

+    </method>

+

+	<method name="disconnectclient" args="publicSID">

+	<![CDATA[

+		if ($debug) Debug.write("disconnectclient: ", publicSID);

+		var obj = closeStreamclient(publicSID);

+		if (obj == null) {

+			if ($debug) Debug.warn("Could Not find this To disconnect",publicSID);

+		} else {

+			obj.destroy();

+		}

+	]]>

+	</method>

+

+    <method name="muteSound" args="publicSID, bool">

+        <![CDATA[

+            var obj = this.getVideoObjectByPublicSID(publicSID);

+            if (obj != null) {

+                obj.silenceMicrophone(bool);

+            }

+            return;

+        ]]>

+    </method>

+

+    <method name="resetAllValues">

+        for (var eg in this.subviews){

+            this.subviews[eg].resetValues();

+        }

+        return;

+    </method>

+

+	<method name="closeStreamclient" args="publicSID">

+	<![CDATA[

+		if ($debug) Debug.write("closeStreamthis: ", publicSID);

+		var obj = this.getVideoObjectByPublicSID(publicSID);

+		if ($debug) Debug.write("closeStreamthis obj: ", obj);

+		if (obj != null) {

+			obj.resetValues();

+		}

+		if (canvas.publicSID == publicSID && canvas.inner.editRecordStream != null) {

+			canvas.inner.editRecordStream.cleanVideos();

+			canvas.inner.editRecordStream.destroy();

+			canvas.inner.editRecordStream = null;

+		}

+		return obj;

+	]]>

+	</method>

+

+    <method name="removeVideoByUser" args="publicSID"><![CDATA[

+        var obj = this.closeStreamclient(publicSID);

+        if(obj != null) {

+            obj.destroy();

+        }

+        return;

+    ]]></method>

+

+	<method name="updateMuteStatusVideoView" args="roomClient">

+	<![CDATA[

+		var obj = this.getVideoObjectByPublicSID(roomClient.publicSID);

+		if (obj != null) {

+			obj.muteMicrophone(roomClient);

+		}

+	]]>

+	</method>

+

+    <method name="ismoderatorChanged" args="m">

+        canvas.setAttribute("ismoderator", m);

+        return;

+    </method>

+

+

+	<method name="setSpeakingByPos" args="publicSID,bool">

+	<![CDATA[

+		//if ($debug) Debug.write("setSpeakingByPos ",publicSID,bool);

+		var obj = this.getVideoObjectByPublicSID(publicSID);

+		if (obj == null) {

+			if ($debug) Debug.warn("Could not find user for setSpeakingByPos ",publicSID,bool);

+			return;

+		}

+		obj._loudness.setSpeaking(bool);

+	]]>

+	</method>

+

+	<method name="setAVSettingsToClient" args="rcl">

+	<![CDATA[

+		if ($debug) Debug.write("setAVSettingsToClient: ", rcl.publicSID, rcl);

+		var obj = this.getVideoObjectByPublicSID(rcl.publicSID);

+		if ($debug) Debug.write("setAVSettingsToClient: ", obj, rcl.avsettings);

+		if (obj == null) {

+			obj = this.getNewVideoObjectByPos(rcl.publicSID);

+		}

+		if ("n" == rcl.avsettings){

+			obj.setVideouserProfilePic(rcl);

+		} else if ("a" == rcl.avsettings){

+			obj.setVideouserProfilePic(rcl);

+		} else {

+			obj.deleteVideoConfProfilePic();

+		}

+		obj.thisVars = rcl;

+		obj.updateAVSettingsSymbol(rcl);

+		var v = ("a" == rcl.avsettings && obj.isInterview) || ("a" != rcl.avsettings && rcl.avsettings != "n");

+		obj.setAttribute("visible", v);

+		obj.setAttribute("visibility", v ? "visible" : "hidden");

+		if ($debug) Debug.write("setAVSettingsToClient: ", v, obj.visible);

+	]]>

+	</method>

+

+    <method name="startStream" args="publicSID,broadcastId,firstname,lastname,interviewPodId,width,height">

+        <![CDATA[

+            if ($debug) Debug.write("startStream: ", publicSID,broadcastId,firstname,lastname,interviewPodId,width,height);

+            var obj = this.getVideoObjectByPublicSID(publicSID);

+            //if ($debug) Debug.write("startStream obj: ",obj);

+            if (obj != null ){

+                obj._chatvideoinner._videostream.playStream(broadcastId,-1);

+                obj.setDefaultVideoSize(width,height);

+                obj.setAttribute('chatpartnername',firstname+' '+lastname);

+            }

+            //we have to do this again when the stream starts, the initial video 

+            //component does not know the interviewPodId as the user has not selected 

+            //which interview video pod he is going to use

+            if (canvas.isInterview && interviewPodId != null && interviewPodId > 0) {

+                if ($debug) Debug.write("Is interview ",interviewPodId,"x",canvas["interviewPod"+interviewPodId+"_x"]);

+                obj.setAttribute("interviewPodId", interviewPodId);

+                obj.setAttribute("x",canvas["interviewPod"+interviewPodId+"_x"]);

+                obj.setAttribute("y",canvas["interviewPod"+interviewPodId+"_y"]);

+                obj.setAttribute("width",322);

+                obj.setAttribute("height",281);

+            }

+            return;

+        ]]>

+    </method>

+

+	<!---

+		Clear all views, probably this is caleld whenever a user leaves the room for example

+	 -->

+    <method name="clearAll">

+        <![CDATA[

+            if ($debug) Debug.write("clearAll", this.subviews);

+            while(this.subviews.length > 0) {

+                this.subviews[0]._chatvideoinner._videostream._stop();

+                this.subviews[0].destroy();

+            }

+            if (canvas.inner.editRecordStream != null) {

+                canvas.inner.editRecordStream.destroy();

+            }

+            return;

+        ]]>

+    </method>

+    

+    <!---

+    	Update the ismoderator flag, there is no need to check here which user

+    	this happened already before sending it to the SWF10 app

+     -->

+    <method name="updateModerationFlag" args="moderator">

+    	<![CDATA[

+    		if ($debug) Debug.write("updateModerationFlag :: ",moderator);

+    		this.setAttribute('ismoderator',moderator);

+    		return;

+    	]]>

+    </method>

+    

+    <!---

+    	Update the canDraw,canShare,canRemote flag, there is no need to check here which user

+    	this happened already before sending it to the SWF10 app

+     -->

+    <method name="setDrawAllowStatus" args="canDraw,canShare,canRemote">

+    	<![CDATA[

+    		if ($debug) Debug.write("setDrawAllowStatus :: ",canDraw,canShare,canRemote);

+    		canvas.setAttribute("isAllowedToDraw",canDraw);

+            canvas.setAttribute("isAllowedToScreenShare",canShare);

+            canvas.setAttribute("isAllowedToRemoteControl",canRemote);

+            return;

+    	]]>

+    </method>

+    

+    <method name="setExclusiveAudioAllowStatus" args="canGiveAudio">

+    	<![CDATA[

+    		if ($debug) Debug.write("setExclusiveAudioAllowStatus :: ",canGiveAudio);

+    		canvas.setAttribute("isAllowedToGiveExclusiveAudio",canGiveAudio);

+            return;

+    	]]>

+    </method>

+

+    <!---

+        Shows the window with device settings

+    -->

+    <method name="changeDevice">

+        <![CDATA[

+            if ($debug) Debug.write("changeDevice");

+            new lz.changeDevice(canvas.inner, {

+					                name:"changeDeviceDialog"

+					            });

+            return;

+        ]]>

+    </method>

+

+    <!---

+        Shows the exit dialog

+    -->

+    <method name="exitRoom">

+        if ($debug) Debug.write("exitRoom");

+        new lz.confirmationSingleSWF10(canvas,{

+                refObj:this,

+                labelid:791,

+                labeliderror:790,

+                refReturnMethod:'immediateExitRoom',

+                showCheckBox:false

+            });

+        return;

+    </method>

+

+	<method name="immediateExitRoom" args="bool,ctx">

+	<![CDATA[

+		if($debug) Debug.write("0");

+		if (canvas.wicketsid != null && bool) {

+			if($debug) Debug.write("1");

+			clearAll();

+			if($debug) Debug.write("2");

+			canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'exitRoom', bool);

+			if($debug) Debug.write("3");

+			if($debug) Debug.write("Do disconnect 10:: ", canvas.thishib);

+			if (canvas.thishib._nc) {

+				canvas.thishib._nc.close();

+			}

+			if($debug) Debug.write("4");

+			canvas.thishib.disconnect();

+			if($debug) Debug.write("5");

+			canvas.thishib.src = null;

+		}

+	]]>

+	</method>

+

+	<method name="updateFirstLastName" args="publicSID,first,last">

+		var v = getVideoObjectByPublicSID(publicSID);

+		if (v != null) {

+			v.setAttribute('chatpartnername', first + ' ' + last);

+		}

+	</method>

+	

+    <!---

+        Shows the close whiteboard dialog

+    -->

+    <method name="closeWhiteboard">

+        if ($debug) Debug.write("closeWhiteboard");

+        if (canvas.ismoderator || canvas.isAllowedToDraw) {

+            canvas.closeWhiteboardDialog = new lz.confirmationSingleSWF10(canvas,{

+                refObj:this,

+                labeliderror:1313,

+                refReturnMethod:'closeWhiteboardConfirmMethod',

+                showCheckBox:false

+            });

+        } else {

+            new lz.labelerrorPopupSWF10(canvas,{labelid:1366, errorlabelid:1365});

+        }

+        return;

+    </method>

+    

+    <method name="closeWhiteboardConfirmMethod" args="bool,sharedObjectData">

+    	canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'closeWhiteboard', bool);

+    </method>

+        

+	<!-- arranges video pods -->

+	<method name="arrangeWindows">

+	<![CDATA[

+		if ($debug) Debug.write("arrangeWindows");

+		var windowsList = this.subviews;

+

+		if (0 == windowsList.length) {

+            return;

+		}

+

+        windowsList.sort(this.sortFunction);

+

+		var offsetInPx = 40;

+		var initX = 20;

+		var initY = 20;

+		var xPos = initX;

+		var yPos = initY;

+		var rowHeight = windowsList[0].height;

+

+		// arrange windows with new positions

+		for (var winIdx = 0; winIdx < windowsList.length; winIdx++) {

+			var window = windowsList[winIdx];

+			if (canvas.width < xPos + window.width) {

+                yPos += rowHeight + offsetInPx;

+                xPos = initX;

+                rowHeight = window.height;

+			}

+			if (canvas.height < yPos) {

+			    initX += 10;

+			    initY += 10;

+			    xPos = initX;

+			    yPos = initY;

+			}

+			window.setAttribute("x", xPos);

+			window.setAttribute("y", yPos);

+			window.bringToFront();

+

+			xPos += window.width + offsetInPx;

+		}

+	]]>

+	</method>

+

+	<method name="setSessionId" args="session_id">

+		canvas.setAttribute("sessionId", session_id);

+	</method>

+	

+    <!-- @keyword private -->

+    <method name="sortFunction" args="el1, el2">

+        <![CDATA[

+            if (el1.height > el2.height) {

+                return -1;

+            } else if (el1.height < el2.height) {

+                return 1;

+            }

+            return 0;

+        ]]>

+    </method>

+

+</class>

+

+</library>

diff --git a/WebContent/swf10/dragHelper.lzx b/WebContent/swf10/dragHelper.lzx
new file mode 100644
index 0000000..bc8bea9
--- /dev/null
+++ b/WebContent/swf10/dragHelper.lzx
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="dragHelper">

+

+    <attribute name="dragHelper" value="null" />

+

+    <method name="create">

+        if(this.dragHelper != null ) this.dragHelper.destroy();

+        this.dragHelper = new lz.view(canvas, {width:canvas.width,height:canvas.height,x:'0',y:'0', bgcolor:'0xFFFFFF', opacity:0.01,clickable:true});

+        this.dragHelper.sendInFrontOf(canvas.mainComponent);

+    </method>

+

+    <method name="remove">

+        this.dragHelper.destroy();

+        this.dragHelper = null;

+    </method>

+

+</class>

+

+</library>
\ No newline at end of file
diff --git a/WebContent/swf10/hibAdapter.lzx b/WebContent/swf10/hibAdapter.lzx
new file mode 100644
index 0000000..00e8ff1
--- /dev/null
+++ b/WebContent/swf10/hibAdapter.lzx
@@ -0,0 +1,398 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="hibAdapter">

+

+    <attribute name="testingApplication" value="null" />

+    <attribute name="baseVideoStream" value="null" />

+

+    <switch>

+        <when property="$as3">

+            <passthrough>

+                import flash.net.LocalConnection;

+            </passthrough>

+        </when>

+    </switch>

+

+    <handler name="oninit"><![CDATA[

+        var client = {};

+        client.t = this;

+

+        client.hibAdapter_setLabelObjectByHundred = this.hibAdapter_setLabelObjectByHundred;

+        client.setRoomValues = this.setRoomValues;

+        client.getRoomTypes = this.getRoomTypes;

+        client.disconnect = this.disconnect;

+        client.reconnectSuccess = this.reconnectSuccess;

+        //Test application to record 5 seconds

+        client.doInitTestingApplication = this.doInitTestingApplication;

+        client.closeInitTestingApplication = this.closeInitTestingApplication;

+        

+        //Recording Player Whiteboard

+        client.connectRecordingPlayer = this.connectRecordingPlayer;

+        client.playRecordingStream = this.playRecordingStream;

+        client.updateRecordingVideoPosition = this.updateRecordingVideoPosition;

+        client.stopRecordingStream = this.stopRecordingStream;

+        client.pauseRecordingPlayback = this.pauseRecordingPlayback;

+        client.seekRecordingPlayback = this.seekRecordingPlayback;

+        client.stopAndCloseRecordingConnection = this.stopAndCloseRecordingConnection;

+        client.playbackWhiteboardVideo = this.playbackWhiteboardVideo;

+        client.stopWhiteboardVideo = this.stopWhiteboardVideo;

+        

+        //Screen sharing player

+        client.newScreenSharing = this.newScreenSharing;

+        client.newScreenSharings = this.newScreenSharings;

+        client.closeScreenSharing = this.closeScreenSharing;

+        client.closeAllScreenSharings = this.closeAllScreenSharings;

+        client.updateCursorScreenSharing = this.updateCursorScreenSharing;

+        client.hideChatContent = this.hideChatContent;

+        

+        //Text RegExp 

+        client.regExpTest = this.regExpTest;

+

+        var rtmpLC:LocalConnection = new LocalConnection();

+        rtmpLC.connect(canvas.rtmp_lc_name);

+        if ($debug) Debug.write("Connect to LocalConnection ",canvas.rtmp_lc_name);

+        rtmpLC.client=client;

+        canvas.setAttribute("rtmp_lc", rtmpLC);

+    ]]></handler>

+

+    <method name="hibAdapter_setLabelObjectByHundred" args="start,value">

+    	//if($debug) Debug.write("hibAdapter_setLabelObjectByHundred",start);

+        // if($debug) Debug.write("hibAdapter_setLabelObjectByHundred",start,value);

+        setLabelObjectByHundred(start,value);

+    </method>

+

+    <method name="setRoomValues" args="roomtypes_id,rooms_id,value">

+        if($debug) Debug.write("setRoomValues",roomtypes_id,rooms_id,value);

+        canvas.currentRoomObject = value;

+    </method>

+

+    <method name="getRoomTypes" args="value">

+        canvas.roomTypesInitValues = value;

+    </method>

+    

+    <!-- 

+    	Synces some of the variables from the SWF8 to the SWF10.

+    	This also includes values for httphostlocal

+    	in case its a cluster'ed OpenMeetings installation the connection_url

+    	might point to the slave while the httphostlocal points to the master

+     -->

+    <method name="reconnectSuccess" args="connection_url,publicSID,userobject,isInterview,httphostlocal,httpport">

+        if($debug) Debug.write("reconnectSuccess",connection_url,publicSID,userobject);

+        canvas.httphostlocal = httphostlocal;

+        canvas.red5httpport = httpport;

+        canvas.publicSID = publicSID;

+        canvas.userobject = userobject;

+        canvas.isInterview = isInterview;

+        canvas.thishib.setAttribute('src',connection_url);

+        canvas.thishib.connect();

+    </method>

+    

+    <method name="disconnect" args="arg">

+        if($debug) Debug.write("Do disconnect");

+        canvas.thishib.disconnect();

+    </method>

+    

+    <!---

+        Starts the 5 second audio/video testing application and connect to RTMP

+     -->

+    <method name="doInitTestingApplication" args="x,y,connection_url">

+        if($debug) Debug.write("doInitTestingApplication ",x,y);

+        canvas.thishib.setAttribute('src',connection_url);

+        canvas.thishib.connect();

+        this.testingApplication = new lz.testingApplication(canvas,{name:'currentSharing',x:x+1,y:y+24});

+    </method>

+    

+    <!---

+        Stops and destroys the view with the audio/video testing application

+        and send confirmation back via LocalConnection

+     -->

+    <method name="closeInitTestingApplication">

+    	canvas.thishib.disconnect();

+        if($debug) Debug.write("closeInitTestingApplication ");

+        if (this.testingApplication != null) {

+            this.testingApplication.storeSettings();

+            this.testingApplication.destroy();

+            this.testingApplication = null;

+        }

+        if ($debug) Debug.write("Send confirmation of close back to: ",canvas.videoComp_lc_name);

+        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'closeInitTestingApplicationConfirm');

+    </method>

+    

+    <!---

+        Initializes video playback component

+        and connect to RTMP

+     -->

+    <method name="connectRecordingPlayer" args="connection_url,x,y,width,height">

+    	if($debug) Debug.write("connectRecordingPlayer ", connection_url,x,y,width,height);

+    	canvas.thishib.setAttribute('src',connection_url);

+        canvas.thishib.connect();

+        this.baseVideoStream = new lz.playBackVideoStream(canvas,{

+            x:x,

+            y:y,

+            width:width,

+            height:height

+        });

+    </method> 

+    

+    <!---

+        plays a recorded stream

+     -->

+    <method name="playRecordingStream" args="streamName,delay,x,y,width,height">

+    	if($debug) Debug.write("playRecordingStream ",streamName,x,y,width,height);

+    	if (this.baseVideoStream == null) {

+    		if ($debug) Debug.warn("baseVideoStream is NULL");

+    		return;

+    	}

+    	this.baseVideoStream.setAttribute("x",x);

+    	this.baseVideoStream.setAttribute("y",y);

+    	this.baseVideoStream.setAttribute("width",width);

+    	this.baseVideoStream.setAttribute("height",height);

+    	this.baseVideoStream.setAttribute("visibility","visible");

+    	this.baseVideoStream.playRecordingStream(streamName,delay);

+    </method>

+    

+    <!---

+        Updates the width/height property of the recording playback video 

+     -->    

+    <method name="updateRecordingVideoPosition" args="width,height">

+    	if (this.baseVideoStream == null) {

+    		if ($debug) Debug.warn("baseVideoStream is NULL");

+            return;

+        }

+        this.baseVideoStream.setAttribute("width",width);

+        this.baseVideoStream.setAttribute("height",height);

+    </method>

+    

+    <!---

+        stops and hides the recording playback video

+     -->

+    <method name="stopRecordingStream">

+    	if($debug) Debug.write("stopRecordingStream ");

+        if (this.baseVideoStream == null) {

+        	if ($debug) Debug.warn("baseVideoStream is NULL");

+            return;

+        }

+        if($debug) Debug.write(" stopRecording ");

+        this.baseVideoStream.stopRecording();

+        this.baseVideoStream.setAttribute("visibility","hidden");

+    </method>

+    

+    <!--- 

+        pauses the current video or continue at the same position

+     -->

+    <method name="pauseRecordingPlayback" args="pauseBool">

+    	if($debug) Debug.write("pauseRecordingPlayback ");

+        if (this.baseVideoStream == null) {

+        	if ($debug) Debug.warn("baseVideoStream is NULL");

+            return;

+        }

+        this.baseVideoStream.pause(pauseBool);

+    </method>

+    

+    <method name="seekRecordingPlayback" args="flvTime">

+    	if($debug) Debug.write("seekRecordingPlayback ",flvTime);

+        if (this.baseVideoStream == null) {

+        	if ($debug) Debug.warn("baseVideoStream is NULL");

+            return;

+        }

+        this.baseVideoStream.seekStream(flvTime);

+    </method>

+    

+    <method name="stopAndCloseRecordingConnection">

+    	if($debug) Debug.write("stopAndCloseRecordingConnection ");

+        if (this.baseVideoStream == null) {

+        	if ($debug) Debug.warn("baseVideoStream is NULL");

+            return;

+        }

+        this.baseVideoStream.stopRecording();

+        this.baseVideoStream.destroy();

+        this.baseVideoStream = null;

+        canvas.thishib.disconnect();

+        // send back confirmation to leave the module

+        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'recordingStoppedAndDisconnected');

+    </method>

+    

+    <!---

+        Start playback of whiteboard video

+     -->

+    <method name="playbackWhiteboardVideo" args="tName,recordingName,seek,tx,ty,twidth,theight">

+    	<![CDATA[

+    	   if($debug) Debug.write("playbackWhiteboardVideo ",tName,recordingName,seek,tx,ty,twidth,theight);

+    	   if (this[tName]) {

+    	   	 if ($debug) Debug.warn("playbackWhiteboardVideo there was already a video with the same name");

+    	   	 this[tName]._stop();

+    	   	 this[tName].destroy();

+    	   }

+    	   

+    	   new lz.playBackWhiteboardVideo(this.whiteboardVideos,{

+                	       name:tName,

+                	       x:tx,

+                	       y:ty,

+                	   	   width:twidth,

+                	   	   height:theight

+                	   });

+    	   

+    	   this.whiteboardVideos[tName].playVideoStream(recordingName,0);

+    	]]>

+    </method>

+    

+    <method name="stopWhiteboardVideo" args="tName">

+    	<![CDATA[

+    	   if($debug) Debug.write("stopWhiteboardVideo ",tName);

+           if (this.whiteboardVideos[tName]) {

+             this.whiteboardVideos[tName].stopVideo();

+             this.whiteboardVideos[tName].destroy();

+           } else {

+           	 if ($debug) Debug.warn("stopWhiteboardVideo could not find video to stop");

+           }

+    	]]>

+    </method>

+    

+    <!---

+       #################################

+       Methods to handle screen sharing video playback and cursor

+     -->

+     

+    <!---

+        Adds a new screen sharing playback video

+     -->

+    <method name="newScreenSharing" args="value, h">

+    	<![CDATA[

+     		canvas.chatHeight = h;

+    	   if (value.streamPublishName != canvas.publicSID) {

+                if (canvas.screenSharingDialogContainer == null) {

+                    canvas.screenSharingDialogContainer = new lz.screenSharingDialogContainer(canvas);

+                }

+                new lz.screenSharingDialog(canvas.screenSharingDialogContainer,{

+                            initObject:value 

+                        }); 

+            } else {

+                if ($debug) Debug.warn("Self Screen Sharing");

+            }

+    	]]>

+    </method> 

+    

+    <!---

+        Add a list of screen sharing playback videos 

+        (initially when entering the room invoked)

+     -->

+    <method name="newScreenSharings" args="value, h">

+     	<![CDATA[

+     		canvas.chatHeight = h;

+     	    for (var eg in value) {

+                this.newScreenSharing(value[eg], h);

+            }

+     	]]>

+    </method>

+   

+    <!---

+        Close a single screen sharing playback video

+     --> 

+	<method name="closeScreenSharing" args="value">

+		<![CDATA[

+			if (canvas.screenSharingDialogContainer != null) {

+				var obj = canvas.screenSharingDialogContainer

+						.searchForSession(value.streamPublishName);

+				if (obj) {

+					obj.doClose();

+				}

+			}

+		]]>

+	</method>

+	    

+	<!---

+	   Closes all screen sharing playback videos, whiteboard videos, user videos 

+	   and closes the rtmp connection

+	 -->

+	<method name="closeAllScreenSharings">

+        <![CDATA[

+            if ($debug) Debug.write("RECEIVE closeAllScreenSharings ");

+            if (canvas.screenSharingDialogContainer != null) {

+                canvas.screenSharingDialogContainer.closeAll();

+                canvas.screenSharingDialogContainer.destroy();

+                canvas.screenSharingDialogContainer = null;

+            }

+            this.whiteboardVideos.clearAll();

+            parent._videoComponent.clearAll();

+            canvas.thishib.disconnect();

+        ]]>

+    </method>

+    

+    <!---

+        change Screen Sharing farme height 

+     -->

+    <method name="hideChatContent" args="hide">

+     	<![CDATA[

+			if (canvas.screenSharingDialogContainer != null) {

+		        if ($debug) Debug.write("hideChatContent::hide " + hide);

+				canvas.screenSharingDialogContainer.hideChatContent(hide);

+			}

+     	]]>

+    </method>

+    

+    <!---

+        Update the position of the cursor from the sharing screen

+     -->

+	<method name="updateCursorScreenSharing" args="value">

+		<![CDATA[

+			if (canvas.screenSharingDialogContainer != null) {

+				var obj = canvas.screenSharingDialogContainer.searchForSession(value.streamPublishName);

+				obj.updateCursor(value.cursor_x, value.cursor_y);

+			}

+		]]>

+	</method>

+	

+	<!---

+		Make regExpTest 

+	 -->

+	<method name="regExpTest" args="fieldValue,regExStr,regExpCheckId">

+		<![CDATA[

+			var re = new RegExp(regExStr);

+			

+			var testResult = re.test( fieldValue );

+			

+			if ($debug) Debug.write(fieldValue, testResult);

+			

+			canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'regExpResult', regExpCheckId, testResult);

+			

+		]]>

+	</method>

+	

+    <!--

+        Container to hold all whiteboard videos

+     -->	

+	<view name="whiteboardVideos">

+		<method name="clearAll">

+    		<![CDATA[

+    			for (var eg in this.subviews) {

+    				this.subviews[eg].stopVideo();

+    				this.subviews[eg].destroy();

+    			}

+    		]]>

+		</method>

+	</view>

+     

+

+</class>

+

+</library>
\ No newline at end of file
diff --git a/WebContent/swf10/lzrecorder/library.lzx b/WebContent/swf10/lzrecorder/library.lzx
new file mode 100644
index 0000000..6f84e4c
--- /dev/null
+++ b/WebContent/swf10/lzrecorder/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+    <include href="playBackVideoStream.lzx" />

+    

+</library>

diff --git a/WebContent/swf10/lzrecorder/playBackVideoStream.lzx b/WebContent/swf10/lzrecorder/playBackVideoStream.lzx
new file mode 100644
index 0000000..b7fdfd5
--- /dev/null
+++ b/WebContent/swf10/lzrecorder/playBackVideoStream.lzx
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<!---

+    The playBackVideoStream is used in the recording playerback to show the video

+ -->

+<class name="playBackVideoStream" extends="baseVideoStream" bgcolor="0x000000" visibility="hidden">

+    

+    <attribute name="timerDelegate" value="null"/>

+    <attribute name="timerDelegateStarted" value="false" type="boolean"/>

+    

+    <handler name="oninit">

+        this.timerDelegate = new LzDelegate( this, "calcProgressBar" );

+    </handler>

+    

+    <handler name="onclick">

+        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'togglePlayRecordingStream');

+    </handler>

+    

+    <method name="playRecordingStream" args="streamName,delay">

+        this.playStream(streamName,delay);

+        this.timerDelegateStarted = true;

+        lz.Timer.addTimer( this.timerDelegate , 1000 );

+    </method>

+    

+    <method name="stopRecording">

+        this._stop();

+        lz.Timer.removeTimer(this.timerDelegate);

+        this.timerDelegateStarted = false;

+    </method>

+    

+    <handler name="onNetStatus" args="info">

+        if ($debug) Debug.write("onNetStatus ",info);

+        if (info.code ==  "NetStream.Play.Stop" ) {

+            canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'stopRecordingStream');

+        }

+    </handler>

+    <handler name="onMetaDataEvent" args="info">

+        if ($debug) Debug.write("onMetaData ",info);

+    </handler>

+    

+    <method name="calcProgressBar" args="tObjRef">

+        if ($debug) Debug.write("calcProgressBar updateRecordingStreamTime",this._ns.time)

+        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'updateRecordingStreamTime',this._ns.time);

+        if (this.timerDelegateStarted) {

+            lz.Timer.addTimer( this.timerDelegate , 1000 );

+        }

+    </method>

+    

+</class>	

+

+</library>
\ No newline at end of file
diff --git a/WebContent/swf10/main.as3.lzx b/WebContent/swf10/main.as3.lzx
new file mode 100644
index 0000000..51c0235
--- /dev/null
+++ b/WebContent/swf10/main.as3.lzx
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<canvas width="100%" height="100%" title="OpenMeetings">

+	

+	<switch>

+        <when property="$as3">

+            <passthrough>

+                import flash.net.*;

+                import flash.display.*;

+                import flash.events.*;

+            </passthrough>

+        </when>

+    </switch>

+	<switch>

+		<when property="$debug">

+			<method name="doDebugInit">

+				canvas.setAttribute('debug', true);

+			</method>

+			<debug fontsize="11" oninit="Debug.showInternalProperties = true" width="40%" y="50%" x="60%" height="50%" />

+		</when>

+		<otherwise>

+			<method name="doDebugInit">

+			</method>

+		</otherwise>

+    </switch>

+    

+    <include href="testVideoObject.lzx" />

+

+    <silverstyle name="componentStyle" basecolor="0xFFFFFF" textcolor="0x000000" />

+

+    <attribute name="lc_SID"/>

+

+    <attribute name="vid_lc_name" />

+

+    <attribute name="lc"/>

+

+    <attribute name="rtmp_lc_name" />

+

+    <attribute name="rtmp_lc"/>

+

+    <attribute name="videoComp_lc_name" />

+

+    <attribute name="videoComp_lc_callback_name" />

+

+    <attribute name="videoComp_lc" />

+

+    <include href="base/" />

+

+    <include href="modules/" />

+

+    <include href="video/" />

+    

+    <include href="screensharing/" />

+    

+    <include href="audioVideoTest/" />

+    

+    <include href="lzrecorder/" />

+    

+    <include href="whiteboard/" />

+

+    <include href="commonVideoViewContentSWF10.lzx" />

+

+    <include href="hibAdapter.lzx" />

+

+    <include href="miniIcons.lzx" />

+

+    <include href="dragHelper.lzx" />

+

+    <view name="mainComponent" width="${canvas.width}" height="${canvas.height}">

+        <text id="mainBaseText"> </text>

+    </view>

+

+    <method name="getLCSID">

+        //TODO: fixme

+        return "" + Math.floor(999999*Math.random());

+    </method>

+

+    <handler name="oninit"><![CDATA[

+		doDebugInit();

+    

+        var tInitArgsArry = new Array('secureHash','invitationHash','sid','roomid','directRoomId'

+        	,'language','hash','cuser','tAccept','moodleRoom','becomemoderator','wwwroot','user_id'

+        	,'picture','scopeRoomId', 'wicketsid', 'wicketroomid', 'protocol', 'host', 'port', 'context');

+    

+        this.setAttribute('lc_SID', this.getLCSID());

+        this.setAttribute('vid_lc_name', lc_SID + '__videoLC');

+        this.setAttribute('rtmp_lc_name', lc_SID + '__rtmpLC');

+        this.setAttribute('videoComp_lc_name', lc_SID + '__streamLC');

+        this.setAttribute('videoComp_lc_callback_name', lc_SID + '__streamLC_cback');

+

+        var videoComp_lc_cback:LocalConnection = new LocalConnection();

+        videoComp_lc_cback.connect(this.videoComp_lc_callback_name);

+        this.setAttribute('videoComp_lc',videoComp_lc_cback);

+        

+        var tqueryString = "";

+        for (var i = 0; i < tInitArgsArry.length; ++i) {

+            // if ($debug) Debug.write(tInitArgsArry[i],lz.Browser.getInitArg(tInitArgsArry[i]));

+            var tValue = lz.Browser.getInitArg(tInitArgsArry[i]);

+            if (tValue != undefined) {

+                tqueryString += "&" + tInitArgsArry[i] + "=" + tValue;

+                if (tInitArgsArry[i].startsWith('wicket')) {

+                	canvas.setAttribute(tInitArgsArry[i], tValue);

+                }

+            }

+        }

+        

+        var tSWFURL = canvas.getLocalBaseUrl() + "main" + ($debug ? "debug" : "") + ".swf8.swf?lzproxied=solo&lc_SID="+lc_SID+tqueryString;

+        

+        if ($debug) Debug.write("tSWFURL :: ",tSWFURL);

+        

+        var request:URLRequest = new URLRequest(tSWFURL);

+        var loader:Loader = new Loader();

+        loader.load(request);

+        this.mainComponent.sprite.addChild(loader);

+		canvas.currentRoomObject = new Object();

+

+        new lz.commonVideoViewContentSWF10(this, {name:'_videoComponent'});

+        new lz.hibAdapter(this);

+

+        if ($debug) Debug.write("main::init DONE");

+    ]]></handler>

+

+    <view name="inner"></view>

+    

+</canvas>

diff --git a/WebContent/swf10/miniIcons.lzx b/WebContent/swf10/miniIcons.lzx
new file mode 100644
index 0000000..301d381
--- /dev/null
+++ b/WebContent/swf10/miniIcons.lzx
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="miniIcons" extends="view" stretches="both">

+	<attribute name="showhandcursor" value="true" type="boolean" />

+    <handler name="onmouseover">

+    	if (this.showhandcursor) {

+        	this.setAttribute("x",this.x-1);

+        	this.setAttribute("y",this.y-1);

+        	this.setAttribute("height",this.height+2);

+        	this.setAttribute("width",this.width+2);

+    	}

+        parent.parent.onmouseover.sendEvent();

+    </handler>

+    <handler name="onmouseout">

+    	if (this.showhandcursor) {

+        	this.setAttribute("x",this.x+1);

+            this.setAttribute("y",this.y+1);

+            this.setAttribute("height",this.height-2);

+            this.setAttribute("width",this.width-2);

+    	}

+        parent.parent.onmouseout.sendEvent();

+    </handler>

+</class>

+

+<class name="miniIconsImage" extends="image" stretches="both">

+	<attribute name="showhandcursor" value="true" type="boolean" />

+    <handler name="onmouseover">

+    	if (this.showhandcursor) {

+        	this.setAttribute("x",this.x-1);

+        	this.setAttribute("y",this.y-1);

+        	this.setAttribute("height",this.height+2);

+        	this.setAttribute("width",this.width+2);

+    	}

+        parent.parent.onmouseover.sendEvent();

+    </handler>

+    <handler name="onmouseout">

+    	if (this.showhandcursor) {

+        	this.setAttribute("x",this.x+1);

+            this.setAttribute("y",this.y+1);

+            this.setAttribute("height",this.height-2);

+            this.setAttribute("width",this.width-2);

+    	}

+        parent.parent.onmouseout.sendEvent();

+    </handler>

+</class>

+

+</library>
\ No newline at end of file
diff --git a/WebContent/swf10/modules/conference/library.lzx b/WebContent/swf10/modules/conference/library.lzx
new file mode 100644
index 0000000..9d1d1d1
--- /dev/null
+++ b/WebContent/swf10/modules/conference/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+    <include href="popups/" />

+

+</library>

diff --git a/WebContent/swf10/modules/conference/popups/confirmationSingleSWF10.lzx b/WebContent/swf10/modules/conference/popups/confirmationSingleSWF10.lzx
new file mode 100644
index 0000000..25b3c86
--- /dev/null
+++ b/WebContent/swf10/modules/conference/popups/confirmationSingleSWF10.lzx
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+

+      http://www.apache.org/licenses/LICENSE-2.0

+

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+

+-->

+<library>

+

+<class name="confirmationSingleSWF10" extends="labelExplorerBox" labelid="832"

+    docking="true" resizeable="false" closable="true" height="140" width="300">

+

+    <attribute name="refObj" value="null" />

+

+    <attribute name="refReturnMethod" value="null" />

+

+    <attribute name="showCheckBox" value="true" type="boolean" />

+

+    <attribute name="labeliderror" value="0" type="number" />

+

+    <attribute name="result" type="bool"/>

+    

+    <attribute name="iconResource" value="warning_popup_icon_rsc" type="string" />

+

+	<image x="4" src="$once{ canvas.getThemeImage(parent.iconResource) }" y="24" />

+

+    <labelText labelid="$once{ parent.labeliderror }" y="24"

+    		   width="$once{ parent.width - 40 }"

+    	multiline="true" resize="false" x="30" />

+

+    <handler name="oninit">

+        <![CDATA[

+

+            //Set Position of Confirmation Box as Close as possible to the Mouse

+            var x = parent.getMouse("x");

+            var y = parent.getMouse("y");

+            var newx = x - (this.width/2);

+            var newy = y - (this.height/2);

+

+            if ($debug) Debug.write("1",x,y,newx,newy);

+

+            if (newx < 0) {

+                newx = 20;

+            }

+            if (newy < 0) {

+                newy = 20;

+            }

+

+            //if ($debug) Debug.write("1.1",(this.width + newx + 20),parent.width,this.width);

+

+            var relativeWidth = parent.width;

+            if (relativeWidth > canvas.width) {

+            	relativeWidth = canvas.width;

+            }

+

+            if (this.width + newx + 20 > relativeWidth) {

+            	newx = relativeWidth-this.width-20;

+            }

+

+            if (this.height + newy + 20 > parent.height) {

+            	newy = parent.height-this.height-20;

+            }

+

+            if ($debug) Debug.write("2",newx,newy);

+

+            this.setAttribute("x",newx);

+            this.setAttribute("y",newy);

+

+        ]]>

+    </handler>

+

+    <labelCheckbox name="holddatainSO" visibility="$once{ (parent.showCheckBox) ? 'visible' : 'hidden' }"

+                   labelid="64" x="10" y="$once{ parent.height - 46 }" />

+

+    <simpleLabelButton labelid="61" width="100" x="$once{ parent.width - 105 }" y="$once{ parent.height - 26 }">

+    	<handler name="onclick">

+    		var t = parent.holddatainSO.getValue();

+    		this.parent.close();

+            this.parent.result = false;

+            if (null != this.parent.refObj) {

+                if (parent.refReturnMethod == null) {

+                    this.parent.refObj.sendConfirmation(false,t);

+                } else {

+                    this.parent.refObj[parent.refReturnMethod](false,t);

+                }

+            }

+            if ($debug) Debug.write("end");

+    	</handler>

+    </simpleLabelButton>

+    <simpleLabelButton labelid="60" width="100" x="$once{ parent.width - 210 }" y="$once{ parent.height - 26 }">

+    	<handler name="onclick">

+    		var t = parent.holddatainSO.getValue();

+    		this.parent.close();

+            this.parent.result = true;

+            if (null != this.parent.refObj) {

+                if (parent.refReturnMethod == null) {

+                    this.parent.refObj.sendConfirmation(true,t);

+                } else {

+                    this.parent.refObj[parent.refReturnMethod](true,t);

+                }

+            }

+    	</handler>

+    </simpleLabelButton>

+</class>

+

+<class name="rememberMessageSWF10" extends="labelExplorerBox" labelid="832"

+	   x="$once{ canvas.width/2 - this.width/2 }" y="100"

+	   docking="true" resizeable="false" closable="true" height="140" width="300">

+

+    <attribute name="refObj" value="null" />

+

+    <attribute name="showCheckBox" value="true" type="boolean" />

+

+    <attribute name="labeliderror" value="0" type="number" />

+

+    <view x="4" resource="warning_icon_rsc" y="24" />

+

+    <labelText labelid="$once{ parent.labeliderror }" y="24"

+               width="$once{ parent.width - 40 }"

+        multiline="true" resize="false" x="30" />

+

+    <labelCheckbox name="holddatainSO" visibility="$once{ (parent.showCheckBox) ? 'visible' : 'hidden' }"

+                   labelid="64" x="10" y="$once{ parent.height - 46 }" />

+

+    <simpleLabelButton labelid="642" width="100" x="$once{ parent.width - 105 }" y="$once{ parent.height - 26 }">

+        <handler name="onclick">

+        	var t = parent.holddatainSO.getValue();

+            this.parent.close();

+            if (null != this.parent.refObj) {

+                this.parent.refObj.sendConfirmation(t);

+            }

+        </handler>

+    </simpleLabelButton>

+

+</class>

+

+</library>

diff --git a/WebContent/swf10/modules/conference/popups/errorPopupSWF10.lzx b/WebContent/swf10/modules/conference/popups/errorPopupSWF10.lzx
new file mode 100644
index 0000000..18fb2f9
--- /dev/null
+++ b/WebContent/swf10/modules/conference/popups/errorPopupSWF10.lzx
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="errorPopupSWF10" extends="labelExplorerBox" labelid="204"

+	docking="true" resizeable="false" closable="true" y="100"

+    x="$once{ parent.width/2 - this.width/2 }" height="160" width="324">

+

+	<attribute name="error" value="" type="string" />

+	

+	<attribute name="makeModal" value="false" type="boolean" />

+	

+	<handler name="oninit">

+	   if (this.makeModal) {

+	       lz.ModeManager.makeModal(this);

+	   }

+	</handler>

+	

+	<handler name="onclose">

+       if (this.makeModal) {

+           lz.ModeManager.releaseAll();

+       }

+    </handler>

+

+	<view x="4" resource="warning_icon_rsc" y="24" />

+

+	<view y="24" width="$once{ parent.width - 40 }" height="130" x="30" clip="true">

+		<text fontsize="10" fontstyle="bold" text="${ parent.parent.error }"

+			multiline="true" width="$once{ parent.width - 16 }" selectable="true" />

+	</view>

+    

+    <simpleLabelButton labelid="642" width="100" x="$once{ parent.width-105 }" 

+           y="$once{ parent.height-24 }" 

+           onclick="this.parent.close();" />

+

+</class>

+

+<class name="labelerrorPopupSWF10" extends="errorPopupSWF10">

+

+    <attribute name="errorlabelid" type="number" setter="setErrorLabelId(errorlabelid)" />

+    <method name="setErrorLabelId" args="errorlabelid" >

+        this.errorlabelid = errorlabelid;

+        this.setAttribute("error",canvas.getLabelName(this.errorlabelid));

+        if ($debug) Debug.write("labelerrorPopupSWF10: ",canvas.getLabelName(this.errorlabelid));

+    </method>

+    

+

+</class>

+

+<class name="singletonErrorPopupSWF10" extends="errorPopupSWF10">

+	<handler name="oninit">

+		lz.singletonErrorPopupHolderSWF10.dialogPresent = 1;

+		lz.singletonErrorPopupHolderSWF10.dialogObject = this;

+	</handler>

+	

+	<handler name="ondestroy">

+		lz.singletonErrorPopupHolderSWF10.dialogPresent = 0;

+		lz.singletonErrorPopupHolderSWF10.dialogObject = null;

+	</handler>

+</class>

+

+<class name="singletonErrorPopupHolderSWF10">

+	<attribute name="error" type="string" setter="setError(error)"/>

+	<attribute name="dialogPresent" allocation="class" value="0" />

+	<attribute name="dialogObject" allocation="class" />

+	

+	<method name="setError" args="error">

+	

+		if ( lz.singletonErrorPopupHolderSWF10.dialogPresent == 0 )

+		{

+			lz.singletonErrorPopupHolderSWF10.dialogPresent = 1;

+			lz.singletonErrorPopupHolderSWF10.dialogObject = new lz.singletonErrorPopupSWF10(canvas,{error:error});

+		}

+		else

+		{

+			lz.singletonErrorPopupHolderSWF10.dialogObject.error = error;

+		}

+	</method>

+</class>

+

+</library>
\ No newline at end of file
diff --git a/WebContent/swf10/modules/conference/popups/library.lzx b/WebContent/swf10/modules/conference/popups/library.lzx
new file mode 100644
index 0000000..453df78
--- /dev/null
+++ b/WebContent/swf10/modules/conference/popups/library.lzx
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+	

+	<!-- 

+	FamFam Icon Set

+	Creative Commons 3.0

+	 -->

+	<resource name="warning_icon_rsc" src="resources/error.png" />

+

+    <include href="confirmationSingleSWF10.lzx" />

+    <include href="errorPopupSWF10.lzx" />

+    

+</library>

diff --git a/WebContent/swf10/modules/conference/popups/resources/error.png b/WebContent/swf10/modules/conference/popups/resources/error.png
new file mode 100644
index 0000000..628cf2d
--- /dev/null
+++ b/WebContent/swf10/modules/conference/popups/resources/error.png
Binary files differ
diff --git a/WebContent/swf10/modules/library.lzx b/WebContent/swf10/modules/library.lzx
new file mode 100644
index 0000000..1f553d0
--- /dev/null
+++ b/WebContent/swf10/modules/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+    <include href="conference/" />

+

+</library>

diff --git a/WebContent/swf10/networkTesting/networktesting.lzx b/WebContent/swf10/networkTesting/networktesting.lzx
new file mode 100644
index 0000000..7001f3e
--- /dev/null
+++ b/WebContent/swf10/networkTesting/networktesting.lzx
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+          

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<canvas width="100%" height="100%" title="NetworkTesting">

+

+	<switch>

+        <when property="$as3">

+            <passthrough>

+                import flash.external.ExternalInterface;

+            </passthrough>

+        </when>

+    </switch>

+	<switch>

+		<when property="$debug">

+			<method name="doDebugInit">

+				canvas.setAttribute('debug', true);

+			</method>

+			<debug fontsize="11" oninit="Debug.showInternalProperties = true" width="40%" y="50%" x="60%" height="50%" />

+		</when>

+		<otherwise>

+			<method name="doDebugInit">

+			</method>

+		</otherwise>

+    </switch>

+    

+    <include href="testsView.lzx" />

+    <handler name="oninit"><![CDATA[

+    	flash.external.ExternalInterface.call("loadingComplete");

+		doDebugInit();

+	]]></handler>

+	

+    <!--

+        These attributes are rewritten by values from "public/config.xml"

+    -->

+    <attribute name="rtmpProtocol" type="string" value="rtmp" />

+    <attribute name="rtmpHost" type="string" value="" />

+    <attribute name="rtmpPort" type="number" value="1935" />

+    

+    <attribute name="httpProtocol" type="string" value="http" />

+    <attribute name="httpHost" type="string" value="" />

+    <attribute name="httpPort" type="number" value="5080" />

+    <attribute name="uriContext" type="string" value="/openmeetings" />

+    <attribute name="rtmpUriPath" type="string" value="/openmeetings/hibernate" />

+

+	<method name="getBrowserHost">

+		var host:String = ExternalInterface.call("window.location.host.toString()");

+		// in case of IE or some other security issues we will fail ...

+		if (!host) {

+			var url:String = canvas.proxyurl;

+			if (url) {

+				if ($debug) Debug.write("url ", url);

+				var paramsIdx = url.indexOf("?");

+				if (paramsIdx != -1) {

+					url = url.substr(0, paramsIdx);

+				}

+				if ($debug) Debug.write("url ", url);

+				url = url.substr(url.indexOf("//") + 2);

+				var portIdx = url.indexOf(":");

+				host = url.substr(0, portIdx != -1 ? portIdx : url.indexOf("/"));

+				if ($debug) Debug.write("host ", host);

+			}

+		}

+		return host;

+	</method>

+	

+	<method name="getSettings">

+		var settingsPtr = canvas.settings.getPointer();

+		

+		var useSSL:Boolean = ("yes" == settingsPtr.xpathQuery("config/useSSL/text()"));

+		canvas.setAttribute("rtmpProtocol", useSSL ? "rtmps" : "rtmp");

+		canvas.setAttribute("proxyType", settingsPtr.xpathQuery("config/proxyType/text()"));

+		canvas.setAttribute("rtmpHost", settingsPtr.xpathQuery("config/rtmphostlocal/text()"));

+		if (!canvas.rtmpHost) {

+			canvas.rtmpHost = getBrowserHost();

+		}

+		canvas.setAttribute("rtmpPort", settingsPtr.xpathQuery("config/" + (useSSL ? "rtmpsslport" : "rtmpport") + "/text()"));

+		

+		canvas.setAttribute("httpProtocol", settingsPtr.xpathQuery("config/protocol/text()"));

+		canvas.setAttribute("httpHost", settingsPtr.xpathQuery("config/httphostlocal/text()"));

+		if (!canvas.httpHost) {

+			canvas.httpHost = rtmpHost;

+		}

+		canvas.setAttribute("httpPort", settingsPtr.xpathQuery("config/red5httpport/text()"));

+

+		canvas.setAttribute("uriContext", settingsPtr.xpathQuery("config/httpRootKey/text()"));

+		canvas.setAttribute("rtmpUriPath", canvas.uriContext + "hibernate");

+	</method>

+

+    <method name="showTests">

+        var tests = new lz.TestsView(canvas, {name:"testsView"});

+        tests.testAll();

+    </method>

+

+    <dataset type="http" name="settings" request="false" proxied="false">

+        <handler name="oninit">

+            this.setAttribute("src", "config.xml");

+            this.doRequest();

+        </handler>

+        <handler name="ondata">

+            if ($debug) Debug.write("Settings are retrieved");

+            canvas.getSettings();

+            canvas.showTests();

+        </handler>

+        <handler name="onerror" args="e">

+            if ($debug) Debug.write("Settings error [" + this.src + "]", e);

+        </handler>

+        <handler name="ontimeout" args="e">

+            if ($debug) Debug.write("Settings timeout error", e);

+        </handler>

+    </dataset>

+

+    <attribute name="busy" type="boolean" value="false"/>

+    <attribute name="log" type="string" value="" />

+

+    <attribute name="testsView" value="null"/>

+

+</canvas>

diff --git a/WebContent/swf10/networkTesting/resources/edit-copy.png b/WebContent/swf10/networkTesting/resources/edit-copy.png
new file mode 100644
index 0000000..8dd48c4
--- /dev/null
+++ b/WebContent/swf10/networkTesting/resources/edit-copy.png
Binary files differ
diff --git a/WebContent/swf10/networkTesting/tests/BaseURLLoadTest.lzx b/WebContent/swf10/networkTesting/tests/BaseURLLoadTest.lzx
new file mode 100644
index 0000000..7660b0f
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/BaseURLLoadTest.lzx
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+

+      http://www.apache.org/licenses/LICENSE-2.0

+

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+

+-->

+<library>

+

+<class name="BaseURLLoadTest" extends="NetworkTest">

+

+    <switch>

+        <when property="$as3">

+            <passthrough>

+                import flash.events.*;

+                import flash.net.*;

+                import flash.utils.*;

+            </passthrough>

+        </when>

+    </switch>

+

+    <attribute name="testsCount" type="number" value="0" />

+    <attribute name="testTypeParameter" type="string" value="null" />

+    <attribute name="verbose" type="boolean" value="true" />

+

+    <attribute name="startTime" type="number" value="0" />

+    <attribute name="wholeTime" type="number" value="0" />

+    <attribute name="maxTime" type="number" value="0" />

+    <attribute name="minTime" type="number" value="999999" />

+    <attribute name="finishedTestsCount" type="number" value="0" />

+    <attribute name="successfulTestsCount" type="number" value="0" />

+

+    <attribute name="hostUrl" type="string" value="" />

+    <attribute name="loaderInited" type="boolean" value="false" />

+    <attribute name="request" value="null" />

+    <attribute name="loader" value="null" />

+

+    <method name="initLoader">

+        hostUrl = getBaseUrl() + "networktest.upload?testType=" + testTypeParameter;

+        request = new URLRequest(hostUrl);

+

+        loader = new URLLoader();

+        loader.addEventListener(Event.COMPLETE, this.onComplete);

+        loader.addEventListener(IOErrorEvent.IO_ERROR, this.onError);

+        loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, this.onError);

+

+        loaderInited = true;

+    </method>

+

+    <method name="start">

+        if (!loaderInited) {

+            this.initLoader();

+        }

+        finishedTestsCount = 0;

+        successfulTestsCount = 0;

+        wholeTime = 0;

+        maxTime = 0;

+        minTime = 999999;

+

+        this.log("start test... " + hostUrl);

+        startTime = getTimer();

+        loader.load(request);

+    </method>

+

+    <method name="forcedStop">

+        loader.close();

+        this.log("stopped");

+    </method>

+

+    <method name="onComplete" args="e">

+        <![CDATA[

+        var endTime = getTimer();

+        var pingTime = endTime - startTime;

+        wholeTime += pingTime;

+        if (pingTime > maxTime) {

+            maxTime = pingTime;

+        }

+        if (pingTime < minTime) {

+            minTime = pingTime;

+        }

+

+        if (verbose) {

+            this.log("load time = " + pingTime + " ms");

+        }

+

+        finishedTestsCount++;

+        successfulTestsCount++;

+        if (finishedTestsCount < testsCount && running) {

+            startTime = getTimer();

+            loader.load(request);

+        } else {

+            this.report();

+        }

+        ]]>

+    </method>

+

+    <method name="onError" args="e">

+        <![CDATA[

+        if (verbose) {

+            this.log("Error - " + e);

+        }

+

+        finishedTestsCount++;

+        if (finishedTestsCount < testsCount && running) {

+            startTime = getTimer();

+            loader.load(request);

+        } else {

+            this.report();

+        }

+        ]]>

+    </method>

+

+    <method name="report">

+        var report = "report:";

+        if (successfulTestsCount > 0) {

+            report += "\n" + this.generateReport();

+        } else {

+            report += " connection error";

+        }

+        this.log(report);

+

+        if (successfulTestsCount > 0) {

+            this.setPassed();

+        } else {

+            this.setFailed();

+        }

+    </method>

+

+    <method name="generateReport" />

+

+</class>

+

+</library>

diff --git a/WebContent/swf10/networkTesting/tests/DownloadSpeedTest.lzx b/WebContent/swf10/networkTesting/tests/DownloadSpeedTest.lzx
new file mode 100644
index 0000000..a5ea115
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/DownloadSpeedTest.lzx
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+

+      http://www.apache.org/licenses/LICENSE-2.0

+

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+

+-->

+<library>

+

+<class name="DownloadSpeedTest" extends="BaseURLLoadTest">

+

+    <handler name="oninit">

+        this.setAttribute("testsCount", 1);

+        this.setAttribute("testName", "Download speed");

+        this.setAttribute("testTypeParameter", "download");

+        this.setAttribute("verbose", false);

+        this.setAttribute("resultText", true);

+    </handler>

+

+    <method name="generateReport">

+        var mBytes = loader.bytesTotal/(1024*1024);

+        var timeSec = wholeTime/1000;

+        var speed = mBytes/timeSec;

+

+        var report = "Bytes downloaded: " + mBytes + " Mb\n";

+        report += "Download time: " + timeSec + " s\n";

+        report += "Download speed: " + speed + " Mb/s\n";

+

+        resultLabel.setAttribute("text", "");

+        resultLabel.addFormat("%.2f\n%s", speed, "Mb/s");

+

+        return report;

+    </method>

+

+</class>

+

+</library>

diff --git a/WebContent/swf10/networkTesting/tests/JitterTest.lzx b/WebContent/swf10/networkTesting/tests/JitterTest.lzx
new file mode 100644
index 0000000..dd80bb0
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/JitterTest.lzx
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+

+      http://www.apache.org/licenses/LICENSE-2.0

+

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+

+-->

+<library>

+

+<class name="JitterTest" extends="BaseURLLoadTest">

+

+    <handler name="oninit">

+        this.setAttribute("testsCount", 100);

+        this.setAttribute("testName", "Jitter");

+        this.setAttribute("testTypeParameter", "jitter");

+        this.setAttribute("verbose", false);

+        this.setAttribute("resultText", true);

+    </handler>

+

+    <method name="generateReport">

+        <![CDATA[

+        var averageTime = wholeTime / successfulTestsCount;

+        var jitterMax = maxTime - averageTime;

+        var jitterMin = minTime - averageTime;

+        var report = "Average time: " + averageTime + " ms\n";

+        report += "Min time: " + minTime + " ms\n";

+        report += "Max time: " + maxTime + " ms\n";

+        report += "Jitter: " + jitterMax + " ms and " + jitterMin + " ms \n";

+

+        var max = -jitterMin;

+        if (jitterMax > max) {

+            max = jitterMax;

+        }

+

+        resultLabel.setAttribute("text", "");

+        resultLabel.addFormat("%.0d\n%s", max, "ms");

+

+        return report;

+        ]]>

+    </method>

+

+</class>

+

+</library>

diff --git a/WebContent/swf10/networkTesting/tests/NetworkTest.lzx b/WebContent/swf10/networkTesting/tests/NetworkTest.lzx
new file mode 100644
index 0000000..9fe5e8f
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/NetworkTest.lzx
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+

+      http://www.apache.org/licenses/LICENSE-2.0

+

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+

+-->

+<library>

+

+<class name="NetworkTest" extends="view">

+

+    <attribute name="testName" type="string" value="null" />

+    <attribute name="protocol" type="string" value="null" />

+    <attribute name="host" type="string" value="null" />

+    <attribute name="port" type="number" value="null" />

+    <attribute name="running" type="boolean" value="false" />

+    <attribute name="allTests" type="boolean" value="false" />

+    <attribute name="resultText" type="boolean" value="false" />

+

+    <method name="start" />

+    <method name="forcedStop" />

+

+    <method name="startAllTestsMode">

+        allTests = true;

+        this.setRunning();

+    </method>

+

+    <view name="picture">

+        <view name="rsc" resource="notrun" width="113" height="113" />

+    </view>

+    <text name="nameLabel"

+          text="${parent.testName}"

+          x="${(parent.picture.rsc.width - this.width)/2}"

+          y="$once{parent.picture.rsc.height}"

+    />

+    <text name="resultLabel"

+          visible="false"

+          fgcolor="white"

+          align="center"

+          fontsize="16"

+    />

+

+    <handler name="onclick">

+        if (running) {

+            this.setStopped();

+        } else {

+            allTests = false;

+            this.setRunning();

+        }

+    </handler>

+

+    <method name="handleAllTestsMode">

+        if (allTests) {

+            canvas.testsView.testAll();

+        }

+    </method>

+    

+    <method name="setPassed">

+        if (running) {

+            running=false;

+            if (resultText) {

+                picture.rsc.setAttribute("resource", "passed_result");

+                var x = (picture.rsc.width - resultLabel.width)/2;

+                var y = (picture.rsc.height - resultLabel.height)/2;

+                resultLabel.setAttribute("x", x);

+                resultLabel.setAttribute("y", y);

+                resultLabel.setAttribute("visible", true);

+            } else {

+                picture.rsc.setAttribute("resource", "passed");

+            }

+            canvas.setAttribute("busy", false);

+            this.handleAllTestsMode();

+        }

+    </method>

+

+    <method name="setFailed">

+        if (running) {

+            running=false;

+            picture.rsc.setAttribute("resource", "failed");

+            canvas.setAttribute("busy", false);

+            this.handleAllTestsMode();

+        }

+    </method>

+

+    <method name="setRunning">

+        if (canvas.busy) {

+            return;

+        }

+        canvas.setAttribute("busy", true);

+        this.start();

+        running=true;

+        resultLabel.setAttribute("visible", false);

+        picture.rsc.setAttribute("resource", "running");

+        picture.rsc.play();

+    </method>

+

+    <method name="setStopped">

+        this.forcedStop();

+        running=false;

+        picture.rsc.setAttribute("resource", "notrun");

+        canvas.setAttribute("busy", false);

+        this.handleAllTestsMode();

+    </method>

+

+    <method name="log" args="message">

+        var str = testName + ": " + message + "\n";

+        canvas.log += str;

+        if ($debug) Debug.write(str);

+    </method>

+

+    <method name="getBaseUrl">

+    	var hostUrl = protocol + "://" + host + ":" + port + canvas.uriContext;

+    	return hostUrl + (hostUrl.slice(-1) == '/' ? '' : '/');

+    </method>

+

+</class>

+

+</library>

diff --git a/WebContent/swf10/networkTesting/tests/PingTest.lzx b/WebContent/swf10/networkTesting/tests/PingTest.lzx
new file mode 100644
index 0000000..b086d3b
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/PingTest.lzx
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+

+      http://www.apache.org/licenses/LICENSE-2.0

+

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+

+-->

+<library>

+

+<class name="PingTest" extends="BaseURLLoadTest">

+

+    <handler name="oninit">

+        this.setAttribute("testsCount", 10);

+        this.setAttribute("testName", "Ping");

+        this.setAttribute("testTypeParameter", "ping");

+    </handler>

+

+    <method name="generateReport">

+        var averageTime = wholeTime / successfulTestsCount;

+        var packetsLost = testsCount - successfulTestsCount;

+        var report = "Average ping time: " + averageTime + " ms\n";

+        report += "Packets received: " + successfulTestsCount + "\n";

+        report += "Packets lost: " + packetsLost + "\n";

+

+        return report;

+    </method>

+

+</class>

+

+</library>

diff --git a/WebContent/swf10/networkTesting/tests/PortAvailabilityTest.lzx b/WebContent/swf10/networkTesting/tests/PortAvailabilityTest.lzx
new file mode 100644
index 0000000..cacf362
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/PortAvailabilityTest.lzx
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+

+      http://www.apache.org/licenses/LICENSE-2.0

+

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+

+-->

+<library>

+

+<class name="PortAvailabilityTest" extends="NetworkTest">

+

+    <switch>

+        <when property="$as3">

+            <passthrough>

+                import flash.events.*;

+                import flash.net.*;

+                import flash.system.*;

+            </passthrough>

+        </when>

+    </switch>

+

+    <rtmpConnection name="rtmp" autoconnect="false" debug="true" />

+

+    <handler name="oninit">

+        this.setAttribute("testName", "Port");

+    </handler>

+

+    <method name="start">

+        var hostUrl = protocol + "://" + host + ":" + port + canvas.rtmpUriPath;

+        rtmp.setAttribute("src", hostUrl);

+        this.log(": start test... " + hostUrl);

+

+        rtmp.connect();

+    </method>

+

+    <method name="forcedStop">

+        this.log("stopped");

+		disconnect();

+    </method>

+

+	<method name="disconnect">

+       rtmp._nc.close();

+       rtmp.setAttribute('status', 'disconnected');

+       rtmp.setAttribute('stage', 0);

+	</method>

+	

+    <handler name="onconnect" reference="rtmp">

+		if (running) {

+			this.log("port is available\n");

+			this.setPassed();

+			disconnect();

+        }

+    </handler>

+

+    <handler name="onerror" args="e" reference="rtmp">

+        if (running) {

+            this.log("connection error - " + e + "\n");

+            this.setFailed();

+        }

+    </handler>

+

+    <handler name="onstatus" args="e" reference="rtmp">

+        if (running) {

+        	switch(e) {

+        		case "timed out":

+        		case "connection failed":

+        			this.setFailed();

+        			break;

+        	}

+            if($debug) Debug.write(testName + ": RTMP connect status - ", e);

+        }

+    </handler>

+

+</class>

+

+</library>

diff --git a/WebContent/swf10/networkTesting/tests/UploadSpeedTest.lzx b/WebContent/swf10/networkTesting/tests/UploadSpeedTest.lzx
new file mode 100644
index 0000000..01e1402
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/UploadSpeedTest.lzx
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+

+      http://www.apache.org/licenses/LICENSE-2.0

+

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+

+-->

+<library>

+

+<class name="UploadSpeedTest" extends="NetworkTest">

+

+    <switch>

+        <when property="$as3">

+            <passthrough>

+                import flash.events.*;

+                import flash.net.*;

+                import flash.utils.*;

+            </passthrough>

+        </when>

+    </switch>

+

+    <attribute name="startTime" type="number" value="0" />

+

+    <attribute name="hostUrl" type="string" value="" />

+    <attribute name="loaderInited" type="boolean" value="false" />

+    <attribute name="request" value="null" />

+    <attribute name="loader" value="null" />

+

+    <handler name="oninit">

+        this.setAttribute("testName", "Upload speed");

+        this.setAttribute("resultText", true);

+    </handler>

+

+    <method name="initLoader">

+        hostUrl = getBaseUrl() + "networktest.upload";

+        request = new URLRequest(hostUrl);

+        request.method = URLRequestMethod.POST;

+        request.data = getDataString();

+

+        loader = new URLLoader();

+        loader.addEventListener(Event.COMPLETE, this.onComplete);

+        loader.addEventListener(IOErrorEvent.IO_ERROR, this.onError);

+        loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, this.onError);

+

+        loaderInited = true;

+    </method>

+

+    <method name="start">

+        if (!loaderInited) {

+            this.initLoader();

+        }

+

+        this.log("start test... " + hostUrl);

+        startTime = getTimer();

+        loader.load(request);

+    </method>

+

+    <method name="forcedStop">

+        loader.close();

+        this.log("stopped");

+    </method>

+

+    <method name="onComplete" args="e">

+        if (running) {

+            var endTime = getTimer();

+            var loadTime = endTime - startTime;

+            var loadTimeSec = loadTime/1000;

+            var mBytes = request.data.length/(1024*1024);

+            var speed = mBytes / loadTimeSec;

+

+            var report = "report:\n";

+            report += "Bytes uploaded: " + mBytes + " Mb\n";

+            report += "Upload time: " + loadTimeSec + " s\n";

+            report += "Upload speed: " + speed + " Mb/s\n";

+

+            resultLabel.setAttribute("text", "");

+            resultLabel.addFormat("%.2f\n%s", speed, "Mb/s");

+            this.log(report);

+            this.setPassed();

+        }

+    </method>

+

+    <method name="onError" args="e">

+        if (running) {

+            this.log("error - " + e);

+            this.setFailed();

+        }

+    </method>

+

+    <!-- returns a 1 Mb string-->

+    <method name="getDataString">

+        <![CDATA[

+        var result = "";

+        var str64 = "0000000000000000000000000000000000000000000000000000000000000000";

+        for (var i=0; i<16384; i++) {

+            result += str64;

+        }

+        return result;

+        ]]>

+    </method>

+

+</class>

+

+</library>

diff --git a/WebContent/swf10/networkTesting/tests/library.lzx b/WebContent/swf10/networkTesting/tests/library.lzx
new file mode 100644
index 0000000..9b8575d
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/library.lzx
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+    <resource name="failed" src="resources/failed.png" />

+    <resource name="notrun" src="resources/notrun.png" />

+    <resource name="passed" src="resources/passed.png" />

+    <resource name="passed_result" src="resources/passed_result.png" />

+    <resource name="running" src="resources/running.swf" />

+

+    <include href="BaseURLLoadTest.lzx" />

+    <include href="DownloadSpeedTest.lzx" />

+    <include href="JitterTest.lzx" />

+    <include href="NetworkTest.lzx" />

+    <include href="PingTest.lzx" />

+    <include href="PortAvailabilityTest.lzx" />

+    <include href="UploadSpeedTest.lzx" />

+

+</library>

diff --git a/WebContent/swf10/networkTesting/tests/resources/failed.png b/WebContent/swf10/networkTesting/tests/resources/failed.png
new file mode 100644
index 0000000..8654b24
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/resources/failed.png
Binary files differ
diff --git a/WebContent/swf10/networkTesting/tests/resources/notrun.png b/WebContent/swf10/networkTesting/tests/resources/notrun.png
new file mode 100644
index 0000000..cb869eb
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/resources/notrun.png
Binary files differ
diff --git a/WebContent/swf10/networkTesting/tests/resources/passed.png b/WebContent/swf10/networkTesting/tests/resources/passed.png
new file mode 100644
index 0000000..5929d15
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/resources/passed.png
Binary files differ
diff --git a/WebContent/swf10/networkTesting/tests/resources/passed_result.png b/WebContent/swf10/networkTesting/tests/resources/passed_result.png
new file mode 100644
index 0000000..d4d6f84
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/resources/passed_result.png
Binary files differ
diff --git a/WebContent/swf10/networkTesting/tests/resources/running.swf b/WebContent/swf10/networkTesting/tests/resources/running.swf
new file mode 100644
index 0000000..138d3e1
--- /dev/null
+++ b/WebContent/swf10/networkTesting/tests/resources/running.swf
Binary files differ
diff --git a/WebContent/swf10/networkTesting/testsView.lzx b/WebContent/swf10/networkTesting/testsView.lzx
new file mode 100644
index 0000000..8dbdb59
--- /dev/null
+++ b/WebContent/swf10/networkTesting/testsView.lzx
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+

+      http://www.apache.org/licenses/LICENSE-2.0

+

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+

+-->

+<library>

+

+<include href="../base/remote/rtmpConnection.lzx" />

+<include href="tests/" />

+<resource name="log" src="resources/edit-copy.png" />

+

+<class name="TestsView" extends="view">

+

+    <attribute name="offset" type="number" value="20" />

+    <attribute name="smallOffset" type="number" value="5" />

+

+    <text name="label"

+        text="Click a play button to run a test"

+        x="${parent.offset}"

+        y="${parent.offset}"

+    />

+    <view name="logButton"

+        x="${parent.width - this.rsc.width - parent.offset}"

+        y="${parent.label.y + (parent.label.height - this.rsc.height)/2}"

+    >

+        <image name="rsc" resource="log" height="16" width="16"/>

+        <handler name="onclick">

+            lz.Browser.setClipboard(canvas.log);

+        </handler>

+    </view>

+

+    <text name="logLabel"

+        text="Copy the log to the clipboard:"

+        x="${parent.logButton.x - this.width - parent.smallOffset}"

+        y="${parent.label.y}"

+    />

+

+    <PingTest

+        name="pingTest" protocol="${canvas.httpProtocol}" host="${canvas.httpHost}" port="${canvas.httpPort}"

+        x="${parent.offset}"

+        y="${parent.label.y + parent.label.height + parent.offset/2}"

+    />

+    <PortAvailabilityTest

+        name="portTest" protocol="${canvas.rtmpProtocol}" host="${canvas.rtmpHost}" port="${canvas.rtmpPort}"

+        x="${parent.pingTest.x + parent.pingTest.width + parent.offset}"

+        y="${parent.pingTest.y}"

+     />

+    <JitterTest

+        name="jitterTest" protocol="${canvas.httpProtocol}" host="${canvas.httpHost}" port="${canvas.httpPort}"

+        x="${parent.portTest.x + parent.portTest.width + parent.offset}"

+        y="${parent.pingTest.y}"

+    />

+    <DownloadSpeedTest

+        name="downloadTest" protocol="${canvas.httpProtocol}" host="${canvas.httpHost}" port="${canvas.httpPort}"

+        x="${parent.jitterTest.x + parent.jitterTest.width + parent.offset}"

+        y="${parent.pingTest.y}"

+    />

+

+    <UploadSpeedTest

+        name="uploadTest" protocol="${canvas.httpProtocol}" host="${canvas.httpHost}" port="${canvas.httpPort}"

+        x="${parent.downloadTest.x + parent.downloadTest.width + parent.offset}"

+        y="${parent.pingTest.y}"

+    />

+

+    <attribute name="currentTestNumber" type="number" value="0" />

+    <method name="testAll">

+        var nextTest;

+        if (0 == currentTestNumber) {

+            nextTest = pingTest;

+        } else if (1 == currentTestNumber) {

+            nextTest = portTest;

+        } else if (2 == currentTestNumber) {

+            nextTest = jitterTest;

+        } else if (3 == currentTestNumber) {

+            nextTest = downloadTest;

+        } else if (4 == currentTestNumber) {

+            nextTest = uploadTest;

+        } else if (5 == currentTestNumber) {

+            nextTest = null;

+        }

+

+        if (null != nextTest) {

+            currentTestNumber++;

+            nextTest.startAllTestsMode();

+        }

+    </method>

+

+</class>

+

+</library>

diff --git a/WebContent/swf10/screensharing/library.lzx b/WebContent/swf10/screensharing/library.lzx
new file mode 100644
index 0000000..0182183
--- /dev/null
+++ b/WebContent/swf10/screensharing/library.lzx
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+    <!-- FamFam Icon Set -->
+	<resource name="menupointer_rsc" src="resources/cursor.png" />
+	
+	<include href="screenSharingDialog.lzx" />
+    <include href="videoObjectPlayScreenShare.lzx" />
+
+</library>
diff --git a/WebContent/swf10/screensharing/resources/cursor.png b/WebContent/swf10/screensharing/resources/cursor.png
new file mode 100644
index 0000000..532f532
--- /dev/null
+++ b/WebContent/swf10/screensharing/resources/cursor.png
Binary files differ
diff --git a/WebContent/swf10/screensharing/screenSharingDialog.lzx b/WebContent/swf10/screensharing/screenSharingDialog.lzx
new file mode 100644
index 0000000..4d83dcf
--- /dev/null
+++ b/WebContent/swf10/screensharing/screenSharingDialog.lzx
@@ -0,0 +1,1133 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+    
+<class name="screenSharingDialogContainer" extends="view" 
+       width="${parent.width }" height="${ parent.height }">
+	
+	<method name="closeAll">
+		<![CDATA[
+		    if ($debug) Debug.write("screenSharingDialogContainer closeAll");
+            for (var eg in this.subviews) {
+                this.subviews[eg].doClose();
+            }
+            //do first close the video connection before removing the client view
+            this.clearAllSessions();
+        ]]>
+	</method>
+    
+    <method name="clearAllSessions">
+        <![CDATA[
+            if ($debug) Debug.write("screenSharingDialogContainer clearAllSessions");
+            for (var eg in this.subviews) {
+                this.subviews[eg].destroy();
+            }
+        ]]>
+    </method>
+    
+    <method name="searchForSession" args="streamPublishName">
+        <![CDATA[
+        
+            for (var i=0;i<this.subviews.length;i++) {
+                if (this.subviews[i].initObject.streamPublishName == streamPublishName) {
+                    return this.subviews[i];
+                }
+            }
+            
+            if ($debug) Debug.write("No Screen Session "+streamPublishName);
+            return null;
+        ]]>
+    </method>
+    
+    <method name="hideChatContent" args="hide">
+        <![CDATA[
+            if ($debug) Debug.write("hideChatContent::isStarted ", this.subviews[0].isStarted);
+	        if (this.subviews[0] != null &&  this.subviews[0].isStarted) {
+	        	canvas.chatHeight = hide ? 22 : 200;
+	            if ($debug) Debug.write("hideChatContent::chatHeight ", canvas.chatHeight);
+	            this.subviews[0].startViewerSession();
+	        }
+        ]]>
+    </method>
+    
+</class>    
+
+<class name="screenSharingDialog" extends="labelExplorerBox" labelid="855"
+    docking="true" resizeable="true" closable="true" 
+    width="270" x="$once{ canvas.width - this.width - 20 }" height="100">
+    
+    <attribute name="isStarted" value="false" type="boolean" />
+    
+    <attribute name="currentCursorObject" value="null" />
+    
+    <attribute name="initObject" value="null"/>
+    
+    <handler name="oninit">
+    	var fName = " " + this.initObject.firstname 
+                  + " " + this.initObject.lastname;
+        var tString = canvas.getLabelName(849)
+                        + " " + fName
+                        + " " + canvas.getLabelName(850);
+        
+		this.setAttribute('title', canvas.getLabelName(855) + " " + fName);
+        if (parent.subviews.length > 1) {
+            this.setAttribute("y",((parent.subviews.length-1)*100)+40);
+        } else {
+            this.setAttribute("y",40);
+        }
+        
+        this._initText._infoText.setAttribute("text",tString);
+    </handler>
+    
+    <method name="startViewerSession">
+        <![CDATA[
+        
+            this.isStarted = true;
+            
+            this._subcontent.setAttribute("visibility","visible");
+            
+            this._initText.setAttribute("visibility","hidden");
+        
+            this._showScreenSharing._y.setAttribute("to",0);
+            this._showScreenSharing._height.setAttribute("to",canvas.height - canvas.chatHeight);
+            this._showScreenSharing._width.setAttribute("to",canvas.width-260);
+            this._showScreenSharing._x.setAttribute("to",260);
+        
+            this._showScreenSharing.setAttribute('started', true);
+            
+            if ($debug) Debug.write("this.initObject ",this.initObject);
+            
+            this._subcontent._content._video.setAttribute("width",this.initObject.VWidth);
+            this._subcontent._content._video.setAttribute("height",this.initObject.VHeight);
+            
+            this._subcontent._content._video._videostream.playStream(this.initObject.streamPublishName,-1);
+            
+        ]]>
+    </method>
+    
+    <method name="doMinimize">
+        <![CDATA[
+           
+           this.isStarted = false;
+           
+           this._subcontent._content._video._videostream.stop();
+           
+           this._showScreenSharing._y.setAttribute("to",((parent.subviews.length-1)*100)+40);
+           this._showScreenSharing._x.setAttribute("to",canvas.width - 270 - 20);
+           this._showScreenSharing._height.setAttribute("to",100);
+           this._showScreenSharing._width.setAttribute("to",270);
+           
+           this._showScreenSharing.setAttribute('started', true);
+           
+           this._infoBox.setAttribute("visibility","hidden");
+           this._zoombar.setAttribute("visibility","hidden");
+           this._pause.setAttribute("visibility","hidden");
+           this._close.setAttribute("visibility","hidden");
+           
+           this._subcontent.setAttribute("visibility","hidden");
+           
+        ]]>
+    </method>
+    
+    <method name="doClose">
+        if (this.isStarted) {
+            this._subcontent._content._video._videostream.stop();
+        }
+        this.close();
+    </method>
+    
+    <method name="updateCursor" args="x,y">
+        if (this.currentCursorObject == null) {
+            this.currentCursorObject = new lz.screenShareCursorObject(this._subcontent._content,{
+                        refObj:this._subcontent._content._video._videostream
+                    });
+        }
+        this.currentCursorObject.setAttribute("x",x * (this._zoombar._zoom.initialNumber/100));
+        this.currentCursorObject.setAttribute("y",y * (this._zoombar._zoom.initialNumber/100));
+    </method>        
+    
+    <view name="_initText">
+        
+        <!--
+        <view x="4" resource="warning_icon_rsc" y="24" />
+         -->
+         
+        <labelText name="_infoText" labelid="724" width="230" 
+                   x="10" y="26" multiline="true" />
+    
+        <simpleLabelButton name="_startButton" labelid="848" x="10" width="124" y="78">
+            <handler name="onclick">
+                parent.parent.startViewerSession();
+            </handler>
+        </simpleLabelButton> 
+          
+        <simpleLabelButton name="_closeButton" labelid="851" x="138" width="124" y="78">
+            <handler name="onclick">
+                parent.parent.close();
+            </handler>
+        </simpleLabelButton>   
+        
+    </view>
+    
+    <view name="_subcontent" width="${ parent.width }" visibility="hidden"
+          y="20" height="${ parent.height - 48 }" clip="true">
+    	
+        <view name="_content">
+            
+            <videoObjectPlayScreenShare name="_video">
+            	
+            	<contextmenu>
+			
+					<contextmenuitem caption="$once{ canvas.getLabelName(1087) }" 
+									 onselect="parent.parent.parent.pasteContent()" />
+		        
+		        </contextmenu>
+		                
+                <attribute name="doSendEvents" type="boolean" value="true" />
+                
+                <attribute name="idleDelegate" value="null" type="expression" />
+                
+                <attribute name="isMouseOverActive" value="false" type="boolean"/>
+                
+                <attribute name="lastMouseX" value="-1" type="number"/>
+                <attribute name="lastMouseY" value="-1" type="number"/>
+                
+                <attribute name="isMac" value="false" type="boolean"/>
+                <attribute name="isWindows" value="false" type="boolean"/>
+                <attribute name="isLinux" value="false" type="boolean"/>
+                
+                <handler name="oninit">
+                	
+                	var osInfo = lz.Browser.getOS();
+                	
+                	if ($debug) Debug.write("osInfo :: ",osInfo);
+                	
+                	if (osInfo.indexOf("Mac") >= 0) {
+                		this.isMac = true;
+                	} else if (osInfo.indexOf("Win") >= 0) {
+                        this.isWindows = true;
+                    } else if (osInfo.indexOf("Linux") >= 0) {
+                        this.isLinux = true;
+                    }
+                    
+                    if ($debug) Debug.write("this.isMac :: ",this.isMac);
+                    if ($debug) Debug.write("this.isWindows :: ",this.isWindows);
+                	
+                    this.idleDelegate = new LzDelegate( this, "sendMousePosition" );
+                </handler>
+                
+                <method name="pasteContent">
+                	if ($debug) Debug.write("pasteContent :: ");
+                </method>
+                
+                <handler name="onkeydown" reference="lz.Keys" args="k">
+                	<![CDATA[
+	                    if (this.isMouseOverActive) {
+	                        if ($debug) Debug.write("onkeydown ",k);
+	                        
+	                        var tObject = new Object();
+	                        tObject["action"] = "onkeydown";
+	                        tObject["k"] = k;
+	                        
+	                        var downkeys = lz.Keys.downKeysArray;
+	                        
+	                        if ($debug) Debug.write("downkeys ",downkeys,downkeys.length);
+				
+	                        if (this.isWindows) {
+	                        
+    							if (downkeys.length==2 && downkeys[0]==16) {
+    								if (k == 187) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "*";
+    		                        } else if (k == 191) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "'";
+    		                        } else if (k == 189) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "_";
+    		                        } else if (k == 221) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "`";
+    		                        } else if (k == 219) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "?";
+    		                        } else if (k == 226) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = ">";
+    		                        } else if (k == 220) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "°";
+    		                        } else if (k == 186) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "Ü";
+    		                        } else if (k == 222) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "Ä";
+    		                        } else if (k == 192) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "Ö";
+    		                        }
+    		                        
+    		                        
+    							} else if (downkeys.length==2 && downkeys[0]==18) {
+    								
+    								if (k == 81) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "@";
+    								} else if (k == 226) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "|";
+    								}
+    								
+    							} else {
+    								
+    		                        if (k == 187) {
+    		                        	tObject["k"] = -1;
+    		                        	tObject["c"] = "+";
+    		                        } else if (k == 191) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "#";
+    		                        } else if (k == 189) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "-";
+    		                        } else if (k == 221) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "`";
+    		                        } else if (k == 219) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "ß";
+    		                        } else if (k == 226) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "<";
+    		                        } else if (k == 220) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "^";
+    		                        } else if (k == 186) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "ü";
+    		                        } else if (k == 222) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "ä";
+    		                        } else if (k == 192) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "ö";
+    		                        }
+    		                        
+    							}
+							
+	                        } else if (this.isMac) {
+	                        	
+	                        	if (downkeys.length==2 && downkeys[0]==16) {
+                                    if (k == 221) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "*";
+                                    } else if (k == 220) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "'";
+                                    } else if (k == 191) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "_";
+                                    } else if (k == 225) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "`";
+                                    } else if (k == 189) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "?";
+                                    } else if (k == 192) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = ">";
+                                    } else if (k == 176) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "°";
+                                    } else if (k == 219) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ü";
+                                    } else if (k == 222) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ä";
+                                    } else if (k == 186) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ö";
+                                    }
+                                    
+                                    
+                                } else if (downkeys.length==2 && downkeys[0]==18) {
+                                    
+                                    if (k == 50) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "@";
+                                    } else if (k == 55) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "|";
+                                    }
+                                    
+                                } else {
+                                    
+                                    if (k == 221) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "+";
+                                    } else if (k == 220) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "#";
+                                    } else if (k == 191) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "-";
+                                    } else if (k == 225) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "`";
+                                    } else if (k == 189) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ß";
+                                    } else if (k == 192) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "<";
+                                    } else if (k == 176) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "^";
+                                    } else if (k == 219) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ü";
+                                    } else if (k == 222) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ä";
+                                    } else if (k == 186) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ö";
+                                    }
+                                    
+                                }
+	                        	
+	                        } else if (this.isLinux) {
+	                        	
+	                        	if (downkeys.length==2 && downkeys[0]==16) {
+                                    if (k == 187) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "*";
+                                    } else if (k == 51) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "'";
+                                    } else if (k == 189) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "_";
+                                    } else if (k == 222) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "`";
+                                    } else if (k == 223) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "?";
+                                    } else if (k == 188) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = ">";
+                                    } else if (k == 176) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "°";
+                                    } else if (k == 252) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ü";
+                                    } else if (k == 228) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ä";
+                                    } else if (k == 246) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ö";
+                                    }
+                                    
+                                    
+                                } else if (downkeys.length==2 && downkeys[0]==18) {
+                                    
+                                    if (k == 50) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "@";
+                                    } else if (k == 55) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "|";
+                                    }
+                                    
+                                } else {
+                                    
+                                    if (k == 187) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "+";
+                                    } else if (k == 51) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "#";
+                                    } else if (k == 189) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "-";
+                                    } else if (k == 222) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "`";
+                                    } else if (k == 223) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ß";
+                                    } else if (k == 188) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "<";
+                                    } else if (k == 176) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "^";
+                                    } else if (k == 246) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ü";
+                                    } else if (k == 228) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ä";
+                                    } else if (k == 246) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ö";
+                                    }
+                                    
+                                }
+	                        	
+	                        }
+							
+							if (lz.Keys.downKeysArray.length > 1) {
+								for (var i=0;i<lz.Keys.downKeysArray.length;i++) {
+									if (lz.Keys.downKeysArray[i] == 17 || lz.Keys.downKeysArray[i] == '17') {
+										lz.Keys.downKeysArray = new Array();
+										break;
+									}
+								}
+							}
+							
+	                        
+							
+							if (k == 18 || k == 17) {
+								return;
+							}
+	                        
+	                        this.sendRemoteCursorEvent.tObject = tObject;
+	                        if (canvas.isAllowedToRemoteControl || canvas.ismoderator) {
+	                            this.sendRemoteCursorEvent.doCall();
+	                        }
+	                        
+	                    }
+                    ]]>
+                </handler>
+                
+                <handler name="onkeyup" reference="lz.Keys" args="k">
+                	<![CDATA[
+                        if (this.isMouseOverActive) {
+                            if ($debug) Debug.write("onkeyup ",k);
+                            
+                            var tObject = new Object();
+                            tObject["action"] = "onkeyup";
+                            tObject["k"] = k;
+                            
+                            var downkeys = lz.Keys.downKeysArray;
+    				        
+                            if (this.isWindows) {
+                            	
+    					        if (downkeys.length==2 && downkeys[0]==16) {
+    								if (k == 187) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "*";
+    		                        } else if (k == 191) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "'";
+    		                        } else if (k == 189) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "_";
+    		                        } else if (k == 221) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "`";
+    		                        } else if (k == 219) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "?";
+    		                        } else if (k == 226) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = ">";
+    		                        } else if (k == 220) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "°";
+    		                        } else if (k == 186) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "ü";
+    		                        } else if (k == 222) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "ä";
+    		                        } else if (k == 192) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "ö";
+    		                        }
+    		                        
+    		                        
+    							} else if (downkeys.length==2 && downkeys[0]==18) {
+    								
+    								if (k == 81) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "@";
+    								} else if (k == 226) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "|";
+    								}
+    								
+    							} else {
+    								
+    		                        if (k == 187) {
+    		                        	tObject["k"] = -1;
+    		                        	tObject["c"] = "+";
+    		                        } else if (k == 191) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "#";
+    		                        } else if (k == 189) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "-";
+    		                        } else if (k == 221) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "`";
+    		                        } else if (k == 219) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "ß";
+    		                        } else if (k == 226) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "<";
+    		                        } else if (k == 220) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "^";
+    		                        } else if (k == 186) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "Ü";
+    		                        } else if (k == 222) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "Ä";
+    		                        } else if (k == 192) {
+    									tObject["k"] = -1;
+    		                        	tObject["c"] = "Ö";
+    		                        }
+    		                        
+    							}
+    						
+                            } else if (this.isMac) {
+                        	
+                                if (downkeys.length==2 && downkeys[0]==16) {
+                                    if (k == 221) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "*";
+                                    } else if (k == 220) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "'";
+                                    } else if (k == 191) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "_";
+                                    } else if (k == 225) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "`";
+                                    } else if (k == 189) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "?";
+                                    } else if (k == 192) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = ">";
+                                    } else if (k == 176) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "°";
+                                    } else if (k == 219) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ü";
+                                    } else if (k == 222) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ä";
+                                    } else if (k == 186) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ö";
+                                    }
+                                    
+                                    
+                                } else if (downkeys.length==2 && downkeys[0]==18) {
+                                    
+                                    if (k == 50) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "@";
+                                    } else if (k == 55) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "|";
+                                    }
+                                    
+                                } else {
+                                    
+                                    if (k == 221) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "+";
+                                    } else if (k == 220) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "#";
+                                    } else if (k == 191) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "-";
+                                    } else if (k == 225) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "`";
+                                    } else if (k == 189) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ß";
+                                    } else if (k == 192) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "<";
+                                    } else if (k == 176) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "^";
+                                    } else if (k == 219) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ü";
+                                    } else if (k == 222) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ä";
+                                    } else if (k == 186) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ö";
+                                    }
+                                    
+                                }
+                                
+                            } else if (this.isLinux) {
+	                        	
+	                        	if (downkeys.length==2 && downkeys[0]==16) {
+                                    if (k == 187) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "*";
+                                    } else if (k == 51) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "'";
+                                    } else if (k == 189) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "_";
+                                    } else if (k == 222) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "`";
+                                    } else if (k == 223) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "?";
+                                    } else if (k == 188) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = ">";
+                                    } else if (k == 176) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "°";
+                                    } else if (k == 252) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ü";
+                                    } else if (k == 228) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ä";
+                                    } else if (k == 246) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "Ö";
+                                    }
+                                    
+                                    
+                                } else if (downkeys.length==2 && downkeys[0]==18) {
+                                    
+                                    if (k == 50) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "@";
+                                    } else if (k == 55) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "|";
+                                    }
+                                    
+                                } else {
+                                    
+                                    if (k == 187) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "+";
+                                    } else if (k == 51) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "#";
+                                    } else if (k == 189) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "-";
+                                    } else if (k == 222) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "`";
+                                    } else if (k == 223) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ß";
+                                    } else if (k == 188) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "<";
+                                    } else if (k == 176) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "^";
+                                    } else if (k == 246) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ü";
+                                    } else if (k == 228) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ä";
+                                    } else if (k == 246) {
+                                        tObject["k"] = -1;
+                                        tObject["c"] = "ö";
+                                    }
+                                    
+                                }
+	                        	
+	                        }
+    							
+    						if (k == 18 || k == 17) {
+    							return;
+    						}
+    						
+    						if (lz.Keys.downKeysArray.length > 1) {
+    							for (var i=0;i<lz.Keys.downKeysArray.length;i++) {
+    								if (lz.Keys.downKeysArray[i] == 17 || lz.Keys.downKeysArray[i] == '17') {
+    									lz.Keys.downKeysArray = new Array();
+    									break;
+    								}
+    							}
+    						}
+                        
+    						if ($debug) Debug.write("tObject :: ",tObject,this.isWindows,this.isMac);
+    						
+                            this.sendRemoteCursorEvent.tObject = tObject;
+                            if (canvas.isAllowedToRemoteControl || canvas.ismoderator) {
+                                this.sendRemoteCursorEvent.doCall();
+                            }
+                        }
+                    ]]>
+                </handler>
+                
+                <handler name="onmouseover">
+                    //if ($debug) Debug.write("onmouseout ");
+                    this.isMouseOverActive = true;
+                    lz.Timer.addTimer( this.idleDelegate, 500 );
+                </handler>
+                
+                <handler name="onmouseout">
+                    //if ($debug) Debug.write("onmouseout ");
+                    this.isMouseOverActive = false;
+                    lz.Timer.removeTimer( this.idleDelegate);
+                </handler>
+                
+                <method name="sendMousePosition" args="refObj">
+                    <![CDATA[
+                        var x = this.getMouse("x");
+                        var y = this.getMouse("y");
+                        x /= (parent.parent.parent._zoombar._zoom.initialNumber/100);
+                        y /= (parent.parent.parent._zoombar._zoom.initialNumber/100);
+                        
+                        var tObject = new Object();
+                        tObject["action"] = "mousePos";
+                        
+                        tObject["x"] = Math.round(x);
+                        tObject["y"] = Math.round(y);
+                        
+                        this.sendRemoteCursorEvent.tObject = tObject;
+                        if (canvas.isAllowedToRemoteControl || canvas.ismoderator) {
+                            
+                            //if ($debug) Debug.write("sendMousePosition ",x,y);
+                            
+                            if (tObject["x"] != this.lastMouseX && tObject["y"] != this.lastMouseY) {
+                                
+                                this.lastMouseX = tObject["x"];
+                                this.lastMouseY = tObject["y"];
+                            
+                                this.sendRemoteCursorEvent.doCall();
+                            }
+                            
+                        }
+                        
+                        if (this.isMouseOverActive) {
+                            lz.Timer.addTimer( this.idleDelegate, 500 );
+                        }
+                    ]]>
+                </method>
+                
+                <handler name="onmousedown" args="refObj">
+                    <![CDATA[
+                        var x = this.getMouse("x");
+                        var y = this.getMouse("y");
+                        if ($debug) Debug.write("1 x,y :: ",x,y);
+                        x /= (parent.parent.parent._zoombar._zoom.initialNumber/100);
+                        y /= (parent.parent.parent._zoombar._zoom.initialNumber/100);
+                        if ($debug) Debug.write("2 x,y :: ",x,y);
+                        
+                        var tObject = new Object();
+                        tObject["action"] = "onmousedown";
+                        tObject["x"] = Math.round(x);
+                        tObject["y"] = Math.round(y);
+                        
+                        this.sendRemoteCursorEvent.tObject = tObject;
+                        if (canvas.isAllowedToRemoteControl || canvas.ismoderator) {
+                            this.sendRemoteCursorEvent.doCall();
+                        }
+                    ]]>
+                </handler>
+                
+                <handler name="onmouseup" args="refObj">
+                    <![CDATA[
+                        var x = this.getMouse("x");
+                        var y = this.getMouse("y");
+                        if ($debug) Debug.write("1 x,y :: ",x,y);
+                        x /= (parent.parent.parent._zoombar._zoom.initialNumber/100);
+                        y /= (parent.parent.parent._zoombar._zoom.initialNumber/100);
+                        if ($debug) Debug.write("2 x,y :: ",x,y);
+                        
+                        var tObject = new Object();
+                        tObject["action"] = "onmouseup";
+                        tObject["x"] = Math.round(x);
+                        tObject["y"] = Math.round(y);
+                        
+                        this.sendRemoteCursorEvent.tObject = tObject;
+                        if (canvas.isAllowedToRemoteControl || canvas.ismoderator) {
+                            this.sendRemoteCursorEvent.doCall();
+                        }
+                    ]]>
+                </handler>
+                
+                <!--
+                public synchronized Boolean sendRemoteCursorEvent(String streamid, Map messageObj)
+                 -->
+                <netRemoteCallHib name="sendRemoteCursorEvent"  showLoading="false"
+                                  remotecontext="$once{ canvas.thishib }" funcname="sendRemoteCursorEvent"  >
+                        <attribute name="tObject" value="null" />
+                        <netparam><method name="getValue">return parent.parent.parent.parent.parent.initObject.streamid;</method></netparam>
+                        <netparam><method name="getValue">return parent.tObject;</method></netparam>
+                        <handler name="ondata" args="value">
+                        //The onResult-Handler will be called be the rtmpconnection
+                        //if( $debug ) Debug.write("+++++++++++++++++ stopRecordingShow: ",value);    
+                        //parent.close();
+                    </handler>  
+                </netRemoteCallHib> 
+                 
+            </videoObjectPlayScreenShare>
+            
+        </view>
+        
+        <om_vscrollbar />
+        <om_hscrollbar />
+        
+    </view>    
+    
+    <view name="_infoBox" x="0" visibility="hidden" >
+    	
+    	<view name="innerBox" height="${ parent.parent.height }" 
+    		  visible="${ ((canvas.ismoderator) ? true : ((canvas.isAllowedToRemoteControl) ? true : false )) }">
+    		
+            <labelExplorerBox name="_infoBox" labelid="1088" 
+                  docking="true" resizeable="false" closable="true" valign="middle"
+                    x="0" height="400" width="170">
+                <switch>
+                    <when property="$as3">
+                        <passthrough>
+                            import flash.net.SharedObject;
+                        </passthrough>
+                    </when>
+                </switch>
+                <handler name="oninit">
+                	<![CDATA[
+                	this.bringToFront();
+                    var t:SharedObject = SharedObject.getLocal('userdata');
+                    var g = t.data;
+                    if (g["image"]!=null) {
+                    	if ($debug) Debug.write("g[image][donotaskagainrdc] ",g["image"]["donotaskagainrdc"]);
+                        if ($debug) Debug.write("g[image] ",g["image"]);
+                        if (g["image"]["donotaskagainrdc"] != null && g["image"]["donotaskagainrdc"] == true) {
+                        	if ($debug) Debug.write("DO CLOSE IT")
+                            this.close();
+                        }
+                    }
+                    ]]>
+                </handler>
+            
+                <view x="4" resource="warning_icon_rsc" y="26" />
+            
+                <view y="22" width="$once{ parent.width - 35 }" height="130" x="30" >
+                    <labelText fontsize="10" fontstyle="bold" labelid="1086"
+                        multiline="true" width="$once{ parent.width - 16 }" selectable="true" />
+                </view>
+                
+                <view y="76" width="$once{ parent.width - 7 }" height="130" x="4" >
+                    <labelText fontsize="10" labelid="1085"
+                        multiline="true" width="$once{ parent.width - 16 }" selectable="true" />
+                </view>
+                
+                <labelCheckbox x="4" y="$once{ parent.height-42 }" fontsize="11"
+                                    name="_doNotShowAgain" labelid="1123" >
+                	<attribute name="checkboxIsinited" value="false" type="boolean"/>
+                	<switch>
+                        <when property="$as3">
+                            <passthrough>
+                                import flash.net.SharedObject;
+                            </passthrough>
+                        </when>
+                    </switch>
+                    <handler name="oninit">
+                    	<![CDATA[
+                    	    var t:SharedObject = SharedObject.getLocal('userdata');
+                            var g = t.data;
+                            if (g["image"]!=null) {
+                            	if ($debug) Debug.write("g[image]",g["image"]);
+                                if (g["image"]["donotaskagainrdc"] != null && g["image"]["donotaskagainrdc"] == true) {
+                                    if ($debug) Debug.write("donotaskagainrdc ",g["image"]["donotaskagainrdc"]);
+                                    this.setValue(true);
+                                }
+                            }
+                            this.checkboxIsinited = true;
+                        ]]>
+                    </handler>
+                    <handler name="onvalue" args="v">
+                    	if (!this.checkboxIsinited) {
+                    		return;
+                    	}
+                        if ($debug) Debug.write("onselect ",v);
+                        var t:SharedObject = SharedObject.getLocal('userdata');
+                        var g = t.data;
+                        if (g["image"]==null) g["image"]=new Array();
+                        g["image"]["donotaskagainrdc"]=v;
+                        
+                        if ($debug) Debug.write("g[image][donotaskagainrdc] ",g["image"]["donotaskagainrdc"]);
+                        if ($debug) Debug.write("g[image] ",g["image"]);
+                        
+                        t.flush();
+                    </handler>
+                </labelCheckbox>    
+                
+                <simpleLabelButton labelid="642" width="100" x="$once{ parent.width-105 }" 
+                       y="$once{ parent.height-24 }" onclick="this.parent.close();" />
+                       
+            </labelExplorerBox>  
+            
+        </view>
+        
+    </view>  
+
+    <view name="_zoombar" x="20" visibility="hidden" y="${ parent.height-26 }">
+        
+        <method name="setDefaultZoom">
+            if (parent.initObject.VWidth > (parent._subcontent.width-16) ) {
+                var newZoom = Math.round(( (parent._subcontent.width-16) /parent.initObject.VWidth)*100);
+                
+                if ($debug) Debug.write("newZoom ",newZoom);
+                
+                this._zoom.setSliderValue(newZoom);
+                
+                this._zoom.oninitialNumber.sendEvent(newZoom);
+            }
+            
+            this.setDefaultHeight();
+        </method>
+        
+        <method name="setDefaultHeight">
+            if (parent.initObject.VHeight > (parent._subcontent.height-16)) {
+                var newZoom = Math.round(( (parent._subcontent.height-16) /parent.initObject.VHeight)*100);
+                
+                if ($debug) Debug.write("newZoom ",newZoom);
+                
+                this._zoom.setSliderValue(newZoom);
+                
+                this._zoom.oninitialNumber.sendEvent(newZoom);
+            }
+        </method>
+        
+        <simplelayout axis="x" spacing="2" />
+        
+        <labelText labelid="852" resize="true" y="4" />
+        
+        <changeWidthSlider name="_zoom" initialNumberInit="100" x="10"
+              boxPosition="up" initialNumber="100" maximum="200">
+            <handler name="oninitialNumber" args="i">
+                if (parent.parent.isStarted) {
+                    
+                    var newWidth = parent.parent.initObject.VWidth * (i/100);
+                    var newHeight = parent.parent.initObject.VHeight * (i/100);
+                    
+                    parent.parent._subcontent._content._video.setAttribute("width",newWidth);
+                    parent.parent._subcontent._content._video.setAttribute("height",newHeight);
+                    
+                }
+            </handler>
+        </changeWidthSlider>
+        
+        <labelText x="64" y="4" labelid="253" />   
+        
+        <labelText x="84" y="4" labelid="1096" />  
+        
+        <!--
+        <resetCombobox name="languages" width="60" y="6" x="200" >
+        	<handler name="oninit">
+        		<![CDATA[
+            		//getBrowserLang
+            		
+        		    var thisItem = this;
+        		
+            		function callback(returnValue) {
+                            
+                        if ($debug) Debug.write(" callback ",returnValue);
+                        
+                        if (returnValue.indexOf("de") >= 0) {
+                        	thisItem.selectItemAt(1);
+                        } else if (returnValue.indexOf("de") >= 0) {
+                        	thisItem.selectItemAt(0);
+                        } else {
+                        	thisItem.selectItemAt(0);
+                        	//Show Error Box that we currently have no 
+                        	//Keyboard Scheme available for that country
+                        }
+                        
+                    }
+                    
+                    lz.Browser. callJS("getBrowserLang",callback);
+            		
+            		
+            		//var t = lz.Browser;
+            		//if ($debug) Debug.write("lz.Browser :: ",t);
+            		
+            		//this.selectItemAt(0);
+        		]]>
+        	</handler>
+        	<labeldTextListItem labelid="1094" value="en_US" />
+            <labeldTextListItem labelid="1095" value="de_DE" />
+        </resetCombobox> 
+         -->
+    </view>
+    
+    <simpleLabelButton name="_pause" visibility="hidden"
+        labelid="854" width="100" x="${ parent.width-204 }" 
+        y="${ parent.height-22 }" onclick="this.parent.doMinimize();" />
+    
+    <simpleLabelButton name="_close" visibility="hidden"
+        labelid="851" width="100" x="${ parent.width-102 }" 
+        y="${ parent.height-22 }" onclick="this.parent.doClose();" />
+        
+    <animatorgroup name="_showScreenSharing" started="false" 
+                   process="simultaneous" duration="1000" >
+        <handler name="onstop">
+            if ($debug) Debug.write("onstop this._y.to ",this._y.to);
+            if (!parent.isStarted) {
+                parent._initText.setAttribute("visibility","visible");
+            } else {
+            	parent._infoBox.setAttribute("visibility","visible");
+                parent._zoombar.setAttribute("visibility","visible");
+                parent._zoombar.setDefaultZoom();
+                parent._close.setAttribute("visibility","visible");
+                parent._pause.setAttribute("visibility","visible");
+            }
+        </handler>
+        <animator name="_y" attribute="y" to="0" />
+        <animator name="_x" attribute="x" to="0" />
+        <animator name="_height" attribute="height" />
+        <animator name="_width" attribute="width" />
+    </animatorgroup>        
+
+</class>
+
+</library>
diff --git a/WebContent/swf10/screensharing/videoObjectPlayScreenShare.lzx b/WebContent/swf10/screensharing/videoObjectPlayScreenShare.lzx
new file mode 100644
index 0000000..fdddbc6
--- /dev/null
+++ b/WebContent/swf10/screensharing/videoObjectPlayScreenShare.lzx
@@ -0,0 +1,238 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<library>
+
+
+<!---
+	Contains no microphone or camera Object, this view can only 
+	subscribe to a video or live-stream
+
+ -->
+	
+<class name="tempTextBox" extends="view" width="120" height="40" bgcolor="0x000000">
+	
+	<attribute name="isStopped" value="false" type="boolean"/>
+	
+	<handler name="oninit">
+		parent.sendCursorVisible(false);
+        lz.Timer.addTimer( new LzDelegate( this, "removeThis" ), 3000 );
+    </handler>
+    
+    <method name="removeThis" args="refObj">
+        this._out.setAttribute('started', true);
+    </method>
+    
+    <animator name="_out" attribute="opacity" to="0" 
+    		  duration="750" started="false">
+    	<handler name="onstop">
+    		if (parent.isStopped) {
+    			return;
+    		}
+    		parent.isStopped = true;
+    		parent._bg._in.stop();
+    		parent._bg._out.stop();
+    		parent.destroy();
+    		parent.parent.sendCursorVisible(true);
+    	</handler>
+    </animator>
+    
+	<view name="_bg" bgcolor="0x7fff00" width="$once{ parent.width }"
+		  height="$once{ parent.height }">
+		<handler name="oninit">
+			this._in.setAttribute('started', true);
+		</handler>
+		
+		<animator name="_out" attribute="opacity" to="0.3" 
+              duration="250" started="false">
+            <handler name="onstop">
+            	if (parent.parent.isStopped) {
+                    return;
+                }
+                parent._in.setAttribute('started', true);
+            </handler>
+        </animator>
+        
+        <animator name="_in" attribute="opacity" to="1" 
+              duration="250" started="false">
+            <handler name="onstop">
+            	if (parent.parent.isStopped) {
+            		return;
+            	}
+                parent._out.setAttribute('started', true);
+            </handler>
+        </animator>
+		
+	</view>
+	
+	<view name="_bg2" bgcolor="0x7fff00" width="$once{ parent.width }" height="18">
+		<labelText x="2" y="1" labelid="1124" />
+	</view>
+	
+	<inputtext name="_text" width="$once{ parent.width - 4 }" height="20" y="18"
+			   bgcolor="0xFFFFFF" x="2" >
+		<handler name="ontext" args="txt">
+			if ($debug) Debug.warn("ontext ",txt);
+			parent.parent.doBroadcastText(txt);
+			parent._out.setAttribute('started', true);
+		</handler>
+	</inputtext>
+	
+</class>	
+
+<class name="copiedTextPopup" extends="labelExplorerBox" labelid="1121"
+    docking="true" resizeable="true" closable="true" y="100"
+    x="$once{ parent.width/2 - this.width/2 }" height="160" width="324">
+
+    <attribute name="error" value="" type="string" />
+    
+    <view name="_box" y="24" width="${ parent.width - 20 }" 
+    	  height="${ parent.height - 50 }" x="10" clip="true">
+        <text fontsize="10" fontstyle="bold" text="${ parent.parent.error }"
+            multiline="true" width="${ parent.width - 16 }" selectable="true" />
+    </view>
+    
+    <simpleLabelButton labelid="642" width="100" x="${ parent.width-105 }" 
+           y="${ parent.height-24 }" onclick="this.parent.close();" />
+
+</class>
+			
+<class name="screenShareCursorObject" extends="view" resource="menupointer_rsc">
+	
+	<attribute name="refObj" value="null" />
+	
+    <contextmenu>
+            
+        <handler name="onmenuopen">
+            parent.refObj.currentX = parent.refObj.getMouse("x");
+            parent.refObj.currentY = parent.refObj.getMouse("y");
+            if ($debug) Debug.write("onmenuopen x,y ",parent.currentX,parent.currentY);
+        </handler>
+        
+        <contextmenuitem caption="$once{ canvas.getLabelName(1119) }" 
+                         onselect="parent.parent.refObj.insertText()" />
+        
+        <contextmenuitem caption="$once{ canvas.getLabelName(1120) }" 
+                         onselect="parent.parent.refObj.copyFromRemote()" />
+                         
+        <contextmenuitem caption="$once{ canvas.getLabelName(1122) }" 
+                         onselect="parent.parent.refObj.showFromRemote()" />
+                         
+    </contextmenu>
+</class>			
+					   
+<class name="videoObjectPlayScreenShare" extends="view">
+	
+    <baseVideoStream name="_videostream" bgcolor="black" 
+          width="${parent.width}" height="${parent.height}" >
+    	
+    	<attribute name="currentX" value="0" type="number" />
+    	<attribute name="currentY" value="0" type="number" />
+    	
+    	<method name="insertText">
+    		if (canvas.isAllowedToRemoteControl || canvas.ismoderator) {
+        		new lz.tempTextBox(this,{
+                		   x:this.currentX,
+                		   y:this.currentY
+                		});
+    		} else {
+    			new lz.labelerrorPopupSWF10(canvas,{
+                               errorlabelid:1125
+                            });
+    		}
+    	</method>
+    	
+    	<method name="sendCursorVisible" args="bool">
+    		if (bool) {
+    			parent.parent.parent.parent.currentCursorObject.setAttribute("visibility","visible");
+    		} else {
+    			parent.parent.parent.parent.currentCursorObject.setAttribute("visibility","hidden");
+    		}
+    	</method>
+    	
+    	<method name="doBroadcastText" args="txt">
+    		if (canvas.isAllowedToRemoteControl || canvas.ismoderator) {
+        		var tObject = new Object();
+                tObject["action"] = "paste";
+                
+                tObject["paste"] = txt;
+                
+                parent.sendRemoteCursorEvent.tObject = tObject;
+                
+                if ($debug) Debug.warn("doBroadcastText :: ",txt);
+                
+                parent.sendRemoteCursorEvent.doCall();
+    		} else {
+    			new lz.labelerrorPopupSWF10(canvas,{
+                               errorlabelid:1125
+                            });
+    		}
+    	</method>
+    	
+    	<method name="copyFromRemote">
+    		if (canvas.isAllowedToRemoteControl || canvas.ismoderator) {
+        		var tObject = new Object();
+                tObject["action"] = "copy";
+                
+                tObject["clientId"] = canvas.streamid;
+                
+        		parent.sendRemoteCursorEvent.tObject = tObject;
+                parent.sendRemoteCursorEvent.doCall();
+    		} else {
+    			new lz.labelerrorPopupSWF10(canvas,{
+                			   errorlabelid:1125
+                			});
+    		}
+    	</method>
+    	
+    	<method name="showFromRemote">
+            var tObject = new Object();
+            tObject["action"] = "show";
+            
+            tObject["clientId"] = canvas.streamid;
+            
+            parent.sendRemoteCursorEvent.tObject = tObject;
+            parent.sendRemoteCursorEvent.doCall();
+        </method>
+    	
+    	<contextmenu>
+    		
+    		<handler name="onmenuopen">
+    			parent.currentX = parent.getMouse("x");
+    			parent.currentY = parent.getMouse("y");
+    			if ($debug) Debug.write("onmenuopen x,y ",parent.currentX,parent.currentY);
+    		</handler>
+            
+            <contextmenuitem caption="$once{ canvas.getLabelName(1119) }" 
+                             onselect="parent.parent.insertText()" />
+            
+            <contextmenuitem caption="$once{ canvas.getLabelName(1120) }" 
+                             onselect="parent.parent.copyFromRemote()" />
+                             
+            <contextmenuitem caption="$once{ canvas.getLabelName(1122) }" 
+                             onselect="parent.parent.showFromRemote()" />
+                             
+        </contextmenu>
+        
+    </baseVideoStream>
+        
+</class>
+
+</library>
diff --git a/WebContent/swf10/testVideoObject.lzx b/WebContent/swf10/testVideoObject.lzx
new file mode 100644
index 0000000..75cc30d
--- /dev/null
+++ b/WebContent/swf10/testVideoObject.lzx
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+    <class name="testVideoObject" extends="view" bgcolor="0x000000" width="132" height="120" onmousedown="dragger.setAttribute('applied', true)" onmouseup="dragger.setAttribute('applied', false)">

+        <dragstate name="dragger"/>>

+    </class>

+</library>
\ No newline at end of file
diff --git a/WebContent/swf10/video/baseVideoObject.lzx b/WebContent/swf10/video/baseVideoObject.lzx
new file mode 100644
index 0000000..426392d
--- /dev/null
+++ b/WebContent/swf10/video/baseVideoObject.lzx
@@ -0,0 +1,672 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file 

+	distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under 

+	the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may 

+	obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to 

+	in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 

+	ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under 

+	the License. -->

+<library>

+

+

+	<!--- Base container for a client, can be either: a remote-video (subscribing/playing a video) or a self-video (broadcasting 

+		a cam/mic) -->

+	<class name="baseVideoObject" extends="view" bgcolor="0x000000" width="122" height="101">

+

+		<switch>

+			<when property="$as3">

+				<passthrough>

+					import flash.filters.DropShadowFilter;

+					import flash.media.*

+					import flash.net.SharedObject;

+				</passthrough>

+			</when>

+		</switch>

+

+		<!--- @keywords private -->

+		<attribute name="chatpartnername" value="" type="string" />

+		<!--- @keywords private -->

+		<attribute name="showUserProfilePic" type="boolean" value="false" />

+

+		<!--- color of this user, this is the color the user will also use for his chat-color -->

+		<attribute name="usercolor" value="0" type="number" />

+

+		<!--- publicSID is a hash-value to identify a user -->

+		<attribute name="publicSID" value="" type="string" />

+

+		<!--- micMuted indicates if the microphone is currently turned sound or gain to 0 -->

+		<attribute name="micMuted" value="false" type="boolean" />

+

+		<!--- @keywords private -->

+		<attribute name="isremote" value="true" type="boolean" />

+

+		<!--- @keywords private -->

+		<attribute name="clientVars" value="null" />

+

+		<!--- @keywords private -->

+		<attribute name="isResizing" value="false" type="boolean" />

+

+		<!--- @keywords private -->

+		<attribute name="isInterview" value="false" type="boolean" />

+

+		<attribute name="respectRatio" value="true" type="boolean" />

+

+		<attribute name="minimized" value="false" type="boolean" />

+

+		<attribute name="hidebyAudioOnly" value="false" type="boolean" />

+

+		<attribute name="custom" value="false" type="boolean" />

+

+		<attribute name="initH" value="40" type="number" />

+		<attribute name="initW" value="40" type="number" />

+

+		<attribute name="isShowMicMute" value="false" type="boolean" />

+

+		<attribute name="isMutedByModerator" value="false" type="boolean" />

+

+		<attribute name="isMicrophonesRoom" value="false" type="boolean" />

+

+		<attribute name="lastPositiveVolume" type="number" value="50" />

+

+		<!-- Initial stream ratio: width / height -->

+		<attribute name="initRatio" type="number" value="null" />

+		<attribute name="initialHeight" value="$once{ this.height }" type="number" />

+

+		<handler name="onisremote" args="r">

+			this.isremote = r;

+		</handler>

+

+		<handler name="oninit">

+        <![CDATA[

+            this.clientVars = new Array();

+            this.clientVars['User']='No User Connected';

+            

+            if (this.isInterview) {

+            	this._toolbar._minimize.setAttribute("visibility","hidden");

+            	this._resizeview.setAttribute("visibility","hidden");

+            	this._innerbottom.setAttribute("visibility","hidden");

+            	return;

+            }

+            

+            if (this.custom) {

+                this._toolbar._minimize.setAttribute("visibility","hidden");

+                this._resizeview.setAttribute("visibility","hidden");

+                this._toolbar.setAttribute("visibility","hidden");

+                this._resizeview.setAttribute("visibility","hidden");

+                this._loudness.setAttribute("visibility","hidden");

+                this._innertop.setAttribute("visibility","hidden");

+                this._innerbottom.setAttribute("visibility","hidden");

+            }

+            this.setShadow();

+            

+            if (this.publicSID == canvas.publicSID) {

+                this._toolbar._resync._tip.setAttribute("labelid",610);

+            }

+            this._giveExclusiveAudioView.bringToFront();

+            

+            this.isMicrophonesRoom = canvas.currentRoomObject.showMicrophoneStatus;

+            if (isMicrophonesRoom) {

+                this._innertop.setAttribute("bgcolor", "0xFF6600");

+                this._innerbottom.setAttribute("bgcolor", "0xFF6600");

+            } else {

+                this._innerbottom.setAttribute("visibility", "hidden");

+            }

+        ]]>

+		</handler>

+

+		<handler name="ony">

+		<![CDATA[

+		    if (this.isInterview || this.custom || canvas.currentRoomObject.hideWhiteboard) {

+                return;

+            }

+            var bounds = this.getBounds();

+            var parentBounds = canvas.getBounds();

+            if (bounds.y < 0) {

+                this.setAttribute('y',0);

+            }

+            if (bounds.y > (parentBounds.height - bounds.height)) {           

+                this.setAttribute('y', parentBounds.height - bounds.height );

+            }

+        ]]>

+		</handler>

+

+		<handler name="onx">

+		<![CDATA[

+            if (this.isInterview || this.custom) {

+                return;

+            }	

+		

+			var bounds = this.getBounds();

+            var parentBounds = canvas.getBounds();

+            if (bounds.x < 0) {

+                this.setAttribute('x',0);

+            }

+            

+            if (bounds.x > (parentBounds.width - bounds.width)) {

+                this.setAttribute('x', parentBounds.width - bounds.width );

+            }

+        ]]>

+		</handler>

+

+		<method name="setShadow">

+        <![CDATA[

+	        if (this.isinited){

+	            this.normalMC = this.getDisplayObject();

+	            //if($debug) Debug.write(this.normalMC);

+	            //if($debug) Debug.write("this.normalMC: ",this.normalMC);

+	            //if($debug) Debug.write("this: ",this);

+	            this.displacementMap = new flash.filters.DropShadowFilter();

+	            this.normalMC.filters = [this.displacementMap];

+	        }

+        ]]>

+		</method>

+

+		<!-- respect ratio and keep minimum width / height -->

+		<method name="setItemContraintsWidth" args="unused">

+        <![CDATA[

+            if (!this.respectRatio) {

+                return;

+            }

+            var h=this.width * this.initH/this.initW;

+            h=((h < this.initH ) ? initH : h);

+

+            if ($debug) Debug.write("setItemContraintsWidth",this.respectRatio,'orig',this.height,this.width,'new h',h);

+

+            this.setAttribute("height",h);

+        ]]>

+		</method>

+

+		<method name="setItemContraintsHeight" args="unused">

+        <![CDATA[

+            if (!this.respectRatio) {

+                return;

+            }

+            var w=this.height * this.initW/this.initH;

+            w=((w < this.initW ) ? initW : w);

+

+            if ($debug) Debug.write("setItemContraintsHeight",this.respectRatio,'orig',this.height,this.width,'new w',w);

+

+            this.setAttribute("width",w);

+        ]]>

+		</method>

+

+		<method name="updateAVSettingsSymbol" args="rcl">

+			//FIXME: Set a Symbol wether this Client is Audio(only)/Video(only), both or Profile Picture

+			if ($debug) Debug.warn("updateAVSettingsSymbol TODO ",rcl);

+		</method>

+

+		<method name="doResize" args="bool">

+			if ($debug) Debug.write("doResize",bool);

+			if(bool) {

+				dragHelper.create();

+			} else {

+				dragHelper.remove();

+			}

+			if (this.isInterview || this.custom) {

+				return;

+			}

+

+			if (bool) {

+				this.isResizing = true;

+				this.rs.apply();

+			} else {

+				this.isResizing = false;

+				this.rs.remove();

+			}

+		</method>

+

+		<!--- resets all values and stops the streaming -->

+		<method name="resetValues">

+		<![CDATA[

+	    	if ($debug) Debug.write("resetValues: ",this.isremote);

+	    	this.clientVars=null;

+	    	if (!this.isremote) {

+	    		deleteVideoConfProfilePic();

+	    	}

+	    	if (this.isremote){

+	    		this._chatvideoinner._videostream.restart();

+	    	} else {

+	    		this._chatvideoinner._videostream._stop();

+	    	}

+		]]>

+		</method>

+		

+		<method name="setVideouserProfilePic" args="value">

+			if ($debug) Debug.write("### setVideouserProfilePic ",value);

+			this.deleteVideoConfProfilePic();

+			new lz.videoUserProfilePicSWF10(this._chatvideoinner,{name:'userProfilePic',value:value});

+			this.showUserProfilePic = true;

+		</method>

+		

+		<method name="deleteVideoConfProfilePic">

+			if ($debug) Debug.write("### deleteVideoConfProfilePic ###");

+			if ($debug) Debug.write("delete ",this.showUserProfilePic);

+			if (this.showUserProfilePic) {

+				this._chatvideoinner.userProfilePic.destroy();

+				this.showUserProfilePic = false;

+			}

+		</method>

+

+		<!--- @keywords private -->

+		<method name="_startDragState" args="obj">

+			if (this.isInterview || this.custom) {

+				return;

+			}

+

+			dragHelper.create();

+

+			this.bringToFront();

+			parent.bringToFront();

+			this.dragger.apply();

+		</method>

+

+		<!--- @keywords private -->

+		<method name="_removeDragState" args="obj">

+    	<![CDATA[

+	        lz.Cursor.unlock();

+	        

+	        if (this.x < 0) {

+	        	this.setAttribute("x",20);

+	        }

+	        

+	        if (this.y < 0) {

+	        	this.setAttribute("y",20);

+	        }

+	        

+	        if (this.x+this.width > parent.width) {

+	        	this.setAttribute("x",parent.width - this.width - 20);

+	        }

+	        

+	        if (this.y+this.height > parent.height) {

+	        	this.setAttribute("y",parent.height - this.height - 20);

+	        }

+	        dragHelper.remove();

+	        this.dragger.remove();

+        ]]>

+		</method>

+

+		<method name="minimize">

+        <![CDATA[

+            this.respectRatio = false;

+        

+            this.setAttribute("minimized",true);

+            

+            this._toolbar._minimize.setAttribute("visibility","hidden");

+            this._toolbar._maximize2.setAttribute("visibility","visible");

+            

+            for (var eg in this.subviews) {

+                if (this.subviews[eg].name != "_toolbar" 

+                        && this.subviews[eg].name != "_innertop"

+                        && this.subviews[eg].name != "_loudness") {

+                     this.subviews[eg].setAttribute("visibility","hidden");   

+                }

+            }

+            

+            this._loudness.setAttribute("x",this.width - 84 - (this.isShowMicMute ? 20 : 0));

+            this._loudness.bringToFront();

+            

+            this.initialHeight = this.height;

+            //this.setAttribute("height",20);

+            this._minimizeZoom.setAttribute("to",20);

+            this._minimizeZoom.setAttribute('started', true);

+        ]]>

+		</method>

+

+		<method name="reminimize">

+        <![CDATA[

+            this.setAttribute("minimized",false);

+            

+            this._toolbar._minimize.setAttribute("visibility","visible");

+            this._toolbar._maximize2.setAttribute("visibility","hidden");

+            

+            this._loudness.setAttribute("x",1);

+            

+            //this.setAttribute("height",this.initialHeight); 

+            if ($debug) Debug.write("this.initialHeight ",this.initialHeight);

+            this._minimizeZoom.setAttribute("to",this.initialHeight);

+            this._minimizeZoom.setAttribute('started', true);

+        ]]>

+		</method>

+

+		<method name="reminimizeComplete">

+        <![CDATA[

+            if (!this.minimized) {

+                for (var eg in this.subviews) {

+                    if (this.subviews[eg].name != "_toolbar" 

+                            && this.subviews[eg].name != "_innertop"

+                            && this.subviews[eg].name != "_loudness"

+                            && this.subviews[eg].name != "_innerbottom") {

+                         this.subviews[eg].setAttribute("visibility","visible");   

+                    }

+                }

+                if (isMicrophonesRoom) {

+                    this._innerbottom.setAttribute("visibility", "visible");

+                }

+                this.respectRatio = true;

+            }

+        ]]>

+		</method>

+

+		<view name="_innertop" width="${parent.width-2 }" height="18" x="1" y="1"

+			bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">

+			<text text="${ parent.parent.chatpartnername }" onmousedown="parent.parent._startDragState(this)"

+				onmouseup="parent.parent._removeDragState(this)"

+				width="${ parent.width-2 }" fgcolor="white" fontsize="9">

+				<handler name="onmouseover">

+					//cursor="arrow_draw_panel_cursor"

+					lz.Cursor.setCursorGlobal("arrow_draw_panel_cursor");

+				</handler>

+

+				<handler name="onmouseout">

+					lz.Cursor.unlock();

+				</handler>

+			</text>

+		</view>

+

+		<view name="_innerbottom" width="${parent.width - 2}" x="1" y="${parent.height - 19}" height="18"

+			bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">

+			<text text="${canvas.getLabelName(1434)}" width="${ parent.width-2 }" fgcolor="white" name="title" fontsize="9" />

+		</view>

+

+		<view name="_loudness" x="1" visible="${parent.isremote}" y="${parent.height - 20 - ((parent._innerbottom.visible) ? 18 : 0) }">

+			<method name="setSpeaking" args="bool">

+				this.loudness.setAttribute('opacity', bool ? 1 : 0.2);

+			</method>

+			<view x="2" y="2" name="loudness" resource="speaking" opacity="0.2" onmouseover="" onmouseout="">

+				<handler name="onclick">

+				<![CDATA[

+					if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) {

+						parent.parent.confirmExclusiveAudio();

+					} else {

+						new lz.labelerrorPopupSWF10(canvas,{errorlabelid:1478});

+					}

+				]]>

+				</handler>

+				<labelTooltip inittwice="true" labelid="372" />

+			</view>

+		</view>

+

+		<view name="_resizeview" x="${ this.parent.width - 16 }" valign="bottom" resource="explorer_resize_rsc" cursor="explorer_resizemouse_rsc"

+			onmousedown="this.parent.doResize(true)" onmouseup="this.parent.doResize(false)">

+			<handler name="oninit">

+				//if ($debug) Debug.write("setTint");

+				//TODO: Fix this, does not work at the moment

+				//canvas.protocol + '://code.google.com/p/openmeetings/issues/detail?id=470

+				this.setColor(canvas.getThemeColor('baseMousecolorizer'));

+			</handler>

+		</view>

+

+		<view name="_toolbar" x="${ parent.width-this.width-2 }" layout="axis:x;spacing:0" y="2">

+

+			<attribute name="isload" value="true" type="boolean" />

+

+			<miniIconsPresenter name="_resync" iconRessourceName="resyncuser_rsc">

+				<handler name="onclick">

+					parent.parent.resetValues();

+					if(!this.parent.parent.isremote) {

+						if ($debug) Debug.write("editRecordStream ################# baseVideObject isInterview"

+								,this.parent.parent.isInterview,this.parent.parent.interviewPodId);

+						if (this.parent.parent.isInterview) {

+							//TODO: fix it

+							new lz.editRecordStreamSWF10(canvas.inner,{

+								name:"editRecordStream",

+								doDefaultAnimation:false,

+								isInterview:true,

+								interviewPodId:this.parent.parent.interviewPodId,

+								isSyncUpdate:true});

+						} else {

+							new lz.editRecordStreamSWF10(canvas.inner,{

+								name:"editRecordStream",

+								isInterview:false,

+								isSyncUpdate:true});

+						}

+					}

+				</handler>

+				<labelTooltip name="_tip" labelid="540" />

+			</miniIconsPresenter>

+

+			<miniIconsPresenter name="_mute" width="16" height="16" iconRessourceName="mute_micro_btn_rsc">

+				<handler name="onclick">

+					parent.parent.silenceMicrophone(!parent.parent.micMuted);

+				</handler>

+				<labelTooltip name="_tip" labelid="1405" />

+			</miniIconsPresenter>

+

+			<miniIconsPresenter x="0" y="0" name="_volume" width="16" height="16" iconRessourceName="volume">

+				<handler name="oninit">

+					_tip.setAttribute("labelid", parent.parent.isremote ? 1511 : 1512);

+				</handler>

+				<handler name="onclick">

+					var volume = parent.parent.getStreamVolume();

+

+					var sliderHeight = 120;

+					var sliderX = this.getAttributeRelative('x',canvas) - 2;

+					var pick = new lz.VolumeSlider(canvas, {

+							height:sliderHeight,

+							x:sliderX,

+							y:(parent.getAttributeRelative('y',canvas) - sliderHeight/2),

+							initialNumber:volume,

+							videoObject:parent.parent

+						});

+					lz.ModeManager.makeModal(pick);

+				</handler>

+				<labelTooltip name="_tip" />

+			</miniIconsPresenter>

+

+			<miniIconsPresenter name="_minimize" iconRessourceName="btn_presenter_minimize">

+				<handler name="onclick">

+					this.parent.parent.minimize();

+				</handler>

+				<labelTooltip labelid="856" />

+			</miniIconsPresenter>

+

+			<miniIconsPresenter name="_maximize2" visibility="hidden" iconRessourceName="btn_presenter_maximize">

+				<handler name="onclick">

+					this.parent.parent.reminimize();

+				</handler>

+				<labelTooltip labelid="857" />

+			</miniIconsPresenter>

+

+		</view>

+

+		<view name="_giveExclusiveAudioView" valign="middle" align="center" visible="false">

+			<view name="_micButton" width="40" height="40" resource="mic_rsc" showhandcursor="true">

+				<labelTooltip name="_toolTipTextExclusiveAudio" labelid="1386" />

+			</view>

+		</view>

+

+		<handler name="onmouseover">

+        <![CDATA[

+	        if (this.isInterview || this.minimized) {

+	            return;

+	        }

+	        if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) {

+	        	this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.doonmouseover();

+	            this._giveExclusiveAudioView.setAttribute("visible", true);

+	        }

+        ]]>

+		</handler>

+

+		<handler name="onmouseout">

+        <![CDATA[

+	        if (this.isInterview || this.minimized) {

+	            return;

+	        }

+	        this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.cleanHolder();

+	        this._giveExclusiveAudioView.setAttribute("visible", false);

+        ]]>

+		</handler>

+

+		<handler name="onclick">

+		<![CDATA[

+	      	if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) {

+	      		this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.cleanHolder();

+	          	this.confirmExclusiveAudio();

+	        } else {

+				new lz.labelerrorPopupSWF10(canvas,{errorlabelid:1478});        

+	        }

+		]]>

+		</handler>

+

+		<dragstate name="dragger" />

+		<resizestatemin name="rs" resize_min_width="70" resize_min_height="70" />

+		<dragHelper name="dragHelper" />

+

+		<animator name="_minimizeZoom" attribute="height" duration="750" to="20" started="false">

+			<handler name="onstop" args="s">

+				parent.reminimizeComplete();

+			</handler>

+		</animator>

+

+		<handler name="onismoderator" reference="canvas" args="m">

+        <![CDATA[

+			if ($debug) Debug.write("###### ismoderator ", m);

+	        

+	        if (this.minimized) {

+	            this._loudness.setAttribute("x",this.width - 84 - (this.isShowMicMute ? 20 : 0));

+	            this._loudness.bringToFront();

+	        }

+        ]]>

+		</handler>

+

+		<method name="giveExclusiveAudio">

+			canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'lc_giveExclusiveAudio', this.publicSID);

+		</method>

+

+		<method name="confirmExclusiveAudio">

+			var so:SharedObject = SharedObject.getLocal('userdata');

+			var userData = so.data;

+			var dontShowExclusiveAudioConfirmation = userData["dontShowExclusiveAudioConfirmation"];

+			var exclusiveAudioListener = new Object();

+			exclusiveAudioListener.sendNoConfirmation = function() {};

+			exclusiveAudioListener.sendConfirmation = function(answer, remember) {

+					if (answer) {

+						giveExclusiveAudio();

+						if (remember) {

+							userData["dontShowExclusiveAudioConfirmation"] = true;

+							so.flush();

+						}

+					}

+				};

+			if (dontShowExclusiveAudioConfirmation == true) {

+				exclusiveAudioListener.sendConfirmation(true, true);

+			} else {

+				new lz.confirmationSingleSWF10(canvas,{

+					labelid:1428,

+					labeliderror:1539,

+					refObj:exclusiveAudioListener,

+					showCheckBox:true});

+			}

+		</method>

+

+		<!-- This will mute the Microphone only to the person that is speaking if the gain is set to zero NOBODY will hear 'em -->

+		<method name="muteMicrophone" args="roomClientObj">

+		<![CDATA[

+			if ($debug) Debug.write("############ muteMicrophone ", roomClientObj.micMuted, roomClientObj.publicSID, this.publicSID);

+			

+			if (roomClientObj.publicSID == this.publicSID) {

+				if ($debug) Debug.write("Set Mute for Client :: ", roomClientObj);

+				if ($debug) Debug.write("############ SET GAIN " + roomClientObj.micMuted);

+				this._chatvideoinner._videostream.muteMicro(roomClientObj.micMuted);

+				this.isMutedByModerator = roomClientObj.micMuted;

+				this.setMicMuted(roomClientObj.micMuted);

+			}

+		]]>

+		</method>

+

+		<!-- This will mute it only locally, that means on other screens the user might be still online and loud -->

+		<method name="silenceMicrophone" args="mute">

+		<![CDATA[

+			if ($debug) Debug.write("############ silenceMicrophone ", this.publicSID);

+			if (this.publicSID == canvas.publicSID) {

+				//self sound turned off

+				canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'lc_switchMicMuted', this.publicSID, mute);

+				if (!mute) {

+					this._chatvideoinner._videostream.muteMicro(false);

+				}

+			} else {

+				//disable this action for now

+				if (!canvas.ismoderator) {

+					new lz.labelerrorPopupSWF10(canvas,{errorlabelid:1409});

+					return;

+				}

+				//you can not unmute it locally by putting sound to 100 cause the gain is set to zero globally in the micro of the sender!

+				//so setting the sound/volume on the other remote clients has zero effect

+				if (this.isMutedByModerator && !canvas.ismoderator) {

+					//FIXME: That is not true, you could restart audio/video ...

+					var errorlabelid = this.publicSID == canvas.publicSID ? 1387 : 1402;

+					new lz.labelerrorPopupSWF10(canvas,{errorlabelid:errorlabelid});

+					return;

+				}

+				if (canvas.ismoderator) {

+					canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'lc_switchMicMuted', this.publicSID, mute);

+				} else {

+					this._chatvideoinner._videostream.setSoundVolume(mute ? 0 : 100);

+				}

+			}

+			this.setMicMuted(mute);

+		]]>

+		</method>

+

+		<method name="setMicMuted" args="micMuted">

+        <![CDATA[

+	        this.micMuted = micMuted;

+            this._toolbar._mute._tip.setAttribute("labelid", micMuted ? "1406" : "1405");

+            this._toolbar._mute._itemRsc.setAttribute('frame', micMuted ? 2 : 1);

+            if (isMicrophonesRoom) {

+                var label = canvas.getLabelName(micMuted ? 1435 : 1434);

+                var color = micMuted ? canvas.getThemeColor('basebgcolorizer') : "0xFF6600";

+                this._innertop.setAttribute('bgcolor', color);

+                this._innerbottom.setAttribute('bgcolor', color);

+                this._innerbottom.title.setAttribute('text', label);

+            }

+        ]]>

+		</method>

+

+		<method name="setStreamVolume" args="v">

+			if ($debug) Debug.write("############ setStreamVolume ", v, this.publicSID);

+			var stream = this._chatvideoinner._videostream;

+			if (this.isremote) {

+				stream.setSoundVolume(v);

+			} else {

+				stream.setAttribute('micGain', v);

+				stream.micro.gain = v;

+				if (0 == v) {

+					this.setMicMuted(true);

+					canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'lc_switchMicMuted', this.publicSID, true);

+				} else if (micMuted) {

+					this.silenceMicrophone(false);

+				}

+			}

+		</method>

+

+		<method name="getStreamVolume">

+			var stream = this._chatvideoinner._videostream;

+			return this.isremote ? Number(stream._ns.soundTransform.volume * 100) : stream.micro.gain;

+		</method>

+

+		<handler name="onheight" args="value">

+			if (null == initRatio || !respectRatio) {

+				return;

+			}

+			var videoHeight = value - this.videoInsetY - this.bottomBarHeight;

+			var expectedVideoWidth = videoHeight * initRatio;

+			var expectedPodWidth = expectedVideoWidth + this.videoInsetX;

+			if (this.width != expectedPodWidth) {

+				this.setAttribute("width", expectedPodWidth);

+			}

+		</handler>

+

+		<handler name="onwidth" args="value">

+			if (null == initRatio || !respectRatio) {

+				return;

+			}

+			var videoWidth = value - this.videoInsetX;

+			var expectedVideoHeight = videoWidth / initRatio;

+			var expectedPodHeight = expectedVideoHeight + this.videoInsetY + this.bottomBarHeight;

+			if (this.height != expectedPodHeight) {

+				this.setAttribute("height", expectedPodHeight);

+			}

+		</handler>

+	</class>

+</library>

diff --git a/WebContent/swf10/video/changeDevice.lzx b/WebContent/swf10/video/changeDevice.lzx
new file mode 100644
index 0000000..8a97435
--- /dev/null
+++ b/WebContent/swf10/video/changeDevice.lzx
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="changeDevice" extends="labelExplorerBox" labelid="51"

+    docking="true" resizeable="false" closable="true" width="300" x="14" height="260">

+

+    <switch>

+        <when property="$as3">

+            <passthrough>

+                import flash.net.SharedObject;

+            </passthrough>

+        </when>

+    </switch>

+

+    <method name="storelocaldata">

+        <![CDATA[

+        var so:SharedObject = SharedObject.getLocal('userdata');

+        var sdata = so.data;

+        if (sdata==null) sdata = new Array();

+        sdata["cam"]=availibleCams3.getValue();

+        sdata["mic"]=availibleMics3.getValue();

+        sdata["savecamdata"] = this.holddatainSO.getValue();

+        so.flush();

+        ]]>

+    </method>   

+    

+    <method name="doninitalize">

+        this.storelocaldata();

+        this.close();

+    </method>

+     

+    <labelText labelid="52" fontsize="11" x="10" y="30" />

+

+    <resetCombobox fontsize="11" id="availibleCams3" x="10" y="50" width="280" editable="false">

+        <switch>

+            <when property="$as3">

+                <passthrough>

+                    import flash.media.Camera;

+                    import flash.net.SharedObject;

+                </passthrough>

+            </when>

+        </switch>

+

+        <handler name="oninit">

+            <![CDATA[

+            //Get all availible Cam's

+            var tw = Camera.names;

+            var t = "";

+            for (var eg=0;eg<tw.length;eg++){

+                this.addItem(tw[eg],eg);

+                t=eg;

+            }

+

+            var so:SharedObject = SharedObject.getLocal('userdata');

+	        var sdata = so.data;

+	        var cam;

+            if (sdata != null){

+                cam = sdata["cam"];

+                if (cam == 'undefined') {

+                    cam = t;

+                }

+            } else {

+                cam = t;

+            }

+            this.selectItem(String(cam));

+            ]]>

+        </handler>

+    </resetCombobox>

+    

+    <labelText text="LABEL53" labelid="53" fontsize="11" x="10" y="80" />

+

+    <resetCombobox fontsize="11" id="availibleMics3"  x="10" y="100" width="280" editable="false">

+        <switch>

+            <when property="$as3">

+                <passthrough>

+                    import flash.media.Microphone;

+                    import flash.net.SharedObject;

+                </passthrough>

+            </when>

+        </switch>

+

+        <handler name="oninit">

+            <![CDATA[

+            //Get all availible Mic's

+            var tw = Microphone.names;

+            var t = "";

+            for (var eg=0;eg<tw.length;eg++){

+                t=eg;

+                this.addItem(tw[eg],eg);

+            }

+

+            var so:SharedObject = SharedObject.getLocal('userdata');

+	        var sdata = so.data;

+	        var mic;

+	        if (sdata != null){

+                mic = sdata["mic"];

+                if (mic == 'undefined') {

+                    mic = t;

+                }

+            } else {

+                mic = t;

+            }

+            this.selectItem(String(mic));

+            ]]>

+        </handler>

+    </resetCombobox>

+

+    <!-- Remember Me -->

+    <labelCheckbox name="holddatainSO" labelid="762" x="10" y="220">

+        <switch>

+            <when property="$as3">

+                <passthrough>

+                    import flash.net.SharedObject;

+                </passthrough>

+            </when>

+        </switch>

+

+        <handler name="oninit">

+            var so:SharedObject = SharedObject.getLocal('userdata');

+	        var sdata = so.data;

+            var save = sdata["savecamdata"];

+            if ($debug) Debug.write("savecamdata save: ",save);

+            if(save) this.setValue(true);

+        </handler>         

+    </labelCheckbox>

+    

+    <simpleLabelButton fontsize="11" labelid="54" x="80" y="190" width="100">

+        <handler name="onclick">

+            this.parent.doninitalize();

+        </handler>

+    </simpleLabelButton>

+    

+    <labelText labelid="56" width="280" x="10"

+    	y="150" multiline="true" resize="false"/>

+    

+    <simpleLabelButton labelid="55" width="100" x="190" y="190"

+        onclick="this.parent.close();" />

+    

+</class>

+

+</library>

diff --git a/WebContent/swf10/video/editRecordStreamSWF10.lzx b/WebContent/swf10/video/editRecordStreamSWF10.lzx
new file mode 100644
index 0000000..8356074
--- /dev/null
+++ b/WebContent/swf10/video/editRecordStreamSWF10.lzx
@@ -0,0 +1,854 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+    

+<!-- #######################

+	Class editRecordStream

+	

+	Description:

+	This Class shows a window where you can alter you Video-/Microphone- Input-Resources

+	and start to stream. The app could also use the default values for Cam/Mic but

+	most users don't know how to alter this (weather in System-Control-Panel or by Right Clicking

+	on the Flash-Screen and *>Preferences>Camera* )

+	So I think it is better if Users are forced to choose something from this list

+	

+ -->

+ 

+<class name="editRecordStreamSWF10"  extends="labelExplorerBox" labelid="51"

+	width="680" height="540" x="14" y="-540" >

+

+    <switch>

+        <when property="$as3">

+            <passthrough>

+				import flash.events.StatusEvent;

+                import flash.media.Camera;

+                import flash.media.Microphone;

+                import flash.media.MicrophoneEnhancedMode;

+                import flash.media.MicrophoneEnhancedOptions;

+                import flash.net.SharedObject;

+                import flash.media.SoundCodec;

+            </passthrough>

+        </when>

+    </switch>

+

+    <attribute name="myvideocontainer" value="null" />

+

+    <attribute name="chosenCam" value="null" />

+    <attribute name="chosenMic" value="null" />

+    <attribute name="chosenSetting" value="null" />

+    <attribute name="currentClient" value="null" />

+

+    <attribute name="remoteMessage" value="null" />

+

+    <!---

+        if true the user will see the dialog no matter if he has choosen "do not show again" or not

+     -->

+    <attribute name="isSyncUpdate" value="false" type="boolean" />

+

+    <attribute name="doDefaultAnimation" value="true" type="boolean" />

+

+    <attribute name="cam_default_width" value="320" type="number" />

+    <attribute name="cam_default_height" value="260" type="number" />

+    

+    <attribute name="interviewPodId" value="0" type="number" />

+    

+    <attribute name="lastRecorded" value="" type="string" />

+	

+	<attribute name="isRunning" value="false" type="boolean" />

+	

+	<attribute name="recordingsCounter" value="5" type="number" />

+	

+	<attribute name="timerIsRunning" value="false" type="boolean" />

+	

+	<attribute name="counterDelegate" value="null" />

+	

+	<method name="startTimer">

+		this.timerIsRunning = true;

+		this.timerWasUnmutedTheFirstTime = true;

+		lz.Timer.addTimer( this.counterDelegate, 1000 );

+	</method>

+	

+	<method name="count" args="calleeObj">

+		if (this.recordingsCounter != 0){

+			this.recordingsCounter -= 1;

+			lz.Timer.addTimer( this.counterDelegate, 1000 );

+			

+			this._text._info.setAttribute("text",""+this.recordingsCounter+" sec");

+			

+		} else {

+			this._text.setAttribute("visibility","hidden");

+			this.doStop();

+			this.timerIsRunning = false;

+			this.doPlay();

+		}

+	</method>

+	

+	<method name="startTimerToCount">

+		if (!this.timerIsRunning) {

+			this.startTimer();

+		}

+	</method>

+	

+	<handler name="oninit">

+		<![CDATA[

+			//Make this view the upmost in the z-Index order

+			canvas.inner.bringToFront();

+		

+			this.counterDelegate = new LzDelegate( this, "count" );

+		

+			if ($debug) Debug.write("this.myvideocontainer ",this.myvideocontainer);

+			if ($debug) Debug.write("editrecordstream ###################### ");

+

+			canvas.videoComp_lc.client = {clb_getBroadCastId: this.clb_getBroadCastId, clb_setUserAVSettings: this.clb_setUserAVSettings};

+

+	        var sharedData = this.checkDeviceSettingsRememberStatus();

+            if(sharedData != null) {

+                this.chosenCam = sharedData["cam"];

+                this.chosenMic = sharedData["mic"];

+                this.cam_default_width = canvas.isInterview ? 320 : sharedData["width"];

+                this.cam_default_height = canvas.isInterview ? 260 : sharedData["height"];

+                this.chosenSetting = sharedData["avstored"];

+                this.remoteMessage = new Array();

+                this.remoteMessage[0] = 'avsettings';

+                this.remoteMessage[2] = this.chosenSetting; 

+                this.getBroadCastId.doCall();

+            } else {

+                if (this.doDefaultAnimation && !canvas.isInterview) {

+                    this._chooseDeviceAnimation.setAttribute('started', true);

+                }

+                this.initItemsAndDefaultAttachCamera();

+            }

+	        

+	        if (canvas.isInterview) {

+	        	if ($debug) Debug.write("Is interview ",interviewPodId);

+                this.setAttribute("x",canvas["interviewPod"+interviewPodId+"_x"]);

+                this.setAttribute("y",canvas["interviewPod"+interviewPodId+"_y"]);

+	        }

+        ]]>

+	</handler>

+	

+	<!-- 

+	   If the remember check-box was true, this flag in the Flash Cookie (aka SharedObject)

+	   is true and the box will close without asking for device settings.

+	 -->

+	<method name="checkDeviceSettingsRememberStatus">

+	<![CDATA[

+		var t:SharedObject = SharedObject.getLocal('userdata');

+		var g = t.data;

+		var save = g["savecamdata"];

+		if ($debug) Debug.write("save: ",save,g["cam"],g["mic"],this.isSyncUpdate);

+		//In case its an Audio-Only Room this box should not close automatically

+		if ($debug) Debug.write("canvas.currentRoomObject: ", canvas.currentRoomObject);

+		

+		//In case the user presses the Sync Button this box should

+        //not close automatically and do the user-prefered values

+		if(save && !this.isSyncUpdate && this.checkLocalDataComplete()) {

+		    return g;

+		}

+		return null;

+	]]>

+	</method>

+	

+	<!-- 

+	   Checks if all needed data in the shared object is available

+	 -->

+	<method name="checkLocalDataComplete">

+        <![CDATA[

+        	var t:SharedObject = SharedObject.getLocal('userdata');

+	        var g = t.data;

+            if (g["width"] > 0 && g["height"] > 0) {

+                return true;

+            }

+            return false;

+        ]]>

+    </method>

+    

+    

+    <netRemoteCallHib name="getBroadCastId" funcname="getBroadCastId" remotecontext="$once{ canvas.thishib }" >

+        <handler name="ondata" args="value">

+            <![CDATA[

+                if ($debug) Debug.write("getBroadCastId",value,canvas.publicSID);

+                parent.myvideocontainer = canvas._videoComponent.createVideoObject(canvas.publicSID, true, parent.interviewPodId, canvas.userobject);

+

+                if ($debug) Debug.write("parent.setUserAVSettings -1- ",parent.chosenSetting);

+                if ($debug) Debug.write("parent.setUserAVSettings -2- ",parent.remoteMessage);

+                if ($debug) Debug.write("parent.setUserAVSettings -3- ",parent.cam_default_width);

+                if ($debug) Debug.write("parent.setUserAVSettings -4- ",parent.cam_default_height);

+                if ($debug) Debug.write("parent.setUserAVSettings -5a- ",canvas.currentRoomObject.rooms_id);

+                if ($debug) Debug.write("parent.setUserAVSettings -6- ",canvas.publicSID);

+                

+                parent.setUserAVSettings.doCall();

+            ]]>

+        </handler>   

+    </netRemoteCallHib>  

+    

+    <netRemoteCallHib name="setUserAVSettings" funcname="setUserAVSettings" remotecontext="$once{ canvas.thishib }" >  

+        <netparam><method name="getValue">return parent.parent.chosenSetting;</method></netparam>

+        <netparam><method name="getValue">return parent.parent.remoteMessage;</method></netparam>

+        <netparam><method name="getValue">return parent.parent.cam_default_width;</method></netparam>

+        <netparam><method name="getValue">return parent.parent.cam_default_height;</method></netparam>

+        <netparam><method name="getValue">return canvas.currentRoomObject.rooms_id;</method></netparam>

+        <netparam><method name="getValue">return canvas.publicSID;</method></netparam>

+        <netparam><method name="getValue">return parent.parent.interviewPodId;</method></netparam>

+        <handler name="ondata" args="value">

+            <![CDATA[

+                if ($debug) Debug.write("setUserAVSettings",value);

+                parent.currentClient = value;

+                parent.doStartConference();

+            ]]>

+        </handler>   

+    </netRemoteCallHib>  

+

+    <method name="storelocaldata">

+        <![CDATA[

+            //Debug.write("sharedobject store ");

+            var t:SharedObject = SharedObject.getLocal('userdata');

+            var g = t.data;

+            if (g==null) g = new Array();

+            g["cam"] = this.availableCams.getValue();

+	        g["mic"] = this.availableMics.getValue();

+	        g["avstored"] = this.availableSettings.getValue();

+	        g["savecamdata"] = this.holddatainSO.getValue();

+	        g["width"] = this.cam_default_width;

+	        g["height"] = this.cam_default_height;

+            t.flush();

+        ]]>

+    </method>

+

+	<method name="getMic" args="valMic">

+	<![CDATA[

+		if ($debug) Debug.write("Entering getMic ...", valMic);

+		var _micro = null;

+		if (valMic != null) {

+			_micro = canvas.echoPath == 0 ? Microphone.getMicrophone(valMic) : Microphone.getEnhancedMicrophone(valMic);

+			

+			if (_micro != null && canvas.echoPath == 256) {

+				var options:MicrophoneEnhancedOptions = new MicrophoneEnhancedOptions();

+				options.mode = MicrophoneEnhancedMode.FULL_DUPLEX;

+				options.echoPath = 256;

+				options.nonLinearProcessing = true;

+				_micro.enhancedOptions = options;

+				if ($debug) Debug.write("echoPath set to 256");

+				if ($debug) Debug.write(_micro.enhancedOptions);

+			}

+			

+			if (_micro != null) {

+				_micro.codec = SoundCodec.NELLYMOSER;

+				_micro.framesPerPacket = 1;

+				_micro.setSilenceLevel(0, 2000);

+				if ($debug) Debug.write("canvas.microphoneRateBest: ",canvas.microphoneRateBest);

+				_micro.rate = (canvas.microphoneRateBest == 'undefined') ? 22 : canvas.microphoneRateBest;

+				_micro.gain = 50;

+				// this has no effect if enhanced microphone is obtained

+				//Microphone setUseEchoSupression(bool)

+				var enableEchoSupression = !(canvas.echoSuppression === "false");

+				if ($debug) Debug.write("canvas.echoSuppression: ",canvas.echoSuppression);

+				_micro.setUseEchoSuppression(enableEchoSupression);

+			}

+		}

+		if ($debug) Debug.write("... getMic DONE", _micro);

+		return _micro;

+	]]>

+	</method>

+	

+	<method name="getCam" args="valCam,videoview">

+	<![CDATA[

+		if ($debug) Debug.write("Entering getCam ...", valCam);

+		var _camera = null;

+		if (valCam != null) {

+			_camera = Camera.getCamera(valCam);

+		}

+		if (_camera != null) {

+            if ($debug) Debug.write("videoview: ",videoview);

+			

+			if ($debug) Debug.write("_camera.setQuality BEST: ", canvas.isInterview, (canvas.bandwidthNeededBest*2), canvas.camQualityBest);

+			if (canvas.isInterview) {

+				//we need a fixed frame rate for the videos to merge them later on

+				_camera.setMode(videoview.width, videoview.height, 24, true);

+				if ($debug) Debug.warn("IS INTERVIEW ");

+				_camera.setQuality(0, 98);

+			} else {

+				if ($debug) Debug.write("_camera.setMode: ",videoview.width,videoview.height,canvas.framesPerSecond,true);

+				_camera.setMode(videoview.width, videoview.height, canvas.framesPerSecond, true);

+				if ($debug) Debug.warn("IS NO INTERVIEW ");

+				_camera.setQuality(canvas.bandwidthNeededBest, canvas.camQualityBest);

+			}

+		}

+		if ($debug) Debug.write("... getCam DONE", _camera);

+		return _camera;

+	]]>

+	</method>

+	

+	<method name="doStartConference">

+	<![CDATA[

+		if ($debug) Debug.write("doninitalize");

+		var settings = this.chosenSetting;

+		if (!canvas.isInterview) {

+			this.myvideocontainer.setDefaultVideoSize(this.cam_default_width, this.cam_default_height);

+		}

+		

+		var videoview = this.myvideocontainer._chatvideoinner._videostream;

+		if ($debug) Debug.write("this.myvideocontainer: ", this.myvideocontainer);

+		this.myvideocontainer.setAttribute('isremote',false);

+		var _micro = this.getMic(this.chosenMic);

+		var _camera = this.getCam(this.chosenCam, videoview);

+		if ($debug) Debug.write(_camera , _micro, settings);

+		

+		if ($debug) Debug.write("BroadcastId: ", this.currentClient.broadCastID);

+		switch (settings){

+			case "av":

+				videoview.broadcast(this.currentClient.broadCastID,_camera,_micro);

+				this.myvideocontainer.setAttribute("visible", true);

+				if(canvas.isInterview) {

+					canvas.videoComp_lc.send(canvas.videoComp_lc_name, "onStartBroadcast", this.currentClient.broadCastID, settings);

+				} else {

+					if (this.myvideocontainer.minimized) {

+						this.myvideocontainer.reminimize();

+					}

+				}

+				break;

+			case "a":

+				videoview.broadcast(this.currentClient.broadCastID,null,_micro);

+				this.myvideocontainer.setAttribute("visible", canvas.isInterview || !this.myvideocontainer.hidebyAudioOnly);

+				if(canvas.isInterview) {

+					canvas.videoComp_lc.send(canvas.videoComp_lc_name, "onStartBroadcast", this.currentClient.broadCastID, settings);

+				} else {

+					if (!this.myvideocontainer.hidebyAudioOnly) {

+						if (!this.myvideocontainer.minimized) {

+							this.myvideocontainer.minimize();

+						}

+					}

+				}

+				break;

+			case "v":

+				videoview.broadcast(this.currentClient.broadCastID,_camera,null);

+				this.myvideocontainer.setAttribute("visible", true);

+				if(canvas.isInterview) {

+					canvas.videoComp_lc.send(canvas.videoComp_lc_name, "onStartBroadcast", this.currentClient.broadCastID, settings);

+				} else {

+					if (this.myvideocontainer.minimized) {

+						this.myvideocontainer.reminimize();

+					}

+				}

+				break;

+			case "n":

+				if ($debug) Debug.write("Do not Publish A/V");

+				//Prevent from Hiding the Box in Event Modus

+				if (canvas.thishib.modus == "conference") {

+					this.myvideocontainer.setAttribute("visibility","hidden");

+				}

+				break;

+			default:

+				if ($debug) Debug.warn("no valid device Setup chosen");

+				break;

+		}

+		this.close();

+	]]>

+	</method>

+    

+	<method name="doStartRecording">

+	<![CDATA[

+		this._btnStartRecording.setAttribute("enabled",false);

+		this._play.setAttribute("enabled",false);

+		this.recordingsCounter = 5;

+		this._text.setAttribute("visibility","visible");

+		this._text._info.setAttribute("text","5 sec");

+		this.isRunning = true;

+		

+		var videoview = this._video.content._publisher._chatvideoinner._videostream;

+		var _micro = this.getMic(this.availableMics.getValue());

+		var _camera = this.getCam(this.availableCams.getValue(), videoview);

+		if ($debug) Debug.write(_camera, _micro);

+		

+		if ($debug && _camera != null) Debug.warn("_camera.muted ", _camera.muted);

+		if ($debug && _micro != null) Debug.warn("_micro.muted ", _micro.muted);

+		if ((_camera != null && !_camera.muted) || (_camera == null && _micro != null)) {

+			this.startTimer();

+		}

+		

+		//start recording of client stream

+		var t = new Date();

+		this.lastRecorded = "TEST_SETUP_"+t.getTime();

+		this._video.content._publisher.setAttribute("visibility","visible");

+		this._video.content._viewer.setAttribute("visibility","hidden");

+		videoview.record(this.lastRecorded,_camera,_micro);

+	]]>

+	</method>

+    

+    <method name="doPlay">

+    	<![CDATA[

+    	   if (this.lastRecorded == "") {

+    	   	   //Error - nothing recorded yet

+    	   	   if ($debug) Debug.warn("Nothing to Play");

+    	   } else {

+    	   	   this._play.setAttribute("enabled",true);

+    	   	   this._video.content._publisher.setAttribute("visibility","hidden");

+               this._video.content._viewer.setAttribute("visibility","visible");

+               var videoview = this._video.content._viewer._chatvideoinner._videostream;

+               videoview.justPlayStream(this.lastRecorded+".flv",0);

+    	   }

+    	]]>

+    </method>

+    

+    <method name="doStop">

+    	if (this.isRunning) {

+    		this.isRunning = false;

+    		var videoview = this._video.content._publisher._chatvideoinner._videostream;

+    		this._btnStartRecording.setAttribute("enabled",true);

+    		videoview._stop();

+    		this.doPlay();

+    	}

+    	var videoviewViewer = this._video.content._viewer._chatvideoinner._videostream;

+        videoviewViewer._stop();

+    </method>

+

+    <animator name="_chooseDeviceAnimation" started="false" attribute="y" to="40" duration="750" />

+    

+    

+    <labelText fontstyle="bold" labelid="758"

+			   width="${ parent.width-2 }" height="30" multiline="true" y="20" /> 

+

+    <labelText labelid="447" fontsize="11" fontstyle="bold" x="10" y="80" width="$once{ parent.width-20 }" />

+

+	<resetCombobox fontsize="11" name="availableSettings" x="10" y="100" width="280" editable="false">

+		<handler name="onselect">

+		<![CDATA[

+			var camVisible = true;

+			var micVisible = true;

+			var textVisible = false;

+			switch (this.getValue()){

+				case "av":

+					break;

+				case "a":

+					camVisible = false;

+					break;

+				case "v":

+					micVisible = false;

+					break;

+				case "n":

+					camVisible = false;

+					micVisible = false;

+					textVisible = true;

+					break;

+				default:

+					if ($debug) Debug.warn("no valid device Setup chosen");

+					break;

+			}

+			this.parent.availableCamsLabel.setAttribute("visible", camVisible);

+			this.parent.availableCams.setAttribute("visible", camVisible);

+			this.parent._btnStartRecording.setAttribute("visible", camVisible || micVisible);

+			this.parent._video.setAttribute("visible", camVisible);

+			this.parent._play.setAttribute("visible", camVisible || micVisible);

+			this.parent._level_meter.setAttribute("visible", micVisible);

+			this.parent.availableMicsLabel.setAttribute("visible", micVisible);

+			this.parent.availableMics.setAttribute("visible", micVisible);

+			this.parent.infoTextNoAV.setAttribute("visible", textVisible);

+			this.parent.availibleResolutionsLabel.setAttribute("visible", ((canvas.isInterview) ? false : camVisible));

+			this.parent.availibleResolutionsWarning.setAttribute("visible", ((canvas.isInterview) ? false : camVisible));

+			this.parent.availibleResolutions.setAttribute("visible", ((canvas.isInterview) ? false : camVisible));

+		]]>

+		</handler>

+	</resetCombobox>

+    

+    <attribute name="executeAttachCamera" value="false" type="boolean" />

+

+	<method name="getStoredProp" args="prop">

+		//Initialize and get eventually stored property

+		var t:SharedObject = SharedObject.getLocal('userdata');

+		var g = t.data;

+		return g != null ? "" + g[prop] : null;

+	</method>

+	

+	<method name="fillDeviceList" args="list,combo,prop">

+	<![CDATA[

+		//Initialize and get eventually stored property

+		var dev = getStoredProp(prop);

+		

+		//Get all availible devices

+		var foundStoredDev = null;

+		for (var eg = 0; eg < list.length; ++eg) {

+			combo.addItem(list[eg], eg);

+			var r = "" + eg;

+			if (r == dev) {

+				foundStoredDev = r;

+			}

+		}

+		return foundStoredDev;

+	]]>

+	</method>

+	

+	<method name="selectListItem" args="combo,selected,select">

+		if (selected != null) {

+			combo.selectItem(selected);

+		} else {

+			if (select) {

+				combo.selectItemAt(0);

+			}

+		}

+	</method>

+	

+    <!-- 

+        Initialize the default settings for cam and resolution and attach the camera 

+        after we have made sure the values are there one time

+     -->

+	<method name="initItemsAndDefaultAttachCamera">

+	<![CDATA[

+		//fill list of Cameras

+		var cameras = Camera.names;

+		var foundStoredCam = fillDeviceList(cameras, availableCams, "cam");

+		selectListItem(availableCams, foundStoredCam, cameras.length > 0);

+		

+		//fill list of Mics

+		var mics = Microphone.names;

+		var foundStoredMic = fillDeviceList(mics, availableMics, "mic");

+		selectListItem(availableMics, foundStoredMic, mics.length > 0);

+

+		// settings

+		var addCams = canvas.userobject.canVideo && !canvas.currentRoomObject.isAudioOnly && cameras.length > 0;

+		var addMics = mics.length > 0;

+		if (addCams && addMics) {

+			availableSettings.addItem(canvas.getLabelName(448), "av");

+		}

+		if (addMics) {

+			availableSettings.addItem(canvas.getLabelName(449), "a");

+		}

+		if (addCams) {

+			availableSettings.addItem(canvas.getLabelName(450), "v");

+		}

+		availableSettings.addItem(canvas.getLabelName(451), "n");

+		

+		var avstored = getStoredProp("avstored");

+		

+		if (availableSettings.getItem(avstored) != null) {

+			availableSettings.selectItem(avstored);

+		} else {

+			availableSettings.selectItemAt(0);

+		}

+

+		//Initialize and set default resolutions combobox

+		if ($debug) Debug.write("myConfigSet 1 ", canvas.myConfigSet);

+		if ($debug) Debug.write("myConfigSet 2 ", canvas.myConfigSet.getPointer().xpathQuery('config/availableCameraResolutions/resolution'));

+		if ($debug) Debug.write("myConfigSet 3 ", canvas.myConfigSet.getPointer().xpathQuery('config/availableCameraResolutions/resolution/'));

+		if ($debug) Debug.write("myConfigSet 4 ", canvas.myConfigSet.getPointer().xpathQuery('config/availableCameraResolutions/resolution/*'));

+		

+		this.executeAttachCamera = true;

+		

+		this.attachCamera();

+	]]>

+	</method>

+	

+	<method name="attachCamera">

+	    <![CDATA[

+		    //if the user has configured this box to auto-close, do not try to

+		    //attach the cam to the preview (black) box

+		    var sharedData = this.checkDeviceSettingsRememberStatus();

+	        if(sharedData != null) {

+	            return;

+	        }

+	        

+	        //Don't execute before combobox items are not initialized

+	        if (!this.executeAttachCamera) {

+	            if ($debug) Debug.write("Return, executeAttachCamera is false");

+                return;

+	        }

+		

+			if (_video == undefined)  {

+			    if ($debug) Debug.write("Return, video video not yet ready");

+                return;

+			}

+			_video.content._publisher.setAttribute("visibility", "visible");

+			_video.content._viewer.setAttribute("visibility", "hidden");

+			var videoview = this._video.content._publisher._chatvideoinner._videostream;

+			var _camera = getCam(availableCams.getValue(), videoview);

+			if (_camera != null) {

+			    //stop will not call clear as there is no NetStream

+				videoview._stop();

+				videoview.clear();

+				videoview.attachCamera(_camera);

+			}

+		]]>

+	</method>

+	

+	<method name="cleanVideos">

+	   if (_video == undefined) return;

+	   //make sure stop and clear is called, as the _stop method does not work for all

+	   //videoviews in the device settings.

+	   _video.content._publisher._chatvideoinner._videostream._stop();

+       _video.content._viewer._chatvideoinner._videostream._stop();

+       _video.content._publisher._chatvideoinner._videostream.clear();

+       _video.content._viewer._chatvideoinner._videostream.clear();

+       if ($debug) Debug.write("Cleaned up videos and free resources");

+	</method>

+	

+    <labelText name="availableCamsLabel" labelid="52" fontsize="11" x="10" y="140" width="$once{ parent.width-20 }" />

+    <resetCombobox fontsize="11" name="availableCams" x="10" y="160" width="280" editable="false">

+		<handler name="onselect">

+			parent.attachCamera();

+		</handler>

+    </resetCombobox>

+

+    <labelText name="availableMicsLabel" labelid="53" fontsize="11" x="10" y="180" width="$once{ parent.width-20 }" />

+    <resetCombobox fontsize="11" name="availableMics"  x="10" y="200" width="280" editable="false" />

+

+    <labelText name="infoTextNoAV" labelid="452" multiline="true" width="280" 

+               fontsize="11" x="10" y="130" visibility="hidden" />

+               

+    <labelText name="availibleResolutionsLabel" labelid="1429" 

+            fontsize="11" x="10" y="224" width="$once{ parent.width-20 }" />

+            

+    <view name="availibleResolutionsWarning" x="272" y="224" 

+            resource="warning_icon_popup_devices_rsc" clickable="true">

+        <labelTooltip multiline="true" labelid="1430" />

+    </view>     

+    

+    <resetCombobox fontsize="11" name="availibleResolutions" x="10" shownitems="10"

+                y="244" width="280" editable="false">

+        <!--- @keywords private -->

+        <attribute name="counter" value="0" />

+		<handler name="onselect" args="item">

+		<![CDATA[

+			if (!canvas.isInterview) {

+				if ($debug) Debug.write("onselect w ", item.cam_width);

+				if ($debug) Debug.write("onselect h ", item.cam_height);

+				parent.setAttribute("cam_default_width",item.cam_width);

+				parent.setAttribute("cam_default_height",item.cam_height);

+				

+				if (item.cam_width > 240) {

+					var newWidth = 600 + item.cam_width - 240;

+					if (newWidth+parent.x+10 > canvas.width) {

+						newWidth = canvas.width - 10 - this.x;

+					}

+					parent.setAttribute("width",newWidth);

+				} else {

+					parent.setAttribute("width",600);

+				}

+				

+				if (item.cam_height > 180) {

+					var newHeight = 500 + item.cam_height - 180;

+					if (newHeight+parent.y+10 > canvas.height) {

+						newHeight = canvas.height - 10 - parent.y;

+					}

+					parent.setAttribute("height",newHeight);

+				} else {

+					parent.setAttribute("height",500);

+				}

+			}

+			parent.attachCamera();

+		]]>

+		</handler>

+        <textlistitem datapath="myConfigSet:/config/availableCameraResolutions/resolution" >

+            <switch>

+	            <when property="$as3">

+	                <passthrough>

+	                    import flash.net.SharedObject;

+	                </passthrough>

+	            </when>

+	        </switch>

+            <attribute name="cam_width" value="320" type="number" />

+            <attribute name="cam_height" value="240" type="number" />

+            <handler name="ondata">

+                <![CDATA[

+                    // if ($debug) Debug.write("ondata ", this);

+                    var type = this.datapath.xpathQuery('@type');

+                    this.cam_width = Number(this.datapath.xpathQuery('@width'));

+                    this.cam_height = Number(this.datapath.xpathQuery('@height'));

+                    this.setAttribute("text",""+this.cam_width+"x"+this.cam_height+" ["+type+"]");

+                    var isDefault = this.datapath.xpathQuery('@isDefault');

+                    

+                    var t:SharedObject = SharedObject.getLocal('userdata');

+                    var g = t.data;

+                    var width = g["width"];

+                    var height = g["height"];

+                    if (width!=null && width > 0 && height!=null && height>0) {

+                        if (width == this.cam_width && height == this.cam_height) {

+                            parent.selectItemAt(parent.counter);

+                            parent.onselect.sendEvent(this);

+                        }

+                    } else {

+                        if (isDefault == "true") {

+                            if ($debug) Debug.write("Found default one ",type);

+                            parent.selectItemAt(parent.counter);

+                            parent.onselect.sendEvent(this);

+                        }

+                    }

+                    parent.counter+=1;

+                ]]>

+            </handler>

+        </textlistitem>

+    </resetCombobox>      

+    

+    <simpleLabelButton name="_btnStartRecording" labelid="775" 

+    				   width="140" x="150" y="280" height="28">

+    	<handler name="onclick">

+            parent._level_meter.startLevel();

+            parent.doStartRecording();

+        </handler>

+    </simpleLabelButton>

+    

+	<view x="340" y="60" name="_video" clip="true" 

+			width="${ parent.width-this.x-10 }" height="${ parent.height-260 }"> 

+		<view name="content">

+		

+			<videoObjectTestBroadcast name="_publisher"  

+					width="${ parent.parent.parent.cam_default_width }" 

+					height="${ parent.parent.parent.cam_default_height }">

+				<handler name="sendCameraStatus" args="camStatus">

+		            if ($debug) Debug.write("sendCameraStatus -1- ",camStatus);

+		            if (camStatus == "Camera.Unmuted") {

+		            	parent.parent.parent.startTimerToCount();

+		            }

+		        </handler>

+		        

+		        <handler name="sendMicroStatus" args="micStatus">

+		            if ($debug) Debug.write("sendMicroStatus -1- ",micStatus);

+		            if (micStatus == "Microphone.Unmuted") {

+		                parent.parent.parent.startTimerToCount();

+		            }

+		        </handler>

+			</videoObjectTestBroadcast>

+			

+			<videoObjectPlayTestBroadcast name="_viewer" visibility="hidden" 

+						width="${ parent.parent.parent.cam_default_width }" 

+						height="${ parent.parent.parent.cam_default_height }" />

+		</view>

+		

+		<om_vscrollbar />

+		<om_hscrollbar />

+	</view>

+	

+								  

+	<view name="_text" x="340" y="60" width="240" height="180" visibility="hidden">

+		<text name="_info" resize="true" bgcolor="0xFFFFFF" align="right"

+			  fontsize="12" fontstyle="bold" />

+	</view>

+    

+    <simpleLabelButton name="_play" y="${ parent.height-166 }" x="490" enabled="false"

+                	width="90" labelid="764" >

+        <handler name="onclick">

+            parent.doPlay();

+        </handler>

+    </simpleLabelButton>

+     

+    <view name="_level_meter" x="340" y="${ parent.height-190 }" width="240" height="20" clip="true" bgcolor="0x000000">

+    	

+    	 <!--- Level delegate, used to track level changes. 

+              @keywords private -->

+        <attribute name="_leveldel" value="$once{new LzDelegate(this, '_updateLevel')}"/>

+    	

+    	<method name="_updateLevel" args="no">

+    		<![CDATA[

+    		    if (parent._video.content._publisher._chatvideoinner._videostream.micro == null)

+    		    {

+    		    	return;

+    		    }

+    		    this.setNewLevel(parent._video.content._publisher._chatvideoinner._videostream.micro.activityLevel);

+    		]]>

+    	</method>

+    	

+    	<method name="startLevel">

+    		this._leveldel.register(lz.Idle, "onidle");

+    	</method>

+    	

+    	<method name="resetNewLevel">

+    		this._leveldel.unregisterAll();

+    		this.setNewLevel(0);

+    	</method>

+    	

+    	<method name="setNewLevel" args="no">

+    		<![CDATA[

+                var newLevel = (238/100) * no;

+                this._over.setAttribute("width",238-newLevel);

+                this._over.setAttribute("x",1+(newLevel));

+            ]]>

+    	</method>

+    	

+    	<view name="_bg" width="238" height="18" x="1" y="1" bgcolor="0xFFFFFF" />

+    	<view name="_grip" resource="level_meter_rsc" x="1" y="1" />

+    	<view name="_over" width="238" height="18" x="1" y="1" bgcolor="0xFFFFFF" />

+    	<labelText labelid="767" x="2" y="2" height="16" width="236" resize="false" />

+    </view>

+    

+    <view y="${ parent.height-98 }" resource="test_setup_info_rsc" x="16" />

+    

+    <labelText fontstyle="bold" labelid="765" x="39" y="${ parent.height-100 }"

+               width="${ parent.width-50 }" multiline="true" />

+

+    <!-- Remember Me -->

+    <labelCheckbox name="holddatainSO" labelid="762" x="10" y="${ parent.height-20 }" >

+        <switch>

+            <when property="$as3">

+                <passthrough>

+                    import flash.net.SharedObject;

+                </passthrough>

+            </when>

+        </switch>

+        <handler name="oninit">

+            var t:SharedObject = SharedObject.getLocal('userdata');

+            var g = t.data;

+            var save = g["savecamdata"];

+            if ($debug) Debug.write("savecamdata save: ",save);

+            if(save) this.setValue(true);

+        </handler>

+    </labelCheckbox>

+

+    <simpleLabelButton fontsize="11" visibility="${ (canvas.isInterview) ? 'visible' : 'hidden' }"

+                       labelid="54" x="${ parent.width-220 }" y="${ parent.height-50 }" width="100">

+        <handler name="onclick">

+            parent.cleanVideos();

+            this.parent.storelocaldata();

+            this.parent.chosenCam = parent.availableCams.getValue();

+            this.parent.chosenMic = parent.availableMics.getValue();

+            this.parent.chosenSetting = parent.availableSettings.getValue();

+            this.parent.remoteMessage = new Array();

+            this.parent.remoteMessage[0] = 'avsettings';

+            this.parent.remoteMessage[1] = "0";

+            this.parent.remoteMessage[2] = this.parent.chosenSetting;

+            this.parent.getBroadCastId.doCall();

+        </handler>

+    </simpleLabelButton>

+

+    <simpleLabelButton fontsize="11" visibility="${ (canvas.isInterview) ? 'visible' : 'hidden' }"

+                       labelid="918" x="${ parent.width-110 }" y="${ parent.height-50 }" width="100">

+        <handler name="onclick">

+            parent.cleanVideos();

+            parent.close();

+        </handler>

+    </simpleLabelButton>

+

+    <simpleLabelButton fontsize="11" visibility="${ (!canvas.isInterview) ? 'visible' : 'hidden' }"

+    				   labelid="761" width="160" x="${ parent.width-170 }" y="${ parent.height-50 }" height="28">

+        <handler name="onclick">

+            parent.cleanVideos();

+        	this.parent.storelocaldata();

+        	this.parent.chosenCam = parent.availableCams.getValue();

+        	this.parent.chosenMic = parent.availableMics.getValue();

+        	this.parent.chosenSetting = parent.availableSettings.getValue();

+			this.parent.remoteMessage = new Array();

+			this.parent.remoteMessage[0] = 'avsettings';

+			this.parent.remoteMessage[1] = "0";

+			this.parent.remoteMessage[2] = this.parent.chosenSetting;

+            this.parent.getBroadCastId.doCall();

+        </handler>

+    </simpleLabelButton>

+

+</class>

+    

+</library>

diff --git a/WebContent/swf10/video/library.lzx b/WebContent/swf10/video/library.lzx
new file mode 100644
index 0000000..515567f
--- /dev/null
+++ b/WebContent/swf10/video/library.lzx
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+	<!--  FamFam Icon Creative Commons -->

+    <resource name="warning_icon_popup_devices_rsc" src="resources/error.png" />

+

+	<!--  APL author sebawagner -->

+	<resource name="chatbgitem" src="resources/profile_pic.jpg" />

+

+	<!--  FamFam Icon Creative Commons -->

+	<resource name="resyncuser_rsc" src="resources/arrow_refresh_small.png" />

+	

+	<!--  APL author sebawagner -->

+    <resource name="mic_rsc" src="resources/micro.png" />

+    

+    <!--  APL author sebawagner -->

+	<resource name="speaking" src="resources/speaking.png" />

+

+    <!--  IconFinder Creative Commons -->

+    <resource name="volume" src="resources/volume.png" />

+	

+	<!--  FamFam Icon Creative Commons -->

+	<resource name="mute_btn_rsc">

+		<frame src="resources/sound.png" />

+		<frame src="resources/sound_mute.png" />

+	</resource>

+	

+	<!--  APL author sebawagner -->

+    <resource name="mute_micro_btn_rsc">

+		<frame src="resources/mute_micro.png" />

+		<frame src="resources/mute_micro_red.png" />

+	</resource>

+

+	<!--  APL author sebawagner -->

+	<resource name="lz_recorder_play" src="resources/webstart_play.png" />

+

+    <include href="changeDevice.lzx" />

+    <include href="videoUserProfilePicSWF10.lzx" />

+    <include href="editRecordStreamSWF10.lzx" />

+    <include href="baseVideoObject.lzx" />

+    <include href="videoObjectPlayBroadcast.lzx" />

+    <include href="videoObjectTestBroadcast.lzx" />

+    <include href="videoObjectPlayTestBroadcast.lzx" />

+    <include href="volumeSlider.lzx" />

+    

+</library>

diff --git a/WebContent/swf10/video/resources/arrow_refresh_small.png b/WebContent/swf10/video/resources/arrow_refresh_small.png
new file mode 100644
index 0000000..d3087df
--- /dev/null
+++ b/WebContent/swf10/video/resources/arrow_refresh_small.png
Binary files differ
diff --git a/WebContent/swf10/video/resources/error.png b/WebContent/swf10/video/resources/error.png
new file mode 100644
index 0000000..628cf2d
--- /dev/null
+++ b/WebContent/swf10/video/resources/error.png
Binary files differ
diff --git a/WebContent/swf10/video/resources/micro.fla b/WebContent/swf10/video/resources/micro.fla
new file mode 100644
index 0000000..0631ad2
--- /dev/null
+++ b/WebContent/swf10/video/resources/micro.fla
Binary files differ
diff --git a/WebContent/swf10/video/resources/micro.png b/WebContent/swf10/video/resources/micro.png
new file mode 100644
index 0000000..9e025d4
--- /dev/null
+++ b/WebContent/swf10/video/resources/micro.png
Binary files differ
diff --git a/WebContent/swf10/video/resources/mute_micro.fla b/WebContent/swf10/video/resources/mute_micro.fla
new file mode 100644
index 0000000..210ddbf
--- /dev/null
+++ b/WebContent/swf10/video/resources/mute_micro.fla
Binary files differ
diff --git a/WebContent/swf10/video/resources/mute_micro.png b/WebContent/swf10/video/resources/mute_micro.png
new file mode 100644
index 0000000..71efdbe
--- /dev/null
+++ b/WebContent/swf10/video/resources/mute_micro.png
Binary files differ
diff --git a/WebContent/swf10/video/resources/mute_micro_red.fla b/WebContent/swf10/video/resources/mute_micro_red.fla
new file mode 100644
index 0000000..287c2a0
--- /dev/null
+++ b/WebContent/swf10/video/resources/mute_micro_red.fla
Binary files differ
diff --git a/WebContent/swf10/video/resources/mute_micro_red.png b/WebContent/swf10/video/resources/mute_micro_red.png
new file mode 100644
index 0000000..29e16b5
--- /dev/null
+++ b/WebContent/swf10/video/resources/mute_micro_red.png
Binary files differ
diff --git a/WebContent/swf10/video/resources/profile_pic.jpg b/WebContent/swf10/video/resources/profile_pic.jpg
new file mode 100644
index 0000000..3b63f01
--- /dev/null
+++ b/WebContent/swf10/video/resources/profile_pic.jpg
Binary files differ
diff --git a/WebContent/swf10/video/resources/sound.png b/WebContent/swf10/video/resources/sound.png
new file mode 100644
index 0000000..6056d23
--- /dev/null
+++ b/WebContent/swf10/video/resources/sound.png
Binary files differ
diff --git a/WebContent/swf10/video/resources/sound_mute.png b/WebContent/swf10/video/resources/sound_mute.png
new file mode 100644
index 0000000..b652d2a
--- /dev/null
+++ b/WebContent/swf10/video/resources/sound_mute.png
Binary files differ
diff --git a/WebContent/swf10/video/resources/speaking.png b/WebContent/swf10/video/resources/speaking.png
new file mode 100644
index 0000000..2ca21a7
--- /dev/null
+++ b/WebContent/swf10/video/resources/speaking.png
Binary files differ
diff --git a/WebContent/swf10/video/resources/volume.png b/WebContent/swf10/video/resources/volume.png
new file mode 100644
index 0000000..1b0dbc5
--- /dev/null
+++ b/WebContent/swf10/video/resources/volume.png
Binary files differ
diff --git a/WebContent/swf10/video/resources/webstart_play.png b/WebContent/swf10/video/resources/webstart_play.png
new file mode 100644
index 0000000..6d13683
--- /dev/null
+++ b/WebContent/swf10/video/resources/webstart_play.png
Binary files differ
diff --git a/WebContent/swf10/video/videoObjectPlayBroadcast.lzx b/WebContent/swf10/video/videoObjectPlayBroadcast.lzx
new file mode 100644
index 0000000..d162445
--- /dev/null
+++ b/WebContent/swf10/video/videoObjectPlayBroadcast.lzx
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 

+	license agreements. See the NOTICE file distributed with this work for additional 

+	information regarding copyright ownership. The ASF licenses this file to 

+	you under the Apache License, Version 2.0 (the "License"); you may not use 

+	this file except in compliance with the License. You may obtain a copy of 

+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 

+	by applicable law or agreed to in writing, software distributed under the 

+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 

+	OF ANY KIND, either express or implied. See the License for the specific 

+	language governing permissions and limitations under the License. -->

+<library>

+

+	<!--- Contains no microphone or camera Object, this view can only subscribe 

+		to a video or live-stream -->

+	<class name="videoObjectPlayBroadcast" extends="baseVideoObject"

+		isremote="true">

+		<attribute name="interviewPodId" value="-1" />

+		<attribute name="ratioW" value="1" />

+		<attribute name="ratioH" value="1" />

+

+		<attribute name="videoInsetX" value="2" type="number" />

+		<attribute name="videoInsetY" value="21" type="number" />

+		<attribute name="bottomBarHeight" value="0" type="number" />

+

+		<handler name="oninit">

+		<![CDATA[

+			if ($debug) Debug.write("Init videoObjectPlayBroadcast ",this.isremote,this.clientVars);

+			//Display widget defined in mother class

+			this._loudness.bringToFront();

+			this._resizeview.bringToFront();

+		]]>

+		</handler>

+

+		<!--- Change the video resolution by chaning pod size -->

+		<method name="setDefaultVideoSize" args="w,h">

+			this.initRatio = w / h;

+			this.setAttribute("width",w+this.videoInsetX);

+

+			if (canvas.currentRoomObject.showMicrophoneStatus) {

+				this.setAttribute("bottomBarHeight",this._innertop.height + 1);

+			}

+

+			this.setAttribute("height",h+this.videoInsetY+this.bottomBarHeight);

+		</method>

+

+		<view name="_chatvideoinner" x="$once{ parent.videoInsetX-1 }" y="$once{ parent.videoInsetY-1 }"

+			height="${parent.height-parent.videoInsetY-parent.bottomBarHeight}"

+			width="${parent.width-parent.videoInsetX}">

+

+			<attribute name="initH" />

+			<attribute name="initW" />

+

+			<handler name="oninit">

+				this.r.setAttribute('frame',5);

+				this.initH =

+				this.height;

+				this.initW = this.width;

+			</handler>

+

+			<view name="r"></view>

+

+			<baseVideoStreamDevice name="_videostream"

+				bgcolor="black" width="${parent.width}" height="${parent.height}">

+				<handler name="onlevel">

+					var fullLength = parent.height-24;

+					parent._activityLevel.setAttribute("height",-this.level*(fullLength/100));

+				</handler>

+			</baseVideoStreamDevice>

+

+			<view name="_activityLevel" width="6" x="2" y="${parent.height}"

+				opacity="0.5" bgcolor="0x00FF00" height="0" />

+		</view>

+	</class>

+</library>

diff --git a/WebContent/swf10/video/videoObjectPlayTestBroadcast.lzx b/WebContent/swf10/video/videoObjectPlayTestBroadcast.lzx
new file mode 100644
index 0000000..e989ae5
--- /dev/null
+++ b/WebContent/swf10/video/videoObjectPlayTestBroadcast.lzx
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+

+<!---

+	contains microphone and camera for broadcasting,

+	this class is used only in Meetings-Modus

+ -->

+

+ 

+<class name="videoObjectPlayTestBroadcast" extends="view" >

+

+	<view name="_chatvideoinner" x="0" y="0" height="${parent.height}" width="${parent.width}">

+		

+		<baseVideoStream name="_videostream" mode="broadcast"

+						 width="${parent.width}" height="${parent.height}" bgcolor="0x000000" />

+		

+	</view>	

+</class>

+

+

+</library>

diff --git a/WebContent/swf10/video/videoObjectTestBroadcast.lzx b/WebContent/swf10/video/videoObjectTestBroadcast.lzx
new file mode 100644
index 0000000..2fff0a2
--- /dev/null
+++ b/WebContent/swf10/video/videoObjectTestBroadcast.lzx
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+

+<!---

+	contains microphone and camera for broadcasting,

+	this class is used only in Meetings-Modus

+ -->

+

+ 

+<class name="videoObjectTestBroadcast" extends="view" >

+

+    <event name="sendCameraStatus" />

+    

+    <event name="sendMicroStatus" />

+    

+	<view name="_chatvideoinner" x="0" y="0" height="${parent.height}" width="${parent.width}">

+		

+		<baseVideoStreamDevice name="_videostream" mode="broadcast" sendNotificationViaLocalConnection="false"

+						 width="${parent.width}" height="${parent.height}" bgcolor="0x000000">

+			<handler name="sendCameraStatus" args="camStatus">

+                if ($debug) Debug.write("sendCameraStatus",camStatus);

+                parent.parent.sendCameraStatus.sendEvent(camStatus);

+            </handler>

+            

+            <handler name="sendMicroStatus" args="micStatus">

+                if ($debug) Debug.write("sendMicroStatus",micStatus);

+                parent.parent.sendMicroStatus.sendEvent(micStatus);

+            </handler>

+		</baseVideoStreamDevice>

+		

+	</view>	

+</class>

+

+

+</library>

diff --git a/WebContent/swf10/video/videoUserProfilePicSWF10.lzx b/WebContent/swf10/video/videoUserProfilePicSWF10.lzx
new file mode 100644
index 0000000..2a7797b
--- /dev/null
+++ b/WebContent/swf10/video/videoUserProfilePicSWF10.lzx
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<class name="videoUserProfilePicSWF10" extends="view" x="1" y="2" width="${parent.width-2}" height="${parent.height-3}" 

+	   clip="true" bgcolor="white">

+	<attribute name="value" value="null" />

+		

+	<handler name="oninit">

+	<![CDATA[

+		var extra = value.sipTransport ? "&parentPath=../default&moduleName=videoconf1"

+			: '&parentPath=&moduleName=remoteuserprofile&remoteUserid='+this.value.user_id;

+

+		this._userpic.setAttribute('src', canvas.getPictureUrl(value.picture_uri, extra));

+	]]>

+	</handler>	

+	<image name="_userpic" stretches="both" width="${parent.width}" height="${parent.height}" />

+</class>

+

+</library>

diff --git a/WebContent/swf10/video/volumeSlider.lzx b/WebContent/swf10/video/volumeSlider.lzx
new file mode 100644
index 0000000..8c2d35b
--- /dev/null
+++ b/WebContent/swf10/video/volumeSlider.lzx
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+

+      http://www.apache.org/licenses/LICENSE-2.0

+

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+

+-->

+<library>

+

+<class name="VolumeSlider" extends="closableView" clickable="true" height="120">

+

+    <switch>

+    <when property="$as3">

+        <passthrough>

+            import flash.net.*;

+            import flash.media.*;

+        </passthrough>

+    </when>

+    </switch>

+

+    <attribute name="videoStream" value="null" />

+    <attribute name="ownStream" type="boolean" value="false" />

+    <attribute name="resizing" type="boolean" value="false" />

+

+    <attribute name="videoObject" value="null" />

+    <attribute name="initialNumber" value="50" type="number"/>

+    <attribute name="maxvalue" value="100" type="number" />

+

+    <dragHelper name="dragHelper"/>

+

+    <handler name="oninit">

+        dragHelper.create();

+    </handler>

+

+    <handler name="ondestroy">

+        dragHelper.remove();

+    </handler>

+

+    <!--- @keywords private -->

+    <method name="passModeEvent" args="eventStr,view" >

+        <![CDATA[

+        if (eventStr == "onmousedown") {

+            if (null != view) {

+                if (!view.childOf(this)) {

+                    this.close();

+                }

+            } else {

+                this.close();

+            }

+        }

+        if (view && view.childOf(this)) {

+            if (view[eventStr]) {

+                view[eventStr].sendEvent(view);

+            }

+            return false;

+        }

+        return true;

+        ]]>

+    </method>

+

+    <vslider name="_slider" height="$once{parent.height}" y="10" x="0" minvalue="0" maxvalue="100"

+        initvalue="$once{parent.initialNumber}" showrange="false" showvalue="false" switchaxis="true">

+        <handler name="onvalue" args="v">

+            if ($debug) Debug.write("onvalue", v);

+

+            parent.videoObject.setStreamVolume(Number(v));

+        </handler>

+        <handler name="onvalueChosenFinal">

+            parent.close();

+        </handler>

+    </vslider>

+

+</class>

+

+</library>

diff --git a/WebContent/swf10/whiteboard/library.lzx b/WebContent/swf10/whiteboard/library.lzx
new file mode 100644
index 0000000..ebb556b
--- /dev/null
+++ b/WebContent/swf10/whiteboard/library.lzx
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+    <include href="playBackWhiteboardVideo.lzx" />

+    

+</library>

diff --git a/WebContent/swf10/whiteboard/playBackWhiteboardVideo.lzx b/WebContent/swf10/whiteboard/playBackWhiteboardVideo.lzx
new file mode 100644
index 0000000..8dc7194
--- /dev/null
+++ b/WebContent/swf10/whiteboard/playBackWhiteboardVideo.lzx
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<library>

+

+<!---

+    The playBackVideoStream is used in the recording playerback to show the video

+ -->

+<class name="playBackWhiteboardVideo" extends="baseVideoStream" bgcolor="0x000000">

+	

+	<attribute name="timerDelegate" value="null"/>

+    <attribute name="timerDelegateStarted" value="false" type="boolean"/>

+    

+    <handler name="oninit">

+        this.timerDelegate = new LzDelegate( this, "calcProgressBar" );

+    </handler>

+    

+    <method name="playVideoStream" args="streamName,delay">

+        this.playStream(streamName,delay);

+        this.timerDelegateStarted = true;

+        lz.Timer.addTimer( this.timerDelegate , 1000 );

+    </method>

+    

+    <method name="stopVideo">

+        this._stop();

+        lz.Timer.removeTimer(this.timerDelegate);

+        this.timerDelegateStarted = false;

+    </method>

+	

+	<handler name="onNetStatus" args="info">

+        //if ($debug) Debug.write("onNetStatus ",info);

+        if (info.code ==  "NetStream.Play.Stop" ) {

+        	if ($debug) Debug.write("-- stopStream");

+            //parent.parent.stopStream();

+            canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'stopRecordingStream', this.name);

+        }

+    </handler>

+    <handler name="onMetaDataEvent" args="info">

+        //if ($debug) Debug.warn("onMetaData ",info);

+        //if ($debug) Debug.write("parent.parent.deltaInSeconds ",Number(info.duration));

+        //parent.parent.deltaInSeconds = Number(info.duration);

+        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'metaWhiteboardPlaybackStream', this.name, Number(info.duration));

+    </handler>

+    

+    <method name="calcProgressBar" args="tObjRef">

+        //if ($debug) Debug.write("calcProgressBar updateRecordingStreamTime",this._ns.time)

+        canvas.videoComp_lc.send(canvas.videoComp_lc_name, 'updateWhiteboardStreamTime',this.name, this._ns.time);

+        if (this.timerDelegateStarted) {

+            lz.Timer.addTimer( this.timerDelegate , 1000 );

+        }

+    </method>

+	

+</class>

+

+</library>
\ No newline at end of file
diff --git a/build-jaudiotagger.xsl b/build-jaudiotagger.xsl
new file mode 100644
index 0000000..210533c
--- /dev/null
+++ b/build-jaudiotagger.xsl
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

+ <xsl:output omit-xml-declaration="no"/>

+    <xsl:template match="node()|@*">

+      <xsl:copy>

+         <xsl:apply-templates select="node()|@*"/>

+      </xsl:copy>

+    </xsl:template>

+

+    <xsl:template match="//*[@id='mp4reader.impl']"/>

+    <xsl:template match="//*[@id='mp3reader.impl']"/>

+</xsl:stylesheet>

diff --git a/build.properties b/build.properties
new file mode 100644
index 0000000..7f90ec1
--- /dev/null
+++ b/build.properties
@@ -0,0 +1,24 @@
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+project.version=3.0.8
+project.status=SNAPSHOT
+project.distname=openmeetings
+ivy.install.version=2.4.0
+maven.version=3.2.5
+red5.server.version=1.0.6-RELEASE
+laszlo.proxied=solo
+wicket.mode=DEPLOYMENT
+backup.file.list=backup_v_1_4_rc1_r3326.zip,backup_v_1_5_rc1_r3393.zip,backup_v_1_6_2_r3675.zip,backup_v_1_7_0_r3822.zip,backup_v_1_8_8_r4555.zip,backup_v_1_9_1_r4707.zip,backup_v_2_0_0_r1361497.zip,backup_v_3_0_0_r1573585.zip
+db=derby
+screensharing.keystore.password=secret
+screensharing.keystore.alias=screen
+rtmp.max.time=5000
diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000..fe62a92
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,1495 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+ -->
+<!DOCTYPE project>
+<project name="openmeetings" basedir="./" default="dist"
+	xmlns="antlib:org.apache.tools.ant"
+	xmlns:rat="antlib:org.apache.rat.anttasks"
+	xmlns:ivy="antlib:org.apache.ivy.ant"
+	xmlns:artifact="antlib:org.apache.maven.artifact.ant"
+	>
+	<loadproperties srcFile="build.properties" />
+
+	<property name="jar.suffix" value="${project.version}-${project.status}" />
+	<property environment="env" />
+
+	<property name="src.base.dir" value="${basedir}/src" />
+
+	<property name="dist.dir" value="${basedir}/dist" />
+
+	<property name="build.base.dir" value="${basedir}/build" />
+	<property name="project.lib.dir" value="${build.base.dir}/lib" />
+	<property name="ivy.jar.path" value="${project.lib.dir}/ivy-${ivy.install.version}.jar" />
+	<property name="mainlibs.lib.dir" value="${project.lib.dir}/mainlibs" />
+	<property name="om.lib.dir" value="${project.lib.dir}/om" />
+	<property name="anakia.lib.dir" value="${project.lib.dir}/anakia" />
+	<property name="webcontent.base.dir" value="${basedir}/WebContent" />
+	
+	<property name="screenshare.resources.dir" value="${src.base.dir}/screenshare/resources" />
+	<property name="axis.resources.dir" value="${src.base.dir}/axis/resources" />
+	
+	<property name="webapp.dir" value="${src.base.dir}/main/webapp" />
+	<property name="junit.lib.dir" value="${project.lib.dir}/junit" />
+	<property name="junit.backups.dir" value="${junit.lib.dir}/backups" />
+	<property name="rat.lib.dir" value="${project.lib.dir}/rat" />
+	<property name="dtd-generator.lib.dir" value="${project.lib.dir}/dtd-generator" />
+	<property name="svntask.lib.dir" value="${project.lib.dir}/svntask" />
+
+	<property name="red5.server.dir" value="${build.base.dir}/red5/server" />
+	<property name="red5.client.dir" value="${build.base.dir}/red5/client" />
+	<property name="red5.lib" value="${red5.server.dir}/dist" />
+	<property name="red5.server.lib" value="${red5.lib}/lib" />
+	<property name="red5.client.lib" value="${red5.client.dir}/dist" />
+	<property name="red5.root" value="${dist.dir}/red5" />
+	<property name="dist.webapps.dir" value="${red5.root}/webapps/${project.distname}" />
+	<property name="dist.classes.dir" value="${dist.webapps.dir}/WEB-INF/classes" />
+	<property name="dist.persistence.dir" value="${dist.classes.dir}/META-INF/" />
+	<property name="docs.src" value="${basedir}/xdocs" />
+	<property name="docs.dest" value="${dist.webapps.dir}/docs" />
+
+	<property name="laszlo.home" value="${build.base.dir}/openlaszlo" />
+	<property name="laszlo46.home" value="${build.base.dir}/openlaszlo46" />
+
+	<!-- screenshare.out.dir -->
+	<property name="screenshare.out.dir" value="${dist.webapps.dir}/screensharing" />
+	
+	<condition property="junit.run.selenium" value="true" else="false">
+		<isset property="selenium" />
+	</condition>
+
+	<property name="main.out.dir" value="${build.base.dir}/classes/openmeetings" />
+
+	<!-- LPS Properties -->
+	<property name="out.dir.swf" value="${dist.webapps.dir}/public" />
+	<property name="laszlo.as3.src.dir" value="${webcontent.base.dir}/swf10" />
+	<property name="laszlo.src.dir" value="${webcontent.base.dir}/src" />
+
+	<property name="keystore.file" value="${build.base.dir}/screensharing_sign.keystore" />
+
+	<property name="junit.base.dir" value="${build.base.dir}/junit" />
+	<property name="junit.report.dir" value="${junit.base.dir}/report" />
+	<property name="om.dist.webapp" value="${red5.root}/webapps/${project.distname}" />
+	<tstamp prefix="build">
+		<format property="TODAY" pattern="d-MMMM-yyyy" locale="en" />
+	</tstamp>
+
+	<path id="laszlo.lib">
+		<!-- swf8 -->
+		<fileset dir="${laszlo.home}/WEB-INF/lib" includes="saxon-6.5.3-lz-p1.jar jakarta-regexp-1.2.jar
+			commons-collections.jar jdom.jar log4j-1.2.6.jar lps-4.9.0.jar batik-all-flex.jar velocity-dep-1.4-flex.jar" />
+		<!-- swf10 -->
+		<fileset dir="${laszlo.home}/WEB-INF/lib" includes="mxmlc*.jar flex-messaging-common.jar swfutils.jar asc.jar
+			fxgutils.jar" />
+	</path>
+
+	<path id="laszlo46.lib">
+		<fileset dir="${laszlo46.home}/WEB-INF/lib" includes="*.jar" />
+	</path>
+	
+	<!-- compile classpath -->
+	<path id="check.classpath">
+		<fileset dir="${red5.lib}" includes="*.jar" />
+		<fileset dir="${red5.server.lib}" includes="*.jar" />
+		<fileset dir="${red5.client.lib}" includes="red5-client*.jar" />
+		<fileset dir="${mainlibs.lib.dir}" includes="*.jar" />
+		<fileset dir="${om.lib.dir}" includes="*.jar" />
+		<fileset dir="${junit.lib.dir}" includes="*.jar" />
+		<fileset dir="${dtd-generator.lib.dir}" includes="*.jar" />
+		<fileset dir="${project.lib.dir}" includes="*.jar" />
+	</path>
+	<path id="compile.classpath">
+		<fileset dir="${red5.lib}/plugins" includes="*.jar" />
+		<fileset dir="${red5.server.dir}/target/lib" includes="junit*.jar" />
+		<path refid="check.classpath"/>
+	</path>
+	<path id="junit.classpath">
+		<fileset dir="${junit.lib.dir}" includes="*.jar" />
+		<fileset dir="${om.dist.webapp}/WEB-INF/lib">
+			<include name="*.jar" />
+			<exclude name="openmeetings*.jar" />
+		</fileset>
+		<fileset dir="${red5.root}" includes="*.jar" />
+		<fileset dir="${red5.root}/lib" includes="*.jar" />
+		<fileset dir="${red5.root}/plugins" includes="*.jar" />
+		<pathelement path="${dist.classes.dir}" />
+		<pathelement path="${main.out.dir}" />
+	</path>
+
+	<target name="info" unless="java7.installed">
+		<echo>Ant version is ${ant.version}</echo> <!-- output Ant version -->
+	</target>
+
+	<target name="prepare.mkdir" depends="-java7.check">
+		<mkdir dir="${red5.server.lib}" />
+		<mkdir dir="${red5.lib}/log" />
+		<mkdir dir="${red5.client.dir}/dist" />
+		<mkdir dir="${dist.dir}" />
+		<mkdir dir="${main.out.dir}" />
+		<mkdir dir="${mainlibs.lib.dir}" />
+		<mkdir dir="${om.lib.dir}" />
+		<mkdir dir="${anakia.lib.dir}" />
+		<mkdir dir="${junit.backups.dir}" />
+		<mkdir dir="${junit.report.dir}" />
+		<mkdir dir="${rat.lib.dir}" />
+		<mkdir dir="${dtd-generator.lib.dir}" />
+		<mkdir dir="${svntask.lib.dir}" />
+		<mkdir dir="${laszlo.home}" />
+		<mkdir dir="${laszlo46.home}" />
+		<echo file="${build.base.dir}/velocity.properties" append="false">runtime.log = ${build.base.dir}/velocity.log${line.separator}output.encoding=UTF-8${line.separator}</echo>
+	</target>
+
+	<!-- perform nightly build with tests -->
+	<target name="dist-bin-nightly" description="perform nightly build with tests" depends="dist-bin, test" />
+
+	<!-- build artefacts -->
+	<target name="dist-bin" description="pack binary distribution" depends="clean.all, dist">
+		<tstamp>
+			<format property="build.time" pattern="dd-MM-yyyy_HHmm" />
+		</tstamp>
+		<property name="archive.file.name" value="${dist.dir}/apache-${project.distname}-${project.version}.r${svn.info.rev}-${build.time}" />
+
+		<move file="${dist.dir}/red5/license.txt" tofile="${dist.dir}/red5/red5-license.txt" />
+		<copy file="build.properties" tofile="${build.base.dir}/build.properties" overwrite="true" />
+		<copy file="LICENSE" tofile="${dist.dir}/red5/LICENSE" overwrite="true" />
+		<copy file="NOTICE" tofile="${dist.dir}/red5/NOTICE" overwrite="true" />
+		<copy file="README" tofile="${dist.dir}/red5/README" overwrite="true" />
+		<copy file="CHANGELOG" tofile="${dist.dir}/red5/CHANGELOG" overwrite="true" />
+
+		<echo file="${build.base.dir}/build.properties" append="true">svn.info.rev=${svn.info.rev}${line.separator}</echo>
+		<tar longfile="gnu" compression="gzip" destfile="${archive.file.name}-src.tar.gz">
+			<tarfileset dir="${basedir}">
+				<exclude name="build/**" />
+				<exclude name="dist/**" />
+				<exclude name="build.properties" />
+			</tarfileset>
+			<tarfileset dir="${build.base.dir}">
+				<include name="build.properties" />
+			</tarfileset>
+		</tar>
+		<tar longfile="gnu" compression="gzip" destfile="${archive.file.name}.tar.gz">
+			<tarfileset dir="${dist.dir}/red5">
+				<include name="**" />
+				<exclude name="*.sh" />
+			</tarfileset>
+			<tarfileset dir="${dist.dir}/red5" filemode="755">
+				<include name="*.sh" />
+			</tarfileset>
+		</tar>
+	</target>
+	
+	<!-- build artefacts -->
+	<target name="dist-release" description="pack binary distribution">
+		<property name="archive.file.name" value="${dist.dir}/apache-${project.distname}-${project.version}" />
+		<antcall target="dist-bin" />
+		<zip destfile="${archive.file.name}.zip">
+			<zipfileset dir="${dist.dir}/red5">
+				<include name="**" />
+				<exclude name="*.sh" />
+			</zipfileset>
+			<zipfileset dir="${dist.dir}/red5" filemode="755">
+				<include name="*.sh" />
+			</zipfileset>
+		</zip>
+		<zip destfile="${archive.file.name}-src.zip">
+			<zipfileset dir="${basedir}">
+				<exclude name="build/**" />
+				<exclude name="dist/**" />
+				<exclude name="build.properties" />
+			</zipfileset>
+			<zipfileset dir="${build.base.dir}">
+				<include name="build.properties" />
+			</zipfileset>
+		</zip>
+	</target>
+
+	<!-- build webapp -->
+	<target name="-copy-libraries" description="All jars downloaded by ivy copied to appropriate places">
+		<copy todir="${red5.root}/lib">
+			<fileset dir="${mainlibs.lib.dir}" includes="*.jar" />
+		</copy>
+		<copy todir="${dist.webapps.dir}/WEB-INF/lib">
+			<fileset dir="${om.lib.dir}" includes="*.jar" />
+		</copy>
+		<chmod dir="${dist.webapps.dir}/WEB-INF/lib" perm="755" includes="**/*.sh" />
+	</target>
+
+	<target name="dist" description="binary distribution of OpenMeetings" depends="clean, jar, client.only, enhance, -copy-libraries, signWebStartJars" />
+
+	<!-- compiles the sources without openlaszlo client -->
+	<target name="dist-test" description="binary distribution of OpenMeetings" depends="clean, -dist-test-no-clean, signWebStartJars" />
+
+	<!-- compiles the sources without openlaszlo client and clean -->
+	<target name="-dist-test-no-clean" description="binary distribution of OpenMeetings" depends="jar, -copy-libraries" />
+
+	<!-- compiles the sources only with laszlo debug client -->
+	<target name="dist-debug" description="binary distribution of OpenMeetings" depends="clean, jar, client.debug.only, -copy-libraries, signWebStartJars" />
+
+	<target name="-cleanup-jrebel" unless="jrebel.enabled">
+		<delete>
+			<fileset dir="${dist.classes.dir}" includes="rebel*.xml" />
+		</delete>
+	</target>
+	
+	<target name="web.copy" depends="-process-db">
+		<copy todir="${dist.webapps.dir}" overwrite="true" force="true">
+			<fileset dir="${webapp.dir}" />
+		</copy>
+		<filter token="wicket.mode" value="${wicket.mode}" />
+		<copy todir="${dist.webapps.dir}/WEB-INF" filtering="true" overwrite="true" force="true">
+			<fileset file="${webapp.dir}/WEB-INF/web.xml" />
+		</copy>
+		<copy todir="${dist.classes.dir}">
+			<fileset dir="${src.base.dir}/web/java">
+				<include name="**/*.html" />
+				<include name="**/*.xml" />
+				<include name="**/*.js" />
+				<include name="**/*.css" />
+			</fileset>
+		</copy>
+	</target>
+	
+	<!-- Check timestamp on files -->
+	<target name="prepare" depends="prepare.mkdir,web.copy">
+		<copy todir="${red5.root}">
+			<fileset dir="${red5.lib}">
+				<exclude name="**/*.fla" />
+			</fileset>
+		</copy>
+
+		<antcall target="-cleanup-jrebel" />
+		<chmod dir="${red5.root}" perm="755" includes="**/*.sh" />
+		<tstamp />
+	</target>
+
+	<!-- Copy any resource or configuration files -->
+	<target name="vmresources">
+		<copy todir="${main.out.dir}" includeEmptyDirs="yes" force="true" overwrite="true">
+			<fileset dir="${src.base.dir}">
+				<include name="**/*.vm" />
+			</fileset>
+		</copy>
+	</target>
+	
+	<target name="resources" depends="prepare.jnlp">
+		<patternset id="xmlpng">
+			<include name="**/*.xml" />
+			<include name="**/*.png" />
+		</patternset>
+		<patternset id="xmlpngconf">
+			<patternset refid="xmlpng" />
+			<include name="**/*.conf" />
+			<include name="**/*.properties" />
+		</patternset>
+
+		<!-- Main Applications -->
+		<copy todir="${main.out.dir}" includeEmptyDirs="yes">
+			<fileset dir="${src.base.dir}">
+				<patternset refid="xmlpngconf" />
+			</fileset>
+		</copy>
+		<!-- Screen Share resources -->
+		<copy todir="${main.out.dir}">
+			<fileset dir="${src.base.dir}/screenshare/java">
+				<include name="**/*.png" />
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="web.only" depends="jar.web.only, web.copy"/>
+	
+	<target name="prepare.jnlp" depends="vmresources">
+		<copy todir="${screenshare.out.dir}" overwrite="true" force="true">
+			<fileset dir="${red5.server.lib}" includes="commons-codec*.jar" />
+			<fileset dir="${red5.server.lib}" includes="commons-beanutils*.jar" />
+			<fileset dir="${red5.server.lib}" includes="commons-collections*.jar" />
+			<fileset dir="${red5.server.lib}" includes="commons-lang3*.jar" />
+			<fileset dir="${red5.server.lib}" includes="httpclient*.jar" />
+			<fileset dir="${red5.server.lib}" includes="httpcore*.jar" />
+			<fileset dir="${red5.server.lib}" includes="bcprov*.jar" />
+			<fileset dir="${red5.server.lib}" includes="ehcache-core*.jar" />
+			<fileset dir="${red5.server.lib}" includes="slf4j-api*.jar" />
+			<fileset dir="${red5.server.lib}" includes="jcl-over-slf4j*.jar" />
+			<fileset dir="${red5.server.lib}" includes="spring-context-4*.jar" />
+			<fileset dir="${red5.server.lib}" includes="spring-core-*.jar" />
+			<fileset dir="${red5.server.lib}" includes="spring-beans-*.jar" />
+			<fileset dir="${red5.server.lib}" includes="logback*.jar" />
+			<fileset dir="${red5.server.lib}" includes="mina-core*.jar" />
+			<fileset dir="${red5.server.lib}" includes="quartz-*.jar" />
+			<fileset dir="${red5.server.lib}" includes="red5-io*.jar" />
+			<fileset dir="${red5.server.lib}" includes="red5-server-common*.jar" />
+			<fileset dir="${red5.client.lib}" includes="red5*.jar" />
+		</copy>
+		<delete>
+			<fileset dir="${screenshare.out.dir}" includes="${project.distname}-screenshare*.jar" />
+		</delete>
+		<fileset id="screenshare.jars" dir="${screenshare.out.dir}" casesensitive="yes">
+			<include name="**/*.jar"/>
+		</fileset>
+		<pathconvert pathsep="&quot;/&gt;&lt;jar href=&quot;" targetos="unix" property="dependencies" refid="screenshare.jars">
+			<map from="${screenshare.out.dir}/" to=""/>
+		</pathconvert>
+		<echo>dependencies = &lt;jar href=&quot;${dependencies}&quot;/&gt;&lt;jar href=&quot;${project.distname}-screenshare-${jar.suffix}.jar&quot;/&gt;</echo>
+		<replace file="${main.out.dir}/screenshare.vm" token="$dependencies" value="&lt;jar href=&quot;${dependencies}&quot;/&gt;&lt;jar href=&quot;${project.distname}-screenshare-${jar.suffix}.jar&quot;/&gt;"/>
+		<mkdir dir="${main.out.dir}/JNLP-INF"/>
+		<property name="app.template.jnlp" value="${main.out.dir}/JNLP-INF/APPLICATION-TEMPLATE.JNLP"/>
+		<copy file="${main.out.dir}/screenshare.vm" tofile="${app.template.jnlp}" overwrite="true" force="true"/>
+		<replace file="${app.template.jnlp}" token="$codebase" value="*"/>
+		<replace file="${app.template.jnlp}" token="$codebase" value="*"/>
+		<replace file="${app.template.jnlp}" token="$APP_NAME" value="*"/>
+		<replace file="${app.template.jnlp}" token="$protocol" value="*"/>
+		<replace file="${app.template.jnlp}" token="$host" value="*"/>
+		<replace file="${app.template.jnlp}" token="$port" value="*"/>
+		<replace file="${app.template.jnlp}" token="$app" value="*"/>
+		<replace file="${app.template.jnlp}" token="$userId" value="*"/>
+		<replace file="${app.template.jnlp}" token="$publicSid" value="*"/>
+		<replace file="${app.template.jnlp}" token="$labels" value="*"/>
+		<replace file="${app.template.jnlp}" token="$defaultQuality" value="*"/>
+		<replace file="${app.template.jnlp}" token="$defaultFps" value="*"/>
+		<replace file="${app.template.jnlp}" token="$showFps" value="*"/>
+		<replace file="${app.template.jnlp}" token="$allowRemote" value="*"/>
+		<replace file="${app.template.jnlp}" token="$allowRecording" value="*"/>
+		<replace file="${app.template.jnlp}" token="$allowPublishing" value="*"/>
+		<replace file="${app.template.jnlp}" token="$keystore" value="*"/>
+		<replace file="${app.template.jnlp}" token="$password" value="*"/>
+	</target>
+		
+	<target name="jar.web.only" depends="enhance.only.norefresh, current_revision, prepare.jnlp">
+		<manifestclasspath property="jar.classpath" jarfile="${project.distname}-${jar.suffix}.jar">
+			<classpath refid="compile.classpath" />
+		</manifestclasspath>
+		
+		<!-- Core/main -->
+		<jar destfile="${dist.webapps.dir}/WEB-INF/lib/${project.distname}-core-${jar.suffix}.jar">
+			<fileset dir="${main.out.dir}">
+				<include name="org/apache/openmeetings/**" />
+				<include name="*.vm" />
+				<include name="META-INF/*" />
+				<exclude name="META-INF/*.xml" />
+				<exclude name="org/apache/openmeetings/util/**" />
+				<exclude name="org/apache/openmeetings/test/**" />
+				<exclude name="org/apache/openmeetings/axis/**" />
+				<exclude name="org/apache/openmeetings/db/**" />
+				<exclude name="org/apache/openmeetings/cli/**" />
+				<exclude name="org/apache/openmeetings/backup/**" />
+				<exclude name="org/apache/openmeetings/installation/**" />
+				<exclude name="org/apache/openmeetings/screen/**" />
+				<exclude name="org/apache/openmeetings/doc/**" />
+				<exclude name="org/apache/openmeetings/web/**" />
+			</fileset>
+			<manifest>
+				<attribute name="Built-By" value="OpenMeetings - http://openmeetings.apache.org" />
+				<attribute name="Built-On" value="${build.TODAY}" />
+				<attribute name="Class-Path" value="conf/ ${jar.classpath}" />
+				<attribute name="Svn-Revision" value="${svn.info.rev}" />
+				<attribute name="Product-Version" value="${project.version}-${project.status}" />
+			</manifest>
+		</jar>
+		
+		<!-- DB package -->
+		<jar destfile="${dist.webapps.dir}/WEB-INF/lib/${project.distname}-db-${jar.suffix}.jar">
+			<fileset dir="${main.out.dir}">
+				<include name="org/apache/openmeetings/db/**" />
+				<include name="META-INF/*" />
+				<exclude name="META-INF/*.xml" />
+			</fileset>
+			<manifest>
+				<attribute name="Built-By" value="OpenMeetings - http://openmeetings.apache.org" />
+				<attribute name="Built-On" value="${build.TODAY}" />
+				<attribute name="Class-Path" value="conf/ ${jar.classpath}" />
+				<attribute name="Svn-Revision" value="${svn.info.rev}" />
+				<attribute name="Product-Version" value="${project.version}-${project.status}" />
+			</manifest>
+		</jar>
+		
+		<!-- Install / CLI package -->
+		<jar destfile="${dist.webapps.dir}/WEB-INF/lib/${project.distname}-cli-${jar.suffix}.jar">
+			<fileset dir="${main.out.dir}">
+				<include name="org/apache/openmeetings/cli/**" />
+				<include name="org/apache/openmeetings/backup/**" />
+				<include name="org/apache/openmeetings/installation/**" />
+				<include name="META-INF/*" />
+				<exclude name="META-INF/*.xml" />
+			</fileset>
+			<manifest>
+				<attribute name="Built-By" value="OpenMeetings - http://openmeetings.apache.org" />
+				<attribute name="Built-On" value="${build.TODAY}" />
+				<attribute name="Class-Path" value="conf/ ${jar.classpath}" />
+				<attribute name="Svn-Revision" value="${svn.info.rev}" />
+				<attribute name="Product-Version" value="${project.version}-${project.status}" />
+			</manifest>
+		</jar>
+		
+		<!-- Util package -->
+		<jar destfile="${dist.webapps.dir}/WEB-INF/lib/${project.distname}-util-${jar.suffix}.jar">
+			<fileset dir="${main.out.dir}">
+				<include name="org/apache/openmeetings/util/**" />
+				<include name="META-INF/*" />
+				<exclude name="META-INF/*.xml" />
+			</fileset>
+			<manifest>
+				<attribute name="Built-By" value="OpenMeetings - http://openmeetings.apache.org" />
+				<attribute name="Built-On" value="${build.TODAY}" />
+				<attribute name="Class-Path" value="conf/ ${jar.classpath}" />
+				<attribute name="Svn-Revision" value="${svn.info.rev}" />
+				<attribute name="Product-Version" value="${project.version}-${project.status}" />
+			</manifest>
+		</jar>
+		
+		<!-- web package -->
+		<jar destfile="${dist.webapps.dir}/WEB-INF/lib/${project.distname}-web-${jar.suffix}.jar">
+			<fileset dir="${main.out.dir}">
+				<include name="org/apache/openmeetings/web/**" />
+				<exclude name="*.xml" />
+				<exclude name="*.html" />
+				<include name="META-INF/*" />
+				<exclude name="META-INF/*.xml" />
+			</fileset>
+			<manifest>
+				<attribute name="Built-By" value="OpenMeetings - http://openmeetings.apache.org" />
+				<attribute name="Built-On" value="${build.TODAY}" />
+				<attribute name="Class-Path" value="conf/ ${jar.classpath}" />
+				<attribute name="Svn-Revision" value="${svn.info.rev}" />
+				<attribute name="Product-Version" value="${project.version}-${project.status}" />
+			</manifest>
+		</jar>
+
+		<!-- Build WebServices -->
+		<property name="om_aar_name" value="${project.distname}-${jar.suffix}.aar"/>
+		<property name="om_aar_folder" value="${dist.webapps.dir}/WEB-INF/services"/>
+		<jar destfile="${om_aar_folder}/${om_aar_name}">
+			<fileset dir="${main.out.dir}">
+				<include name="META-INF/*" />
+			</fileset>
+		</jar>
+		<echo file="${om_aar_folder}/services.list" append="false">${om_aar_name}${line.separator}version.aar${line.separator}</echo>
+		<jar destfile="${dist.webapps.dir}/WEB-INF/lib/${project.distname}-axis-${jar.suffix}.jar">
+			<fileset dir="${main.out.dir}">
+				<include name="**/apache/openmeetings/axis/**" />
+				<include name="META-INF/LICENSE" />
+				<include name="META-INF/NOTICE" />
+			</fileset>
+		</jar>
+	</target>
+
+	<target name="jar.only" depends="buildJavaDocs, enhance.only, jar.web.only"/>
+
+	<target name="dist.screen.share" description="Make Screen Share Archive" depends="signWebStartJars" />
+
+	<tstamp prefix="screensharing.build">
+		<format property="TODAY" pattern="d-MMMM-yyyy" locale="en" />
+	</tstamp>
+	<target name="jar.screen.share" description="Make Screen Share Archive" depends="compile.only">
+		<manifestclasspath property="jar2.classpath" jarfile="${project.distname}.jar">
+			<classpath refid="compile.classpath" />
+		</manifestclasspath>
+		<!-- Screen Share -->
+		<jar destfile="${screenshare.out.dir}/${project.distname}-screenshare-${jar.suffix}.jar">
+			<fileset dir="${main.out.dir}">
+				<include name="org/apache/openmeetings/screen/**" />
+				<include name="JNLP-INF/*" />
+				<include name="META-INF/LICENSE" />
+				<include name="META-INF/NOTICE" />
+			</fileset>
+			<fileset file="${screenshare.resources.dir}/logback.xml" />
+			<fileset file="${screenshare.resources.dir}/quartz.*" />
+			<manifest>
+				<attribute name="Built-By" value="OpenMeetings - http://openmeetings.apache.org" />
+				<attribute name="Built-On" value="${screensharing.build.TODAY}" />
+				<attribute name="Class-Path" value="conf/ ${jar2.classpath}" />
+				<attribute name="Permissions" value="all-permissions" />
+				<attribute name="Codebase" value="*" />
+				<attribute name="Application-Library-Allowable-Codebase" value="*" />
+				<attribute name="Caller-Allowable-Codebase" value="*" />
+			</manifest>
+		</jar>
+	</target>
+	
+	<target name="buildJavaDocs">
+		<tstamp prefix="doc">
+			<format property="TODAY_YEAR" pattern="yyyy" locale="en" />
+		</tstamp>
+	    <javadoc packagenames="org.apache.openmeetings.remote.*"
+	           sourcepath="${src.base.dir}/axis/java:${src.base.dir}/db/java:${src.base.dir}/doc/java:${src.base.dir}/install/java:${src.base.dir}/main/java:${src.base.dir}/screenshare/java:${src.base.dir}/util/java:${src.base.dir}/web/java"
+	           excludepackagenames="org.apache.openmeetings.test.*"
+	           defaultexcludes="yes"
+	           destdir="build/api"
+	           author="true"
+	           version="true"
+	           use="true"
+	           windowtitle="Apache OpenMeetings API">
+	    	<classpath refid="compile.classpath"></classpath>
+	        <doctitle><![CDATA[<h1>Apache OpenMeetings API</h1>]]></doctitle>
+	    	<bottom><![CDATA[<i>Copyright &copy; 2000-${doc.TODAY_YEAR} The Apache Software Foundation. All rights Reserved.</i>]]></bottom>
+	  	</javadoc>
+	</target>
+
+	<!-- Compile JAR -->
+	<target name="jar" description="Make Archive" depends="enhance, build.only.webservice.doc, jar.only, jar.screen.share">
+		<tstamp prefix="build">
+			<format property="TODAY" pattern="d-MMMM-yyyy" locale="en" />
+		</tstamp>
+	</target>
+
+	<target name="generateSignKey"  unless="skip.sign.key.generation">
+		<delete file="${keystore.file}" />
+		<genkey alias="${screensharing.keystore.alias}" storepass="${screensharing.keystore.password}" keystore="${keystore.file}"
+			verbose="true" sigalg="MD5withRSA" keyalg="RSA" >
+			<dname>
+				<param name="CN" value="Sebastian Wagner" />
+				<param name="OU" value="technology" />
+				<param name="O" value="openmeetings.apache.org" />
+				<param name="C" value="DE" />
+			</dname>
+		</genkey>
+	</target>
+	
+	<target name="repackWebStartJars" depends="jar.screen.share">
+		<taskdef resource="net/sf/antcontrib/antlib.xml">
+			<classpath refid="check.classpath" />
+		</taskdef>
+		<foreach target="-repack-jar" param="theJar">
+			<fileset dir="${screenshare.out.dir}" casesensitive="yes">
+				<include name="*.jar"/>
+				<exclude name="*openmeetings*.jar"/>
+			</fileset>
+		</foreach>
+	</target>
+	
+	<target name="signWebStartJars" depends="generateSignKey,repackWebStartJars">
+		<signjar alias="${screensharing.keystore.alias}" keystore="${keystore.file}" storepass="${screensharing.keystore.password}"
+			lazy="false" sigalg="MD5withRSA" digestalg="SHA1">
+			<path>
+				<fileset dir="${screenshare.out.dir}">
+					<include name="**/*.jar" />
+				</fileset>
+			</path>
+		</signjar>
+	</target>
+
+	<target name="-repack-jar">
+		<echo message="${theJar}"/>
+		<delete dir="${screenshare.out.dir}/1" />
+		<mkdir dir="${screenshare.out.dir}/1" />
+		<unjar src="${theJar}" dest="${screenshare.out.dir}/1"/>
+		<delete dir="${screenshare.out.dir}/1/META-INF" includes="*"/>
+		<delete file="${theJar}" />
+		<jar destfile="${theJar}">
+			<fileset dir="${screenshare.out.dir}/1">
+				<include name="**" />
+			</fileset>
+			<manifest>
+				<attribute name="Built-By" value="OpenMeetings - http://openmeetings.apache.org" />
+				<attribute name="Built-On" value="${screensharing.build.TODAY}" />
+				<attribute name="Permissions" value="all-permissions" />
+				<attribute name="Codebase" value="*" />
+				<attribute name="Application-Library-Allowable-Codebase" value="*" />
+				<attribute name="Caller-Allowable-Codebase" value="*" />
+			</manifest>
+		</jar>
+		<delete dir="${screenshare.out.dir}/1" />
+	</target>
+	
+	<target name="client.only" depends="compile.laszlo.main.as3,compile.laszlo.main,compile.laszlo.networktesting" />
+
+	<target name="client.debug.only" depends="compile.laszlo.main.debug.as3,compile.laszlo.main.debug,compile.laszlo.networktesting.debug" />
+
+	<target name="-compile.flash" description="compile flash application">
+		<!-- commented for now
+		<echo message="flash.src.dir == '${flash.src.dir}'" />
+		<echo message="classpathref == '${flash.classpath.ref}'" />
+		<echo message="laszlo.home == '${flash.lps.home}'" />
+		<echo message="flash.debug == '${flash.debug}'" />
+		<echo message="laszlo.proxied == '${laszlo.proxied}'" />
+		<echo message="flash.runtime == '${flash.runtime}'" />
+		<echo message="out.dir.swf == '${out.dir.swf}'" />
+		<echo message="flash.main.file == '${flash.main.file}'" />
+		<echo message="flash.out.file == '${flash.out.file}'" />
+		-->
+		<java classname="org.openlaszlo.compiler.Main" fork="true" newenvironment="true" failonerror="true" dir="${flash.src.dir}" classpathref="${flash.classpath.ref}">
+			<jvmarg value="-DLPS_HOME=${flash.lps.home}" />
+			<jvmarg value="-Dlzdebug=false" />
+			<jvmarg value="-Dlzproxied=${laszlo.proxied}" />
+			<jvmarg value="-Xms512M" />
+			<jvmarg value="-Xmx512M" />
+			<arg line="--runtime=${flash.runtime} ${flash.debug} --dir &quot;${out.dir.swf}&quot; --onerror warn ${flash.main.file} -o ${flash.out.file}" />
+		</java>
+	</target>
+
+	<target name="compile.laszlo.networktesting" depends="compile.laszlo.networktesting.debug">
+		<antcall target="-compile.flash" inheritAll="true" inheritRefs="true">
+			<param name="flash.classpath.ref" value="laszlo.lib" />
+			<param name="flash.src.dir" value="${laszlo.as3.src.dir}/networkTesting" />
+			<param name="flash.lps.home" value="${laszlo.home}" />
+			<param name="flash.runtime" value="swf10" />
+			<param name="flash.main.file" value="networktesting.lzx" />
+			<param name="flash.out.file" value="networktesting.swf10.swf" />
+			<param name="flash.debug" value="" />
+		</antcall>
+	</target>
+
+	<target name="compile.laszlo.networktesting.debug" depends="-retrieve-openlaszlo">
+		<antcall target="-compile.flash" inheritAll="true" inheritRefs="true">
+			<param name="flash.classpath.ref" value="laszlo.lib" />
+			<param name="flash.src.dir" value="${laszlo.as3.src.dir}/networkTesting" />
+			<param name="flash.lps.home" value="${laszlo.home}" />
+			<param name="flash.runtime" value="swf10" />
+			<param name="flash.main.file" value="networktesting.lzx" />
+			<param name="flash.out.file" value="networktestingdebug.swf10.swf" />
+			<param name="flash.debug" value="--debug" />
+		</antcall>
+	</target>
+
+	<target name="compile.laszlo.testsetup.as3" depends="-retrieve-openlaszlo46">
+        <antcall target="-compile.flash" inheritAll="true" inheritRefs="true">
+            <param name="flash.classpath.ref" value="laszlo46.lib" />
+            <param name="flash.src.dir" value="${laszlo.src.dir}" />
+            <param name="flash.lps.home" value="${laszlo46.home}" />
+            <param name="flash.runtime" value="swf11" />
+            <param name="flash.main.file" value="test/test-setup.lzx" />
+            <param name="flash.out.file" value="test-setup.as3.swf11.swf" />
+            <param name="flash.debug" value="" />
+        </antcall>
+    </target>
+
+	<target name="compile.laszlo.main.as3" depends="compile.laszlo.main.debug.as3">
+		<antcall target="-compile.flash" inheritAll="true" inheritRefs="true">
+			<param name="flash.classpath.ref" value="laszlo46.lib" />
+			<param name="flash.src.dir" value="${laszlo.as3.src.dir}" />
+			<param name="flash.lps.home" value="${laszlo46.home}" />
+			<param name="flash.runtime" value="swf11" />
+			<param name="flash.main.file" value="main.as3.lzx" />
+			<param name="flash.out.file" value="main.as3.swf11.swf" />
+			<param name="flash.debug" value="" />
+		</antcall>
+	</target>
+
+	<target name="compile.laszlo.main.debug.as3" depends="-retrieve-openlaszlo46">
+		<antcall target="-compile.flash" inheritAll="true" inheritRefs="true">
+			<param name="flash.classpath.ref" value="laszlo46.lib" />
+			<param name="flash.src.dir" value="${laszlo.as3.src.dir}" />
+			<param name="flash.lps.home" value="${laszlo46.home}" />
+			<param name="flash.runtime" value="swf11" />
+			<param name="flash.main.file" value="main.as3.lzx" />
+			<param name="flash.out.file" value="maindebug.as3.swf11.swf" />
+			<param name="flash.debug" value="--debug" />
+		</antcall>
+	</target>
+
+	<target name="compile.laszlo.main" depends="compile.laszlo.main.debug">
+		<antcall target="-compile.flash" inheritAll="true" inheritRefs="true">
+			<param name="flash.classpath.ref" value="laszlo.lib" />
+			<param name="flash.src.dir" value="${laszlo.src.dir}" />
+			<param name="flash.lps.home" value="${laszlo.home}" />
+			<param name="flash.runtime" value="swf8" />
+			<param name="flash.main.file" value="main.lzx" />
+			<param name="flash.out.file" value="main.swf8.swf" />
+			<param name="flash.debug" value="" />
+		</antcall>
+	</target>
+
+	<target name="compile.laszlo.main.debug" depends="-retrieve-openlaszlo">
+		<antcall target="-compile.flash" inheritAll="true" inheritRefs="true">
+			<param name="flash.classpath.ref" value="laszlo.lib" />
+			<param name="flash.src.dir" value="${laszlo.src.dir}" />
+			<param name="flash.lps.home" value="${laszlo.home}" />
+			<param name="flash.runtime" value="swf8" />
+			<param name="flash.main.file" value="main.lzx" />
+			<param name="flash.out.file" value="maindebug.swf8.swf" />
+			<param name="flash.debug" value="--debug" />
+		</antcall>
+	</target>
+
+	<target name="compile" depends="compile.only, prepare" />
+
+	<target name="compile.only"
+		depends="-retrieve-mainlibs,-retrieve-om,-retrieve-dtd-generator,-retrieve-junit,-retrieve-cmdadmin,-retrieve-tools.jar,compile.only.nocheck,resources"/>
+	
+	<target name="compile.only.nocheck" depends="clean.classes">
+		<antcall target="prepare.mkdir" inheritAll="true" inheritRefs="true"/>
+		<echo message="Compile main to ${main.out.dir}" />
+		<javac debug="on" debuglevel="lines,vars,source" destdir="${main.out.dir}" includeantruntime="false"
+			source="1.7" target="1.7">
+			<src path="${src.base.dir}/axis/java" />
+			<src path="${src.base.dir}/db/java" />
+			<src path="${src.base.dir}/doc/java" />
+			<src path="${src.base.dir}/install/java" />
+			<src path="${src.base.dir}/main/java" />
+			<src path="${src.base.dir}/test/java" />
+			<src path="${src.base.dir}/screenshare/java" />
+			<src path="${src.base.dir}/util/java" />
+			<src path="${src.base.dir}/web/java" />
+			<classpath refid="compile.classpath" />
+			<compilerarg value="-Aopenjpa.metamodel=true" />
+			<!-- compilerarg value="-Xlint:deprecation"/ -->
+		</javac>
+		<copy todir="${main.out.dir}">
+			<fileset dir="${src.base.dir}/main/java">
+				<include name="**/*.*" />
+				<exclude name="**/*.java" />
+			</fileset>
+		</copy>
+		<copy file="${axis.resources.dir}/services.xml" tofile="${main.out.dir}/META-INF/services.xml" overwrite="true" />
+		<copy file="LICENSE" tofile="${main.out.dir}/META-INF/LICENSE" overwrite="true" />
+		<copy file="NOTICE" tofile="${main.out.dir}/META-INF/NOTICE" overwrite="true" />
+	</target>
+
+	<path id="jpa.enhancement.classpath">
+		<pathelement path="${main.out.dir}" />
+		<path refid="compile.classpath" />
+	</path>
+
+	<target name="enhance" depends="compile, enhance.only" />
+
+	<target name="enhance.only" depends="compile.only">
+		<!-- define the openjpac task -->
+		<taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask">
+			<classpath refid="jpa.enhancement.classpath" />
+		</taskdef>
+
+		<!-- invoke the enhancer -->
+		<openjpac>
+			<classpath refid="jpa.enhancement.classpath" />
+			<config propertiesFile="${dist.persistence.dir}/${db}_persistence.xml" />
+		</openjpac>
+		<echo message="Enhancing complete." />
+	</target>
+	
+	<target name="enhance.only.norefresh" depends="compile.only.nocheck">
+		<!-- define the openjpac task -->
+		<taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask">
+			<classpath refid="jpa.enhancement.classpath" />
+		</taskdef>
+
+		<!-- invoke the enhancer -->
+		<openjpac>
+			<classpath refid="jpa.enhancement.classpath" />
+			<config propertiesFile="${dist.persistence.dir}/${db}_persistence.xml" />
+		</openjpac>
+		<echo message="Enhancing complete." />
+	</target>
+
+	<path id="svntask.classpath">
+		<fileset dir="${svntask.lib.dir}" includes="*.jar" />
+	</path>
+	<target name="-ant-task" depends="-retrieve-svntask">
+		<typedef resource="org/tigris/subversion/svnant/svnantlib.xml">
+			<classpath>
+				<path refid="svntask.classpath" />
+			</classpath>
+		</typedef>
+		<svnSetting svnkit="false" javahl="false" id="svn.settings" />
+		<!-- native svn in the path-->
+	</target>
+	<target name="current_revision" depends="-ant-task" unless="svn.info.rev">
+		<svn refid="svn.settings">
+			<info target="." />
+		</svn>
+		<echo>Current revision: ${svn.info.rev}</echo>
+	</target>
+
+	<!-- Build entire project -->
+	<target name="build project" depends="clean, prepare, compile" />
+
+	<path id="check.rat.classpath">
+		<fileset dir="${rat.lib.dir}" includes="*.jar" />
+	</path>
+	<path id="rat.classpath">
+		<path refid="compile.classpath" />
+		<path refid="check.rat.classpath" />
+	</path>
+	<target name="report_rat" depends="-retrieve-rat">
+		<!-- define the RAT task -->
+		<taskdef uri="antlib:org.apache.rat.anttasks" resource="org/apache/rat/anttasks/antlib.xml">
+			<classpath>
+				<path refid="rat.classpath" />
+			</classpath>
+		</taskdef>
+
+		<rat:report>
+			<rat:substringMatcher licenseFamilyCategory="JQUERY_MIT" licenseFamilyName="jQuery UI CSS MIT">
+				<pattern substring="Copyright 2014 jQuery Foundation and other contributors; Licensed MIT"/>
+			</rat:substringMatcher>
+			<rat:substringMatcher licenseFamilyCategory="JQUERY_MIT" licenseFamilyName="jQuery UI Menubar MIT">
+				<pattern substring="Dual licensed under the MIT or GPL Version 2"/>
+			</rat:substringMatcher>
+			<rat:approvedLicense familyName="jQuery UI CSS MIT"/>
+			<rat:approvedLicense familyName="jQuery UI Menubar MIT"/>
+			<fileset dir="${src.base.dir}" />
+			<fileset dir="${webcontent.base.dir}" excludes="**/*.swf" />
+			<fileset dir="${docs.src}" />
+		</rat:report>
+	</target>
+
+	<path id="build.webservice.classpath">
+		<pathelement path="${main.out.dir}" />
+		<path refid="compile.classpath" />
+	</path>
+
+	<target name="build.webservice.doc" depends="compile.only, build.only.webservice.doc"/>
+
+	<patternset id="images">
+		<include name="**/*.gif" />
+		<include name="**/*.jpeg" />
+		<include name="**/*.jpg" />
+		<include name="**/*.png" />
+	</patternset>
+	<patternset id="css">
+		<include name="**/*.css" />
+		<include name="**/*.gif" />
+		<include name="**/*.png" />
+	</patternset>
+
+	<!-- Anakia Build classpath -->
+	<path id="check.anakia.classpath">
+		<fileset dir="${anakia.lib.dir}" includes="*.jar" />
+		<fileset dir="${mainlibs.lib.dir}" includes="commons-collections*.jar,commons-lang*.jar,velocity*.jar" />
+	</path>
+	
+	<path id="anakia.classpath">
+		<path refid="compile.classpath" />
+		<path refid="check.anakia.classpath" />
+	</path>
+
+	<target name="anakia" depends="-retrieve-mainlibs,-retrieve-om,-retrieve-anakia">
+		<taskdef name="anakia" classname="org.apache.anakia.AnakiaTask">
+			<classpath>
+				<path refid="anakia.classpath" />
+			</classpath>
+		</taskdef>
+
+		<xslt in="${webapp.dir}/languages/errorvalues.xml" out="${docs.src}/ErrorsTable.xml" style="${docs.src}/stylesheets/errortable.xsl" />
+		<anakia basedir="${docs.src}" destdir="${docs.dest}/" extension=".html" style="./site.vsl" projectFile="stylesheets/project.xml" excludes="**/stylesheets/** empty.xml" includes="**/*.xml" lastModifiedCheck="true" templatePath="${docs.src}/stylesheets" velocityPropertiesFile="${build.base.dir}/velocity.properties" />
+		<copy todir="${docs.dest}/images">
+			<fileset dir="${docs.src}/images">
+				<patternset refid="images" />
+			</fileset>
+		</copy>
+		<copy todir="${docs.dest}/css">
+			<fileset dir="${docs.src}/css">
+				<patternset refid="css" />
+			</fileset>
+		</copy>
+		<copy todir="${docs.dest}/js">
+			<fileset dir="${docs.src}/js/">
+				<include name="**/*.js" />
+			</fileset>
+		</copy>
+	</target>
+
+	<target name="build.only.webservice.doc" depends="anakia">
+		<javadoc classpathref="build.webservice.classpath" useexternalfile="true" destdir="${docs.dest}">
+			<fileset dir="${src.base.dir}/axis/java/org/apache/openmeetings/axis/services">
+				<include name="*WebService.java" />
+				<exclude name="BaseWebService.java" />
+			</fileset>
+			<doclet name="org.apache.openmeetings.doc.WebServiceDoclet" pathref="build.webservice.classpath" />
+		</javadoc>
+	</target>
+	
+	<!-- 
+		Prepare selenium tests by starting up an OpenMeetings instance
+		
+		makes a stop command before starting up to make sure no other is running
+	 -->
+	
+	<target name="prepare-selenium-start-openmeetings" description="Prepare selenium tests by starting up an OpenMeetings instance" 
+		depends="-prepare-selenium-port-properties, prepare-selenium-stop-openmeetings" >
+		<exec dir="${dist.dir}/testred5" executable="red5-highperf.bat" osfamily="windows" output="${dist.dir}/testred5/red5_system.log">
+		</exec>
+		<!--this does only make sense if the unix executable is run obviously, however we do it for all -->
+		<chmod dir="${dist.dir}/testred5" perm="755" includes="**/*.sh" />
+		<exec dir="${dist.dir}/testred5" executable="/bin/bash" osfamily="unix" output="${dist.dir}/testred5/red5_system.log">
+			<arg value="red5-highperf.sh"/> 
+		</exec>
+		<!-- start up does take some time -->
+		<sleep seconds="30" />
+	</target>
+	
+	<target name="prepare-selenium-stop-openmeetings" description="Prepare selenium tests by starting up an OpenMeetings instance" >
+		<exec dir="${dist.dir}/testred5" executable="red5-shutdown.bat" osfamily="windows" output="${dist.dir}/testred5/red5_system.log">
+		</exec>
+		<!--this does only make sense if executed on unix(Linux or OSX are both unix style) is run obviously, 
+			however we do it for all for now -->
+		<chmod dir="${dist.dir}/testred5" perm="755" includes="**/*.sh" />
+		<exec dir="${dist.dir}/testred5" executable="/bin/bash" osfamily="unix" output="${dist.dir}/testred5/red5_system.log">
+			<arg value="red5-shutdown.sh"/> 
+		</exec>
+		<!-- stop up does take a bit of time -->
+		<sleep seconds="10" />
+	</target>
+	
+	<target name="prepare-selenium-test-database" description="Prepare selenium database script">
+		<java classname="org.apache.openmeetings.test.derby.PrepareSystemFiles">
+			<!-- the home directory of the test instance of red5 -->
+	        <arg value="${dist.dir}/testred5/webapps/openmeetings"/>
+			<!-- the directory where the openmeetings database is created by derby -->
+			<arg value="${dist.dir}/testred5/"/>
+			<!-- the persistance file to patch -->
+			<arg value="${basedir}/src/main/webapp/WEB-INF/classes/META-INF/persistence.xml"/>
+			<classpath refid="junit.classpath" />
+		</java>
+	</target>
+
+	<target name="debug-prepare-selenium-copy-test-instance" depends="-prepare-selenium-copy-test-instance"/>
+	
+	<target name="-prepare-selenium-copy-test-instance" description="Prepare selenium tests by starting up an OpenMeetings instance">
+		<copy todir="${dist.dir}/testred5">
+			<fileset dir="${dist.dir}/red5">
+			</fileset>
+		</copy>
+	</target>
+	
+	<target name="-prepare-selenium-port-properties" description="Set the http port to some exotic numbers so that we don't conflict with anything" 
+			depends="-prepare-selenium-copy-test-instance">
+		<replace dir="${dist.dir}/testred5/conf" value="http.port=20080">
+		  <include name="**/red5.properties"/>
+		  <replacetoken>http.port=5080</replacetoken>
+		</replace>
+		<replace dir="${dist.dir}/testred5/conf" value="https.port=20443">
+		  <include name="**/red5.properties"/>
+		  <replacetoken>https.port=5443</replacetoken>
+		</replace>
+		<replace dir="${dist.dir}/testred5/conf" value="rtmp.port=20935">
+		  <include name="**/red5.properties"/>
+		  <replacetoken>rtmp.port=1935</replacetoken>
+		</replace>
+		<replace dir="${dist.dir}/testred5/conf" value="rtmps.port=20443">
+		  <include name="**/red5.properties"/>
+		  <replacetoken>rtmps.port=8443</replacetoken>
+		</replace>
+		<replace dir="${dist.dir}/testred5/conf" value="rtmpt.port=20088">
+		  <include name="**/red5.properties"/>
+		  <replacetoken>rtmpt.port=8088</replacetoken>
+		</replace>
+	</target>
+	
+	<target name="run-selenium" depends="-dist-test-no-clean, -run-selenium-junit"/>
+	
+	<target name="-run-selenium" if="${junit.run.selenium}" >
+		<antcall target="-run-selenium-junit"></antcall>
+	</target>
+	
+	<target name="-run-selenium-junit" depends="prepare-selenium-start-openmeetings" 
+			description="Will run all selenium tests unless -Dtestcases=_file_name_pattern_ will be passed">
+		<taskdef resource="net/sf/antcontrib/antlib.xml">
+			<classpath refid="junit.classpath" />
+		</taskdef>
+		<mkdir dir="${junit.report.dir}" />
+		
+		<junit maxmemory="1024m" printsummary="yes" dir="${junit.base.dir}" tempdir="${junit.base.dir}" fork="yes" 
+			forkmode="perBatch" failureproperty="junit.failed" errorproperty="junit.error">
+			<classpath refid="junit.classpath" />
+			<jvmarg value="-Dom.home=${om.dist.webapp}" />
+			<jvmarg value="-Dlanguages.home=${webapp.dir}/languages" />
+			<jvmarg value="-Dred5.root=${red5.root}" />
+			<jvmarg value="-Dbasedir=${basedir}" />
+			<jvmarg value="-Dred5.config_root=${red5.root}/conf" />
+			<jvmarg value="-Dbackups.dir=${junit.backups.dir}" />
+			<formatter type="${junit.test.formatter}" />
+			<batchtest todir="${junit.report.dir}">
+				<fileset dir="${main.out.dir}">
+					<include name="org/apache/openmeetings/test/selenium/${junit.test.pattern}.class" />
+					<exclude name="**/*$$*.class" />
+				</fileset>
+			</batchtest>
+		</junit>
+		
+		<junitreport todir="${junit.report.dir}">
+			<fileset dir="${junit.report.dir}">
+				<include name="TEST-*.xml" />
+			</fileset>
+			<report todir="${junit.report.dir}" />
+		</junitreport>
+		<fail message="Errors/failures in JUnit tests.">
+			<condition>
+				<or>
+					<isset property="junit.failed"/>
+					<isset property="junit.error"/>
+				</or>
+			</condition>
+		</fail>
+	</target>
+
+	<!-- Unit Tests -->
+	<condition property="junit.test.pattern" value="${testcases}" else="Test*">
+		<isset property="testcases" />
+	</condition>
+
+	<condition property="junit.test.formatter" value="${test.formatter}" else="xml">
+		<isset property="test.formatter" />
+	</condition>
+
+	<target name="test" depends="-dist-test-no-clean, -run-selenium" 
+			description="Will run all tests except selenium unless -Dtestcases=_file_name_pattern_ will be passed">
+		<taskdef resource="net/sf/antcontrib/antlib.xml">
+			<classpath refid="junit.classpath" />
+		</taskdef>
+		<for list="${backup.file.list}" param="prop">
+			<sequential>
+				<if>
+					<not>
+						<available file="${junit.backups.dir}/@{prop}" type="file" />
+					</not>
+					<then>
+						<echo message="Backup file @{prop} does not exists. Downloading ..." />
+						<get src="https://dl.bintray.com/openmeetings/generic/backups/@{prop}" dest="${junit.backups.dir}" usetimestamp="true"/>
+					</then>
+				</if>
+			</sequential>
+		</for>
+		<mkdir dir="${junit.report.dir}" />
+		<!-- property name="myclsp" refid="junit.classpath" />
+		<echo message="${myclsp}" /-->
+		<junit maxmemory="1024m" printsummary="yes" dir="${junit.base.dir}" tempdir="${junit.base.dir}" fork="yes" 
+			forkmode="perBatch" failureproperty="junit.failed" errorproperty="junit.error">
+			<classpath refid="junit.classpath" />
+			<jvmarg value="-Dom.home=${om.dist.webapp}" />
+			<jvmarg value="-Dlanguages.home=${webapp.dir}/languages" />
+			<jvmarg value="-Dred5.root=${red5.root}" />
+			<jvmarg value="-Dbasedir=${basedir}" />
+			<jvmarg value="-Dred5.config_root=${red5.root}/conf" />
+			<jvmarg value="-Dbackups.dir=${junit.backups.dir}" />
+			<formatter type="${junit.test.formatter}" />
+			<batchtest todir="${junit.report.dir}">
+				<fileset dir="${main.out.dir}">
+					<include name="org/apache/openmeetings/test/**/${junit.test.pattern}.class" />
+					<exclude name="org/apache/openmeetings/test/selenium/${junit.test.pattern}.class" />
+					<exclude name="**/*$$*.class" />
+				</fileset>
+			</batchtest>
+		</junit>
+		
+		<junitreport todir="${junit.report.dir}">
+			<fileset dir="${junit.report.dir}">
+				<include name="TEST-*.xml" />
+			</fileset>
+			<report todir="${junit.report.dir}" />
+		</junitreport>
+		<fail message="Errors/failures in JUnit tests.">
+			<condition>
+				<or>
+					<isset property="junit.failed"/>
+					<isset property="junit.error"/>
+				</or>
+			</condition>
+		</fail>
+	</target>
+	<target name="smoke.test" depends="dist" description="Will run 'Smoke' subset of tests">
+		<antcall target="test">
+			<param name="junit.test.pattern" value="TestSmoke*" />
+		</antcall>
+	</target>
+
+	<target name="-check-ivy-installed">
+		<available file="${ivy.jar.path}" type="file" property="ivy.installed" />
+	</target>
+	<target name="-download-ivy" depends="-check-ivy-installed" unless="ivy.installed">
+		<mkdir dir="${project.lib.dir}"/>
+		<echo message="Downloading ivy..."/>
+		<get src="http://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
+			dest="${ivy.jar.path}" usetimestamp="true"/>
+	</target>
+	
+	<target name="-install-ivy" depends="-download-ivy" description="Check if we need to download ivy or not">
+		<taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpath="${ivy.jar.path}"/>
+	</target>
+	
+	<target name="-availability-check" unless="red5.installed" description="Check which libraries need to be retrieved" depends="prepare.mkdir">
+		<available classpathref="check.classpath" classname="javax.persistence.spi.PersistenceProvider" property="mainlib.installed" />
+		<available classpathref="check.classpath" classname="org.apache.axis2.Version" property="om.installed" />
+		<available classpathref="check.classpath" classname="net.sf.antcontrib.AntContribVersion" property="junit.installed" />
+		<available classpathref="check.classpath" classname="com.thaiopensource.relaxng.translate.Driver" property="dtd-generator.installed" />
+		<available classpathref="check.classpath" classname="org.apache.commons.cli.CommandLine" property="cmdadmin.installed" />
+		<condition property="anakia.installed">
+			<and>
+				<available classpathref="check.anakia.classpath" classname="org.apache.oro.text.GlobCompiler" />
+				<available classpathref="check.anakia.classpath" classname="org.jdom.JDOMException" />
+			</and>
+		</condition> 
+		<available classpathref="check.anakia.classpath" classname="org.apache.oro.text.GlobCompiler" property="anakia.installed" />
+		<available classpathref="check.rat.classpath" classname="org.apache.rat.Report" property="rat.installed" />
+		<available classpathref="svntask.classpath" classname="org.tmatesoft.svn.core.SVNCommitInfo" property="svntask.installed" />
+		<available classpathref="check.classpath" classname="com.mysql.jdbc.Driver" property="mysql.installed" />
+		<available classpathref="check.classpath" classname="org.apache.derby.jdbc.ClientDriver" property="derby.installed" />
+		<available file="${laszlo.home}/WEB-INF/lib" type="dir" property="laszlo.installed" />
+		<available file="${laszlo46.home}/WEB-INF/lib" type="dir" property="laszlo46.installed" />
+		<available file="${red5.lib}/red5.sh" type="file" property="red5.server.installed" />
+		<available classpathref="check.classpath" classname="org.red5.client.net.rtmp.RTMPClient" property="red5.client.installed" />
+	</target>
+
+	<target name="-retrieve" depends="-install-ivy" description="Retrieves the libraries if needed">
+		<condition property="ivy.conf.name" value="red5">
+			<not>
+				<isset property="ivy.conf.name" />
+			</not>
+		</condition>
+		<condition property="ivy.lib.location" value="${mainlibs.lib.dir}">
+			<not>
+				<isset property="ivy.lib.location" />
+			</not>
+		</condition>
+		<condition property="ivy.transitive" value="false">
+			<not>
+				<isset property="ivy.transitive" />
+			</not>
+		</condition>
+		<echo message="Ivy conf name: ${ivy.conf.name}, destination: ${ivy.lib.location}" />
+		<ivy:resolve file="ivy.xml" conf="${ivy.conf.name}" checkIfChanged="false" transitive="${ivy.transitive}" />
+		<ivy:retrieve conf="${ivy.conf.name}" pattern="${ivy.lib.location}/[artifact]-[type]-[revision].[ext]" />
+	</target>
+	
+	<target name="-patch-red5-server-start-script" if="jrebel.home">
+		<echo>Going to patch red5-debug.* with ${jrebel.home}</echo>
+		<filter token="jrebel.home" value="${jrebel.home}" />
+		<filter token="project.home" value="${user.dir}" />
+		<copy todir="${red5.lib}" filtering="true" overwrite="true" force="true">
+			<fileset dir="${webcontent.base.dir}/jrebel" includes="red5-debug.*"/>
+		</copy>
+	</target>
+	
+	<target name="-maven-task" unless="maven.installed">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="mvn" />
+			<param name="ivy.lib.location" value="${project.lib.dir}" />
+		</antcall>
+		<path id="maven-ant-tasks.classpath">
+			<fileset dir="${project.lib.dir}" includes="maven-ant-tasks*.jar" />
+		</path>
+		<typedef resource="org/apache/maven/artifact/ant/antlib.xml"
+				uri="antlib:org.apache.maven.artifact.ant"
+				classpathref="maven-ant-tasks.classpath" />
+		<property name="maven.installed" value="true" />
+	</target>
+
+	<target name="-jgit-task" unless="jgit.installed">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="jgit" />
+			<param name="ivy.lib.location" value="${project.lib.dir}" />
+			<param name="ivy.transitive" value="true" />
+		</antcall>
+		<path id="jgit-ant-tasks.classpath">
+			<fileset dir="${project.lib.dir}" includes="org.eclipse.jgit*.jar" />
+			<fileset dir="${project.lib.dir}" includes="jsch*.jar" />
+		</path>
+		<taskdef resource="org/eclipse/jgit/ant/ant-tasks.properties" classpathref="jgit-ant-tasks.classpath"/>
+		<property name="jgit.installed" value="true" />
+	</target>
+	
+	<!-- Check for the Red5 server libraries -->
+	<target name="-retrieve-red5-server" unless="red5.server.installed" description="Retrieves the libraries if needed" depends="-ant-task,-maven-task,-jgit-task">
+		<!-- Needs an empty dir to checkout to -->
+		<delete dir="${red5.server.dir}"/>
+		<git-clone uri="https://github.com/Red5/red5-server.git" dest="${red5.server.dir}" branch="v${red5.server.version}"/>
+		<artifact:mvn pom="${red5.server.dir}/pom.xml" mavenVersion="${maven.version}" fork="true" dir="${red5.server.dir}">
+			<jvmarg value="-Dmaven.buildNumber.doUpdate=false" />
+			<!--jvmarg value="-Dassembly.skipAssembly=true" /-->
+			<arg value="clean"/>
+			<arg value="package"/>
+			<arg value="-P"/>
+			<arg value="assemble"/>
+			<jvmarg value="-Dmaven.test.skip=true" />
+		</artifact:mvn>
+		<untar src="${red5.server.dir}/target/red5-server-${red5.server.version}-server.tar.gz" dest="${red5.server.dir}/target" compression="gzip"/>
+		<move todir="${red5.lib}">
+			<fileset dir="${red5.server.dir}/target/red5-server-${red5.server.version}">
+				<include name="**/*"/>
+			</fileset>
+		</move>
+	
+		<delete dir="${red5.lib}/webapps/installer" />
+		<delete dir="${red5.lib}/webapps/live" />
+		<delete dir="${red5.lib}/webapps/vod" />
+		<delete dir="${red5.lib}/webapps/chat" />
+		<delete dir="${red5.lib}/webapps/root/demos" />
+		<copy file="${webcontent.base.dir}/red5/index.html" todir="${red5.lib}/webapps/root" overwrite="true" force="true" />
+		<copy todir="${red5.lib}" overwrite="true" force="true">
+			<fileset dir="${webcontent.base.dir}/red5" includes="red5*,admin.*,network_test.sh"/>
+		</copy>
+		<!-- FIXME need to be removed as soon as JAudioTagger (will be officially Dual Licensed) -->
+		<xslt in="${red5.lib}/conf/red5-common.xml" out="${red5.lib}/conf/red5-common1.xml" style="build-jaudiotagger.xsl" />
+		<move file="${red5.lib}/conf/red5-common1.xml" tofile="${red5.lib}/conf/red5-common.xml" />
+		<copy file="${red5.server.dir}/src/main/server/conf/red5.properties" todir="${red5.lib}/conf" overwrite="true" force="true">
+			<filterchain>
+				<tokenfilter>
+					<replaceregex pattern="^[ \t]*rtmp.max_handling_time[ \t]*=.*$" replace="rtmp.max_handling_time=${rtmp.max.time}"/>
+				</tokenfilter>
+			</filterchain>
+		</copy>
+		<delete>
+			<fileset dir="${red5.server.lib}" includes="jaudiotagger*.jar" />
+		</delete>
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="tomcat-embed-websocket" />
+			<param name="ivy.lib.location" value="${red5.lib}/plugins" />
+			<param name="ivy.transitive" value="false" />
+		</antcall>
+		<antcall target="-patch-red5-server-start-script"/> 
+	</target>
+	
+	<!-- Check for the Red5 client libraries -->
+	<target name="-retrieve-red5-client" unless="red5.client.installed" description="Retrieves the libraries if needed" depends="-retrieve-red5-server,-jgit-task">
+		<delete>
+			<fileset dir="${red5.client.lib}" includes="*" />
+		</delete>
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="red5-client" />
+			<param name="ivy.lib.location" value="${red5.client.lib}" />
+			<param name="ivy.transitive" value="false" />
+		</antcall>
+
+		<echo message="Red5 Client build" />
+	</target>
+
+	<!-- Check for the Top level libraries -->
+	<target name="-retrieve-mainlibs" unless="mainlib.installed" description="Retrieves the libraries if needed" depends="-retrieve-red5-client">
+		<!-- Ivy configuration - http://ant.apache.org/ivy/history/trunk/ant.html -->
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="mainlib" />
+			<param name="ivy.lib.location" value="${mainlibs.lib.dir}" />
+		</antcall>
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="mainlib.ext" />
+			<param name="ivy.lib.location" value="${mainlibs.lib.dir}" />
+		</antcall>
+		<delete>
+			<fileset dir="${mainlibs.lib.dir}" includes="*-source*.jar" />
+			<fileset dir="${mainlibs.lib.dir}" includes="*-javadoc*.jar" />
+		</delete>
+	</target>
+	<!-- Check for the OM libraries -->
+	<target name="-retrieve-om" unless="om.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="openmeetings" />
+			<param name="ivy.lib.location" value="${om.lib.dir}" />
+		</antcall>
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="openmeetings.ext" />
+			<param name="ivy.lib.location" value="${om.lib.dir}" />
+		</antcall>
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="openmeetings.axis2" />
+			<param name="ivy.lib.location" value="${om.lib.dir}" />
+			<param name="ivy.transitive" value="true" />
+		</antcall>
+		<delete>
+			<fileset dir="${om.lib.dir}" includes="commons-logging*.jar" />
+			<fileset dir="${om.lib.dir}" includes="commons-codec*.jar" />
+			<fileset dir="${om.lib.dir}" includes="commons-fileupload*.jar" />
+			<fileset dir="${om.lib.dir}" includes="commons-io*.jar" />
+			<fileset dir="${om.lib.dir}" includes="httpcore-jar*.jar" />
+			<fileset dir="${om.lib.dir}" includes="httpclient-jar*.jar" />
+			<fileset dir="${om.lib.dir}" includes="slf4j-api*.jar" />
+			<fileset dir="${om.lib.dir}" includes="stax-api-jar-1.0.jar" />
+			<fileset dir="${om.lib.dir}" includes="*-source*.jar" />
+			<fileset dir="${om.lib.dir}" includes="*-javadoc*.jar" />
+		</delete>
+	</target>
+	<!-- Check for the Anakia libraries -->
+	<target name="-retrieve-anakia" unless="anakia.installed" description="Retrieves the libraries if needed" depends="-retrieve-mainlibs">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="anakia" />
+			<param name="ivy.lib.location" value="${anakia.lib.dir}" />
+		</antcall>
+	</target>
+	<!-- Check for junit libraries -->
+	<target name="-retrieve-junit" unless="junit.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="junit" />
+			<param name="ivy.lib.location" value="${junit.lib.dir}" />
+			<param name="ivy.transitive" value="true" />
+		</antcall>
+	</target>
+	<!-- Check for rat libraries -->
+	<target name="-retrieve-rat" unless="rat.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="rat" />
+			<param name="ivy.lib.location" value="${rat.lib.dir}" />
+		</antcall>
+	</target>
+	<!-- Check for dtd-generator libraries -->
+	<target name="-retrieve-dtd-generator" unless="dtd-generator.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="dtd" />
+			<param name="ivy.lib.location" value="${dtd-generator.lib.dir}" />
+		</antcall>
+	</target>
+	<!-- Check for svntask libraries -->
+	<target name="-retrieve-svntask" unless="svntask.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="svntask" />
+			<param name="ivy.lib.location" value="${svntask.lib.dir}" />
+			<param name="ivy.transitive" value="true" />
+		</antcall>
+	</target>
+	<!-- Check for JDK 1.6 tools.jar libraries -->
+	<target name="-retrieve-tools.jar" unless="tools.jar.installed" description="Retrieves the libraries if needed">
+		<available file="${java.home}/Classes/classes.jar" type="file" property="tools.jar.path" value="${java.home}/Classes/classes.jar" />
+		<available file="${java.home}/../Classes/classes.jar" type="file" property="tools.jar.path" value="${java.home}/../Classes/classes.jar" />
+		<available file="${java.home}/lib/tools.jar" type="file" property="tools.jar.path" value="${java.home}/lib/tools.jar" />
+		<available file="${java.home}/../lib/tools.jar" type="file" property="tools.jar.path" value="${java.home}/../lib/tools.jar" />
+		<available file="${tools.jar.path}" type="file" property="tools.jar.installed" />
+
+		<copy file="${tools.jar.path}" tofile="${project.lib.dir}/java_16_tools.jar" />
+	</target>
+	<!-- Check for Openlaszlo -->
+	<target name="-extract-tgz" description="Extracts given tar into ${build.base.dir} folder">
+		<echo message="Going to extract ${dep.file} to the ${build.base.dir}" />
+		<untar src="${dep.file}" dest="${build.base.dir}" compression="gzip" />
+	</target>
+	<target name="-retrieve-openlaszlo" unless="laszlo.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="openlaszlo" />
+			<param name="ivy.lib.location" value="${laszlo.home}" />
+		</antcall>
+		<delete>
+			<fileset dir="${laszlo.home}" includes="openlaszlo*.tgz"/>
+		</delete>
+	</target>
+	<target name="-retrieve-openlaszlo46" unless="laszlo46.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="openlaszlo46" />
+			<param name="ivy.lib.location" value="${laszlo46.home}" />
+		</antcall>
+		<chmod dir="${laszlo46.home}/WEB-INF/flexsdk" perm="755" includes="**/mxmlc*" />
+		<delete>
+			<fileset dir="${laszlo46.home}" includes="openlaszlo*.tgz"/>
+		</delete>
+	</target>
+	<!-- Check for Command line admin depandencies -->
+	<target name="-retrieve-cmdadmin" unless="cmdadmin.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="cmdadmin" />
+			<param name="ivy.lib.location" value="${red5.lib}" />
+		</antcall>
+	</target>
+
+	<target name="-retrieve-db2" unless="db2.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<!-- empty -->
+	</target>
+
+	<target name="-retrieve-mssql" unless="mssql.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<!-- empty -->
+	</target>
+		
+	<target name="-retrieve-derby" unless="derby.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<!-- retrieved automatically, added for compatibility -->
+	</target>
+
+	<target name="-retrieve-mysql" unless="mysql.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<antcall target="-retrieve" inheritAll="true" inheritRefs="true">
+			<param name="ivy.conf.name" value="mysql" />
+			<param name="ivy.lib.location" value="${om.lib.dir}" />
+		</antcall>
+	</target>
+
+	<target name="-retrieve-oracle" unless="oracle.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<!-- empty -->
+	</target>
+
+	<target name="-retrieve-postgresql" unless="postgresql.installed" description="Retrieves the libraries if needed" depends="-availability-check">
+		<!-- retrieved automatically, added for compatibility -->
+	</target>
+
+	<target name="-process-db" description="performs DB related tasks based on passed DB type">
+		<echo message="db.provider == ${db}" />
+		<antcall target="-retrieve-${db}" inheritAll="true" inheritRefs="true" />
+		<copy file="${webapp.dir}/WEB-INF/classes/META-INF/${db}_persistence.xml" tofile="${webapp.dir}/WEB-INF/classes/META-INF/persistence.xml" overwrite="true" />
+	</target>
+
+	<!-- Clean targets -->
+	<!-- Remove classes directory for clean build -->
+	<target name="clean.classes" description="Clean Classes">
+		<delete includeemptydirs="true" dir="${main.out.dir}" />
+	</target>
+
+	<target name="clean.dist" description="Clean Dist dir">
+		<delete includeemptydirs="true" dir="${dist.dir}" />
+	</target>
+
+	<target name="clean" depends="clean.classes, clean.dist" description="Clean For Binary">
+		<delete includeemptydirs="true" dir="${junit.base.dir}" />
+		<delete file="${keystore.file}" />
+	</target>
+
+	<target name="clean.all" depends="clean.dist" description="Clean All">
+		<delete includeemptydirs="true" dir="${build.base.dir}" />
+	</target>
+	
+	<target name="clean.ivy" depends="clean.all,-install-ivy" description="Clears out Ivy cache and build folder">
+		<ivy:cleancache />
+	</target>
+
+	<target name="prepare-eclipse" if="java7.installed" description="Layout various files necessary for development" depends="-java7.check">
+		<antcall target="-retrieve-mainlibs" inheritAll="true" inheritRefs="true" />
+		<antcall target="-retrieve-om" inheritAll="true" inheritRefs="true" />
+		<antcall target="-retrieve-junit" inheritAll="true" inheritRefs="true" />
+		<antcall target="-retrieve-dtd-generator" inheritAll="true" inheritRefs="true" />
+		<antcall target="-retrieve-tools.jar" inheritAll="true" inheritRefs="true" />
+		<antcall target="-retrieve-openlaszlo" inheritAll="true" inheritRefs="true" />
+		<antcall target="-retrieve-openlaszlo46" inheritAll="true" inheritRefs="true" />
+		<antcall target="-retrieve-cmdadmin" inheritAll="true" inheritRefs="true" />
+		<antcall target="-retrieve-anakia" inheritAll="true" inheritRefs="true" />
+		<antcall target="-process-db" inheritAll="true" inheritRefs="true" />
+	</target>
+	
+	<target name="-java7.check" unless="java7.installed" depends="info">
+		<condition property="java7.installed" value="true">
+			<and>
+				<or>
+					<equals arg1="${java.specification.version}" arg2="1.7" />
+					<equals arg1="${java.specification.version}" arg2="1.8" />
+				</or>
+				<matches string="${java.vm.specification.vendor}" pattern=".*[sun,oracle].*" casesensitive="false" singleline="true" />
+			</and>
+		</condition>
+		<echo message="Using Java ${java.version} specification: ${java.specification.version}" />
+		<fail message="Unsupported Java version - detected: ${java.version} Only Sun/Oracle Java compiler version 7 or 8 are supported.">
+			<condition>
+				<not>
+					<equals arg1="${java7.installed}" arg2="true" />
+				</not>
+			</condition>
+		</fail>
+	</target>
+	
+	<path id="loadtest.classpath">
+		<fileset dir="${om.dist.webapp}/screensharing">
+			<include name="*.jar" />
+			<exclude name="openmeetings*.jar" />
+		</fileset>
+		<pathelement path="${resources.dir}" />
+		<pathelement path="${main.out.dir}" />
+	</path>
+	
+	<property name="runTestHost" value="192.168.1.7" />
+	<property name="numberOfClient" value="50" />
+	<property name="runTestPort" value="1935" />
+	<property name="runTestContext" value="openmeetings/1" />
+	
+	<target name="doRunClientTest">
+		<parallel>
+			<java classname="org.apache.openmeetings.test.rtmp.SimulateLoadTest">
+				<arg value="${runTestHost}"/>
+				<arg value="${numberOfClient}"/>
+				<classpath refid="loadtest.classpath" />
+			</java>
+		</parallel>
+	</target>
+	
+</project>
diff --git a/ivy.xml b/ivy.xml
new file mode 100644
index 0000000..393c679
--- /dev/null
+++ b/ivy.xml
@@ -0,0 +1,459 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+ -->
+<ivy-module version="2.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
+	<info organisation="apache" module="openmeetings" />
+	<configurations defaultconfmapping="default">
+		<conf name="default" />
+		<conf name="mainlib" extends="default" description="Top level libraries" />
+		<conf name="mainlib.ext" extends="mainlib" description="Top level libraries with different pattern" />
+		<conf name="openmeetings" description="Openmeetings required libraries" />
+		<conf name="openmeetings.ext" extends="openmeetings" description="Openmeetings required libraries with different pattern" />
+		<conf name="openmeetings.axis2" extends="openmeetings.ext" description="Axis required libraries with dependencies" />
+		<conf name="anakia" description="Openmeetings required libraries" />
+		<conf name="junit" description="Unit testing dependencies" />
+		<conf name="cmdadmin" description="Command Line Admin dependencies" />
+		<conf name="rat" extends="cmdadmin" description="Apache Rat dependencies" />
+		<conf name="dtd" description="Dtd-generator dependencies" />
+		<conf name="svntask" description="Svn task dependencies" />
+		<conf name="openlaszlo" description="Openlaszlo dependencies" />
+		<conf name="openlaszlo46" description="Openlaszlo with Flex 4.6 dependencies" />
+		<conf name="mysql" description="MySQL JDBC driver" />
+		<conf name="mvn" description="Maven Ant task to build Red5" />
+		<conf name="red5-client" description="Red5 Client/Server for screensharing" />
+		<conf name="tomcat-embed-websocket" description="Websocket support for tomcat" />
+		<conf name="jgit" description="JGit Ant task to retirieve Red5" />
+	</configurations>
+	<dependencies>
+		<!--  START OF mainlib -->
+		<dependency org="commons-fileupload" name="commons-fileupload" rev="1.3" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="commons-io" name="commons-io" rev="2.4" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="asm" name="asm" rev="3.1" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.springframework" name="spring-aspects" rev="4.1.7.RELEASE" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.springframework" name="spring-jdbc" rev="4.1.7.RELEASE" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.springframework" name="spring-orm" rev="4.1.7.RELEASE" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.springframework" name="spring-tx" rev="4.1.7.RELEASE" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.springframework" name="spring-webmvc" rev="4.1.7.RELEASE" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<!-- include type="bundle" / FIXME unable to get geronimo-jpa without  sources -->
+		<dependency org="org.apache.geronimo.specs" name="geronimo-jpa_2.0_spec" rev="1.1" conf="mainlib.ext->*" transitive="false"/>
+		<!--  END OF mainlib -->
+		
+		<!--  START OF ANAKIA -->
+		<dependency org="org.jdom" name="jdom" rev="1.1" conf="anakia->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="logkit" name="logkit" rev="1.0.1" conf="anakia->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="oro" name="oro" rev="2.0.8" conf="anakia->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.velocity" name="velocity-anakia" rev="1.1.0-SNAPSHOT" conf="anakia->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<!--  END OF ANAKIA -->
+
+		<!--  START OF OPENMEETINGS -->
+		<dependency org="org.apache.axis2" name="axis2" rev="1.7.0-SNAPSHOT" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-anim" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-awt-util" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-bridge" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-codec" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-css" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-dom" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-ext" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-extension" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-gui-util" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-gvt" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-parser" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-rasterizer" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-script" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-slideshow" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-squiggle" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-svg-dom" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-svggen" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-svgpp" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-swing" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-transcoder" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-ttf2svg" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-util" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="batik-xml" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="fop" rev="1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlgraphics" name="xmlgraphics-commons" rev="1.4" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="xml-apis" name="xml-apis-ext" rev="1.3.04" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.derby" name="derby" rev="10.12.1.1" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.derby" name="derbyclient" rev="10.12.1.1" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.derby" name="derbynet" rev="10.12.1.1" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.postgresql" name="postgresql" rev="9.4-1203-jdbc41" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="dom4j" name="dom4j" rev="1.6.1" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.velocity" name="velocity" rev="1.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.velocity" name="velocity-tools" rev="2.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<!--  added to avoid downloading version 1.3 with Axis2 -->
+		<dependency org="commons-codec" name="commons-codec" rev="1.8" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="com.thoughtworks.xstream" name="xstream" rev="1.4.2" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.ws.commons.util" name="ws-commons-util" rev="1.0.2" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlrpc" name="xmlrpc-common" rev="3.1.3" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xmlrpc" name="xmlrpc-client" rev="3.1.3" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="commons-transaction" name="commons-transaction" rev="1.2" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.commons" name="commons-dbcp2" rev="2.1.1" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.commons" name="commons-pool2" rev="2.4.2" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="commons-digester" name="commons-digester" rev="2.1" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="xpp3" name="xpp3" rev="1.1.4c" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="javax.mail" name="mail" rev="1.4.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.simpleframework" name="simple-xml" rev="2.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-request" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-util" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-core" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-auth-roles" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-ioc" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-extensions" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-datetime" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="joda-time" name="joda-time" rev="2.7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-devutils" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-native-websocket-core" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.wicket" name="wicket-native-websocket-javax" rev="7.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui-core" rev="7.1.0" conf="openmeetings->*" transitive="false"/>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui" rev="7.1.0" conf="openmeetings->*" transitive="false"/>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui-calendar" rev="7.1.0" conf="openmeetings->*" transitive="false"/>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-jquery-ui-plugins" rev="7.1.0" conf="openmeetings->*" transitive="false"/>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-kendo-ui" rev="7.1.0" conf="openmeetings->*" transitive="false"/>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-kendo-ui-theme-default" rev="7.1.0" conf="openmeetings->*" transitive="false"/>
+		<dependency org="com.googlecode.wicket-jquery-ui" name="wicket-kendo-ui-culture" rev="7.1.0" conf="openmeetings->*" transitive="false"/>
+		<dependency org="org.threeten" name="threetenbp" rev="1.3.1" conf="openmeetings->*" transitive="false"/>
+		<dependency org="ro.fortsoft.wicket.dashboard" name="wicket-dashboard-core" rev="0.13.0+wicket-7" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="com.google.code.gson" name="gson" rev="2.2.4" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.wicketstuff" name="wicketstuff-urlfragment" rev="7.0.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.wicketstuff" name="wicketstuff-html5" rev="7.0.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.wicketstuff" name="wicketstuff-select2" rev="7.0.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.wicketstuff" name="jqplot" rev="7.0.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="br.com.digilabs.jqplot" name="jqplot4java" rev="1.3.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.json" name="json" rev="20090211" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="commons-net" name="commons-net" rev="3.3" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="com.googlecode.jsmpp" name="jsmpp" rev="2.1.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.smslib" name="smslib" rev="3.5.4" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.asteriskjava" name="asterisk-java" rev="1.0.0" conf="openmeetings->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.directory.api" name="api-all" rev="1.0.0-M32" conf="openmeetings->*" >
+			<include type="jar" />
+		</dependency>
+		<!-- BEGIN openjpa -->
+		<dependency org="org.apache.geronimo.specs" name="geronimo-jms_1.1_spec" rev="1.1.1" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="net.sourceforge.serp" name="serp" rev="1.15.1" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.xbean" name="xbean-asm5-shaded" rev="3.17" conf="openmeetings->*" transitive="false" />
+		<dependency org="org.apache.openjpa" name="openjpa-jdbc" rev="2.4.0" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.openjpa" name="openjpa-jest" rev="2.4.0" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.openjpa" name="openjpa-kernel" rev="2.4.0" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.openjpa" name="openjpa-lib" rev="2.4.0" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.openjpa" name="openjpa-persistence" rev="2.4.0" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.openjpa" name="openjpa-persistence-jdbc" rev="2.4.0" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.openjpa" name="openjpa-slice" rev="2.4.0" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.openjpa" name="openjpa-xmlstore" rev="2.4.0" conf="openmeetings->*" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.openjpa" name="openjpa" rev="2.4.0" conf="openmeetings->*" transitive="false" />
+		<!-- END openjpa -->
+
+		<dependency org="org.mnode.ical4j" name="ical4j" rev="1.0.6" conf="openmeetings.ext->*" transitive="false"/>
+		<!-- iCal4j seems to need this JAR -->
+		<dependency org="backport-util-concurrent" name="backport-util-concurrent" rev="3.1" conf="openmeetings->*"/>
+		
+		<dependency org="org.apache.ws.commons.axiom" name="axiom-impl" rev="1.2.14" conf="openmeetings.axis2->*" transitive="true">
+			<exclude name='commons-io' />
+			<exclude name='commons-logging' />
+		</dependency>
+		<dependency org="org.apache.ws.commons.axiom" name="axiom-dom" rev="1.2.14" conf="openmeetings.axis2->*" transitive="false" />
+		<dependency org="org.apache.axis2" name="axis2-transport-http" rev="1.7.0-SNAPSHOT" conf="openmeetings.axis2->*"/>
+		<dependency org="org.apache.axis2" name="axis2-transport-local" rev="1.7.0-SNAPSHOT" conf="openmeetings.axis2->*"/>
+		<dependency org="org.apache.axis2" name="mex" rev="1.7.0-SNAPSHOT" conf="openmeetings.axis2->*"/>
+		<dependency org="org.apache.axis2" name="axis2-jaxws" rev="1.7.0-SNAPSHOT" conf="openmeetings.axis2->*"/>
+		<!--  END OF OPENMEETINGS -->
+
+		<!--  START OF JUNIT -->
+		<dependency org="junit" name="junit" rev="4.12" conf="junit->*" transitive="true">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.springframework" name="spring-test" rev="4.1.7.RELEASE" conf="junit->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="ant-contrib" name="ant-contrib" rev="1.0b3" conf="junit->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.seleniumhq.selenium" name="selenium-java" conf="junit->*" rev="2.48.2" transitive="true">
+			<include type="jar" />
+		</dependency>
+		<!--  END OF JUNIT -->
+		
+		<!--  START OF RAT -->
+		<dependency org="org.apache.rat" name="apache-rat-core" rev="0.11" conf="rat->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.apache.rat" name="apache-rat-tasks" rev="0.11" conf="rat->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<!--  END OF RAT -->
+		
+		<!--  START OF DTD -->
+		<dependency org="com.thaiopensource" name="trang" rev="20091111" conf="dtd->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<!--  END OF DTD -->
+		
+		<!--  START OF svntask -->
+		<dependency org="org.tmatesoft.svnkit" name="svnkit" rev="1.7.11" conf="svntask->*" transitive="true">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.tigris.subclipse" name="svnant" rev="1.3.1" conf="svntask->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<dependency org="org.tigris.subclipse" name="svnclientadapter" rev="1.3.1" conf="svntask->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<!--  END OF svntask -->
+		
+		<!--  START OF openlaszlo -->
+		<dependency org="org.openlaszlo" name="openlaszlo" rev="4.9" conf="openlaszlo->*" transitive="false">
+			<artifact name="openlaszlo" type="tgz"/>
+			<include type="tgz" />
+		</dependency>
+		<!--  END OF openlaszlo -->
+		
+		<!--  START OF openlaszlo46 -->
+		<dependency org="org.openlaszlo" name="openlaszlo" rev="4.9.5" conf="openlaszlo46->*" transitive="false">
+			<artifact name="openlaszlo" type="tgz"/>
+			<include type="tgz" />
+		</dependency>
+		<!--  END OF openlaszlo46 -->
+		
+		<!--  START OF Command Line Admin -->
+		<dependency org="commons-cli" name="commons-cli" rev="1.3.1" conf="cmdadmin->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<!--  END OF Command Line Admin -->
+		
+		<!--  START OF MySQL Driver -->
+		<dependency org="mysql" name="mysql-connector-java" rev="5.1.35" conf="mysql->*" transitive="false">
+			<include type="jar" />
+		</dependency>
+		<!--  END OF MySQL Driver -->
+
+		<!-- MVN --> 
+		<dependency org="org.apache.maven" name="maven-ant-tasks" conf="mvn->*" rev="2.1.3" transitive="false" >
+			<include type="jar" />
+		</dependency>
+
+		<!-- JGIT -->
+		<dependency org="org.eclipse.jgit" name="org.eclipse.jgit.ant" conf="jgit->*" rev="3.6.0.201412230720-r" transitive="true" >
+			<include type="jar" />
+			<exclude org="org.apache.ant"/>
+		</dependency>
+
+		<!-- red5-client -->
+		<dependency org="org.red5" name="red5-client" conf="red5-client->*" rev="1.0.6-RELEASE" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		
+		<!-- tomcat-embed-websocket -->
+		<dependency org="org.apache.tomcat.embed" name="tomcat-embed-websocket" conf="tomcat-embed-websocket->*" rev="8.0.26" transitive="false" >
+			<include type="jar" />
+		</dependency>
+		
+		<exclude org="dom4j" module="dom4j" type="javadoc" ext="*" conf="*" matcher="exact"/>		
+		<exclude org="javax.servlet" module="servlet-api" type="*" ext="*" conf="*" matcher="exact"/>		
+		<exclude org="cglib" module="cglib-nodep" type="*" ext="*" conf="*" matcher="exact"/>
+		<exclude org="pull-parser" module="pull-parser" type="*" ext="*" conf="*" matcher="exact"/>
+		<exclude org="org.apache.mina" module="mina-core" type="*" ext="*" conf="*" matcher="exact"/>
+		<exclude org="com.ibm.websphere" module="websphere_uow_api" type="*" ext="*" conf="*" matcher="exact"/>
+		<exclude org="commons-pool" module="commons-pool" type="*" ext="*" conf="*" matcher="exact"/>
+		<exclude org="org.apache.commons" module="commons-lang3" type="*" ext="*" conf="*" matcher="exact"/>
+	</dependencies>
+</ivy-module>
+
diff --git a/ivysettings.xml b/ivysettings.xml
new file mode 100644
index 0000000..b17538f
--- /dev/null
+++ b/ivysettings.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<ivysettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="ivysettings.xsd">
+	<settings defaultResolver="chain"/>
+	<resolvers>
+		<chain name="chain">
+			<ibiblio name="central" m2compatible="true"/>
+			<ibiblio name="apache-public" m2compatible="true" root="https://repository.apache.org/content/groups/public" />
+			<ibiblio name="apache-snapshot" m2compatible="true" root="https://repository.apache.org/content/groups/snapshots" />
+			<url name="mavencentral" m2compatible="true">
+				<artifact pattern="http://repo1.maven.org/maven2/[organisation]/[artifact]-[revision].[ext]" />
+			</url>
+			<url name="sonatype" m2compatible="true">
+				<artifact pattern="https://oss.sonatype.org/content/repositories/releases/[organisation]/[artifact]/[revision]/[artifact]-[revision].[ext]" />
+			</url>
+			<url name="svnkit" m2compatible="true">
+				<artifact pattern="http://maven.tmatesoft.com/content/repositories/releases/[organisation]/[artifact]/[revision]/[artifact]-[revision].[ext]" />
+			</url>
+			<url name="bintray" m2compatible="true">
+				<artifact pattern="https://dl.bintray.com/openmeetings/maven/[organisation]/[artifact]/[revision]/[artifact](-[revision]).[ext]" />
+			</url>
+			<url name="smslib" m2compatible="true">
+				<artifact pattern="http://smslib.org/maven2/v3/[organisation]/[artifact]/[revision]/[artifact]-[revision].[ext]" />
+			</url>
+			<!--url name="wicket-jquery-ui" m2compatible="true">
+				<artifact pattern="https://oss.sonatype.org/content/repositories/snapshots/[organisation]/[artifact]/6.20.2-SNAPSHOT/[artifact]-[revision].[ext]" />
+			</url-->
+		</chain>
+	</resolvers>
+	<triggers>
+		<ant-call target="-extract-tgz" prefix="dep" event="post-download-artifact" filter="type=tgz"/>
+	</triggers>
+</ivysettings>
+
diff --git a/ivysettings.xsd b/ivysettings.xsd
new file mode 100644
index 0000000..c506c7d
--- /dev/null
+++ b/ivysettings.xsd
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

+  <xs:element name="ivysettings">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element ref="settings"/>

+        <xs:element ref="resolvers"/>

+        <xs:element ref="triggers" minOccurs="0"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="settings">

+    <xs:complexType>

+      <xs:attribute name="defaultResolver" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="resolvers">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element ref="chain" maxOccurs="unbounded"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="chain">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="ibiblio"/>

+        <xs:element maxOccurs="unbounded" ref="url"/>

+      </xs:sequence>

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="ibiblio">

+    <xs:complexType>

+      <xs:attribute name="m2compatible" use="required" type="xs:boolean"/>

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+      <xs:attribute name="root" type="xs:anyURI"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="url">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="artifact"/>

+      </xs:sequence>

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+      <xs:attribute name="m2compatible" use="optional" type="xs:NCName"/>

+      <xs:attribute name="checksums" use="optional" type="xs:string"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="artifact">

+    <xs:complexType>

+      <xs:attribute name="pattern" use="required"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="triggers">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element ref="ant-call"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="ant-call">

+    <xs:complexType>

+      <xs:attribute name="event" use="required" type="xs:NCName"/>

+      <xs:attribute name="filter" use="required"/>

+      <xs:attribute name="prefix" use="required" type="xs:NCName"/>

+      <xs:attribute name="target" use="required" type="xs:NMTOKEN"/>

+    </xs:complexType>

+  </xs:element>

+</xs:schema>

diff --git a/src/axis/java/org/apache/openmeetings/axis/services/BaseWebService.java b/src/axis/java/org/apache/openmeetings/axis/services/BaseWebService.java
new file mode 100644
index 0000000..cd9b0c5
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/BaseWebService.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import javax.servlet.ServletContext;
+
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.transport.http.HTTPConstants;
+import org.apache.openmeetings.servlet.BeanUtil;
+import org.apache.openmeetings.servlet.ServerNotInitializedException;
+
+public abstract class BaseWebService {
+	private BeanUtil beanUtil = new BeanUtil();
+	
+	private ServletContext getServletContext() throws AxisFault {
+		try {
+			MessageContext mc = MessageContext.getCurrentMessageContext();
+			return (ServletContext) mc.getProperty(HTTPConstants.MC_HTTP_SERVLETCONTEXT);
+		} catch (Exception err) {
+			throw new AxisFault("Servlet context is not available yet, retry in couple of seconds");
+		}
+	}
+	
+	// package access
+	<T> T getBean(Class<? extends T> clazz) throws AxisFault {
+		try {
+			return beanUtil.getBean(clazz, getServletContext());
+		} catch (ServerNotInitializedException e) {
+			throw new AxisFault(e.getMessage());
+		}
+	}
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/CalendarWebService.java b/src/axis/java/org/apache/openmeetings/axis/services/CalendarWebService.java
new file mode 100644
index 0000000..44f1256
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/CalendarWebService.java
@@ -0,0 +1,543 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.data.calendar.management.AppointmentLogic;
+import org.apache.openmeetings.db.dao.calendar.AppointmentCategoryDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.calendar.AppointmentCategoryDTO;
+import org.apache.openmeetings.db.dto.calendar.AppointmentDTO;
+import org.apache.openmeetings.db.dto.calendar.AppointmentReminderTypeDTO;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * CalendarService contains methods to create, edit delete calendar meetings
+ * 
+ * @author sebawagner
+ * @webservice CalendarService
+ * 
+ */
+public class CalendarWebService {
+	private static final Logger log = Red5LoggerFactory.getLogger(CalendarWebService.class, webAppRootKey);
+
+	@Autowired
+	private AppointmentDao appointmentDao;
+	@Autowired
+	private AppointmentLogic appointmentLogic;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private AppointmentCategoryDao appointmentCategoryDao;
+	@Autowired
+	private AppointmentReminderTypDao appointmentReminderTypDao;
+	@Autowired
+	private RoomTypeDao roomTypeDao;
+
+	private List<AppointmentDTO> getAppointments(List<Appointment> list) {
+		List<AppointmentDTO> result = new ArrayList<>(list.size());
+		for (Appointment a : list) {
+			result.add(new AppointmentDTO(a));
+		}
+		return result;
+	}
+	
+	/**
+	 * Load appointments by a start / end range for the current SID
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param starttime
+	 *            start time, yyyy-mm-dd
+	 * @param endtime
+	 *            end time, yyyy-mm-dd
+	 *            
+	 * @return - list of appointments in range
+	 */
+	public List<AppointmentDTO> getAppointmentByRange(String SID, Calendar starttime, Calendar endtime) {
+		log.debug("getAppointmentByRange : startdate - " + starttime.getTime() + ", enddate - " + endtime.getTime());
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				return getAppointments(appointmentDao.getAppointmentsByRange(users_id, starttime.getTime(), endtime.getTime()));
+			}
+		} catch (Exception err) {
+			log.error("[getAppointmentByRange]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Load appointments by a start / end range for the userId
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param userId
+	 *            the userId the calendar events should be loaded
+	 * @param starttime
+	 *            start time, yyyy-mm-dd
+	 * @param endtime
+	 *            end time, yyyy-mm-dd
+	 *            
+	 * @return - list of appointments in range
+	 */
+	public List<AppointmentDTO> getAppointmentByRangeForUserId(String SID, long userId, Calendar starttime, Calendar endtime) {
+		log.debug("getAppointmentByRangeForUserId : startdate - " + starttime.getTime() + ", enddate - " + endtime.getTime());
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return getAppointments(appointmentDao.getAppointmentsByRange(userId, starttime.getTime(), endtime.getTime()));
+			}
+		} catch (Exception err) {
+			log.error("[getAppointmentByRangeForUserId]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Get the next Calendar event for the current user of the SID
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @return - next Calendar event
+	 */
+	public AppointmentDTO getNextAppointment(String SID) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				return new AppointmentDTO(appointmentDao.getNextAppointment(users_id, new Date()));
+			}
+		} catch (Exception err) {
+			log.error("[getNextAppointmentById]", err);
+		}
+		return null;
+
+	}
+
+	/**
+	 * Get the next Calendar event for userId
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 *            
+	 * @return - next Calendar event
+	 */
+	public AppointmentDTO getNextAppointmentForUserId(String SID, long userId) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return new AppointmentDTO(appointmentDao.getNextAppointment(userId, new Date()));
+			}
+		} catch (Exception err) {
+			log.error("[getNextAppointmentById]", err);
+		}
+		return null;
+
+	}
+
+	/**
+	 * Search a calendar event for the current SID
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param appointmentName
+	 *            the search string
+	 *            
+	 * @return - calendar event list
+	 */
+	public List<AppointmentDTO> searchAppointmentByTitle(String SID, String appointmentName) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				return getAppointments(appointmentDao.searchAppointmentsByTitle(users_id, appointmentName));
+			}
+		} catch (Exception err) {
+			log.error("[searchAppointmentByName]", err);
+		}
+		return null;
+
+	}
+
+	/**
+	 * Save an appointment
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param appointmentName
+	 *            name of the calendar event
+	 * @param appointmentLocation
+	 *            location info text of the calendar event
+	 * @param appointmentDescription
+	 *            description test of the calendar event
+	 * @param appointmentstart
+	 *            start as Date yyyy-mm-ddThh:mm:ss
+	 * @param appointmentend
+	 *            end as Date yyyy-mm-ddThh:mm:ss
+	 * @param isDaily
+	 *            if the calendar event should be repeated daily (not
+	 *            implemented)
+	 * @param isWeekly
+	 *            if the calendar event should be repeated weekly (not
+	 *            implemented)
+	 * @param isMonthly
+	 *            if the calendar event should be repeated monthly (not
+	 *            implemented)
+	 * @param isYearly
+	 *            if the calendar event should be repeated yearly (not
+	 *            implemented)
+	 * @param categoryId
+	 *            the category id of the calendar event
+	 * @param remind
+	 *            the reminder type of the calendar event
+	 * @param mmClient
+	 *            List of clients, comma separated string, <br/>
+	 *            sample: '1,firstname,lastname,hans.tier@gmail.com,1,Etc/GMT+1'
+	 *            to add multiple clients you can use the same GET parameter in
+	 *            the URL multiple times, for example:
+	 *            &amp;mmClient='1,firstname,lastname,hans.tier@gmail.com,1,Etc/GMT+1'&amp;mmClient='2,firstname,lastname,hans.tier@gmail.com,1,Etc/GMT+1'
+	 *             (Please NOTE mmClient value is enclosed in single quotes)
+	 * @param roomType
+	 *            the room type for the calendar event
+	 * @param languageId
+	 *            the language id of the calendar event, notification emails
+	 *            will be send in this language
+	 * @param isPasswordProtected
+	 *            if the room is password protected
+	 * @param password
+	 *            the password for the room
+	 *            
+	 * @return - id of appointment saved
+	 */
+	public Long saveAppointment(String SID, String appointmentName,
+			String appointmentLocation, String appointmentDescription,
+			Calendar appointmentstart, Calendar appointmentend,
+			Boolean isDaily, Boolean isWeekly, Boolean isMonthly,
+			Boolean isYearly, Long categoryId, Long remind, String[] mmClient,
+			Long roomType, Long languageId,
+			Boolean isPasswordProtected, String password, long roomId) {
+		//Seems to be create
+		log.debug("saveAppointMent SID:" + SID);
+
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			log.debug("saveAppointMent users_id:" + users_id);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				Appointment a = appointmentLogic.getAppointment(appointmentName, appointmentLocation, appointmentDescription,
+						appointmentstart, appointmentend, isDaily, isWeekly, isMonthly, isYearly, categoryId, remind,
+						mmClient, roomType, languageId, isPasswordProtected, password, roomId, users_id);
+				return appointmentDao.update(a, users_id).getId();
+			} else {
+				log.error("saveAppointment : wrong user level");
+			}
+		} catch (Exception err) {
+			log.error("[saveAppointment]", err);
+		}
+		return null;
+
+	}
+
+	/**
+	 * Update an calendar event time only
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param appointmentId
+	 *            the calendar event that should be updated
+	 * @param appointmentstart
+	 *            start yyyy-mm-dd
+	 * @param appointmentend
+	 *            end yyyy-mm-dd
+	 * @param languageId
+	 *            the language id
+	 *            
+	 * @return - id of appointment updated
+	 */
+	public Long updateAppointmentTimeOnly(String SID, Long appointmentId, Date appointmentstart, Date appointmentend, Long languageId) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			Set<Right> rights = userDao.getRights(users_id);
+			if (AuthLevelUtil.hasUserLevel(rights)) {
+				Appointment a = appointmentDao.get(appointmentId);
+				if (!AuthLevelUtil.hasAdminLevel(rights) && !a.getOwner().getUser_id().equals(users_id)) {
+					throw new AxisFault("The Appointment cannot be updated by the given user");
+				}
+				if (!a.getStart().equals(appointmentstart) || !a.getEnd().equals(appointmentend)) {
+					a.setStart(appointmentstart);
+					a.setEnd(appointmentend);
+					//FIXME this might change the owner!!!!!
+					return appointmentDao.update(a, users_id).getId();
+				}					
+			}
+		} catch (Exception err) {
+			log.error("[updateAppointment]", err);
+		}
+		return null;
+
+	}
+
+	/**
+	 * Save an appointment
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param appointmentId
+	 *            the id to update
+	 * @param appointmentName
+	 *            name of the calendar event
+	 * @param appointmentLocation
+	 *            location info text of the calendar event
+	 * @param appointmentDescription
+	 *            description test of the calendar event
+	 * @param appointmentstart
+	 *            start as Date yyyy-mm-ddThh:mm:ss
+	 * @param appointmentend
+	 *            end as Date yyyy-mm-ddThh:mm:ss
+	 * @param isDaily
+	 *            if the calendar event should be repeated daily (not
+	 *            implemented)
+	 * @param isWeekly
+	 *            if the calendar event should be repeated weekly (not
+	 *            implemented)
+	 * @param isMonthly
+	 *            if the calendar event should be repeated monthly (not
+	 *            implemented)
+	 * @param isYearly
+	 *            if the calendar event should be repeated yearly (not
+	 *            implemented)
+	 * @param categoryId
+	 *            the category id of the calendar event
+	 * @param remind
+	 *            the reminder type of the calendar event
+	 * @param mmClient
+	 *            List of clients, comma separated string, <br/>
+	 *            sample: '1,firstname,lastname,hans.tier@gmail.com,1,Etc/GMT+1'
+	 *            to add multiple clients you can use the same GET parameter in
+	 *            the URL multiple times, for example:
+	 *            &amp;mmClient='1,firstname,lastname,hans.tier@gmail.com,1,Etc/GMT+1'&amp;mmClient='2,firstname,lastname,hans.tier@gmail.com,1,Etc/GMT+1'
+	 *             (Please NOTE mmClient value is enclosed in single quotes)
+	 * @param roomType
+	 *            the room type for the calendar event
+	 * @param languageId
+	 *            the language id of the calendar event, notification emails
+	 *            will be send in this language
+	 * @param isPasswordProtected
+	 *            if the room is password protected
+	 * @param password
+	 *            the password for the room
+	 *            
+	 * @return - id of appointment updated
+	 */
+	public Long updateAppointment(String SID, Long appointmentId,
+			String appointmentName, String appointmentLocation,
+			String appointmentDescription, Calendar appointmentstart,
+			Calendar appointmentend, Boolean isDaily, Boolean isWeekly,
+			Boolean isMonthly, Boolean isYearly, Long categoryId, Long remind,
+			String[] mmClient, Long roomType, Long languageId,
+			Boolean isPasswordProtected, String password) throws AxisFault {
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+			Set<Right> rights = userDao.getRights(users_id);
+
+			if (AuthLevelUtil.hasWebServiceLevel(rights) || AuthLevelUtil.hasAdminLevel(rights)) {
+				// fine
+			} else if (AuthLevelUtil.hasUserLevel(rights)) {
+				// check if the appointment belongs to the current user
+				Appointment a = appointmentDao.get(appointmentId);
+				if (!a.getOwner().getUser_id().equals(users_id)) {
+					throw new AxisFault("The Appointment cannot be updated by the given user");
+				}
+			} else {
+				throw new AxisFault("Not allowed to preform that action, Authenticate the SID first");
+			}
+
+			Appointment a = appointmentDao.get(appointmentId);
+			a.setTitle(appointmentName);
+			a.setLocation(appointmentLocation);
+			a.setDescription(appointmentDescription);
+			a.setStart(appointmentstart.getTime());
+			a.setEnd(appointmentend.getTime());
+			a.setIsDaily(isDaily);
+			a.setIsWeekly(isWeekly);
+			a.setIsMonthly(isMonthly);
+			a.setIsYearly(isYearly);
+			a.setCategory(appointmentCategoryDao.get(categoryId));
+			a.setRemind(appointmentReminderTypDao.get(remind));
+			a.getRoom().setComment(appointmentDescription);
+			a.getRoom().setName(appointmentName);
+			a.getRoom().setRoomtype(roomTypeDao.get(roomType));
+			a.setOwner(userDao.get(users_id));
+			a.setPasswordProtected(isPasswordProtected);
+			a.setPassword(password);
+			a.setMeetingMembers(new ArrayList<MeetingMember>());
+			for (String singleClient : mmClient) {
+				MeetingMember mm = appointmentLogic.getMeetingMember(users_id, languageId, singleClient);
+				mm.setAppointment(a);
+				a.getMeetingMembers().add(mm);
+			}
+			return appointmentDao.update(a, users_id).getId();
+		} catch (Exception err) {
+			log.error("[updateAppointment]", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * 
+	 * delete a calendar event
+	 * 
+	 * If the given SID is from an Administrator or Web-Service user, the user
+	 * can delete any appointment.<br/>
+	 * If the SID is assigned to a simple user, he can only delete appointments
+	 * where he is also the owner/creator of the appointment
+	 * 
+	 * @param SID
+	 *            an authenticated SID
+	 * @param appointmentId
+	 *            the id to delete
+	 * @param language_id
+	 *            the language id in which the notifications for the deleted
+	 *            appointment are send
+	 * @return - id of appointment deleted
+	 */
+	public Long deleteAppointment(String SID, Long appointmentId, Long language_id) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			Set<Right> rights = userDao.getRights(users_id);
+
+			Appointment a = appointmentDao.get(appointmentId);
+			if (AuthLevelUtil.hasWebServiceLevel(rights) || AuthLevelUtil.hasAdminLevel(rights)) {
+				// fine
+			} else if (AuthLevelUtil.hasUserLevel(rights)) {
+				// check if the appointment belongs to the current user
+				if (!a.getOwner().getUser_id().equals(users_id)) {
+					throw new AxisFault("The Appointment cannot be updated by the given user");
+				}
+			} else {
+				throw new AxisFault("Not allowed to preform that action, Authenticate the SID first");
+			}
+			appointmentDao.delete(a, users_id); //FIXME check this !!!!
+			return a.getId();
+		} catch (Exception err) {
+			log.error("[deleteAppointment]", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * 
+	 * Load a calendar event by its room id
+	 * 
+	 * @param SID
+	 * @param room_id
+	 * @return - calendar event by its room id
+	 */
+	public AppointmentDTO getAppointmentByRoomId(String SID, Long room_id) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				Appointment appStored = appointmentDao.getAppointmentByRoomId(users_id, room_id);
+				if (appStored != null) {
+					return new AppointmentDTO(appStored);
+				}
+			}
+		} catch (Exception err) {
+			log.error("[getAppointmentByRoomId]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Get all categories of calendar events
+	 * 
+	 * @param SID
+	 * @return - all categories of calendar events
+	 */
+	public List<AppointmentCategoryDTO> getAppointmentCategoryList(String SID) {
+		log.debug("AppointmenetCategoryService.getAppointmentCategoryList SID : " + SID);
+
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				return AppointmentCategoryDTO.list(appointmentCategoryDao.getAppointmentCategoryList());
+			} else {
+				log.error("AppointmenetCategoryService.getAppointmentCategoryList : UserLevel Error");
+			}
+		} catch (Exception err) {
+			log.error("[getAppointmentCategory]", err);
+		}
+		return null;
+
+	}
+
+	private List<AppointmentReminderTypeDTO> getReminders(List<AppointmentReminderTyps> list) {
+		List<AppointmentReminderTypeDTO> result = new ArrayList<>(list.size());
+		for (AppointmentReminderTyps rt : list) {
+			result.add(new AppointmentReminderTypeDTO(rt));
+		}
+		return result;
+	}
+	/**
+	 * Get all reminder types for calendar events
+	 * 
+	 * @param SID
+	 * @return - all reminder types for calendar events
+	 */
+	public List<AppointmentReminderTypeDTO> getAppointmentReminderTypList(String SID) {
+		log.debug("getAppointmentReminderTypList");
+
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				User user = userDao.get(users_id);
+				long language_id = (user == null) ? 1 : user.getLanguage_id();
+				return getReminders(appointmentReminderTypDao.getAppointmentReminderTypList(language_id));
+			} else
+				log.debug("getAppointmentReminderTypList  :error - wrong authlevel!");
+		} catch (Exception err) {
+			log.error("[getAppointmentReminderTypList]", err);
+		}
+		return null;
+	}
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/CalendarWebServiceFacade.java b/src/axis/java/org/apache/openmeetings/axis/services/CalendarWebServiceFacade.java
new file mode 100644
index 0000000..289a8d6
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/CalendarWebServiceFacade.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.db.dto.calendar.AppointmentCategoryDTO;
+import org.apache.openmeetings.db.dto.calendar.AppointmentDTO;
+import org.apache.openmeetings.db.dto.calendar.AppointmentReminderTypeDTO;
+
+public class CalendarWebServiceFacade extends BaseWebService {
+	
+	public List<AppointmentDTO> getAppointmentByRange(String SID, Calendar starttime, Calendar endtime) throws AxisFault {
+		return getBean(CalendarWebService.class).getAppointmentByRange(SID, starttime, endtime);
+	}
+
+	public List<AppointmentDTO> getAppointmentByRangeForUserId(String SID, long userId, Calendar starttime, Calendar endtime) throws AxisFault {
+		return getBean(CalendarWebService.class).getAppointmentByRangeForUserId(SID, userId, starttime, endtime);
+	}
+
+	public AppointmentDTO getNextAppointment(String SID) throws AxisFault {
+		return getBean(CalendarWebService.class).getNextAppointment(SID);
+	}
+
+	public AppointmentDTO getNextAppointmentForUserId(String SID, long userId) throws AxisFault {
+		return getBean(CalendarWebService.class).getNextAppointmentForUserId(SID, userId);
+	}
+
+	public List<AppointmentDTO> searchAppointmentByTitle(String SID, String appointmentName) throws AxisFault {
+		return getBean(CalendarWebService.class).searchAppointmentByTitle(SID, appointmentName);
+	}
+
+	public Long saveAppointment(String SID, String appointmentName,
+			String appointmentLocation, String appointmentDescription,
+			Calendar appointmentstart, Calendar appointmentend,
+			Boolean isDaily, Boolean isWeekly, Boolean isMonthly,
+			Boolean isYearly, Long categoryId, Long remind, String[] mmClient,
+			Long roomType, Long languageId,
+			Boolean isPasswordProtected, String password, long roomId) throws AxisFault {
+		return getBean(CalendarWebService.class).saveAppointment(SID, appointmentName,
+				appointmentLocation, appointmentDescription, appointmentstart,
+				appointmentend, isDaily, isWeekly, isMonthly, isYearly,
+				categoryId, remind, mmClient, roomType, languageId,
+				isPasswordProtected, password, roomId);
+	}
+
+	public Long updateAppointmentTimeOnly(String SID, Long appointmentId, Date appointmentstart, Date appointmentend, Long languageId) throws AxisFault {
+		return getBean(CalendarWebService.class).updateAppointmentTimeOnly(SID, appointmentId, appointmentstart, appointmentend, languageId);
+	}
+
+	public Long updateAppointment(String SID, Long appointmentId,
+			String appointmentName, String appointmentLocation,
+			String appointmentDescription, Calendar appointmentstart,
+			Calendar appointmentend, Boolean isDaily, Boolean isWeekly,
+			Boolean isMonthly, Boolean isYearly, Long categoryId, Long remind,
+			String[] mmClient, Long roomType, Long languageId,
+			Boolean isPasswordProtected, String password) throws AxisFault {
+		return getBean(CalendarWebService.class).updateAppointment(SID, appointmentId,
+				appointmentName, appointmentLocation, appointmentDescription,
+				appointmentstart, appointmentend, isDaily, isWeekly, isMonthly,
+				isYearly, categoryId, remind, mmClient, roomType, languageId, isPasswordProtected, password);
+	}
+
+	public Long deleteAppointment(String SID, Long appointmentId, Long language_id) throws AxisFault {
+		return getBean(CalendarWebService.class).deleteAppointment(SID, appointmentId, language_id);
+	}
+
+	public AppointmentDTO getAppointmentByRoomId(String SID, Long room_id) throws AxisFault {
+		return getBean(CalendarWebService.class).getAppointmentByRoomId(SID, room_id);
+	}
+
+	public List<AppointmentCategoryDTO> getAppointmentCategoryList(String SID) throws AxisFault {
+		return getBean(CalendarWebService.class).getAppointmentCategoryList(SID);
+	}
+
+	public List<AppointmentReminderTypeDTO> getAppointmentReminderTypList(String SID) throws AxisFault {
+		return getBean(CalendarWebService.class).getAppointmentReminderTypList(SID);
+	}
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/FileWebService.java b/src/axis/java/org/apache/openmeetings/axis/services/FileWebService.java
new file mode 100644
index 0000000..b240299
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/FileWebService.java
@@ -0,0 +1,1017 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.LinkedHashMap;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.data.file.FileProcessor;
+import org.apache.openmeetings.data.file.FileUtils;
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.file.FileExplorerObject;
+import org.apache.openmeetings.db.dto.file.LibraryPresentation;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.documents.LoadLibraryPresentation;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.StoredFile;
+import org.apache.openmeetings.util.process.ConverterProcessResultList;
+import org.apache.openmeetings.util.process.FileImportError;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Contains methods to import and upload files into the Files section of the
+ * conference room and the personal drive of any user
+ * 
+ * @author sebawagner
+ * @webservice FileService
+ * 
+ */
+public class FileWebService {
+	private static final Logger log = Red5LoggerFactory.getLogger(FileWebService.class, webAppRootKey);
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private FileExplorerItemDao fileExplorerItemDao;
+	@Autowired
+	private FileProcessor fileProcessor;
+	@Autowired
+	private FileUtils fileUtils;
+
+	/**
+	 * 
+	 * Import file from external source
+	 * 
+	 * to upload a file to a room-drive you specify: externalUserId, user if of
+	 * openmeetings user for which we upload the file room_id = openmeetings
+	 * room id isOwner = 0 parentFolderId = 0
+	 * 
+	 * to upload a file to a private-drive you specify: externalUserId, user if
+	 * of openmeetings user for which we upload the file room_id = openmeetings
+	 * room id isOwner = 1 parentFolderId = -2
+	 * 
+	 * @param SID The logged in session id with minimum webservice level
+	 * @param externalUserId
+	 *            the external user id =&gt; If the file should goto a private
+	 *            section of any user, this number needs to be set
+	 * @param externalFileId
+	 *            the external file-type to identify the file later
+	 * @param externalType
+	 *            the name of the external system
+	 * @param room_id
+	 *            the room Id, if the file goes to the private folder of an
+	 *            user, you can set a random number here
+	 * @param isOwner
+	 *            specify a 1/true AND parentFolderId==-2 to make the file goto
+	 *            the private section
+	 * @param path
+	 *            http-path where we can grab the file from, the file has to be
+	 *            accessible from the OpenMeetings server
+	 * @param parentFolderId
+	 *            specify a parentFolderId==-2 AND isOwner == 1/true AND to make
+	 *            the file goto the private section
+	 * @param fileSystemName
+	 *            the filename =&gt; Important WITH file extension!
+	 *            
+	 * @return - array of file import errors
+	 * @throws AxisFault
+	 */
+	public FileImportError[] importFile(String SID, String externalUserId,
+			Long externalFileId, String externalType, Long room_id,
+			boolean isOwner, String path, Long parentFolderId,
+			String fileSystemName) throws AxisFault {
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				URL url = new URL(path);
+				URLConnection uc = url.openConnection();
+				InputStream inputstream = new BufferedInputStream(
+						uc.getInputStream());
+
+				User externalUser = userDao.getExternalUser(externalUserId, externalType);
+
+				LinkedHashMap<String, Object> hs = new LinkedHashMap<String, Object>();
+				hs.put("user", externalUser);
+
+				ConverterProcessResultList returnError = fileProcessor
+						.processFile(externalUser.getUser_id(), room_id,
+								isOwner, inputstream, parentFolderId,
+								fileSystemName,
+								externalFileId, externalType);
+
+				// Flash cannot read the response of an upload
+				// httpServletResponse.getWriter().print(returnError);
+				hs.put("message", "library");
+				hs.put("action", "newFile");
+				hs.put("fileExplorerItem", fileExplorerItemDao
+						.getFileExplorerItemsById(returnError.getFileExplorerItemId()));
+				hs.put("error", returnError.getLogMessage());
+				hs.put("fileName", returnError.getCompleteName());
+				
+				//FIXME: Send event to UI that there is a new file
+
+				return returnError.convertToFileImportErrors();
+
+			}
+		} catch (Exception err) {
+			log.error("[importFile]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Import file from external source
+	 * 
+	 * to upload a file to a room-drive you specify: internalUserId, user if of
+	 * openmeetings user for which we upload the file room_id = openmeetings
+	 * room id isOwner = 0 parentFolderId = 0
+	 * 
+	 * to upload a file to a private-drive you specify: internalUserId, user if
+	 * of openmeetings user for which we upload the file room_id = openmeetings
+	 * room id isOwner = 1 parentFolderId = -2
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged in
+	 * @param internalUserId
+	 *            the openmeetings user id =&gt; If the file should goto a private
+	 *            section of any user, this number needs to be se
+	 * @param externalFileId
+	 *            the external file-type to identify the file later
+	 * @param externalType
+	 *            the name of the external system
+	 * @param room_id
+	 *            the room Id, if the file goes to the private folder of an
+	 *            user, you can set a random number here
+	 * @param isOwner
+	 *            specify a 1/true AND parentFolderId==-2 to make the file goto
+	 *            the private section
+	 * @param path
+	 *            http-path where we can grab the file from, the file has to be
+	 *            accessible from the OpenMeetings server
+	 * @param parentFolderId
+	 *            specify a parentFolderId==-2 AND isOwner == 1/true AND to make
+	 *            the file goto the private section
+	 * @param fileSystemName
+	 *            the filename =&gt; Important WITH file extension!
+	 *            
+	 * @return - array of file import errors
+	 * @throws AxisFault
+	 */
+	public FileImportError[] importFileByInternalUserId(String SID,
+			Long internalUserId, Long externalFileId, String externalType,
+			Long room_id, boolean isOwner, String path, Long parentFolderId,
+			String fileSystemName) throws AxisFault {
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				URL url = new URL(path);
+				URLConnection uc = url.openConnection();
+				InputStream inputstream = new BufferedInputStream(
+						uc.getInputStream());
+
+				User internalUser = userDao.get(internalUserId);
+
+				LinkedHashMap<String, Object> hs = new LinkedHashMap<String, Object>();
+				hs.put("user", internalUser);
+
+				ConverterProcessResultList returnError = fileProcessor
+						.processFile(internalUser.getUser_id(), room_id,
+								isOwner, inputstream, parentFolderId,
+								fileSystemName, 
+								externalFileId, externalType);
+
+				// Flash cannot read the response of an upload
+				// httpServletResponse.getWriter().print(returnError);
+				hs.put("message", "library");
+				hs.put("action", "newFile");
+				hs.put("fileExplorerItem", fileExplorerItemDao
+						.getFileExplorerItemsById(returnError.getFileExplorerItemId()));
+				hs.put("error", returnError);
+				hs.put("fileName", returnError.getCompleteName());
+				
+				//FIXME: Notificate UI of clients of new file
+
+				return returnError.convertToFileImportErrors();
+
+			}
+		} catch (Exception err) {
+			log.error("[importFileByInternalUserId]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * to add a folder to the private drive, set parentFileExplorerItemId = 0
+	 * and isOwner to 1/true and externalUserId/externalUserType to a valid user
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged in
+	 * @param externalUserId
+	 *            the external file-type to identify the file later
+	 * @param parentFileExplorerItemId
+	 * @param folderName
+	 *            the name of the folder
+	 * @param room_id
+	 *            the room Id, if the file goes to the private folder of an
+	 *            user, you can set a random number here
+	 * @param isOwner
+	 *            specify a 1/true AND parentFolderId==-2 to make the file goto
+	 *            the private section
+	 * @param externalFilesid
+	 *            the external file-type to identify the file later
+	 * @param externalType
+	 *            the name of the external system
+	 *            
+	 * @return - id of folder added
+	 * @throws AxisFault
+	 */
+	public Long addFolderByExternalUserIdAndType(String SID,
+			String externalUserId, Long parentFileExplorerItemId,
+			String folderName, Long room_id, Boolean isOwner,
+			Long externalFilesid, String externalType) throws AxisFault {
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				User userExternal = userDao.getExternalUser(externalUserId, externalType);
+
+				Long userId = userExternal.getUser_id();
+
+				log.debug("addFolder " + parentFileExplorerItemId);
+
+				if (parentFileExplorerItemId == -2 && isOwner) {
+					// users_id (OwnerID) => only set if its directly root in
+					// Owner Directory,
+					// other Folders and Files maybe are also in a Home
+					// directory
+					// but just because their parent is
+					return fileExplorerItemDao.add(folderName, "", 0L, userId,
+							room_id, userId, true, // isFolder
+							false, // isImage
+							false, // isPresentation
+							"", // WML Path
+							false, // isStoredWML file
+							false, // isXmlFile
+							externalFilesid, externalType);
+				} else {
+					return fileExplorerItemDao.add(folderName, "",
+							parentFileExplorerItemId, null, room_id, userId,
+							true, // isFolder
+							false, // isImage
+							false, // isPresentation
+							"", // WML Path
+							false, // isStoredWML file
+							false, // isXmlFile
+							externalFilesid, externalType);
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[addFolderByExternalUserIdAndType]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * to add a folder to the private drive, set parentFileExplorerItemId = 0
+	 * and isOwner to 1/true and userId to a valid user
+	 * 
+	 * @param SID The SID of the User. This SID must be marked as logged in
+	 * @param userId the openmeetings user id 
+	 * @param parentFileExplorerItemId specify a parentFolderId==-2 AND isOwner == 1/true AND to make the file goto the private section  
+	 * @param folderName the name of the folder 
+	 * @param room_id the room Id, if the file goes to the private folder of an user, you can set a random number here 
+	 * @param isOwner specify a 1/true AND parentFolderId==-2 to make the file goto the private section 
+	 * @param externalFilesid the external file-type to identify the file later 
+	 * @param externalType the name of the external system
+	 *  
+	 * @return - id of the folder
+	 * @throws AxisFault
+	 */
+	public Long addFolderByUserId(String SID, Long userId,
+			Long parentFileExplorerItemId, String folderName, Long room_id,
+			Boolean isOwner, Long externalFilesid, String externalType)
+			throws AxisFault {
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				log.debug("addFolder " + parentFileExplorerItemId);
+
+				if (parentFileExplorerItemId == -2 && isOwner) {
+					// users_id (OwnerID) => only set if its directly root in
+					// Owner Directory,
+					// other Folders and Files maybe are also in a Home
+					// directory
+					// but just because their parent is
+					return fileExplorerItemDao.add(folderName, "", 0L, userId,
+							room_id, userId, true, // isFolder
+							false, // isImage
+							false, // isPresentation
+							"", // WML Path
+							false, // isStoredWML file
+							false, // isXmlFile
+							externalFilesid, externalType);
+				} else {
+					return fileExplorerItemDao.add(folderName, "",
+							parentFileExplorerItemId, null, room_id, userId,
+							true, // isFolder
+							false, // isImage
+							false, // isPresentation
+							"", // WML Path
+							false, // isStoredWML file
+							false, // isXmlFile
+							externalFilesid, externalType);
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[addFolderByUserId]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * Add a folder by the current user - similar to RTMP Call
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged in
+	 * @param parentFileExplorerItemId
+	 *            parent folder id
+	 * @param fileName
+	 *            the file name
+	 * @param room_id
+	 *            the room id
+	 * @param isOwner
+	 * @return - id of the folder
+	 */
+	public Long addFolderSelf(String SID, Long parentFileExplorerItemId,
+			String fileName, Long room_id, Boolean isOwner) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				log.debug("addFolder " + parentFileExplorerItemId);
+
+				if (parentFileExplorerItemId == 0 && isOwner) {
+					// users_id (OwnerID) => only set if its directly root in
+					// Owner Directory,
+					// other Folders and Files maybe are also in a Home
+					// directory
+					// but just because their parent is
+					return fileExplorerItemDao.add(fileName, "",
+							parentFileExplorerItemId, users_id, room_id,
+							users_id, true, // isFolder
+							false, // isImage
+							false, // isPresentation
+							"", // WML Path
+							false, // isStoredWML file
+							false // isXmlFile
+							, 0L, "");
+				} else {
+					return fileExplorerItemDao.add(fileName, "",
+							parentFileExplorerItemId, null, room_id, users_id,
+							true, // isFolder
+							false, // isImage
+							false, // isPresentation
+							"", // WML Paht
+							false, // isStoredWML file
+							false // isXmlFile
+							, 0L, "");
+				}
+			}
+		} catch (Exception err) {
+			log.error("[getFileExplorerByParent] ", err);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * deletes a file by its external Id and type
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged in
+	 * @param externalFilesid
+	 *            the od of the file or folder
+	 * @param externalType
+	 *            the externalType
+	 * @return - null
+	 */
+	public Long deleteFileOrFolderByExternalIdAndType(String SID,
+			Long externalFilesid, String externalType) throws AxisFault {
+
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				fileExplorerItemDao.deleteFileExplorerItemByExternalIdAndType(
+						externalFilesid, externalType);
+
+			}
+
+		} catch (Exception err) {
+			log.error("[deleteFileOrFolderByExternalIdAndType]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * deletes files or folders based on it id
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged in
+	 * @param fileExplorerItemId
+	 *            the id of the file or folder
+	 * @return - null
+	 */
+	public Long deleteFileOrFolder(String SID, Long fileExplorerItemId)
+			throws AxisFault {
+
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				fileExplorerItemDao.deleteFileExplorerItem(fileExplorerItemId);
+
+			}
+
+		} catch (Exception err) {
+			log.error("[deleteFileOrFolder]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * deletes files or folders based on it id
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged in
+	 * @param fileExplorerItemId
+	 *            the id of the file or folder
+	 * @return - null
+	 */
+	public Long deleteFileOrFolderSelf(String SID, Long fileExplorerItemId)
+			throws AxisFault {
+
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				// TODO: Check if user has access or not to the file
+
+				fileExplorerItemDao.deleteFileExplorerItem(fileExplorerItemId);
+
+			}
+
+		} catch (Exception err) {
+			log.error("[deleteFileOrFolder]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Get available import File Extension allowed during import
+	 * 
+	 * @return the array of the import file extensions
+	 * @throws AxisFault
+	 */
+	public String[] getImportFileExtensions() throws AxisFault {
+		try {
+
+			return StoredFile.getExtensions();
+
+		} catch (Exception err) {
+			log.error("[getImportFileExtensions]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Get a LibraryPresentation-Object for a certain file
+	 * 
+	 * @param SID
+	 * @param parentFolder
+	 * 
+	 * @return - LibraryPresentation-Object for a certain file
+	 * @throws AxisFault
+	 */
+	public LibraryPresentation getPresentationPreviewFileExplorer(String SID,
+			String parentFolder) throws AxisFault {
+
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				File working_dir = new File(OmFileHelper.getUploadProfilesDir(), parentFolder);
+				log.debug("############# working_dir : " + working_dir);
+
+				File file = new File(working_dir, OmFileHelper.libraryFileName);
+
+				if (!file.exists()) {
+					throw new Exception(file.getCanonicalPath() + ": does not exist ");
+				}
+
+				return LoadLibraryPresentation.parseLibraryFileToObject(file);
+
+			} else {
+
+				throw new Exception("not Authenticated");
+
+			}
+
+		} catch (Exception e) {
+			log.error("[getListOfFilesByAbsolutePath]", e);
+			return null;
+		}
+
+	}
+
+	/**
+	 * Get a File Explorer Object by a given Room and owner id
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged in
+	 * @param room_id
+	 *            Room id
+	 * @param owner_id
+	 *            Owner id
+	 * @return - File Explorer Object by a given Room and owner id
+	 * @throws AxisFault
+	 */
+	public FileExplorerObject getFileExplorerByRoom(String SID, Long room_id,
+			Long owner_id) throws AxisFault {
+
+		try {
+
+			Long webservice_users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(webservice_users_id))) {
+
+				log.debug("room_id " + room_id);
+
+				FileExplorerObject fileExplorerObject = new FileExplorerObject();
+
+				// Home File List
+				FileExplorerItem[] fList = fileExplorerItemDao
+						.getFileExplorerItemsByOwner(owner_id, 0L);
+
+				long homeFileSize = 0;
+
+				for (FileExplorerItem homeChildExplorerItem : fList) {
+					log.debug("FileExplorerItem fList "
+							+ homeChildExplorerItem.getFileName());
+					homeFileSize += fileUtils
+							.getSizeOfDirectoryAndSubs(homeChildExplorerItem);
+				}
+
+				fileExplorerObject.setUserHome(fList);
+				fileExplorerObject.setUserHomeSize(homeFileSize);
+
+				// Public File List
+				FileExplorerItem[] rList = fileExplorerItemDao
+						.getFileExplorerItemsByRoom(room_id, 0L);
+
+				long roomFileSize = 0;
+
+				for (FileExplorerItem homeChildExplorerItem : rList) {
+					log.debug("FileExplorerItem rList "
+							+ homeChildExplorerItem.getFileName());
+					roomFileSize += fileUtils
+							.getSizeOfDirectoryAndSubs(homeChildExplorerItem);
+				}
+
+				fileExplorerObject.setRoomHome(rList);
+				fileExplorerObject.setRoomHomeSize(roomFileSize);
+
+				return fileExplorerObject;
+
+			} else {
+
+				throw new Exception("not Authenticated");
+
+			}
+
+		} catch (Exception e) {
+			log.error("[getFileExplorerByRoom]", e);
+			return null;
+		}
+	}
+
+	/**
+	 * Get a File Explorer Object by a given Room
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged in
+	 * @param room_id
+	 *            Room Id
+	 * @return - File Explorer Object by a given Room
+	 * @throws AxisFault
+	 */
+	public FileExplorerObject getFileExplorerByRoomSelf(String SID, Long room_id)
+			throws AxisFault {
+
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				log.debug("room_id " + room_id);
+
+				FileExplorerObject fileExplorerObject = new FileExplorerObject();
+
+				// Home File List
+				FileExplorerItem[] fList = fileExplorerItemDao
+						.getFileExplorerItemsByOwner(users_id, 0L);
+
+				long homeFileSize = 0;
+
+				for (FileExplorerItem homeChildExplorerItem : fList) {
+					log.debug("FileExplorerItem fList "
+							+ homeChildExplorerItem.getFileName());
+					homeFileSize += fileUtils
+							.getSizeOfDirectoryAndSubs(homeChildExplorerItem);
+				}
+
+				fileExplorerObject.setUserHome(fList);
+				fileExplorerObject.setUserHomeSize(homeFileSize);
+
+				// Public File List
+				FileExplorerItem[] rList = fileExplorerItemDao
+						.getFileExplorerItemsByRoom(room_id, 0L);
+
+				long roomFileSize = 0;
+
+				for (FileExplorerItem homeChildExplorerItem : rList) {
+					log.debug("FileExplorerItem rList "
+							+ homeChildExplorerItem.getFileName());
+					roomFileSize += fileUtils
+							.getSizeOfDirectoryAndSubs(homeChildExplorerItem);
+				}
+
+				fileExplorerObject.setRoomHome(rList);
+				fileExplorerObject.setRoomHomeSize(roomFileSize);
+
+				return fileExplorerObject;
+
+			} else {
+
+				throw new Exception("not Authenticated");
+
+			}
+
+		} catch (Exception e) {
+			log.error("[getFileExplorerByRoomSelf]", e);
+			return null;
+		}
+	}
+
+	/**
+	 * Get FileExplorerItem list by parent folder
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged in
+	 * @param parentFileExplorerItemId
+	 *            the parent folder id
+	 * @param room_id
+	 *            the room id
+	 * @param isOwner
+	 *            true if its a private drive
+	 * @param owner_id
+	 *            the owner id
+	 * @return - FileExplorerItem list by parent folder
+	 * @throws AxisFault
+	 */
+	public FileExplorerItem[] getFileExplorerByParent(String SID,
+			Long parentFileExplorerItemId, Long room_id, Boolean isOwner,
+			Long owner_id) throws AxisFault {
+
+		try {
+
+			Long webservice_users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(webservice_users_id))) {
+
+				log.debug("parentFileExplorerItemId "
+						+ parentFileExplorerItemId);
+
+				if (parentFileExplorerItemId == 0) {
+					if (isOwner) {
+						return fileExplorerItemDao.getFileExplorerItemsByOwner(
+								owner_id, parentFileExplorerItemId);
+					} else {
+						return fileExplorerItemDao.getFileExplorerItemsByRoom(
+								room_id, parentFileExplorerItemId);
+					}
+				} else {
+					return fileExplorerItemDao
+							.getFileExplorerItemsByParent(parentFileExplorerItemId);
+				}
+
+			}
+		} catch (Exception err) {
+			log.error("[getFileExplorerByParent] ", err);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * Get FileExplorerItem[] by parent and owner id
+	 * 
+	 * @param SID
+	 *            SID The SID of the User. This SID must be marked as logged in
+	 * @param parentFileExplorerItemId
+	 *            the parent folder id
+	 * @param room_id
+	 *            the room id
+	 * @param isOwner
+	 *            true to request private drive
+	 * @return - list of file explorer items
+	 * @throws AxisFault
+	 */
+	public FileExplorerItem[] getFileExplorerByParentSelf(String SID,
+			Long parentFileExplorerItemId, Long room_id, Boolean isOwner)
+			throws AxisFault {
+
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				log.debug("parentFileExplorerItemId "
+						+ parentFileExplorerItemId);
+
+				if (parentFileExplorerItemId == 0) {
+					if (isOwner) {
+						return fileExplorerItemDao.getFileExplorerItemsByOwner(
+								users_id, parentFileExplorerItemId);
+					} else {
+						return fileExplorerItemDao.getFileExplorerItemsByRoom(
+								room_id, parentFileExplorerItemId);
+					}
+				} else {
+					return fileExplorerItemDao
+							.getFileExplorerItemsByParent(parentFileExplorerItemId);
+				}
+
+			}
+		} catch (Exception err) {
+			log.error("[getFileExplorerByParentSelf] ", err);
+		}
+		return null;
+	}
+
+	/**
+	 * update a file or folder name
+	 * 
+	 * @param SID
+	 *            SID The SID of the User. This SID must be marked as logged in
+	 * @param fileExplorerItemId
+	 *            file or folder id
+	 * @param fileName
+	 *            new file or folder name
+	 * @return - null
+	 * @throws AxisFault
+	 */
+	public Long updateFileOrFolderName(String SID, Long fileExplorerItemId,
+			String fileName) throws AxisFault {
+
+		try {
+
+			Long webservice_users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(webservice_users_id))) {
+
+				log.debug("deleteFileOrFolder " + fileExplorerItemId);
+
+				fileExplorerItemDao.updateFileOrFolderName(fileExplorerItemId,
+						fileName);
+
+			}
+		} catch (Exception err) {
+			log.error("[updateFileOrFolderName] ", err);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * update a file or folder name
+	 * 
+	 * @param SID
+	 *            SID The SID of the User. This SID must be marked as logged in
+	 * @param fileExplorerItemId
+	 *            file or folder id
+	 * @param fileName
+	 *            new file or folder name
+	 * @return - null
+	 * @throws AxisFault
+	 */
+	public Long updateFileOrFolderNameSelf(String SID, Long fileExplorerItemId,
+			String fileName) throws AxisFault {
+
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				// TODO: check if this user is allowed to change this file
+				/*
+				 * FileExplorerItem fileExItem =
+				 * fileExplorerItemDao.getFileExplorerItemsById
+				 * (fileExplorerItemId);
+				 * 
+				 * if (fileExItem.getOwnerId() != null &&
+				 * !fileExItem.getOwnerId().equals(users_id)) { throw new
+				 * Exception(
+				 * "This user is not the owner of the file and not allowed to edit its name"
+				 * ); }
+				 */
+
+				log.debug("deleteFileOrFolder " + fileExplorerItemId);
+
+				fileExplorerItemDao.updateFileOrFolderName(fileExplorerItemId,
+						fileName);
+
+			}
+		} catch (Exception err) {
+			log.error("[updateFileOrFolderNameSelf] ", err);
+		}
+		return null;
+	}
+
+	/**
+	 * move a file or folder
+	 * 
+	 * @param SID
+	 *            SID The SID of the User. This SID must be marked as logged in
+	 * @param fileExplorerItemId
+	 *            current file or folder id to be moved
+	 * @param newParentFileExplorerItemId
+	 *            new parent folder id
+	 * @param room_id
+	 *            room id
+	 * @param isOwner
+	 *            if true owner id will be set
+	 * @param moveToHome
+	 *            if true move to private drive
+	 * @param owner_id
+	 *            owner id
+	 * @return - null
+	 * @throws AxisFault
+	 */
+	public Long moveFile(String SID, Long fileExplorerItemId,
+			Long newParentFileExplorerItemId, Long room_id, Boolean isOwner,
+			Boolean moveToHome, Long owner_id) throws AxisFault {
+
+		try {
+
+			Long webservice_users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(webservice_users_id))) {
+
+				log.debug("deleteFileOrFolder " + fileExplorerItemId);
+
+				fileExplorerItemDao
+						.moveFile(fileExplorerItemId,
+								newParentFileExplorerItemId, room_id, isOwner,
+								owner_id);
+
+				FileExplorerItem fileExplorerItem = fileExplorerItemDao
+						.getFileExplorerItemsById(fileExplorerItemId);
+
+				if (moveToHome) {
+					// set this file and all subfiles and folders the ownerId
+					fileUtils.setFileToOwnerOrRoomByParent(fileExplorerItem,
+							owner_id, null);
+
+				} else {
+					// set this file and all subfiles and folders the room_id
+					fileUtils.setFileToOwnerOrRoomByParent(fileExplorerItem,
+							null, room_id);
+
+				}
+
+			}
+		} catch (Exception err) {
+			log.error("[moveFile] ", err);
+		}
+		return null;
+	}
+
+	/**
+	 * move a file or folder
+	 * 
+	 * @param SID
+	 *            SID The SID of the User. This SID must be marked as logged in
+	 * @param fileExplorerItemId
+	 *            current file or folder id to be moved
+	 * @param newParentFileExplorerItemId
+	 *            new parent folder id
+	 * @param room_id
+	 *            room id
+	 * @param isOwner
+	 *            if true owner id will be set
+	 * @param moveToHome
+	 *            move to private drive
+	 * @return - null
+	 * @throws AxisFault
+	 */
+	public Long moveFileSelf(String SID, Long fileExplorerItemId,
+			Long newParentFileExplorerItemId, Long room_id, Boolean isOwner,
+			Boolean moveToHome) throws AxisFault {
+
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				
+				// A test is required that checks if the user is allowed to move the file
+
+				log.debug("moveFileSelf " + fileExplorerItemId);
+
+				fileExplorerItemDao
+						.moveFile(fileExplorerItemId,
+								newParentFileExplorerItemId, room_id, isOwner,
+								users_id);
+
+				FileExplorerItem fileExplorerItem = fileExplorerItemDao
+						.getFileExplorerItemsById(fileExplorerItemId);
+
+				if (moveToHome) {
+					// set this file and all subfiles and folders the ownerId
+					fileUtils.setFileToOwnerOrRoomByParent(fileExplorerItem,
+							users_id, null);
+
+				} else {
+					// set this file and all subfiles and folders the room_id
+					fileUtils.setFileToOwnerOrRoomByParent(fileExplorerItem,
+							null, room_id);
+
+				}
+
+			}
+		} catch (Exception err) {
+			log.error("[moveFile] ", err);
+		}
+		return null;
+	}
+
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/FileWebServiceFacade.java b/src/axis/java/org/apache/openmeetings/axis/services/FileWebServiceFacade.java
new file mode 100644
index 0000000..92a3083
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/FileWebServiceFacade.java
@@ -0,0 +1,323 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.db.dto.file.FileExplorerObject;
+import org.apache.openmeetings.db.dto.file.LibraryPresentation;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.util.process.FileImportError;
+
+public class FileWebServiceFacade extends BaseWebService {
+
+	/**
+	 * 
+	 * Import file from external source
+	 * 
+	 * to upload a file to a room-drive you specify: externalUserId, user if of
+	 * openmeetings user for which we upload the file room_id = openmeetings
+	 * room id isOwner = 0 parentFolderId = 0
+	 * 
+	 * to upload a file to a private-drive you specify: externalUserId, user if
+	 * of openmeetings user for which we upload the file room_id = openmeetings
+	 * room id isOwner = 1 parentFolderId = -2
+	 * 
+	 * @param SID
+	 * @param externalUserId
+	 *            the external user id =&gt; If the file should goto a private
+	 *            section of any user, this number needs to be set
+	 * @param externalFileId
+	 *            the external file-type to identify the file later
+	 * @param externalType
+	 *            the name of the external system
+	 * @param room_id
+	 *            the room Id, if the file goes to the private folder of an
+	 *            user, you can set a random number here
+	 * @param isOwner
+	 *            specify a 1/true AND parentFolderId==-2 to make the file goto
+	 *            the private section
+	 * @param path
+	 *            http-path where we can grab the file from, the file has to be
+	 *            accessible from the OpenMeetings server
+	 * @param parentFolderId
+	 *            specify a parentFolderId==-2 AND isOwner == 1/true AND to make
+	 *            the file goto the private section
+	 * @param fileSystemName
+	 *            the filename =&gt; Important WITH file extension!
+	 * @return
+	 * @throws AxisFault
+	 */
+	public FileImportError[] importFile(String SID, String externalUserId,
+			Long externalFileId, String externalType, Long room_id,
+			boolean isOwner, String path, Long parentFolderId,
+			String fileSystemName) throws AxisFault {
+		return getBean(FileWebService.class).importFile(SID, externalUserId,
+				externalFileId, externalType, room_id, isOwner, path,
+				parentFolderId, fileSystemName);
+	}
+
+	/**
+	 * 
+	 * Import file from external source
+	 * 
+	 * to upload a file to a room-drive you specify: internalUserId, user if of
+	 * openmeetings user for which we upload the file room_id = openmeetings
+	 * room id isOwner = 0 parentFolderId = 0
+	 * 
+	 * to upload a file to a private-drive you specify: internalUserId, user if
+	 * of openmeetings user for which we upload the file room_id = openmeetings
+	 * room id isOwner = 1 parentFolderId = -2
+	 * 
+	 * @param SID
+	 * @param internalUserId
+	 *            the openmeetings user id =&gt; If the file should goto a private
+	 *            section of any user, this number needs to be set
+	 * @param externalFileId
+	 *            the external file-type to identify the file later
+	 * @param externalType
+	 *            the name of the external system
+	 * @param room_id
+	 *            the room Id, if the file goes to the private folder of an
+	 *            user, you can set a random number here
+	 * @param isOwner
+	 *            specify a 1/true AND parentFolderId==-2 to make the file goto
+	 *            the private section
+	 * @param path
+	 *            http-path where we can grab the file from, the file has to be
+	 *            accessible from the OpenMeetings server
+	 * @param parentFolderId
+	 *            specify a parentFolderId==-2 AND isOwner == 1/true AND to make
+	 *            the file goto the private section
+	 * @param fileSystemName
+	 *            the filename =&gt; Important WITH file extension!
+	 * @return
+	 * @throws AxisFault
+	 */
+	public FileImportError[] importFileByInternalUserId(String SID,
+			Long internalUserId, Long externalFileId, String externalType,
+			Long room_id, boolean isOwner, String path, Long parentFolderId,
+			String fileSystemName) throws AxisFault {
+		return getBean(FileWebService.class).importFileByInternalUserId(SID,
+				internalUserId, externalFileId, externalType, room_id, isOwner,
+				path, parentFolderId, fileSystemName);
+	}
+
+	/**
+	 * 
+	 * to add a folder to the private drive, set parentFileExplorerItemId = 0
+	 * and isOwner to 1/true and externalUserId/externalUserType to a valid user
+	 * 
+	 * @param SID
+	 * @param externalUserId
+	 * @param externalUserType
+	 * @param parentFileExplorerItemId
+	 * @param fileName
+	 * @param room_id
+	 * @param isOwner
+	 * @param externalFilesid
+	 * @param externalType
+	 * @return
+	 * @throws AxisFault
+	 */
+	public Long addFolderByExternalUserIdAndType(String SID,
+			String externalUserId, Long parentFileExplorerItemId,
+			String folderName, Long room_id, Boolean isOwner,
+			Long externalFilesid, String externalType) throws AxisFault {
+		return getBean(FileWebService.class).addFolderByExternalUserIdAndType(SID,
+				externalUserId, parentFileExplorerItemId, folderName, room_id,
+				isOwner, externalFilesid, externalType);
+
+	}
+
+	/**
+	 * 
+	 * to add a folder to the private drive, set parentFileExplorerItemId = 0
+	 * and isOwner to 1/true and userId to a valid user
+	 * 
+	 * @param SID
+	 * @param userId
+	 * @param parentFileExplorerItemId
+	 * @param fileName
+	 * @param room_id
+	 * @param isOwner
+	 * @param externalFilesid
+	 * @param externalType
+	 * @return
+	 * @throws AxisFault
+	 */
+	public Long addFolderByUserId(String SID, Long userId,
+			Long parentFileExplorerItemId, String folderName, Long room_id,
+			Boolean isOwner, Long externalFilesid, String externalType)
+			throws AxisFault {
+		return getBean(FileWebService.class).addFolderByUserId(SID, userId,
+				parentFileExplorerItemId, folderName, room_id, isOwner,
+				externalFilesid, externalType);
+	}
+
+	/**
+	 * 
+	 * Add a folder by the current user - similar to RTMP Call
+	 * 
+	 * @param SID
+	 * @param parentFileExplorerItemId
+	 * @param fileName
+	 * @param room_id
+	 * @param isOwner
+	 * @return
+	 */
+	public Long addFolderSelf(String SID, Long parentFileExplorerItemId,
+			String fileName, Long room_id, Boolean isOwner) throws AxisFault {
+		return getBean(FileWebService.class).addFolderSelf(SID,
+				parentFileExplorerItemId, fileName, room_id, isOwner);
+	}
+	
+	public Long addFolderSelfInternal(String SID, Long parentFileExplorerItemId,
+			String fileName, Long roomId, Boolean isOwner) throws AxisFault {
+		return getBean(FileWebService.class).addFolderSelf(SID,
+				parentFileExplorerItemId, fileName, roomId, isOwner);
+	}
+	
+
+	/**
+	 * 
+	 * deletes a file by its external Id and type
+	 * 
+	 * @param SID
+	 * @param externalFilesid
+	 * @param externalType
+	 * @return
+	 */
+	public Long deleteFileOrFolderByExternalIdAndType(String SID,
+			Long externalFilesid, String externalType) throws AxisFault {
+		return getBean(FileWebService.class).deleteFileOrFolderByExternalIdAndType(
+				SID, externalFilesid, externalType);
+	}
+
+	/**
+	 * 
+	 * deletes files or folders based on it id
+	 * 
+	 * @param SID
+	 * @param fileExplorerItemId
+	 * @return
+	 */
+	public Long deleteFileOrFolder(String SID, Long fileExplorerItemId)
+			throws AxisFault {
+		return getBean(FileWebService.class).deleteFileOrFolder(SID,
+				fileExplorerItemId);
+	}
+
+	/**
+	 * 
+	 * deletes files or folders based on it id
+	 * 
+	 * @param SID
+	 * @param fileExplorerItemId
+	 * @return
+	 */
+	public Long deleteFileOrFolderSelf(String SID, Long fileExplorerItemId)
+			throws AxisFault {
+		return getBean(FileWebService.class).deleteFileOrFolderSelf(SID,
+				fileExplorerItemId);
+	}
+
+	public String[] getImportFileExtensions() throws AxisFault {
+		return getBean(FileWebService.class).getImportFileExtensions();
+	}
+
+	public LibraryPresentation getPresentationPreviewFileExplorer(String SID,
+			String parentFolder) throws AxisFault {
+		return getBean(FileWebService.class).getPresentationPreviewFileExplorer(
+				SID, parentFolder);
+	}
+
+	public FileExplorerObject getFileExplorerByRoom(String SID, Long room_id,
+			Long owner_id) throws AxisFault {
+		return getBean(FileWebService.class).getFileExplorerByRoom(SID, room_id,
+				owner_id);
+	}
+
+	public FileExplorerObject getFileExplorerByRoomSelf(String SID, Long room_id)
+			throws AxisFault {
+		return getBean(FileWebService.class)
+				.getFileExplorerByRoomSelf(SID, room_id);
+	}
+	
+	public FileExplorerObject getFileExplorerByRoomSelfInternal(String SID, Long roomId)
+			throws AxisFault {
+		return getBean(FileWebService.class)
+				.getFileExplorerByRoomSelf(SID, roomId);
+	}
+
+	public FileExplorerItem[] getFileExplorerByParent(String SID,
+			Long parentFileExplorerItemId, Long room_id, Boolean isOwner,
+			Long owner_id) throws AxisFault {
+		return getBean(FileWebService.class).getFileExplorerByParent(SID,
+				parentFileExplorerItemId, room_id, isOwner, owner_id);
+	}
+
+	public FileExplorerItem[] getFileExplorerByParentSelf(String SID,
+			Long parentFileExplorerItemId, Long room_id, Boolean isOwner)
+			throws AxisFault {
+		return getBean(FileWebService.class).getFileExplorerByParentSelf(SID,
+				parentFileExplorerItemId, room_id, isOwner);
+	}
+	
+	public FileExplorerItem[] getFileExplorerByParentSelfInternal(String SID,
+			Long parentFileExplorerItemId, Long roomId, Boolean isOwner)
+			throws AxisFault {
+		return getBean(FileWebService.class).getFileExplorerByParentSelf(SID,
+				parentFileExplorerItemId, roomId, isOwner);
+	}
+
+	public Long updateFileOrFolderName(String SID, Long fileExplorerItemId,
+			String fileName) throws AxisFault {
+		return getBean(FileWebService.class).updateFileOrFolderName(SID,
+				fileExplorerItemId, fileName);
+	}
+
+	public Long updateFileOrFolderNameSelf(String SID, Long fileExplorerItemId,
+			String fileName) throws AxisFault {
+		return getBean(FileWebService.class).updateFileOrFolderNameSelf(SID,
+				fileExplorerItemId, fileName);
+	}
+
+	public Long moveFile(String SID, Long fileExplorerItemId,
+			Long newParentFileExplorerItemId, Long room_id, Boolean isOwner,
+			Boolean moveToHome, Long owner_id) throws AxisFault {
+		return getBean(FileWebService.class).moveFile(SID, fileExplorerItemId,
+				newParentFileExplorerItemId, room_id, isOwner, moveToHome,
+				owner_id);
+	}
+
+	public Long moveFileSelf(String SID, Long fileExplorerItemId,
+			Long newParentFileExplorerItemId, Long room_id, Boolean isOwner,
+			Boolean moveToHome) throws AxisFault {
+		return getBean(FileWebService.class).moveFileSelf(SID, fileExplorerItemId,
+				newParentFileExplorerItemId, room_id, isOwner, moveToHome);
+	}
+	
+	public Long moveFileSelfInternal(String SID, Long fileExplorerItemId,
+			Long newParentFileExplorerItemId, Long roomId, Boolean isOwner,
+			Boolean moveToHome) throws AxisFault {
+		return getBean(FileWebService.class).moveFileSelf(SID, fileExplorerItemId,
+				newParentFileExplorerItemId, roomId, isOwner, moveToHome);
+	}
+
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/JabberWebService.java b/src/axis/java/org/apache/openmeetings/axis/services/JabberWebService.java
new file mode 100644
index 0000000..3f940d6
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/JabberWebService.java
@@ -0,0 +1,143 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.data.conference.InvitationManager;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.room.RoomDTO;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.room.Invitation.Valid;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomOrganisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.remote.ConferenceService;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * This class provides method implementations necessary for OM to Jabber integration.
+ * 
+ * @author solomax
+ * @webservice JabberService
+ *
+ */
+public class JabberWebService {
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			JabberWebService.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private ConferenceService conferenceService;
+	@Autowired
+	private InvitationManager invitationManager;
+	@Autowired
+	private RoomDao roomDao;
+
+	/**
+	 * Get List&lt;RoomDTO&gt; of all rooms available to the user.
+	 * No admin rights are necessary for this call
+	 * 
+	 * @param SID The SID from UserService.getSession
+	 * @return List&lt;RoomDTO&gt; of Rooms
+	 */
+	public List<RoomDTO> getAvailableRooms(String SID) {
+		log.debug("getAvailableRooms enter");
+		
+		List<Room> rl = new ArrayList<Room>();
+		List<Room> al = conferenceService.getAppointedMeetingRoomsWithoutType(SID);
+		if (al != null) {
+			rl.addAll(al);
+		}
+
+		List<Room> pbl = conferenceService.getRoomsPublicWithoutType(SID);
+		if (pbl != null) {
+			rl.addAll(pbl);
+		}
+
+		Long users_id = sessiondataDao.checkSession(SID);
+		User u = userDao.get(users_id);
+		for (Organisation_Users ou : u.getOrganisation_users()) {
+			List<RoomOrganisation> rol = conferenceService.getRoomsByOrganisationWithoutType(SID
+					, ou.getOrganisation().getOrganisation_id().longValue());
+			if (rol != null) {
+				for (RoomOrganisation ro : rol) {
+					rl.add(ro.getRoom());
+				}
+			}
+		}
+		List<RoomDTO> result = new ArrayList<RoomDTO>();
+		for (Room r : rl) {
+			r.setCurrentusers(null);
+			result.add(new RoomDTO(r));
+		}
+		return result;
+	}
+
+	/**
+	 * Returns the count of users currently in the Room with given id
+	 * No admin rights are necessary for this call
+	 * 
+	 * @param SID The SID from UserService.getSession
+	 * @param roomId id of the room to get users
+	 * @return number of users as int
+	 */
+	public int getUserCount(String SID, Long roomId) {
+		Long users_id = sessiondataDao.checkSession(SID);
+
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			return conferenceService.getRoomClientsListByRoomId(roomId).size();
+		}
+		return -1;
+	}
+
+	/**
+	 * Get invitation hash for the room with given id
+	 * No admin rights are necessary for this call
+	 * 
+	 * @param SID The SID from UserService.getSession
+	 * @param username The name of invited user, will be displayed in the rooms user list
+	 * @param room_id id of the room to get users
+	 * @return hash to enter the room
+	 */
+	public String getInvitationHash(String SID, String username, Long room_id) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			User invitee = userDao.getContact(username, username, username, users_id);
+			Invitation invitation = invitationManager.getInvitation(invitee, roomDao.get(room_id),
+							false, "", Valid.OneTime, userDao.get(users_id), 1L, null, null, null);
+	
+			return ((invitation == null) ? null : invitation.getHash());
+		} else {
+			return "Need Admin Privileges to perfom the Action";
+		}
+	}
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/JabberWebServiceFacade.java b/src/axis/java/org/apache/openmeetings/axis/services/JabberWebServiceFacade.java
new file mode 100644
index 0000000..919bab6
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/JabberWebServiceFacade.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import java.util.List;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.db.dto.room.RoomDTO;
+
+/**
+ * This class provides method entry points necessary for OM to Jabber integration.
+ * 
+ * @author solomax
+ *
+ */
+public class JabberWebServiceFacade extends BaseWebService {
+	
+	/**
+	 * Get list of all rooms available to the user.
+	 * No admin rights are necessary for this call
+	 * 
+	 * @param SID The SID from {@link UserWebService.getSession}
+	 * @return array of Rooms
+	 * @throws AxisFault 
+	 */
+	public List<RoomDTO> getAvailableRooms(String SID) throws AxisFault {
+		return getBean(JabberWebService.class).getAvailableRooms(SID);
+	}
+
+	/**
+	 * Returns the count of users currently in the Room with given id
+	 * No admin rights are necessary for this call
+	 * 
+	 * @param SID The SID from {@link UserWebService.getSession}
+	 * @param roomId id of the room to get users
+	 * @return number of users as int
+	 * @throws AxisFault 
+	 */
+	public int getUserCount(String SID, Long roomId) throws AxisFault {
+		return getBean(JabberWebService.class).getUserCount(SID, roomId);
+	}
+
+	/**
+	 * Get invitation hash for the room with given id
+	 * No admin rights are necessary for this call
+	 * 
+	 * @param SID The SID from {@link UserWebService.getSession}
+	 * @param username The name of invited user, will be displayed in the rooms user list
+	 * @param room_id id of the room to get users
+	 * @return hash to enter the room
+	 * @throws AxisFault 
+	 */
+	public String getInvitationHash(String SID, String username, Long room_id) throws AxisFault {
+		return getBean(JabberWebService.class)
+				.getInvitationHash(SID, username, room_id);
+	}
+}
\ No newline at end of file
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/RoomCountBean.java b/src/axis/java/org/apache/openmeetings/axis/services/RoomCountBean.java
new file mode 100644
index 0000000..caf558a
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/RoomCountBean.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+public class RoomCountBean {
+	
+	private long roomId;
+	private String roomName;
+	private Integer roomCount;
+	private Integer maxUser;
+	
+	public long getRoomId() {
+		return roomId;
+	}
+	public void setRoomId(long roomId) {
+		this.roomId = roomId;
+	}
+	public String getRoomName() {
+		return roomName;
+	}
+	public void setRoomName(String roomName) {
+		this.roomName = roomName;
+	}
+	public Integer getRoomCount() {
+		return roomCount;
+	}
+	public void setRoomCount(Integer roomCount) {
+		this.roomCount = roomCount;
+	}
+	public Integer getMaxUser() {
+		return maxUser;
+	}
+	public void setMaxUser(Integer maxUser) {
+		this.maxUser = maxUser;
+	}
+	
+
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/RoomReturn.java b/src/axis/java/org/apache/openmeetings/axis/services/RoomReturn.java
new file mode 100644
index 0000000..e86f4f7
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/RoomReturn.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import java.util.Date;
+
+public class RoomReturn {
+
+	private Long room_id;
+	private String name;
+	private String creator;
+	private Date created;
+	private RoomUser[] roomUser;
+
+	public Long getRoom_id() {
+		return room_id;
+	}
+
+	public void setRoom_id(Long roomId) {
+		room_id = roomId;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getCreator() {
+		return creator;
+	}
+
+	public void setCreator(String creator) {
+		this.creator = creator;
+	}
+
+	public Date getCreated() {
+		return created;
+	}
+
+	public void setCreated(Date created) {
+		this.created = created;
+	}
+
+	public RoomUser[] getRoomUser() {
+		return roomUser;
+	}
+
+	public void setRoomUser(RoomUser[] roomUser) {
+		this.roomUser = roomUser;
+	}
+
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/RoomUser.java b/src/axis/java/org/apache/openmeetings/axis/services/RoomUser.java
new file mode 100644
index 0000000..042be0a
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/RoomUser.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+public class RoomUser {
+	
+	private String firstname;
+	private String lastname;
+	private String publicSID;
+	private long broadcastId;
+	private Boolean isBroadCasting;
+	private String avsettings;
+	
+	public String getFirstname() {
+		return firstname;
+	}
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+	public String getLastname() {
+		return lastname;
+	}
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+	public Boolean getIsBroadCasting() {
+		return isBroadCasting;
+	}
+	public void setIsBroadCasting(Boolean isBroadCasting) {
+		this.isBroadCasting = isBroadCasting;
+	}
+	public String getAvsettings() {
+		return avsettings;
+	}
+	public void setAvsettings(String avsettings) {
+		this.avsettings = avsettings;
+	}
+	public String getPublicSID() {
+		return publicSID;
+	}
+	public void setPublicSID(String publicSID) {
+		this.publicSID = publicSID;
+	}
+	public long getBroadcastId() {
+		return broadcastId;
+	}
+	public void setBroadcastId(long broadcastId) {
+		this.broadcastId = broadcastId;
+	}
+	
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/RoomWebService.java b/src/axis/java/org/apache/openmeetings/axis/services/RoomWebService.java
new file mode 100644
index 0000000..c38ace8
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/RoomWebService.java
@@ -0,0 +1,2161 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.data.calendar.management.AppointmentLogic;
+import org.apache.openmeetings.data.conference.InvitationManager;
+import org.apache.openmeetings.data.conference.RoomManager;
+import org.apache.openmeetings.data.user.UserManager;
+import org.apache.openmeetings.db.dao.calendar.AppointmentCategoryDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;
+import org.apache.openmeetings.db.dao.calendar.IInvitationManager.MessageType;
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.record.RecordingDTO;
+import org.apache.openmeetings.db.dto.room.RoomDTO;
+import org.apache.openmeetings.db.dto.room.RoomSearchResult;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.room.Invitation.Valid;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomType;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.remote.ConferenceService;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.BeanWrapper;
+import org.springframework.beans.BeanWrapperImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * RoomService contains methods to manipulate rooms and create invitation hash
+ * 
+ * @author sebawagner
+ * @webservice RoomService
+ * 
+ */
+public class RoomWebService {
+	private static final Logger log = Red5LoggerFactory.getLogger(RoomWebService.class, webAppRootKey);
+
+	@Autowired
+	private AppointmentDao appointmentDao;
+	@Autowired
+	private AppointmentCategoryDao appointmentCategoryDao;
+	@Autowired
+	private AppointmentReminderTypDao appointmentReminderTypDao;
+	@Autowired
+	private AppointmentLogic appointmentLogic;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private UserManager userManager;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private RoomManager roomManager;
+	@Autowired
+	private FlvRecordingDao flvRecordingDao;
+	@Autowired
+	private InvitationManager invitationManager;
+	@Autowired
+	private ScopeApplicationAdapter scopeApplicationAdapter;
+	@Autowired
+	private ConferenceService conferenceService;
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private RoomTypeDao roomTypeDao;
+
+	/**
+	 * Returns an Object of Type RoomsList which contains a list of
+	 * Room-Objects. Every Room-Object contains a Roomtype and all informations
+	 * about that Room. The List of current-users in the room is Null if you get
+	 * them via SOAP. The Roomtype can be 1 for conference rooms or 2 for
+	 * audience rooms.
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param roomtypes_id
+	 * @return - list of public rooms
+	 * @throws AxisFault
+	 */
+	public List<RoomDTO> getRoomsPublic(String SID, Long roomtypes_id) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return RoomDTO.list(roomDao.getPublicRooms(roomtypes_id));
+			}
+			return null;
+		} catch (Exception err) {
+			log.error("[getRoomsPublic] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Deletes a flv recording
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param flvRecordingId
+	 *            the id of the recording
+	 *            
+	 * @return - true if recording was deleted
+	 * @throws AxisFault
+	 */
+	public boolean deleteFlvRecording(String SID, Long flvRecordingId) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return flvRecordingDao.delete(flvRecordingId);
+			}
+			return false;
+		} catch (Exception err) {
+			log.error("[deleteFlvRecording] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Gets a list of flv recordings
+	 * 
+	 * @param SID The SID of the User. This SID must be marked as Loggedin
+	 * @param externalUserId the externalUserId
+	 * @param externalUsertype the externalUserType
+	 *            
+	 * @return - list of flv recordings
+	 * @throws AxisFault
+	 */
+	public List<RecordingDTO> getFlvRecordingByExternalUserId(String SID,
+			String externalUserId, String externalUserType) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return RecordingDTO.list(flvRecordingDao.getFlvRecordingByExternalUserId(externalUserId, externalUserType));
+			}
+
+			return null;
+		} catch (Exception err) {
+			log.error("[getFlvRecordingByExternalUserId] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Gets a list of flv recordings
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param externalRoomType
+	 *            externalRoomType specified when creating the room
+	 * @param insertedBy
+	 *            the userId that created the recording
+	 * @return - list of flv recordings
+	 * @throws AxisFault
+	 */
+	public List<RecordingDTO> getFlvRecordingByExternalRoomTypeAndCreator(
+			String SID, String externalRoomType, Long insertedBy)
+			throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return RecordingDTO.list(flvRecordingDao.getFlvRecordingByExternalRoomTypeAndCreator(externalRoomType, insertedBy));
+			}
+
+			return null;
+		} catch (Exception err) {
+			log.error("[getFlvRecordingByExternalRoomTypeAndCreator] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Gets a list of flv recordings
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param externalRoomType
+	 *            externalRoomType specified when creating the room
+	 * @return - list of flv recordings
+	 * @throws AxisFault
+	 */
+	public List<RecordingDTO> getFlvRecordingByExternalRoomTypeByList(
+			String SID, String externalRoomType) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return RecordingDTO.list(flvRecordingDao.getFlvRecordingByExternalRoomType(externalRoomType));
+			}
+
+			return null;
+		} catch (Exception err) {
+			log.error("[getFlvRecordingByExternalRoomTypeByList] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Gets a list of recordings
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as logged-in
+	 * @param externalType
+	 *            externalType specified when creating room or user
+	 * @return - list of flv recordings
+	 * @throws AxisFault
+	 */
+	public List<RecordingDTO> getRecordingsByExternalType(String SID, String externalType) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return RecordingDTO.list(flvRecordingDao.getRecordingsByExternalType(externalType));
+			}
+
+			return null;
+		} catch (Exception err) {
+			log.error("[getRecordingsByExternalType] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Gets a list of flv recordings
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param externalRoomType
+	 *            externalRoomType specified when creating the room
+	 * @return - list of flv recordings
+	 * @throws AxisFault
+	 */
+	public List<RecordingDTO> getFlvRecordingByExternalRoomType(String SID, String externalRoomType) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return RecordingDTO.list(flvRecordingDao.getFlvRecordingByExternalRoomType(externalRoomType));
+			}
+
+			return null;
+		} catch (Exception err) {
+			log.error("[getFlvRecordingByExternalRoomType] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Get list of recordings
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param roomId
+	 *            the room id
+	 * @return - list of recordings
+	 * @throws AxisFault
+	 */
+	public List<RecordingDTO> getFlvRecordingByRoomId(String SID, Long roomId) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return RecordingDTO.list(flvRecordingDao.getFlvRecordingByRoomId(roomId));
+			}
+
+			return null;
+		} catch (Exception err) {
+			log.error("[getFlvRecordingByExternalRoomType] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * List of available room types
+	 * 
+	 * @param SID - The SID of the User. This SID must be marked as Loggedin
+	 * @return - List of available room types
+	 * @throws AxisFault
+	 */
+	public List<RoomType> getRoomTypes(String SID) throws AxisFault {
+		try {
+			return conferenceService.getRoomTypes(SID);
+		} catch (Exception err) {
+			log.error("[getRoomTypes]", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Returns current users for rooms ids
+	 * 
+	 * @param SID - The SID of the User. This SID must be marked as Loggedin
+	 * @param roomId
+	 * @return - current users for rooms ids
+	 * @throws AxisFault
+	 */
+	public List<RoomCountBean> getRoomCounters(String SID, Integer[] roomId) throws AxisFault {
+		List<RoomCountBean> roomBeans = new ArrayList<RoomCountBean>();
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				List<Integer> roomIds = new ArrayList<Integer>();
+
+				if (roomId != null) {
+					for (Integer id : roomId) {
+						if (id != null && id > 0) {
+							log.debug("roomId :: " + id);
+							roomIds.add(id);
+						}
+					}
+				}
+
+				List<Room> rooms = roomManager.getRoomsByIds(roomIds);
+
+				for (Room room : rooms) {
+					RoomCountBean rCountBean = new RoomCountBean();
+					rCountBean.setRoomId(room.getRooms_id());
+					rCountBean.setRoomName(room.getName());
+					rCountBean.setMaxUser(room.getNumberOfPartizipants().intValue());
+					rCountBean.setRoomCount(sessionManager.getClientListByRoom(room.getRooms_id()).size());
+
+					roomBeans.add(rCountBean);
+				}
+
+			} else {
+				log.error("Not authorized");
+			}
+		} catch (Exception err) {
+			log.error("[getRoomTypes]", err);
+			throw new AxisFault(err.getMessage());
+		}
+		return roomBeans;
+	}
+
+	/**
+	 * returns a conference room object
+	 * 
+	 * @param SID - The SID of the User. This SID must be marked as Loggedin
+	 * @param rooms_id - the room id
+	 * @return - room with the id given
+	 */
+	public RoomDTO getRoomById(String SID, long rooms_id) {
+		return new RoomDTO(conferenceService.getRoomById(SID, rooms_id));
+	}
+
+	/**
+	 * Returns a object of type RoomReturn
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param rooms_id
+	 * @return - object of type RoomReturn
+	 * @throws AxisFault
+	 */
+	public RoomReturn getRoomWithClientObjectsById(String SID, long rooms_id) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				Room room = roomDao.get(rooms_id);
+
+				RoomReturn roomReturn = new RoomReturn();
+
+				roomReturn.setCreated(room.getStarttime());
+				roomReturn.setCreator(null);
+				roomReturn.setName(room.getName());
+				roomReturn.setRoom_id(room.getRooms_id());
+
+				List<Client> map = sessionManager
+						.getClientListByRoom(room.getRooms_id());
+
+				RoomUser[] roomUsers = new RoomUser[map.size()];
+
+				int i = 0;
+				for (Client rcl : map) {
+					RoomUser roomUser = new RoomUser();
+					roomUser.setFirstname(rcl.getFirstname());
+					roomUser.setLastname(rcl.getLastname());
+					roomUser.setBroadcastId(rcl.getBroadCastID());
+					roomUser.setPublicSID(rcl.getPublicSID());
+					roomUser.setIsBroadCasting(rcl.getIsBroadcasting());
+					roomUser.setAvsettings(rcl.getAvsettings());
+
+					roomUsers[i++] = roomUser;
+				}
+
+				roomReturn.setRoomUser(roomUsers);
+
+				return roomReturn;
+			}
+
+			return null;
+
+		} catch (Exception err) {
+			log.error("[getRoomWithClientObjectsById]", err);
+			throw new AxisFault(err.getMessage());
+		}
+
+	}
+
+	/**
+	 * Returns a List of Objects of Rooms You can use "name" as value for
+	 * orderby or rooms_id
+	 * 
+	 * @param SID - The SID of the User. This SID must be marked as Loggedin
+	 * @param start - The id you want to start
+	 * @param max - The maximum you want to get
+	 * @param orderby - The column it will be ordered
+	 * @param asc - Asc or Desc sort ordering
+	 *            
+	 * @return - List of Objects of Rooms
+	 */
+	public RoomSearchResult getRooms(String SID, int start, int max, String orderby, boolean asc) {
+		return new RoomSearchResult(conferenceService.getRooms(SID, start, max, orderby, asc, ""));
+	}
+
+	/**
+	 * Returns a List of Objects of Rooms You can use "name" as value for
+	 * orderby or rooms_id. It also fills the attribute currentUsers in the
+	 * Room-Object
+	 * 
+	 * @param SID - The SID of the User. This SID must be marked as Loggedin
+	 * @param start - The id you want to start
+	 * @param max - The maximum you want to get
+	 * @param orderby - The column it will be ordered
+	 * @param asc - Asc or Desc sort ordering
+	 *            
+	 * @return - List of Objects of Rooms
+	 */
+	public RoomSearchResult getRoomsWithCurrentUsers(String SID, int start, int max, String orderby, boolean asc) {
+		return new RoomSearchResult(conferenceService.getRoomsWithCurrentUsers(SID, start, max, orderby, asc));
+	}
+
+	// TODO: Add functions to get Users of a Room
+
+	/**
+	 * Create a conference room
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            Name of the Room
+	 * @param roomtypes_id
+	 *            Type of that room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            any comment
+	 * @param numberOfPartizipants
+	 *            the maximum users allowed in this room
+	 * @param ispublic
+	 *            If this room is public (use true if you don't deal with
+	 *            different Organizations)
+	 * @param appointment
+	 *            is it a Calendar Room (use false by default)
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time (use false by default)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait untill a Moderator arrives. Use the
+	 *            becomeModerator param in setUserObjectAndGenerateRoomHash to
+	 *            set a user as default Moderator
+	 *            
+	 * @return - id of the room or error code
+	 */
+	public Long addRoomWithModeration(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.addRoom(name, roomtypes_id, comment,
+						numberOfPartizipants, ispublic, null, appointment,
+						isDemoRoom, demoTime, isModeratedRoom, null, true,
+						false, true, false //closed
+						, "", "", null, null,
+						true,  // allowRecording
+						false, // hideTopBar
+						false, // hideChat
+						false, // hideActivitiesAndActions
+						false, // hideFilesExplorer
+						false, // hideActionsMenu
+						false, // hideScreenSharing
+						false, // hideWhiteboard
+						false, // showMicrophoneStatus
+						false, // chatModerated
+						false, // chatOpened
+						false, // filesOpened
+						false, // autoVideoSelect
+						false //sipEnabled
+						);
+			}
+		} catch (Exception err) {
+			log.error("[addRoomWithModeration] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * this SOAP Method has an additional param to enable or disable the buttons
+	 * to apply for moderation this does only work in combination with the
+	 * room-type restricted
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            Name of the Room
+	 * @param roomtypes_id
+	 *            Type of that room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            any comment
+	 * @param numberOfPartizipants
+	 *            the maximum users allowed in this room
+	 * @param ispublic
+	 *            If this room is public (use true if you don't deal with
+	 *            different Organizations)
+	 * @param appointment
+	 *            is it a Calendar Room (use false by default)
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time (use false by default)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait untill a Moderator arrives. Use the
+	 *            becomeModerator param in setUserObjectAndGenerateRoomHash to
+	 *            set a user as default Moderator
+	 * @param allowUserQuestions
+	 *            enable or disable the button to allow users to apply for
+	 *            moderation
+	 *            
+	 * @return - id of the room or error code
+	 */
+	public Long addRoomWithModerationAndQuestions(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom,
+			Boolean allowUserQuestions) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.addRoom(name, roomtypes_id, comment,
+						numberOfPartizipants, ispublic, null, appointment,
+						isDemoRoom, demoTime, isModeratedRoom, null,
+						allowUserQuestions, false, true, false //closed
+						, "", "", null,
+						null, 
+						true,  // allowRecording
+						false, // hideTopBar
+						false, // hideChat
+						false, // hideActivitiesAndActions
+						false, // hideFilesExplorer
+						false, // hideActionsMenu
+						false, // hideScreenSharing
+						false, // hideWhiteboard
+						false, // showMicrophoneStatus
+						false, // chatModerated
+						false, // chatOpened
+						false, // filesOpened
+						false, // autoVideoSelect
+						false //sipEnabled
+						);
+			}
+		} catch (Exception err) {
+			log.error("[addRoomWithModerationAndQuestions] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * 
+	 * adds a new room with options for user questions and audio only
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            Name of the Room
+	 * @param roomtypes_id
+	 *            Type of that room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            any comment
+	 * @param numberOfPartizipants
+	 *            the maximum users allowed in this room
+	 * @param ispublic
+	 *            If this room is public (use true if you don't deal with
+	 *            different Organizations)
+	 * @param appointment
+	 *            is it a Calendar Room (use false by default)
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time (use false by default)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator param in setUserObjectAndGenerateRoomHash to
+	 *            set a user as default Moderator
+	 * @param allowUserQuestions
+	 *            enable or disable the button to allow users to apply for
+	 *            moderation
+	 * @param isAudioOnly
+	 *            enable or disable the video / or audio-only
+	 * 
+	 * @return - id of the room or error code
+	 * @throws AxisFault
+	 */
+	public Long addRoomWithModerationQuestionsAndAudioType(String SID,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			Boolean allowUserQuestions, Boolean isAudioOnly) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.addRoom(name, roomtypes_id, comment,
+						numberOfPartizipants, ispublic, null, appointment,
+						isDemoRoom, demoTime, isModeratedRoom, null,
+						allowUserQuestions, isAudioOnly, true, false //closed
+						, "", "",
+						null, null, 
+						true,  // allowRecording
+						false, // hideTopBar
+						false, // hideChat
+						false, // hideActivitiesAndActions
+						false, // hideFilesExplorer
+						false, // hideActionsMenu
+						false, // hideScreenSharing
+						false, // hideWhiteboard
+						false, // showMicrophoneStatus
+						false, // chatModerated
+						false, // chatOpened
+						false, // filesOpened
+						false, // autoVideoSelect
+						false //sipEnabled
+						);
+			}
+			return -1L;
+		} catch (Exception err) {
+			log.error("[addRoomWithModerationQuestionsAndAudioType] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * 
+	 * adds a new room with options for user questions, audio only and hide
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            Name of the Room
+	 * @param roomtypes_id
+	 *            Type of that room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            any comment
+	 * @param numberOfPartizipants
+	 *            the maximum users allowed in this room
+	 * @param ispublic
+	 *            If this room is public (use true if you don't deal with
+	 *            different Organizations)
+	 * @param appointment
+	 *            is it a Calendar Room (use false by default)
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time (use false by default)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator param in setUserObjectAndGenerateRoomHash to
+	 *            set a user as default Moderator
+	 * @param allowUserQuestions
+	 *            enable or disable the button to allow users to apply for
+	 *            moderation
+	 * @param isAudioOnly
+	 *            enable or disable the video / or audio-only
+	 * @param hideTopBar
+	 *            hide or show TopBar
+	 * @param hideChat
+	 *            hide or show Chat
+	 * @param hideActivitiesAndActions
+	 *            hide or show Activities And Actions
+	 * @param hideFilesExplorer
+	 *            hide or show Files Explorer
+	 * @param hideActionsMenu
+	 *            hide or show Actions Menu
+	 * @param hideScreenSharing
+	 *            hide or show Screen Sharing
+	 * @param hideWhiteboard
+	 *            hide or show Whiteboard. If whitboard is hidden, video pods
+	 *            and scrollbar appear instead.
+	 *            
+	 * @return - id of the room or error code
+	 * @throws AxisFault
+	 */
+	public Long addRoomWithModerationQuestionsAudioTypeAndHideOptions(
+			String SID, String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			Boolean allowUserQuestions, Boolean isAudioOnly,
+			Boolean hideTopBar, Boolean hideChat,
+			Boolean hideActivitiesAndActions, Boolean hideFilesExplorer,
+			Boolean hideActionsMenu, Boolean hideScreenSharing,
+			Boolean hideWhiteboard) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.addRoom(name, roomtypes_id, comment,
+						numberOfPartizipants, ispublic, null, appointment,
+						isDemoRoom, demoTime, isModeratedRoom, null,
+						allowUserQuestions, isAudioOnly, true, false //closed
+						, "", "",
+						null, null,
+						true,  // allowRecording
+						hideTopBar, hideChat,
+						hideActivitiesAndActions, hideFilesExplorer,
+						hideActionsMenu, hideScreenSharing, hideWhiteboard,
+						false, false, 
+						false, // chatOpened
+						false, // filesOpened
+						false, // autoVideoSelect
+						false //sipEnabled
+						);
+			}
+			return -1L;
+		} catch (Exception err) {
+			log.error(
+					"[addRoomWithModerationQuestionsAudioTypeAndHideOptions] ",
+					err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Checks if a room with this exteralRoomId + externalRoomType does exist,
+	 * if yes it returns the room id if not, it will create the room and then
+	 * return the room id of the newly created room
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            Name of the room
+	 * @param roomtypes_id
+	 *            Type of that room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            any comment
+	 * @param numberOfPartizipants
+	 *            the maximum users allowed in this room
+	 * @param ispublic
+	 *            If this room is public (use true if you don't deal with
+	 *            different Organizations)
+	 * @param appointment
+	 *            is it a Calendar Room? (use false if not sure what that means)
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time? (use false if not sure
+	 *            what that means)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait untill a Moderator arrives. Use the
+	 *            becomeModerator param in setUserObjectAndGenerateRoomHash to
+	 *            set a user as default Moderator
+	 * @param externalRoomId
+	 *            your external room id may set here
+	 * @param externalRoomType
+	 *            you can specify your system-name or type of room here, for
+	 *            example "moodle"
+	 *            
+	 * @return - id of the room or error code
+	 * @throws AxisFault
+	 */
+	public Long getRoomIdByExternalId(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom, Long externalRoomId,
+			String externalRoomType) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				Room room = conferenceService.getRoomByExternalId(SID,
+						externalRoomId, externalRoomType, roomtypes_id);
+				Long roomId = null;
+				if (room == null) {
+					roomId = roomManager.addExternalRoom(name, roomtypes_id,
+							comment, numberOfPartizipants, ispublic, null,
+							appointment, isDemoRoom, demoTime, isModeratedRoom,
+							null, externalRoomId, externalRoomType, true,
+							false, true, false, "", false, true, false);
+				} else {
+					roomId = room.getRooms_id();
+				}
+				return roomId;
+			}
+
+			return -26L;
+		} catch (Exception err) {
+			log.error("[addRoomWithModeration] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+		// return new Long (-1);
+	}
+
+	/**
+	 * Updates a conference room by its room id
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param room_id
+	 *            the room id to update
+	 * @param name
+	 *            new name of the room
+	 * @param roomtypes_id
+	 *            new type of room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            new comment
+	 * @param numberOfPartizipants
+	 *            new numberOfParticipants
+	 * @param ispublic
+	 *            is public
+	 * @param appointment
+	 *            if the room is an appointment
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time? (use false if not sure
+	 *            what that means)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+	 *            to set a user as default Moderator
+	 *            
+	 * @return - id of the room updated or error code
+	 */
+	public Long updateRoomWithModeration(String SID, Long room_id, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.updateRoomInternal(room_id, roomtypes_id,
+						name, ispublic, comment, numberOfPartizipants, null,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						null, true, false, true, false, "", "", null, null,
+						true,  // allowRecording
+						false, // hideTopBar
+						false, // hideChat
+						false, // hideActivitiesAndActions
+						false, // hideFilesExplorer
+						false, // hideActionsMenu
+						false, // hideScreenSharing
+						false, // hideWhiteboard
+						false, // showMicrophoneStatus
+						false, // chatModerated
+						false, // chatOpened
+						false, // filesOpened
+						false, // autoVideoSelect
+						false //sipEnabled
+						);
+			}
+		} catch (Exception err) {
+			log.error("[updateRoomWithModeration] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param room_id
+	 *            the room id to update
+	 * @param name
+	 *            new name of the room
+	 * @param roomtypes_id
+	 *            new type of room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            new comment
+	 * @param numberOfPartizipants
+	 *            new numberOfParticipants
+	 * @param ispublic
+	 *            is public
+	 * @param appointment
+	 *            if the room is an appointment
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time? (use false if not sure
+	 *            what that means)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+	 *            to set a user as default Moderator
+	 * @param allowUserQuestions
+	 *            enable or disable the button to allow users to apply for
+	 *            moderation
+	 *            
+	 * @return - id of the room updated or error code
+	 */
+	public Long updateRoomWithModerationAndQuestions(String SID, Long room_id,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			Boolean allowUserQuestions) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.updateRoomInternal(room_id, roomtypes_id,
+						name, ispublic, comment, numberOfPartizipants, null,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						null, allowUserQuestions, false, true, false, "", "",
+						null, null, 
+						true,  // allowRecording 
+						false, // hideTopBar
+						false, // hideChat
+						false, // hideActivitiesAndActions
+						false, // hideFilesExplorer
+						false, // hideActionsMenu
+						false, // hideScreenSharing
+						false, // hideWhiteboard
+						false, // showMicrophoneStatus
+						false, // chatModerated
+						false, // chatOpened
+						false, // filesOpened
+						false, // autoVideoSelect
+						false //sipEnabled
+						);
+			}
+		} catch (Exception err) {
+			log.error("[updateRoomWithModerationAndQuestions] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * update room with options for user questions, audio only and hide
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param room_id
+	 *            the room id to update
+	 * @param name
+	 *            new name of the room
+	 * @param roomtypes_id
+	 *            new type of room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            new comment
+	 * @param numberOfPartizipants
+	 *            number of participants
+	 * @param ispublic
+	 *            is public
+	 * @param appointment
+	 *            if the room is an appointment (use false if not sure what that
+	 *            means)
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time? (use false if not sure
+	 *            what that means)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+	 *            to set a user as default Moderator
+	 * @param allowUserQuestions
+	 *            enable or disable the button to allow users to apply for
+	 *            moderation
+	 * @param isAudioOnly
+	 *            enable or disable the video / or audio-only
+	 * @param hideTopBar
+	 *            hide or show TopBar
+	 * @param hideChat
+	 *            hide or show Chat
+	 * @param hideActivitiesAndActions
+	 *            hide or show Activities And Actions
+	 * @param hideFilesExplorer
+	 *            hide or show Files Explorer
+	 * @param hideActionsMenu
+	 *            hide or show Actions Menu
+	 * @param hideScreenSharing
+	 *            hide or show Screen Sharing
+	 * @param hideWhiteboard
+	 *            hide or show Whiteboard. If whitboard is hidden, video pods
+	 *            and scrollbar appear instead.
+	 *            
+	 * @return - id of the room updated or error code
+	 */
+	public Long updateRoomWithModerationQuestionsAudioTypeAndHideOptions(
+			String SID, Long room_id, String name, Long roomtypes_id,
+			String comment, Long numberOfPartizipants, Boolean ispublic,
+			Boolean appointment, Boolean isDemoRoom, Integer demoTime,
+			Boolean isModeratedRoom, Boolean allowUserQuestions,
+			Boolean isAudioOnly, Boolean hideTopBar, Boolean hideChat,
+			Boolean hideActivitiesAndActions, Boolean hideFilesExplorer,
+			Boolean hideActionsMenu, Boolean hideScreenSharing,
+			Boolean hideWhiteboard) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.updateRoomInternal(room_id, roomtypes_id,
+						name, ispublic, comment, numberOfPartizipants, null,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						null, allowUserQuestions, isAudioOnly, true, false, "", "",
+						null, null,
+						true,  // allowRecording
+						hideTopBar, hideChat,
+						hideActivitiesAndActions, hideFilesExplorer,
+						hideActionsMenu, hideScreenSharing, hideWhiteboard,
+						false, // showMicrophoneStatus
+						false, // chatModerated
+						false, // chatOpened
+						false, // filesOpened
+						false, // autoVideoSelect
+						false //sipEnabled
+						);
+			}
+		} catch (Exception err) {
+			log.error("[updateRoomWithModerationQuestionsAudioTypeAndHideOptions] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * Delete a room by its room id
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param rooms_id
+	 * 
+	 * @return - id of the room deleted
+	 */
+	public Long deleteRoom(String SID, long rooms_id) {
+		return conferenceService.deleteRoom(SID, rooms_id);
+	}
+
+	/**
+	 * kick all uses of a certain room
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 *            _Admin
+	 * @param room_id
+	 *            the room id
+	 *            
+	 * @return - true if user was kicked, false otherwise
+	 */
+	public Boolean kickUser(String SID_Admin, Long room_id) {
+		try {
+			Boolean salida = false;
+
+			salida = userManager.kickUserByStreamId(SID_Admin, room_id);
+
+			if (salida == null)
+				salida = false;
+
+			return salida;
+		} catch (Exception err) {
+			log.error("[kickUser]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Add a new conference room with option to set the external room type, the
+	 * external room type should be set if multiple applications use the same
+	 * OpenMeetings instance
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            new name of the room
+	 * @param roomtypes_id
+	 *            new type of room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            new comment
+	 * @param numberOfPartizipants
+	 *            new numberOfParticipants
+	 * @param ispublic
+	 *            is public
+	 * @param appointment
+	 *            if the room is an appointment
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time? (use false if not sure
+	 *            what that means)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+	 *            to set a user as default Moderator
+	 * @param externalRoomType
+	 *            the external room type (can be used to identify different
+	 *            external systems using same OpenMeetings instance)
+	 *            
+	 * @return - id of the room added or error code
+	 */
+	public Long addRoomWithModerationAndExternalType(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom, String externalRoomType) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.addExternalRoom(name, roomtypes_id,
+						comment, numberOfPartizipants, ispublic, null,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						null, null, externalRoomType, true, false, true, false, "",
+						false, true, false);
+			}
+		} catch (Exception err) {
+			log.error("[addRoomWithModerationAndExternalType] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * Adds a new room with options for audio only
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            new name of the room
+	 * @param roomtypes_id
+	 *            new type of room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            new comment
+	 * @param numberOfPartizipants
+	 *            new numberOfParticipants
+	 * @param ispublic
+	 *            is public
+	 * @param appointment
+	 *            if the room is an appointment
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time? (use false if not sure
+	 *            what that means)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+	 *            to set a user as default Moderator
+	 * @param externalRoomType
+	 *            the external room type (can be used to identify different
+	 *            external systems using same OpenMeetings instance)
+	 * @param allowUserQuestions
+	 *            enable or disable the button to allow users to apply for
+	 *            moderation
+	 * @param isAudioOnly
+	 *            enable or disable the video / or audio-only
+	 *            
+	 * @return - id of the room added or error code
+	 */
+	public Long addRoomWithModerationExternalTypeAndAudioType(String SID,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			String externalRoomType, Boolean allowUserQuestions,
+			Boolean isAudioOnly) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.addExternalRoom(name, roomtypes_id,
+						comment, numberOfPartizipants, ispublic, null,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						null, null, externalRoomType, allowUserQuestions,
+						isAudioOnly, true, false, "", false, true, false);
+			}
+		} catch (Exception err) {
+			log.error("[addRoomWithModerationExternalTypeAndAudioType] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * Adds a new room with options for recording
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            new name of the room
+	 * @param roomtypes_id
+	 *            new type of room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            new comment
+	 * @param numberOfPartizipants
+	 *            new numberOfParticipants
+	 * @param ispublic
+	 *            is public
+	 * @param appointment
+	 *            if the room is an appointment
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time? (use false if not sure
+	 *            what that means)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+	 *            to set a user as default Moderator
+	 * @param externalRoomType
+	 *            the external room type (can be used to identify different
+	 *            external systems using same OpenMeetings instance)
+	 * @param allowUserQuestions
+	 *            enable or disable the button to allow users to apply for
+	 *            moderation
+	 * @param isAudioOnly
+	 *            enable or disable the video / or audio-only
+	 * @param waitForRecording
+	 *            if the users in the room will get a notification that they
+	 *            should start recording before they do a conference
+	 * @param allowRecording
+	 *            if the recording option is available or not
+	 *            
+	 * @return - id of the room added or error code
+	 */
+	public Long addRoomWithModerationAndRecordingFlags(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom, String externalRoomType,
+			Boolean allowUserQuestions, Boolean isAudioOnly,
+			Boolean waitForRecording, boolean allowRecording) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.addExternalRoom(name, roomtypes_id,
+						comment, numberOfPartizipants, ispublic, null,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						null, null, externalRoomType, allowUserQuestions,
+						isAudioOnly, true, false, "", waitForRecording,
+						allowRecording, false);
+			} else {
+				return -26L;
+			}
+		} catch (Exception err) {
+			log.error("[addRoomWithModerationAndRecordingFlags] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * Add a conference room with options to disable the top menu bar in the
+	 * conference room
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            new name of the room
+	 * @param roomtypes_id
+	 *            new type of room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            new comment
+	 * @param numberOfPartizipants
+	 *            new numberOfParticipants
+	 * @param ispublic
+	 *            is public
+	 * @param appointment
+	 *            if the room is an appointment
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time? (use false if not sure
+	 *            what that means)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+	 *            to set a user as default Moderator
+	 * @param externalRoomType
+	 *            the external room type (can be used to identify different
+	 *            external systems using same OpenMeetings instance)
+	 * @param allowUserQuestions
+	 *            enable or disable the button to allow users to apply for
+	 *            moderation
+	 * @param isAudioOnly
+	 *            enable or disable the video / or audio-only
+	 * @param waitForRecording
+	 *            if the users in the room will get a notification that they
+	 *            should start recording before they do a conference
+	 * @param allowRecording
+	 *            if the recording option is available or not
+	 * @param hideTopBar
+	 *            if the top bar in the conference room is visible or not
+	 *            
+	 * @return - id of the room added or error code
+	 */
+	public Long addRoomWithModerationExternalTypeAndTopBarOption(String SID,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			String externalRoomType, Boolean allowUserQuestions,
+			Boolean isAudioOnly, Boolean waitForRecording,
+			boolean allowRecording, Boolean hideTopBar) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				return roomManager.addExternalRoom(name, roomtypes_id,
+						comment, numberOfPartizipants, ispublic, null,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						null, null, externalRoomType, allowUserQuestions,
+						isAudioOnly, true, false, "", waitForRecording,
+						allowRecording, hideTopBar);
+			}
+		} catch (Exception err) {
+			log.error("[addRoomWithModerationExternalTypeAndTopBarOption] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * 
+	 * Create a Invitation hash and optionally send it by mail the From to Date
+	 * is as String as some SOAP libraries do not accept Date Objects in SOAP
+	 * Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+	 * leading zero's)
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin a
+	 *            valid Session Token
+	 * @param username
+	 *            the username of the User that he will get
+	 * @param room_id
+	 *            the conference room id of the invitation
+	 * @param isPasswordProtected
+	 *            if the invitation is password protected
+	 * @param invitationpass
+	 *            the password for accessing the conference room via the
+	 *            invitation hash
+	 * @param valid
+	 *            the type of validation for the hash 1: endless, 2: from-to
+	 *            period, 3: one-time
+	 * @param validFromDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validFromTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @param validToDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validToTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @return a HASH value that can be made into a URL with
+	 *         http://$OPENMEETINGS_HOST
+	 *         :$PORT/openmeetings/?invitationHash="+invitationsHash;
+	 * @throws AxisFault
+	 */
+	public String getInvitationHash(String SID, String username, Long room_id,
+			Boolean isPasswordProtected, String invitationpass, Integer valid,
+			String validFromDate, String validFromTime, String validToDate,
+			String validToTime) throws AxisFault {
+		return getInvitationHashFullName(SID, username, username, username, room_id, isPasswordProtected, invitationpass, valid,
+				validFromDate, validFromTime, validToDate, validToTime);
+	}
+	/**
+	 * 
+	 * Create a Invitation hash and optionally send it by mail the From to Date
+	 * is as String as some SOAP libraries do not accept Date Objects in SOAP
+	 * Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+	 * leading zero's)
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin a
+	 *            valid Session Token
+	 * @param username
+	 *            the username of the User that he will get
+	 * @param firstname
+	 *            the first name of the User that he will get
+	 * @param lastname
+	 *            the last name of the User that he will get
+	 * @param room_id
+	 *            the conference room id of the invitation
+	 * @param isPasswordProtected
+	 *            if the invitation is password protected
+	 * @param invitationpass
+	 *            the password for accessing the conference room via the
+	 *            invitation hash
+	 * @param valid
+	 *            the type of validation for the hash 1: endless, 2: from-to
+	 *            period, 3: one-time
+	 * @param validFromDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validFromTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @param validToDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validToTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @return a HASH value that can be made into a URL with
+	 *         http://$OPENMEETINGS_HOST
+	 *         :$PORT/openmeetings/?invitationHash="+invitationsHash;
+	 * @throws AxisFault
+	 */
+	public String getInvitationHashFullName(String SID, String username, String firstname, String lastname, Long room_id,
+			Boolean isPasswordProtected, String invitationpass, Integer valid,
+			String validFromDate, String validFromTime, String validToDate,
+			String validToTime) throws AxisFault {
+		return sendInvitationHash(SID, username, firstname, lastname, null, null,
+				room_id, isPasswordProtected, invitationpass, valid, validFromDate,
+				validFromTime, validToDate, validToTime, 1L, false);
+	}
+
+	/**
+	 * Create a Invitation hash and optionally send it by mail the From to Date
+	 * is as String as some SOAP libraries do not accept Date Objects in SOAP
+	 * Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+	 * leading zero's)
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin a
+	 *            valid Session Token
+	 * @param username
+	 *            the Username of the User that he will get
+	 * @param message
+	 *            the Message in the Email Body send with the invitation if
+	 *            sendMail is true
+	 * @param email
+	 *            the Email to send the invitation to if sendMail is true
+	 * @param subject
+	 *            the subject of the Email send with the invitation if sendMail
+	 *            is true
+	 * @param room_id
+	 *            the conference room id of the invitation
+	 * @param isPasswordProtected
+	 *            if the invitation is password protected
+	 * @param invitationpass
+	 *            the password for accessing the conference room via the
+	 *            invitation hash
+	 * @param valid
+	 *            the type of validation for the hash 1: endless, 2: from-to
+	 *            period, 3: one-time
+	 * @param validFromDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validFromTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @param validToDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validToTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @param language_id
+	 *            the language id of the EMail that is send with the invitation
+	 *            if sendMail is true
+	 * @param sendMail
+	 *            if sendMail is true then the RPC-Call will send the invitation
+	 *            to the email
+	 * @return a HASH value that can be made into a URL with
+	 *         http://$OPENMEETINGS_HOST
+	 *         :$PORT/openmeetings/?invitationHash="+invitationsHash;
+	 * @throws AxisFault
+	 */
+	public String sendInvitationHash(String SID, String username, String message, String email, String subject,
+			Long room_id, Boolean isPasswordProtected, String invitationpass, Integer valid, String validFromDate,
+			String validFromTime, String validToDate, String validToTime, Long language_id, Boolean sendMail) throws AxisFault {
+		return sendInvitationHash(SID, email, username, username, message, subject,
+				room_id, isPasswordProtected, invitationpass, valid, validFromDate,
+				validFromTime, validToDate, validToTime, language_id, sendMail);
+	}
+
+	private String sendInvitationHash(String SID, String email, String firstname, String lastname, String message, String subject,
+			Long room_id, Boolean isPasswordProtected, String invitationpass, Integer valid, String validFromDate,
+			String validFromTime, String validToDate, String validToTime, Long language_id, Boolean sendMail) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				Date dFrom = new Date();
+				Date dTo = new Date();
+
+				if (valid == 2) {
+					Integer validFromHour = Integer.valueOf(validFromTime.substring(0, 2));
+					Integer validFromMinute = Integer.valueOf(validFromTime.substring(3, 5));
+
+					Integer validToHour = Integer.valueOf(validToTime.substring(0, 2));
+					Integer validToMinute = Integer.valueOf(validToTime.substring(3, 5));
+
+					log.info("validFromHour: " + validFromHour);
+					log.info("validFromMinute: " + validFromMinute);
+
+					Date fromDate = CalendarPatterns.parseDate(validFromDate); // dd.MM.yyyy
+					Date toDate = CalendarPatterns.parseDate(validToDate); // dd.MM.yyyy
+
+					Calendar calFrom = Calendar.getInstance();
+					calFrom.setTime(fromDate);
+					calFrom.set(calFrom.get(Calendar.YEAR),
+							calFrom.get(Calendar.MONTH),
+							calFrom.get(Calendar.DATE), validFromHour,
+							validFromMinute, 0);
+
+					Calendar calTo = Calendar.getInstance();
+					calTo.setTime(toDate);
+					calTo.set(calTo.get(Calendar.YEAR),
+							calTo.get(Calendar.MONTH),
+							calTo.get(Calendar.DATE), validToHour,
+							validToMinute, 0);
+
+					dFrom = calFrom.getTime();
+					dTo = calTo.getTime();
+
+					log.info("validFromDate: " + CalendarPatterns.getDateWithTimeByMiliSeconds(dFrom));
+					log.info("validToDate: " + CalendarPatterns.getDateWithTimeByMiliSeconds(dTo));
+				}
+
+				User invitee = userDao.getContact(email, firstname, lastname, users_id);
+				Invitation invitation = invitationManager.getInvitation(invitee, roomDao.get(room_id),
+								isPasswordProtected, invitationpass, Valid.fromInt(valid)
+								, userDao.get(users_id), language_id,
+								dFrom, dTo, null);
+
+				if (invitation != null) {
+					if (sendMail) {
+						invitationManager.sendInvitionLink(invitation, MessageType.Create, subject, message, false);
+					}
+
+					return invitation.getHash();
+				} else {
+					return "Sys - Error";
+				}
+			} else {
+				return "Need Admin Privileges to perfom the Action";
+			}
+
+		} catch (Exception err) {
+			log.error("[sendInvitationHash] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Create a Invitation hash and optionally send it by mail the From to Date
+	 * is as String as some SOAP libraries do not accept Date Objects in SOAP
+	 * Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+	 * leading zero's)
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin a
+	 *            valid Session Token
+	 * @param username
+	 *            the Username of the User that he will get
+	 * @param message
+	 *            the Message in the Email Body send with the invitation if
+	 *            sendMail is true
+	 * @param email
+	 *            the Email to send the invitation to if sendMail is true
+	 * @param subject
+	 *            the subject of the Email send with the invitation if sendMail
+	 *            is true
+	 * @param room_id
+	 *            the conference room id of the invitation
+	 * @param conferencedomain
+	 *            the domain of the room (keep empty)
+	 * @param isPasswordProtected
+	 *            if the invitation is password protected
+	 * @param invitationpass
+	 *            the password for accessing the conference room via the
+	 *            invitation hash
+	 * @param valid
+	 *            the type of validation for the hash 1: endless, 2: from-to
+	 *            period, 3: one-time
+	 * @param fromDate
+	 *            Date as Date Object only of interest if valid is type 2
+	 * @param toDate
+	 *            Date as Date Object only of interest if valid is type 2
+	 * @param language_id
+	 *            the language id of the EMail that is send with the invitation
+	 *            if sendMail is true
+	 * @param sendMail
+	 *            if sendMail is true then the RPC-Call will send the invitation
+	 *            to the email
+	 * @return a HASH value that can be made into a URL with
+	 *         http://$OPENMEETINGS_HOST
+	 *         :$PORT/openmeetings/?invitationHash="+invitationsHash;
+	 * @throws AxisFault
+	 */
+	public String sendInvitationHashWithDateObject(String SID, String username,
+			String message, String email, String subject,
+			Long room_id, String conferencedomain, Boolean isPasswordProtected,
+			String invitationpass, Integer valid, Date fromDate, Date toDate,
+			Long language_id, Boolean sendMail) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				Calendar calFrom = Calendar.getInstance();
+				calFrom.setTime(fromDate);
+
+				Calendar calTo = Calendar.getInstance();
+				calTo.setTime(toDate);
+
+				Date dFrom = calFrom.getTime();
+				Date dTo = calTo.getTime();
+
+				log.info("validFromDate: "
+						+ CalendarPatterns.getDateWithTimeByMiliSeconds(dFrom));
+				log.info("validToDate: "
+						+ CalendarPatterns.getDateWithTimeByMiliSeconds(dTo));
+
+				User invitee = userDao.getContact(email, users_id);
+				Invitation invitation = invitationManager.getInvitation(invitee, roomDao.get(room_id),
+								isPasswordProtected, invitationpass, Valid.fromInt(valid)
+								, userDao.get(users_id), language_id, dFrom, dTo, null);
+
+				if (invitation != null) {
+					if (sendMail) {
+						invitationManager.sendInvitionLink(invitation, MessageType.Create, subject, message, false);
+					}
+
+					return invitation.getHash();
+				} else {
+					return "Sys - Error";
+				}
+			} else {
+				return "Need Admin Privileges to perfom the Action";
+			}
+		} catch (Exception err) {
+			log.error("[sendInvitationHash] ", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Return a RoomReturn Object with information of the current users of a
+	 * conference room
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param start
+	 *            The id you want to start
+	 * @param max
+	 *            The maximum you want to get
+	 * @param orderby
+	 *            The column it will be ordered
+	 * @param asc
+	 *            Asc or Desc sort ordering
+	 *            
+	 * @return - RoomReturn Objects with information of the current users
+	 * @throws AxisFault
+	 */
+	public List<RoomReturn> getRoomsWithCurrentUsersByList(String SID,
+			int start, int max, String orderby, boolean asc) throws AxisFault {
+		try {
+			List<Room> rooms = conferenceService
+					.getRoomsWithCurrentUsersByList(SID, start, max, orderby,
+							asc);
+
+			List<RoomReturn> returnObjList = new LinkedList<RoomReturn>();
+
+			for (Room room : rooms) {
+
+				RoomReturn roomReturn = new RoomReturn();
+
+				roomReturn.setRoom_id(room.getRooms_id());
+				roomReturn.setName(room.getName());
+
+				roomReturn.setCreator("SOAP");
+				roomReturn.setCreated(room.getStarttime());
+
+				RoomUser[] rUser = new RoomUser[room.getCurrentusers().size()];
+
+				int i = 0;
+				for (Client rcl : room.getCurrentusers()) {
+
+					RoomUser ru = new RoomUser();
+					ru.setFirstname(rcl.getFirstname());
+					ru.setLastname(rcl.getLastname());
+
+					rUser[i] = ru;
+
+					i++;
+				}
+
+				roomReturn.setRoomUser(rUser);
+
+				returnObjList.add(roomReturn);
+
+			}
+
+			return returnObjList;
+		} catch (Exception err) {
+			log.error("setUserObjectWithExternalUser", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Return a RoomReturn Object with information of the current users of a
+	 * conference room with option to search for special external room types
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param start
+	 *            The id you want to start
+	 * @param max
+	 *            The maximum you want to get
+	 * @param orderby
+	 *            The column it will be ordered
+	 * @param asc
+	 *            Asc or Desc sort ordering
+	 * @param externalRoomType
+	 *            the external room type
+	 *            
+	 * @return - list of room return objects
+	 * @throws AxisFault
+	 */
+	public List<RoomReturn> getRoomsWithCurrentUsersByListAndType(String SID,
+			int start, int max, String orderby, boolean asc,
+			String externalRoomType) throws AxisFault {
+		try {
+			List<Room> rooms = conferenceService
+					.getRoomsWithCurrentUsersByListAndType(SID, start, max,
+							orderby, asc, externalRoomType);
+
+			List<RoomReturn> returnObjList = new LinkedList<RoomReturn>();
+
+			for (Room room : rooms) {
+
+				RoomReturn roomReturn = new RoomReturn();
+
+				roomReturn.setRoom_id(room.getRooms_id());
+				roomReturn.setName(room.getName());
+
+				roomReturn.setCreator("SOAP");
+				roomReturn.setCreated(room.getStarttime());
+
+				RoomUser[] rUser = new RoomUser[room.getCurrentusers().size()];
+
+				int i = 0;
+				for (Client rcl : room.getCurrentusers()) {
+
+					RoomUser ru = new RoomUser();
+					ru.setFirstname(rcl.getFirstname());
+					ru.setLastname(rcl.getLastname());
+
+					rUser[i] = ru;
+
+					i++;
+				}
+
+				roomReturn.setRoomUser(rUser);
+
+				returnObjList.add(roomReturn);
+
+			}
+
+			return returnObjList;
+		} catch (Exception err) {
+			log.error("setUserObjectWithExternalUser", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Adds a conference room that is only available for a period of time
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param name
+	 *            new name of the room
+	 * @param roomtypes_id
+	 *            new type of room (1 = Conference, 2 = Audience, 3 =
+	 *            Restricted, 4 = Interview)
+	 * @param comment
+	 *            new comment
+	 * @param numberOfPartizipants
+	 *            new numberOfParticipants
+	 * @param ispublic
+	 *            is public
+	 * @param appointment
+	 *            if the room is an appointment
+	 * @param isDemoRoom
+	 *            is it a Demo Room with limited time? (use false if not sure
+	 *            what that means)
+	 * @param demoTime
+	 *            time in seconds after the user will be logged out (only
+	 *            enabled if isDemoRoom is true)
+	 * @param isModeratedRoom
+	 *            Users have to wait until a Moderator arrives. Use the
+	 *            becomeModerator parameter in setUserObjectAndGenerateRoomHash
+	 *            to set a user as default Moderator
+	 * @param externalRoomType
+	 *            the external room type (can be used to identify different
+	 *            external systems using same OpenMeetings instance)
+	 * @param validFromDate
+	 *            valid from as Date format: dd.MM.yyyy
+	 * @param validFromTime
+	 *            valid to as time format: mm:hh
+	 * @param validToDate
+	 *            valid to Date format: dd.MM.yyyy
+	 * @param validToTime
+	 *            valid to time format: mm:hh
+	 * @param isPasswordProtected
+	 *            If the links send via EMail to invited people is password
+	 *            protected
+	 * @param password
+	 *            Password for Invitations send via Mail
+	 * @param reminderTypeId
+	 *            1=none, 2=simple mail, 3=ICAL
+	 * @param redirectURL
+	 *            URL Users will be lead to if the Conference Time is elapsed
+	 *            
+	 * @return - id of the room in case of success, error code otherwise
+	 * @throws AxisFault
+	 */
+	public Long addRoomWithModerationAndExternalTypeAndStartEnd(String SID,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			String externalRoomType, String validFromDate,
+			String validFromTime, String validToDate, String validToTime,
+			Boolean isPasswordProtected, String password, Long reminderTypeId,
+			String redirectURL) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				int validFromHour = Integer.valueOf(validFromTime.substring(0, 2)).intValue();
+				int validFromMinute = Integer.valueOf(validFromTime.substring(3, 5)).intValue();
+
+				int validToHour = Integer.valueOf(validToTime.substring(0, 2)).intValue();
+				int validToMinute = Integer.valueOf(validToTime.substring(3, 5)).intValue();
+
+				log.info("validFromHour: " + validFromHour);
+				log.info("validFromMinute: " + validFromMinute);
+
+				Date fromDate = CalendarPatterns.parseDateBySeparator(validFromDate); // dd.MM.yyyy
+				Date toDate = CalendarPatterns.parseDateBySeparator(validToDate); // dd.MM.yyyy
+
+				Calendar calFrom = Calendar.getInstance();
+				calFrom.setTime(fromDate);
+				calFrom.set(calFrom.get(Calendar.YEAR),
+						calFrom.get(Calendar.MONTH),
+						calFrom.get(Calendar.DATE), validFromHour,
+						validFromMinute, 0);
+
+				Calendar calTo = Calendar.getInstance();
+				calTo.setTime(toDate);
+				calTo.set(calTo.get(Calendar.YEAR), calTo.get(Calendar.MONTH),
+						calTo.get(Calendar.DATE), validToHour, validToMinute, 0);
+
+				Date dFrom = calFrom.getTime();
+				Date dTo = calTo.getTime();
+
+				log.info("validFromDate: " + CalendarPatterns.getDateWithTimeByMiliSeconds(dFrom));
+				log.info("validToDate: " + CalendarPatterns.getDateWithTimeByMiliSeconds(dTo));
+
+				Long rooms_id = roomManager.addExternalRoom(name,
+						roomtypes_id, comment, numberOfPartizipants, ispublic,
+						null, appointment, isDemoRoom, demoTime,
+						isModeratedRoom, null, null, externalRoomType, false, // allowUserQuestions
+						false, // isAudioOnly
+						true,  // allowFontStyles
+						false, // closed
+						redirectURL, false, true, false);
+
+				if (rooms_id <= 0) {
+					return rooms_id;
+				}
+
+				Appointment a = new Appointment();
+				a.setTitle("appointmentName");
+				a.setOwner(userDao.get(users_id));
+				a.setLocation("appointmentLocation");
+				a.setDescription("appointmentDescription");
+				a.setStart(dFrom);
+				a.setEnd(dTo);
+				a.setCategory(appointmentCategoryDao.get(1L));
+				a.setRemind(appointmentReminderTypDao.get(reminderTypeId));
+				a.setRoom(roomDao.get(rooms_id));
+				a.setPasswordProtected(isPasswordProtected);
+				a.setPassword(password);
+				a.setLanguageId(1L); //TODO check
+				appointmentDao.update(a, users_id); //FIXME verify !!!
+
+				return rooms_id;
+
+			} else {
+				return -2L;
+			}
+		} catch (Exception err) {
+			log.error("[addRoomWithModeration] ", err);
+
+			throw new AxisFault(err.getMessage());
+		}
+		// return new Long(-1);
+		// return numberOfPartizipants;
+	}
+
+	/**
+	 * Add a meeting member to a certain room. This is the same as adding an
+	 * external user to a event in the calendar.
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param room_id
+	 *            The Room Id the meeting member is going to be added
+	 * @param firstname
+	 *            The first name of the meeting member
+	 * @param lastname
+	 *            The last name of the meeting member
+	 * @param email
+	 *            The email of the Meeting member
+	 * @param language_id
+	 *            The ID of the language, for the email that is send to the
+	 *            meeting member
+	 *            
+	 * @return - id of the member in case of success, error code otherwise
+	 * @throws AxisFault
+	 */
+	public Long addMeetingMemberRemindToRoom(String SID, Long room_id,
+			String firstname, String lastname, String email, Long language_id) throws AxisFault {
+		return addExternalMeetingMemberRemindToRoom(SID, room_id, firstname, lastname, email, language_id, null, null);
+	}
+
+	/**
+	 * Add a meeting member to a certain room. This is the same as adding an
+	 * external user to a event in the calendar. with a certain time zone
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param room_id
+	 *            The Room Id the meeting member is going to be added
+	 * @param firstname
+	 *            The first name of the meeting member
+	 * @param lastname
+	 *            The last name of the meeting member
+	 * @param email
+	 *            The email of the Meeting member
+	 * @param language_id
+	 *            The ID of the language, for the email that is send to the
+	 *            meeting member
+	 * @param jNameTimeZone
+	 *            name of the timezone
+	 * @param invitorName
+	 *            name of invitation creators
+	 *            
+	 * @return - id of the member in case of success, error code otherwise
+	 * @throws AxisFault
+	 */
+	public Long addExternalMeetingMemberRemindToRoom(String SID, Long room_id,
+			String firstname, String lastname, String email, Long language_id, String jNameTimeZone, String invitorName)
+			throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				Appointment a = appointmentLogic.getAppointmentByRoom(room_id);
+
+				if (email == null || a == null) {
+					return -1L;
+				}
+				for (MeetingMember mm : a.getMeetingMembers()) {
+					if (email.equals(mm.getUser().getAdresses().getEmail())) {
+						return mm.getId();
+					}
+				}
+				MeetingMember mm = new MeetingMember();
+				mm.setAppointment(a);
+				mm.setUser(userDao.getContact(email, firstname, lastname, language_id, jNameTimeZone, users_id));
+				a.getMeetingMembers().add(mm);
+				appointmentDao.update(a, users_id);
+
+				return mm.getId(); //FIXME check to return ID
+			} else {
+				return -2L;
+			}
+		} catch (Exception err) {
+			log.error("[addExternalMeetingMemberRemindToRoom] ", err);
+
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Method to remotely close or open rooms. If a room is closed all users
+	 * inside the room and all users that try to enter it will be redirected to
+	 * the redirectURL that is defined in the Room-Object.
+	 * 
+	 * Returns positive value if authentication was successful.
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param room_id
+	 *            the room id
+	 * @param status
+	 *            false = close, true = open
+	 *            
+	 * @return - 1 in case of success, -2 otherwise
+	 * @throws AxisFault
+	 */
+	public int closeRoom(String SID, Long room_id, Boolean status)
+			throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			log.debug("closeRoom 1 " + room_id);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				log.debug("closeRoom 2 " + status);
+
+				roomManager.closeRoom(room_id, status);
+
+				if (status) {
+					Map<String, String> message = new HashMap<String, String>();
+					message.put("message", "roomClosed");
+					scopeApplicationAdapter.sendMessageByRoomAndDomain(room_id,
+							message);
+				}
+				return 1;
+
+			} else {
+				return -2;
+			}
+		} catch (Exception err) {
+			log.error("[closeRoom] ", err);
+
+			throw new AxisFault(err.getMessage());
+		}
+
+	}
+
+	/**
+	 * Method to update arbitrary room parameter.
+	 * 
+	 * @param SID The SID of the User. This SID must be marked as logged in
+	 * @param room_id the room id
+	 * @param paramName the name of parameter to be updated, please NOTE rooms_id is not updatable as well as fields of type {@link Date} and {@link List}
+	 * @param paramValue the value to be set, please use "type id" to set room type 
+	 * @return 1 in case of success, -2 if permissions are insufficient
+	 * @throws AxisFault if any error occurred
+	 */
+	public int modifyRoomParameter(String SID, Long room_id, String paramName, String paramValue)
+			throws AxisFault {
+		try {
+			if ("rooms_id".equals(paramName)) {
+				throw new AxisFault("Non modifiable parameter");
+			}
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				log.debug(String.format("modifyRoomParameter[%s]: %s = %s", room_id, paramName, paramValue));
+				Room r = roomDao.get(room_id);
+				BeanWrapper rw = new BeanWrapperImpl(r);
+				Class<?> valueClass = rw.getPropertyType(paramName);
+				Object val = null;
+				//don't like this code
+				if (valueClass == null) {
+					//do nothing
+				} else if (valueClass.isAssignableFrom(String.class)) {
+					val = paramValue;
+				} else if (valueClass.isAssignableFrom(Boolean.class) || valueClass.isAssignableFrom(boolean.class)) {
+					val = Boolean.parseBoolean(paramValue);
+				} else if (valueClass.isAssignableFrom(RoomType.class)) {
+					val = roomTypeDao.get(Long.parseLong(paramValue));
+				} else if (valueClass.isAssignableFrom(Long.class)) {
+					val = Long.parseLong(paramValue);
+				} else if (valueClass.isAssignableFrom(Integer.class)) {
+					val = Integer.parseInt(paramValue);
+				}
+				rw.setPropertyValue(paramName, val);
+				roomDao.update(r, users_id);
+			} else {
+				return -2;
+			}
+			return 1;
+		} catch (Exception err) {
+			log.error("[modifyRoomParameter] ", err);
+
+			throw new AxisFault(err.getMessage());
+		}
+	}
+	
+	/**
+	 * Adds a room to an organization
+	 * 
+	 * @param SID - The SID of the User. This SID must be marked as Loggedin
+	 * @param rooms_id - Id of room to be added
+	 * @param organisation_id - Id of organisation that the room is being paired with
+	 * 
+	 * @return Id of the relation created, null or -1 in case of the error
+	 */
+	public Long addRoomToOrg(String SID, Long rooms_id, Long organisation_id) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				if (null == roomManager.getRoomsOrganisationByOrganisationIdAndRoomId(organisation_id, rooms_id)) {
+					return roomManager.addRoomToOrganisation(rooms_id, organisation_id);
+				}
+			}
+		} catch (Exception err) {
+			log.error("[addRoomToOrg]", err);
+		}
+		return new Long(-1);
+	}
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/RoomWebServiceFacade.java b/src/axis/java/org/apache/openmeetings/axis/services/RoomWebServiceFacade.java
new file mode 100644
index 0000000..64fdd29
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/RoomWebServiceFacade.java
@@ -0,0 +1,559 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import java.util.Date;
+import java.util.List;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.db.dto.record.RecordingDTO;
+import org.apache.openmeetings.db.dto.room.RoomDTO;
+import org.apache.openmeetings.db.dto.room.RoomSearchResult;
+import org.apache.openmeetings.db.entity.room.RoomType;
+
+public class RoomWebServiceFacade extends BaseWebService {
+
+	public List<RoomDTO> getRoomsPublic(String SID, Long roomtypes_id) throws AxisFault {
+		return getBean(RoomWebService.class).getRoomsPublic(SID, roomtypes_id);
+	}
+
+	/**
+	 * Deletes a flv recording
+	 * 
+	 * @param SID
+	 *            The SID of the User. This SID must be marked as Loggedin
+	 * @param flvRecordingId
+	 *            the id of the recording
+	 * @return
+	 * @throws AxisFault
+	 */
+	public boolean deleteFlvRecording(String SID, Long flvRecordingId)
+			throws AxisFault {
+		return getBean(RoomWebService.class).deleteFlvRecording(SID,
+				flvRecordingId);
+	}
+
+	public List<RecordingDTO> getFlvRecordingByExternalUserId(String SID,
+			String externalUserId, String externalUserType) throws AxisFault {
+		return getBean(RoomWebService.class).getFlvRecordingByExternalUserId(SID, externalUserId, externalUserType);
+	}
+
+	public List<RecordingDTO> getFlvRecordingByExternalRoomTypeAndCreator(
+			String SID, String externalRoomType, Long insertedBy)
+			throws AxisFault {
+		return getBean(RoomWebService.class)
+				.getFlvRecordingByExternalRoomTypeAndCreator(SID,
+						externalRoomType, insertedBy);
+	}
+
+	public List<RecordingDTO> getFlvRecordingByExternalRoomTypeByList(String SID, String externalRoomType) throws AxisFault {
+		return getBean(RoomWebService.class)
+				.getFlvRecordingByExternalRoomTypeByList(SID, externalRoomType);
+	}
+
+	public List<RecordingDTO> getRecordingsByExternalType(String SID, String externalType) throws AxisFault {
+		return getBean(RoomWebService.class).getRecordingsByExternalType(SID, externalType);
+	}
+
+	public List<RecordingDTO> getFlvRecordingByExternalRoomType(String SID, String externalRoomType) throws AxisFault {
+		return getBean(RoomWebService.class).getFlvRecordingByExternalRoomType(SID, externalRoomType);
+	}
+
+	public List<RecordingDTO> getFlvRecordingByRoomId(String SID, Long roomId) throws AxisFault {
+		return getBean(RoomWebService.class).getFlvRecordingByRoomId(SID, roomId);
+	}
+
+	public List<RoomType> getRoomTypes(String SID) throws AxisFault {
+		return getBean(RoomWebService.class).getRoomTypes(SID);
+	}
+
+	public List<RoomCountBean> getRoomCounters(String SID, Integer[] roomId) throws AxisFault {
+		return getBean(RoomWebService.class).getRoomCounters(SID, roomId);
+	}
+
+	public RoomDTO getRoomById(String SID, long rooms_id) throws AxisFault {
+		return getBean(RoomWebService.class).getRoomById(SID, rooms_id);
+	}
+
+	public RoomReturn getRoomWithClientObjectsById(String SID, long rooms_id)
+			throws AxisFault {
+		return getBean(RoomWebService.class).getRoomWithClientObjectsById(SID,
+				rooms_id);
+	}
+
+	public RoomSearchResult getRooms(String SID, int start, int max, String orderby, boolean asc) throws AxisFault {
+		return getBean(RoomWebService.class).getRooms(SID, start, max, orderby, asc);
+	}
+
+	public RoomSearchResult getRoomsWithCurrentUsers(String SID, int start, int max, String orderby , boolean asc) throws AxisFault {
+		return getBean(RoomWebService.class).getRoomsWithCurrentUsers(SID, start, max, orderby, asc);
+	}
+
+	public Long addRoomWithModeration(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom) throws AxisFault {
+		return getBean(RoomWebService.class).addRoomWithModeration(SID, name,
+				roomtypes_id, comment, numberOfPartizipants, ispublic,
+				appointment, isDemoRoom, demoTime, isModeratedRoom);
+	}
+
+	/**
+	 * this SOAP Method has an additional param to enable or disable the buttons
+	 * to apply for moderation this does only work in combination with the
+	 * room-type restricted
+	 * 
+	 * @param SID
+	 * @param name
+	 * @param roomtypes_id
+	 * @param comment
+	 * @param numberOfPartizipants
+	 * @param ispublic
+	 * @param appointment
+	 * @param isDemoRoom
+	 * @param demoTime
+	 * @param isModeratedRoom
+	 * @param allowUserQuestions
+	 * @return
+	 */
+	public Long addRoomWithModerationAndQuestions(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom,
+			Boolean allowUserQuestions) throws AxisFault {
+		return getBean(RoomWebService.class).addRoomWithModerationAndQuestions(
+				SID, name, roomtypes_id, comment, numberOfPartizipants,
+				ispublic, appointment, isDemoRoom, demoTime, isModeratedRoom,
+				allowUserQuestions);
+	}
+
+	public Long addRoomWithModerationQuestionsAndAudioType(String SID,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			Boolean allowUserQuestions, Boolean isAudioOnly) throws AxisFault {
+		return getBean(RoomWebService.class)
+				.addRoomWithModerationQuestionsAndAudioType(SID, name,
+						roomtypes_id, comment, numberOfPartizipants, ispublic,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						allowUserQuestions, isAudioOnly);
+	}
+
+	/**
+	 * 
+	 * @param SID
+	 * @param name
+	 * @param roomtypes_id
+	 * @param comment
+	 * @param numberOfPartizipants
+	 * @param ispublic
+	 * @param appointment
+	 * @param isDemoRoom
+	 * @param demoTime
+	 * @param isModeratedRoom
+	 * @param externalRoomId
+	 * @param externalUserType
+	 * @return
+	 */
+	public Long getRoomIdByExternalId(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom, Long externalRoomId,
+			String externalRoomType) throws AxisFault {
+		return getBean(RoomWebService.class).getRoomIdByExternalId(SID, name,
+				roomtypes_id, comment, numberOfPartizipants, ispublic,
+				appointment, isDemoRoom, demoTime, isModeratedRoom,
+				externalRoomId, externalRoomType);
+	}
+
+	public Long updateRoomWithModeration(String SID, Long room_id, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom) throws AxisFault {
+		return getBean(RoomWebService.class).updateRoomWithModeration(SID,
+				room_id, name, roomtypes_id, comment, numberOfPartizipants,
+				ispublic, appointment, isDemoRoom, demoTime, isModeratedRoom);
+	}
+
+	public Long updateRoomWithModerationAndQuestions(String SID, Long room_id,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			Boolean allowUserQuestions) throws AxisFault {
+		return getBean(RoomWebService.class).updateRoomWithModerationAndQuestions(
+				SID, room_id, name, roomtypes_id, comment,
+				numberOfPartizipants, ispublic, appointment, isDemoRoom,
+				demoTime, isModeratedRoom, allowUserQuestions);
+	}
+
+	public Long updateRoomWithModerationQuestionsAudioTypeAndHideOptions(
+			String SID, Long room_id, String name, Long roomtypes_id,
+			String comment, Long numberOfPartizipants, Boolean ispublic,
+			Boolean appointment, Boolean isDemoRoom, Integer demoTime,
+			Boolean isModeratedRoom, Boolean allowUserQuestions,
+			Boolean isAudioOnly, Boolean hideTopBar, Boolean hideChat,
+			Boolean hideActivitiesAndActions, Boolean hideFilesExplorer,
+			Boolean hideActionsMenu, Boolean hideScreenSharing,
+			Boolean hideWhiteboard) throws AxisFault {
+		return getBean(RoomWebService.class)
+				.updateRoomWithModerationQuestionsAudioTypeAndHideOptions(SID,
+						room_id, name, roomtypes_id, comment,
+						numberOfPartizipants, ispublic, appointment,
+						isDemoRoom, demoTime, isModeratedRoom,
+						allowUserQuestions, isAudioOnly, hideTopBar, hideChat,
+						hideActivitiesAndActions, hideFilesExplorer,
+						hideActionsMenu, hideScreenSharing, hideWhiteboard);
+
+	}
+
+	public Long deleteRoom(String SID, long rooms_id) throws AxisFault {
+		return getBean(RoomWebService.class).deleteRoom(SID, rooms_id);
+	}
+
+	public Boolean kickUser(String SID_Admin, Long room_id) throws AxisFault {
+		return getBean(RoomWebService.class).kickUser(SID_Admin, room_id);
+	}
+
+	public Long addRoomWithModerationAndExternalType(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom, String externalRoomType)
+			throws AxisFault {
+		return getBean(RoomWebService.class).addRoomWithModerationAndExternalType(
+				SID, name, roomtypes_id, comment, numberOfPartizipants,
+				ispublic, appointment, isDemoRoom, demoTime, isModeratedRoom,
+				externalRoomType);
+	}
+
+	public Long addRoomWithModerationExternalTypeAndAudioType(String SID,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			String externalRoomType, Boolean allowUserQuestions,
+			Boolean isAudioOnly) throws AxisFault {
+		return getBean(RoomWebService.class)
+				.addRoomWithModerationExternalTypeAndAudioType(SID, name,
+						roomtypes_id, comment, numberOfPartizipants, ispublic,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						externalRoomType, allowUserQuestions, isAudioOnly);
+	}
+
+	public Long addRoomWithModerationAndRecordingFlags(String SID, String name,
+			Long roomtypes_id, String comment, Long numberOfPartizipants,
+			Boolean ispublic, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom, String externalRoomType,
+			Boolean allowUserQuestions, Boolean isAudioOnly,
+			Boolean waitForRecording, Boolean allowRecording) throws AxisFault {
+		return getBean(RoomWebService.class)
+				.addRoomWithModerationAndRecordingFlags(SID, name,
+						roomtypes_id, comment, numberOfPartizipants, ispublic,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						externalRoomType, allowUserQuestions, isAudioOnly,
+						waitForRecording, allowRecording);
+	}
+
+	public Long addRoomWithModerationExternalTypeAndTopBarOption(String SID,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			String externalRoomType, Boolean allowUserQuestions,
+			Boolean isAudioOnly, Boolean waitForRecording,
+			Boolean allowRecording, Boolean hideTopBar) throws AxisFault {
+		return getBean(RoomWebService.class)
+				.addRoomWithModerationExternalTypeAndTopBarOption(SID, name,
+						roomtypes_id, comment, numberOfPartizipants, ispublic,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						externalRoomType, allowUserQuestions, isAudioOnly,
+						waitForRecording, allowRecording, hideTopBar);
+	}
+
+	public Long addRoomWithModerationQuestionsAudioTypeAndHideOptions(
+			String SID, String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			Boolean allowUserQuestions, Boolean isAudioOnly,
+			Boolean hideTopBar, Boolean hideChat,
+			Boolean hideActivitiesAndActions, Boolean hideFilesExplorer,
+			Boolean hideActionsMenu, Boolean hideScreenSharing,
+			Boolean hideWhiteboard) throws AxisFault {
+		return getBean(RoomWebService.class).addRoomWithModerationQuestionsAudioTypeAndHideOptions(SID, name, roomtypes_id, comment, numberOfPartizipants, ispublic, appointment, isDemoRoom, demoTime, isModeratedRoom, allowUserQuestions, isAudioOnly, hideTopBar, hideChat, hideActivitiesAndActions, hideFilesExplorer, hideActionsMenu, hideScreenSharing, hideWhiteboard);
+	}
+	
+	/**
+	 * 
+	 * Create a Invitation hash and optionally send it by mail the From to Date
+	 * is as String as some SOAP libraries do not accept Date Objects in SOAP
+	 * Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+	 * leading zero's)
+	 * 
+	 * @param SID
+	 *            a valid Session Token
+	 * @param username
+	 *            the username of the User that he will get
+	 * @param room_id
+	 *            the conference room id of the invitation
+	 * @param isPasswordProtected
+	 *            if the invitation is password protected
+	 * @param invitationpass
+	 *            the password for accessing the conference room via the
+	 *            invitation hash
+	 * @param valid
+	 *            the type of validation for the hash 1: endless, 2: from-to
+	 *            period, 3: one-time
+	 * @param validFromDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validFromTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @param validToDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validToTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @return a HASH value that can be made into a URL with
+	 *         http://$OPENMEETINGS_HOST
+	 *         :$PORT/openmeetings/?invitationHash="+invitationsHash;
+	 * @throws AxisFault
+	 */
+	public String getInvitationHash(String SID, String username, Long room_id,
+			Boolean isPasswordProtected, String invitationpass, Integer valid,
+			String validFromDate, String validFromTime, String validToDate,
+			String validToTime) throws AxisFault {
+		return getBean(RoomWebService.class).getInvitationHash(SID, username,
+				room_id, isPasswordProtected, invitationpass, valid,
+				validFromDate, validFromTime, validToDate, validToTime);
+
+	}
+
+	/**
+	 * 
+	 * Create a Invitation hash and optionally send it by mail the From to Date
+	 * is as String as some SOAP libraries do not accept Date Objects in SOAP
+	 * Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+	 * leading zero's)
+	 * 
+	 * @param SID
+	 *            a valid Session Token
+	 * @param username
+	 *            the username of the User that he will get
+	 * @param firstname
+	 *            the first name of the User that he will get
+	 * @param lastname
+	 *            the last name of the User that he will get
+	 * @param room_id
+	 *            the conference room id of the invitation
+	 * @param isPasswordProtected
+	 *            if the invitation is password protected
+	 * @param invitationpass
+	 *            the password for accessing the conference room via the
+	 *            invitation hash
+	 * @param valid
+	 *            the type of validation for the hash 1: endless, 2: from-to
+	 *            period, 3: one-time
+	 * @param validFromDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validFromTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @param validToDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validToTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @return a HASH value that can be made into a URL with
+	 *         http://$OPENMEETINGS_HOST
+	 *         :$PORT/openmeetings/?invitationHash="+invitationsHash;
+	 * @throws AxisFault
+	 */
+	public String getInvitationHashFullName(String SID, String username, String firstname, String lastname, Long room_id,
+			Boolean isPasswordProtected, String invitationpass, Integer valid,
+			String validFromDate, String validFromTime, String validToDate,
+			String validToTime) throws AxisFault {
+		return getBean(RoomWebService.class).getInvitationHashFullName(SID, username, firstname, lastname,
+				room_id, isPasswordProtected, invitationpass, valid, validFromDate, validFromTime, validToDate, validToTime);
+
+	}
+
+	/**
+	 * Create a Invitation hash and optionally send it by mail the From to Date
+	 * is as String as some SOAP libraries do not accept Date Objects in SOAP
+	 * Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+	 * leading zero's)
+	 * 
+	 * @param SID
+	 *            a valid Session Token
+	 * @param username
+	 *            the Username of the User that he will get
+	 * @param message
+	 *            the Message in the Email Body send with the invitation if
+	 *            sendMail is true
+	 * @param email
+	 *            the Email to send the invitation to if sendMail is true
+	 * @param subject
+	 *            the subject of the Email send with the invitation if sendMail
+	 *            is true
+	 * @param room_id
+	 *            the conference room id of the invitation
+	 * @param isPasswordProtected
+	 *            if the invitation is password protected
+	 * @param invitationpass
+	 *            the password for accessing the conference room via the
+	 *            invitation hash
+	 * @param valid
+	 *            the type of validation for the hash 1: endless, 2: from-to
+	 *            period, 3: one-time
+	 * @param validFromDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validFromTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @param validToDate
+	 *            Date in Format of dd.mm.yyyy only of interest if valid is type
+	 *            2
+	 * @param validToTime
+	 *            time in Format of hh:mm only of interest if valid is type 2
+	 * @param language_id
+	 *            the language id of the EMail that is send with the invitation
+	 *            if sendMail is true
+	 * @param sendMail
+	 *            if sendMail is true then the RPC-Call will send the invitation
+	 *            to the email
+	 * @return a HASH value that can be made into a URL with
+	 *         http://$OPENMEETINGS_HOST
+	 *         :$PORT/openmeetings/?invitationHash="+invitationsHash;
+	 * @throws AxisFault
+	 */
+	public String sendInvitationHash(String SID, String username,
+			String message, String email, String subject,
+			Long room_id, Boolean isPasswordProtected,
+			String invitationpass, Integer valid, String validFromDate,
+			String validFromTime, String validToDate, String validToTime,
+			Long language_id, Boolean sendMail) throws AxisFault {
+		return getBean(RoomWebService.class).sendInvitationHash(SID, username, message, email, subject, room_id,
+				isPasswordProtected, invitationpass, valid, validFromDate, validFromTime, validToDate, validToTime, language_id, sendMail);
+	}
+
+	/**
+	 * Create a Invitation hash and optionally send it by mail the From to Date
+	 * is as String as some SOAP libraries do not accept Date Objects in SOAP
+	 * Calls Date is parsed as dd.mm.yyyy, time as hh:mm (don't forget the
+	 * leading zero's)
+	 * 
+	 * @param SID
+	 *            a valid Session Token
+	 * @param username
+	 *            the Username of the User that he will get
+	 * @param message
+	 *            the Message in the Email Body send with the invitation if
+	 *            sendMail is true
+	 * @param email
+	 *            the Email to send the invitation to if sendMail is true
+	 * @param subject
+	 *            the subject of the Email send with the invitation if sendMail
+	 *            is true
+	 * @param room_id
+	 *            the conference room id of the invitation
+	 * @param conferencedomain
+	 *            the domain of the room (keep empty)
+	 * @param isPasswordProtected
+	 *            if the invitation is password protected
+	 * @param invitationpass
+	 *            the password for accessing the conference room via the
+	 *            invitation hash
+	 * @param valid
+	 *            the type of validation for the hash 1: endless, 2: from-to
+	 *            period, 3: one-time
+	 * @param fromDate
+	 *            Date as Date Object only of interest if valid is type 2
+	 * @param toDate
+	 *            Date as Date Object only of interest if valid is type 2
+	 * @param language_id
+	 *            the language id of the EMail that is send with the invitation
+	 *            if sendMail is true
+	 * @param sendMail
+	 *            if sendMail is true then the RPC-Call will send the invitation
+	 *            to the email
+	 * @return a HASH value that can be made into a URL with
+	 *         http://$OPENMEETINGS_HOST
+	 *         :$PORT/openmeetings/?invitationHash="+invitationsHash;
+	 * @throws AxisFault
+	 */
+	public String sendInvitationHashWithDateObject(String SID, String username,
+			String message, String email, String subject,
+			Long room_id, String conferencedomain, Boolean isPasswordProtected,
+			String invitationpass, Integer valid, Date fromDate, Date toDate,
+			Long language_id, Boolean sendMail) throws AxisFault {
+		return getBean(RoomWebService.class).sendInvitationHashWithDateObject(SID, username, message, email, subject, room_id,
+				conferencedomain, isPasswordProtected, invitationpass, valid, fromDate, toDate, language_id, sendMail);
+	}
+
+	public List<RoomReturn> getRoomsWithCurrentUsersByList(String SID,
+			int start, int max, String orderby, boolean asc) throws AxisFault {
+		return getBean(RoomWebService.class).getRoomsWithCurrentUsersByList(SID, start, max, orderby, asc);
+	}
+
+	public List<RoomReturn> getRoomsWithCurrentUsersByListAndType(String SID,
+			int start, int max, String orderby, boolean asc,
+			String externalRoomType) throws AxisFault {
+		return getBean(RoomWebService.class).getRoomsWithCurrentUsersByListAndType(SID, start, max, orderby, asc, externalRoomType);
+	}
+
+	public Long addRoomWithModerationAndExternalTypeAndStartEnd(String SID,
+			String name, Long roomtypes_id, String comment,
+			Long numberOfPartizipants, Boolean ispublic, Boolean appointment,
+			Boolean isDemoRoom, Integer demoTime, Boolean isModeratedRoom,
+			String externalRoomType, String validFromDate,
+			String validFromTime, String validToDate, String validToTime,
+			Boolean isPasswordProtected, String password, Long reminderTypeId,
+			String redirectURL) throws AxisFault {
+		return getBean(RoomWebService.class)
+				.addRoomWithModerationAndExternalTypeAndStartEnd(SID, name,
+						roomtypes_id, comment, numberOfPartizipants, ispublic,
+						appointment, isDemoRoom, demoTime, isModeratedRoom,
+						externalRoomType, validFromDate, validFromTime,
+						validToDate, validToTime, isPasswordProtected,
+						password, reminderTypeId, redirectURL);
+	}
+
+	public Long addMeetingMemberRemindToRoom(String SID, Long room_id,
+			String firstname, String lastname, String email, String phone, Long language_id) throws AxisFault {
+		return getBean(RoomWebService.class).addMeetingMemberRemindToRoom(SID,
+				room_id, firstname, lastname, email, language_id);
+	}
+
+	public Long addExternalMeetingMemberRemindToRoom(String SID, Long room_id,
+			String firstname, String lastname, String email, Long language_id, String jNameTimeZone, String invitorName)
+			throws AxisFault {
+		return getBean(RoomWebService.class).addExternalMeetingMemberRemindToRoom(
+				SID, room_id, firstname, lastname, email, language_id, jNameTimeZone, invitorName);
+	}
+
+	public int closeRoom(String SID, Long room_id, Boolean status)
+			throws AxisFault {
+		return getBean(RoomWebService.class).closeRoom(SID, room_id, status);
+	}
+
+	public int modifyRoomParameter(String SID, Long room_id, String paramName, String paramValue) throws AxisFault {
+		return getBean(RoomWebService.class).modifyRoomParameter(SID, room_id, paramName, paramValue);
+	}
+	
+	public Long addRoomToOrg(String SID, Long rooms_id, Long organisation_id) throws AxisFault {
+		return getBean(RoomWebService.class).addRoomToOrg(SID, rooms_id, organisation_id);
+	}
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/ServerWebService.java b/src/axis/java/org/apache/openmeetings/axis/services/ServerWebService.java
new file mode 100644
index 0000000..5fc960a
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/ServerWebService.java
@@ -0,0 +1,173 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.axis.services;

+

+import org.apache.axis2.AxisFault;

+import org.apache.openmeetings.db.dao.server.ServerDao;

+import org.apache.openmeetings.db.dao.server.SessiondataDao;

+import org.apache.openmeetings.db.dao.user.UserDao;

+import org.apache.openmeetings.db.entity.server.Server;

+import org.apache.openmeetings.util.AuthLevelUtil;

+import org.apache.openmeetings.util.OpenmeetingsVariables;

+import org.red5.logging.Red5LoggerFactory;

+import org.slf4j.Logger;

+import org.springframework.beans.factory.annotation.Autowired;

+

+/**

+ * This class provides method implementations necessary for OM to manage servers

+ * participating in cluster.

+ * 

+ * @author solomax, sebawagner

+ * @webservice ServerService

+ * 

+ */

+public class ServerWebService {

+	private static final Logger log = Red5LoggerFactory.getLogger(

+			ServerWebService.class, OpenmeetingsVariables.webAppRootKey);

+

+	@Autowired

+	private SessiondataDao sessiondataDao;

+	@Autowired

+	private UserDao userDao;

+	@Autowired

+	private ServerDao serversDao;

+

+	/**

+	 * Method to retrieve the list of the servers participating in cluster

+	 * 

+	 * @param SID

+	 *            - session id to identify the user making request

+	 * @param start

+	 *            - server index to start with

+	 * @param max

+	 *            - Maximum server count

+	 * @return The list of servers participating in cluster

+	 */

+	public Server[] getServers(String SID, int start, int max) throws AxisFault {

+		log.debug("getServers enter");

+		Long users_id = sessiondataDao.checkSession(SID);

+

+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {

+			return serversDao.get(start, max).toArray(new Server[0]);

+		} else {

+			log.warn("Insuffisient permissions");

+			return null;

+		}

+	}

+

+	/**

+	 * Method to retrieve the total count of the servers participating in

+	 * cluster

+	 * 

+	 * @param SID

+	 *            - session id to identify the user making request

+	 * @return total count of the servers participating in cluster

+	 */

+	public int getServerCount(String SID) throws AxisFault {

+		log.debug("getServerCount enter");

+		Long users_id = sessiondataDao.checkSession(SID);

+

+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {

+			return (int) serversDao.count();

+		} else {

+			log.warn("Insuffisient permissions");

+			return -1;

+		}

+	}

+

+	/**

+	 * Method to add/update server

+	 * 

+	 * @param SID

+	 *            - session id to identify the user making request

+	 * @param id

+	 *            - the id of the server to save

+	 * @param name

+	 *            - the name of the server to save

+	 * @param address

+	 *            - the address(DNS name or IP) of the server to save

+	 * @param port

+	 *            - the http port of the slave

+	 * @param user

+	 *            - REST user to access the slave

+	 * @param pass

+	 *            - REST pass to access the slave

+	 * @param webapp

+	 *            - webapp name of the OpenMeetings instance

+	 * @param protocol

+	 *            - protocol to access the OpenMeetings instance

+	 * @param active

+	 *            - if the server currently participates in the cluster or not

+	 * @param comment

+	 *            - comment for the server

+	 * @return the id of saved server

+	 */

+	public long saveServer(String SID, long id, String name, String address,

+			int port, String user, String pass, String webapp, String protocol,

+			Boolean active, String comment) throws AxisFault {

+		log.debug("saveServerCount enter");

+		Long users_id = sessiondataDao.checkSession(SID);

+

+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {

+			Server s = serversDao.get(id);

+			if (s == null) {

+				s = new Server();

+			}

+			s.setName(name);

+			s.setAddress(address);

+			s.setPort(port);

+			s.setUser(user);

+			s.setPass(pass);

+			s.setWebapp(webapp);

+			s.setProtocol(protocol);

+			s.setActive(active);

+			s.setComment(comment);

+			return serversDao.update(s, users_id).getId();

+		} else {

+			log.warn("Insuffisient permissions");

+			return -1;

+		}

+	}

+

+	/**

+	 * Method to delete server

+	 * 

+	 * @param SID

+	 *            - session id to identify the user making request

+	 * @param id

+	 *            - the id of the server to delete

+	 * @return true if the server was deleted, false otherwise

+	 */

+	public boolean deleteServer(String SID, long id) throws AxisFault {

+		log.debug("saveServerCount enter");

+		Long users_id = sessiondataDao.checkSession(SID);

+

+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {

+			Server s = serversDao.get(id);

+			if (s != null) {

+				serversDao.delete(s, users_id);

+				return true;

+			}

+		} else {

+			log.warn("Insuffisient permissions");

+		}

+		return false;

+	}

+

+}

diff --git a/src/axis/java/org/apache/openmeetings/axis/services/ServerWebServiceFacade.java b/src/axis/java/org/apache/openmeetings/axis/services/ServerWebServiceFacade.java
new file mode 100644
index 0000000..af5c40b
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/ServerWebServiceFacade.java
@@ -0,0 +1,60 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.axis.services;

+

+import org.apache.axis2.AxisFault;

+import org.apache.openmeetings.db.entity.server.Server;

+

+public class ServerWebServiceFacade extends BaseWebService {

+

+	/**

+	 * Proxy method please see

+	 * {@link ServerWebService#getServers(String, int, int)}

+	 */

+	public Server[] getServers(String SID, int start, int max) throws AxisFault {

+		return getBean(ServerWebService.class).getServers(SID, start, max);

+	}

+

+	/**

+	 * Proxy method please see {@link ServerWebService#getServerCount(String)}

+	 */

+	public int getServerCount(String SID) throws AxisFault {

+		return getBean(ServerWebService.class).getServerCount(SID);

+	}

+

+	/**

+	 * Proxy method please see

+	 * {@link ServerWebService#saveServer(String, long, String, String, int, String, String, String, String, Boolean, String)}

+	 */

+	public long saveServer(String SID, long id, String name, String address,

+			int port, String user, String pass, String webapp, String protocol,

+			Boolean active, String comment) throws AxisFault {

+		return getBean(ServerWebService.class).saveServer(SID, id, name, address, port,

+				user, pass, webapp, protocol, active, comment);

+	}

+

+	/**

+	 * Proxy method please see

+	 * {@link ServerWebService#deleteServer(String, long)}

+	 */

+	public boolean deleteServer(String SID, long id) throws AxisFault {

+		return getBean(ServerWebService.class).deleteServer(SID, id);

+	}

+

+}

diff --git a/src/axis/java/org/apache/openmeetings/axis/services/UserWebService.java b/src/axis/java/org/apache/openmeetings/axis/services/UserWebService.java
new file mode 100644
index 0000000..b2c6357
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/UserWebService.java
@@ -0,0 +1,1124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Date;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.data.user.UserManager;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.basic.ErrorDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.server.SOAPLoginDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.OrganisationUserDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.basic.ErrorResult;
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.dto.user.UserSearchResult;
+import org.apache.openmeetings.db.entity.basic.ErrorType;
+import org.apache.openmeetings.db.entity.basic.ErrorValue;
+import org.apache.openmeetings.db.entity.server.RemoteSessionObject;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.remote.MainService;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.OmException;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * The Service contains methods to login and create hash to directly enter
+ * conference rooms, recordings or the application in general
+ * 
+ * @author sebawagner
+ * @webservice UserService
+ * 
+ */
+public class UserWebService {
+	private static final Logger log = Red5LoggerFactory.getLogger(UserWebService.class, webAppRootKey);
+
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private ConfigurationDao configurationDao;
+	@Autowired
+	private UserManager userManagement;
+	@Autowired
+	private ErrorDao errorDao;
+	@Autowired
+	private OrganisationDao orgDao;
+	@Autowired
+	private OrganisationUserDao orgUserDao;
+	@Autowired
+	private SOAPLoginDao soapLoginDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private MainService mainService;
+	@Autowired
+	private LabelDao labelDao;
+
+	/**
+	 * load this session id before doing anything else Returns an Object of Type
+	 * Sessiondata, this contains a sessionId, use that sessionId in all Methods
+	 * 
+	 * @return - creates new session
+	 */
+	public Sessiondata getSession() {
+		log.debug("SPRING LOADED getSession -- ");
+		return mainService.getsessiondata();
+	}
+
+	/**
+	 * Auth function, use the SID you get by getSession, return positive means
+	 * logged-in, if negative its an ErrorCode, you have to invoke the Method
+	 * getErrorByCode to get the Text-Description of that ErrorCode
+	 * 
+	 * @param SID - The SID from getSession
+	 * @param username - Username from OpenMeetings, the user has to have Admin-rights
+	 * @param userpass - Userpass from OpenMeetings
+	 *            
+	 * @return - id of the logged in user, -1 in case of the error
+	 */
+	public Long loginUser(String SID, String username, String userpass) throws AxisFault {
+		try {
+			log.debug("Login user SID : " + SID);
+			User u = userDao.login(username, userpass);
+			if (u == null) {
+				return -1L;
+			}
+			
+			boolean bool = sessiondataDao.updateUser(SID, u.getUser_id(), false, u.getLanguage_id());
+			if (!bool) {
+				// invalid Session-Object
+				return -35L;
+			}
+			
+			return u.getUser_id();
+		} catch (OmException oe) {
+			if (oe.getCode() != null) {
+				return oe.getCode();
+			}
+		} catch (Exception err) {
+			log.error("[loginUser]", err);
+		}
+		return -1L;
+	}
+
+	/**
+	 * loads an Error-Object. If a Method returns a negative Result, its an
+	 * Error-id, it needs a language_id to specify in which language you want to
+	 * display/read the error-message. English has the Language-ID one, for
+	 * different one see the list of languages
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param errorid
+	 *            the error id (negative Value here!)
+	 * @param langId
+	 *            The id of the language
+	 *            
+	 * @return - error with the code given
+	 */
+	public ErrorResult getErrorByCode(String SID, long errorid, long langId) {
+		try {
+			if (errorid < 0) {
+				ErrorValue eValues = errorDao.get(-1 * errorid);
+				if (eValues != null) {
+					ErrorType eType = errorDao.getErrorType(eValues.getErrortype_id());
+					log.debug("eValues.getFieldvalues_id() = " + eValues.getFieldvalues_id());
+					log.debug("eValues.getErrorType() = " + eType);
+					String eValue = labelDao.getString(eValues.getFieldvalues_id(), langId);
+					String tValue = labelDao.getString(eType.getFieldvalues_id(), langId);
+					if (eValue != null) {
+						return new ErrorResult(errorid, eValue, tValue);
+					}
+				}
+			} else {
+				return new ErrorResult(errorid, "Error ... please check your input", "Error");
+			}
+		} catch (Exception err) {
+			log.error("[getErrorByCode] ", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Adds a new User like through the Frontend, but also does activates the
+	 * Account To do SSO see the methods to create a hash and use those ones!
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param username
+	 *            any username
+	 * @param userpass
+	 *            any userpass
+	 * @param lastname
+	 *            any lastname
+	 * @param firstname
+	 *            any firstname
+	 * @param email
+	 *            any email
+	 * @param additionalname
+	 *            any additionalname
+	 * @param street
+	 *            any street
+	 * @param zip
+	 *            any zip
+	 * @param fax
+	 *            any fax
+	 * @param states_id
+	 *            a valid states_id
+	 * @param town
+	 *            any town
+	 * @param language_id
+	 *            the language_id
+	 *            
+	 * @return - id of the user added or error code
+	 * @throws AxisFault
+	 */
+	public Long addNewUser(String SID, String username, String userpass,
+			String lastname, String firstname, String email,
+			String additionalname, String street, String zip, String fax,
+			long states_id, String town, long language_id)
+			throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				String jName_timeZone = configurationDao.getConfValue("default.timezone", String.class, "");
+
+				Long user_id = userManagement.registerUser(username, userpass,
+						lastname, firstname, email, new Date(), street,
+						additionalname, fax, zip, states_id, town, language_id,
+						"", false, true, // generate SIP Data if the config is enabled
+						jName_timeZone);
+
+				if (user_id == null || user_id < 0) {
+					return user_id;
+				}
+
+				User user = userDao.get(user_id);
+
+				// activate the User
+				user.getRights().add(Right.Dashboard);
+				user.getRights().add(Right.Login);
+				user.getRights().add(Right.Room);
+				user.setUpdatetime(new Date());
+
+				userDao.update(user, users_id);
+
+				return user_id;
+
+			} else {
+				return new Long(-26);
+			}
+		} catch (Exception err) {
+			log.error("addNewUser", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Adds a new User like through the Frontend, but also does activates the
+	 * Account
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param username
+	 *            any username
+	 * @param userpass
+	 *            any userpass
+	 * @param lastname
+	 *            any lastname
+	 * @param firstname
+	 *            any firstname
+	 * @param email
+	 *            any email
+	 * @param additionalname
+	 *            any additionalname
+	 * @param street
+	 *            any street
+	 * @param zip
+	 *            any zip
+	 * @param fax
+	 *            any fax
+	 * @param states_id
+	 *            a valid states_id
+	 * @param town
+	 *            any town
+	 * @param language_id
+	 *            the language_id
+	 * @param jNameTimeZone
+	 *            the name of the timezone for the user
+	 *            
+	 * @return - id of the user added or the error code
+	 * @throws AxisFault
+	 */
+	public Long addNewUserWithTimeZone(String SID, String username,
+			String userpass, String lastname, String firstname, String email,
+			String additionalname, String street, String zip, String fax,
+			long states_id, String town, long language_id, String jNameTimeZone) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				Long user_id = userManagement.registerUser(username, userpass,
+						lastname, firstname, email, new Date(), street,
+						additionalname, fax, zip, states_id, town, language_id,
+						"", false, true, // generate
+											// SIP
+											// Data
+											// if
+											// the
+											// config
+											// is
+											// enabled
+						jNameTimeZone); 
+
+				if (user_id == null || user_id < 0) {
+					return user_id;
+				}
+
+				User user = userDao.get(user_id);
+
+				// activate the User
+				user.getRights().add(Right.Login);
+				user.setUpdatetime(new Date());
+
+				userDao.update(user, users_id);
+
+				return user_id;
+
+			} else {
+				return new Long(-26);
+			}
+		} catch (Exception err) {
+			log.error("addNewUserWithTimeZone", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Adds a new User like through the Frontend, but also does activates the
+	 * Account, sends NO email (no matter what you configured) and sets the
+	 * users external user id and type
+	 * 
+	 * Use the methods to create a hash for SSO, creating users is not required
+	 * for SSO
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param username
+	 *            any username
+	 * @param userpass
+	 *            any userpass
+	 * @param lastname
+	 *            any lastname
+	 * @param firstname
+	 *            any firstname
+	 * @param email
+	 *            any email
+	 * @param additionalname
+	 *            any additionalname
+	 * @param street
+	 *            any street
+	 * @param zip
+	 *            any zip
+	 * @param fax
+	 *            any fax
+	 * @param states_id
+	 *            a valid states_id
+	 * @param town
+	 *            any town
+	 * @param language_id
+	 *            the language_id
+	 * @param jNameTimeZone
+	 *            the name of the timezone for the user
+	 * @param externalUserId
+	 *            externalUserId
+	 * @param externalUserType
+	 *            externalUserType
+	 *            
+	 * @return - id of user added or error code
+	 * @throws AxisFault
+	 */
+	public Long addNewUserWithExternalType(String SID, String username,
+			String userpass, String lastname, String firstname, String email,
+			String additionalname, String street, String zip, String fax,
+			long states_id, String town, long language_id,
+			String jNameTimeZone, String externalUserId, String externalUserType)
+			throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+
+				User testUser = userDao.getExternalUser(externalUserId, externalUserType);
+
+				if (testUser != null) {
+					throw new Exception("User does already exist!");
+				}
+
+				// This will send no email to the users
+				Long user_id = userManagement.registerUserNoEmail(username,
+						userpass, lastname, firstname, email, new Date(),
+						street, additionalname, fax, zip, states_id, town,
+						language_id, "", false, true, // generate SIP Data if the config is enabled
+						jNameTimeZone);
+
+				if (user_id == null || user_id < 0) {
+					return user_id;
+				}
+
+				User user = userDao.get(user_id);
+
+				// activate the User
+				user.getRights().add(Right.Login);
+				user.setUpdatetime(new Date());
+				user.setExternalUserId(externalUserId);
+				user.setExternalUserType(externalUserType);
+
+				userDao.update(user, users_id);
+
+				return user_id;
+
+			} else {
+				return new Long(-26);
+			}
+
+		} catch (Exception err) {
+			log.error("addNewUserWithExternalType", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * 
+	 * Delete a certain user by its id
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param userId
+	 *            the openmeetings user id
+	 *            
+	 * @return - id of the user deleted, error code otherwise
+	 * @throws AxisFault
+	 */
+	public Long deleteUserById(String SID, Long userId) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+
+				// Setting user deleted
+				userDao.deleteUserID(userId);
+
+				return userId;
+
+			} else {
+				return new Long(-26);
+			}
+
+		} catch (Exception err) {
+			log.error("deleteUserById", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * 
+	 * Delete a certain user by its external user id
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param externalUserId
+	 *            externalUserId
+	 * @param externalUserType
+	 *            externalUserId
+	 *            
+	 * @return - id of user deleted, or error code
+	 * @throws AxisFault
+	 */
+	public Long deleteUserByExternalUserIdAndType(String SID,
+			String externalUserId, String externalUserType) throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+
+				User userExternal = userDao.getExternalUser(externalUserId, externalUserType);
+
+				Long userId = userExternal.getUser_id();
+
+				// Setting user deleted
+				userDao.deleteUserID(userId);
+
+				return userId;
+
+			} else {
+				return new Long(-26);
+			}
+
+		} catch (Exception err) {
+			log.error("deleteUserByExternalUserIdAndType", err);
+			throw new AxisFault(err.getMessage());
+		}
+	}
+
+	/**
+	 * Description: sets the SessionObject for a certain SID, after setting this
+	 * Session-Object you can use the SID + a RoomId to enter any Room. ...
+	 * Session-Hashs are deleted 15 minutes after the creation if not used.
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param username
+	 *            any username
+	 * @param firstname
+	 *            any firstname
+	 * @param lastname
+	 *            any lastname
+	 * @param profilePictureUrl
+	 *            any profilePictureUrl
+	 * @param email
+	 *            any email
+	 * @param externalUserId
+	 *            if you have any external user Id you may set it here
+	 * @param externalUserType
+	 *            you can specify your system-name here, for example "moodle"
+	 * @param room_id
+	 *            the room id the user should be logged in
+	 * @param becomeModeratorAsInt
+	 *            0 means no Moderator, 1 means Moderator
+	 * @param showAudioVideoTestAsInt
+	 *            0 means don't show Audio/Video Test, 1 means show Audio/Video
+	 *            Test Application before the user is logged into the room
+	 *            
+	 * @return - secure hash or error code
+	 * @throws AxisFault
+	 */
+	public String setUserObjectAndGenerateRoomHash(String SID, String username,
+			String firstname, String lastname, String profilePictureUrl,
+			String email, String externalUserId, String externalUserType,
+			Long room_id, int becomeModeratorAsInt, int showAudioVideoTestAsInt)
+			throws AxisFault {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				RemoteSessionObject remoteSessionObject = new RemoteSessionObject(
+						username, firstname, lastname, profilePictureUrl,
+						email, externalUserId, externalUserType);
+
+				log.debug(remoteSessionObject.toString());
+
+				String xmlString = remoteSessionObject.toXml();
+
+				log.debug("xmlString " + xmlString);
+
+				sessiondataDao.updateUserRemoteSession(SID, xmlString);
+
+				boolean becomeModerator = false;
+				if (becomeModeratorAsInt != 0) {
+					becomeModerator = true;
+				}
+
+				boolean showAudioVideoTest = false;
+				if (showAudioVideoTestAsInt != 0) {
+					showAudioVideoTest = true;
+				}
+
+				String hash = soapLoginDao.addSOAPLogin(SID, room_id,
+						becomeModerator, showAudioVideoTest, false, // allowSameURLMultipleTimes
+						null, // recording_id
+						false, // showNickNameDialogAsInt
+						"room", // LandingZone,
+						true // allowRecording
+						);
+
+				if (hash != null) {
+					return hash;
+				}
+
+			} else {
+				return "" + new Long(-26);
+			}
+		} catch (Exception err) {
+			log.error("setUserObjectWithAndGenerateRoomHash", err);
+			throw new AxisFault(err.getMessage());
+		}
+		return "" + new Long(-1);
+	}
+
+	/**
+	 * 
+	 * Description: sets the SessionObject for a certain SID, after setting this
+	 * Session-Object you can use the SID + a RoomId to enter any Room.
+	 * 
+	 * ++ the user can press f5 to reload the page / use the link several times,
+	 * the SOAP Gateway does remember the IP of the user and the will only the
+	 * first user that enters the room allow to re-enter. ... Session-Hashs are
+	 * deleted 15 minutes after the creation if not used.
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param username
+	 *            any username
+	 * @param firstname
+	 *            any firstname
+	 * @param lastname
+	 *            any lastname
+	 * @param profilePictureUrl
+	 *            any profilePictureUrl
+	 * @param email
+	 *            any email any email
+	 * @param externalUserId
+	 *            if you have any external user Id you may set it here
+	 * @param externalUserType
+	 *            you can specify your system-name here, for example "moodle"
+	 * @param room_id
+	 *            the room id the user should be logged in
+	 * @param becomeModeratorAsInt
+	 *            0 means no Moderator, 1 means Moderator
+	 * @param showAudioVideoTestAsInt
+	 *            0 means don't show Audio/Video Test, 1 means show Audio/Video
+	 *            Test Application before the user is logged into the room
+	 *            
+	 * @return - secure hash or error code
+	 */
+	public String setUserObjectAndGenerateRoomHashByURL(String SID,
+			String username, String firstname, String lastname,
+			String profilePictureUrl, String email, String externalUserId,
+			String externalUserType, Long room_id, int becomeModeratorAsInt,
+			int showAudioVideoTestAsInt) throws AxisFault {
+
+		log.debug("UserService.setUserObjectAndGenerateRoomHashByURL");
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				RemoteSessionObject remoteSessionObject = new RemoteSessionObject(
+						username, firstname, lastname, profilePictureUrl,
+						email, externalUserId, externalUserType);
+
+				log.debug(remoteSessionObject.toString());
+
+				String xmlString = remoteSessionObject.toXml();
+
+				log.debug("xmlString " + xmlString);
+
+				sessiondataDao.updateUserRemoteSession(SID, xmlString);
+
+				boolean becomeModerator = false;
+				if (becomeModeratorAsInt != 0) {
+					becomeModerator = true;
+				}
+
+				boolean showAudioVideoTest = false;
+				if (showAudioVideoTestAsInt != 0) {
+					showAudioVideoTest = true;
+				}
+
+				String hash = soapLoginDao.addSOAPLogin(SID, room_id,
+						becomeModerator, showAudioVideoTest, true, // allowSameURLMultipleTimes
+						null, // recording_id
+						false, // showNickNameDialogAsInt
+						"room", // LandingZone,
+						true // allowRecording
+						);
+
+				if (hash != null) {
+					return hash;
+				}
+
+			} else {
+				return "" + new Long(-26);
+			}
+		} catch (Exception err) {
+			log.error("setUserObjectAndGenerateRoomHashByURL", err);
+			throw new AxisFault(err.getMessage());
+		}
+		return "" + new Long(-1);
+	}
+
+	/**
+	 * 
+	 * Description: sets the SessionObject for a certain SID, after setting this
+	 * Session-Object you can use the SID + a RoomId to enter any Room.
+	 * 
+	 * ++ the user can press f5 to reload the page / use the link several times,
+	 * the SOAP Gateway does remember the IP of the user and the will only the
+	 * first user that enters the room allow to re-enter. ... Session-Hashs are
+	 * deleted 15 minutes after the creation if not used.
+	 * 
+	 * ++ sets the flag if the user can do recording in the conference room
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param username
+	 *            any username
+	 * @param firstname
+	 *            any firstname
+	 * @param lastname
+	 *            any lastname
+	 * @param profilePictureUrl
+	 *            any profilePictureUrl
+	 * @param email
+	 *            any email
+	 * @param externalUserId
+	 *            if you have any external user Id you may set it here
+	 * @param externalUserType
+	 *            you can specify your system-name here, for example "moodle"
+	 * @param room_id
+	 *            the room id the user should be logged in
+	 * @param becomeModeratorAsInt
+	 *            0 means no Moderator, 1 means Moderator
+	 * @param showAudioVideoTestAsInt
+	 *            0 means don't show Audio/Video Test, 1 means show Audio/Video
+	 *            Test Application before the user is logged into the room
+	 * @param allowRecording
+	 *            0 means don't allow Recording, 1 means allow Recording
+	 *            
+	 * @return - secure hash or error code
+	 */
+	public String setUserObjectAndGenerateRoomHashByURLAndRecFlag(String SID,
+			String username, String firstname, String lastname,
+			String profilePictureUrl, String email, String externalUserId,
+			String externalUserType, Long room_id, int becomeModeratorAsInt,
+			int showAudioVideoTestAsInt, int allowRecording) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				RemoteSessionObject remoteSessionObject = new RemoteSessionObject(
+						username, firstname, lastname, profilePictureUrl,
+						email, externalUserId, externalUserType);
+
+				log.debug(remoteSessionObject.toString());
+
+				String xmlString = remoteSessionObject.toXml();
+
+				log.debug("xmlString " + xmlString);
+
+				sessiondataDao.updateUserRemoteSession(SID, xmlString);
+
+				boolean becomeModerator = false;
+				if (becomeModeratorAsInt != 0) {
+					becomeModerator = true;
+				}
+
+				boolean showAudioVideoTest = false;
+				if (showAudioVideoTestAsInt != 0) {
+					showAudioVideoTest = true;
+				}
+
+				boolean allowRecordingBool = false;
+				if (allowRecording != 0) {
+					allowRecordingBool = true;
+				}
+
+				String hash = soapLoginDao.addSOAPLogin(SID, room_id,
+						becomeModerator, showAudioVideoTest, true, // allowSameURLMultipleTimes
+						null, // recording_id
+						false, // showNickNameDialogAsInt
+						"room", // LandingZone,
+						allowRecordingBool // allowRecording
+						);
+
+				if (hash != null) {
+					return hash;
+				}
+
+			} else {
+				return "" + new Long(-26);
+			}
+		} catch (Exception err) {
+			log.error("setUserObjectWithAndGenerateRoomHash", err);
+		}
+		return "" + new Long(-1);
+	}
+
+	/**
+	 * 
+	 * Description: sets the SessionObject for a certain SID, after setting this
+	 * Session-Object you can use the SID and directly login into the dashboard
+	 * 
+	 * ++ the user can press f5 to reload the page / use the link several times,
+	 * the SOAP Gateway does remember the IP of the user and the will only the
+	 * first user that enters the room allow to re-enter. ... Session-Hashs are
+	 * deleted 15 minutes after the creation if not used.
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param username
+	 *            any username
+	 * @param firstname
+	 *            any firstname
+	 * @param lastname
+	 *            any lastname
+	 * @param profilePictureUrl
+	 *            any absolute profilePictureUrl
+	 * @param email
+	 *            any email
+	 * @param externalUserId
+	 *            if you have any external user Id you may set it here
+	 * @param externalUserType
+	 *            you can specify your system-name here, for example "moodle"
+	 *            
+	 * @return - secure hash or error code
+	 */
+	public String setUserObjectMainLandingZone(String SID, String username,
+			String firstname, String lastname, String profilePictureUrl,
+			String email, String externalUserId, String externalUserType) {
+		log.debug("UserService.setUserObjectMainLandingZone");
+
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				RemoteSessionObject remoteSessionObject = new RemoteSessionObject(
+						username, firstname, lastname, profilePictureUrl,
+						email, externalUserId, externalUserType);
+
+				log.debug(remoteSessionObject.toString());
+
+				String xmlString = remoteSessionObject.toXml();
+
+				log.debug("xmlString " + xmlString);
+
+				sessiondataDao.updateUserRemoteSession(SID, xmlString);
+
+				String hash = soapLoginDao.addSOAPLogin(SID, null, false, true,
+						true, // allowSameURLMultipleTimes
+						null, // recording_id
+						false, // showNickNameDialogAsInt
+						"dashboard", // LandingZone,
+						true // allowRecording
+						);
+
+				if (hash != null) {
+					return hash;
+				}
+
+			} else {
+				return "" + -26L;
+			}
+		} catch (Exception err) {
+			log.error("setUserObjectWithAndGenerateRoomHash", err);
+		}
+		return "" + -1L;
+	}
+
+	/**
+	 * 
+	 * Description: sets the SessionObject for a certain SID, after setting this
+	 * Session-Object you can use the SID + a RoomId to enter any Room.
+	 * 
+	 * ++ the user can press f5 to reload the page / use the link several times,
+	 * the SOAP Gateway does remember the IP of the user and the will only the
+	 * first user that enters the room allow to re-enter. ... Session-Hashs are
+	 * deleted 15 minutes after the creation if not used.
+	 * 
+	 * ++ Additionally you can set a param showNickNameDialogAsInt, the effect
+	 * if that param is 1 is, that the user gets a popup where he can enter his
+	 * nickname right before he enters the conference room. All nicknames and
+	 * emails users enter are logged in the conferencelog table.
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param username
+	 *            any username
+	 * @param firstname
+	 *            any firstname
+	 * @param lastname
+	 *            any lastname
+	 * @param profilePictureUrl
+	 *            any profilePictureUrl
+	 * @param email
+	 *            any email
+	 * @param externalUserId
+	 *            if you have any external user Id you may set it here
+	 * @param externalUserType
+	 *            you can specify your system-name here, for example "moodle"
+	 * @param room_id
+	 *            the room id the user should be logged in
+	 * @param becomeModeratorAsInt
+	 *            0 means no Moderator, 1 means Moderator
+	 * @param showAudioVideoTestAsInt
+	 *            0 means don't show Audio/Video Test, 1 means show Audio/Video
+	 *            Test Application before the user is logged into the room
+	 * @param showNickNameDialogAsInt
+	 *            0 means do not show the popup to enter a nichname, 1 means
+	 *            that there is a popup to enter the nickname for the conference
+	 *            
+	 * @return - secure hash, or error code 
+	 */
+	public String setUserAndNickName(String SID, String username,
+			String firstname, String lastname, String profilePictureUrl,
+			String email, String externalUserId, String externalUserType,
+			Long room_id, int becomeModeratorAsInt,
+			int showAudioVideoTestAsInt, int showNickNameDialogAsInt) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				RemoteSessionObject remoteSessionObject = new RemoteSessionObject(
+						username, firstname, lastname, profilePictureUrl,
+						email, externalUserId, externalUserType);
+
+				log.debug(remoteSessionObject.toString());
+				log.debug("showNickNameDialogAsInt" + showNickNameDialogAsInt);
+
+				String xmlString = remoteSessionObject.toXml();
+
+				log.debug("xmlString " + xmlString);
+
+				sessiondataDao.updateUserRemoteSession(SID, xmlString);
+
+				boolean becomeModerator = false;
+				if (becomeModeratorAsInt != 0) {
+					becomeModerator = true;
+				}
+
+				boolean showAudioVideoTest = false;
+				if (showAudioVideoTestAsInt != 0) {
+					showAudioVideoTest = true;
+				}
+
+				boolean showNickNameDialog = false;
+				if (showNickNameDialogAsInt != 0) {
+					showNickNameDialog = true;
+				}
+
+				String hash = soapLoginDao.addSOAPLogin(SID, room_id,
+						becomeModerator, showAudioVideoTest, true, null,
+						showNickNameDialog, "room", // LandingZone,
+						true // allowRecording
+						);
+
+				if (hash != null) {
+					return hash;
+				}
+
+			} else {
+				return "" + new Long(-26);
+			}
+		} catch (Exception err) {
+			log.error("setUserObjectWithAndGenerateRoomHash", err);
+		}
+		return "" + new Long(-1);
+	}
+
+	/**
+	 * Use this method to access a Recording instead of Room
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param username
+	 *            any username
+	 * @param firstname
+	 *            any firstname
+	 * @param lastname
+	 *            any lastname
+	 * @param externalUserId
+	 *            if you have any external user Id you may set it here
+	 * @param externalUserType
+	 *            you can specify your system-name here, for example "moodle"
+	 * @param recording_id
+	 *            the id of the recording, get a List of all Recordings with
+	 *            RoomService::getFlvRecordingByExternalRoomType
+	 *            
+	 * @return - hash of the recording, or error id
+	 */
+	public String setUserObjectAndGenerateRecordingHashByURL(String SID,
+			String username, String firstname, String lastname,
+			String externalUserId, String externalUserType, Long recording_id) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				RemoteSessionObject remoteSessionObject = new RemoteSessionObject(
+						username, firstname, "", "", "", externalUserId,
+						externalUserType);
+
+				log.debug(remoteSessionObject.toString());
+
+				String xmlString = remoteSessionObject.toXml();
+
+				log.debug("xmlString " + xmlString);
+
+				sessiondataDao.updateUserRemoteSession(SID, xmlString);
+
+				String hash = soapLoginDao.addSOAPLogin(SID, null, false,
+						false, true, // allowSameURLMultipleTimes
+						recording_id, // recording_id
+						false, // showNickNameDialogAsInt
+						"room", // LandingZone,
+						true // allowRecording
+						);
+
+				if (hash != null) {
+					return hash;
+				}
+
+			} else {
+				return "" + new Long(-26);
+			}
+		} catch (Exception err) {
+			log.error("setUserObjectWithAndGenerateRoomHash", err);
+		}
+		return "" + new Long(-1);
+	}
+
+	/**
+	 * 
+	 * Add a user to a certain organization
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param user_id
+	 *            the user id
+	 * @param organisation_id
+	 *            the organization id
+	 * @param insertedby
+	 *            user id of the operating user
+	 * @return - id of the user added, or error id in case of the error
+	 */
+	public Long addUserToOrganisation(String SID, Long user_id,
+			Long organisation_id, Long insertedby) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				if (!orgUserDao.isUserInOrganization(organisation_id, user_id)) {
+					User u = userDao.get(user_id);
+					u.getOrganisation_users().add(new Organisation_Users(orgDao.get(organisation_id)));
+					userDao.update(u, users_id);
+				}
+				return user_id;
+			} else {
+				return new Long(-26);
+			}
+		} catch (Exception err) {
+			log.error("addUserToOrganisation", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * Search users and return them
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param organisation_id
+	 *            the organization id
+	 * @param start
+	 *            first record
+	 * @param max
+	 *            max records
+	 * @param orderby
+	 *            orderby clause
+	 * @param asc
+	 *            asc or desc
+	 * @return - users found
+	 */
+	public UserSearchResult getUsersByOrganisation(String SID,
+			long organisation_id, int start, int max, String orderby,
+			boolean asc) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			SearchResult<User> result = new SearchResult<User>();
+			result.setObjectName(User.class.getName());
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				result.setRecords(orgUserDao.count(organisation_id));
+				result.setResult(new ArrayList<User>());
+				for (Organisation_Users ou : orgUserDao.get(organisation_id, null, start, max, orderby + " " + (asc ? "ASC" : "DESC"))) {
+					result.getResult().add(ou.getUser());
+				}
+			} else {
+				log.error("Need Administration Account");
+				result.setErrorId(-26L);
+			}
+			return new UserSearchResult(result);
+		} catch (Exception err) {
+			log.error("getUsersByOrganisation", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Kick a user by its public SID
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param publicSID
+	 *            the publicSID (you can get it from the call to get users in a
+	 *            room)
+	 * @return - <code>true</code> if user was kicked
+	 */
+	public Boolean kickUserByPublicSID(String SID, String publicSID) {
+		try {
+			Boolean success = false;
+
+			success = userManagement.kickUserByPublicSID(SID, publicSID);
+
+			if (success == null)
+				success = false;
+
+			return success;
+		} catch (Exception err) {
+			log.error("[kickUser]", err);
+		}
+		return null;
+	}
+	
+	/**
+	 * add a new organisation
+	 * 
+	 * @param SID
+	 *            The SID from getSession
+	 * @param name
+	 *            the name of the org
+	 * @return the new id of the org or -1 in case an error happened
+	 * @throws AxisFault
+	 */
+	public Long addOrganisation(String SID, String name) throws AxisFault {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+			Organisation o = new Organisation();
+			o.setName(name);
+			return orgDao.update(o, users_id).getOrganisation_id();
+		}
+		log.error("Could not create organization");
+		return -1L;
+	}
+
+}
diff --git a/src/axis/java/org/apache/openmeetings/axis/services/UserWebServiceFacade.java b/src/axis/java/org/apache/openmeetings/axis/services/UserWebServiceFacade.java
new file mode 100644
index 0000000..723c039
--- /dev/null
+++ b/src/axis/java/org/apache/openmeetings/axis/services/UserWebServiceFacade.java
@@ -0,0 +1,239 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.axis.services;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.db.dto.basic.ErrorResult;
+import org.apache.openmeetings.db.dto.user.UserSearchResult;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+
+public class UserWebServiceFacade extends BaseWebService {
+
+	/**
+	 * load this session id before doing anything else
+	 * 
+	 * @return Sessiondata-Object
+	 */
+	public Sessiondata getSession() throws AxisFault {
+		return getBean(UserWebService.class).getSession();
+	}
+
+	/**
+	 * auth function, use the SID you get by getSession
+	 * 
+	 * @param SID
+	 * @param Username
+	 * @param Userpass
+	 * @return positive means Loggedin, if negativ its an ErrorCode, you have to
+	 *         invoke the Method getErrorByCode to get the Text-Description of
+	 *         that ErrorCode
+	 */
+	public Long loginUser(String SID, String username, String userpass)
+			throws AxisFault {
+		return getBean(UserWebService.class).loginUser(SID, username, userpass);
+	}
+
+	/**
+	 * Gets the Error-Object
+	 * 
+	 * @param SID
+	 * @param errorid
+	 * @param language_id
+	 * @return
+	 * @throws AxisFault 
+	 */
+	public ErrorResult getErrorByCode(String SID, Long errorid, Long language_id) throws AxisFault {
+		return getBean(UserWebService.class).getErrorByCode(SID, errorid, language_id);
+	}
+
+	public Long addNewUser(String SID, String username, String userpass,
+			String lastname, String firstname, String email,
+			String additionalname, String street, String zip, String fax,
+			long states_id, String town, long language_id)
+			throws AxisFault {
+		return getBean(UserWebService.class).addNewUser(SID, username, userpass,
+				lastname, firstname, email, additionalname, street, zip, fax,
+				states_id, town, language_id);
+	}
+
+	public Long addNewUserWithTimeZone(String SID, String username,
+			String userpass, String lastname, String firstname, String email,
+			String additionalname, String street, String zip, String fax,
+			long states_id, String town, long language_id,
+			String jNameTimeZone) throws AxisFault {
+		return getBean(UserWebService.class).addNewUserWithTimeZone(SID, username,
+				userpass, lastname, firstname, email, additionalname, street,
+				zip, fax, states_id, town, language_id, jNameTimeZone);
+
+	}
+
+	/**
+	 * 
+	 * Adds a user with an externalUserId and type, but checks if the user/type
+	 * does already exist
+	 * 
+	 * @param SID
+	 * @param username
+	 * @param userpass
+	 * @param lastname
+	 * @param firstname
+	 * @param email
+	 * @param additionalname
+	 * @param street
+	 * @param zip
+	 * @param fax
+	 * @param states_id
+	 * @param town
+	 * @param language_id
+	 * @param jNameTimeZone
+	 * @param externalUserId
+	 * @param externalUserType
+	 * @return
+	 * @throws AxisFault
+	 */
+	public Long addNewUserWithExternalType(String SID, String username,
+			String userpass, String lastname, String firstname, String email,
+			String additionalname, String street, String zip, String fax,
+			long states_id, String town, long language_id,
+			String jNameTimeZone, String externalUserId, String externalUserType)
+			throws AxisFault {
+		return getBean(UserWebService.class).addNewUserWithExternalType(SID, username,
+				userpass, lastname, firstname, email, additionalname, street,
+				zip, fax, states_id, town, language_id, jNameTimeZone,
+				externalUserId, externalUserType);
+
+	}
+
+	/**
+	 * 
+	 * delete a user by its id
+	 * 
+	 * @param SID
+	 * @param userId
+	 * @return
+	 * @throws AxisFault
+	 */
+	public Long deleteUserById(String SID, Long userId) throws AxisFault {
+		return getBean(UserWebService.class).deleteUserById(SID, userId);
+	}
+
+	/**
+	 * 
+	 * delete a user by its external user id and type
+	 * 
+	 * @param SID
+	 * @param externalUserId
+	 * @param externalUserType
+	 * @return
+	 * @throws AxisFault
+	 */
+	public Long deleteUserByExternalUserIdAndType(String SID,
+			String externalUserId, String externalUserType) throws AxisFault {
+		return getBean(UserWebService.class).deleteUserByExternalUserIdAndType(SID,
+				externalUserId, externalUserType);
+	}
+
+	public String setUserObjectAndGenerateRoomHash(String SID, String username,
+			String firstname, String lastname, String profilePictureUrl,
+			String email, String externalUserId, String externalUserType,
+			Long room_id, int becomeModeratorAsInt, int showAudioVideoTestAsInt)
+			throws AxisFault {
+		return getBean(UserWebService.class).setUserObjectAndGenerateRoomHash(SID,
+				username, firstname, lastname, profilePictureUrl, email,
+				externalUserId, externalUserType, room_id,
+				becomeModeratorAsInt, showAudioVideoTestAsInt);
+	}
+
+	public String setUserObjectAndGenerateRoomHashByURL(String SID,
+			String username, String firstname, String lastname,
+			String profilePictureUrl, String email, String externalUserId,
+			String externalUserType, Long room_id, int becomeModeratorAsInt,
+			int showAudioVideoTestAsInt) throws AxisFault {
+		return getBean(UserWebService.class).setUserObjectAndGenerateRoomHashByURL(SID,
+				username, firstname, lastname, profilePictureUrl, email,
+				externalUserId, externalUserType, room_id,
+				becomeModeratorAsInt, showAudioVideoTestAsInt);
+	}
+
+	public String setUserObjectAndGenerateRoomHashByURLAndRecFlag(String SID,
+			String username, String firstname, String lastname,
+			String profilePictureUrl, String email, String externalUserId,
+			String externalUserType, Long room_id, int becomeModeratorAsInt,
+			int showAudioVideoTestAsInt, int allowRecording) throws AxisFault {
+		return getBean(UserWebService.class)
+				.setUserObjectAndGenerateRoomHashByURLAndRecFlag(SID, username,
+						firstname, lastname, profilePictureUrl, email,
+						externalUserId, externalUserType, room_id,
+						becomeModeratorAsInt, showAudioVideoTestAsInt,
+						allowRecording);
+	}
+
+	public String setUserObjectMainLandingZone(String SID, String username,
+			String firstname, String lastname, String profilePictureUrl,
+			String email, String externalUserId, String externalUserType)
+			throws AxisFault {
+		return getBean(UserWebService.class).setUserObjectMainLandingZone(SID,
+				username, firstname, lastname, profilePictureUrl, email,
+				externalUserId, externalUserType);
+	}
+
+	public String setUserAndNickName(String SID, String username,
+			String firstname, String lastname, String profilePictureUrl,
+			String email, String externalUserId, String externalUserType,
+			Long room_id, int becomeModeratorAsInt,
+			int showAudioVideoTestAsInt, int showNickNameDialogAsInt)
+			throws AxisFault {
+		return getBean(UserWebService.class).setUserAndNickName(SID, username,
+				firstname, lastname, profilePictureUrl, email, externalUserId,
+				externalUserType, room_id, becomeModeratorAsInt,
+				showAudioVideoTestAsInt, showNickNameDialogAsInt);
+	}
+
+	public String setUserObjectAndGenerateRecordingHashByURL(String SID,
+			String username, String firstname, String lastname,
+			String externalUserId, String externalUserType, Long recording_id)
+			throws AxisFault {
+		return getBean(UserWebService.class)
+				.setUserObjectAndGenerateRecordingHashByURL(SID, username,
+						firstname, lastname, externalUserId, externalUserType,
+						recording_id);
+	}
+
+	public Long addUserToOrganisation(String SID, Long user_id,
+			Long organisation_id, Long insertedby)
+			throws AxisFault {
+		return getBean(UserWebService.class).addUserToOrganisation(SID, user_id,
+				organisation_id, insertedby);
+	}
+
+	public UserSearchResult getUsersByOrganisation(String SID, long organisation_id, int start, int max, String orderby,
+			boolean asc) throws AxisFault {
+		return getBean(UserWebService.class).getUsersByOrganisation(SID, organisation_id, start, max, orderby, asc);
+	}
+
+	public Boolean kickUserByPublicSID(String SID, String publicSID)
+			throws AxisFault {
+		return getBean(UserWebService.class).kickUserByPublicSID(SID, publicSID);
+	}
+	
+	public Long addOrganisation(String SID, String name) throws AxisFault {
+		return getBean(UserWebService.class).addOrganisation(SID, name);
+	}
+
+}
diff --git a/src/axis/resources/services.xml b/src/axis/resources/services.xml
new file mode 100644
index 0000000..9aba71f
--- /dev/null
+++ b/src/axis/resources/services.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<serviceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="services.xsd">
+  <service name="UserService">
+	<description>User Service</description>
+	<messageReceivers>
+        <messageReceiver 
+            mep="http://www.w3.org/ns/wsdl/in-only"
+			class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
+        <messageReceiver
+            mep="http://www.w3.org/ns/wsdl/in-out"
+			class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
+    </messageReceivers>
+    <parameter name="ServiceClass" locked="xsd:false">org.apache.openmeetings.axis.services.UserWebServiceFacade</parameter>
+  </service>
+  <service name="RoomService">
+	<description>Room Service</description>
+	<messageReceivers>
+        <messageReceiver 
+            mep="http://www.w3.org/ns/wsdl/in-only"
+			class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
+        <messageReceiver
+            mep="http://www.w3.org/ns/wsdl/in-out"
+			class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
+    </messageReceivers>
+    <parameter name="ServiceClass" locked="xsd:false">org.apache.openmeetings.axis.services.RoomWebServiceFacade</parameter>
+  </service>
+  <service name="FileService">
+	<description>File Service</description>
+	<messageReceivers>
+        <messageReceiver 
+            mep="http://www.w3.org/ns/wsdl/in-only"
+			class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
+        <messageReceiver
+            mep="http://www.w3.org/ns/wsdl/in-out"
+			class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
+    </messageReceivers>
+    <parameter name="ServiceClass" locked="xsd:false">org.apache.openmeetings.axis.services.FileWebServiceFacade</parameter>
+  </service>
+  <service name="CalendarService">
+	<description>Calendar Service</description>
+	<messageReceivers>
+        <messageReceiver 
+            mep="http://www.w3.org/ns/wsdl/in-only"
+			class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
+        <messageReceiver
+            mep="http://www.w3.org/ns/wsdl/in-out"
+			class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
+    </messageReceivers>
+    <parameter name="ServiceClass" locked="xsd:false">org.apache.openmeetings.axis.services.CalendarWebServiceFacade</parameter>
+  </service>
+  <service name="JabberService">
+	<description>Jabber Service</description>
+	<messageReceivers>
+        <messageReceiver 
+            mep="http://www.w3.org/ns/wsdl/in-only"
+			class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
+        <messageReceiver
+            mep="http://www.w3.org/ns/wsdl/in-out"
+			class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
+    </messageReceivers>
+    <parameter name="ServiceClass" locked="xsd:false">org.apache.openmeetings.axis.services.JabberWebServiceFacade</parameter>
+  </service>
+  <service name="ServerService">
+	<description>Server Service</description>
+	<messageReceivers>
+        <messageReceiver 
+            mep="http://www.w3.org/ns/wsdl/in-only"
+			class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
+        <messageReceiver
+            mep="http://www.w3.org/ns/wsdl/in-out"
+			class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
+    </messageReceivers>
+    <parameter name="ServiceClass" locked="xsd:false">org.apache.openmeetings.axis.services.ServerWebServiceFacade</parameter>
+  </service>
+</serviceGroup>
diff --git a/src/axis/resources/services.xsd b/src/axis/resources/services.xsd
new file mode 100644
index 0000000..a71b92b
--- /dev/null
+++ b/src/axis/resources/services.xsd
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

+  <xs:element name="serviceGroup">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="service"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="service">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element ref="description"/>

+        <xs:element ref="messageReceivers"/>

+        <xs:element ref="parameter"/>

+      </xs:sequence>

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="description" type="xs:string"/>

+  <xs:element name="messageReceivers">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="messageReceiver"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="messageReceiver">

+    <xs:complexType>

+      <xs:attribute name="class" use="required"/>

+      <xs:attribute name="mep" use="required" type="xs:anyURI"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="parameter">

+    <xs:complexType mixed="true">

+      <xs:attribute name="locked" use="required" type="xs:NMTOKEN"/>

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+</xs:schema>

diff --git a/src/db/java/org/apache/openmeetings/db/dao/IDataProviderDao.java b/src/db/java/org/apache/openmeetings/db/dao/IDataProviderDao.java
new file mode 100644
index 0000000..5b3052d
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/IDataProviderDao.java
@@ -0,0 +1,92 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.db.dao;

+

+import java.util.List;

+

+import org.apache.openmeetings.db.entity.IDataProviderEntity;

+

+/**

+ * General interface to perform CRUD operations on entities

+ * 

+ * @author solomax, swagner

+ * 

+ * @param <T>

+ */

+public interface IDataProviderDao<T extends IDataProviderEntity> {

+

+	/**

+	 * Get an instance of an {@link T}

+	 * 

+	 * @param id - id of instance to retrieve

+	 * @return instance with the id gived

+	 */

+	T get(long id);

+

+	/**

+	 * Get a list of instances of {@link T}

+	 * 

+	 * @param start - the start to range to retrieve

+	 * @param count - maximum instance count to retrieve

+	 * @return list of instances in the range specified

+	 */

+	List<T> get(int start, int count);

+

+	/**

+	 * Get a list of instances of {@link T}

+	 * 

+	 * @param search - string search criteria to filter entities

+	 * @param start - the start to range to retrieve

+	 * @param count - maximum instance count to retrieve

+	 * @param order - column and sort order

+	 * @return list of instances in the range specified

+	 */

+	List<T> get(String search, int start, int count, String order);

+

+	/**

+	 * Count the number of instances of {@link T}

+	 * 

+	 * @return count of instances

+	 */

+	long count();

+

+	/**

+	 * Count the number of instances of {@link T}

+	 * 

+	 * @param search - string search criteria to filter entities

+	 * @return count of instances satisfying given search criteria

+	 */

+	long count(String search);

+

+	/**

+	 * Update an instance of {@link T}

+	 * 

+	 * @param entity - entity to be updated

+	 * @param userId - user performed update

+	 */

+	T update(T entity, Long userId);

+

+	/**

+	 * Delete an instance of {@link T}

+	 * 

+	 * @param entity - entity to be deleted

+	 * @param userId - user performed delete

+	 */

+	void delete(T entity, Long userId);

+}

diff --git a/src/db/java/org/apache/openmeetings/db/dao/basic/ChatDao.java b/src/db/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
new file mode 100644
index 0000000..8345424
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/basic/ChatDao.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.basic;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.apache.openmeetings.db.entity.basic.ChatMessage;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class ChatDao {
+	@PersistenceContext
+	private EntityManager em;
+
+	public ChatMessage get(long id) {
+		return em.createNamedQuery("getChatMessageById", ChatMessage.class)
+				.setParameter("id", id)
+				.getSingleResult();
+	}
+
+	//TODO additional methods should be added to get messages by external email
+	public List<ChatMessage> get(long userId, int start, int count) {
+		return em.createNamedQuery("getChatMessagesByUser", ChatMessage.class)
+				.setParameter("userId", userId)
+				.setFirstResult(start)
+				.setMaxResults(count)
+				.getResultList();
+	}
+
+	public List<ChatMessage> get(int start, int count) {
+		return em.createNamedQuery("getGlobalChatMessages", ChatMessage.class)
+				.setFirstResult(start)
+				.setMaxResults(count)
+				.getResultList();
+	}
+
+	public ChatMessage update(ChatMessage entity) {
+		entity.setSent(new Date());
+		if (entity.getId() == 0) {
+			em.persist(entity);
+		}
+		return entity;
+	}
+
+	public void delete(ChatMessage entity, long userId) {
+		// TODO Auto-generated method stub
+		
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java b/src/db/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
new file mode 100644
index 0000000..8c0f876
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
@@ -0,0 +1,334 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.basic;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPLICATION_BASE_URL;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CRYPT_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MAX_UPLOAD_SIZE_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_BASE_URL;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.configKeyCryptClassName;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.whiteboardDrawStatus;
+
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.basic.Configuration;
+import org.apache.openmeetings.util.DaoHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * Insert/update/Delete on {@link Configuration}<br/>
+ * <br/>
+ * It provides basic mechanism to get a Conf Key:<br/>
+ * {@link #getConfValue(String, Class, String)} <br/>
+ * <br/>
+ * <b> {@link #get(String)} is deprecated!</b>
+ * 
+ * @author swagner
+ * 
+ */
+@Transactional
+public class ConfigurationDao implements IDataProviderDao<Configuration> {
+	private static final Logger log = Red5LoggerFactory.getLogger(ConfigurationDao.class, webAppRootKey);
+	public static final long DEFAULT_MAX_UPLOAD_SIZE = 1024 * 1024 * 1024; // 1GB
+	public static final String DEFAULT_APP_NAME = "OpenMeetings";
+	public final static String[] searchFields = {"conf_key", "conf_value"};
+
+	@PersistenceContext
+	private EntityManager em;
+
+	@Autowired
+	private UserDao userDao;
+
+	/**
+	 * @deprecated Dao's are not the place to store session variables, also
+	 *             updates to the key won't update this variable
+	 */
+	@Deprecated
+	private String appName = null;
+
+	/**
+	 * Retrieves Configuration regardless of its deleted status
+	 * 
+	 * @param confKey
+	 * @return
+	 */
+	public Configuration forceGet(String confKey) {
+		try {
+			List<Configuration> list = em.createNamedQuery("forceGetConfigurationByKey", Configuration.class)
+					.setParameter("conf_key", confKey).getResultList();
+			return list.isEmpty() ? null : list.get(0);
+		} catch (Exception e) {
+			log.error("[forceGet]: ", e);
+		}
+		return null;
+	}
+
+	public List<Configuration> get(String... keys) {
+		List<Configuration> result = new ArrayList<Configuration>();
+		for (String key : keys) { //iteration is necessary to fill list with all values 
+			List<Configuration> r = em.createNamedQuery("getConfigurationsByKeys", Configuration.class)
+					.setParameter("conf_keys", Arrays.asList(key))
+					.getResultList();
+			result.add(r.isEmpty() ? null : r.get(0));
+		}
+		return result;
+	}
+
+	/**
+	 * Return a object using a custom type and a default value if the key is not
+	 * present, or value is not set
+	 * 
+	 * Example: Integer my_key = getConfValue("my_key", Integer.class, "15");
+	 * 
+	 * @param key
+	 * @param type
+	 * @param defaultValue
+	 * @return
+	 */
+	public <T> T getConfValue(String key, Class<T> type, String defaultValue) {
+		try {
+			List<Configuration> list = get(key);
+
+			if (list == null || list.isEmpty() || list.get(0) == null) {
+				log.warn("Could not find key in configuration CONF_KEY: " + key);
+			} else {
+				String val = list.get(0).getConf_value();
+				// Use the custom value as default value
+				if (val != null) {
+					defaultValue = val;
+				}
+			}
+
+			if (defaultValue == null) {
+				return null;
+			}
+			// Either this can be directly assigned or try to find a constructor
+			// that handles it
+			if (type.isAssignableFrom(defaultValue.getClass())) {
+				return type.cast(defaultValue);
+			}
+			Constructor<T> c = type.getConstructor(defaultValue.getClass());
+			return c.newInstance(defaultValue);
+
+		} catch (Exception err) {
+			log.error("cannot be cast to return type, you have misconfigured your configuration CONF_KEY: " + key, err);
+			return null;
+		}
+	}
+
+	public List<Configuration> getConfigurations(int start, int max, String orderby, boolean asc) {
+		try {
+
+			String query = "SELECT c FROM Configuration c LEFT JOIN FETCH c.user WHERE c.deleted = false ORDER BY " + orderby;
+
+			if (asc) {
+				query += " ASC";
+			} else {
+				query += " DESC";
+			}
+
+			TypedQuery<Configuration> q = em.createQuery(query, Configuration.class);
+			q.setFirstResult(start);
+			q.setMaxResults(max);
+			return q.getResultList();
+		} catch (Exception ex2) {
+			log.error("[getConfigurations]", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 */
+	public Configuration add(String key, String value, Long userId, String comment) {
+		Configuration c = new Configuration();
+		c.setConf_key(key);
+		c.setConf_value(value);
+		c.setComment(comment);
+		return update(c, userId);
+	}
+
+	/**
+	 * @deprecated please use {@link ConfigurationDao#update(Configuration, Long)}
+	 */
+	public Long addConfig(Configuration conf) {
+		try {
+			conf = em.merge(conf);
+			Long configuration_id = conf.getConfiguration_id();
+			return configuration_id;
+		} catch (Exception ex2) {
+			log.error("[updateConfByUID]: ", ex2);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * @deprecated please use {@link ConfigurationDao#update(Configuration, Long)}
+	 * @param conf
+	 * @return
+	 */
+	public Long updateConfig(Configuration conf) {
+		try {
+			if (conf.getConfiguration_id() == null
+					|| conf.getConfiguration_id() == 0
+					|| conf.getConfiguration_id() == 0L) {
+				em.persist(conf);
+			} else {
+				if (!em.contains(conf)) {
+					conf = em.merge(conf);
+				}
+			}
+			if (CONFIG_CRYPT_KEY.equals(conf.getConf_key())) {
+				configKeyCryptClassName = conf.getConf_value();
+			} else if ("show.whiteboard.draw.status".equals(conf.getConf_key())) {
+				whiteboardDrawStatus = "1".equals(conf.getConf_value());
+			}
+			return conf.getConfiguration_id();
+		} catch (Exception ex2) {
+			log.error("[updateConfByUID]: ", ex2);
+		}
+		return new Long(-1);
+	}
+
+	public String getAppName() {
+		if (appName == null) {
+			appName = getConfValue("application.name", String.class, DEFAULT_APP_NAME);
+		}
+		return appName;
+	}
+
+	public String getBaseUrl() {
+		String val = getConfValue(CONFIG_APPLICATION_BASE_URL, String.class, DEFAULT_BASE_URL);
+		if (val != null && !val.endsWith("/")) {
+			val += "/";
+		}
+		return val;
+	}
+
+	public Configuration get(long id) {
+		if (id <= 0) {
+			return null;
+		}
+		return em.createNamedQuery("getConfigurationById", Configuration.class)
+				.setParameter("configuration_id", id).getSingleResult();
+	}
+
+	public List<Configuration> get(int start, int count) {
+		return em.createNamedQuery("getNondeletedConfiguration", Configuration.class)
+				.setFirstResult(start).setMaxResults(count).getResultList();
+	}
+
+	public List<Configuration> get(String search, int start, int count, String sort) {
+		TypedQuery<Configuration> q = em.createQuery(DaoHelper.getSearchQuery("Configuration", "c", search, true, false, sort, searchFields), Configuration.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+	
+	public long count() {
+		return em.createNamedQuery("countConfigurations", Long.class).getSingleResult();
+	}
+
+	public long count(String search) {
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Configuration", "c", search, true, true, null, searchFields), Long.class);
+		return q.getSingleResult();
+	}
+	
+	public Configuration update(Configuration entity, Long userId) {
+		return update(entity, userId, false);
+	}
+	
+	public Configuration update(Configuration entity, Long userId, boolean deleted) {
+		String key = entity.getConf_key();
+		String value = entity.getConf_value();
+		if (entity.getConfiguration_id() == null || entity.getConfiguration_id() <= 0) {
+			entity.setStarttime(new Date());
+			entity.setDeleted(deleted);
+			em.persist(entity);
+		} else {
+			if (userId != null) {
+				entity.setUser(userDao.get(userId));
+			}
+			entity.setDeleted(deleted);
+			entity.setUpdatetime(new Date());
+			entity = em.merge(entity);
+		}
+		if (CONFIG_CRYPT_KEY.equals(key)) {
+			configKeyCryptClassName = value;
+		} else if ("show.whiteboard.draw.status".equals(key)) {
+			whiteboardDrawStatus = "1".equals(value);
+		} else if ("application.name".equals(key)) {
+			appName = value;
+		}
+		//TODO ensure entity returned is updated
+		return entity;
+	}
+
+	public void delete(Configuration entity, Long userId) {
+		entity.setUpdatetime(new Date());
+		this.update(entity, userId, true);
+	}
+
+	/**
+	 * returns the max upload size configured by max_upload_size config key
+	 * 
+	 * @param configurationDao
+	 * @return
+	 */
+	public long getMaxUploadSize() {
+		try {
+			return getConfValue(CONFIG_MAX_UPLOAD_SIZE_KEY, Long.class, "" + DEFAULT_MAX_UPLOAD_SIZE);
+		} catch (Exception e) {
+			log.error("Invalid value saved for max_upload_size conf key: ", e);
+		}
+		return DEFAULT_MAX_UPLOAD_SIZE;
+	}
+	
+	public String getCryptKey() {
+		if (configKeyCryptClassName == null) {
+			String cryptClass = getConfValue(CONFIG_CRYPT_KEY, String.class, null);
+			if (cryptClass != null) {
+				configKeyCryptClassName = cryptClass;
+			}
+		}
+
+		return configKeyCryptClassName;
+	}
+
+	public boolean getWhiteboardDrawStatus() {
+		if (whiteboardDrawStatus == null) {
+			String drawStatus = getConfValue("show.whiteboard.draw.status", String.class, "0");
+			whiteboardDrawStatus = "1".equals(drawStatus);
+		}
+		return whiteboardDrawStatus;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/basic/ErrorDao.java b/src/db/java/org/apache/openmeetings/db/dao/basic/ErrorDao.java
new file mode 100644
index 0000000..b4af047
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/basic/ErrorDao.java
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.basic;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.basic.ErrorType;
+import org.apache.openmeetings.db.entity.basic.ErrorValue;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class ErrorDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(ErrorDao.class, webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+
+	public Long addErrorType(Long errortype_id, Long fieldvalues_id) {
+		try {
+			ErrorType eType = new ErrorType();
+			eType.setErrortype_id(errortype_id);
+			eType.setStarttime(new Date());
+			eType.setDeleted(false);
+			eType.setFieldvalues_id(fieldvalues_id);
+			eType = em.merge(eType);
+			Long newerrortype_id = eType.getErrortype_id();
+			return newerrortype_id;
+		} catch (Exception ex2) {
+			log.error("[addErrorType]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<ErrorType> getErrorTypes() {
+		try {
+			TypedQuery<ErrorType> query = em.createNamedQuery("getErrorTypes", ErrorType.class);
+			query.setParameter("deleted", true);
+			List<ErrorType> ll = query.getResultList();
+			return ll;
+		} catch (Exception ex2) {
+			log.error("[getErrorTypes]: ", ex2);
+		}
+		return null;
+	}
+
+	public ErrorType getErrorType(Long errortype_id) {
+		try {
+			TypedQuery<ErrorType> query = em.createNamedQuery("getErrorType", ErrorType.class);
+			query.setParameter("deleted", true);
+			query.setParameter("errortype_id", errortype_id);
+			return query.getSingleResult();
+		} catch (Exception ex2) {
+			log.error("[getErrorType(" + errortype_id + ")]", ex2);
+		}
+		return null;
+	}
+
+	public Long addErrorValues(Long errorvalues_id, Long errortype_id,
+			Long fieldvalues_id) {
+		try {
+			ErrorValue eValue = new ErrorValue();
+			eValue.setErrorvalues_id(errorvalues_id);
+			eValue.setErrortype_id(errortype_id);
+			eValue.setDeleted(false);
+			eValue.setStarttime(new Date());
+			eValue.setFieldvalues_id(fieldvalues_id);
+			eValue = em.merge(eValue);
+			return eValue.getErrorvalues_id();
+		} catch (Exception ex2) {
+			log.error("[addErrorValues]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long getErrorValueById(Long errortype_id, Long fieldvalues_id) {
+		try {
+			ErrorValue eValue = new ErrorValue();
+			eValue.setErrortype_id(errortype_id);
+			eValue.setStarttime(new Date());
+			eValue.setFieldvalues_id(fieldvalues_id);
+			eValue = em.merge(eValue);
+			Long newerrorvalues_id = eValue.getErrorvalues_id();
+			return newerrorvalues_id;
+		} catch (Exception ex2) {
+			log.error("[getErrorValueById]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long updateErrorValues(Long errortype_id, Long fieldvalues_id) {
+		try {
+			ErrorValue eValue = new ErrorValue();
+			eValue.setErrortype_id(errortype_id);
+			eValue.setStarttime(new Date());
+			eValue.setFieldvalues_id(fieldvalues_id);
+			eValue = em.merge(eValue);
+			Long newerrorvalues_id = eValue.getErrorvalues_id();
+			return newerrorvalues_id;
+		} catch (Exception ex2) {
+			log.error("[addErrorType]: ", ex2);
+		}
+		return null;
+	}
+
+	public ErrorValue get(Long id) {
+		try {
+			TypedQuery<ErrorValue> query = em.createNamedQuery("getErrorValueById", ErrorValue.class);
+			query.setParameter("id", id);
+			ErrorValue e = null;
+			try {
+				e = query.getSingleResult();
+			} catch (NoResultException ex) {
+			}
+			return e;
+		} catch (Exception ex2) {
+			log.error("[get]", ex2);
+		}
+		return null;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/basic/MailMessageDao.java b/src/db/java/org/apache/openmeetings/db/dao/basic/MailMessageDao.java
new file mode 100644
index 0000000..98cfb0e
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/basic/MailMessageDao.java
@@ -0,0 +1,82 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.db.dao.basic;

+

+import java.util.Calendar;

+import java.util.List;

+

+import javax.persistence.EntityManager;

+import javax.persistence.PersistenceContext;

+

+import org.apache.openmeetings.db.dao.IDataProviderDao;

+import org.apache.openmeetings.db.entity.basic.MailMessage;

+import org.apache.openmeetings.db.entity.basic.MailMessage.Status;

+import org.springframework.transaction.annotation.Transactional;

+

+@Transactional

+public class MailMessageDao  implements IDataProviderDao<MailMessage> {

+	@PersistenceContext

+	private EntityManager em;

+	

+	public MailMessage get(long id) {

+		return em.createNamedQuery("getMailMessageById", MailMessage.class).setParameter("id", id).getSingleResult();

+	}

+

+	public List<MailMessage> get(int start, int count) {

+		return em.createNamedQuery("getMailMessages", MailMessage.class).setParameter("status", Status.NONE)

+				.setFirstResult(start).setMaxResults(count).getResultList();

+	}

+

+	public List<MailMessage> get(String search, int start, int count, String order) {

+		return get(start, count);

+	}

+

+	public long count() {

+		return em.createNamedQuery("countMailMessages", Long.class).setParameter("status", Status.NONE)

+				.getSingleResult();

+	}

+

+	public long count(String search) {

+		return count();

+	}

+

+	public void resetSendingStatus(Calendar date) {

+		em.createQuery("UPDATE MailMessage m SET m.status = :noneStatus WHERE m.status = :sendingStatus " +

+				"	AND m.updated < :date")

+			.setParameter("noneStatus", Status.NONE)

+			.setParameter("sendingStatus", Status.SENDING)

+			.setParameter("date", date)

+			.executeUpdate();

+	}

+	

+	public MailMessage update(MailMessage m, Long userId) {

+		if (m.getId() == null) {

+			m.setInserted(Calendar.getInstance());

+			em.persist(m);

+		} else {

+			m.setUpdated(Calendar.getInstance());

+			m =	em.merge(m);

+		}

+		return m;

+	}

+

+	public void delete(MailMessage m, Long userId) {

+		em.remove(m);

+	}

+}

diff --git a/src/db/java/org/apache/openmeetings/db/dao/basic/NavigationDao.java b/src/db/java/org/apache/openmeetings/db/dao/basic/NavigationDao.java
new file mode 100644
index 0000000..187ce51
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/basic/NavigationDao.java
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.basic;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.basic.Naviglobal;
+import org.apache.openmeetings.db.entity.basic.Navimain;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class NavigationDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(NavigationDao.class, webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+
+	public Naviglobal getGlobalMenuEntry(long globalId) {
+		try {
+			TypedQuery<Naviglobal> query = em.createNamedQuery("getNavigationById", Naviglobal.class);
+			query.setParameter("global_id", globalId);
+			return query.getSingleResult();
+		} catch (Exception ex2) {
+			log.error("getGlobalMenuEntry", ex2);
+		}
+		return null;
+
+	}
+
+	public List<Naviglobal> getMainMenu(boolean admin, long USER_ID) {
+		return em.createNamedQuery("getNavigation", Naviglobal.class)
+				.setParameter("level_id", admin ? 3L : 1L)
+				.getResultList();
+	}
+
+	public void addGlobalStructure(String action, int naviorder, long fieldvalues_id, boolean isleaf, boolean isopen, long level_id,
+			String name, boolean deleted, Long tooltip_fieldvalues_id) {
+		try {
+			Naviglobal ng = new Naviglobal();
+			ng.setAction(action);
+			ng.setComment("");
+			ng.setIcon("");
+			ng.setNaviorder(naviorder);
+			ng.setFieldvalues_id(fieldvalues_id);
+			ng.setIsleaf(isleaf);
+			ng.setIsopen(isopen);
+			ng.setDeleted(deleted);
+			ng.setLevel_id(level_id);
+			ng.setName(name);
+			ng.setStarttime(new Date());
+			ng.setTooltip_fieldvalues_id(tooltip_fieldvalues_id);
+			// CriteriaBuilder crit = em.getCriteriaBuilder();
+
+			em.merge(ng);
+
+		} catch (Exception ex2) {
+			log.error("addGlobalStructure", ex2);
+		}
+	}
+
+	public void addMainStructure(String action, String params, int naviorder, long fieldvalues_id, boolean isleaf, boolean isopen,
+			long level_id, String name, long global_id, boolean deleted, Long tooltip_fieldvalues_id) {
+		try {
+			Naviglobal ng = getGlobalMenuEntry(global_id);
+			List<Navimain> mainEntries = ng.getMainnavi();
+			mainEntries = (mainEntries == null) ? new ArrayList<Navimain>() : mainEntries;
+
+			Navimain nm = new Navimain();
+			nm.setAction(action);
+			nm.setParams(params);
+			nm.setComment("");
+			nm.setIcon("");
+			nm.setFieldvalues_id(fieldvalues_id);
+			nm.setIsleaf(isleaf);
+			nm.setNaviorder(naviorder);
+			nm.setIsopen(isopen);
+			nm.setLevel_id(level_id);
+			nm.setName(name);
+			nm.setDeleted(deleted);
+			nm.setGlobal_id(global_id);
+			nm.setStarttime(new Date());
+			nm.setTooltip_fieldvalues_id(tooltip_fieldvalues_id);
+
+			mainEntries.add(nm);
+			ng.setMainnavi(mainEntries);
+
+			em.merge(ng);
+
+		} catch (Exception ex2) {
+			log.error("addMainStructure", ex2);
+		}
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentCategoryDao.java b/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentCategoryDao.java
new file mode 100644
index 0000000..53735ca
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentCategoryDao.java
@@ -0,0 +1,163 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.calendar;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.AppointmentCategory;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class AppointmentCategoryDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(AppointmentCategoryDao.class, webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+	@Autowired
+	private UserDao usersDao;
+
+	public AppointmentCategory get(Long categoryId) {
+		try {
+			log.debug("getAppointmentCategoryById: " + categoryId);
+
+			String hql = "select app from AppointmentCategory app "
+					+ "WHERE app.deleted <> :deleted "
+					+ "AND app.categoryId = :categoryId";
+
+			TypedQuery<AppointmentCategory> query = em.createQuery(hql, AppointmentCategory.class);
+			query.setParameter("deleted", true);
+			query.setParameter("categoryId", categoryId);
+
+			AppointmentCategory appointCategory = null;
+			try {
+				appointCategory = query.getSingleResult();
+			} catch (NoResultException ex) {
+			}
+
+			return appointCategory;
+		} catch (Exception ex2) {
+			log.error("[getAppointmentCategoryById]: " + ex2);
+		}
+		return null;
+	}
+
+	public Long updateAppointmentCategory(Long categoryId, String name) {
+		try {
+
+			AppointmentCategory ac = this
+					.get(categoryId);
+
+			ac.setName(name);
+			ac.setUpdatetime(new Date());
+
+			if (ac.getCategoryId() == null) {
+				em.persist(ac);
+			} else {
+				if (!em.contains(ac)) {
+					em.merge(ac);
+				}
+			}
+
+			return categoryId;
+		} catch (Exception ex2) {
+			log.error("[updateAppointmentCategory]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long addAppointmentCategory(Long user_id, String name, String comment) {
+		try {
+
+			AppointmentCategory ac = new AppointmentCategory();
+
+			ac.setName(name);
+			ac.setStarttime(new Date());
+			ac.setDeleted(false);
+			ac.setUser(usersDao.get(user_id));
+			ac.setComment(comment);
+
+			ac = em.merge(ac);
+			Long category_id = ac.getCategoryId();
+
+			return category_id;
+		} catch (Exception ex2) {
+			log.error("[addAppointmentCategory]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long deleteAppointmentCategory(Long categoryId) {
+		try {
+
+			AppointmentCategory ac = this
+					.get(categoryId);
+
+			log.debug("ac: " + ac);
+
+			if (ac == null) {
+				log.debug("Already deleted / Could not find: " + categoryId);
+				return categoryId;
+			}
+			ac.setUpdatetime(new Date());
+			ac.setDeleted(true);
+			if (ac.getCategoryId() == null) {
+				em.persist(ac);
+			} else {
+				if (!em.contains(ac)) {
+					em.merge(ac);
+				}
+			}
+			return categoryId;
+		} catch (Exception ex2) {
+			log.error("[deleteAppointmentCategory]: " + ex2);
+		}
+		return null;
+	}
+
+	public List<AppointmentCategory> getAppointmentCategoryList() {
+		try {
+
+			String hql = "select a from AppointmentCategory a "
+					+ "WHERE a.deleted <> :deleted ";
+
+			TypedQuery<AppointmentCategory> query = em.createQuery(hql, AppointmentCategory.class);
+			query.setParameter("deleted", true);
+
+			List<AppointmentCategory> listAppointmentCategory = query
+					.getResultList();
+
+			return listAppointmentCategory;
+		} catch (Exception ex2) {
+			log.error("[AppointmentCategory]: " + ex2);
+		}
+		return null;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java b/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
new file mode 100644
index 0000000..6edf4bb
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentDao.java
@@ -0,0 +1,327 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.calendar;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.TimeZone;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.IInvitationManager.MessageType;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class AppointmentDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(AppointmentDao.class, webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+	@Autowired
+	private MeetingMemberDao meetingMemberDao;
+	@Autowired
+	private UserDao usersDao;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private ConfigurationDao cfgDao;
+	@Autowired
+	private IInvitationManager invitationManager;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+
+	/*
+	 * insert, update, delete, select
+	 */
+
+	/**
+	 * @author o.becherer Retrievment of Appointment for room
+	 */
+	// -----------------------------------------------------------------------------------------------
+	public Appointment getAppointmentByRoom(Long room_id) {
+		log.debug("AppointMentDaoImpl.getAppointmentByRoom");
+
+		TypedQuery<Appointment> query = em.createNamedQuery("getAppointmentByRoomId", Appointment.class);
+		query.setParameter("room_id", room_id);
+
+		List<Appointment> appoint = query.getResultList();
+
+		if (appoint.size() > 0) {
+			return appoint.get(0);
+		}
+
+		return null;
+	}
+
+	// -----------------------------------------------------------------------------------------------
+
+	public Appointment get(Long id) {
+		TypedQuery<Appointment> query = em.createNamedQuery("getAppointmentById", Appointment.class);
+		query.setParameter("id", id);
+
+		Appointment appoint = null;
+		try {
+			appoint = query.getSingleResult();
+		} catch (NoResultException ex) {
+		}
+		return appoint;
+	}
+
+	public Appointment getAppointmentByIdBackup(Long appointmentId) {
+		TypedQuery<Appointment> query = em.createNamedQuery("getAppointmentByIdAny", Appointment.class).setParameter("id", appointmentId);
+
+		Appointment appoint = null;
+		try {
+			appoint = query.getSingleResult();
+		} catch (NoResultException ex) {
+		}
+
+		return appoint;
+	}
+
+	public List<Appointment> getAppointments() {
+		return em.createNamedQuery("getAppointments", Appointment.class).getResultList();
+	}
+
+	public Appointment update(Appointment a, Long userId) {
+		return update(a, userId, true);
+	}
+	
+	public Appointment update(Appointment a, Long userId, boolean sendmails) {
+		Room r = a.getRoom();
+		if (r.getRooms_id() == null) {
+			r.setName(a.getTitle());
+			r.setNumberOfPartizipants(cfgDao.getConfValue("calendar.conference.rooms.default.size", Long.class, "50"));
+		}
+		roomDao.update(r, userId);
+		if (sendmails) {
+			Set<Long> mmIds = a.getId() == null ? new HashSet<Long>()
+					: meetingMemberDao.getMeetingMemberIdsByAppointment(a.getId());
+			// update meeting members
+			Appointment a0 = a.getId() == null ? null : get(a.getId());
+			boolean sendMail = a0 == null || !a0.getTitle().equals(a.getTitle()) ||
+					!(a0.getDescription() != null ? a0.getDescription().equals(a.getDescription()) : true) ||
+					!(a0.getLocation() != null ? a0.getLocation().equals(a.getLocation()) : true) ||
+					!a0.getStart().equals(a.getStart()) ||
+					!a0.getEnd().equals(a.getEnd());
+			List<MeetingMember> mmList = a.getMeetingMembers();
+			if (mmList != null){
+				for (MeetingMember mm : mmList) {
+					if (mm.getId() == null || !mmIds.contains(mm.getId())) {
+						invitationManager.processInvitation(a, mm, MessageType.Create);
+					} else {
+						mmIds.remove(mm.getId());
+						invitationManager.processInvitation(a, mm, MessageType.Update, sendMail);
+					}
+				}
+			}
+			for (long id : mmIds) {
+				invitationManager.processInvitation(a, meetingMemberDao.get(id), MessageType.Cancel);
+			}
+			//notify owner
+			MeetingMember owner = new MeetingMember();
+			owner.setUser(a.getOwner());
+			if (a.getId() == null) {
+				invitationManager.processInvitation(a, owner, MessageType.Create);
+			} else if (a.isDeleted()) {
+				invitationManager.processInvitation(a, owner, MessageType.Cancel);
+			} else if (sendMail) {
+				invitationManager.processInvitation(a, owner, MessageType.Update, sendMail);
+			}
+		}
+		if (a.getId() == null) {
+			a.setInserted(new Date());
+			em.persist(a);
+		} else {
+			a.setUpdated(new Date());
+			a =	em.merge(a);
+		}
+		return a;
+	}
+	
+	public List<Appointment> getAppointmentsByRoomId(Long roomId) {
+		try {
+
+			String hql = "select a from Appointment a "
+					+ "WHERE a.room.rooms_id = :roomId ";
+
+			TypedQuery<Appointment> query = em.createQuery(hql,
+					Appointment.class);
+			query.setParameter("roomId", roomId);
+			List<Appointment> ll = query.getResultList();
+
+			return ll;
+		} catch (Exception e) {
+			log.error("[getAppointmentsByRoomId]", e);
+		}
+		return null;
+	}
+
+	// ----------------------------------------------------------------------------------------------------------
+
+	public void delete(Appointment a, Long userId) {
+		a.setUpdated(new Date());
+		a.setDeleted(true);
+		a.setMeetingMembers(null);
+		if (Boolean.TRUE.equals(a.getRoom().getAppointment())) {
+			a.getRoom().setDeleted(true);
+		}
+		update(a, userId);
+	}
+	
+	public List<Appointment> getAppointmentsByRange(Long userId, Date start, Date end) {
+		log.debug("Start " + start + " End " + end);
+
+		TypedQuery<Appointment> query = em.createNamedQuery("appointmentsInRange", Appointment.class);
+		query.setParameter("starttime", start);
+		query.setParameter("endtime", end);
+		query.setParameter("userId", userId);
+		
+		List<Appointment> listAppoints = new ArrayList<Appointment>(query.getResultList()); 
+		TypedQuery<Appointment> q1 = em.createNamedQuery("joinedAppointmentsInRange", Appointment.class);
+		q1.setParameter("starttime", start);
+		q1.setParameter("endtime", end);
+		q1.setParameter("userId", userId);
+		for (Appointment a : q1.getResultList()) {
+			a.setConnectedEvent(true); //TODO need to be reviewed
+			listAppoints.add(a);
+		}
+
+		return listAppoints;
+	}
+
+	public List<Appointment> getAppointmentsInRange(Calendar start, Calendar end) {
+		TypedQuery<Appointment> q = em.createNamedQuery("appointmentsInRangeRemind", Appointment.class);
+		q.setParameter("starttime", start.getTime());
+		q.setParameter("endtime", end.getTime());
+		return q.getResultList();
+	}
+	
+	public List<Appointment> getAppointmentsByCat(Long categoryId) {
+		try {
+
+			String hql = "select a from Appointments a "
+					+ "WHERE a.deleted false "
+					+ "AND a.appointmentCategory.categoryId = :categoryId";
+
+			TypedQuery<Appointment> query = em.createQuery(hql,
+					Appointment.class);
+			query.setParameter("categoryId", categoryId);
+
+			List<Appointment> listAppoints = query.getResultList();
+			return listAppoints;
+		} catch (Exception ex2) {
+			log.error("[getAppointements]: ", ex2);
+		}
+		return null;
+	}
+
+	// next appointment to select date
+	public Appointment getNextAppointment(Long userId, Date start) {
+		List<Appointment> list = em.createNamedQuery("getNextAppointment", Appointment.class)
+				.setParameter("start", start).setParameter("userId", userId).getResultList();
+		return list == null || list.isEmpty() ? null : list.get(0);
+	}
+
+	public List<Appointment> searchAppointmentsByTitle(Long userId, String title) {
+		return em.createNamedQuery("getNextAppointment", Appointment.class)
+				.setParameter("title", title).setParameter("userId", userId).getResultList();
+	}
+
+	/**
+	 * @author becherer
+	 * @param userId
+	 * @return
+	 */
+	public List<Appointment> getTodaysAppointmentsbyRangeAndMember(Long userId) {
+		log.debug("getAppoitmentbyRangeAndMember : UserID - " + userId);
+
+		TimeZone timeZone = timezoneUtil.getTimeZone(usersDao.get(userId));
+
+		Calendar startCal = Calendar.getInstance(timeZone);
+		startCal.set(Calendar.MINUTE, 0);
+		startCal.set(Calendar.HOUR, 0);
+		startCal.set(Calendar.SECOND, 1);
+
+		Calendar endCal = Calendar.getInstance(timeZone);
+		endCal.set(Calendar.MINUTE, 23);
+		endCal.set(Calendar.HOUR, 59);
+		endCal.set(Calendar.SECOND, 59);
+
+		TypedQuery<Appointment> query = em.createNamedQuery("appointmentsInRangeByUser", Appointment.class);
+
+		query.setParameter("userId", userId);
+
+		query.setParameter("starttime", startCal.getTime());
+		query.setParameter("endtime", endCal.getTime());
+
+		List<Appointment> listAppoints = query.getResultList();
+		return listAppoints;
+	}
+
+	// ---------------------------------------------------------------------------------------------
+
+	public Appointment getAppointmentByRoomId(Long user_id, Long rooms_id) {
+		try {
+
+			String hql = "select a from Appointment a "
+					+ "WHERE a.deleted <> :deleted "
+					+ "AND a.owner.user_id = :user_id "
+					+ "AND a.room.rooms_id = :rooms_id ";
+
+			TypedQuery<Appointment> query = em.createQuery(hql,
+					Appointment.class);
+
+			query.setParameter("deleted", true);
+			query.setParameter("user_id", user_id);
+			query.setParameter("rooms_id", rooms_id);
+
+			List<Appointment> listAppoints = query.getResultList();
+
+			if (listAppoints.size() > 0) {
+				return listAppoints.get(0);
+			}
+
+			return null;
+
+		} catch (Exception e) {
+			log.error("[getAppointmentByRoomId]", e);
+			return null;
+		}
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentReminderTypDao.java b/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentReminderTypDao.java
new file mode 100644
index 0000000..5288556
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/calendar/AppointmentReminderTypDao.java
@@ -0,0 +1,165 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.calendar;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class AppointmentReminderTypDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(AppointmentReminderTypDao.class, webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+	@Autowired
+	private UserDao usersDao;
+
+	public AppointmentReminderTyps get(Long typId) {
+		try {
+			log.debug("AppointmentReminderTypById: " + typId);
+
+			String hql = "select app from AppointmentReminderTyps app "
+					+ "WHERE app.deleted <> :deleted "
+					+ "AND app.typId = :typId";
+
+			TypedQuery<AppointmentReminderTyps> query = em.createQuery(hql, AppointmentReminderTyps.class);
+			query.setParameter("deleted", true);
+			query.setParameter("typId", typId);
+
+			AppointmentReminderTyps appointmentReminderTyps = null;
+			try {
+				appointmentReminderTyps = query.getSingleResult();
+			} catch (NoResultException ex) {
+			}
+
+			return appointmentReminderTyps;
+		} catch (Exception ex2) {
+			log.error("[getAppointmentReminderTypsById]: " + ex2);
+		}
+		return null;
+	}
+
+	public Long updateAppointmentReminderTyps(Long typId, String name) {
+		try {
+
+			AppointmentReminderTyps ac = this
+					.get(typId);
+
+			ac.setName(name);
+			ac.setUpdatetime(new Date());
+
+			if (ac.getTypId() == null) {
+				em.persist(ac);
+			} else {
+				if (!em.contains(ac)) {
+					em.merge(ac);
+				}
+			}
+
+			return typId;
+		} catch (Exception ex2) {
+			log.error("[updateAppointmentReminderTyps]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long addAppointmentReminderTyps(Long user_id, String name, long fieldvalues_id) {
+		try {
+
+			AppointmentReminderTyps ac = new AppointmentReminderTyps();
+
+			ac.setName(name);
+			ac.setStarttime(new Date());
+			ac.setDeleted(false);
+			ac.setUser(usersDao.get(user_id));
+			ac.setFieldvalues_id(fieldvalues_id);
+
+			ac = em.merge(ac);
+			Long category_id = ac.getTypId();
+
+			return category_id;
+		} catch (Exception ex2) {
+			log.error("[addAppointmentReminderTyps]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long deleteAppointmentReminderTyp(Long typId) {
+		try {
+
+			AppointmentReminderTyps ac = this
+					.get(typId);
+
+			log.debug("ac: " + ac);
+
+			if (ac == null) {
+				log.debug("Already deleted / Could not find: " + typId);
+				return typId;
+			}
+			ac.setUpdatetime(new Date());
+			ac.setDeleted(true);
+
+			if (ac.getTypId() == null) {
+				em.persist(ac);
+			} else {
+				if (!em.contains(ac)) {
+					em.merge(ac);
+				}
+			}
+
+			return typId;
+		} catch (Exception ex2) {
+			log.error("[deleteAppointmentReminderTyp]: " + ex2);
+		}
+		return null;
+	}
+
+	public List<AppointmentReminderTyps> getAppointmentReminderTypList(long language_id) {
+		log.debug("getAppointmenetReminderTypList");
+
+		try {
+
+			String hql = "select a from AppointmentReminderTyps a WHERE a.deleted <> :deleted ";
+
+			TypedQuery<AppointmentReminderTyps> query = em.createQuery(hql, AppointmentReminderTyps.class);
+			query.setParameter("deleted", true);
+
+			List<AppointmentReminderTyps> listAppointmentReminderTyp = query.getResultList();
+
+			return listAppointmentReminderTyp;
+		} catch (Exception ex2) {
+			log.error("[getAppointmentReminderTypList]: " + ex2);
+		}
+		return null;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/calendar/IInvitationManager.java b/src/db/java/org/apache/openmeetings/db/dao/calendar/IInvitationManager.java
new file mode 100644
index 0000000..663496f
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/calendar/IInvitationManager.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.calendar;
+
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+
+public interface IInvitationManager {
+	enum MessageType {
+		Create
+		, Update
+		, Cancel
+	}
+	
+	void processInvitation(Appointment a, MeetingMember member, MessageType type);
+	
+	void processInvitation(Appointment a, MeetingMember mm, MessageType type, boolean sendMail);
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/calendar/MeetingMemberDao.java b/src/db/java/org/apache/openmeetings/db/dao/calendar/MeetingMemberDao.java
new file mode 100644
index 0000000..c88202a
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/calendar/MeetingMemberDao.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.calendar;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class MeetingMemberDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(MeetingMemberDao.class, webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+
+	public MeetingMember get(Long meetingMemberId) {
+		MeetingMember meetingMember = null;
+		try {
+			meetingMember = em.createNamedQuery("getMeetingMemberById", MeetingMember.class)
+					.setParameter("id", meetingMemberId).getSingleResult();
+		} catch (NoResultException ex) {
+		}
+
+		return meetingMember;
+	}
+
+	public List<MeetingMember> getMeetingMembers() {
+		return em.createNamedQuery("getMeetingMembers", MeetingMember.class).getResultList();
+	}
+
+	public Set<Long> getMeetingMemberIdsByAppointment(Long appointmentId) {
+		log.debug("getMeetingMemberIdsByAppointment: " + appointmentId);
+
+		return new HashSet<Long>(em.createNamedQuery("getMeetingMemberIdsByAppointment", Long.class)
+				.setParameter("id", appointmentId)
+				.getResultList());
+	}
+	
+	/**
+	 * Updating MeetingMember
+	 */
+	// -------------------------------------------------------------------------------
+	public MeetingMember update(MeetingMember meetingMember) {
+		if (meetingMember.getId() == null) {
+			em.persist(meetingMember);
+		} else {
+			if (!em.contains(meetingMember)) {
+				meetingMember = em.merge(meetingMember);
+			}
+		}
+		return meetingMember;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java b/src/db/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java
new file mode 100644
index 0000000..14f27c4
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/file/FileExplorerItemDao.java
@@ -0,0 +1,415 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.file;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author sebastianwagner
+ * 
+ */
+@Transactional
+public class FileExplorerItemDao {
+
+    private static final Logger log = Red5LoggerFactory.getLogger(
+            FileExplorerItemDao.class,
+            OpenmeetingsVariables.webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+
+    public Long add(String fileName, String fileHash,
+            Long parentFileExplorerItemId, Long ownerId, Long room_id,
+            Long insertedBy, Boolean isFolder, Boolean isImage,
+            Boolean isPresentation, String wmlFilePath,
+            Boolean isStoredWmlFile, Boolean isChart,
+            Long externalFileId, String externalType) {
+        log.debug(".add(): adding file " + fileName+ " roomID: "+room_id);
+        try {
+            FileExplorerItem fileItem = new FileExplorerItem();
+            fileItem.setFileName(fileName);
+            fileItem.setFileHash(fileHash);
+            fileItem.setDeleted(false);
+            fileItem.setParentFileExplorerItemId(parentFileExplorerItemId);
+            fileItem.setOwnerId(ownerId);
+            fileItem.setRoom_id(room_id);
+            fileItem.setInserted(new Date());
+            fileItem.setInsertedBy(insertedBy);
+            fileItem.setIsFolder(isFolder);
+            fileItem.setIsImage(isImage);
+            fileItem.setIsPresentation(isPresentation);
+            fileItem.setUpdated(new Date());
+            fileItem.setWmlFilePath(wmlFilePath);
+            fileItem.setIsStoredWmlFile(isStoredWmlFile);
+            fileItem.setIsChart(isChart);
+            fileItem.setExternalFileId(externalFileId);
+            fileItem.setExternalType(externalType);
+
+			fileItem = em.merge(fileItem);
+			Long fileItemId = fileItem.getFileExplorerItemId();
+
+            log.debug(".add(): file " + fileName + " added as " + fileItemId);
+            return fileItemId;
+        } catch (Exception ex2) {
+            log.error(".add(): ", ex2);
+        }
+        return null;
+    }
+    
+    public Long addFileExplorerItem(FileExplorerItem fileItem) {
+        try {
+
+			fileItem = em.merge(fileItem);
+			Long fileItemId = fileItem.getFileExplorerItemId();
+
+            return fileItemId;
+        } catch (Exception ex2) {
+            log.error("[addFileExplorerItem]", ex2);
+        }
+        return null;
+    }
+
+	public List<FileExplorerItem> getFileExplorerItemsByRoomAndOwner(
+            Long room_id, Long ownerId) {
+        log.debug(".getFileExplorerItemsByRoomAndOwner() started");
+        try {
+            String hql = "SELECT c FROM FileExplorerItem c "
+                    + "WHERE c.deleted <> :deleted "
+                    + "AND c.room_id = :room_id " + "AND c.ownerId = :ownerId "
+                    + "ORDER BY c.isFolder DESC, c.fileName ";
+
+			TypedQuery<FileExplorerItem> query = em.createQuery(hql, FileExplorerItem.class);
+			query.setParameter("deleted", true);
+			query.setParameter("room_id",room_id);
+			query.setParameter("ownerId",ownerId);
+			
+			List<FileExplorerItem> fileExplorerList = query.getResultList();
+
+            return fileExplorerList;
+        } catch (Exception ex2) {
+            log.error("[getFileExplorerItemsByRoomAndOwner]: ", ex2);
+        }
+        return null;
+    }
+
+    public FileExplorerItem[] getFileExplorerItemsByRoom(Long room_id,
+            Long parentFileExplorerItemId) {
+        log.debug("getFileExplorerItemsByRoom room_id :: "+room_id);
+        try {
+
+			String hql = "SELECT c FROM FileExplorerItem c " +
+					"WHERE c.deleted <> :deleted " +
+					"AND c.room_id = :room_id " +
+					"AND c.ownerId IS NULL " +
+					"AND c.parentFileExplorerItemId = :parentFileExplorerItemId " +
+					"ORDER BY c.isFolder DESC, c.fileName ";
+			
+			TypedQuery<FileExplorerItem> query = em.createQuery(hql, FileExplorerItem.class);
+			query.setParameter("deleted", true);
+			query.setParameter("room_id",room_id);
+			query.setParameter("parentFileExplorerItemId", parentFileExplorerItemId);
+			
+	        FileExplorerItem[] fileExplorerList = query.getResultList().toArray(new FileExplorerItem[0]);
+			
+			return fileExplorerList;
+        } catch (Exception ex2) {
+            log.error("[getFileExplorerRootItemsByRoom]: ", ex2);
+        }
+        return null;
+    }
+
+    public FileExplorerItem[] getFileExplorerItemsByOwner(Long ownerId,
+            Long parentFileExplorerItemId) {
+        log.debug(".getFileExplorerItemsByOwner() started");
+        try {
+
+            String hql = "SELECT c FROM FileExplorerItem c "
+                    + "WHERE c.deleted <> :deleted "
+                    + "AND c.ownerId = :ownerId "
+                    + "AND c.parentFileExplorerItemId = :parentFileExplorerItemId "
+                    + "ORDER BY c.isFolder DESC, c.fileName ";
+
+			TypedQuery<FileExplorerItem> query = em.createQuery(hql, FileExplorerItem.class);
+			query.setParameter("deleted", true);
+			query.setParameter("ownerId",ownerId);
+			query.setParameter("parentFileExplorerItemId", parentFileExplorerItemId);
+			
+            FileExplorerItem[] fileExplorerList = query.getResultList().toArray(new FileExplorerItem[0]);
+
+            return fileExplorerList;
+        } catch (Exception ex2) {
+            log.error("[getFileExplorerRootItemsByOwner]: ", ex2);
+        }
+        return null;
+    }
+
+    public FileExplorerItem[] getFileExplorerItemsByParent(
+            Long parentFileExplorerItemId) {
+        log.debug(".getFileExplorerItemsByParent() started");
+        try {
+
+            String hql = "SELECT c FROM FileExplorerItem c "
+                    + "WHERE c.deleted <> :deleted "
+                    + "AND c.parentFileExplorerItemId = :parentFileExplorerItemId "
+                    + "ORDER BY c.isFolder DESC, c.fileName ";
+
+			TypedQuery<FileExplorerItem> query = em.createQuery(hql, FileExplorerItem.class);
+			query.setParameter("deleted", true);
+			query.setParameter("parentFileExplorerItemId", parentFileExplorerItemId);
+			
+            FileExplorerItem[] fileExplorerList = query.getResultList().toArray(new FileExplorerItem[0]);
+
+            return fileExplorerList;
+        } catch (Exception ex2) {
+            log.error("[getFileExplorerRootItemsByOwner]: ", ex2);
+        }
+        return null;
+    }
+
+    public FileExplorerItem getFileExplorerItemsByHash(String hash) {
+        try {
+
+			TypedQuery<FileExplorerItem> query = em.createNamedQuery("getByHash", FileExplorerItem.class);
+			query.setParameter("fileHash", hash);
+			
+			FileExplorerItem fileExplorerList = null;
+			try {
+				fileExplorerList = query.getSingleResult();
+		    } catch (NoResultException ex) {
+		    }
+
+            return fileExplorerList;
+        } catch (Exception ex2) {
+            log.error("[getFileExplorerItemsById]: ", ex2);
+        }
+        return null;
+    }
+    
+    public FileExplorerItem getFileExplorerItemsById(Long fileExplorerItemId) {
+        try {
+
+			TypedQuery<FileExplorerItem> query = em.createNamedQuery("getById", FileExplorerItem.class);
+			query.setParameter("fileExplorerItemId", fileExplorerItemId);
+			
+			FileExplorerItem fileExplorerList = null;
+			try {
+				fileExplorerList = query.getSingleResult();
+		    } catch (NoResultException ex) {
+		    }
+
+            return fileExplorerList;
+        } catch (Exception ex2) {
+            log.error("[getFileExplorerItemsById]: ", ex2);
+        }
+        return null;
+    }
+    
+    public FileExplorerItem getFileExplorerItemsByExternalIdAndType(Long externalFileId, String externalType) {
+        log.debug(".getFileExplorerItemsByExternalIdAndType() started");
+
+        try {
+
+            String hql = "SELECT c FROM FileExplorerItem c "
+                    + "WHERE c.externalFileId = :externalFileId " +
+            		"AND c.externalType LIKE :externalType";
+
+			TypedQuery<FileExplorerItem> query = em.createQuery(hql, FileExplorerItem.class);
+			query.setParameter("externalFileId", externalFileId);
+			query.setParameter("externalType", externalType);
+			
+			FileExplorerItem fileExplorerList = null;
+			try {
+				fileExplorerList = query.getSingleResult();
+		    } catch (NoResultException ex) {
+		    }
+
+            return fileExplorerList;
+        } catch (Exception ex2) {
+            log.error("[getFileExplorerItemsByExternalIdAndType]: ", ex2);
+        }
+        return null;
+    }
+
+    public List<FileExplorerItem> getFileExplorerItems() {
+        log.debug(".getFileExplorerItems() started");
+
+        try {
+			TypedQuery<FileExplorerItem> query = em.createNamedQuery("getAllFiles", FileExplorerItem.class);
+
+            List<FileExplorerItem> fileExplorerList = query.getResultList();
+
+            return fileExplorerList;
+        } catch (Exception ex2) {
+            log.error("[getFileExplorerItems]: ", ex2);
+        }
+        return null;
+    }    
+
+    /**
+     * @param fileExplorerItemId
+     */
+    public void deleteFileExplorerItem(Long fileExplorerItemId) {
+        log.debug(".deleteFileExplorerItem() started");
+
+        try {
+
+            FileExplorerItem fId = this
+                    .getFileExplorerItemsById(fileExplorerItemId);
+
+            fId.setDeleted(true);
+            fId.setUpdated(new Date());
+
+			if (fId.getFileExplorerItemId() == 0) {
+				em.persist(fId);
+		    } else {
+		    	if (!em.contains(fId)) {
+		    		em.merge(fId);
+			    }
+			}
+        } catch (Exception ex2) {
+            log.error("[deleteFileExplorerItem]: ", ex2);
+        }
+    }
+    
+    public void deleteFileExplorerItemByExternalIdAndType(Long externalFilesid, String externalType) {
+        log.debug(".deleteFileExplorerItemByExternalIdAndType() started");
+
+        try {
+
+            FileExplorerItem fId = this
+                    .getFileExplorerItemsByExternalIdAndType(externalFilesid, externalType);
+
+            if (fId == null) {
+            	throw new Exception("externalFilesid: "+externalFilesid+" and externalType: "+externalType+" Not found");
+            }
+            
+            fId.setDeleted(true);
+            fId.setUpdated(new Date());
+
+			if (fId.getFileExplorerItemId() == 0) {
+				em.persist(fId);
+		    } else {
+		    	if (!em.contains(fId)) {
+		    		em.merge(fId);
+			    }
+			}
+        } catch (Exception ex2) {
+            log.error("[deleteFileExplorerItemByExternalIdAndType]: ", ex2);
+        }
+    }
+
+    /**
+     * @param fileExplorerItemId
+     * @param fileName
+     */
+    public void updateFileOrFolderName(Long fileExplorerItemId, String fileName) {
+        log.debug(".updateFileOrFolderName() started");
+
+        try {
+
+            FileExplorerItem fId = this
+                    .getFileExplorerItemsById(fileExplorerItemId);
+
+            fId.setFileName(fileName);
+            fId.setUpdated(new Date());
+
+			if (fId.getFileExplorerItemId() == 0) {
+				em.persist(fId);
+		    } else {
+		    	if (!em.contains(fId)) {
+		    		em.merge(fId);
+			    }
+			}
+        } catch (Exception ex2) {
+            log.error("[updateFileOrFolderName]: ", ex2);
+        }
+    }
+
+    public void updateFileOrFolder(FileExplorerItem fId) {
+        log.debug(".updateFileOrFolder() started");
+        try {
+            // fId.setUpdated(new Date());
+
+			if (fId.getFileExplorerItemId() == 0) {
+				em.persist(fId);
+		    } else {
+		    	if (!em.contains(fId)) {
+		    		em.merge(fId);
+			    }
+			}
+        } catch (Exception ex2) {
+            log.error("[updateFileOrFolder]: ", ex2);
+        }
+    }
+
+    /**
+     * @param fileExplorerItemId
+     * @param newParentFileExplorerItemId
+     * @param isOwner
+     */
+    public void moveFile(Long fileExplorerItemId,
+            Long parentFileExplorerItemId, Long room_id, Boolean isOwner,
+            Long ownerId) {
+        log.debug(".moveFile() started");
+        try {
+
+            FileExplorerItem fId = this
+                    .getFileExplorerItemsById(fileExplorerItemId);
+
+            fId.setParentFileExplorerItemId(parentFileExplorerItemId);
+
+            if (parentFileExplorerItemId == 0) {
+                if (isOwner) {
+                    // move to personal Folder
+                    fId.setOwnerId(ownerId);
+                } else {
+                    // move to public room folder
+                    fId.setOwnerId(null);
+                    fId.setRoom_id(room_id);
+                }
+            } else {
+                fId.setOwnerId(null);
+            }
+
+            fId.setUpdated(new Date());
+
+			if (fId.getFileExplorerItemId() == 0) {
+				em.persist(fId);
+		    } else {
+		    	if (!em.contains(fId)) {
+		    		em.merge(fId);
+			    }
+			}
+        } catch (Exception ex2) {
+            log.error("[updateFileOrFolderName]: ", ex2);
+        }
+    }
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/label/LabelDao.java b/src/db/java/org/apache/openmeetings/db/dao/label/LabelDao.java
new file mode 100644
index 0000000..3b80b4f
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/label/LabelDao.java
@@ -0,0 +1,394 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.db.dao.label;

+

+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;

+

+import java.io.File;

+import java.io.InputStream;

+import java.net.URL;

+import java.util.ArrayList;

+import java.util.Collections;

+import java.util.Comparator;

+import java.util.HashMap;

+import java.util.HashSet;

+import java.util.Iterator;

+import java.util.LinkedHashMap;

+import java.util.List;

+import java.util.Locale;

+import java.util.Map;

+import java.util.Set;

+import java.util.concurrent.ConcurrentHashMap;

+

+import javax.xml.parsers.SAXParser;

+import javax.xml.parsers.SAXParserFactory;

+

+import org.apache.commons.collections.CollectionUtils;

+import org.apache.commons.collections.Predicate;

+import org.apache.openmeetings.db.dao.IDataProviderDao;

+import org.apache.openmeetings.db.entity.label.StringLabel;

+import org.apache.openmeetings.util.OmFileHelper;

+import org.apache.openmeetings.util.XmlExport;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.openmeetings.web.app.WebSession;

+import org.apache.wicket.ThreadContext;

+import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;

+import org.apache.wicket.mock.MockWebResponse;

+import org.apache.wicket.protocol.http.mock.MockHttpServletRequest;

+import org.apache.wicket.protocol.http.mock.MockHttpSession;

+import org.apache.wicket.protocol.http.servlet.ServletWebRequest;

+import org.apache.wicket.request.cycle.RequestCycle;

+import org.apache.wicket.request.cycle.RequestCycleContext;

+import org.apache.wicket.util.string.Strings;

+import org.dom4j.Document;

+import org.dom4j.Element;

+import org.dom4j.io.SAXReader;

+import org.red5.logging.Red5LoggerFactory;

+import org.slf4j.Logger;

+import org.xml.sax.Attributes;

+import org.xml.sax.ContentHandler;

+import org.xml.sax.InputSource;

+import org.xml.sax.Locator;

+import org.xml.sax.SAXException;

+import org.xml.sax.XMLReader;

+

+/**

+ * 

+ * CRUD operations for {@link StringLabel}

+ * 

+ * @author solomax, swagner

+ * 

+ */

+public class LabelDao implements IDataProviderDao<StringLabel>{

+	private static final Logger log = Red5LoggerFactory.getLogger(LabelDao.class, webAppRootKey);

+	private static final String ENTRY_ELEMENT = "entry";

+	private static final String KEY_ATTR = "key";

+	public static final String APP_RESOURCES_EN = "Application.properties.xml";

+	public static final String APP_RESOURCES = "Application_%s.properties.xml";

+	public static final LinkedHashMap<Long, Locale> languages = new LinkedHashMap<Long, Locale>(); //TODO hide it and return unmodifiable map

+	public static final ConcurrentHashMap<Locale, List<StringLabel>> labelCache = new ConcurrentHashMap<Locale, List<StringLabel>>();

+	public static final Set<String> keys = new HashSet<String>();

+

+	private static void storeLanguages() throws Exception {

+		Document d = XmlExport.createDocument();

+		Element r = XmlExport.createRoot(d, "language");

+		for (Map.Entry<Long, Locale> e : languages.entrySet()) {

+			r.addElement("lang").addAttribute("id", "" + e.getKey()).addAttribute("code", e.getValue().toLanguageTag());

+		}

+		XmlExport.toXml(getLangFile(), d);

+	}

+	

+	public static void add(Locale l) throws Exception {

+		Long id = 0L;

+		for (Map.Entry<Long, Locale> e : languages.entrySet()) {

+			id = e.getKey();

+		}

+		languages.put(++id,  l);

+		storeLanguages();

+		labelCache.put(l, new ArrayList<StringLabel>());

+	}

+	

+	public List<Map<String, Object>> getStrings(Long language_id, int start, int count) {

+		List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();

+		for (int i = 0; i < count; ++i) {

+			Map<String, Object> map = new HashMap<String, Object>();

+			map.put("id", start + i);

+			map.put("value", getString(start + i, language_id));

+			result.add(map);

+		}

+		return result;

+	}

+

+	public String getString(long fieldValuesId, long langId) {

+		Application a = null;

+		if (Application.exists()) {

+			a = Application.get();

+		} else {

+			a = (Application)Application.get(Application.getAppName());

+			ThreadContext.setApplication(a);

+		}

+		if (ThreadContext.getRequestCycle() == null) {

+			ServletWebRequest req = new ServletWebRequest(new MockHttpServletRequest((Application)a, new MockHttpSession(a.getServletContext()), a.getServletContext()), "");

+			RequestCycleContext rctx = new RequestCycleContext(req, new MockWebResponse(), a.getRootRequestMapper(), a.getExceptionMapperProvider().get()); 

+			ThreadContext.setRequestCycle(new RequestCycle(rctx));

+		}

+		if (ThreadContext.getSession() == null) {

+			WebSession s = WebSession.get();

+			s.setLanguage(langId);

+			ThreadContext.setSession(s);

+		}

+		return Application.getString(fieldValuesId, langId);

+	}

+

+	private static File getLangFile() {

+		return new File(OmFileHelper.getLanguagesDir(), OmFileHelper.nameOfLanguageFile);

+	}

+	

+	public static void initLanguageMap() {

+		SAXReader reader = new SAXReader();

+		try {

+			Document document = reader.read(getLangFile());

+			Element root = document.getRootElement();

+			languages.clear();

+			for (@SuppressWarnings("unchecked")Iterator<Element> it = root.elementIterator("lang"); it.hasNext();) {

+				Element item = it.next();

+				Long id = Long.valueOf(item.attributeValue("id"));

+				String code = item.attributeValue("code");

+				if (id == 3L) {

+					continue;

+				}

+				languages.put(id, Locale.forLanguageTag(code));

+			}

+		} catch (Exception e) {

+			log.error("Error while building language map");

+		}

+	}

+

+	public static String getLabelFileName(Locale l) {

+		String name = APP_RESOURCES_EN;

+		if (!Locale.ENGLISH.equals(l)) {

+			name = String.format(APP_RESOURCES, l.toLanguageTag().replace('-', '_'));

+		}

+		return name;

+	}

+	

+	private static void storeLabels(Locale l) throws Exception {

+		Document d = XmlExport.createDocument();

+		Element r = XmlExport.createRoot(d);

+		List<StringLabel> labels = labelCache.get(l);

+		for (StringLabel sl : labels) {

+			r.addElement(ENTRY_ELEMENT).addAttribute(KEY_ATTR, sl.getKey()).addCDATA(sl.getValue());

+		}

+		URL u = Application.class.getResource(getLabelFileName(l));

+		XmlExport.toXml(new File(u.toURI()), d);

+	}

+	

+	public static void upload(Locale l, InputStream is) throws Exception {

+		List<StringLabel> labels = getLabels(l, is);

+		URL u = Application.class.getResource(getLabelFileName(Locale.ENGLISH)); //get the URL of existing resource

+		File el = new File(u.toURI());

+		File f = new File(el.getParentFile(), getLabelFileName(l));

+		if (!f.exists()) {

+			f.createNewFile();

+		}

+		labelCache.put(l, labels);

+		storeLabels(l);

+	}

+	

+	private static List<StringLabel> getLabels(Locale l) {

+		List<StringLabel> labels = new ArrayList<StringLabel>();

+		InputStream is = null;

+		try {

+			is = Application.class.getResourceAsStream(getLabelFileName(l));

+			labels = getLabels(l, is);

+		} catch (Exception e) {

+			log.error("Error reading resources document", e);

+		} finally {

+			if (is != null) {

+				try {

+					is.close();

+				} catch (Exception e) {

+					//no-op

+				}

+			}

+		}

+		return labels;

+	}

+	

+	private static List<StringLabel> getLabels(Locale l, InputStream is) throws Exception {

+		final List<StringLabel> labels = new ArrayList<StringLabel>();

+		SAXParserFactory spf = SAXParserFactory.newInstance();

+	    spf.setNamespaceAware(true);

+		try {

+		    SAXParser parser = spf.newSAXParser();

+		    XMLReader xr = parser.getXMLReader();

+		    xr.setContentHandler(new ContentHandler() {

+		    	StringLabel label = null;

+		    	

+				@Override

+				public void startPrefixMapping(String prefix, String uri) throws SAXException {}

+				

+				@Override

+				public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {

+					if (ENTRY_ELEMENT.equals(localName)) {

+						label = new StringLabel(atts.getValue(KEY_ATTR), "");

+					}

+				}

+				

+				@Override

+				public void startDocument() throws SAXException {}

+				

+				@Override

+				public void skippedEntity(String name) throws SAXException {}

+				

+				@Override

+				public void setDocumentLocator(Locator locator) {}

+				

+				@Override

+				public void processingInstruction(String target, String data) throws SAXException {}

+				

+				@Override

+				public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {}

+				

+				@Override

+				public void endPrefixMapping(String prefix) throws SAXException {}

+				

+				@Override

+				public void endElement(String uri, String localName, String qName) throws SAXException {

+					if (ENTRY_ELEMENT.equals(localName)) {

+						labels.add(label);

+					}

+				}

+				

+				@Override

+				public void endDocument() throws SAXException {}

+				

+				@Override

+				public void characters(char[] ch, int start, int length) throws SAXException {

+					StringBuilder sb = new StringBuilder(label.getValue());

+					sb.append(ch, start, length);

+					label.setValue(sb.toString());

+				}

+			});

+			xr.parse(new InputSource(is));

+		} catch (Exception e) {

+			throw e;

+		}

+		return labels;

+	}

+	

+	private List<StringLabel> getLabels(Locale l, final String search) {

+		if (labelCache.get(l) == null) {

+			labelCache.put(l, getLabels(l));

+		}

+		List<StringLabel> result = new ArrayList<StringLabel>(labelCache.get(l));

+		if (!Strings.isEmpty(search)) {

+			CollectionUtils.filter(result, new Predicate() {

+				@Override

+				public boolean evaluate(Object o) {

+					StringLabel sl = (StringLabel)o;

+					return o != null && (sl.getKey().contains(search) || sl.getValue().contains(search));

+				}

+			});

+		}

+		return result;

+	}

+	

+	@Override

+	public StringLabel get(long id) {

+		return null;

+	}

+

+	@Override

+	public List<StringLabel> get(int start, int count) {

+		return null;

+	}

+

+	@Override

+	public List<StringLabel> get(String search, int start, int count, String order) {

+		return null;

+	}

+

+	public List<StringLabel> get(Locale l, final String search, int start, int count, final SortParam<String> sort) {

+		List<StringLabel> result = getLabels(l, search);

+		if (sort != null) {

+			Collections.sort(result, new Comparator<StringLabel>() {

+				@Override

+				public int compare(StringLabel o1, StringLabel o2) {

+					int val = 0;

+					if (KEY_ATTR.equals(sort.getProperty())) {

+						try {

+							int i1 = Integer.parseInt(o1.getKey()), i2 = Integer.parseInt(o2.getKey());

+							val = i1 - i2;

+						} catch (Exception e) {

+							val = o1.getKey().compareTo(o2.getKey());

+						}

+					} else {

+						val = o1.getValue().compareTo(o2.getValue());

+					}

+					return (sort.isAscending() ? 1 : -1) * val;

+				}

+			});

+		}

+		return result.subList(start, start + count > result.size() ? result.size() : start + count);

+	}

+	

+	@Override

+	public long count() {

+		return 0;

+	}

+

+	@Override

+	public long count(String search) {

+		return 0;

+	}

+

+	public long count(Locale l, final String search) {

+		return getLabels(l, search).size();

+	}

+

+	@Override

+	public StringLabel update(StringLabel entity, Long userId) {

+		return null;

+	}

+

+	public StringLabel update(Locale l, StringLabel entity) throws Exception {

+		List<StringLabel> labels = labelCache.get(l);

+		if (!labels.contains(entity)) {

+			labels.add(entity);

+			keys.add(entity.getKey());

+		}

+		storeLabels(l);

+		return entity;

+	}

+	

+	@Override

+	public void delete(StringLabel entity, Long userId) {

+	}

+	

+	public void delete(Locale l, StringLabel entity) throws Exception {

+		List<StringLabel> labels = labelCache.get(l);

+		if (labels.contains(entity)) {

+			labels.remove(entity);

+			keys.remove(entity.getKey());

+			storeLabels(l);

+		}

+	}

+

+	public static void delete(Locale l) {

+		for (Map.Entry<Long, Locale> e : languages.entrySet()) {

+			if (e.getValue().equals(l)) {

+				languages.remove(e.getKey());

+				break;

+			}

+		}

+		labelCache.remove(l);

+		try {

+			URL u = Application.class.getResource(getLabelFileName(l));

+			if (u != null) {

+				File f = new File(u.toURI());

+				if (f.exists()) {

+					f.delete();

+				}

+			}

+		} catch (Exception e) {

+			log.error("Unexpected error while deleting language", e);

+		}

+	}

+}

diff --git a/src/db/java/org/apache/openmeetings/db/dao/log/ConferenceLogDao.java b/src/db/java/org/apache/openmeetings/db/dao/log/ConferenceLogDao.java
new file mode 100644
index 0000000..dbead7a
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/log/ConferenceLogDao.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.log;
+
+import java.util.Date;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.apache.openmeetings.db.entity.log.ConferenceLog;
+import org.apache.openmeetings.db.entity.log.ConferenceLogType;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class ConferenceLogDao {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(ConferenceLogDao.class, OpenmeetingsVariables.webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+	@Autowired
+	private ConferenceLogTypeDao conferenceLogTypeDao;
+
+	public Long addConferenceLog(String eventType, Long userId, String streamid, 
+			Long room_id, String userip, String scopeName, 
+			String externalUserId, String externalUserType, String email,
+			String firstname, String lastname) {
+		try {
+			
+			ConferenceLogType confLogType = conferenceLogTypeDao.getConferenceLogTypeByEventName(eventType);
+			if (confLogType == null) {
+				conferenceLogTypeDao.addConferenceLogType(eventType);
+				confLogType = conferenceLogTypeDao.getConferenceLogTypeByEventName(eventType);
+			}
+			
+			ConferenceLog confLog = new ConferenceLog();
+			confLog.setConferenceLogType(confLogType);
+			confLog.setInserted(new Date());
+			confLog.setUserId(userId);
+			confLog.setStreamid(streamid);
+			confLog.setScopeName(scopeName);
+			confLog.setRoom_id(room_id);
+			confLog.setUserip(userip);
+			confLog.setExternalUserId(externalUserId);
+			confLog.setExternalUserType(externalUserType);
+			confLog.setFirstname(firstname);
+			confLog.setLastname(lastname);
+			confLog.setEmail(email);
+			
+			confLog = em.merge(confLog);
+			Long confLogId = confLog.getConferenceLogId();
+
+			return confLogId;
+		} catch (Exception ex2) {
+			log.error("[addConferenceLog]: ",ex2);
+		}
+		return null;
+	}
+	
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/log/ConferenceLogTypeDao.java b/src/db/java/org/apache/openmeetings/db/dao/log/ConferenceLogTypeDao.java
new file mode 100644
index 0000000..22472ae
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/log/ConferenceLogTypeDao.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.log;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.log.ConferenceLogType;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class ConferenceLogTypeDao {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(ConferenceLogTypeDao.class, OpenmeetingsVariables.webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+
+	public Long addConferenceLogType(String eventType) {
+		try {
+			ConferenceLogType confLogType = new ConferenceLogType();
+			confLogType.setEventType(eventType);
+			confLogType.setInserted(new Date());
+			confLogType = em.merge(confLogType);
+			return confLogType.getConferenceLogTypeId();
+		} catch (Exception ex2) {
+			log.error("[addConferenceLogType]: ", ex2);
+		}
+		return null;
+	}
+	
+	public ConferenceLogType getConferenceLogTypeByEventName(String eventType) {
+		try {
+			TypedQuery<ConferenceLogType> query = em.createNamedQuery("getConferenceLogTypeByEventName", ConferenceLogType.class);
+			query.setParameter("eventType",eventType);
+			
+			//Seems like this does throw an error sometimes cause it does not return a unique Result
+			//ConferenceLogType confLogType = (ConferenceLogType) query.getSingleResult();
+			List<ConferenceLogType> confLogTypes = query.getResultList();
+			if (confLogTypes != null && confLogTypes.size() > 0) {
+				return confLogTypes.get(0);
+			}
+		} catch (Exception ex2) {
+			log.error("[getConferenceLogTypeByEventName]: ", ex2);
+		}
+		return null;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingDao.java b/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingDao.java
new file mode 100644
index 0000000..3d9c231
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingDao.java
@@ -0,0 +1,355 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.record;
+
+import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.OGG_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.getMp4Recording;
+import static org.apache.openmeetings.util.OmFileHelper.getOggRecording;
+import static org.apache.openmeetings.util.OmFileHelper.getRecording;
+import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.record.RecordingContainerData;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecording.Status;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author sebastianwagner
+ * 
+ */
+@Transactional
+public class FlvRecordingDao {
+	
+	private static final Logger log = Red5LoggerFactory.getLogger(FlvRecordingDao.class, webAppRootKey);
+	
+	@PersistenceContext
+	private EntityManager em;
+	@Autowired
+	private UserDao userDao;
+
+	public FlvRecording get(Long flvRecordingId) {
+		try {
+			TypedQuery<FlvRecording> query = em.createNamedQuery("getRecordingById", FlvRecording.class);
+			query.setParameter("id", flvRecordingId);
+
+			FlvRecording flvRecording = null;
+			try {
+				flvRecording = query.getSingleResult();
+			} catch (NoResultException ex) {
+			}
+			return flvRecording;
+		} catch (Exception ex2) {
+			log.error("[getFlvRecordingById]: ", ex2);
+		}
+		return null;
+	}
+
+	public FlvRecording getRecordingByHash(String hash) {
+		try {
+			TypedQuery<FlvRecording> query = em.createNamedQuery("getRecordingByHash", FlvRecording.class);
+			query.setParameter("fileHash", hash);
+
+			try {
+				return query.getSingleResult();
+			} catch (NoResultException ex) {
+				// noop
+			}
+		} catch (Exception ex2) {
+			log.error("[getRecordingByHash]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FlvRecording> getFlvRecordings() {
+		try {
+			return em.createQuery("SELECT c FROM FlvRecording c WHERE c.deleted = false", FlvRecording.class)
+					.getResultList();
+		} catch (Exception ex2) {
+			log.error("[getFlvRecordings]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FlvRecording> getFlvRecordingByExternalUserId(String externalUserId, String externalUserType) {
+		try {
+			log.debug("getFlvRecordingByExternalUserId :externalUserId: {}; externalType: {}", externalUserId, externalUserType);
+
+			TypedQuery<FlvRecording> query = em.createNamedQuery("getRecordingsByExternalUser", FlvRecording.class);
+			query.setParameter("externalUserId", externalUserId);
+			query.setParameter("externalUserType", externalUserType);
+
+			List<FlvRecording> flvRecordingList = query.getResultList();
+
+			log.debug("getFlvRecordingByExternalUserId :: " + flvRecordingList.size());
+
+			return flvRecordingList;
+		} catch (Exception ex2) {
+			log.error("[getFlvRecordingByExternalUserId]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FlvRecording> getFlvRecordingByExternalRoomTypeAndCreator(String externalRoomType, Long insertedBy) {
+		try {
+
+			log.debug("getFlvRecordingByExternalRoomType :externalRoomType: " + externalRoomType);
+
+			String hql = "SELECT c FROM FlvRecording c, Room r WHERE c.room_id = r.rooms_id "
+					+ "AND r.externalRoomType LIKE :externalRoomType AND c.insertedBy LIKE :insertedBy "
+					+ "AND c.deleted = false";
+
+			TypedQuery<FlvRecording> query = em.createQuery(hql, FlvRecording.class);
+			query.setParameter("externalRoomType", externalRoomType);
+			query.setParameter("insertedBy", insertedBy);
+			query.setParameter("deleted", true);
+
+			List<FlvRecording> flvRecordingList = query.getResultList();
+
+			log.debug("getFlvRecordingByExternalRoomType :: " + flvRecordingList.size());
+
+			return flvRecordingList;
+		} catch (Exception ex2) {
+			log.error("[getFlvRecordingByExternalRoomType]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FlvRecording> getAllFlvRecordings() {
+		try {
+			String hql = "SELECT c FROM FlvRecording c LEFT JOIN FETCH c.flvRecordingMetaData ORDER BY c.flvRecordingId";
+
+			TypedQuery<FlvRecording> query = em.createQuery(hql, FlvRecording.class);
+
+			return query.getResultList();
+		} catch (Exception ex2) {
+			log.error("[getAllFlvRecordings]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FlvRecording> getFlvRecordingByExternalRoomType(String externalRoomType) {
+		try {
+
+			log.debug("getFlvRecordingByExternalRoomType :externalRoomType: " + externalRoomType);
+
+			String hql = "SELECT c FROM FlvRecording c, Room r " + "WHERE c.room_id = r.rooms_id "
+					+ "AND r.externalRoomType LIKE :externalRoomType " + "AND c.deleted <> :deleted ";
+
+			TypedQuery<FlvRecording> query = em.createQuery(hql, FlvRecording.class);
+			query.setParameter("externalRoomType", externalRoomType);
+			query.setParameter("deleted", true);
+
+			List<FlvRecording> flvRecordingList = query.getResultList();
+
+			log.debug("getFlvRecordingByExternalRoomType :: " + flvRecordingList.size());
+
+			return flvRecordingList;
+		} catch (Exception ex2) {
+			log.error("[getFlvRecordingByExternalRoomType]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FlvRecording> getRecordingsByExternalType(String externalType) {
+		try {
+			log.debug("getRecordingsByExternalType :externalType: " + externalType);
+
+			TypedQuery<FlvRecording> query = em.createNamedQuery("getRecordingsByExternalType", FlvRecording.class);
+			query.setParameter("externalType", externalType);
+
+			return query.getResultList();
+		} catch (Exception ex2) {
+			log.error("[getRecordingsByExternalType]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FlvRecording> getFlvRecordingRootByPublic(Long orgId) {
+		TypedQuery<FlvRecording> q = em.createNamedQuery(orgId == null ? "getRecordingsPublic" : "getRecordingsByOrganization", FlvRecording.class);
+		if (orgId != null) {
+			q.setParameter("organization_id", orgId);
+		}
+		return q.getResultList();
+	}
+
+	public List<FlvRecording> getFlvRecordingRootByOwner(Long ownerId) {
+		return em.createNamedQuery("getRecordingsByOwner", FlvRecording.class).setParameter("ownerId", ownerId).getResultList();
+	}
+
+	public List<FlvRecording> getFlvRecordingByRoomId(Long room_id) {
+		try {
+
+			String hql = "SELECT c FROM FlvRecording c " + "WHERE c.deleted <> :deleted " + "AND c.room_id = :room_id "
+					+ "ORDER BY c.folder DESC, c.fileName ";
+
+			TypedQuery<FlvRecording> query = em.createQuery(hql, FlvRecording.class);
+			query.setParameter("deleted", true);
+			query.setParameter("room_id", room_id);
+
+			List<FlvRecording> flvRecordingList = query.getResultList();
+
+			return flvRecordingList;
+		} catch (Exception ex2) {
+			log.error("[getFlvRecordingByOwner]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FlvRecording> getFlvRecordingByParent(Long parentId) {
+		return em.createNamedQuery("getRecordingsByParent", FlvRecording.class).setParameter("parentId", parentId).getResultList();
+	}
+
+	public void updateFlvRecordingEndTime(Long flvRecordingId, Date recordEnd, Long organization_id) {
+		try {
+
+			FlvRecording fId = get(flvRecordingId);
+
+			fId.setProgressPostProcessing(0);
+			fId.setRecordEnd(recordEnd);
+			fId.setOrganization_id(organization_id);
+
+			update(fId);
+		} catch (Exception ex2) {
+			log.error("[updateFlvRecordingEndTime]: ", ex2);
+		}
+	}
+
+	/**
+	 * @param fileExplorerItemId
+	 */
+	public boolean delete(Long flvRecordingId) {
+		try {
+
+			FlvRecording f = get(flvRecordingId);
+			return delete(f);
+		} catch (Exception ex2) {
+			log.error("[delete]: ", ex2);
+		}
+
+		return false;
+	}
+
+	public boolean delete(FlvRecording f) {
+		if (f == null || f.getFlvRecordingId() == 0) {
+			return false;
+		}
+		f.setDeleted(true);
+		update(f);
+		return true;
+	}
+	
+	public FlvRecording update(FlvRecording f) {
+		try {
+			if (f.getFlvRecordingId() == 0) {
+				f.setInserted(new Date());
+				em.persist(f);
+			} else {
+				f.setUpdated(new Date());
+				if (!em.contains(f)) {
+					f = em.merge(f);
+				}
+			}
+
+		} catch (Exception ex2) {
+			log.error("[update]: ", ex2);
+		}
+		return f;
+	}
+
+	public void resetProcessingStatus() {
+		em.createNamedQuery("resetRecordingProcessingStatus")
+			.setParameter("error", Status.ERROR)
+			.setParameter("recording", Status.RECORDING)
+			.setParameter("converting", Status.CONVERTING)
+			.executeUpdate();
+	}
+	
+	public RecordingContainerData getRecordingContainerData(long userId) {
+		try {
+			RecordingContainerData containerData = new RecordingContainerData();
+	
+			// User Home Recordings
+			List<FlvRecording> homeFlvRecordings = getFlvRecordingRootByOwner(userId);
+			long homeFileSize = 0;
+	
+			for (FlvRecording homeFlvRecording : homeFlvRecordings) {
+				homeFileSize += getRecordingSize(homeFlvRecording);
+			}
+	
+			containerData.setUserHomeSize(homeFileSize);
+			
+			// Public Recordings
+			long publicFileSize = 0;
+			
+			//get all organizations the user can view
+			for (Organisation_Users ou : userDao.get(userId).getOrganisation_users()) {
+				List<FlvRecording>publicFlvRecordings = getFlvRecordingRootByPublic(ou.getOrganisation().getOrganisation_id());
+				//get sizes
+				for (FlvRecording publicFlvRecording : publicFlvRecordings) {
+					publicFileSize += getRecordingSize(publicFlvRecording);
+				}
+			}
+			containerData.setPublicFileSize(publicFileSize);
+
+			return containerData;
+		} catch (Exception ex2) {
+			log.error("[getRecordingContainerData]: ", ex2);
+		}
+		return null;
+	}
+	
+	private long getRecordingSize(FlvRecording r) {
+		long size = 0;
+
+		if (isRecordingExists(r.getFileHash())) {
+			size += getRecording(r.getFileHash()).length();
+		}
+		if (isRecordingExists(r.getAlternateDownload())) {
+			size += getRecording(r.getAlternateDownload()).length();
+		}
+		if (isRecordingExists(r.getPreviewImage())) {
+			size += getRecording(r.getPreviewImage()).length();
+		}
+		if (isRecordingExists(r.getFileHash() + MP4_EXTENSION)) {
+			size += getMp4Recording(r.getFileHash()).length();
+		}
+		if (isRecordingExists(r.getFileHash() + OGG_EXTENSION)) {
+			size += getOggRecording(r.getFileHash()).length();
+		}
+		for (FlvRecording flvRecording : getFlvRecordingByParent(r.getFlvRecordingId())) {
+			size += getRecordingSize(flvRecording);
+		}
+		return size;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingLogDao.java b/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingLogDao.java
new file mode 100644
index 0000000..5548ffc
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingLogDao.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.record;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecordingLog;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class FlvRecordingLogDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(FlvRecordingDao.class, webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+	
+	public long countErrors(Long recordingId) {
+		return em.createNamedQuery("countErrorRecordingLogsByRecording", Long.class)
+				.setParameter("recId", recordingId).getSingleResult();
+	}	
+	
+	public List<FlvRecordingLog> getByRecordingId(Long recordingId) {
+		return em.createNamedQuery("getRecordingLogsByRecording", FlvRecordingLog.class)
+				.setParameter("recId", recordingId).getResultList();
+	}	
+	
+	public void deleteByRecordingId(Long recordingId) {
+		em.createNamedQuery("deleteErrorRecordingLogsByRecording").setParameter("recId", recordingId).executeUpdate();
+	}
+	
+	public Long addFLVRecordingLog(String msgType, FlvRecording flvRecording, ConverterProcessResult returnMap) {
+		try { 
+			FlvRecordingLog flvRecordingLog = new FlvRecordingLog();
+			flvRecordingLog.setInserted(new Date());
+			flvRecordingLog.setExitValue(returnMap.getExitValue());
+			flvRecordingLog.setFlvRecording(flvRecording);
+			flvRecordingLog.setFullMessage(returnMap.buildLogMessage());
+			flvRecordingLog.setMsgType(msgType);
+			
+			flvRecordingLog = em.merge(flvRecordingLog);
+			Long flvRecordingLogId = flvRecordingLog.getFlvRecordingLogId();
+			
+			return flvRecordingLogId;
+		} catch (Exception ex2) {
+			log.error("[addFLVRecordingLog]: ",ex2);
+		}
+		return -1L;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDataDao.java b/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDataDao.java
new file mode 100644
index 0000000..1b5677d
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDataDao.java
@@ -0,0 +1,162 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.record;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData.Status;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class FlvRecordingMetaDataDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(FlvRecordingMetaDataDao.class, webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+	@Autowired
+	private FlvRecordingDao flvRecordingDao;
+
+	public FlvRecordingMetaData get(Long flvRecordingMetaDataId) {
+		try {
+			TypedQuery<FlvRecordingMetaData> query = em.createNamedQuery("getMetaById", FlvRecordingMetaData.class);
+			query.setParameter("id", flvRecordingMetaDataId);
+
+			FlvRecordingMetaData flvRecordingMetaData = null;
+			try {
+				flvRecordingMetaData = query.getSingleResult();
+			} catch (NoResultException ex) {
+			}
+
+			return flvRecordingMetaData;
+		} catch (Exception ex2) {
+			log.error("[get]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<FlvRecordingMetaData> getByRecording(Long recordingId) {
+		return em.createNamedQuery("getMetaByRecording", FlvRecordingMetaData.class).setParameter("recordingId", recordingId).getResultList();
+	}
+
+	public List<FlvRecordingMetaData> getAudioMetaDataByRecording(Long flvRecordingId) {
+		try {
+			TypedQuery<FlvRecordingMetaData> query = em.createNamedQuery("getAudioMetaByRecording", FlvRecordingMetaData.class);
+			query.setParameter("recordingId", flvRecordingId);
+			query.setParameter("none", Status.NONE);
+
+			return query.getResultList();
+		} catch (Exception ex2) {
+			log.error("[getAudioMetaDataByRecording]: ", ex2);
+		}
+		return null;
+	}
+
+	public FlvRecordingMetaData getScreenMetaDataByRecording(Long flvRecordingId) {
+		try {
+			TypedQuery<FlvRecordingMetaData> query = em.createNamedQuery("getScreenMetaByRecording", FlvRecordingMetaData.class);
+			query.setParameter("recordingId", flvRecordingId);
+
+			List<FlvRecordingMetaData> flvRecordingMetaDatas = query.getResultList();
+
+			if (flvRecordingMetaDatas.size() > 0) {
+				return flvRecordingMetaDatas.get(0);
+			}
+		} catch (Exception ex2) {
+			log.error("[getScreenMetaDataByRecording]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long addFlvRecordingMetaData(Long flvRecordingId, String freeTextUserName, Date recordStart, Boolean isAudioOnly,
+			Boolean isVideoOnly, Boolean isScreenData, String streamName, Integer interiewPodId) {
+		try {
+
+			FlvRecordingMetaData flvRecordingMetaData = new FlvRecordingMetaData();
+
+			flvRecordingMetaData.setDeleted(false);
+
+			flvRecordingMetaData.setFlvRecording(flvRecordingDao.get(flvRecordingId));
+			flvRecordingMetaData.setFreeTextUserName(freeTextUserName);
+			flvRecordingMetaData.setInserted(new Date());
+
+			flvRecordingMetaData.setRecordStart(recordStart);
+
+			flvRecordingMetaData.setAudioOnly(isAudioOnly);
+			flvRecordingMetaData.setVideoOnly(isVideoOnly);
+			flvRecordingMetaData.setScreenData(isScreenData);
+
+			flvRecordingMetaData.setStreamName(streamName);
+
+			flvRecordingMetaData.setInteriewPodId(interiewPodId);
+
+			flvRecordingMetaData = em.merge(flvRecordingMetaData);
+			Long flvRecordingMetaDataId = flvRecordingMetaData.getFlvRecordingMetaDataId();
+
+			return flvRecordingMetaDataId;
+
+		} catch (Exception ex2) {
+			log.error("[addFlvRecordingMetaData]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long updateFlvRecordingMetaDataEndDate(Long metaId, Date recordEnd) {
+		try {
+			FlvRecordingMetaData meta = get(metaId);
+
+			meta.setRecordEnd(recordEnd);
+			
+			log.debug("updateFlvRecordingMetaDataEndDate :: Start Date :" + meta.getRecordStart());
+			log.debug("updateFlvRecordingMetaDataEndDate :: End Date :" + meta.getRecordEnd());
+			
+			update(meta);
+			
+			return metaId;
+		} catch (Exception ex2) {
+			log.error("[updateFlvRecordingMetaDataEndDate]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long update(FlvRecordingMetaData flvRecordingMetaData) {
+		try {
+			if (flvRecordingMetaData.getFlvRecordingMetaDataId() == 0) {
+				em.persist(flvRecordingMetaData);
+			} else {
+				if (!em.contains(flvRecordingMetaData)) {
+					em.merge(flvRecordingMetaData);
+				}
+			}
+		} catch (Exception ex2) {
+			log.error("[update]: ", ex2);
+		}
+		return null;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDeltaDao.java b/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDeltaDao.java
new file mode 100644
index 0000000..bf89502
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/record/FlvRecordingMetaDeltaDao.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.record;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaDelta;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author sebastianwagner
+ *
+ */
+@Transactional
+public class FlvRecordingMetaDeltaDao {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(FlvRecordingMetaDeltaDao.class,
+			OpenmeetingsVariables.webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+	
+	public List<FlvRecordingMetaDelta> getFlvRecordingMetaDeltaByMetaId(Long flvRecordingMetaDataId) {
+		try { 
+			
+			String hql = "SELECT c FROM FlvRecordingMetaDelta c " +
+					"WHERE c.flvRecordingMetaDataId = :flvRecordingMetaDataId";
+			
+			TypedQuery<FlvRecordingMetaDelta> query = em.createQuery(hql, FlvRecordingMetaDelta.class);
+			query.setParameter("flvRecordingMetaDataId", flvRecordingMetaDataId);
+			
+			List<FlvRecordingMetaDelta> flvRecordingMetaDeltas = query.getResultList();
+			
+			return flvRecordingMetaDeltas;
+		} catch (Exception ex2) {
+			log.error("[getFlvRecordingMetaDeltaByMetaId]: ",ex2);
+		}
+		return null;
+	}
+	
+	
+	
+	public Long addFlvRecordingMetaDelta(FlvRecordingMetaDelta flvRecordingMetaDelta) {
+		try { 
+			
+			flvRecordingMetaDelta = em.merge(flvRecordingMetaDelta);
+			Long flvRecordingMetaDeltaId = flvRecordingMetaDelta.getFlvRecordingMetaDeltaId();
+			
+			log.debug("flvRecordingMetaDeltaId "+flvRecordingMetaDeltaId);
+			
+			return flvRecordingMetaDeltaId;
+		} catch (Exception ex2) {
+			log.error("[addFlvRecordingMetaDelta]: ",ex2);
+		}
+		return null;
+	}
+	
+	public Long updateFlvRecordingMetaDelta(FlvRecordingMetaDelta flvRecordingMetaDelta) {
+		try { 
+			if (flvRecordingMetaDelta.getFlvRecordingMetaDataId() == 0) {
+				em.persist(flvRecordingMetaDelta);
+		    } else {
+		    	if (!em.contains(flvRecordingMetaDelta)) {
+		    		em.merge(flvRecordingMetaDelta);
+			    }
+			}
+			
+			return flvRecordingMetaDelta.getFlvRecordingMetaDataId();
+		} catch (Exception ex2) {
+			log.error("[updateFlvRecordingMetaDelta]: ",ex2);
+		}
+		return null;
+	}	
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/room/ClientDao.java b/src/db/java/org/apache/openmeetings/db/dao/room/ClientDao.java
new file mode 100644
index 0000000..3a56399
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/ClientDao.java
@@ -0,0 +1,177 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.room;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * Persistence of client objects to database is only available if so configured!
+ * 
+ * @author sebawagner
+ *
+ */
+@Transactional
+public class ClientDao {
+	
+	@PersistenceContext
+	private EntityManager em;
+	
+	private static List<Long> EMPTY_LIST = new ArrayList<Long>(0);
+	
+	public void cleanAllClients() {
+		em.createNamedQuery("deleteAll").executeUpdate();
+	}
+
+	public void cleanClientsByServer(Server server) {
+		em.createNamedQuery("deleteClientsByServer").
+			setParameter("server", server).
+			executeUpdate();
+	}
+	
+	public Client add(Client entity) {
+		em.persist(entity);
+		return entity;
+	}
+	
+	public Client update(Client entity) {
+		em.merge(entity);
+		return entity;
+	}
+	
+	public void delete(Client entity) {
+		Query q = em.createNamedQuery("deletedById");
+		q.setParameter("id", entity.getId());
+		q.executeUpdate();
+	}
+	
+	public void removeClientByServerAndStreamId(Server server, String streamId) {
+		Query q = em.createNamedQuery("deletedByServerAndStreamId");
+		q.setParameter("server", server);
+		q.setParameter("streamid", streamId);
+		q.executeUpdate();
+	}
+	
+	public int countClients() {
+		return em.createNamedQuery("countClients", Long.class).getSingleResult().intValue();
+	}
+	
+	public int countClientsByServer(Server server) {
+		TypedQuery<Long> q = em.createNamedQuery("countClientsByServer", Long.class);
+		q.setParameter("server", server);
+		return q.getSingleResult().intValue();
+	}
+
+	public long countClientsByServerAndStreamId(Server server, String streamId) {
+		TypedQuery<Long> q = em.createNamedQuery("countClientsByServerAndStreamId", Long.class);
+		q.setParameter("streamid", streamId);
+		q.setParameter("server", server);
+		return q.getSingleResult();
+	}
+
+	/**
+	 * Query.getSingleResult would throw an error if result is null, 
+	 * see: http://stackoverflow.com/questions/2002993/jpa-getsingleresult-or-null
+	 * 
+	 * @param server
+	 * @param streamId
+	 * @return
+	 */
+	public Client getClientByServerAndStreamId(Server server, String streamId) {
+		TypedQuery<Client> q = em.createNamedQuery("getClientByServerAndStreamId", Client.class);
+		q.setParameter("streamid", streamId);
+		q.setParameter("server", server);
+		List<Client> ll = q.getResultList();
+		if (ll.size() == 1) {
+			return ll.get(0);
+		} else if (ll.size() == 0) {
+			return null;
+		}
+		throw new RuntimeException("more then one client was found streamId "+ streamId + " server "+server);
+	}
+
+	public List<Client> getClientsByPublicSIDAndServer(Server server, String publicSID) {
+		TypedQuery<Client> q = em.createNamedQuery("getClientsByPublicSIDAndServer", Client.class);
+		q.setParameter("server", server);
+		q.setParameter("publicSID", publicSID);
+		return q.getResultList();
+	}
+
+	public List<Client> getClientsByPublicSID(String publicSID) {
+		TypedQuery<Client> q = em.createNamedQuery("getClientsByPublicSID", Client.class);
+		q.setParameter("publicSID", publicSID);
+		return q.getResultList();
+	}
+
+	public List<Client> getClientsByServer(Server server) {
+		TypedQuery<Client> q = em.createNamedQuery("getClientsByServer", Client.class);
+		q.setParameter("server", server);	
+		return q.getResultList();
+	}
+
+	public List<Client> getClients() {
+		return em.createNamedQuery("getClients", Client.class).getResultList();
+	}
+	
+	public List<Client> getClientsWithServer() {
+		return em.createNamedQuery("getClientsWithServer", Client.class).getResultList();
+	}
+
+	public List<Client> getClientsByUserId(Server server, Long userId) {
+		TypedQuery<Client> q = em.createNamedQuery("getClientsByUserId", Client.class);
+		q.setParameter("server", server);
+		q.setParameter("user_id", userId);	
+		return q.getResultList();
+	}
+
+	public List<Client> getClientsByRoomId(Long roomId) {
+		TypedQuery<Client> q = em.createNamedQuery("getClientsByRoomId", Client.class);
+		q.setParameter("room_id", roomId);	
+		return q.getResultList();
+	}
+
+	/**
+	 * returns a list of servers or an empty list in case no roomIds are found
+	 * 
+	 * @param server
+	 * @return
+	 */
+	public List<Long> getRoomsIdsByServer(Server server) {
+		Query q = em.createNamedQuery("getRoomsIdsByServer");
+		q.setParameter("server", server);
+		@SuppressWarnings("unchecked")
+		List<Long> resultList = q.getResultList();
+		//if the result list contains only a value null, it means it 
+		//was empty and no roomid's have been found
+		if (resultList.size() == 1 && resultList.get(0) == null) {
+			return EMPTY_LIST;
+		}
+		return resultList;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/room/IRoomManager.java b/src/db/java/org/apache/openmeetings/db/dao/room/IRoomManager.java
new file mode 100644
index 0000000..12cbc36
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/IRoomManager.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.room;
+
+import org.apache.openmeetings.db.entity.room.Room;
+
+//FIXME HACK to bypass cross project compilation
+public interface IRoomManager {
+	Room  getRoomByOwnerAndTypeId(Long ownerId, Long roomtypesId, String roomName);
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/room/InvitationDao.java b/src/db/java/org/apache/openmeetings/db/dao/room/InvitationDao.java
new file mode 100644
index 0000000..443f8c1
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/InvitationDao.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.room;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class InvitationDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(InvitationDao.class, webAppRootKey);
+	
+	@PersistenceContext
+	private EntityManager em;
+	
+	public Invitation update(Invitation invitation) {
+		if (invitation.getId() == null) {
+			invitation.setInserted(new Date());
+			em.persist(invitation);
+		} else {
+			invitation.setUpdated(new Date());
+			invitation = em.merge(invitation);
+		}
+		return invitation;
+	}
+	
+	public Invitation get(Long invId) {
+		try {
+			
+			TypedQuery<Invitation> query = em.createNamedQuery("getInvitationbyId", Invitation.class);
+			query.setParameter("id", invId);
+			
+			try {
+				return query.getSingleResult();
+			} catch (NoResultException ex) {
+			}
+
+		} catch (Exception e) {
+			log.error("get : ", e);
+		}
+		return null;
+	}
+	
+	public Invitation getInvitationByHashCode(String hashCode, boolean hidePass) {
+		try {
+			
+			TypedQuery<Invitation> query = em.createNamedQuery("getInvitationByHashCode", Invitation.class);
+			query.setParameter("hashCode", hashCode);
+			
+			try {
+				return query.getSingleResult();
+			} catch (NoResultException ex) {
+			}
+			
+		} catch (Exception e) {
+			log.error("getInvitationByHashCode : ", e);
+		}
+		return null;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/room/PollDao.java b/src/db/java/org/apache/openmeetings/db/dao/room/PollDao.java
new file mode 100644
index 0000000..2388ca6
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/PollDao.java
@@ -0,0 +1,196 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.room;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.PollType;
+import org.apache.openmeetings.db.entity.room.RoomPoll;
+import org.apache.openmeetings.db.entity.room.RoomPollAnswers;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class PollDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(PollDao.class, webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private RoomDao roomDao;
+
+	public Long addPollType(Long labelId, Boolean isNumeric) {
+		log.debug("Adding poll type: " + labelId + ", " + isNumeric);
+		PollType pt = new PollType();
+		pt.setLabel(labelId);
+		pt.setIsNumericAnswer(isNumeric);
+
+		em.persist(pt);
+		
+		return pt.getPollTypesId();
+	}
+	
+	public List<PollType> getPollTypes() {
+		return em.createNamedQuery("getPollTypes", PollType.class)
+				.getResultList();
+	}
+	
+	public PollType getPollType(Long typeId) {
+		TypedQuery<PollType> q = em.createNamedQuery("getPollType", PollType.class);
+		q.setParameter("pollTypesId", typeId);
+		return q.getSingleResult();
+	}
+	
+	public RoomPoll createPoll(Client rc, String pollName, String pollQuestion, Long pollTypeId) {
+		RoomPoll roomP = new RoomPoll();
+		
+		roomP.setCreatedBy(userDao.get(rc.getUser_id()));
+		roomP.setCreated(new Date());
+		roomP.setPollName(pollName);
+		roomP.setPollQuestion(pollQuestion);
+		roomP.setPollType(getPollType(pollTypeId));
+		roomP.setRoom(roomDao.get(rc.getRoom_id()));
+		
+		em.persist(roomP);
+		return roomP;
+	}
+	
+	public void savePollBackup(RoomPoll rp) {
+		em.persist(rp);
+	}
+
+
+	public RoomPoll updatePoll(RoomPoll rp) {
+		return em.merge(rp);
+	}
+
+	public boolean closePoll(Long room_id){
+		try {
+			log.debug(" :: closePoll :: ");
+			Query q = em.createNamedQuery("closePoll");
+			q.setParameter("rooms_id", room_id);
+			q.setParameter("archived", true);
+			return q.executeUpdate() > 0;
+		} catch (Exception err) {
+			log.error("[closePoll]", err);
+		}
+		return false;
+	}
+
+	public boolean deletePoll(Long poll_id){
+		try {
+			log.debug(" :: deletePoll :: ");
+			Query q = em.createNamedQuery("deletePoll");
+			q.setParameter("roomPollId", poll_id);
+			return q.executeUpdate() > 0;
+		} catch (Exception err) {
+			log.error("[deletePoll]", err);
+		}
+		return false;
+	}
+
+	public RoomPoll getPoll(Long room_id) {
+		try {
+			log.debug(" :: getPoll :: " + room_id);
+			TypedQuery<RoomPoll> q = em.createNamedQuery("getPoll", RoomPoll.class);
+			q.setParameter("room_id", room_id);
+			q.setParameter("archived", false);
+			return q.getSingleResult();
+		} catch (NoResultException nre) {
+			//expected
+		} catch (Exception err) {
+			log.error("[getPoll]", err);
+		}
+		return null;
+	}
+	
+	public List<RoomPoll> getPollListBackup() {
+		try {
+			TypedQuery<RoomPoll> q = em.createNamedQuery("getPollListBackup", RoomPoll.class);
+			return q.getResultList();
+		} catch (NoResultException nre) {
+			//expected
+		} catch (Exception err) {
+			log.error("[getPollListBackup]", err);
+		}
+		return null;
+	}
+	
+	public List<RoomPoll> getArchivedPollList(Long room_id) {
+		try {
+			log.debug(" :: getArchivedPollList :: " + room_id);
+			TypedQuery<RoomPoll> q = em.createNamedQuery("getArchivedPollList",RoomPoll.class);
+			q.setParameter("room_id", room_id);
+			q.setParameter("archived", true);
+			return q.getResultList();
+		} catch (NoResultException nre) {
+			//expected
+		} catch (Exception err) {
+			log.error("[getArchivedPollList]", err);
+		}
+		return null;
+	}
+	
+	public boolean hasPoll(Long room_id) {
+		try {
+			log.debug(" :: hasPoll :: " + room_id);
+			TypedQuery<Long> q = em.createNamedQuery("hasPoll", Long.class);
+			q.setParameter("room_id", room_id);
+			q.setParameter("archived", false);
+			return q.getSingleResult() > 0;
+		} catch (NoResultException nre) {
+			//expected
+		} catch (Exception err) {
+			log.error("[hasPoll]", err);
+		}
+		return false;
+	}
+	
+	public boolean hasVoted(Long room_id, Long userid) {
+		try {
+			log.debug(" :: hasVoted :: " + room_id + ", " + userid);
+			TypedQuery<RoomPollAnswers> q = em.createNamedQuery("hasVoted", RoomPollAnswers.class);
+			q.setParameter("room_id", room_id);
+			q.setParameter("userid", userid);
+			q.setParameter("archived", false);
+			q.getSingleResult();
+			return true;
+		} catch (NoResultException nre) {
+			//expected
+		} catch (Exception err) {
+			log.error("[hasVoted]", err);
+		}
+		return false;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/room/RoomDao.java b/src/db/java/org/apache/openmeetings/db/dao/room/RoomDao.java
new file mode 100644
index 0000000..32a7693
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/RoomDao.java
@@ -0,0 +1,189 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.room;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.TimeZone;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openjpa.persistence.OpenJPAPersistence;
+import org.apache.openjpa.persistence.OpenJPAQuery;
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.util.DaoHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class RoomDao implements IDataProviderDao<Room> {
+	private static final Logger log = Red5LoggerFactory.getLogger(RoomDao.class, webAppRootKey);
+	public final static String[] searchFields = {"name"};
+	
+	@PersistenceContext
+	private EntityManager em;
+    @Autowired
+	private ConfigurationDao cfgDao;
+    @Autowired
+    private SipDao sipDao;
+	@Autowired
+	private UserDao usersDao;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+
+	public Room get(long id) {
+		TypedQuery<Room> q = em.createNamedQuery("getRoomById", Room.class);
+		q.setParameter("id", id);
+		@SuppressWarnings("unchecked")
+		OpenJPAQuery<Room> kq = OpenJPAPersistence.cast(q);
+		kq.getFetchPlan().addFetchGroup("roomModerators");
+		List<Room> l = kq.getResultList();
+		return l.isEmpty() ? null : l.get(0);
+	}
+
+	public List<Room> get() {
+		TypedQuery<Room> q = em.createNamedQuery("getBackupRooms", Room.class);
+		@SuppressWarnings("unchecked")
+		OpenJPAQuery<Room> kq = OpenJPAPersistence.cast(q);
+		kq.getFetchPlan().addFetchGroup("roomModerators");
+		return kq.getResultList();
+	}
+	
+	public List<Room> get(int start, int count) {
+		TypedQuery<Room> q = em.createNamedQuery("getNondeletedRooms", Room.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+
+	public List<Room> get(String search, int start, int count, String sort) {
+		TypedQuery<Room> q = em.createQuery(DaoHelper.getSearchQuery("Room", "r", search, true, false, sort, searchFields), Room.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+
+	public long count() {
+		TypedQuery<Long> q = em.createNamedQuery("countRooms", Long.class);
+		return q.getSingleResult();
+	}
+
+	public long count(String search) {
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Room", "r", search, true, true, null, searchFields), Long.class);
+		return q.getSingleResult();
+	}
+
+	public List<Room> getPublicRooms() {
+		return em.createNamedQuery("getPublicRoomsOrdered", Room.class).getResultList();
+	}
+	
+	public List<Room> getPublicRooms(Long typeId) {
+		return em.createNamedQuery("getPublicRooms", Room.class).setParameter("typeId", typeId).getResultList();
+	}
+	
+	public List<Long> getSipRooms(List<Long> ids) {
+		TypedQuery<Long> q = em.createNamedQuery("getSipRoomIdsByIds", Long.class);
+		q.setParameter("ids", ids);
+		return q.getResultList();
+	}
+
+	public List<Room> getOrganisationRooms(long orgId) {
+		TypedQuery<Room> q = em.createNamedQuery("getOrganisationRooms", Room.class);
+		q.setParameter("orgId", orgId);
+		return q.getResultList();
+	}
+
+	public List<Room> getAppointedRoomsByUser(long userId) {
+		//TODO generalize with AppointmentDao
+		log.debug("getAppointedRoomsByUser : UserID - " + userId);
+
+		TimeZone timeZone = timezoneUtil.getTimeZone(usersDao.get(userId));
+
+		Calendar startCal = Calendar.getInstance(timeZone);
+		startCal.set(Calendar.MINUTE, 0);
+		startCal.set(Calendar.HOUR, 0);
+		startCal.set(Calendar.SECOND, 1);
+
+		Calendar endCal = Calendar.getInstance(timeZone);
+		endCal.set(Calendar.MINUTE, 23);
+		endCal.set(Calendar.HOUR, 59);
+		endCal.set(Calendar.SECOND, 59);
+
+		return em.createNamedQuery("appointedRoomsInRangeByUser", Room.class)
+				.setParameter("userId", userId)
+				.setParameter("starttime", startCal.getTime())
+				.setParameter("endtime", endCal.getTime())
+				.getResultList();
+	}
+	
+	public Long getRoomsCapacityByIds(List<Long> ids) {
+		return ids == null || ids.isEmpty() ? 0
+			: em.createNamedQuery("getRoomsCapacityByIds", Long.class).setParameter("ids", ids).getSingleResult();
+	}
+	
+	private boolean isSipEnabled() {
+		return "yes".equals(cfgDao.getConfValue("red5sip.enable", String.class, "no"));
+	}
+	
+	private String getSipNumber(long roomId) {
+        if (isSipEnabled()) {
+        	return cfgDao.getConfValue("red5sip.room_prefix", String.class, "400") + roomId;
+        }
+        return null;
+	}
+	
+	public Room update(Room entity, Long userId) {
+		if (entity.getRooms_id() == null) {
+			entity.setStarttime(new Date());
+			em.persist(entity);
+		} else {
+			entity.setUpdatetime(new Date());
+		}
+		if (entity.isSipEnabled() && isSipEnabled()) {
+			String sipNumber = getSipNumber(entity.getRooms_id());
+			if (!sipNumber.equals(entity.getConfno())) {
+				entity.setConfno(sipNumber);
+			}
+			sipDao.update(sipNumber, entity.getPin());
+		} else {
+			sipDao.delete(entity.getConfno());
+			entity.setConfno(null);
+			entity.setPin(null);
+		}
+		entity = em.merge(entity);
+		return entity;
+	}
+
+	public void delete(Room entity, Long userId) {
+		entity.setDeleted(true);
+		entity.setSipEnabled(false);
+		update(entity, userId);
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/room/RoomModeratorsDao.java b/src/db/java/org/apache/openmeetings/db/dao/room/RoomModeratorsDao.java
new file mode 100644
index 0000000..bfccca4
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/RoomModeratorsDao.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.room;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.apache.openmeetings.db.entity.room.RoomModerator;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class RoomModeratorsDao {
+	@PersistenceContext
+	private EntityManager em;
+
+	public RoomModerator get(long id) {
+		List<RoomModerator> list = em.createNamedQuery("getRoomModeratorById", RoomModerator.class)
+				.setParameter("roomModeratorsId", id).getResultList();
+		if (!list.isEmpty()) {
+			return list.get(0);
+		}
+		return null;
+	}
+	
+	public List<RoomModerator> get(Collection<Long> ids) {
+		return em.createNamedQuery("getRoomModeratorsByIds", RoomModerator.class).setParameter("ids", ids).getResultList();
+	}
+
+	public List<RoomModerator> getByRoomId(long roomId) {
+		return em.createNamedQuery("getRoomModeratorByRoomId", RoomModerator.class).setParameter("roomId", roomId).getResultList();
+	}
+
+	public RoomModerator update(RoomModerator rm, Long userId) {
+		if (rm.getRoomModeratorsId() == 0) {
+			rm.setStarttime(new Date());
+			em.persist(rm);
+		} else {
+			rm.setUpdatetime(new Date());
+			rm = em.merge(rm);
+		}
+		return rm;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/room/RoomOrganisationDao.java b/src/db/java/org/apache/openmeetings/db/dao/room/RoomOrganisationDao.java
new file mode 100644
index 0000000..373a185
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/RoomOrganisationDao.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.room;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.apache.openmeetings.db.entity.room.RoomOrganisation;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class RoomOrganisationDao {
+	@PersistenceContext
+	private EntityManager em;
+
+	public List<RoomOrganisation> get() {
+		return em.createNamedQuery("getAllRoomsOrganisations", RoomOrganisation.class).getResultList();
+	}
+
+	public RoomOrganisation update(RoomOrganisation entity, Long userId) {
+		if (entity.getRooms_organisation_id() == null) {
+			entity.setStarttime(new Date());
+			em.persist(entity);
+		} else {
+			entity.setUpdatetime(new Date());
+			entity = em.merge(entity);
+		}
+		return entity;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/room/RoomTypeDao.java b/src/db/java/org/apache/openmeetings/db/dao/room/RoomTypeDao.java
new file mode 100644
index 0000000..0c25195
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/RoomTypeDao.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.room;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.room.RoomType;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class RoomTypeDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(RoomTypeDao.class, webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+	
+	/**
+	 * get all availible RoomTypes
+	 * 
+	 * @return List of RoomTypes
+	 */
+	public List<RoomType> getAll(long langId) {
+		TypedQuery<RoomType> query = em.createNamedQuery("getAllRoomTypes", RoomType.class);
+		query.setParameter("deleted", true);
+		List<RoomType> ll = query.getResultList();
+		return ll;
+	}
+	
+	public RoomType get(long id) {
+		TypedQuery<RoomType> query = em.createNamedQuery("getRoomTypesById", RoomType.class);
+		query.setParameter("roomtypes_id", id);
+		query.setParameter("deleted", true);
+		List<?> ll = query.getResultList();
+		if (ll.size() > 0) {
+			return (RoomType) ll.get(0);
+		}
+		return null;
+	}
+
+	/**
+	 * add a new Record to the table roomtypes
+	 * 
+	 * @param name
+	 * @return ID of new created roomtype or null
+	 */
+	public Long addRoomType(String name, long fieldvalues_id, boolean deleted) {
+		try {
+			RoomType rtype = new RoomType();
+			rtype.setName(name);
+			rtype.setStarttime(new Date());
+			rtype.setDeleted(deleted);
+			rtype.setFieldvalues_id(fieldvalues_id);
+			rtype = em.merge(rtype);
+			long returnId = rtype.getRoomtypes_id();
+			return returnId;
+		} catch (Exception ex2) {
+			log.error("[addRoomType] ", ex2);
+		}
+		return null;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/room/SipDao.java b/src/db/java/org/apache/openmeetings/db/dao/room/SipDao.java
new file mode 100644
index 0000000..86ef780
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/room/SipDao.java
@@ -0,0 +1,146 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.db.dao.room;

+

+import org.asteriskjava.manager.ManagerConnection;

+import org.asteriskjava.manager.ManagerConnectionFactory;

+import org.asteriskjava.manager.ResponseEvents;

+import org.asteriskjava.manager.action.ConfbridgeListAction;

+import org.asteriskjava.manager.action.DbDelAction;

+import org.asteriskjava.manager.action.DbDelTreeAction;

+import org.asteriskjava.manager.action.DbGetAction;

+import org.asteriskjava.manager.action.DbPutAction;

+import org.asteriskjava.manager.action.EventGeneratingAction;

+import org.asteriskjava.manager.action.ManagerAction;

+import org.asteriskjava.manager.response.ManagerError;

+import org.asteriskjava.manager.response.ManagerResponse;

+import org.red5.logging.Red5LoggerFactory;

+import org.slf4j.Logger;

+

+public class SipDao {

+	private static final Logger log = Red5LoggerFactory.getLogger(SipDao.class);

+	public static final String ASTERISK_OM_FAMILY = "openmeetings";

+	public static final String ASTERISK_OM_KEY = "rooms";

+	private String sipHostname;

+	private int sipPort;

+	private String sipUsername;

+	private String sipPassword;

+	private ManagerConnectionFactory factory;

+	private ManagerConnection connection;

+

+	@SuppressWarnings("unused")

+	private SipDao() {

+		// prohibited default constructor

+	}

+

+	public SipDao(String sipHostname, int sipPort, String sipUsername, String sipPassword) {

+		this.sipHostname = sipHostname;

+		this.sipPort = sipPort;

+		this.sipUsername = sipUsername;

+		this.sipPassword = sipPassword;

+		factory = new ManagerConnectionFactory(this.sipHostname, this.sipPort, this.sipUsername, this.sipPassword);

+		connection = factory.createManagerConnection(); // TODO secure

+	}

+

+	private ManagerResponse exec(ManagerAction action) {

+		if (connection == null) {

+			log.warn("There is no Asterisk configured");

+			return null;

+		}

+		try {

+			connection.login();

+			ManagerResponse r = connection.sendAction(action);

+			connection.logoff();

+			if (log.isDebugEnabled() && r != null) {

+				log.debug(r.toString());

+			}

+			return (r instanceof ManagerError) ? null : r;

+		} catch (Exception e) {

+			if (log.isDebugEnabled()) {

+				log.error("Error while executing ManagerAction: " + action, e);

+			}

+		}

+		return null;

+	}

+

+	private ResponseEvents execEvent(EventGeneratingAction action) {

+		if (connection == null) {

+			log.warn("There is no Asterisk configured");

+			return null;

+		}

+		try {

+			connection.login("on");

+			ResponseEvents r = connection.sendEventGeneratingAction(action);

+			connection.logoff();

+			if (log.isDebugEnabled() && r != null) {

+				log.debug(r.getResponse().toString());

+			}

+			return (r == null || r.getResponse() instanceof ManagerError) ? null : r;

+		} catch (Exception e) {

+			if (log.isDebugEnabled()) {

+				log.error("Error while executing EventGeneratingAction: " + action, e);

+			}

+		}

+		return null;

+	}

+

+	private String getKey(String confno) {

+		return ASTERISK_OM_KEY + "/" + confno;

+	}

+

+	public String get(String confno) {

+		String pin = null;

+		DbGetAction da = new DbGetAction(ASTERISK_OM_FAMILY, getKey(confno));

+		ManagerResponse r = exec(da);

+		if (r != null) {

+			pin = r.getResponse();

+		}

+		return pin;

+	}

+

+	public void update(String confno, String pin) {

+		delete(confno);

+		DbPutAction da = new DbPutAction(ASTERISK_OM_FAMILY, getKey(confno), pin);

+		exec(da);

+	}

+

+	public void delete() {

+		DbDelTreeAction da = new DbDelTreeAction(ASTERISK_OM_FAMILY, ASTERISK_OM_KEY);

+		exec(da);

+	}

+

+	public void delete(String confno) {

+		DbDelAction da = new DbDelAction(ASTERISK_OM_FAMILY, getKey(confno));

+		exec(da);

+	}

+

+	public Integer countUsers(String confno) {

+		if (confno == null) {

+			return null;

+		}

+		ConfbridgeListAction da = new ConfbridgeListAction(confno);

+		ResponseEvents r = execEvent(da);

+		if (r != null) {

+			log.debug("SipDao::countUsers size == " + r.getEvents().size());

+			// "- 1" here means: ListComplete event 

+			return r.getEvents().size() - 1; // TODO check if was successfull

+		}

+		return 0;

+	}

+}

diff --git a/src/db/java/org/apache/openmeetings/db/dao/server/ISessionManager.java b/src/db/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
new file mode 100644
index 0000000..663d20e
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
@@ -0,0 +1,217 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.db.dao.server;

+

+import java.util.Collection;

+import java.util.List;

+

+import org.apache.openmeetings.db.dto.basic.SearchResult;

+import org.apache.openmeetings.db.dto.server.ClientSessionInfo;

+import org.apache.openmeetings.db.entity.room.Client;

+import org.apache.openmeetings.db.entity.server.Server;

+

+/**

+ * Methods to add/get/remove {@link Client}s to the session

+ * 

+ * 

+ * @author sebawagner

+ *

+ */

+public interface ISessionManager {

+	

+	/**

+	 * Notified on server start, when the session manager should be started and

+	 * eventually caches cleared/setup

+	 */

+	public abstract void sessionStart();

+

+	/**

+	 * add a new client item

+	 * 

+	 * @param streamId

+	 * @param scopeName

+	 * @param remotePort

+	 * @param remoteAddress

+	 * @param swfUrl

+	 * @param isAVClient

+	 * @param server

+	 * @return

+	 */

+	public abstract Client addClientListItem(String streamId,

+			String scopeName, Integer remotePort, String remoteAddress,

+			String swfUrl, boolean isAVClient, Server server);

+

+	public abstract Collection<Client> getClients();

+	

+	/**

+	 * loads the server into the client (only if database cache is used)

+	 * 

+	 * @return

+	 */

+	public abstract Collection<Client> getClientsWithServer();

+

+	/**

+	 * Get a client by its streamId

+	 * 

+	 * @param streamId

+	 * @param server

+	 * @return

+	 */

+	public abstract Client getClientByStreamId(String streamId,

+			Server server);

+

+	/**

+	 * get a client by its publicSID and the server, 

+	 * isAVClient is normally false, as you want the data connection.

+	 * If you set isAVClient to true, you would obtain the RTMP 

+	 * connection that is used for Audio/Video streaming

+	 * 

+	 * @param publicSID

+	 * @param isAVClient

+	 * @param server

+	 * @return

+	 */

+	public abstract Client getClientByPublicSID(String publicSID,

+			boolean isAVClient, Server server);

+	

+	/**

+	 * same as {@link #getClientByPublicSID(String, boolean, Server)} but it ignores 

+	 * if the server part, so it will deliver any client just by its publicSID.<br/>

+	 * <br/>

+	 * <b>Note:</b>

+	 * This method requires more time to find the user, so under normal circumstances 

+	 * you should use {@link #getClientByPublicSID(String, boolean, Server)}!

+	 * 

+	 * @param publicSID

+	 * @param isAVClient

+	 * @return

+	 */

+	public ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID, boolean isAVClient);

+

+	/**

+	 * 

+	 * @param userId

+	 * @return

+	 * 

+	 * @deprecated There could be multiple users logged in with the same userid,

+	 *             then this call would return a list not a single user

+	 */

+	public abstract Client getClientByUserId(Long userId);

+

+	/**

+	 * Update the session object of the audio/video-connection and additionally

+	 * swap the values to the session object of the user that holds the full

+	 * session object

+	 * 

+	 * @param streamId

+	 * @param rcm

+	 * @return

+	 */

+	public abstract Boolean updateAVClientByStreamId(String streamId,

+			Client rcm, Server server);

+

+	/**

+	 * Update the session object

+	 * 

+	 * updateRoomCount is only <i>one</i> time true, in

+	 * ScopeApplicationAdapter#setRoomValues(Long, Boolean, Boolean, Long, String)

+	 * .

+	 * 

+	 * @param streamId

+	 * @param rcm

+	 * @param updateRoomCount

+	 *            true means the count for the room has to be updated

+	 * @return

+	 */

+	public abstract Boolean updateClientByStreamId(String streamId,

+			Client rcm, boolean updateRoomCount, Server server);

+

+	/**

+	 * Remove a client from the session store

+	 * 

+	 * @param streamId

+	 * @return

+	 */

+	public abstract Boolean removeClient(String streamId, Server server);

+

+	/**

+	 * Get all ClientList Objects of that room and domain This Function is

+	 * needed cause it is invoked internally AFTER the current user has been

+	 * already removed from the ClientList to see if the Room is empty again and

+	 * the PollList can be removed

+	 * @param room_id 

+	 * @return

+	 */

+	public abstract List<Client> getClientListByRoom(Long room_id);

+	

+	public abstract Collection<Client> getClientListByRoomAll(Long room_id);

+

+	/**

+	 * get the current Moderator in this room

+	 * 

+	 * @param roomname

+	 * @return

+	 */

+	public abstract List<Client> getCurrentModeratorByRoom(Long room_id);

+

+	/**

+	 * Get list of current client sessions

+	 * 

+	 * @param start

+	 * @param max

+	 * @param orderby

+	 * @param asc

+	 * @return

+	 */

+	public abstract SearchResult<Client> getListByStartAndMax(int start,

+			int max, String orderby, boolean asc);

+

+	/**

+	 * returns number of current users recording

+	 * 

+	 * @param roomId

+	 * @return

+	 */

+	public abstract long getRecordingCount(long roomId);

+

+	/**

+	 * returns a number of current users publishing screensharing

+	 * 

+	 * @param roomId

+	 * @return

+	 */

+	public abstract long getPublishingCount(long roomId);

+	

+	/**

+	 * Get a list of all servers of all rooms on that server, serverId = null 

+	 * means it is a local session on the master.

+	 * 

+	 * @param server

+	 * @return a set, a roomId can be only one time in this list

+	 */

+	public abstract List<Long> getActiveRoomIdsByServer(Server server);

+

+	/**

+	 * Get some statistics about the current sessions

+	 * 

+	 * @return

+	 */

+	public abstract String getSessionStatistics();

+

+}
\ No newline at end of file
diff --git a/src/db/java/org/apache/openmeetings/db/dao/server/LdapConfigDao.java b/src/db/java/org/apache/openmeetings/db/dao/server/LdapConfigDao.java
new file mode 100644
index 0000000..28b90e2
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/server/LdapConfigDao.java
@@ -0,0 +1,269 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.server;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.PersistenceException;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.server.LdapConfig;
+import org.apache.openmeetings.util.DaoHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * Insert/Update/Delete {@link LdapConfig}
+ * 
+ * 
+ * @author swagner
+ * 
+ */
+@Transactional
+public class LdapConfigDao implements IDataProviderDao<LdapConfig> {
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			LdapConfigDao.class, OpenmeetingsVariables.webAppRootKey);
+	public final static String[] searchFields = {"name", "configFileName", "domain", "comment"};
+
+	@PersistenceContext
+	private EntityManager em;
+
+	@Autowired
+	private UserDao usersDao;
+
+	public Long addLdapConfig(String name, Boolean addDomainToUserName,
+			String configFileName, String domain, Long insertedby,
+			Boolean isActive) {
+		try {
+
+			LdapConfig ldapConfig = new LdapConfig();
+			ldapConfig.setAddDomainToUserName(addDomainToUserName);
+			ldapConfig.setConfigFileName(configFileName);
+			ldapConfig.setDeleted(false);
+			ldapConfig.setDomain(domain);
+			ldapConfig.setIsActive(isActive);
+			ldapConfig.setName(name);
+			ldapConfig.setInserted(new Date());
+			if (insertedby != null) {
+				log.debug("addLdapConfig :1: " + usersDao.get(insertedby));
+				ldapConfig.setInsertedby(usersDao.get(insertedby));
+			}
+
+			log.debug("addLdapConfig :2: " + insertedby);
+
+			ldapConfig = em.merge(ldapConfig);
+			Long ldapConfigId = ldapConfig.getLdapConfigId();
+
+			if (ldapConfigId > 0) {
+				return ldapConfigId;
+			} else {
+				throw new Exception("Could not store SOAPLogin");
+			}
+
+		} catch (Exception ex2) {
+			log.error("[addLdapConfig]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long addLdapConfigByObject(LdapConfig ldapConfig) {
+		try {
+
+			ldapConfig.setDeleted(false);
+			ldapConfig.setInserted(new Date());
+
+			ldapConfig = em.merge(ldapConfig);
+			Long ldapConfigId = ldapConfig.getLdapConfigId();
+
+			if (ldapConfigId > 0) {
+				return ldapConfigId;
+			} else {
+				throw new Exception("Could not store SOAPLogin");
+			}
+
+		} catch (Exception ex2) {
+			log.error("[addLdapConfig]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long updateLdapConfig(Long ldapConfigId, String name,
+			Boolean addDomainToUserName, String configFileName, String domain,
+			Long updatedby, Boolean isActive) {
+		try {
+
+			LdapConfig ldapConfig = this.get(ldapConfigId);
+
+			if (ldapConfig == null) {
+				return -1L;
+			}
+
+			ldapConfig.setAddDomainToUserName(addDomainToUserName);
+			ldapConfig.setConfigFileName(configFileName);
+			ldapConfig.setDeleted(false);
+			ldapConfig.setDomain(domain);
+			ldapConfig.setIsActive(isActive);
+			ldapConfig.setName(name);
+			ldapConfig.setUpdated(new Date());
+			if (updatedby != null) {
+				log.debug("updateLdapConfig :1: " + usersDao.get(updatedby));
+				ldapConfig.setUpdatedby(usersDao.get(updatedby));
+			}
+
+			log.debug("updateLdapConfig :2: " + updatedby);
+
+			ldapConfig = em.merge(ldapConfig);
+			ldapConfigId = ldapConfig.getLdapConfigId();
+
+			return ldapConfigId;
+
+		} catch (Exception ex2) {
+			log.error("[updateLdapConfig]: ", ex2);
+		}
+		return -1L;
+	}
+
+	public LdapConfig get(long ldapConfigId) {
+		try {
+
+			String hql = "select c from LdapConfig c "
+					+ "WHERE c.ldapConfigId = :ldapConfigId "
+					+ "AND c.deleted = :deleted";
+
+			TypedQuery<LdapConfig> query = em
+					.createQuery(hql, LdapConfig.class);
+			query.setParameter("ldapConfigId", ldapConfigId);
+			query.setParameter("deleted", false);
+
+			LdapConfig ldapConfig = null;
+			try {
+				ldapConfig = query.getSingleResult();
+			} catch (NoResultException ex) {
+			}
+
+			return ldapConfig;
+
+		} catch (Exception ex2) {
+			log.error("[get]: ", ex2);
+		}
+		return null;
+	}
+
+	public List<LdapConfig> getActive() {
+		log.debug("getActiveLdapConfigs");
+
+		// get all users
+		TypedQuery<LdapConfig> query =  em.createNamedQuery("getActiveLdapConfigs", LdapConfig.class);
+		query.setParameter("isActive", true);
+
+		return query.getResultList();
+	}
+
+	public List<LdapConfig> get() {
+		//Add localhost Domain
+		LdapConfig ldapConfig = new LdapConfig();
+		
+		ldapConfig.setName("local DB [internal]");
+		ldapConfig.setLdapConfigId(-1);
+
+		List<LdapConfig> result = new ArrayList<LdapConfig>();
+		result.add(ldapConfig);
+		result.addAll(getActive());
+		return result;
+	}
+
+	public List<LdapConfig> get(int start, int count) {
+		TypedQuery<LdapConfig> q = em.createNamedQuery("getNondeletedLdapConfigs", LdapConfig.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+
+	public List<LdapConfig> get(String search, int start, int count, String sort) {
+		TypedQuery<LdapConfig> q = em.createQuery(DaoHelper.getSearchQuery("LdapConfig", "lc", search, true, false, sort, searchFields), LdapConfig.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+	
+	public long count() {
+		try {
+			TypedQuery<Long> query = em
+					.createQuery(
+							"select count(c.ldapConfigId) from LdapConfig c where c.deleted = false",
+							Long.class);
+			List<Long> ll = query.getResultList();
+			log.debug("selectMaxFromLdapConfig" + ll.get(0));
+			return ll.get(0);
+		} catch (Exception ex2) {
+			log.error("[selectMaxFromLdapConfig] ", ex2);
+		}
+		return 0L;
+	}
+
+	public long count(String search) {
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("LdapConfig", "lc", search, true, true, null, searchFields), Long.class);
+		return q.getSingleResult();
+	}
+	
+	public LdapConfig update(LdapConfig entity, Long userId) {
+		try {
+			if (entity.getLdapConfigId() <= 0) {
+				entity.setInserted(new Date());
+				if (userId != null) {
+					entity.setInsertedby(usersDao.get(userId));
+				}
+				entity.setDeleted(false);
+				em.persist(entity);
+			} else {
+				entity.setUpdated(new Date());
+				if (userId != null) {
+					entity.setUpdatedby(usersDao.get(userId));
+				}
+				entity.setDeleted(false);
+				em.merge(entity);
+			}
+		} catch (PersistenceException ex) {
+			log.error("[update LdapConfig]", ex);
+		}
+		return entity;
+	}
+
+	public void delete(LdapConfig entity, Long userId) {
+		if (entity.getLdapConfigId() >= 0) {
+			entity.setUpdated(new Date());
+			if (userId != null) {
+				entity.setUpdatedby(usersDao.get(userId));
+			}
+			entity.setDeleted(true);
+			em.merge(entity);
+		}
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/server/OAuth2Dao.java b/src/db/java/org/apache/openmeetings/db/dao/server/OAuth2Dao.java
new file mode 100644
index 0000000..b8db099
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/server/OAuth2Dao.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.server;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.entity.server.OAuthServer;
+import org.apache.openmeetings.util.DaoHelper;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class OAuth2Dao implements IDataProviderDao<OAuthServer> {
+
+	public final static String[] searchFields = {"name"};
+	@PersistenceContext
+	private EntityManager em;
+	
+	public List<OAuthServer> getActive() {
+		TypedQuery<OAuthServer> query = em.createNamedQuery("getEnabledOAuthServers", OAuthServer.class);
+		return query.getResultList();
+	}
+	
+	public OAuthServer get(long id) {
+		TypedQuery<OAuthServer> query = em.createNamedQuery("getOAuthServerById", OAuthServer.class);
+		query.setParameter("id", id);
+		OAuthServer result = null;
+		try {
+			result = query.getSingleResult();
+		} catch (NoResultException e) {}
+		return result;
+	}
+
+	public List<OAuthServer> get(int start, int count) {
+		TypedQuery<OAuthServer> query = em.createNamedQuery("getAllOAuthServers", OAuthServer.class);
+		query.setFirstResult(start);
+		query.setMaxResults(count);
+		return query.getResultList();
+	}
+
+	public List<OAuthServer> get(String search, int start, int count, String order) {
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("OAuthServer", "s", search, true, false, null, searchFields), Long.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		return null;
+	}
+
+	public long count() {
+		TypedQuery<Long> q = em.createNamedQuery("countOAuthServers", Long.class);
+		return q.getSingleResult();
+	}
+
+	public long count(String search) {
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("OAuthServer", "s", search, true, true, null, searchFields), Long.class);
+		return q.getSingleResult();
+	}
+
+	public OAuthServer update(OAuthServer server, Long userId) {
+		if (server.getId() == null) {
+			em.persist(server);
+		} else {
+			server = em.merge(server);
+		}
+		return server;
+	}
+
+	public void delete(OAuthServer server, Long userId) {
+		server.setDeleted(true);
+		update(server, userId);
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/server/SOAPLoginDao.java b/src/db/java/org/apache/openmeetings/db/dao/server/SOAPLoginDao.java
new file mode 100644
index 0000000..ccd88aa
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/server/SOAPLoginDao.java
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.server;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.server.SOAPLogin;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class SOAPLoginDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(SOAPLoginDao.class, webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+
+	public String addSOAPLogin(String sessionHash, Long room_id,
+			boolean becomemoderator, boolean showAudioVideoTest,
+			boolean allowSameURLMultipleTimes, Long recording_id,
+			boolean showNickNameDialog, String landingZone,
+			boolean allowRecording) {
+		try {
+			String thistime = "TIME_" + (new Date().getTime());
+
+			String hash = ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(thistime);
+
+			SOAPLogin soapLogin = new SOAPLogin();
+			soapLogin.setCreated(new Date());
+			soapLogin.setUsed(false);
+			soapLogin.setRoom_id(room_id);
+			soapLogin.setAllowSameURLMultipleTimes(allowSameURLMultipleTimes);
+			soapLogin.setHash(hash);
+			soapLogin.setRoomRecordingId(recording_id);
+			soapLogin.setSessionHash(sessionHash);
+			soapLogin.setBecomemoderator(becomemoderator);
+			soapLogin.setShowAudioVideoTest(showAudioVideoTest);
+			soapLogin.setShowNickNameDialog(showNickNameDialog);
+			soapLogin.setLandingZone(landingZone);
+			soapLogin.setAllowRecording(allowRecording);
+
+			soapLogin = em.merge(soapLogin);
+			Long soapLoginId = soapLogin.getSoapLoginId();
+
+			if (soapLoginId > 0) {
+				return hash;
+			} else {
+				throw new Exception("Could not store SOAPLogin");
+			}
+
+		} catch (Exception ex2) {
+			log.error("[addSOAPLogin]: ", ex2);
+		}
+		return null;
+	}
+
+	public SOAPLogin get(String hash) {
+		try {
+			String hql = "select sl from SOAPLogin as sl WHERE sl.hash LIKE :hash";
+			TypedQuery<SOAPLogin> query = em.createQuery(hql, SOAPLogin.class);
+			query.setParameter("hash", hash);
+			List<SOAPLogin> sList = query.getResultList();
+
+			if (sList.size() > 1) {
+				throw new Exception("there are more then one SOAPLogin with identical hash! " + hash);
+			}
+
+			if (sList.size() == 1) {
+				return sList.get(0);
+			}
+
+		} catch (Exception ex2) {
+			log.error("[get]: ", ex2);
+		}
+		return null;
+	}
+
+	public void update(SOAPLogin soapLogin) {
+		try {
+			if (soapLogin.getSoapLoginId() == 0) {
+				em.persist(soapLogin);
+			} else {
+				if (!em.contains(soapLogin)) {
+					em.merge(soapLogin);
+				}
+			}
+		} catch (Exception ex2) {
+			log.error("[update]: ", ex2);
+		}
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/server/ServerDao.java b/src/db/java/org/apache/openmeetings/db/dao/server/ServerDao.java
new file mode 100644
index 0000000..5f74fe8
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/server/ServerDao.java
@@ -0,0 +1,210 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.db.dao.server;

+

+import java.util.Date;

+import java.util.List;

+

+import javax.persistence.EntityManager;

+import javax.persistence.NoResultException;

+import javax.persistence.PersistenceContext;

+import javax.persistence.TypedQuery;

+

+import org.apache.openmeetings.db.dao.IDataProviderDao;

+import org.apache.openmeetings.db.dao.user.UserDao;

+import org.apache.openmeetings.db.entity.server.Server;

+import org.apache.openmeetings.util.DaoHelper;

+import org.apache.openmeetings.util.OpenmeetingsVariables;

+import org.red5.logging.Red5LoggerFactory;

+import org.slf4j.Logger;

+import org.springframework.beans.factory.annotation.Autowired;

+import org.springframework.transaction.annotation.Transactional;

+

+/**

+ * 

+ * CRUD for {@link Server}

+ * 

+ * @author solomax, sebawagner

+ * 

+ */

+@Transactional

+public class ServerDao implements IDataProviderDao<Server> {

+	private static final Logger log = Red5LoggerFactory.getLogger(

+			ServerDao.class, OpenmeetingsVariables.webAppRootKey);

+	public final static String[] searchFields = { "name", "address", "comment" };

+

+	@PersistenceContext

+	private EntityManager em;

+

+	@Autowired

+	private UserDao usersDao;

+	

+	/**

+	 * Get a list of all available servers

+	 * 

+	 * @return

+	 */

+	public List<Server> getServerList() {

+		log.debug("getServerList enter");

+		TypedQuery<Server> q = em.createNamedQuery("getAllServers",

+				Server.class);

+		return q.getResultList();

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * 

+	 * @see org.apache.openmeetings.data.OmDAO#get(int, int)

+	 */

+	public List<Server> get(int start, int max) {

+		TypedQuery<Server> q = em.createNamedQuery("getAllServers", Server.class);

+		q.setFirstResult(start);

+		q.setMaxResults(max);

+		return q.getResultList();

+	}

+

+	public List<Server> get(String search, int start, int count, String order) {

+		TypedQuery<Server> q = em.createQuery(DaoHelper.getSearchQuery(

+				"Server", "s", search, true, false, order, searchFields),

+				Server.class);

+		q.setFirstResult(start);

+		q.setMaxResults(count);

+		return q.getResultList();

+	}

+

+	/**

+	 * get the list of all servers in the cluster that are ready to receive a

+	 * ping (active = true)

+	 * 

+	 * @return

+	 */

+	public List<Server> getActiveServers() {

+		return em.createNamedQuery("getActiveServers", Server.class)

+				.getResultList();

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * 

+	 * @see org.apache.openmeetings.data.OmDAO#count()

+	 */

+	public long count() {

+		log.debug("getServerCount enter");

+		TypedQuery<Long> q = em.createNamedQuery("getServerCount", Long.class);

+

+		return q.getSingleResult();

+	}

+

+	public long count(String search) {

+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Server",

+				"s", search, true, true, null, searchFields), Long.class);

+		return q.getSingleResult();

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * 

+	 * @see org.apache.openmeetings.data.OmDAO#get(long)

+	 */

+	public Server get(long id) {

+		Server result = null;

+		log.debug("getServer enter, id = " + id);

+		TypedQuery<Server> q = em.createNamedQuery("getServerById",

+				Server.class);

+		q.setParameter("id", id);

+		try {

+			result = q.getSingleResult();

+		} catch (NoResultException e) {

+			// noop

+		}

+		return result;

+	}

+

+	/**

+	 * Get server by its address

+	 * 

+	 * @param address

+	 * @return

+	 */

+	public Server getServerByAddress(String address) {

+		log.debug("getServer enter, address = " + address);

+		TypedQuery<Server> q = em.createNamedQuery("getServerByAddress",

+				Server.class);

+		q.setParameter("address", address);

+		List<Server> list = q.getResultList();

+		return list.size() > 0 ? list.get(0) : null;

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * 

+	 * @see

+	 * org.apache.openmeetings.data.OmDAO#update(org.apache.openmeetings.persistence

+	 * .beans.OmEntity, long)

+	 */

+	public Server update(Server entity, Long userId) {

+		entity.setDeleted(false);

+		if (entity.getId() > 0) {

+			entity.setUpdated(new Date());

+			if (userId != null) {

+				entity.setUpdatedby(usersDao.get(userId));

+			}

+			em.merge(entity);

+		} else {

+			entity.setInserted(new Date());

+			if (userId != null) {

+				entity.setInsertedby(usersDao.get(userId));

+			}

+			em.persist(entity);

+		}

+		return entity;

+	}

+

+	/*

+	 * (non-Javadoc)

+	 * 

+	 * @see

+	 * org.apache.openmeetings.data.OmDAO#delete(org.apache.openmeetings.persistence

+	 * .beans.OmEntity, long)

+	 */

+	public void delete(Server entity, Long userId) {

+		if (entity.getId() > 0) {

+			entity.setUpdated(new Date());

+			if (userId != null) {

+				entity.setUpdatedby(usersDao.get(userId));

+			}

+			entity.setDeleted(true);

+			em.merge(entity);

+		}

+	}

+

+	/**

+	 * get {@link Server} by name

+	 * 

+	 * @param name

+	 * @return

+	 */

+	public List<Server> getServersByName(String name) {

+		TypedQuery<Server> q = em.createNamedQuery("getServerByName",

+				Server.class);

+		q.setParameter("name", name);

+		return q.getResultList();

+	}

+

+}

diff --git a/src/db/java/org/apache/openmeetings/db/dao/server/SessiondataDao.java b/src/db/java/org/apache/openmeetings/db/dao/server/SessiondataDao.java
new file mode 100644
index 0000000..b954e85
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/server/SessiondataDao.java
@@ -0,0 +1,443 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.server;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 
+ * @author swagner This Class handles all session management
+ * 
+ *         TODO: Delete all inactive session by a scheduler
+ * 
+ */
+@Transactional
+public class SessiondataDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(SessiondataDao.class, webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+
+	@Autowired
+	private ISessionManager sessionManager;
+
+	/**
+	 * creates a new session-object in the database
+	 * 
+	 * @return
+	 */
+	public Sessiondata startsession() {
+		try {
+
+			log.debug("startsession :: startsession");
+
+			long thistime = new Date().getTime();
+			Sessiondata sessiondata = new Sessiondata();
+			sessiondata.setSession_id(ManageCryptStyle.getInstanceOfCrypt()
+					.createPassPhrase(String.valueOf(thistime).toString()));
+			sessiondata.setRefresh_time(new Date());
+			sessiondata.setStarttermin_time(new Date());
+			sessiondata.setUser_id(null);
+
+			sessiondata = em.merge(sessiondata);
+
+			return sessiondata;
+		} catch (Exception ex2) {
+			log.error("[startsession]: ", ex2);
+		}
+
+		return null;
+	}
+
+	public Sessiondata getSessionByHash(String SID) {
+		try {
+			log.debug("updateUser User SID: " + SID);
+
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			CriteriaQuery<Sessiondata> cq = cb.createQuery(Sessiondata.class);
+			Root<Sessiondata> c = cq.from(Sessiondata.class);
+			Predicate condition = cb.equal(c.get("session_id"), SID);
+			cq.where(condition);
+
+			TypedQuery<Sessiondata> q = em.createQuery(cq);
+
+			List<Sessiondata> fullList = q.getResultList();
+			if (fullList.size() == 0) {
+				log.error("Could not find session to update: " + SID);
+				return null;
+			}
+
+			Sessiondata sd = fullList.get(0);
+
+			return sd;
+		} catch (Exception ex2) {
+			log.error("[getSessionByHash]: ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param SID
+	 * @return
+	 */
+	public Long checkSession(String SID) {
+		try {
+			TypedQuery<Sessiondata> query = em.createNamedQuery("getSessionById", Sessiondata.class);
+			query.setParameter("session_id", SID);
+			List<Sessiondata> sessions = query.getResultList();
+
+			Sessiondata sessiondata = null;
+			if (sessions != null && sessions.size() > 0) {
+				sessiondata = sessions.get(0);
+			}
+
+			// Update the Session Object
+			if (sessiondata != null)
+				updatesession(SID);
+
+			// Checks if wether the Session or the User Object of that Session
+			// is set yet
+			if (sessiondata == null || sessiondata.getUser_id() == null
+					|| sessiondata.getUser_id().equals(new Long(0))) {
+				return new Long(0);
+			} else {
+				return sessiondata.getUser_id();
+			}
+		} catch (Exception ex2) {
+			log.error("[checkSession]: ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * update the session of a user with a new user id this is needed to see if
+	 * the session is loggedin
+	 * 
+	 * @param SID
+	 * @param USER_ID
+	 */
+	public Boolean updateUser(String SID, long USER_ID) {
+		try {
+			log.debug("updateUser User: " + USER_ID + " || " + SID);
+
+			TypedQuery<Sessiondata> query = em.createNamedQuery("getSessionById", Sessiondata.class);
+			query.setParameter("session_id", SID);
+
+			List<Sessiondata> sessions = query.getResultList();
+
+			Sessiondata sessiondata = null;
+			if (sessions != null && sessions.size() > 0) {
+				sessiondata = sessions.get(0);
+			}
+
+			if (sessiondata == null) {
+				log.error("Could not find session to Update");
+				return false;
+			}
+			log.debug("Found session to update: " + sessiondata.getSession_id()
+					+ " userId: " + USER_ID);
+
+			sessiondata.setRefresh_time(new Date());
+			sessiondata.setUser_id(USER_ID);
+			if (sessiondata.getId() == null) {
+				em.persist(sessiondata);
+			} else {
+				if (!em.contains(sessiondata)) {
+					em.merge(sessiondata);
+				}
+			}
+			return true;
+		} catch (Exception ex2) {
+			log.error("[updateUser]: ", ex2);
+		}
+		return null;
+	}
+
+	public boolean updateUser(String SID, long USER_ID, boolean storePermanent, Long language_id) {
+		try {
+			log.debug("updateUser User: " + USER_ID + " || " + SID);
+			TypedQuery<Sessiondata> query = em.createNamedQuery("getSessionById", Sessiondata.class);
+			query.setParameter("session_id", SID);
+
+			List<Sessiondata> sessions = query.getResultList();
+
+			Sessiondata sessiondata = null;
+			if (sessions != null && sessions.size() > 0) {
+				sessiondata = sessions.get(0);
+			}
+
+			if (sessiondata == null) {
+				log.error("Could not find session to Update");
+				return false;
+			}
+			log.debug("Found session to update: " + sessiondata.getSession_id() + " userId: " + USER_ID);
+
+			sessiondata.setRefresh_time(new Date());
+			sessiondata.setUser_id(USER_ID);
+			if (storePermanent) {
+				sessiondata.setStorePermanent(storePermanent);
+			}
+			sessiondata.setLanguage_id(language_id);
+			if (sessiondata.getId() == null) {
+				em.persist(sessiondata);
+			} else {
+				if (!em.contains(sessiondata)) {
+					em.merge(sessiondata);
+				}
+			}
+
+			// log.debug("session updated User: "+USER_ID);
+			return true;
+		} catch (Exception ex2) {
+			log.error("[updateUser]: ", ex2);
+		}
+		return false;
+	}
+
+	public Boolean updateUserOrg(String SID, Long organization_id) {
+		try {
+			log.debug("updateUserOrg User: " + organization_id + " || " + SID);
+			TypedQuery<Sessiondata> query = em.createNamedQuery("getSessionById", Sessiondata.class);
+			query.setParameter("session_id", SID);
+
+			List<Sessiondata> sessions = query.getResultList();
+
+			Sessiondata sessiondata = null;
+			if (sessions != null && sessions.size() > 0) {
+				sessiondata = sessions.get(0);
+			}
+
+			if (sessiondata == null) {
+				log.error("Could not find session to Update");
+				return false;
+			}
+			log.debug("Found session to update: " + sessiondata.getSession_id()
+					+ " organisation_id: " + organization_id);
+
+			sessiondata.setRefresh_time(new Date());
+			sessiondata.setOrganization_id(organization_id);
+			if (sessiondata.getId() == null) {
+				em.persist(sessiondata);
+			} else {
+				if (!em.contains(sessiondata)) {
+					em.merge(sessiondata);
+				}
+			}
+			return true;
+		} catch (Exception ex2) {
+			log.error("[updateUser]: ", ex2);
+		}
+		return null;
+	}
+
+	public Boolean updateUserWithoutSession(String SID, Long USER_ID) {
+		try {
+			log.debug("updateUser User: " + USER_ID + " || " + SID);
+			TypedQuery<Sessiondata> query = em.createNamedQuery("getSessionById", Sessiondata.class);
+			query.setParameter("session_id", SID);
+
+			List<Sessiondata> sessions = query.getResultList();
+
+			Sessiondata sessiondata = null;
+			if (sessions != null && sessions.size() > 0) {
+				sessiondata = sessions.get(0);
+			}
+
+			if (sessiondata == null) {
+				log.error("Could not find session to Update");
+				return false;
+			}
+			log.debug("Found session to update: " + sessiondata.getSession_id()
+					+ " userId: " + USER_ID);
+
+			sessiondata.setRefresh_time(new Date());
+			sessiondata.setUser_id(USER_ID);
+			if (sessiondata.getId() == null) {
+				em.persist(sessiondata);
+			} else {
+				if (!em.contains(sessiondata)) {
+					em.merge(sessiondata);
+				}
+			}
+			return true;
+		} catch (Exception ex2) {
+			log.error("[updateUser]: ", ex2);
+		}
+		return null;
+	}
+
+	public Boolean updateUserRemoteSession(String SID, String sessionXml) {
+		try {
+			log.debug("updateUser User SID: " + SID);
+
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			CriteriaQuery<Sessiondata> cq = cb.createQuery(Sessiondata.class);
+			Root<Sessiondata> c = cq.from(Sessiondata.class);
+			Predicate condition = cb.equal(c.get("session_id"), SID);
+			cq.where(condition);
+
+			TypedQuery<Sessiondata> q = em.createQuery(cq);
+			List<Sessiondata> fullList = q.getResultList();
+
+			if (fullList.size() == 0) {
+				log.error("Could not find session to update: " + SID);
+				return false;
+			} else {
+				// log.error("Found session to update: "+SID);
+			}
+			Sessiondata sd = fullList.get(0);
+			sd.setRefresh_time(new Date());
+			sd.setSessionXml(sessionXml);
+
+			if (sd.getId() == null) {
+				em.persist(sd);
+			} else {
+				if (!em.contains(sd)) {
+					em.merge(sd);
+				}
+			}
+			return true;
+		} catch (Exception ex2) {
+			log.error("[updateUserRemoteSession]: ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * update the session every time a user makes a request
+	 * 
+	 * @param SID
+	 */
+	private void updatesession(String SID) {
+		try {
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			CriteriaQuery<Sessiondata> cq = cb.createQuery(Sessiondata.class);
+			Root<Sessiondata> c = cq.from(Sessiondata.class);
+			Predicate condition = cb.equal(c.get("session_id"), SID);
+			cq.where(condition);
+
+			TypedQuery<Sessiondata> q = em.createQuery(cq);
+
+			List<Sessiondata> fullList = q.getResultList();
+			if (fullList.size() == 0) {
+				log.error("Found NO session to updateSession: ");
+
+			} else {
+				// log.debug("Found session to updateSession: ");
+				Sessiondata sd = fullList.iterator().next();
+				// log.debug("Found session to updateSession sd "+sd.getUser_id()+" "+sd.getSession_id());
+				sd.setRefresh_time(new Date());
+
+				if (sd.getId() == null) {
+					em.persist(sd);
+				} else {
+					if (!em.contains(sd)) {
+						em.merge(sd);
+					}
+				}
+			}
+
+		} catch (Exception ex2) {
+			log.error("[updatesession]: ", ex2);
+		}
+	}
+
+	/**
+	 * 
+	 * @param date
+	 * @return
+	 */
+	private List<Sessiondata> getSessionToDelete(Date refresh_time) {
+		try {
+			TypedQuery<Sessiondata> query = em.createNamedQuery("getSessionToDelete", Sessiondata.class);
+			query.setParameter("refresh_time", refresh_time);
+			return query.getResultList();
+		} catch (Exception ex2) {
+			log.error("[getSessionToDelete]: ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 *
+	 */
+	public void clearSessionTable() {
+		try {
+			log.debug("****** clearSessionTable: ");
+			Calendar rightNow = Calendar.getInstance();
+			rightNow.setTimeInMillis(rightNow.getTimeInMillis() - 1800000);
+			List<Sessiondata> l = this.getSessionToDelete(rightNow.getTime());
+			log.debug("clearSessionTable: " + l.size());
+			for (Iterator<Sessiondata> it = l.iterator(); it.hasNext();) {
+				Sessiondata sData = it.next();
+				sData = em.find(Sessiondata.class, sData.getId());
+				em.remove(sData);
+			}
+		} catch (Exception err) {
+			log.error("clearSessionTable", err);
+		}
+	}
+
+	/**
+	 * @param room_id
+	 */
+	public void clearSessionByRoomId(Long room_id) {
+		try {
+			for (Client rcl : sessionManager.getClientListByRoom(room_id)) {
+				String aux = rcl.getSwfurl();
+
+				int init_pos = aux.indexOf("sid=") + 4;
+				int end_pos = init_pos + 32;
+				if (end_pos > aux.length())
+					end_pos = aux.length();
+				String SID = aux.substring(init_pos, end_pos);
+
+				Sessiondata sData = this.getSessionByHash(SID);
+
+				sData = em.find(Sessiondata.class, sData.getId());
+				em.remove(sData);
+			}
+
+		} catch (Exception err) {
+			log.error("clearSessionByRoomId", err);
+		}
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/IUserManager.java b/src/db/java/org/apache/openmeetings/db/dao/user/IUserManager.java
new file mode 100644
index 0000000..5031e23
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/IUserManager.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+
+//FIXME HACK to bypass cross project compilation
+public interface IUserManager {
+	Long registerUserInit(Set<Right> rights, String login, String password, String lastname,
+			String firstname, String email, Date age, String street,
+			String additionalname, String fax, String zip, long states_id,
+			String town, long language_id, boolean sendWelcomeMessage,
+			List<Long> organisations, String phone, boolean sendSMS, Boolean sendConfirmation,
+			TimeZone timezone, Boolean forceTimeZoneCheck,
+			String userOffers, String userSearchs, Boolean showContactData,
+			Boolean showContactDataToContacts, String activatedHash) throws Exception;
+
+	Long registerUserNoEmail(String login, String Userpass,
+			String lastname, String firstname, String email, Date age,
+			String street, String additionalname, String fax, String zip,
+			long states_id, String town, long language_id, String phone, boolean sendSMS, 
+			boolean generateSipUserData, String jNameTimeZone);
+	
+	Long getLanguage(Locale loc);
+	State getCountry(Locale loc);
+	User loginOAuth(Map<String, String> params, long serverId) throws IOException, NoSuchAlgorithmException;
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/IUserService.java b/src/db/java/org/apache/openmeetings/db/dao/user/IUserService.java
new file mode 100644
index 0000000..96f64e7
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/IUserService.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+//FIXME HACK to bypass cross project compilation
+public interface IUserService {
+	Boolean kickUserByStreamId(String SID, String streamid, long serverId);
+	Boolean kickUserBySessionId(String SID, long userId, String sessionId);
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/OrganisationDao.java b/src/db/java/org/apache/openmeetings/db/dao/user/OrganisationDao.java
new file mode 100644
index 0000000..bfcd686
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/OrganisationDao.java
@@ -0,0 +1,115 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.db.dao.user;

+

+import java.util.Collection;

+import java.util.Date;

+import java.util.List;

+

+import javax.persistence.EntityManager;

+import javax.persistence.NoResultException;

+import javax.persistence.PersistenceContext;

+import javax.persistence.TypedQuery;

+

+import org.apache.openmeetings.db.dao.IDataProviderDao;

+import org.apache.openmeetings.db.entity.user.Organisation;

+import org.apache.openmeetings.util.DaoHelper;

+import org.springframework.transaction.annotation.Transactional;

+

+@Transactional

+public class OrganisationDao implements IDataProviderDao<Organisation> {

+	public final static String[] searchFields = {"name"};

+	@PersistenceContext

+	private EntityManager em;

+

+	public Organisation get(long id) {

+		TypedQuery<Organisation> query = em.createNamedQuery("getOrganisationById", Organisation.class);

+		query.setParameter("id", id);

+		Organisation o = null;

+		try {

+			o = query.getSingleResult();

+		} catch (NoResultException e) {

+			// o = null;

+		}

+		return o;

+	}

+

+	public Organisation get(String name) {

+		List<Organisation> orgs = em.createNamedQuery("getOrganisationByName", Organisation.class).setParameter("name", name).getResultList();

+		return orgs == null || orgs.isEmpty() ? null : orgs.get(0);

+	}

+

+	public List<Organisation> get(int start, int count) {

+		TypedQuery<Organisation> q = em.createNamedQuery("getNondeletedOrganisations", Organisation.class);

+		q.setFirstResult(start);

+		q.setMaxResults(count);

+		return q.getResultList();

+	}

+

+	public List<Organisation> get(String search, int start, int count, String sort) {

+		TypedQuery<Organisation> q = em.createQuery(DaoHelper.getSearchQuery("Organisation", "o", search, true, false, sort, searchFields), Organisation.class);

+		q.setFirstResult(start);

+		q.setMaxResults(count);

+		return q.getResultList();

+	}

+	

+	public long count() {

+		TypedQuery<Long> q = em.createNamedQuery("countOrganisations", Long.class);

+		return q.getSingleResult();

+	}

+

+	public long count(String search) {

+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Organisation", "o", search, true, true, null, searchFields), Long.class);

+		return q.getSingleResult();

+	}

+	

+	public List<Organisation> get(Collection<Long> ids) {

+		return em.createNamedQuery("getOrganisationsByIds", Organisation.class).setParameter("ids", ids).getResultList();

+	}

+

+	public Organisation update(Organisation entity, Long userId) {

+		if (entity.getOrganisation_id() == null) {

+			if (userId != null) {

+				entity.setInsertedby(userId);

+			}

+			entity.setStarttime(new Date());

+			em.persist(entity);

+		} else {

+			if (userId != null) {

+				entity.setUpdatedby(userId);

+			}

+			entity.setUpdatetime(new Date());

+			em.merge(entity);

+		}

+		return entity;

+	}

+

+	public void delete(Organisation entity, Long userId) {

+		em.createNamedQuery("deleteUsersFromOrganisation")

+			.setParameter("id", entity.getOrganisation_id())

+			.executeUpdate();

+

+		entity.setDeleted(true);

+		if (userId != null) {

+			entity.setUpdatedby(userId);

+		}

+

+		em.merge(entity);

+	}

+}

diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/OrganisationUserDao.java b/src/db/java/org/apache/openmeetings/db/dao/user/OrganisationUserDao.java
new file mode 100644
index 0000000..e3dc9cd
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/OrganisationUserDao.java
@@ -0,0 +1,146 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.db.dao.user;

+

+import java.util.Date;

+import java.util.List;

+

+import javax.persistence.EntityManager;

+import javax.persistence.PersistenceContext;

+import javax.persistence.TypedQuery;

+

+import org.apache.openmeetings.db.dao.IDataProviderDao;

+import org.apache.openmeetings.db.entity.user.Organisation_Users;

+import org.apache.openmeetings.db.entity.user.User;

+import org.apache.openmeetings.util.DaoHelper;

+import org.springframework.beans.factory.annotation.Autowired;

+import org.springframework.transaction.annotation.Transactional;

+

+@Transactional

+public class OrganisationUserDao implements IDataProviderDao<Organisation_Users> {

+	@PersistenceContext

+	private EntityManager em;

+	@Autowired

+	private UserDao usersDao;

+	public final static String[] searchFields = {"user.lastname", "user.firstname", "user.login", "user.adresses.email"};

+

+	public Organisation_Users get(long id) {

+		TypedQuery<Organisation_Users> q = em.createNamedQuery("getOrganisationUsersById", Organisation_Users.class);

+		q.setParameter("id", id);

+		return q.getSingleResult();

+	}

+

+	public List<Organisation_Users> get(int start, int count) {

+		throw new RuntimeException("Should not be used");

+	}

+

+	public List<Organisation_Users> get(String search, int start, int count, String sort) {

+		throw new RuntimeException("Should not be used");

+	}

+	

+	public List<Organisation_Users> get(long orgId, String search, int start, int count, String sort) {

+		TypedQuery<Organisation_Users> q = em.createQuery(DaoHelper.getSearchQuery("Organisation_Users", "ou", null, search, false, false, "ou.organisation.organisation_id = :orgId", sort, searchFields), Organisation_Users.class);

+		q.setParameter("orgId", orgId);

+		q.setFirstResult(start);

+		q.setMaxResults(count);

+		return q.getResultList();

+	}

+	

+	public List<Organisation_Users> get(long orgId, int start, int count) {

+		TypedQuery<Organisation_Users> q = em.createNamedQuery("getOrganisationUsersByOrgId", Organisation_Users.class);

+		q.setParameter("id", orgId);

+		q.setFirstResult(start);

+		q.setMaxResults(count);

+		return q.getResultList();

+	}

+

+	public Organisation_Users getByOrganizationAndUser(long orgId, long userId) {

+		try {

+			List<Organisation_Users> list = em.createNamedQuery("isUserInOrganization", Organisation_Users.class)

+					.setParameter("orgId", orgId).setParameter("userId", userId).getResultList();

+			if (list != null && !list.isEmpty()) {

+				return list.get(0);

+			}

+		} catch (Exception e) {

+			//no-op

+		}

+		return null;

+	}

+	

+	public boolean isUserInOrganization(long orgId, long userId) {

+		return em.createNamedQuery("isUserInOrganization", Organisation_Users.class)

+				.setParameter("orgId", orgId).setParameter("userId", userId).getResultList().size() > 0;

+	}

+	

+	public long count() {

+		throw new RuntimeException("Should not be used");

+	}

+

+	public long count(String search) {

+		throw new RuntimeException("Should not be used");

+	}

+	

+	public long count(long orgId, String search) {

+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("Organisation_Users", "ou", search, false, true, null, searchFields), Long.class);

+		return q.getSingleResult();

+	}

+	

+	public long count(long orgId) {

+		TypedQuery<Long> q = em.createNamedQuery("countOrganisationUsers", Long.class);

+		q.setParameter("id", orgId);

+		return q.getSingleResult();

+	}

+

+	public void update(List<Organisation_Users> list, Long userId) {

+		for (Organisation_Users ou : list) {

+			update(ou, userId);

+		}

+	}

+	

+	public Organisation_Users update(Organisation_Users entity, Long userId) {

+		if (entity.getOrganisation_users_id() == null) {

+			entity.setStarttime(new Date());

+			em.persist(entity);

+		} else {

+			entity.setUpdatetime(new Date());

+			entity = em.merge(entity);

+		}

+		updateUser(entity, false, userId);

+		return entity;

+	}

+

+	private void updateUser(Organisation_Users entity, boolean delete, Long userId) {

+		//entity has been detached need to re-fetch

+		User u = usersDao.get(entity.getUser().getUser_id());

+		int idx = u.getOrganisation_users().indexOf(entity);

+		if (delete && idx > -1) {

+			Organisation_Users ou = u.getOrganisation_users().remove(idx);

+			em.remove(ou);

+		} else if (!delete && idx < 0) {

+			u.getOrganisation_users().add(entity);

+		}

+		usersDao.update(u, userId);

+	}

+	

+	public void delete(Organisation_Users entity, Long userId) {

+		if (entity.getOrganisation_users_id() != null) {

+			updateUser(entity, true, userId);

+		}

+	}

+}

diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/PrivateMessageFolderDao.java b/src/db/java/org/apache/openmeetings/db/dao/user/PrivateMessageFolderDao.java
new file mode 100644
index 0000000..276f1bd
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/PrivateMessageFolderDao.java
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.entity.user.PrivateMessageFolder;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class PrivateMessageFolderDao implements IDataProviderDao<PrivateMessageFolder> {
+	private static final Logger log = Red5LoggerFactory.getLogger(PrivateMessageFolderDao.class, webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+	
+	public Long addPrivateMessageFolder(String folderName, Long userId) {
+		try {
+			PrivateMessageFolder privateMessageFolder = new PrivateMessageFolder();
+			privateMessageFolder.setFolderName(folderName);
+			privateMessageFolder.setUserId(userId);
+			privateMessageFolder.setInserted(new Date());
+			
+			privateMessageFolder = em.merge(privateMessageFolder);
+			Long privateMessageFolderId = privateMessageFolder.getPrivateMessageFolderId();
+			
+			return privateMessageFolderId;	
+		} catch (Exception e) {
+			log.error("[addPrivateMessageFolder]",e);
+		}
+		return null;
+	}
+	
+	public Long addPrivateMessageFolderObj(PrivateMessageFolder privateMessageFolder) {
+		try {
+			privateMessageFolder.setInserted(new Date());
+			
+			privateMessageFolder = em.merge(privateMessageFolder);
+			Long privateMessageFolderId = privateMessageFolder.getPrivateMessageFolderId();
+			
+			return privateMessageFolderId;	
+		} catch (Exception e) {
+			log.error("[addPrivateMessageFolder]",e);
+		}
+		return null;
+	}
+	
+	public PrivateMessageFolder get(long privateMessageFolderId) {
+		try {
+			String hql = "select c from PrivateMessageFolder c " +
+						"where c.privateMessageFolderId = :privateMessageFolderId ";
+
+			TypedQuery<PrivateMessageFolder> query = em.createQuery(hql, PrivateMessageFolder.class); 
+			query.setParameter("privateMessageFolderId", privateMessageFolderId);
+			
+			PrivateMessageFolder privateMessageFolder = null;
+			try {
+				privateMessageFolder = query.getSingleResult();
+		    } catch (NoResultException ex) {
+		    }
+			
+			return privateMessageFolder;
+		} catch (Exception e) {
+			log.error("[getPrivateMessageFolderById]",e);
+		}
+		return null;
+	}
+
+	public List<PrivateMessageFolder> get(int start, int count) {
+		return em.createQuery("SELECT c FROM PrivateMessageFolder c ORDER BY c.privateMessageFolderId", PrivateMessageFolder.class)
+				.setFirstResult(start).setMaxResults(count)
+				.getResultList();
+	}
+
+	public PrivateMessageFolder update(PrivateMessageFolder privateMessageFolder, Long userId) {
+		if (privateMessageFolder.getPrivateMessageFolderId() == 0) {
+			em.persist(privateMessageFolder);
+	    } else {
+	    	if (!em.contains(privateMessageFolder)) {
+	    		privateMessageFolder = em.merge(privateMessageFolder);
+		    }
+		}
+		return privateMessageFolder;
+	}
+	
+	public List<PrivateMessageFolder> getPrivateMessageFolderByUserId(Long userId) {
+		try {
+			String hql = "select c from PrivateMessageFolder c " +
+						"where c.userId = :userId ";
+
+			TypedQuery<PrivateMessageFolder> query = em.createQuery(hql, PrivateMessageFolder.class); 
+			query.setParameter("userId", userId);
+			
+			List<PrivateMessageFolder> privateMessageFolders = query.getResultList();
+			
+			return privateMessageFolders;
+		} catch (Exception e) {
+			log.error("[getPrivateMessageFolderByUserId]",e);
+		}
+		return null;
+	}
+
+	public void delete(PrivateMessageFolder privateMessageFolder, Long userId) {
+		privateMessageFolder = em.find(PrivateMessageFolder.class, privateMessageFolder.getPrivateMessageFolderId());
+		em.remove(privateMessageFolder);
+	}
+
+	public List<PrivateMessageFolder> get(String search, int start, int count, String order) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public long count() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public long count(String search) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/PrivateMessagesDao.java b/src/db/java/org/apache/openmeetings/db/dao/user/PrivateMessagesDao.java
new file mode 100644
index 0000000..b4e3ce0
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/PrivateMessagesDao.java
@@ -0,0 +1,194 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import javax.persistence.TypedQuery;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.PrivateMessage;
+import org.apache.openmeetings.db.entity.user.User;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class PrivateMessagesDao implements IDataProviderDao<PrivateMessage> {
+	private static final Logger log = Red5LoggerFactory.getLogger(PrivateMessagesDao.class, webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+	
+	public Long addPrivateMessage(String subject, String message, Long parentMessageId, 
+			User from, User to, User owner, Boolean bookedRoom, Room room,
+			Boolean isContactRequest, Long userContactId) {
+		try {
+			PrivateMessage privateMessage = new PrivateMessage();
+			privateMessage.setInserted(new Date());
+			privateMessage.setSubject(subject);
+			privateMessage.setMessage(message);
+			privateMessage.setFrom(from);
+			privateMessage.setTo(to);
+			privateMessage.setOwner(owner);
+			privateMessage.setBookedRoom(Boolean.TRUE.equals(bookedRoom));
+			privateMessage.setRoom(room);
+			privateMessage.setParentMessage(parentMessageId);
+			privateMessage.setFolderId(INBOX_FOLDER_ID);
+			privateMessage.setIsRead(false);
+			privateMessage.setIsContactRequest(isContactRequest);
+			privateMessage.setUserContactId(userContactId);
+			
+			privateMessage = em.merge(privateMessage);
+			Long privateMessageId = privateMessage.getFolderId();
+			
+			return privateMessageId;			
+		} catch (Exception e) {
+			log.error("[addPrivateMessage]",e);
+		}
+		return null;
+	}
+	
+	public List<PrivateMessage> get(int first, int count) {
+		return em.createNamedQuery("getPrivateMessages", PrivateMessage.class)
+				.setFirstResult(first).setMaxResults(count)
+				.getResultList();
+	}
+	
+	public PrivateMessage get(long id) {
+		TypedQuery<PrivateMessage> query = em.createNamedQuery("getPrivateMessageById", PrivateMessage.class); 
+		query.setParameter("id", id);
+		PrivateMessage privateMessage = null;
+		try {
+			privateMessage = query.getSingleResult();
+	    } catch (NoResultException ex) {
+	    }
+		return privateMessage;
+	}
+	
+	public PrivateMessage update(PrivateMessage entity, Long userId) {
+		if (entity.getId() < 1) {
+			entity.setInserted(new Date());
+			em.persist(entity);
+	    } else {
+    		entity = em.merge(entity);
+		}
+		return entity;
+	}
+	
+	private String getQuery(boolean isCount, String search, String orderBy, boolean asc) {
+		StringBuilder hql = new StringBuilder("SELECT ");
+		hql.append(isCount ? "COUNT(" : "").append("m").append(isCount ? ")" : "")
+			.append(" FROM PrivateMessage m WHERE m.owner.user_id = :ownerId ")
+			.append(" AND m.folderId = :folderId ");
+		
+		if (!StringUtils.isEmpty(search)) {
+			hql.append(" AND ( ")
+				.append("lower(m.subject) LIKE :search ")
+				.append("OR lower(m.message) LIKE :search ")
+				.append("OR lower(m.from.firstname) LIKE :search ")
+				.append("OR lower(m.from.lastname) LIKE :search ")
+				.append("OR lower(m.from.login) LIKE :search ")
+				.append("OR lower(m.from.adresses.email) LIKE :search ")
+				.append(" ) ");
+		}
+		
+		if (!isCount && !StringUtils.isEmpty(orderBy)) {
+			hql.append(" ORDER BY ").append(orderBy).append(asc ? " ASC" : " DESC");
+		}
+		return hql.toString();
+	}
+	
+	public Long count(Long ownerId, Long folderId, String search) {
+		TypedQuery<Long> query = em.createQuery(getQuery(true, search, null, true), Long.class); 
+		query.setParameter("ownerId", ownerId);
+		if (!StringUtils.isEmpty(search)) {
+			query.setParameter("search", StringUtils.lowerCase("%" + search + "%"));
+		}
+		query.setParameter("folderId", folderId);
+		return query.getSingleResult();
+	}
+	
+	public List<PrivateMessage> get(Long ownerId, Long folderId, String search, String orderBy, boolean asc, int start, int max) {
+		TypedQuery<PrivateMessage> query = em.createQuery(getQuery(false, search, orderBy, asc), PrivateMessage.class); 
+		query.setParameter("ownerId", ownerId);
+		query.setParameter("folderId", folderId);
+		if (!StringUtils.isEmpty(search)) {
+			query.setParameter("search", StringUtils.lowerCase("%" + search + "%"));
+		}
+		query.setFirstResult(start);
+		query.setMaxResults(max);
+		return query.getResultList();
+	}
+	
+	public int updateReadStatus(Collection<Long> ids, Boolean isRead) {
+		Query query = em.createNamedQuery("updatePrivateMessagesReadStatus"); 
+		query.setParameter("isRead", isRead);
+		query.setParameter("ids", ids);
+		return query.executeUpdate();
+	}
+
+	public Integer moveMailsToFolder(Collection<Long> ids, Long folderId) {
+		Query query = em.createNamedQuery("moveMailsToFolder"); 
+		query.setParameter("folderId", folderId);
+		query.setParameter("ids", ids);
+		return query.executeUpdate();
+	}
+	
+	public int delete(Collection<Long> ids) {
+		Query query = em.createNamedQuery("deletePrivateMessages"); 
+		query.setParameter("ids", ids);
+		return query.executeUpdate();
+	}
+	
+	public List<PrivateMessage> getByRoom(Long roomId) {
+		return em.createNamedQuery("getPrivateMessagesByRoom", PrivateMessage.class)
+				.setParameter("roomId", roomId).getResultList();
+	}
+
+	public List<PrivateMessage> get(String search, int start, int count, String order) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public long count() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public long count(String search) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	public void delete(PrivateMessage entity, Long userId) {
+		// TODO Auto-generated method stub
+		
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/SalutationDao.java b/src/db/java/org/apache/openmeetings/db/dao/user/SalutationDao.java
new file mode 100644
index 0000000..e3e76b6
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/SalutationDao.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.apache.openmeetings.db.entity.user.Salutation;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * CRUD operations for {@link Salutation}
+ * 
+ * @author swagner
+ * 
+ */
+@Transactional
+public class SalutationDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(SalutationDao.class, webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+
+	/**
+	 * Adds a new Salutation to the table Titles
+	 * 
+	 * @param titelname
+	 * @param fieldvalues_id
+	 * @return
+	 */
+	public Long addUserSalutation(String titelname, long fieldvalues_id) {
+		try {
+			Salutation ti = new Salutation();
+			ti.setName(titelname);
+			ti.setDeleted(false);
+			ti.setFieldvalues_id(fieldvalues_id);
+			ti.setStarttime(new Date());
+			ti = em.merge(ti);
+			Long salutations_id = ti.getSalutations_id();
+			return salutations_id;
+		} catch (Exception ex2) {
+			log.error("[addUserSalutation]", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * get a Salutation by given id
+	 * 
+	 * @param id
+	 * @param language_id
+	 * @return
+	 */
+	public Salutation get(Long id, long language_id) {
+		List<Salutation> ll = em.createNamedQuery("getSalutationById", Salutation.class)
+				.setParameter("id", id).getResultList();
+		return ll.isEmpty() ? null : ll.get(0);
+	}
+	
+	/**
+	 * get a list of all availible Salutations
+	 * 
+	 * @param language_id
+	 * @return
+	 */
+	public List<Salutation> getUserSalutations(long language_id) {
+		List<Salutation> ll = em.createNamedQuery("getSalutations", Salutation.class).getResultList();
+		return ll;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/StateDao.java b/src/db/java/org/apache/openmeetings/db/dao/user/StateDao.java
new file mode 100644
index 0000000..eb28ef4
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/StateDao.java
@@ -0,0 +1,153 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * CRUD operations for {@link State}
+ * 
+ * @author sebawagner
+ * 
+ */
+@Transactional
+public class StateDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			StateDao.class, OpenmeetingsVariables.webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+
+	/**
+	 * adds a new State to the states table with no short name and code
+	 * 
+	 * @param name
+	 * @return the id of the new state or null if an error occurred
+	 */
+	public Long addState(String name) {
+		return addState(name, "", 0);
+	}
+	
+	/**
+	 * adds a new State to the states table
+	 * 
+	 * @param name the name of the country
+	 * @param shortName the short name of the country
+	 * @param code the code of the country
+	 * @return the id of the new state or null if an error occurred
+	 */
+	public Long addState(String name, String shortName, int code) {
+		try {
+
+			State st = new State();
+			st.setName(name);
+			st.setShortName(shortName);
+			st.setCode(code);
+			st.setStarttime(new Date());
+			st.setDeleted(false);
+
+			st = em.merge(st);
+			Long id = st.getState_id();
+
+			log.debug("added id " + id);
+
+			return id;
+		} catch (Exception ex2) {
+			log.error("addState", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * selects a state by its id
+	 * 
+	 * @param state_id
+	 * @return the state-object or null
+	 */
+	public State getStateById(long state_id) {
+		try {
+			TypedQuery<State> query = em
+					.createNamedQuery("getStateById", State.class);
+			query.setParameter("state_id", state_id);
+			query.setParameter("deleted", true);
+			List<State> ll = query.getResultList();
+			if (ll.size() > 0) {
+				return ll.get(0);
+			}
+		} catch (Exception ex2) {
+			log.error("getStateById", ex2);
+		}
+		return null;
+	}
+	
+	/**
+	 * selects a state by its name
+	 * 
+	 * @param state_id
+	 * @return the state-object or null
+	 */
+	public State getStateByName(String name) {
+		try {
+			if (name == null) {
+				return null;
+			}
+			TypedQuery<State> query = em
+					.createNamedQuery("getStateByName", State.class);
+			query.setParameter("name", name.toLowerCase());
+			query.setParameter("deleted", true);
+			List<State> ll = query.getResultList();
+			if (ll.size() > 0) {
+				return ll.get(0);
+			}
+		} catch (Exception ex2) {
+			log.error("getStateByName", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * Get all state-Object
+	 * 
+	 * @return List of State Objects or null
+	 */
+	public List<State> getStates() {
+		try {
+			TypedQuery<State> query = em
+					.createNamedQuery("getStates", State.class);
+			query.setParameter("deleted", true);
+			List<State> ll = query.getResultList();
+			return ll;
+		} catch (Exception ex2) {
+			log.error("getStates", ex2);
+		}
+		return null;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/UserContactsDao.java b/src/db/java/org/apache/openmeetings/db/dao/user/UserContactsDao.java
new file mode 100644
index 0000000..b0f23e6
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/UserContactsDao.java
@@ -0,0 +1,235 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.entity.user.UserContact;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class UserContactsDao {
+	private static final Logger log = Red5LoggerFactory.getLogger(UserContactsDao.class, webAppRootKey);
+	@PersistenceContext
+	private EntityManager em;
+    @Autowired
+    private UserDao userDao;
+
+	public Long addUserContact(Long user_id, Long ownerId, Boolean pending, String hash) {
+		try {
+			
+			UserContact userContact = new UserContact();
+			userContact.setInserted(new Date());
+			userContact.setOwner(userDao.get(ownerId));
+			userContact.setContact(userDao.get(user_id));
+			userContact.setPending(pending);
+			userContact.setHash(hash);
+			
+			userContact = update(userContact);
+			Long userContactId = userContact.getUserContactId();
+			
+			return userContactId;			
+		} catch (Exception e) {
+			log.error("[addUserContact]",e);
+		}
+		return null;
+	}
+	
+	public Long addUserContactObj(UserContact userContact) {
+		try {
+			
+			userContact.setInserted(new Date());
+			
+			userContact = em.merge(userContact);
+			Long userContactId = userContact.getUserContactId();
+			
+			return userContactId;			
+		} catch (Exception e) {
+			log.error("[addUserContact]",e);
+		}
+		return null;
+	}
+	
+	/**
+	 * @param userContactDeleteId
+	 * @return rowcount of update
+	 */
+	public Integer deleteUserContact(Long userContactDeleteId) {
+		try {
+			Query query = em.createNamedQuery("deleteUserContact");
+			query.setParameter("userContactDeleteId", userContactDeleteId);
+	        return query.executeUpdate();
+		} catch (Exception e) {
+			log.error("[deleteUserContact]",e);
+		}
+		return null;
+	}
+	
+	/**
+	 * @param ownerId
+	 * @return rowcount of update
+	 */
+	public Integer deleteAllUserContacts(Long ownerId) {
+		try {
+			Query query = em.createNamedQuery("deleteAllUserContacts");
+	        query.setParameter("ownerId",ownerId);
+	        return query.executeUpdate();
+		} catch (Exception e) {
+			log.error("[deleteAllUserContacts]",e);
+		}
+		return null;
+	}
+	
+	public UserContact get(Long userId, Long ownerId) {
+		List<UserContact> ll = em.createNamedQuery("getContactByUserOwner", UserContact.class)
+				.setParameter("userId", userId)
+				.setParameter("ownerId", ownerId)
+				.getResultList();
+		log.info("number of contacts:: " + ll.size());
+		return ll != null && ll.size() == 1 ? ll.get(0) : null;
+	}
+	
+	public boolean isContact(Long userId, Long ownerId) {
+		UserContact c = get(userId, ownerId);
+		return c == null ? false : !c.isPending();
+	}
+	
+	public List<UserContact> get(long ownerId, int first, int count) {
+		TypedQuery<UserContact> q = em.createNamedQuery("getContactsByUser", UserContact.class);
+		q.setParameter("user_id", ownerId);
+		q.setFirstResult(first);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+	
+	public long count(long ownerId) {
+		TypedQuery<Long> q = em.createNamedQuery("countContactsByUser", Long.class);
+		q.setParameter("user_id", ownerId);
+		return q.getSingleResult();
+	}
+	
+	public List<UserContact> getContactsByUserAndStatus(Long ownerId, Boolean pending) {
+		try {
+			TypedQuery<UserContact> query = em.createNamedQuery("getContactsByUserAndStatus", UserContact.class);
+			query.setParameter("ownerId", ownerId);
+			query.setParameter("pending", pending);
+			return query.getResultList();
+		} catch (Exception e) {
+			log.error("[getContactsByUserAndStatus]",e);
+		}
+		return null;
+	}
+	
+	public UserContact getUserContactByShareCalendar(Long contactId,
+			Boolean shareCalendar, Long userId) {
+		try {
+			TypedQuery<UserContact> query = em.createNamedQuery("getUserContactByShareCalendar",
+					UserContact.class);
+			query.setParameter("contactId", contactId);
+			query.setParameter("userId", userId);
+			query.setParameter("shareCalendar", shareCalendar);
+			List<UserContact> ll = query.getResultList();
+			if (ll.size() > 0) {
+				return ll.get(0);
+			}
+		} catch (Exception e) {
+			log.error("[getUserContactByShareCalendar]", e);
+		}
+		return null;
+	}
+
+	public List<UserContact> getContactsByShareCalendar(Long contactId, Boolean shareCalendar) {
+		try {
+			TypedQuery<UserContact> query = em.createNamedQuery("getContactsByShareCalendar", UserContact.class); 
+			query.setParameter("contactId", contactId);
+			query.setParameter("shareCalendar", shareCalendar);
+			return query.getResultList();
+		} catch (Exception e) {
+			log.error("[getContactsByShareCalendar]",e);
+		}
+		return null;
+	}
+	
+	public List<UserContact> getContactRequestsByUserAndStatus(Long user_id, Boolean pending) {
+		try {
+			TypedQuery<UserContact> query = em.createNamedQuery("getContactRequestsByUserAndStatus", UserContact.class); 
+			query.setParameter("user_id", user_id);
+			query.setParameter("pending", pending);
+			return query.getResultList();
+		} catch (Exception e) {
+			log.error("[getContactRequestsByUserAndStatus]",e);
+		}
+		return null;
+	}
+	
+	public UserContact get(Long id) {
+		try {
+			TypedQuery<UserContact> query = em.createNamedQuery("getUserContactsById", UserContact.class); 
+			query.setParameter("userContactId", id);
+			UserContact userContacts = null;
+			try {
+				userContacts = query.getSingleResult();
+		    } catch (NoResultException ex) {
+		    }
+			return userContacts;
+		} catch (Exception e) {
+			log.error("[getUserContacts]",e);
+		}
+		return null;
+	}
+	
+	public List<UserContact> get() {
+		return em.createNamedQuery("getUserContacts", UserContact.class).getResultList();
+	}
+	
+	public Long updateContactStatus(Long userContactId, Boolean pending) {
+		try {
+			UserContact userContacts = get(userContactId);
+			userContacts.setPending(pending);
+			update(userContacts);
+			return userContactId;
+		} catch (Exception e) {
+			log.error("[updateContactStatus]",e);
+		}
+		return null;
+	}
+	
+	public UserContact update(UserContact c) {
+		if (c.getUserContactId() == 0) {
+			c.setInserted(new Date());
+			em.persist(c);
+		} else {
+			c.setUpdated(new Date());
+			em.merge(c);
+		}
+		return c;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dao/user/UserDao.java b/src/db/java/org/apache/openmeetings/db/dao/user/UserDao.java
new file mode 100644
index 0000000..e7d92ce
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dao/user/UserDao.java
@@ -0,0 +1,686 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dao.user;
+
+import static org.apache.openmeetings.db.util.UserHelper.getMinLoginLength;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.security.NoSuchAlgorithmException;
+import java.util.Collection;
+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.TimeZone;
+import java.util.UUID;
+
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.openjpa.persistence.OpenJPAEntityManager;
+import org.apache.openjpa.persistence.OpenJPAPersistence;
+import org.apache.openjpa.persistence.OpenJPAQuery;
+import org.apache.openmeetings.db.dao.IDataProviderDao;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.entity.user.Address;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.db.util.UserHelper;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.DaoHelper;
+import org.apache.openmeetings.util.OmException;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * CRUD operations for {@link User}
+ * 
+ * @author swagner, solomax, vasya
+ * 
+ */
+@Transactional
+public class UserDao implements IDataProviderDao<User> {
+	private static final Logger log = Red5LoggerFactory.getLogger(UserDao.class, webAppRootKey);
+
+	public final static String[] searchFields = {"lastname", "firstname", "login", "adresses.email", "adresses.town"};
+
+	@PersistenceContext
+	private EntityManager em;
+
+	@Autowired
+	private ConfigurationDao cfgDao;
+	@Autowired
+	private StateDao stateDao;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+
+	public static Set<Right> getDefaultRights() {
+		Set<Right> rights = new HashSet<User.Right>();
+		rights.add(Right.Login);
+		rights.add(Right.Dashboard);
+		rights.add(Right.Room);
+		return rights;
+	}
+	/**
+	 * Get a new instance of the {@link User} entity, with all default values
+	 * set
+	 * 
+	 * @param currentUser - the user to copy time zone from
+	 * @return new User instance
+	 */
+	public User getNewUserInstance(User currentUser) {
+		User user = new User();
+		user.setSalutations_id(1L); // TODO: Fix default selection to be configurable
+		user.setRights(getDefaultRights());
+		user.setLanguage_id(cfgDao.getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, "1"));
+		user.setTimeZoneId(timezoneUtil.getTimeZone(currentUser).getID());
+		user.setForceTimeZoneCheck(false);
+		user.setSendSMS(false);
+		user.setAge(new Date());
+		Address adresses = new Address();
+		adresses.setStates(stateDao.getStateById(1L));
+		user.setAdresses(adresses);
+		user.setShowContactData(false);
+		user.setShowContactDataToContacts(false);
+
+		return user;
+	}
+
+	public List<User> get(int first, int count) {
+		TypedQuery<User> q = em.createNamedQuery("getNondeletedUsers", User.class);
+		q.setFirstResult(first);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+	
+	private String getAdditionalJoin(boolean filterContacts) {
+		return filterContacts ? "LEFT JOIN u.organisation_users ou" : null;
+	}
+	
+	private String getAdditionalWhere(boolean excludeContacts, Map<String, Object> params) {
+		if (excludeContacts) {
+			params.put("contact", Type.contact);
+			return "u.type <> :contact";
+		}
+		return null;
+	}
+	
+	private String getAdditionalWhere(boolean filterContacts, Long ownerId, Map<String, Object> params) {
+		if (filterContacts) {
+			params.put("ownerId", ownerId);
+			params.put("contact", Type.contact);
+			return "((u.type <> :contact AND ou.organisation.organisation_id IN (SELECT ou.organisation.organisation_id FROM Organisation_Users ou WHERE ou.user.user_id = :ownerId)) "
+				+ "OR (u.type = :contact AND u.ownerId = :ownerId))";
+		}
+		return null;
+	}
+	
+	private void setAdditionalParams(TypedQuery<?> q, Map<String, Object> params) {
+		for (Map.Entry<String, Object> me: params.entrySet()) {
+			q.setParameter(me.getKey(), me.getValue());
+		}
+	}
+
+	public List<User> get(String search, int start, int count, String sort, boolean filterContacts, long currentUserId) {
+		Map<String, Object> params = new HashMap<String, Object>();
+		TypedQuery<User> q = em.createQuery(DaoHelper.getSearchQuery("User", "u", getAdditionalJoin(filterContacts), search, true, true, false
+				, getAdditionalWhere(filterContacts, currentUserId, params), sort, searchFields), User.class);
+		q.setFirstResult(start);
+		q.setMaxResults(count);
+		setAdditionalParams(q, params);
+		return q.getResultList();
+	}
+	
+	public long count() {
+		// get all users
+		TypedQuery<Long> q = em.createNamedQuery("countNondeletedUsers", Long.class);
+		return q.getSingleResult();
+	}
+
+	public long count(String search) {
+		return count(search, false, -1);
+	}
+	
+	public long count(String search, long currentUserId) {
+		return count(search, false, currentUserId);
+	}
+	
+	public long count(String search, boolean filterContacts, long currentUserId) {
+		Map<String, Object> params = new HashMap<String, Object>();
+		TypedQuery<Long> q = em.createQuery(DaoHelper.getSearchQuery("User", "u", getAdditionalJoin(filterContacts), search, true, true, true
+				, getAdditionalWhere(filterContacts, currentUserId, params), null, searchFields), Long.class);
+		setAdditionalParams(q, params);
+		return q.getSingleResult();
+	}
+	
+	//This is AdminDao method
+	public List<User> get(String search, boolean excludeContacts, int first, int count) {
+		Map<String, Object> params = new HashMap<String, Object>();
+		TypedQuery<User> q = em.createQuery(DaoHelper.getSearchQuery("User", "u", null, search, true, true, false
+				, getAdditionalWhere(excludeContacts, params), null, searchFields), User.class);
+		setAdditionalParams(q, params);
+		q.setFirstResult(first);
+		q.setMaxResults(count);
+		return q.getResultList();
+	}
+
+	public List<User> get(String search, boolean filterContacts, long currentUserId) {
+		Map<String, Object> params = new HashMap<String, Object>();
+		TypedQuery<User> q = em.createQuery(DaoHelper.getSearchQuery("User", "u", getAdditionalJoin(filterContacts), search, true, true, false
+				, getAdditionalWhere(filterContacts, currentUserId, params), null, searchFields), User.class);
+		setAdditionalParams(q, params);
+		return q.getResultList();
+	}
+
+	public User update(User u, Long userId) {
+		if (u.getOrganisation_users() != null) {
+			for (Organisation_Users ou : u.getOrganisation_users()) {
+				ou.setUser(u);
+			}
+		}
+		if (u.getUser_id() == null) {
+			if (u.getRegdate() == null) {
+				u.setRegdate(new Date());
+			}
+			u.setStarttime(new Date());
+			em.persist(u);
+		} else {
+			u.setUpdatetime(new Date());
+			u =	em.merge(u);
+		}
+		//this is necessary due to organisation details are lost on update
+		for (Organisation_Users ou : u.getOrganisation_users()) {
+			em.refresh(ou);
+		}
+		return u;
+	}
+	
+	// TODO: Why the password field is not set via the Model is because its
+	// FetchType is Lazy, this extra hook here might be not needed with a
+	// different mechanism to protect the password from being read
+	// sebawagner, 01.10.2012
+	public User update(User user, String password, long updatedBy) throws NoSuchAlgorithmException {
+		User u = update(user, updatedBy);
+		if (password != null && !password.isEmpty()) {
+			//OpenJPA is not allowing to set fields not being fetched before
+			User u1 = get(u.getUser_id(), true);
+			u1.updatePassword(cfgDao, password);
+			update(u1, updatedBy);
+		}
+		return u;
+	}
+	
+	public void delete(User u, Long userId) {
+		deleteUserID(u.getUser_id());
+	}
+
+	public User get(long user_id) {
+		return get(user_id, false);
+	}
+	
+	private User get(long user_id, boolean force) {
+		User u = null;
+		if (user_id > 0) {
+			OpenJPAEntityManager oem = OpenJPAPersistence.cast(em);
+			boolean qrce = oem.getFetchPlan().getQueryResultCacheEnabled();
+			oem.getFetchPlan().setQueryResultCacheEnabled(false); //FIXME update in cache during update
+			TypedQuery<User> q = oem.createNamedQuery("getUserById", User.class).setParameter("id", user_id);
+			@SuppressWarnings("unchecked")
+			OpenJPAQuery<User> kq = OpenJPAPersistence.cast(q);
+			kq.getFetchPlan().addFetchGroup("orgUsers");
+			if (force) {
+				kq.getFetchPlan().addFetchGroup("backupexport");
+			}
+			try {
+				u = kq.getSingleResult();
+			} catch (NoResultException ne) {
+				//no-op
+			}
+			oem.getFetchPlan().setQueryResultCacheEnabled(qrce);
+		} else {
+			log.info("[get] " + "Info: No USER_ID given");
+		}
+		return u;
+	}
+
+	public Long deleteUserID(long userId) {
+		try {
+			if (userId != 0) {
+				User us = get(userId);
+				for (Organisation_Users ou : us.getOrganisation_users()){
+					em.remove(ou);
+				}
+				us.setOrganisation_users(null);
+				us.setDeleted(true);
+				us.setUpdatetime(new Date());
+				us.setSipUser(null);
+				Address adr = us.getAdresses();
+				if (adr != null) {
+					adr.setDeleted(true);
+				}
+
+				if (us.getUser_id() == null) {
+					em.persist(us);
+				} else {
+					if (!em.contains(us)) {
+						em.merge(us);
+					}
+				}
+				return us.getUser_id();
+			}
+		} catch (Exception ex2) {
+			log.error("[deleteUserID]", ex2);
+		}
+		return null;
+	}
+
+	public List<User> get(Collection<Long> ids) {
+		return em.createNamedQuery("getUsersByIds", User.class).setParameter("ids", ids).getResultList();
+	}
+
+	public List<User> getAllUsers() {
+		TypedQuery<User> q = em.createNamedQuery("getNondeletedUsers", User.class);
+		return q.getResultList();
+	}
+
+	public List<User> getAllBackupUsers() {
+		try {
+			TypedQuery<User> q = em.createNamedQuery("getAllUsers", User.class);
+			@SuppressWarnings("unchecked")
+			OpenJPAQuery<User> kq = OpenJPAPersistence.cast(q);
+			kq.getFetchPlan().addFetchGroups("backupexport", "orgUsers");
+			return kq.getResultList();
+		} catch (Exception ex2) {
+			log.error("[getAllUsersDeleted] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * check for duplicates
+	 * 
+	 * @param login
+	 * @param type
+	 * @param domainId
+	 * @param id
+	 * @return
+	 */
+	public boolean checkLogin(String login, Type type, Long domainId, Long id) {
+		try {
+			User u = getByLogin(login, type, domainId);
+			return u == null || u.getUser_id().equals(id);
+		} catch (Exception e) {
+			//exception is thrown in case of non-unique result
+			return false;
+		}
+	}
+
+	/**
+	 * Checks if a mail is already taken by someone else
+	 * 
+	 * @param email
+	 * @param type
+	 * @param domainId
+	 * @param id
+	 * @return
+	 */
+	public boolean checkEmail(String email, Type type, Long domainId, Long id) {
+		log.debug("checkEmail: email = {}, id = {}", email, id);
+		try {
+			User u = getByEmail(email, type, domainId);
+			return u == null || u.getUser_id().equals(id);
+		} catch (Exception e) {
+			//exception is thrown in case of non-unique result
+			return false;
+		}
+	}
+	
+	public boolean validLogin(String login) {
+		return !Strings.isEmpty(login) && login.length() >= UserHelper.getMinLoginLength(cfgDao);
+	}
+	
+	public User getByLogin(String login, Type type, Long domainId) {
+		User u = null;
+		try {
+			u = em.createNamedQuery("getUserByLogin", User.class)
+					.setParameter("login", login)
+					.setParameter("type", type)
+					.setParameter("domainId", domainId == null ? 0 : domainId)
+					.getSingleResult();
+		} catch (NoResultException ex) {
+		}
+		return u;
+	}
+
+	public User getByEmail(String email) {
+		return getByEmail(email, User.Type.user, null);
+	}
+
+	public User getByEmail(String email, User.Type type, Long domainId) {
+		User u = null;
+		try {
+			u = em.createNamedQuery("getUserByEmail", User.class)
+					.setParameter("email", email)
+					.setParameter("type", type)
+					.setParameter("domainId", domainId == null ? 0 : domainId)
+					.getSingleResult();
+		} catch (NoResultException ex) {
+		}
+		return u;
+	}
+	
+	public Object getUserByHash(String hash) {
+		if (hash.length() == 0) {
+			return new Long(-5);
+		}
+		User us = null;
+		try {
+			us = em.createNamedQuery("getUserByHash", User.class)
+					.setParameter("resethash", hash)
+					.setParameter("type", User.Type.user)
+					.getSingleResult();
+		} catch (NoResultException ex) {
+		} catch (Exception e) {
+			log.error("[getUserByHash]", e);
+		}
+		if (us != null) {
+			return us;
+		} else {
+			return new Long(-5);
+		}
+	}
+
+	/**
+	 * @param search
+	 * @return
+	 */
+	public Long selectMaxFromUsersWithSearch(String search) {
+		try {
+			// get all users
+			TypedQuery<Long> query = em.createNamedQuery("selectMaxFromUsersWithSearch", Long.class);
+			query.setParameter("search", StringUtils.lowerCase(search));
+			List<Long> ll = query.getResultList();
+			log.info("selectMaxFromUsers" + ll.get(0));
+			return ll.get(0);
+		} catch (Exception ex2) {
+			log.error("[selectMaxFromUsers] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * Returns true if the password is correct
+	 * 
+	 * @param userId
+	 * @param password
+	 * @return
+	 */
+	public boolean verifyPassword(Long userId, String password) {
+		TypedQuery<Long> query = em.createNamedQuery("checkPassword", Long.class);
+		query.setParameter("userId", userId);
+		query.setParameter("password", ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(password));
+		return query.getResultList().get(0) == 1;
+
+	}
+
+	public User getContact(String email, long ownerId) {
+		return getContact(email, "", "", ownerId);
+	}
+	
+	public User getContact(String email, User owner) {
+		return getContact(email, "", "", null, null, owner);
+	}
+	
+	public User getContact(String email, String firstName, String lastName, long ownerId) {
+		return getContact(email, firstName, lastName, null, null, get(ownerId));
+	}
+	
+	public User getContact(String email, String firstName, String lastName, Long langId, String tzId, long ownerId) {
+		return getContact(email, firstName, lastName, langId, tzId, get(ownerId));
+	}
+	
+	public User getContact(String email, String firstName, String lastName, Long langId, String tzId, User owner) {
+		User to = null;
+		try {
+			to = em.createNamedQuery("getContactByEmailAndUser", User.class)
+					.setParameter("email", email).setParameter("type", User.Type.contact).setParameter("ownerId", owner.getUser_id()).getSingleResult();
+		} catch (Exception e) {
+			//no-op
+		}
+		if (to == null) {
+			to = new User();
+			to.setType(Type.contact);
+			String login = owner.getUser_id() + "_" + email; //UserId prefix is used to ensure unique login
+			to.setLogin(login.length() < getMinLoginLength(cfgDao) ? UUID.randomUUID().toString() : login);
+			to.setFirstname(firstName);
+			to.setLastname(lastName);
+			to.setLanguage_id(null == langId ? owner.getLanguage_id() : langId);
+			to.setOwnerId(owner.getUser_id());
+			to.setAdresses(new Address());
+			to.getAdresses().setEmail(email);
+			to.setTimeZoneId(null == tzId ? owner.getTimeZoneId() : tzId);
+		}
+		return to;
+	}
+
+	/**
+	 * @param hash
+	 * @return
+	 */
+	public User getUserByActivationHash(String hash) {
+		TypedQuery<User> query = em.createQuery("SELECT u FROM User as u WHERE u.activatehash = :activatehash"
+				+ " AND u.deleted = false", User.class);
+		query.setParameter("activatehash", hash);
+		User u = null;
+		try {
+			u = query.getSingleResult();
+		} catch (NoResultException e) {
+			// u=null}
+		}
+		return u;
+	}
+
+	private <T> TypedQuery<T> getUserProfileQuery(Class<T> clazz, long userId, String text, String offers, String search, String orderBy, boolean asc) {
+		Map<String, Object> params = new HashMap<String, Object>();
+		boolean filterContacts = true;
+		boolean count = clazz.isAssignableFrom(Long.class);
+		
+		StringBuilder sb = new StringBuilder("SELECT ");
+		sb.append(count ? "COUNT(" : "").append("u").append(count ? ") " : " ")
+			.append("FROM User u ").append(getAdditionalJoin(filterContacts)).append(" WHERE u.deleted = false AND ")
+			.append(getAdditionalWhere(filterContacts, userId, params));
+		if (!Strings.isEmpty(offers)) {
+			sb.append(" AND (LOWER(u.userOffers) LIKE :userOffers) ");
+			params.put("userOffers", getStringParam(offers));
+		}
+		if (!Strings.isEmpty(search)) {
+			sb.append(" AND (LOWER(u.userSearchs) LIKE :userSearchs) ");
+			params.put("userSearchs", getStringParam(search));
+		}
+		if (!Strings.isEmpty(text)) {
+			sb.append(" AND (LOWER(u.login) LIKE :search ")
+				.append("OR LOWER(u.firstname) LIKE :search ")
+				.append("OR LOWER(u.lastname) LIKE :search ")
+				.append("OR LOWER(u.adresses.email) LIKE :search ")
+				.append("OR LOWER(u.adresses.town) LIKE :search " + ") ");
+			params.put("search", getStringParam(text));
+		}
+		if (!count && !Strings.isEmpty(orderBy)) {
+			sb.append(" ORDER BY ").append(orderBy).append(asc ? " ASC" : " DESC");
+		}
+		TypedQuery<T> query = em.createQuery(sb.toString(), clazz);
+		setAdditionalParams(query, params);
+		return query;
+	}
+	
+	private String getStringParam(String param) {
+		return param == null ? "%" : "%" + StringUtils.lowerCase(param) + "%";
+	}
+	
+	public List<User> searchUserProfile(long userId, String text, String offers, String search, String orderBy, int start, int max, boolean asc) {
+		return getUserProfileQuery(User.class, userId, text, offers, search, orderBy, asc).setFirstResult(start).setMaxResults(max).getResultList();
+	}
+
+	public Long searchCountUserProfile(long userId, String text, String offers, String search) {
+		return getUserProfileQuery(Long.class, userId, text, offers, search, null, false).getSingleResult();
+	}
+
+	public User getExternalUser(String extId, String extType) {
+		User u = null;
+		try {
+			u = em.createNamedQuery("getExternalUser", User.class)
+				.setParameter("externalId", extId)
+				.setParameter("externalType", extType)
+				.getSingleResult();
+		} catch (NoResultException ex) {
+		}
+		return u;
+	}
+
+	public List<User> get(String search, int start, int count, String order) {
+		return get(search, start, count, order, false, -1);
+	}
+	
+	public Set<Right> getRights(Long id) {
+		Set<Right> rights = new HashSet<Right>();
+
+		if (id == null) {
+			return rights;
+		}
+		// For direct access of linked users
+		if (id < 0) {
+			rights.add(Right.Room);
+			return rights;
+		}
+
+		User u = get(id);
+		if (u != null) {
+			return u.getRights();
+		}
+		return rights;
+	}
+	
+	/**
+	 * login logic
+	 * 
+	 * @param userOrEmail: login or email of the user being tested
+	 * @param userpass: password of the user being tested
+	 * @return User object in case of successful login
+	 * @throws OmException in case of any issue 
+	 */
+	public User login(String userOrEmail, String userpass) throws OmException {
+		List<User> users = em.createNamedQuery("getUserByLoginOrEmail", User.class)
+				.setParameter("userOrEmail", userOrEmail)
+				.setParameter("type", Type.user)
+				.getResultList();
+
+		log.debug("debug SIZE: " + users.size());
+
+		if (users.size() == 0) {
+			throw new OmException(-10L);
+		}
+		User u = users.get(0);
+
+		if (!verifyPassword(u.getUser_id(), userpass)) {
+			throw new OmException(-11L);
+		}
+		// Check if activated
+		if (!AuthLevelUtil.hasLoginLevel(u.getRights())) {
+			throw new OmException(-41L);
+		}
+		log.debug("loginUser " + u.getOrganisation_users());
+		if (u.getOrganisation_users().isEmpty()) {
+			throw new OmException("No Organization assigned to user");
+		}
+		
+		u.setLastlogin(new Date());
+		return update(u, u.getUser_id());
+	}
+	
+	public Address getAddress(String street, String zip, String town, long states_id, String additionalname, String fax, String phone, String email) {
+		Address a =  new Address();
+		a.setStreet(street);
+		a.setZip(zip);
+		a.setTown(town);
+		a.setStates(stateDao.getStateById(states_id));
+		a.setAdditionalname(additionalname);
+		a.setComment("");
+		a.setFax(fax);
+		a.setPhone(phone);
+		a.setEmail(email);
+		return a;
+	}
+	
+	public User addUser(Set<Right> rights, String firstname, String login, String lastname, long language_id,
+			String userpass, Address adress, boolean sendSMS, Date age, String hash, TimeZone timezone,
+			Boolean forceTimeZoneCheck, String userOffers, String userSearchs, Boolean showContactData,
+			Boolean showContactDataToContacts, String externalId, String externalType, List<Organisation_Users> orgList, String pictureuri) throws NoSuchAlgorithmException {
+		
+		User u = new User();
+		u.setFirstname(firstname);
+		u.setLogin(login);
+		u.setLastname(lastname);
+		u.setAge(age);
+		u.setAdresses(adress);
+		u.setSendSMS(sendSMS);
+		u.setRights(rights);
+		u.setLastlogin(new Date());
+		u.setLasttrans(new Long(0));
+		u.setSalutations_id(1L);
+		u.setStarttime(new Date());
+		u.setActivatehash(hash);
+		u.setTimeZoneId(timezone.getID());
+		u.setForceTimeZoneCheck(forceTimeZoneCheck);
+		u.setExternalUserId(externalId);
+		u.setExternalUserType(externalType);
+		if (!Strings.isEmpty(u.getExternalUserType())) {
+			u.setType(Type.external);
+		}
+
+		u.setUserOffers(userOffers);
+		u.setUserSearchs(userSearchs);
+		u.setShowContactData(showContactData);
+		u.setShowContactDataToContacts(showContactDataToContacts);
+
+		// this is needed cause the language is not a needed data at registering
+		u.setLanguage_id(language_id != 0 ? language_id : null);
+		if (!Strings.isEmpty(userpass)) {
+			u.updatePassword(cfgDao, userpass);
+		}
+		u.setRegdate(new Date());
+		u.setDeleted(false);
+		u.setPictureuri(pictureuri);
+		u.setOrganisation_users(orgList);
+		
+		return update(u, null);
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/basic/ErrorResult.java b/src/db/java/org/apache/openmeetings/db/dto/basic/ErrorResult.java
new file mode 100644
index 0000000..779d1bb
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/basic/ErrorResult.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.basic;
+
+public class ErrorResult {
+	
+	private Long errorId;
+	private String errmessage;
+	private String errortype;
+
+	public ErrorResult(Long errorId, String errmessage, String errortype) {
+		super();
+		this.errorId = errorId;
+		this.errmessage = errmessage;
+		this.errortype = errortype;
+	}
+
+	public Long getErrorId() {
+		return errorId;
+	}
+
+	public void setErrorId(Long errorId) {
+		this.errorId = errorId;
+	}
+
+	public String getErrmessage() {
+		return errmessage;
+	}
+
+	public void setErrmessage(String errmessage) {
+		this.errmessage = errmessage;
+	}
+
+	public String getErrortype() {
+		return errortype;
+	}
+
+	public void setErrortype(String errortype) {
+		this.errortype = errortype;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/basic/SearchResult.java b/src/db/java/org/apache/openmeetings/db/dto/basic/SearchResult.java
new file mode 100644
index 0000000..afd5260
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/basic/SearchResult.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.basic;
+
+import java.util.Collection;
+
+
+public class SearchResult<T> {
+	private String objectName;
+	private Long records;
+	private Collection<T> result;
+	private Long errorId;
+	
+	public String getObjectName() {
+		return objectName;
+	}
+	public void setObjectName(String objectName) {
+		this.objectName = objectName;
+	}
+	public Long getRecords() {
+		return records;
+	}
+	public void setRecords(Long records) {
+		this.records = records;
+	}
+	public Collection<T> getResult() {
+		return result;
+	}
+	public void setResult(Collection<T> result) {
+		this.result = result;
+	}
+	public Long getErrorId() {
+		return errorId;
+	}
+	public void setErrorId(Long errorId) {
+		this.errorId = errorId;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/calendar/AppointmentCategoryDTO.java b/src/db/java/org/apache/openmeetings/db/dto/calendar/AppointmentCategoryDTO.java
new file mode 100644
index 0000000..b4f663b
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/calendar/AppointmentCategoryDTO.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.calendar;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.calendar.AppointmentCategory;
+
+public class AppointmentCategoryDTO {
+	private Long id;
+	private String name;
+	private Date inserted;
+	private Date updated;
+	private boolean deleted;
+	private String comment;
+	
+	public AppointmentCategoryDTO() {}
+	
+	public AppointmentCategoryDTO(AppointmentCategory c) {
+		this.id = c.getCategoryId();
+		this.name = c.getName();
+		this.inserted = c.getStarttime();
+		this.updated = c.getUpdatetime();
+		this.deleted = c.getDeleted();
+		this.comment = c.getComment();
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Date getInserted() {
+		return inserted;
+	}
+
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	public boolean isDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+	
+	public static List<AppointmentCategoryDTO> list(List<AppointmentCategory> l) {
+		List<AppointmentCategoryDTO> rList = new ArrayList<>();
+		if (l != null) {
+			for (AppointmentCategory c : l) {
+				rList.add(new AppointmentCategoryDTO(c));
+			}
+		}
+		return rList;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java b/src/db/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
new file mode 100644
index 0000000..c51da26
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/calendar/AppointmentDTO.java
@@ -0,0 +1,224 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.calendar;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.dto.room.RoomDTO;
+import org.apache.openmeetings.db.dto.user.UserDTO;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+
+public class AppointmentDTO {
+	private Long id;
+	private String title;
+	private String location;
+	private Calendar start;
+	private Calendar end;
+	private String description;
+	private UserDTO owner;
+	private Date inserted;
+	private Date updated;
+	private boolean deleted;
+	private AppointmentReminderTypeDTO reminder;
+	private RoomDTO room;
+	private String icalId;
+	private List<MeetingMemberDTO> meetingMembers;
+	private Long languageId;
+	private boolean passwordProtected;
+	private boolean connectedEvent;
+	private boolean reminderEmailSend;
+
+	public AppointmentDTO() {}
+
+	public AppointmentDTO(Appointment a) {
+		id = a.getId();
+		title = a.getTitle();
+		location = a.getLocation();
+		TimeZone tz = TimeZone.getTimeZone(a.getOwner().getTimeZoneId());
+		start = Calendar.getInstance(tz);
+		start.setTime(a.getStart());
+		end = Calendar.getInstance(tz);
+		end.setTime(a.getEnd());
+		description = a.getDescription();
+		owner = new UserDTO(a.getOwner());
+		inserted = a.getInserted();
+		updated = a.getUpdated();
+		deleted = a.isDeleted();
+		reminder = new AppointmentReminderTypeDTO(a.getRemind());
+		room = new RoomDTO(a.getRoom());
+		icalId = a.getIcalId();
+		meetingMembers = new ArrayList<>();
+		for(MeetingMember mm: a.getMeetingMembers()) {
+			meetingMembers.add(new MeetingMemberDTO(mm));
+		}
+		languageId = a.getLanguageId();
+		passwordProtected = a.isPasswordProtected();
+		connectedEvent = a.isConnectedEvent();
+		reminderEmailSend = a.isReminderEmailSend();
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getLocation() {
+		return location;
+	}
+
+	public void setLocation(String location) {
+		this.location = location;
+	}
+
+	public Calendar getStart() {
+		return start;
+	}
+
+	public void setStart(Calendar start) {
+		this.start = start;
+	}
+
+	public Calendar getEnd() {
+		return end;
+	}
+
+	public void setEnd(Calendar end) {
+		this.end = end;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public UserDTO getOwner() {
+		return owner;
+	}
+
+	public void setOwner(UserDTO owner) {
+		this.owner = owner;
+	}
+
+	public Date getInserted() {
+		return inserted;
+	}
+
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	public boolean isDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public AppointmentReminderTypeDTO getReminder() {
+		return reminder;
+	}
+
+	public void setReminder(AppointmentReminderTypeDTO reminder) {
+		this.reminder = reminder;
+	}
+
+	public RoomDTO getRoom() {
+		return room;
+	}
+
+	public void setRoom(RoomDTO room) {
+		this.room = room;
+	}
+
+	public String getIcalId() {
+		return icalId;
+	}
+
+	public void setIcalId(String icalId) {
+		this.icalId = icalId;
+	}
+
+	public List<MeetingMemberDTO> getMeetingMembers() {
+		return meetingMembers;
+	}
+
+	public void setMeetingMembers(List<MeetingMemberDTO> meetingMembers) {
+		this.meetingMembers = meetingMembers;
+	}
+
+	public Long getLanguageId() {
+		return languageId;
+	}
+
+	public void setLanguageId(Long languageId) {
+		this.languageId = languageId;
+	}
+
+	public boolean isPasswordProtected() {
+		return passwordProtected;
+	}
+
+	public void setPasswordProtected(boolean passwordProtected) {
+		this.passwordProtected = passwordProtected;
+	}
+
+	public boolean isConnectedEvent() {
+		return connectedEvent;
+	}
+
+	public void setConnectedEvent(boolean connectedEvent) {
+		this.connectedEvent = connectedEvent;
+	}
+
+	public boolean isReminderEmailSend() {
+		return reminderEmailSend;
+	}
+
+	public void setReminderEmailSend(boolean reminderEmailSend) {
+		this.reminderEmailSend = reminderEmailSend;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/calendar/AppointmentReminderTypeDTO.java b/src/db/java/org/apache/openmeetings/db/dto/calendar/AppointmentReminderTypeDTO.java
new file mode 100644
index 0000000..8a64d56
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/calendar/AppointmentReminderTypeDTO.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.calendar;
+
+import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps;
+
+public class AppointmentReminderTypeDTO {
+	private Long id;
+	private String name;
+
+	public AppointmentReminderTypeDTO() {}
+
+	public AppointmentReminderTypeDTO(AppointmentReminderTyps t) {
+		this.id = t.getTypId();
+		this.name = t.getName();
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java b/src/db/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
new file mode 100644
index 0000000..b90def0
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/calendar/MeetingMemberDTO.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.calendar;
+
+import org.apache.openmeetings.db.dto.user.UserDTO;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+
+public class MeetingMemberDTO {
+	private Long id;
+	private UserDTO user;
+	
+	public MeetingMemberDTO() {}
+
+	public MeetingMemberDTO(MeetingMember mm) {
+		this.id = mm.getId();
+		this.user = new UserDTO(mm.getUser());
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public UserDTO getUser() {
+		return user;
+	}
+
+	public void setUser(UserDTO user) {
+		this.user = user;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/file/FileExplorerObject.java b/src/db/java/org/apache/openmeetings/db/dto/file/FileExplorerObject.java
new file mode 100644
index 0000000..7b2e9dc
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/file/FileExplorerObject.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+
+/**
+ * @author sebastianwagner
+ *
+ */
+public class FileExplorerObject {
+
+	private FileExplorerItem[] userHome;
+	private FileExplorerItem[] roomHome;
+	private Long userHomeSize;
+	private Long roomHomeSize;
+	
+	public FileExplorerItem[] getUserHome() {
+		return userHome;
+	}
+	public void setUserHome(FileExplorerItem[] userHome) {
+		this.userHome = userHome;
+	}
+	public FileExplorerItem[] getRoomHome() {
+		return roomHome;
+	}
+	public void setRoomHome(FileExplorerItem[] roomHome) {
+		this.roomHome = roomHome;
+	}
+	public Long getUserHomeSize() {
+		return userHomeSize;
+	}
+	public void setUserHomeSize(Long userHomeSize) {
+		this.userHomeSize = userHomeSize;
+	}
+	public Long getRoomHomeSize() {
+		return roomHomeSize;
+	}
+	public void setRoomHomeSize(Long roomHomeSize) {
+		this.roomHomeSize = roomHomeSize;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/file/FilesObject.java b/src/db/java/org/apache/openmeetings/db/dto/file/FilesObject.java
new file mode 100644
index 0000000..381f9a1
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/file/FilesObject.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+
+/**
+ * This Object will represent a File on the File-System
+ * @author sebastianwagner
+ *
+ */
+public class FilesObject {
+	
+	private String fileName;
+	private String fileNamePure;
+	private String fileNameExt;
+	private String lastModified;
+	private String fileBytes;
+	private String isimage;
+	public String getFileName() {
+		return fileName;
+	}
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+	public String getFileNamePure() {
+		return fileNamePure;
+	}
+	public void setFileNamePure(String fileNamePure) {
+		this.fileNamePure = fileNamePure;
+	}
+	public String getFileNameExt() {
+		return fileNameExt;
+	}
+	public void setFileNameExt(String fileNameExt) {
+		this.fileNameExt = fileNameExt;
+	}
+	public String getLastModified() {
+		return lastModified;
+	}
+	public void setLastModified(String lastModified) {
+		this.lastModified = lastModified;
+	}
+	public String getFileBytes() {
+		return fileBytes;
+	}
+	public void setFileBytes(String fileBytes) {
+		this.fileBytes = fileBytes;
+	}
+	public String getIsimage() {
+		return isimage;
+	}
+	public void setIsimage(String isimage) {
+		this.isimage = isimage;
+	}
+	
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/file/FoldersObject.java b/src/db/java/org/apache/openmeetings/db/dto/file/FoldersObject.java
new file mode 100644
index 0000000..bba75d5
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/file/FoldersObject.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+/**
+ * Represents a Folder in the File System
+ * @author sebastianwagner
+ *
+ */
+public class FoldersObject {
+	
+	private String folderName;
+	private String lastModified;
+	
+	public String getFolderName() {
+		return folderName;
+	}
+	public void setFolderName(String folderName) {
+		this.folderName = folderName;
+	}
+	public String getLastModified() {
+		return lastModified;
+	}
+	public void setLastModified(String lastModified) {
+		this.lastModified = lastModified;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/file/LiberaryObject.java b/src/db/java/org/apache/openmeetings/db/dto/file/LiberaryObject.java
new file mode 100644
index 0000000..9849e26
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/file/LiberaryObject.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+/**
+ * Response of one Library-Files-Request
+ * @author sebastianwagner
+ *
+ */
+import java.util.LinkedList;
+
+public class LiberaryObject {
+	
+	//These Objects here should only be initialized if needed, 
+	//an empty LinkedList thorws a ServiceInvokationTarget-Exception (makes no sense to me but it
+	//is the way in Axis2 1.3
+	private LinkedList<FilesObject> filesList;
+	private LinkedList<FoldersObject> foldersList;
+	private PresentationObject presentationObject;
+	private String error;
+	public LinkedList<FilesObject> getFilesList() {
+		return filesList;
+	}
+	public void setFilesList(LinkedList<FilesObject> filesList) {
+		this.filesList = filesList;
+	}
+	public LinkedList<FoldersObject> getFoldersList() {
+		return foldersList;
+	}
+	public void setFoldersList(LinkedList<FoldersObject> foldersList) {
+		this.foldersList = foldersList;
+	}
+	public PresentationObject getPresentationObject() {
+		return presentationObject;
+	}
+	public void setPresentationObject(PresentationObject presentationObject) {
+		this.presentationObject = presentationObject;
+	}
+	public String getError() {
+		return error;
+	}
+	public void setError(String error) {
+		this.error = error;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresenationThumbs.java b/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresenationThumbs.java
new file mode 100644
index 0000000..8c69846
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresenationThumbs.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+
+public class LibraryPresenationThumbs {
+
+	private String name = "";
+	private LibraryPresentationThumb[] thumbs = null;
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public LibraryPresentationThumb[] getThumbs() {
+		return thumbs;
+	}
+	public void setThumbs(LibraryPresentationThumb[] thumbs) {
+		this.thumbs = thumbs;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresentation.java b/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresentation.java
new file mode 100644
index 0000000..02ab93f
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresentation.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+
+public class LibraryPresentation {
+
+	private LibraryPresentationFile originalDocument = null;
+	private LibraryPresentationFile pdfDocument = null;
+	private LibraryPresentationFile swfDocument = null;
+	private LibraryPresenationThumbs thumbs = null;
+	
+	public LibraryPresentationFile getOriginalDocument() {
+		return originalDocument;
+	}
+	public void setOriginalDocument(LibraryPresentationFile originalDocument) {
+		this.originalDocument = originalDocument;
+	}
+	public LibraryPresentationFile getPdfDocument() {
+		return pdfDocument;
+	}
+	public void setPdfDocument(LibraryPresentationFile pdfDocument) {
+		this.pdfDocument = pdfDocument;
+	}
+	public LibraryPresentationFile getSwfDocument() {
+		return swfDocument;
+	}
+	public void setSwfDocument(LibraryPresentationFile swfDocument) {
+		this.swfDocument = swfDocument;
+	}
+	public LibraryPresenationThumbs getThumbs() {
+		return thumbs;
+	}
+	public void setThumbs(LibraryPresenationThumbs thumbs) {
+		this.thumbs = thumbs;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresentationFile.java b/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresentationFile.java
new file mode 100644
index 0000000..3b2ab2d
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresentationFile.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+
+public class LibraryPresentationFile {
+
+	private String name = null;
+	private String filename = null;
+	private String lastmod = null;
+	private Long size = null;
+	
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public String getFilename() {
+		return filename;
+	}
+	public void setFilename(String filename) {
+		this.filename = filename;
+	}
+	public String getLastmod() {
+		return lastmod;
+	}
+	public void setLastmod(String lastmod) {
+		this.lastmod = lastmod;
+	}
+	public Long getSize() {
+		return size;
+	}
+	public void setSize(Long size) {
+		this.size = size;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresentationThumb.java b/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresentationThumb.java
new file mode 100644
index 0000000..2aa4e90
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/file/LibraryPresentationThumb.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+
+public class LibraryPresentationThumb {
+	
+	private String name = null;
+	private String filename = null;
+	private String lastmod = null;
+	private Long size = null;
+	
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public String getFilename() {
+		return filename;
+	}
+	public void setFilename(String filename) {
+		this.filename = filename;
+	}
+	public String getLastmod() {
+		return lastmod;
+	}
+	public void setLastmod(String lastmod) {
+		this.lastmod = lastmod;
+	}
+	public Long getSize() {
+		return size;
+	}
+	public void setSize(Long size) {
+		this.size = size;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/file/PresentationObject.java b/src/db/java/org/apache/openmeetings/db/dto/file/PresentationObject.java
new file mode 100644
index 0000000..b7bcfa1
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/file/PresentationObject.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.file;
+
+import java.util.LinkedList;
+/**
+ * Represents a Parsed Version of a Library-File-Converted Object
+ * @author sebastianwagner
+ *
+ */
+public class PresentationObject {
+	
+	private FilesObject originalDocument;
+	private FilesObject pdfDocument;
+	private FilesObject swfDocument;
+	LinkedList<FilesObject> thumbs;
+
+	public FilesObject getOriginalDocument() {
+		return originalDocument;
+	}
+	public void setOriginalDocument(FilesObject originalDocument) {
+		this.originalDocument = originalDocument;
+	}
+	public FilesObject getPdfDocument() {
+		return pdfDocument;
+	}
+	public void setPdfDocument(FilesObject pdfDocument) {
+		this.pdfDocument = pdfDocument;
+	}
+	public FilesObject getSwfDocument() {
+		return swfDocument;
+	}
+	public void setSwfDocument(FilesObject swfDocument) {
+		this.swfDocument = swfDocument;
+	}
+	public LinkedList<FilesObject> getThumbs() {
+		return thumbs;
+	}
+	public void setThumbs(LinkedList<FilesObject> thumbs) {
+		this.thumbs = thumbs;
+	}
+	
+	
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/record/RecordingContainerData.java b/src/db/java/org/apache/openmeetings/db/dto/record/RecordingContainerData.java
new file mode 100644
index 0000000..3d0396e
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/record/RecordingContainerData.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.record;
+
+import java.io.Serializable;
+
+public class RecordingContainerData implements Serializable {
+	
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -7211000652612571746L;
+	
+	private long userHomeSize;
+	private long publicFileSize;
+	
+	public long getUserHomeSize() {
+		return userHomeSize;
+	}
+	public void setUserHomeSize(long userHomeSize) {
+		this.userHomeSize = userHomeSize;
+	}
+	public long getPublicFileSize() {
+		return publicFileSize;
+	}
+	public void setPublicFileSize(long publicFileSize) {
+		this.publicFileSize = publicFileSize;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/record/RecordingDTO.java b/src/db/java/org/apache/openmeetings/db/dto/record/RecordingDTO.java
new file mode 100644
index 0000000..ee6eb28
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/record/RecordingDTO.java
@@ -0,0 +1,154 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.record;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+
+public class RecordingDTO {
+	private Long id;
+	private String name;
+	private String flvName;
+	private String aviName;
+	private Long roomId;
+	private String status;
+	private boolean interview;
+	private Date start;
+	private Date end;
+	private Integer width;
+	private Integer height;
+
+	public RecordingDTO() {}
+	
+	public RecordingDTO(FlvRecording r) {
+		this.id = r.getFlvRecordingId();
+		this.name = r.getFileName();
+		this.flvName = r.getFileHash();
+		this.aviName = r.getAlternateDownload();
+		this.roomId = r.getRoom_id();
+		this.status = r.getStatus().name();
+		this.interview = r.getIsInterview();
+		this.start = r.getRecordStart();
+		this.end = r.getRecordEnd();
+		this.width = r.getWidth();
+		this.height = r.getHeight();
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getFlvName() {
+		return flvName;
+	}
+
+	public void setFlvName(String flvName) {
+		this.flvName = flvName;
+	}
+
+	public String getAviName() {
+		return aviName;
+	}
+
+	public void setAviName(String aviName) {
+		this.aviName = aviName;
+	}
+
+	public Long getRoomId() {
+		return roomId;
+	}
+
+	public void setRoomId(Long roomId) {
+		this.roomId = roomId;
+	}
+
+	public String getStatus() {
+		return status;
+	}
+
+	public void setStatus(String status) {
+		this.status = status;
+	}
+
+	public boolean isInterview() {
+		return interview;
+	}
+
+	public void setInterview(boolean interview) {
+		this.interview = interview;
+	}
+
+	public Date getStart() {
+		return start;
+	}
+
+	public void setStart(Date start) {
+		this.start = start;
+	}
+
+	public Date getEnd() {
+		return end;
+	}
+
+	public void setEnd(Date end) {
+		this.end = end;
+	}
+	
+	public Integer getWidth() {
+		return width;
+	}
+	
+	public void setWidth(Integer width) {
+		this.width = width;
+	}
+	
+	public Integer getHeight() {
+		return height;
+	}
+	
+	public void setHeight(Integer height) {
+		this.height = height;
+	}
+	
+	public static List<RecordingDTO> list(List<FlvRecording> l) {
+		List<RecordingDTO> rList = new ArrayList<RecordingDTO>();
+		if (l != null) {
+			for (FlvRecording r : l) {
+				rList.add(new RecordingDTO(r));
+			}
+		}
+		return rList;
+
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/room/BrowserStatus.java b/src/db/java/org/apache/openmeetings/db/dto/room/BrowserStatus.java
new file mode 100644
index 0000000..5d707dd
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/room/BrowserStatus.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.room;
+
+public class BrowserStatus {
+	
+	private boolean browserInited = false;
+	private String currentURL = "";
+	
+	public boolean isBrowserInited() {
+		return browserInited;
+	}
+	public void setBrowserInited(boolean browserInited) {
+		this.browserInited = browserInited;
+	}
+	public String getCurrentURL() {
+		return currentURL;
+	}
+	public void setCurrentURL(String currentURL) {
+		this.currentURL = currentURL;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/room/Cliparts.java b/src/db/java/org/apache/openmeetings/db/dto/room/Cliparts.java
new file mode 100644
index 0000000..9035406
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/room/Cliparts.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.room;
+
+import java.util.List;
+
+public class Cliparts {
+
+	private String folderName;
+	private String[] generalList;
+	private List<Cliparts> subCategories;
+
+	public String[] getGeneralList() {
+		return generalList;
+	}
+
+	public void setGeneralList(String[] generalList) {
+		this.generalList = generalList;
+	}
+
+	public List<Cliparts> getSubCategories() {
+		return subCategories;
+	}
+
+	public void setSubCategories(List<Cliparts> subCategories) {
+		this.subCategories = subCategories;
+	}
+
+	public String getFolderName() {
+		return folderName;
+	}
+
+	public void setFolderName(String folderName) {
+		this.folderName = folderName;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/room/RoomDTO.java b/src/db/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
new file mode 100644
index 0000000..9a1d127
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
@@ -0,0 +1,253 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.room;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomType;
+
+public class RoomDTO {
+	private Long id;
+	private String name;
+	private String comment;
+	private RoomType roomtype;
+	private Long numberOfPartizipants = new Long(4);
+	private boolean appointment;
+	private String confno;
+	private boolean isPublic;
+	private boolean demo;
+	private boolean closed;
+	private Integer demoTime;
+	private boolean moderated;
+	private boolean allowUserQuestions;
+	private boolean audioOnly;
+	private boolean topBarHidden;
+	private boolean chatHidden;
+	private boolean activitiesHidden;
+	private boolean filesExplorerHidden;
+	private boolean actionsMenuHidden;
+	private boolean screenSharingHidden;
+	private boolean whiteboardHidden;
+
+	public RoomDTO() {}
+	
+	public RoomDTO(Room r) {
+		id = r.getRooms_id();
+		name = r.getName();
+		comment = r.getComment();
+		roomtype = r.getRoomtype();
+		numberOfPartizipants = r.getNumberOfPartizipants();
+		appointment = r.getAppointment();
+		confno = r.getConfno();
+		isPublic = Boolean.TRUE.equals(r.getIspublic());
+		demo = Boolean.TRUE.equals(r.getIsDemoRoom());
+		closed = r.getIsClosed();
+		demoTime = r.getDemoTime();
+		moderated = Boolean.TRUE.equals(r.getIsModeratedRoom());
+		allowUserQuestions = Boolean.TRUE.equals(r.getAllowUserQuestions());
+		audioOnly = Boolean.TRUE.equals(r.getIsAudioOnly());
+		topBarHidden = Boolean.TRUE.equals(r.getHideTopBar());
+		chatHidden = Boolean.TRUE.equals(r.getHideChat());
+		activitiesHidden = Boolean.TRUE.equals(r.getHideActivitiesAndActions());
+		filesExplorerHidden = Boolean.TRUE.equals(r.getHideFilesExplorer());
+		actionsMenuHidden = Boolean.TRUE.equals(r.getHideActionsMenu());
+		screenSharingHidden = Boolean.TRUE.equals(r.getHideScreenSharing());
+		whiteboardHidden = Boolean.TRUE.equals(r.getHideWhiteboard());
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public RoomType getRoomtype() {
+		return roomtype;
+	}
+
+	public void setRoomtype(RoomType roomtype) {
+		this.roomtype = roomtype;
+	}
+
+	public Long getNumberOfPartizipants() {
+		return numberOfPartizipants;
+	}
+
+	public void setNumberOfPartizipants(Long numberOfPartizipants) {
+		this.numberOfPartizipants = numberOfPartizipants;
+	}
+
+	public boolean isAppointment() {
+		return appointment;
+	}
+
+	public void setAppointment(boolean appointment) {
+		this.appointment = appointment;
+	}
+
+	public String getConfno() {
+		return confno;
+	}
+
+	public void setConfno(String confno) {
+		this.confno = confno;
+	}
+
+	public boolean isDemo() {
+		return demo;
+	}
+
+	public void setDemo(boolean demo) {
+		this.demo = demo;
+	}
+
+	public Integer getDemoTime() {
+		return demoTime;
+	}
+
+	public void setDemoTime(Integer demoTime) {
+		this.demoTime = demoTime;
+	}
+
+	public boolean isModerated() {
+		return moderated;
+	}
+
+	public void setModerated(boolean moderated) {
+		this.moderated = moderated;
+	}
+
+	public boolean isAllowUserQuestions() {
+		return allowUserQuestions;
+	}
+
+	public void setAllowUserQuestions(boolean allowUserQuestions) {
+		this.allowUserQuestions = allowUserQuestions;
+	}
+
+	public boolean isAudioOnly() {
+		return audioOnly;
+	}
+
+	public void setAudioOnly(boolean audioOnly) {
+		this.audioOnly = audioOnly;
+	}
+
+	public boolean isTopBarHidden() {
+		return topBarHidden;
+	}
+
+	public void setTopBarHidden(boolean topBarHidden) {
+		this.topBarHidden = topBarHidden;
+	}
+
+	public boolean isChatHidden() {
+		return chatHidden;
+	}
+
+	public void setChatHidden(boolean chatHidden) {
+		this.chatHidden = chatHidden;
+	}
+
+	public boolean isActivitiesHidden() {
+		return activitiesHidden;
+	}
+
+	public void setActivitiesHidden(boolean activitiesHidden) {
+		this.activitiesHidden = activitiesHidden;
+	}
+
+	public boolean isFilesExplorerHidden() {
+		return filesExplorerHidden;
+	}
+
+	public void setFilesExplorerHidden(boolean filesExplorerHidden) {
+		this.filesExplorerHidden = filesExplorerHidden;
+	}
+
+	public boolean isActionsMenuHidden() {
+		return actionsMenuHidden;
+	}
+
+	public void setActionsMenuHidden(boolean actionsMenuHidden) {
+		this.actionsMenuHidden = actionsMenuHidden;
+	}
+
+	public boolean isScreenSharingHidden() {
+		return screenSharingHidden;
+	}
+
+	public void setScreenSharingHidden(boolean screenSharingHidden) {
+		this.screenSharingHidden = screenSharingHidden;
+	}
+
+	public boolean isWhiteboardHidden() {
+		return whiteboardHidden;
+	}
+
+	public void setWhiteboardHidden(boolean whiteboardHidden) {
+		this.whiteboardHidden = whiteboardHidden;
+	}
+
+	public boolean isPublic() {
+		return isPublic;
+	}
+
+	public void setPublic(boolean isPublic) {
+		this.isPublic = isPublic;
+	}
+
+	public boolean isClosed() {
+		return closed;
+	}
+
+	public void setClosed(boolean closed) {
+		this.closed = closed;
+	}
+
+	public static List<RoomDTO> list(List<Room> l) {
+		List<RoomDTO> rList = new ArrayList<>();
+		if (l != null) {
+			for (Room r : l) {
+				rList.add(new RoomDTO(r));
+			}
+		}
+		return rList;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/room/RoomSearchResult.java b/src/db/java/org/apache/openmeetings/db/dto/room/RoomSearchResult.java
new file mode 100644
index 0000000..57ae324
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/room/RoomSearchResult.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.room;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.entity.room.Room;
+
+public class RoomSearchResult {
+	private String objectName;
+	private Long records;
+	private List<RoomDTO> result;
+	private Long errorId;
+
+	public RoomSearchResult(SearchResult<Room> copy) {
+		this.objectName = copy.getObjectName();
+		this.records = copy.getRecords();
+		this.result = new ArrayList<RoomDTO>(copy.getResult().size());
+		for (Room r : copy.getResult()) {
+			result.add(new RoomDTO(r));
+		}
+		this.errorId = copy.getErrorId();
+	}
+
+	public String getObjectName() {
+		return objectName;
+	}
+
+	public void setObjectName(String objectName) {
+		this.objectName = objectName;
+	}
+
+	public Long getRecords() {
+		return records;
+	}
+
+	public void setRecords(Long records) {
+		this.records = records;
+	}
+
+	public List<RoomDTO> getResult() {
+		return result;
+	}
+
+	public void setResult(List<RoomDTO> result) {
+		this.result = result;
+	}
+
+	public Long getErrorId() {
+		return errorId;
+	}
+
+	public void setErrorId(Long errorId) {
+		this.errorId = errorId;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/room/RoomStatus.java b/src/db/java/org/apache/openmeetings/db/dto/room/RoomStatus.java
new file mode 100644
index 0000000..441e812
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/room/RoomStatus.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.room;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.room.Client;
+
+public class RoomStatus {
+	
+	List<Client> clientList;
+	BrowserStatus browserStatus;
+	Boolean roomFull = false;
+	
+	public List<Client> getClientList() {
+		return clientList;
+	}
+	public void setClientList(List<Client> clientList) {
+		this.clientList = clientList;
+	}
+	public BrowserStatus getBrowserStatus() {
+		return browserStatus;
+	}
+	public void setBrowserStatus(BrowserStatus browserStatus) {
+		this.browserStatus = browserStatus;
+	}
+	public Boolean getRoomFull() {
+		return roomFull;
+	}
+	public void setRoomFull(Boolean roomFull) {
+		this.roomFull = roomFull;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/room/WhiteboardObject.java b/src/db/java/org/apache/openmeetings/db/dto/room/WhiteboardObject.java
new file mode 100644
index 0000000..0466dde
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/room/WhiteboardObject.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.room;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class WhiteboardObject {
+
+	private Long whiteBoardId;
+	private Integer x = 0;
+	private Integer y = 0;
+	private Integer zoom = 100;
+	private Boolean fullFit = true;
+	@SuppressWarnings("rawtypes")
+	private Map<String, List> roomItems = new HashMap<String, List>();
+	private Date created = new Date();
+
+	public Long getWhiteBoardId() {
+		return whiteBoardId;
+	}
+
+	public void setWhiteBoardId(Long whiteBoardId) {
+		this.whiteBoardId = whiteBoardId;
+	}
+
+	public Integer getX() {
+		return x;
+	}
+
+	public void setX(Integer x) {
+		this.x = x;
+	}
+
+	public Integer getY() {
+		return y;
+	}
+
+	public void setY(Integer y) {
+		this.y = y;
+	}
+
+	@SuppressWarnings("rawtypes")
+	public Map<String, List> getRoomItems() {
+		return roomItems;
+	}
+
+	@SuppressWarnings("rawtypes")
+	public void setRoomItems(Map<String, List> roomItems) {
+		this.roomItems = roomItems;
+	}
+
+	public Date getCreated() {
+		return created;
+	}
+
+	public void setCreated(Date created) {
+		this.created = created;
+	}
+
+	public Integer getZoom() {
+		return zoom;
+	}
+
+	public void setZoom(Integer zoom) {
+		this.zoom = zoom;
+	}
+
+	public Boolean getFullFit() {
+		return fullFit;
+	}
+
+	public void setFullFit(Boolean fullFit) {
+		this.fullFit = fullFit;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/room/WhiteboardObjectList.java b/src/db/java/org/apache/openmeetings/db/dto/room/WhiteboardObjectList.java
new file mode 100644
index 0000000..1cbcac0
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/room/WhiteboardObjectList.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.room;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class WhiteboardObjectList {
+
+	private Long room_id;
+	private Map<Long,WhiteboardObject> whiteboardObjects = new HashMap<Long,WhiteboardObject>();
+	
+	public Long getRoom_id() {
+		return room_id;
+	}
+	public void setRoom_id(Long roomId) {
+		room_id = roomId;
+	}
+	public Map<Long, WhiteboardObject> getWhiteboardObjects() {
+		return whiteboardObjects;
+	}
+	public void setWhiteboardObjects(Map<Long, WhiteboardObject> whiteboardObjects) {
+		this.whiteboardObjects = whiteboardObjects;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/room/WhiteboardSyncLockObject.java b/src/db/java/org/apache/openmeetings/db/dto/room/WhiteboardSyncLockObject.java
new file mode 100644
index 0000000..5b20c3c
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/room/WhiteboardSyncLockObject.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.room;
+
+import java.util.Date;
+
+public class WhiteboardSyncLockObject {
+
+	private String publicSID;
+	private boolean isInitialLoaded = false;
+	private boolean isCurrentLoadingItem = false;
+
+	private Date addtime;
+	private Date starttime;
+
+	public String getPublicSID() {
+		return publicSID;
+	}
+
+	public void setPublicSID(String publicSID) {
+		this.publicSID = publicSID;
+	}
+
+	public boolean isInitialLoaded() {
+		return isInitialLoaded;
+	}
+
+	public void setInitialLoaded(boolean isInitialLoaded) {
+		this.isInitialLoaded = isInitialLoaded;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public boolean isCurrentLoadingItem() {
+		return isCurrentLoadingItem;
+	}
+
+	public void setCurrentLoadingItem(boolean isCurrentLoadingItem) {
+		this.isCurrentLoadingItem = isCurrentLoadingItem;
+	}
+
+	public Date getAddtime() {
+		return addtime;
+	}
+
+	public void setAddtime(Date addtime) {
+		this.addtime = addtime;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/server/ClientSessionInfo.java b/src/db/java/org/apache/openmeetings/db/dto/server/ClientSessionInfo.java
new file mode 100644
index 0000000..1a375be
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/server/ClientSessionInfo.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.server;
+
+import org.apache.openmeetings.db.entity.room.Client;
+
+
+public class ClientSessionInfo {
+	
+	private Client rcl;
+	public Long serverId;
+	
+	public ClientSessionInfo(Client rcl, Long serverId) {
+		super();
+		this.rcl = rcl;
+		this.serverId = serverId;
+	}
+	
+	public Client getRcl() {
+		return rcl;
+	}
+	public void setRcl(Client rcl) {
+		this.rcl = rcl;
+	}
+	public Long getServerId() {
+		return serverId;
+	}
+	public void setServerId(Long serverId) {
+		this.serverId = serverId;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/server/ServerDTO.java b/src/db/java/org/apache/openmeetings/db/dto/server/ServerDTO.java
new file mode 100644
index 0000000..9352c9c9
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/server/ServerDTO.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.server;
+
+import org.apache.openmeetings.db.entity.server.Server;
+
+/**
+ * 
+ * Bean send to the client about the server he is going to use for the conference 
+ * session
+ * 
+ * @author sebawagner
+ *
+ */
+public class ServerDTO {
+
+	private Long id;
+	private String address;
+	private int port;
+	private String protocol;
+	private String webapp;
+
+	public ServerDTO(Server server) {
+		if (server == null) {
+			return;
+		}
+		id = server.getId();
+		address = server.getAddress();
+		port = server.getPort();
+		protocol = server.getProtocol();
+		webapp = server.getWebapp();
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public int getPort() {
+		return port;
+	}
+
+	public void setPort(int port) {
+		this.port = port;
+	}
+
+	public String getProtocol() {
+		return protocol;
+	}
+
+	public void setProtocol(String protocol) {
+		this.protocol = protocol;
+	}
+
+	public String getWebapp() {
+		return webapp;
+	}
+
+	public void setWebapp(String webapp) {
+		this.webapp = webapp;
+	}
+	
+	@Override
+	public String toString() {
+		return "id "+id+" address "+address+" port "+port+" protocol "+protocol;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/user/UserDTO.java b/src/db/java/org/apache/openmeetings/db/dto/user/UserDTO.java
new file mode 100644
index 0000000..fa50095
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/user/UserDTO.java
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.user;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.user.Address;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.entity.user.User.Type;
+
+public class UserDTO {
+	private Long id;
+	private String firstname;
+	private String lastname;
+	private List<String> rights;
+	private String login;
+	private Long language_id;
+	private Address adresses;
+	private String timeZoneId;
+	private Type type = Type.user;
+
+	public UserDTO() {}
+
+	public UserDTO(User u) {
+		id = u.getUser_id();
+		firstname = u.getFirstname();
+		lastname = u.getLastname();
+		rights = new ArrayList<>();
+		for (Right r : u.getRights()) {
+			rights.add(r.name());
+		}
+		login = u.getLogin();
+		language_id = u.getLanguage_id();
+		adresses = u.getAdresses();
+		timeZoneId = u.getTimeZoneId();
+		type = u.getType();
+	}
+	
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getFirstname() {
+		return firstname;
+	}
+
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+
+	public String getLastname() {
+		return lastname;
+	}
+
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+
+	public List<String> getRights() {
+		return rights;
+	}
+
+	public void setRights(List<String> rights) {
+		this.rights = rights;
+	}
+
+	public String getLogin() {
+		return login;
+	}
+
+	public void setLogin(String login) {
+		this.login = login;
+	}
+
+	public Long getLanguage_id() {
+		return language_id;
+	}
+
+	public void setLanguage_id(Long language_id) {
+		this.language_id = language_id;
+	}
+
+	public Address getAdresses() {
+		return adresses;
+	}
+
+	public void setAdresses(Address adresses) {
+		this.adresses = adresses;
+	}
+
+	public String getTimeZoneId() {
+		return timeZoneId;
+	}
+
+	public void setTimeZoneId(String timeZoneId) {
+		this.timeZoneId = timeZoneId;
+	}
+
+	public Type getType() {
+		return type;
+	}
+
+	public void setType(Type type) {
+		this.type = type;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/dto/user/UserSearchResult.java b/src/db/java/org/apache/openmeetings/db/dto/user/UserSearchResult.java
new file mode 100644
index 0000000..39c9887
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/dto/user/UserSearchResult.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.dto.user;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.entity.user.User;
+
+public class UserSearchResult {
+	private String objectName;
+	private Long records;
+	private List<UserDTO> result;
+	private Long errorId;
+	
+	public UserSearchResult() {}
+
+	public UserSearchResult(SearchResult<User> copy) {
+		this.objectName = copy.getObjectName();
+		this.records = copy.getRecords();
+		this.result = new ArrayList<UserDTO>(copy.getResult().size());
+		for (User u : copy.getResult()) {
+			result.add(new UserDTO(u));
+		}
+		this.errorId = copy.getErrorId();
+	}
+	
+	public String getObjectName() {
+		return objectName;
+	}
+
+	public void setObjectName(String objectName) {
+		this.objectName = objectName;
+	}
+
+	public Long getRecords() {
+		return records;
+	}
+
+	public void setRecords(Long records) {
+		this.records = records;
+	}
+
+	public List<UserDTO> getResult() {
+		return result;
+	}
+
+	public void setResult(List<UserDTO> result) {
+		this.result = result;
+	}
+
+	public Long getErrorId() {
+		return errorId;
+	}
+
+	public void setErrorId(Long errorId) {
+		this.errorId = errorId;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/IDataProviderEntity.java b/src/db/java/org/apache/openmeetings/db/entity/IDataProviderEntity.java
new file mode 100644
index 0000000..3375185
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/IDataProviderEntity.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity;
+
+public interface IDataProviderEntity {
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java b/src/db/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
new file mode 100644
index 0000000..a6506eb
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/basic/ChatMessage.java
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.basic;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getChatMessageById", query = "SELECT c FROM ChatMessage c WHERE c.id = :id")
+	, @NamedQuery(name = "getChatMessagesByUser", query = "SELECT DISTINCT c FROM ChatMessage c WHERE c.fromUser.user_id = :userId OR c.toUser.user_id = :userId ORDER BY c.sent DESC")
+	, @NamedQuery(name = "getGlobalChatMessages", query = "SELECT DISTINCT c FROM ChatMessage c WHERE c.toUser IS NULL ORDER BY c.sent DESC")
+})@Table(name = "chat")
+@Root(name = "ChatMessage")
+public class ChatMessage implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = 4248081997318897605L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(name = "id", data = true)
+	private long id;
+
+	@ManyToOne
+	@JoinColumn(name = "from_user_id")
+	@Element(name = "fromUserId", data = true, required = false)
+	@ForeignKey(enabled = true)
+	private User fromUser;
+	
+	@ManyToOne
+	@JoinColumn(name = "to_room_id")
+	@Element(name = "toRoomId", data = true, required = false)
+	@ForeignKey(enabled = true)
+	private Room toRoom;
+	
+	@ManyToOne
+	@JoinColumn(name = "to_user_id")
+	@Element(name = "toUserId", data = true, required = false)
+	@ForeignKey(enabled = true)
+	private User toUser;
+
+	@Column(name = "message")
+	@Lob
+	@Element(name = "message", data = true, required = false)
+	private String message;
+	
+	@Column(name = "sent")
+	@Element(name = "sent", data = true, required = false)
+	private Date sent;
+
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public User getFromUser() {
+		return fromUser;
+	}
+
+	public void setFromUser(User fromUser) {
+		this.fromUser = fromUser;
+	}
+
+	public Room getToRoom() {
+		return toRoom;
+	}
+
+	public void setToRoom(Room toRoom) {
+		this.toRoom = toRoom;
+	}
+
+	public User getToUser() {
+		return toUser;
+	}
+
+	public void setToUser(User toUser) {
+		this.toUser = toUser;
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+
+	public Date getSent() {
+		return sent;
+	}
+
+	public void setSent(Date sent) {
+		this.sent = sent;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/basic/Configuration.java b/src/db/java/org/apache/openmeetings/db/entity/basic/Configuration.java
new file mode 100644
index 0000000..42e56bc
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/basic/Configuration.java
@@ -0,0 +1,161 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.basic;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+		@NamedQuery(name = "forceGetConfigurationByKey", query = "SELECT c FROM Configuration c " 
+				+ "WHERE c.conf_key LIKE :conf_key"),
+		@NamedQuery(name = "getConfigurationsByKeys", query = "SELECT c FROM Configuration c "
+				+ "WHERE c.conf_key IN :conf_keys and c.deleted = false"),
+		@NamedQuery(name = "getNondeletedConfiguration", query = "SELECT c FROM Configuration c  "
+				+ "LEFT JOIN FETCH c.user WHERE c.deleted = false"),
+		@NamedQuery(name = "getConfigurationById", query = "SELECT c FROM Configuration c "
+				+ "LEFT JOIN FETCH c.user "
+				+ "WHERE c.configuration_id = :configuration_id and c.deleted = false"),
+		@NamedQuery(name = "countConfigurations", query = "SELECT COUNT(c) FROM Configuration c WHERE c.deleted = false")
+})
+@Table(name = "configuration")
+@Root(name = "config")
+public class Configuration implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = -6129473946508963339L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(name = "id", data = true)
+	private Long configuration_id;
+
+	@Column(name = "conf_key", unique = true)
+	@Element(name = "key", data = true, required = false)
+	private String conf_key;
+
+	@Column(name = "conf_value")
+	@Element(name = "value", data = true, required = false)
+	private String conf_value;
+
+	@Column(name = "starttime")
+	@Element(name = "created", data = true, required = false)
+	private Date starttime;
+
+	@Column(name = "updatetime")
+	@Element(name = "updated", data = true, required = false)
+	private Date updatetime;
+
+	@Lob
+	@Column(name = "comment_field", length = 2048)
+	@Element(data = true, required = false)
+	private String comment;
+
+	@Column(name = "deleted")
+	@Element(data = true)
+	private boolean deleted;
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "user_id")
+	@ForeignKey(enabled = true)
+	@Element(name = "user_id", data = true, required = false)
+	private User user;
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public String getConf_key() {
+		return conf_key;
+	}
+
+	public void setConf_key(String conf_key) {
+		this.conf_key = conf_key;
+	}
+
+	public String getConf_value() {
+		return conf_value;
+	}
+
+	public void setConf_value(String conf_value) {
+		this.conf_value = conf_value;
+	}
+
+	public Long getConfiguration_id() {
+		return configuration_id;
+	}
+
+	public void setConfiguration_id(Long configuration_id) {
+		this.configuration_id = configuration_id;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public boolean isDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public User getUser() {
+		return user;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/basic/ErrorType.java b/src/db/java/org/apache/openmeetings/db/entity/basic/ErrorType.java
new file mode 100644
index 0000000..5e0a349
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/basic/ErrorType.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.basic;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getErrorTypes", query = "select c from ErrorType as c "
+					+ "WHERE c.deleted <> :deleted"),
+	@NamedQuery(name = "getErrorType", query = "select c from ErrorType as c "
+					+ "WHERE c.deleted <> :deleted AND c.errortype_id = :errortype_id")
+})
+@Table(name = "errortypes")
+public class ErrorType implements Serializable {
+	private static final long serialVersionUID = 1519570470483604258L;
+
+	@Id
+	@Column(name = "id")
+	private Long errortype_id;
+
+	@Column(name = "fieldvalues_id")
+	private Long fieldvalues_id;
+
+	@Column(name = "starttime")
+	private Date starttime;
+	
+	@Column(name = "updatetime")
+	private Date updatetime;
+	
+	@Column(name = "deleted")
+	private boolean deleted;
+
+	public Long getErrortype_id() {
+		return errortype_id;
+	}
+
+	public void setErrortype_id(Long errortype_id) {
+		this.errortype_id = errortype_id;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Long getFieldvalues_id() {
+		return this.fieldvalues_id;
+	}
+
+	public void setFieldvalues_id(Long fieldvalues_id) {
+		this.fieldvalues_id = fieldvalues_id;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/basic/ErrorValue.java b/src/db/java/org/apache/openmeetings/db/entity/basic/ErrorValue.java
new file mode 100644
index 0000000..3bb8cea
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/basic/ErrorValue.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.basic;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getErrorValueById", query = "SELECT e FROM ErrorValue e WHERE e.errorvalues_id = :id AND e.deleted = false")
+})
+@Table(name = "errorvalue")
+public class ErrorValue implements Serializable {
+	private static final long serialVersionUID = -1892810463706968018L;
+
+	@Id
+	@Column(name = "id")
+	private Long errorvalues_id;
+	
+	@Column(name = "errortype_id")
+	private Long errortype_id;
+	
+	@Column(name = "fieldvalues_id")
+	private Long fieldvalues_id;
+	
+	@Column(name = "starttime")
+	private Date starttime;
+	
+	@Column(name = "updatetime")
+	private Date updatetime;
+	
+	@Column(name = "deleted")
+	private boolean deleted;
+
+	public Long getErrorvalues_id() {
+		return errorvalues_id;
+	}
+
+	public void setErrorvalues_id(Long errorvalues_id) {
+		this.errorvalues_id = errorvalues_id;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+	
+	public Long getFieldvalues_id() {
+		return fieldvalues_id;
+	}
+
+	public void setFieldvalues_id(Long fieldvalues_id) {
+		this.fieldvalues_id = fieldvalues_id;
+	}
+
+	public Long getErrortype_id() {
+		//return errorType.getErrortype_id();
+		return errortype_id;
+	}
+
+	public void setErrortype_id(Long errortype_id) {
+		this.errortype_id = errortype_id;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/basic/MailMessage.java b/src/db/java/org/apache/openmeetings/db/entity/basic/MailMessage.java
new file mode 100644
index 0000000..ba569b0
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/basic/MailMessage.java
@@ -0,0 +1,196 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.db.entity.basic;

+

+import java.util.Calendar;

+

+import javax.persistence.Column;

+import javax.persistence.Entity;

+import javax.persistence.EnumType;

+import javax.persistence.Enumerated;

+import javax.persistence.GeneratedValue;

+import javax.persistence.GenerationType;

+import javax.persistence.Id;

+import javax.persistence.Lob;

+import javax.persistence.NamedQueries;

+import javax.persistence.NamedQuery;

+import javax.persistence.Table;

+

+import org.apache.openmeetings.db.entity.IDataProviderEntity;

+

+@Entity

+@NamedQueries({

+	@NamedQuery(name = "getMailMessageById", query = "SELECT m FROM MailMessage m WHERE m.id = :id")

+	, @NamedQuery(name = "getMailMessages"

+		, query = "SELECT m FROM MailMessage m WHERE m.status = :status ORDER BY m.updated, m.inserted")

+	, @NamedQuery(name = "countMailMessages", query = "SELECT COUNT(m) FROM MailMessage m WHERE m.status = :status")

+})

+@Table(name = "email_queue")

+public class MailMessage implements IDataProviderEntity {

+	public enum Status {

+		NONE

+		, SENDING

+		, ERROR

+		, DONE

+	}

+	

+	@Id

+	@GeneratedValue(strategy = GenerationType.IDENTITY)

+	@Column(name = "id")

+	private Long id;

+	

+	@Lob

+	@Column(name = "recipients")

+	private String recipients;

+	

+	@Column(name = "replyTo")

+	private String replyTo;

+	

+	@Column(name = "subject")

+	private String subject;

+	

+	@Lob

+	@Column(name = "body")

+	private String body;

+

+	@Lob

+	@Column(name = "ics")

+	private byte[] ics;

+

+	@Column(name = "status", nullable = false)

+	@Enumerated(EnumType.STRING)

+	private Status status = Status.NONE;

+

+	@Column(name = "inserted")

+	private Calendar inserted;

+	

+	@Column(name = "updated")

+	private Calendar updated;

+	

+	@Column(name = "error_count", nullable = false)

+	private int errorCount = 0;

+	

+	@Lob

+	@Column(name = "last_error")

+	private String lastError;

+

+	public MailMessage() {

+		this(null, null, null, null, null);

+	}

+	

+	public MailMessage(String recipients, String replyTo, String subject, String body) {

+		this(recipients, replyTo, subject, body, null);

+	}

+	

+	public MailMessage(String recipients, String replyTo, String subject, String body, byte[] ics) {

+		this.recipients = recipients;

+		this.replyTo = replyTo;

+		this.subject = subject;

+		this.body = body;

+		this.ics = ics;

+	}

+	

+	public Long getId() {

+		return id;

+	}

+

+	public void setId(Long id) {

+		this.id = id;

+	}

+

+	public String getRecipients() {

+		return recipients;

+	}

+

+	public void setRecipients(String recipients) {

+		this.recipients = recipients;

+	}

+

+	public String getReplyTo() {

+		return replyTo;

+	}

+

+	public void setReplyTo(String replyTo) {

+		this.replyTo = replyTo;

+	}

+

+	public String getSubject() {

+		return subject;

+	}

+

+	public void setSubject(String subject) {

+		this.subject = subject;

+	}

+

+	public String getBody() {

+		return body;

+	}

+

+	public void setBody(String body) {

+		this.body = body;

+	}

+

+	public Status getStatus() {

+		return status;

+	}

+

+	public void setStatus(Status status) {

+		this.status = status;

+	}

+

+	public Calendar getInserted() {

+		return inserted;

+	}

+

+	public void setInserted(Calendar inserted) {

+		this.inserted = inserted;

+	}

+

+	public Calendar getUpdated() {

+		return updated;

+	}

+

+	public void setUpdated(Calendar updated) {

+		this.updated = updated;

+	}

+

+	public byte[] getIcs() {

+		return ics;

+	}

+

+	public void setIcs(byte[] ics) {

+		this.ics = ics;

+	}

+

+	public int getErrorCount() {

+		return errorCount;

+	}

+

+	public void setErrorCount(int errorCount) {

+		this.errorCount = errorCount;

+	}

+

+	public String getLastError() {

+		return lastError;

+	}

+

+	public void setLastError(String lastError) {

+		this.lastError = lastError;

+	}

+}

diff --git a/src/db/java/org/apache/openmeetings/db/entity/basic/Naviglobal.java b/src/db/java/org/apache/openmeetings/db/entity/basic/Naviglobal.java
new file mode 100644
index 0000000..ff743ed
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/basic/Naviglobal.java
@@ -0,0 +1,227 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.basic;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.OrderBy;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+
+@Entity
+@NamedQueries({
+		@NamedQuery(name = "getNavigation", query = "SELECT DISTINCT ng from Naviglobal ng JOIN ng.mainnavi nm "
+				+ "WHERE nm.deleted = false AND ng.level_id <= :level_id AND nm.level_id <= :level_id "
+				+ "AND ng.deleted = false ORDER BY ng.naviorder ASC"),
+		@NamedQuery(name = "getNavigationById", query = "SELECT ng from Naviglobal ng WHERE ng.global_id = :global_id") })
+@Table(name = "naviglobal")
+public class Naviglobal implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long global_id;
+
+	@Column(name = "name")
+	private String name;
+
+	@Column(name = "icon")
+	private String icon;
+
+	@Column(name = "isleaf")
+	private Boolean isleaf;
+
+	@Column(name = "isopen")
+	private Boolean isopen;
+
+	@Column(name = "action")
+	private String action;
+
+	@Column(name = "updatetime")
+	private Date updatetime;
+
+	@Column(name = "starttime")
+	private Date starttime;
+
+	@Column(name = "comment_field")
+	private String comment;
+
+	@Column(name = "naviorder")
+	private Integer naviorder;
+
+	@Column(name = "level_id")
+	private Long level_id;
+
+	@Column(name = "deleted")
+	private boolean deleted;
+
+	@Column(name = "fieldvalues_id")
+	private Long fieldvalues_id;
+
+	@Column(name = "tooltip_fieldvalues_id")
+	private Long tooltip_fieldvalues_id;
+
+	@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+	@JoinColumn(name = "global_id")
+	@ForeignKey(enabled = true)
+	@OrderBy("naviorder")
+	private List<Navimain> mainnavi;
+
+	public String getAction() {
+		return action;
+	}
+
+	public void setAction(String action) {
+		this.action = action;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public Long getGlobal_id() {
+		return global_id;
+	}
+
+	public void setGlobal_id(Long global_id) {
+		this.global_id = global_id;
+	}
+
+	public String getIcon() {
+		return icon;
+	}
+
+	public void setIcon(String icon) {
+		this.icon = icon;
+	}
+
+	public Boolean getIsleaf() {
+		return isleaf;
+	}
+
+	public void setIsleaf(Boolean isleaf) {
+		this.isleaf = isleaf;
+	}
+
+	public Boolean getIsopen() {
+		return isopen;
+	}
+
+	public void setIsopen(Boolean isopen) {
+		this.isopen = isopen;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Integer getNaviorder() {
+		return naviorder;
+	}
+
+	public void setNaviorder(Integer naviorder) {
+		this.naviorder = naviorder;
+	}
+
+	public Long getLevel_id() {
+		return level_id;
+	}
+
+	public void setLevel_id(Long level_id) {
+		this.level_id = level_id;
+	}
+
+	public List<Navimain> getMainnavi() {
+		return mainnavi;
+	}
+
+	public void setMainnavi(List<Navimain> mainnavi) {
+		this.mainnavi = mainnavi;
+	}
+
+	public Long getFieldvalues_id() {
+		return fieldvalues_id;
+	}
+
+	public void setFieldvalues_id(Long fieldvalues_id) {
+		this.fieldvalues_id = fieldvalues_id;
+	}
+
+	public Long getTooltip_fieldvalues_id() {
+		return tooltip_fieldvalues_id;
+	}
+
+	public void setTooltip_fieldvalues_id(Long tooltip_fieldvalues_id) {
+		this.tooltip_fieldvalues_id = tooltip_fieldvalues_id;
+	}
+
+	@Override
+	public String toString() {
+		return "Naviglobal [global_id=" + global_id + ", name=" + name + ", action=" + action + ", naviorder=" + naviorder + ", deleted="
+				+ deleted + ", fieldvalues_id=" + fieldvalues_id + ", tooltip_fieldvalues_id=" + tooltip_fieldvalues_id + "]";
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/basic/Navimain.java b/src/db/java/org/apache/openmeetings/db/entity/basic/Navimain.java
new file mode 100644
index 0000000..6b290ea
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/basic/Navimain.java
@@ -0,0 +1,220 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.basic;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "navimain")
+public class Navimain implements Serializable {
+	private static final long serialVersionUID = 1691787896183701877L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long main_id;
+
+	@Column(name = "global_id")
+	private Long global_id;
+
+	@Column(name = "name")
+	private String name;
+
+	@Column(name = "icon")
+	private String icon;
+
+	@Column(name = "isleaf")
+	private Boolean isleaf;
+
+	@Column(name = "isopen")
+	private Boolean isopen;
+
+	@Column(name = "action")
+	private String action;
+
+	@Column(name = "params")
+	private String params;
+
+	@Column(name = "updatetime")
+	private Date updatetime;
+
+	@Column(name = "starttime")
+	private Date starttime;
+
+	@Column(name = "comment_field")
+	private String comment;
+
+	@Column(name = "naviorder")
+	private Integer naviorder;
+
+	@Column(name = "level_id")
+	private Long level_id;
+
+	@Column(name = "fieldvalues_id")
+	private Long fieldvalues_id;
+
+	@Column(name = "deleted")
+	private boolean deleted;
+
+	@Column(name = "tooltip_fieldvalues_id")
+	private Long tooltip_fieldvalues_id;
+
+	public String getAction() {
+		return action;
+	}
+
+	public void setAction(String action) {
+		this.action = action;
+	}
+
+	public Long getLevel_id() {
+		return level_id;
+	}
+
+	public void setLevel_id(Long level_id) {
+		this.level_id = level_id;
+	}
+
+	public Long getGlobal_id() {
+		return global_id;
+	}
+
+	public void setGlobal_id(Long global_id) {
+		this.global_id = global_id;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public Long getMain_id() {
+		return main_id;
+	}
+
+	public void setMain_id(Long main_id) {
+		this.main_id = main_id;
+	}
+
+	public String getIcon() {
+		return icon;
+	}
+
+	public void setIcon(String icon) {
+		this.icon = icon;
+	}
+
+	public Boolean getIsleaf() {
+		return isleaf;
+	}
+
+	public void setIsleaf(Boolean isleaf) {
+		this.isleaf = isleaf;
+	}
+
+	public Boolean getIsopen() {
+		return isopen;
+	}
+
+	public void setIsopen(Boolean isopen) {
+		this.isopen = isopen;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Integer getNaviorder() {
+		return naviorder;
+	}
+
+	public void setNaviorder(Integer naviorder) {
+		this.naviorder = naviorder;
+	}
+
+	public Long getFieldvalues_id() {
+		return fieldvalues_id;
+	}
+
+	public void setFieldvalues_id(Long fieldvalues_id) {
+		this.fieldvalues_id = fieldvalues_id;
+	}
+
+	public Long getTooltip_fieldvalues_id() {
+		return tooltip_fieldvalues_id;
+	}
+
+	public void setTooltip_fieldvalues_id(Long tooltip_fieldvalues_id) {
+		this.tooltip_fieldvalues_id = tooltip_fieldvalues_id;
+	}
+
+	public String getParams() {
+		return params;
+	}
+
+	public void setParams(String params) {
+		this.params = params;
+	}
+
+	@Override
+	public String toString() {
+		return "Navimain [main_id=" + main_id + ", global_id=" + global_id + ", name=" + name + ", action=" + action + ", params=" + params
+				+ ", naviorder=" + naviorder + ", fieldvalues_id=" + fieldvalues_id + ", deleted=" + deleted + ", tooltip_fieldvalues_id="
+				+ tooltip_fieldvalues_id + "]";
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/calendar/Appointment.java b/src/db/java/org/apache/openmeetings/db/entity/calendar/Appointment.java
new file mode 100644
index 0000000..ba63aa8
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/calendar/Appointment.java
@@ -0,0 +1,428 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.calendar;
+
+import java.io.Serializable;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.TimeZone;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@Table(name = "appointments")
+@NamedQueries({
+    @NamedQuery(name="getAppointmentById", query="SELECT a FROM Appointment a WHERE a.deleted = false AND a.id = :id")
+    , @NamedQuery(name="getAppointmentByIdAny", query="SELECT a FROM Appointment a WHERE a.id = :id")
+    , @NamedQuery(name="getAppointments", query="SELECT a FROM Appointment a WHERE a.deleted = false ORDER BY a.id")
+    , @NamedQuery(name="appointmentsInRange",
+    	query="SELECT a FROM Appointment a "
+			+ "WHERE a.deleted = false "
+			+ "	AND ( "
+			+ "		(a.start BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.end BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.start < :starttime AND a.end > :endtime) "
+			+ "	)"
+			+ "	AND a.owner.user_id = :userId"
+    	)
+    , @NamedQuery(name="joinedAppointmentsInRange",
+		query="SELECT a FROM MeetingMember mm INNER JOIN mm.appointment a "
+			+ "WHERE mm.deleted = false AND mm.user.user_id <> a.owner.user_id AND mm.user.user_id = :userId "
+			+ "	AND a.id NOT IN (SELECT a.id FROM Appointment a WHERE a.owner.user_id = :userId)"
+			+ "	AND mm.connectedEvent = false " //TODO review: isConnectedEvent is set for the MeetingMember if event is created from "Private Messages", it is weird
+			+ "	AND ( "
+			+ "		(a.start BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.end BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.start < :starttime AND a.end > :endtime) "
+			+ "	)"
+    	)
+    , @NamedQuery(name="appointmentsInRangeRemind",
+		query="SELECT a FROM Appointment a "
+			//only ReminderType simple mail is concerned!
+			+ "WHERE a.deleted = false AND a.reminderEmailSend = false"
+			+ " AND (a.remind.typId = 2 OR a.remind.typId = 3) "
+			+ "	AND ( "
+			+ "		(a.start BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.end BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.start < :starttime AND a.end > :endtime) "
+			+ "	)"
+    	)
+    , @NamedQuery(name="getAppointmentByRoomId", query="SELECT a FROM Appointment a WHERE a.deleted = false AND a.room.rooms_id = :room_id")
+	//TODO this query returns duplicates if the user books an appointment with
+	//his own user as second meeting-member, swagner 19.02.2012
+    , @NamedQuery(name="appointmentsInRangeByUser",
+		query="SELECT a FROM MeetingMember mm, IN(mm.appointment) a "
+			+ "WHERE mm.deleted = false AND mm.user.user_id <> a.owner.user_id AND mm.user.user_id = :userId "
+			+ "	AND ( "
+			+ "		(a.start BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.end BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.start < :starttime AND a.end > :endtime) "
+			+ "	)"
+	    )
+    , @NamedQuery(name="appointedRoomsInRangeByUser",
+		query="SELECT a.room FROM MeetingMember mm, IN(mm.appointment) a "
+			+ "WHERE mm.deleted = false AND mm.user.user_id <> a.owner.user_id AND mm.user.user_id = :userId "
+			+ "	AND ( "
+			+ "		(a.start BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.end BETWEEN :starttime AND :endtime) "
+			+ "		OR (a.start < :starttime AND a.end > :endtime) "
+			+ "	)"
+	    )
+    , @NamedQuery(name="getNextAppointment", query="SELECT a FROM Appointment a WHERE a.deleted = false AND a.start > :start AND a.owner.user_id = :userId")
+    , @NamedQuery(name="getAppointmentsByTitle", query="SELECT a FROM Appointment a WHERE a.deleted = false AND a.title LIKE :title AND a.owner.user_id = :userId")
+})
+@Root(name="appointment")
+public class Appointment implements Serializable {
+	private static final long serialVersionUID = 2016808778885761525L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(name = "appointmentId", data = true)
+	private Long id;
+	
+	@Column(name = "appointmentname")
+	@Element(name="appointmentName", data=true, required=false)
+	private String title;
+	
+	@Column(name = "location")
+	@Element(name="appointmentLocation", data=true, required=false)
+	private String location;
+	
+	@Column(name = "appointment_starttime")
+	@Element(name="appointmentStarttime", data=true)
+	private Date start;
+	
+	@Column(name = "appointment_endtime")
+	@Element(name="appointmentEndtime", data=true)
+	private Date end;
+	
+	@Lob 
+	@Column(name = "description", length=2048)
+	@Element(name="appointmentDescription", data=true, required=false)
+	private String description;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "category_id", nullable = true)
+	@ForeignKey(enabled = true)
+	@Element(name="categoryId", data=true, required=false)
+	private AppointmentCategory category;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "user_id", nullable = true)
+	@ForeignKey(enabled = true)
+	@Element(name="users_id", data=true, required=false)
+	private User owner;
+
+	@Column(name = "starttime")
+	@Element(name="inserted", data=true, required=false)
+	private Date inserted;
+	
+	@Column(name = "updatetime")
+	@Element(name="updated", data=true, required=false)
+	private Date updated;
+	
+	@Column(name = "deleted")
+	@Element(data=true)
+	private boolean deleted;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "remind_id", nullable = true)
+	@ForeignKey(enabled = true)
+	@Element(name="typId", data=true, required=false)
+	private AppointmentReminderTyps remind;
+
+	@Column(name = "isdaily")
+	@Element(data=true, required = false)
+	private Boolean isDaily;
+	
+	@Column(name = "isweekly")
+	@Element(data=true, required = false)
+	private Boolean isWeekly;
+	
+	@Column(name = "ismonthly")
+	@Element(data=true, required = false)
+	private Boolean isMonthly;
+	
+	@Column(name = "isyearly")
+	@Element(data=true, required = false)
+	private Boolean isYearly;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "room_id", nullable = true)
+	@ForeignKey(enabled = true)
+	@Element(name="room_id", data=true, required=false)
+	private Room room;
+
+	@Column(name = "icalId")
+	@Element(data=true, required=false)
+	private String icalId;
+
+	@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+	@JoinColumn(name = "appointment_id")
+	private List<MeetingMember> meetingMembers;
+	
+	@Column(name = "language_id")
+	@Element(name="language_id", data=true, required=false)
+	private Long languageId;
+	
+	@Column(name = "is_password_protected")
+	@Element(name="isPasswordProtected", data=true, required=false)
+	private boolean passwordProtected;
+	
+	@Column(name = "password")
+	@Element(data=true, required=false)
+	private String password;
+
+	@Column(name = "is_connected_event")
+	private boolean connectedEvent;
+
+	@Column(name = "is_reminder_email_send")
+	private boolean reminderEmailSend;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public User getOwner() {
+		return owner;
+	}
+
+	public void setOwner(User owner) {
+		this.owner = owner;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getLocation() {
+		return location;
+	}
+
+	public void setLocation(String location) {
+		this.location = location;
+	}
+
+	public Date getStart() {
+		return start;
+	}
+
+	public Calendar startCalendar(TimeZone timeZone) {
+		Calendar cal = Calendar.getInstance(timeZone);
+		cal.setTime(start);
+		return cal;
+	}
+
+	public void setStart(Date start) {
+		this.start = start;
+	}
+
+	public Date getEnd() {
+		return end;
+	}
+
+	public Calendar endCalendar(TimeZone timeZone) {
+		Calendar cal = Calendar.getInstance(timeZone);
+		cal.setTime(end);
+		return cal;
+	}
+
+	public void setEnd(Date end) {
+		this.end = end;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public AppointmentCategory getCategory() {
+		return category;
+	}
+
+	public void setCategory(AppointmentCategory category) {
+		this.category = category;
+	}
+
+	public AppointmentReminderTyps getRemind() {
+		return remind;
+	}
+
+	public void setRemind(AppointmentReminderTyps remind) {
+		this.remind = remind;
+	}
+
+	public Date getInserted() {
+		return inserted;
+	}
+
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	public boolean isDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Boolean getIsWeekly() {
+		return isWeekly;
+	}
+
+	public void setIsWeekly(Boolean isWeekly) {
+		this.isWeekly = isWeekly;
+	}
+
+	public Boolean getIsMonthly() {
+		return isMonthly;
+	}
+
+	public void setIsMonthly(Boolean isMonthly) {
+		this.isMonthly = isMonthly;
+	}
+
+	public Boolean getIsYearly() {
+		return isYearly;
+	}
+
+	public void setIsYearly(Boolean isYearly) {
+		this.isYearly = isYearly;
+	}
+
+	public Boolean getIsDaily() {
+		return isDaily;
+	}
+
+	public void setIsDaily(Boolean isDaily) {
+		this.isDaily = isDaily;
+	}
+
+	public List<MeetingMember> getMeetingMembers() {
+		return meetingMembers;
+	}
+
+	public void setMeetingMembers(List<MeetingMember> meetingMembers) {
+		this.meetingMembers = meetingMembers;
+	}
+
+	public Room getRoom() {
+		return room;
+	}
+
+	public void setRoom(Room room) {
+		this.room = room;
+	}
+
+	public String getIcalId() {
+		return icalId;
+	}
+
+	public void setIcalId(String icalId) {
+		this.icalId = icalId;
+	}
+
+	public Long getLanguageId() {
+		return languageId;
+	}
+
+	public void setLanguageId(Long languageId) {
+		this.languageId = languageId;
+	}
+
+	public boolean isPasswordProtected() {
+		return passwordProtected;
+	}
+
+	public void setPasswordProtected(boolean isPasswordProtected) {
+		this.passwordProtected = isPasswordProtected;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public boolean isConnectedEvent() {
+		return connectedEvent;
+	}
+
+	public void setConnectedEvent(boolean isConnectedEvent) {
+		this.connectedEvent = isConnectedEvent;
+	}
+
+	public boolean isReminderEmailSend() {
+		return reminderEmailSend;
+	}
+
+	public void setReminderEmailSend(boolean isReminderEmailSend) {
+		this.reminderEmailSend = isReminderEmailSend;
+	}
+
+	@Override
+	public String toString() {
+		return "Appointment [id=" + id + ", title=" + title + ", start=" + start + ", end=" + end + ", owner=" + owner
+				+ ", deleted=" + deleted + ", icalId=" + icalId + "]";
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/calendar/AppointmentCategory.java b/src/db/java/org/apache/openmeetings/db/entity/calendar/AppointmentCategory.java
new file mode 100644
index 0000000..bc125ae
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/calendar/AppointmentCategory.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.calendar;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.user.User;
+
+@Entity
+@Table(name = "appointmentcategory")
+public class AppointmentCategory implements Serializable {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private Long categoryId;
+	
+	@Column(name="name")
+	private String name;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="user_id", nullable=true)
+	@ForeignKey(enabled = true)
+	private User user;
+	
+	@Column(name="starttime")
+	private Date starttime;
+	
+	@Column(name="updatetime")
+	private Date updatetime;
+	
+	@Column(name="deleted")
+	private boolean deleted;
+	
+	@Lob
+	@Column(name="comment_field", length=2048)
+	private String comment;
+	
+	public Long getCategoryId() {
+		return categoryId;
+	}
+	public void setCategoryId(Long categoryId) {
+		this.categoryId = categoryId;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public User getUser() {
+		return user;
+	}
+	public void setUser(User user) {
+		this.user = user;
+	}
+	
+	public Date getStarttime() {
+		return starttime;
+	}
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+	
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+	
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+	
+	public String getComment() {
+		return comment;
+	}
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/calendar/AppointmentReminderTyps.java b/src/db/java/org/apache/openmeetings/db/entity/calendar/AppointmentReminderTyps.java
new file mode 100644
index 0000000..72364a4
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/calendar/AppointmentReminderTyps.java
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.calendar;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+
+
+@Entity
+@Table(name = "appointmentremindertyps")
+public class AppointmentReminderTyps implements Serializable {
+	private static final long serialVersionUID = -6543593995706839669L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private Long typId;
+	
+	@Column(name="name")
+	private String name;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="user_id", nullable=true)
+	@ForeignKey(enabled = true)
+	private User user;
+	
+	@Column(name="starttime")
+	private Date starttime;
+	
+	@Column(name="updatetime")
+	private Date updatetime;
+	
+	@Column(name="deleted")
+	private boolean deleted;
+	
+	@Column(name="fieldvalues_id")
+	@Element(data=true, required=false)
+	private Long fieldvalues_id;
+	
+	public Long getTypId() {
+		return typId;
+	}
+	public void setTypId(Long typId) {
+		this.typId = typId;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public User getUser() {
+		return user;
+	}
+	public void setUser(User user) {
+		this.user = user;
+	}
+	
+	public Date getStarttime() {
+		return starttime;
+	}
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+	
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+	
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Long getFieldvalues_id() {
+		return fieldvalues_id;
+	}
+	public void setFieldvalues_id(Long fieldvalues_id) {
+		this.fieldvalues_id = fieldvalues_id;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/calendar/MeetingMember.java b/src/db/java/org/apache/openmeetings/db/entity/calendar/MeetingMember.java
new file mode 100644
index 0000000..1987956
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/calendar/MeetingMember.java
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.calendar;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@Table(name = "meeting_members")
+@NamedQueries({
+    @NamedQuery(name="getMeetingMemberById"
+    		, query="SELECT mm FROM MeetingMember mm WHERE mm.deleted = false AND mm.id = :id")
+    , @NamedQuery(name="getMeetingMembers", query="SELECT mm FROM MeetingMember mm ORDER BY mm.id")
+    , @NamedQuery(name="getMeetingMemberIdsByAppointment"
+    		, query="SELECT mm.id FROM MeetingMember mm WHERE mm.deleted = false AND mm.appointment.id = :id")
+})
+@Root(name = "meetingmember")
+public class MeetingMember implements Serializable {
+	private static final long serialVersionUID = -3864571325368787524L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(name = "meetingMemberId", data = true)
+	private Long id;
+
+	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+	@JoinColumn(name = "user_id", nullable = true)
+	@ForeignKey(enabled = true)
+	@Element(name = "userid", data = true, required = false)
+	private User user;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "appointment_id", nullable = true)
+	@ForeignKey(enabled = true)
+	@Element(data = true, required = false)
+	private Appointment appointment;
+
+	@Column(name = "appointment_status")
+	@Element(data = true, required = false)
+	private String appointmentStatus; // status of the appointment denial, acceptance, wait.
+
+	@Column(name = "starttime")
+	private Date inserted;
+
+	@Column(name = "updatetime")
+	private Date updated;
+
+	@Column(name = "deleted")
+	@Element(data = true)
+	private boolean deleted;
+
+	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+	@JoinColumn(name = "invitation", nullable = true, insertable = false)
+	@ForeignKey(enabled = true)
+	private Invitation invitation;
+
+	@Column(name = "is_connected_event")
+	private boolean connectedEvent;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public User getUser() {
+		return user;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
+	public String getAppointmentStatus() {
+		return appointmentStatus;
+	}
+
+	public void setAppointmentStatus(String appointmentStatus) {
+		this.appointmentStatus = appointmentStatus;
+	}
+
+	public Appointment getAppointment() {
+		return appointment;
+	}
+
+	public void setAppointment(Appointment appointment) {
+		this.appointment = appointment;
+	}
+
+	public Invitation getInvitation() {
+		return invitation;
+	}
+
+	public void setInvitation(Invitation invitation) {
+		this.invitation = invitation;
+	}
+
+	public Date getStarttime() {
+		return inserted;
+	}
+
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	public boolean isDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public boolean isConnectedEvent() {
+		return connectedEvent;
+	}
+
+	public void setConnectedEvent(boolean connectedEvent) {
+		this.connectedEvent = connectedEvent;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/file/FileExplorerItem.java b/src/db/java/org/apache/openmeetings/db/entity/file/FileExplorerItem.java
new file mode 100644
index 0000000..1748299
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/file/FileExplorerItem.java
@@ -0,0 +1,301 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.file;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name="getAllFiles", query="SELECT c FROM FileExplorerItem c ORDER BY c.fileExplorerItemId")
+    , @NamedQuery(name="getById", query="SELECT c FROM FileExplorerItem c WHERE c.fileExplorerItemId = :fileExplorerItemId")
+    , @NamedQuery(name="getByHash", query="SELECT c FROM FileExplorerItem c WHERE c.fileHash = :fileHash")
+})
+@Table(name = "fileexploreritem")
+@Root
+public class FileExplorerItem implements Serializable {
+	private static final long serialVersionUID = 242843782142620566L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	@Element(data=true)
+	private long fileExplorerItemId;
+	
+	@Column(name="filename")
+	@Element(data=true, required = false)
+	private String fileName;
+	
+	@Column(name="filehash")
+	@Element(data=true, required = false)
+	private String fileHash;
+	
+	@Column(name="parent_fileexploreritem_id")
+	@Element(data=true)
+	private Long parentFileExplorerItemId;
+	
+	@Column(name="room_id")
+	@Element(data=true, required=false)
+	private Long room_id;
+	
+	@Column(name="owner_id")
+	@Element(data=true, required=false)
+	private Long ownerId;//OwnerID => only set if its directly root in Owner Directory, other Folders and Files
+	//maybe are also in a Home directory but just because their parent is
+	
+	@Column(name="is_folder")
+	@Element(data=true)
+	private Boolean isFolder;
+	
+	@Column(name="is_image")
+	@Element(data=true)
+	private Boolean isImage;
+	
+	@Column(name="is_presentation")
+	@Element(data=true)
+	private Boolean isPresentation;
+	
+	@Column(name="is_video")
+	@Element(data=true, required=false)
+	private Boolean isVideo;
+	
+	@Column(name="inserted_by")
+	@Element(data=true)
+	private Long insertedBy;
+	
+	@Column(name="inserted")
+	@Element(data=true)
+	private Date inserted;
+	
+	@Column(name="updated")
+	@Element(data=true)
+	private Date updated;
+	
+	@Column(name="deleted")
+	@Element(data=true)
+	private boolean deleted;
+	
+	@Column(name="filesize")
+	@Element(data=true, required=false)
+	private Long fileSize;
+	
+	@Column(name="flv_width")
+	@Element(data=true, required=false)
+	private Integer flvWidth;
+	
+	@Column(name="flv_height")
+	@Element(data=true, required=false)
+	private Integer flvHeight;
+	
+	@Column(name="preview_image")
+	@Element(data=true, required = false)
+	private String previewImage;
+	
+	@Column(name="wml_file_path")
+	@Element(data=true, required = false)
+	private String wmlFilePath;
+	
+	@Column(name="is_stored_wml_file")
+	@Element(data=true, required = false)
+	private Boolean isStoredWmlFile;
+	
+	@Column(name="is_chart")
+	@Element(data=true, required = false)
+    private Boolean isChart;
+    
+	@Column(name="external_file_id")
+    private Long externalFileId;
+	
+	@Column(name="external_type")
+    private String externalType;
+
+		
+	public long getFileExplorerItemId() {
+		return fileExplorerItemId;
+	}
+	public void setFileExplorerItemId(long fileExplorerItemId) {
+		this.fileExplorerItemId = fileExplorerItemId;
+	}
+	
+	public String getFileName() {
+		return fileName;
+	}
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+	
+	public String getFileHash() {
+		return fileHash;
+	}
+	public void setFileHash(String fileHash) {
+		this.fileHash = fileHash;
+	}
+	
+	public Long getParentFileExplorerItemId() {
+		return parentFileExplorerItemId;
+	}
+	public void setParentFileExplorerItemId(Long parentFileExplorerItemId) {
+		this.parentFileExplorerItemId = parentFileExplorerItemId;
+	}
+	
+	public Long getOwnerId() {
+		return ownerId;
+	}
+	public void setOwnerId(Long ownerId) {
+		this.ownerId = ownerId;
+	}
+	
+	public Long getRoom_id() {
+		return room_id;
+	}
+	public void setRoom_id(Long room_id) {
+		this.room_id = room_id;
+	}
+	
+	public Boolean getIsFolder() {
+		return isFolder;
+	}
+	public void setIsFolder(Boolean isFolder) {
+		this.isFolder = isFolder;
+	}
+	
+	public Boolean getIsImage() {
+		return isImage;
+	}
+	public void setIsImage(Boolean isImage) {
+		this.isImage = isImage;
+	}
+	
+	public Boolean getIsVideo() {
+		return isVideo;
+	}
+	public void setIsVideo(Boolean isVideo) {
+		this.isVideo = isVideo;
+	}
+	
+	public Boolean getIsPresentation() {
+		return isPresentation;
+	}
+	public void setIsPresentation(Boolean isPresentation) {
+		this.isPresentation = isPresentation;
+	}
+	
+	public Long getInsertedBy() {
+		return insertedBy;
+	}
+	public void setInsertedBy(Long insertedBy) {
+		this.insertedBy = insertedBy;
+	}
+	
+	public Date getInserted() {
+		return inserted;
+	}
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+	
+	public Date getUpdated() {
+		return updated;
+	}
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+	
+	public Long getFileSize() {
+		return fileSize;
+	}
+	public void setFileSize(Long fileSize) {
+		this.fileSize = fileSize;
+	}
+	
+	public Integer getFlvWidth() {
+		return flvWidth;
+	}
+	public void setFlvWidth(Integer flvWidth) {
+		this.flvWidth = flvWidth;
+	}
+
+	public Integer getFlvHeight() {
+		return flvHeight;
+	}
+	public void setFlvHeight(Integer flvHeight) {
+		this.flvHeight = flvHeight;
+	}
+
+	public String getPreviewImage() {
+		return previewImage;
+	}	
+	public void setPreviewImage(String previewImage) {
+		this.previewImage = previewImage;
+	}
+	
+	public String getWmlFilePath() {
+		return wmlFilePath;
+	}
+	public void setWmlFilePath(String wmlFilePath) {
+		this.wmlFilePath = wmlFilePath;
+	}
+	
+	public Boolean getIsStoredWmlFile() {
+		return isStoredWmlFile;
+	}
+	public void setIsStoredWmlFile(Boolean isStoredWmlFile) {
+		this.isStoredWmlFile = isStoredWmlFile;
+	}
+
+	public Boolean getIsChart() {
+        return isChart;
+    }
+    public void setIsChart(Boolean isChart) {
+        this.isChart = isChart;
+    }
+    
+	public Long getExternalFileId() {
+		return externalFileId;
+	}
+	public void setExternalFileId(Long externalFileId) {
+		this.externalFileId = externalFileId;
+	}
+	
+	public String getExternalType() {
+		return externalType;
+	}
+	public void setExternalType(String externalType) {
+		this.externalType = externalType;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/label/StringLabel.java b/src/db/java/org/apache/openmeetings/db/entity/label/StringLabel.java
new file mode 100644
index 0000000..34acd97
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/label/StringLabel.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.label;
+
+import java.util.AbstractMap.SimpleEntry;
+import java.util.Map;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+
+public class StringLabel extends SimpleEntry<String, String> implements IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+
+	public StringLabel(String key, String value) {
+		super(key, value);
+	}
+
+	public StringLabel(StringLabel l) {
+		super(l.getKey(), l.getValue());
+	}
+	
+	@Override
+	public int hashCode() {
+		return (getKey() == null ? 0 : getKey().hashCode());
+	}
+	
+	@Override
+	public boolean equals(Object o) {
+        if (!(o instanceof Map.Entry))
+            return false;
+        Map.Entry<?,?> e = (Map.Entry<?,?>)o;
+        return getKey() == null ? e.getKey() == null : getKey().equals(e.getKey());
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/log/ConferenceLog.java b/src/db/java/org/apache/openmeetings/db/entity/log/ConferenceLog.java
new file mode 100644
index 0000000..5d83d77
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/log/ConferenceLog.java
@@ -0,0 +1,187 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.log;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+
+
+
+@Entity
+@Table(name = "conferencelog")
+public class ConferenceLog implements Serializable {
+	private static final long serialVersionUID = 147341496943518159L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private long conferenceLogId;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="conferencelogtype_id", updatable=true, insertable=true)
+	@ForeignKey(enabled = true)
+	private ConferenceLogType conferenceLogType;
+	
+	@Column(name="inserted")
+	private Date inserted;
+	
+	@Column(name="insertedby")
+	private long insertedby;
+	
+	//NULL means its a Guest/Invited User
+	@Column(name="user_id")
+	private Long userId;
+	
+	@Column(name="external_user_id")
+	private String externalUserId;
+	
+	@Column(name="external_user_type")
+	private String externalUserType;
+	
+	@Column(name="streamid")
+	private String streamid;
+	
+	@Column(name="room_id")
+	private Long room_id;
+	
+	@Column(name="userip")
+	private String userip;
+	
+	@Column(name="scopename")
+	private String scopeName;
+	
+	@Column(name="email")
+	private String email;
+	
+	@Column(name="firstname")
+	private String firstname;
+	
+	@Column(name="lastname")
+	private String lastname;
+	
+	public long getConferenceLogId() {
+		return conferenceLogId;
+	}
+	public void setConferenceLogId(long conferenceLogId) {
+		this.conferenceLogId = conferenceLogId;
+	}
+	
+	public ConferenceLogType getConferenceLogType() {
+		return conferenceLogType;
+	}
+	public void setConferenceLogType(ConferenceLogType conferenceLogType) {
+		this.conferenceLogType = conferenceLogType;
+	}
+	
+	public Date getInserted() {
+		return inserted;
+	}
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public long getInsertedby() {
+		return insertedby;
+	}
+	public void setInsertedby(long insertedby) {
+		this.insertedby = insertedby;
+	}
+	
+	public Long getUserId() {
+		return userId;
+	}
+	public void setUserId(Long userId) {
+		this.userId = userId;
+	}
+	
+	public String getStreamid() {
+		return streamid;
+	}
+	public void setStreamid(String streamid) {
+		this.streamid = streamid;
+	}
+	
+	public Long getRoom_id() {
+		return room_id;
+	}
+	public void setRoom_id(Long room_id) {
+		this.room_id = room_id;
+	}
+	
+	public String getUserip() {
+		return userip;
+	}
+	public void setUserip(String userip) {
+		this.userip = userip;
+	}
+	
+	public String getScopeName() {
+		return scopeName;
+	}
+	public void setScopeName(String scopeName) {
+		this.scopeName = scopeName;
+	}
+	
+	public String getExternalUserId() {
+		return externalUserId;
+	}
+	public void setExternalUserId(String externalUserId) {
+		this.externalUserId = externalUserId;
+	}
+	
+	public String getExternalUserType() {
+		return externalUserType;
+	}
+	public void setExternalUserType(String externalUserType) {
+		this.externalUserType = externalUserType;
+	}
+	
+	public String getEmail() {
+		return email;
+	}
+	public void setEmail(String email) {
+		this.email = email;
+	}
+	
+	public String getFirstname() {
+		return firstname;
+	}
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+	
+	public String getLastname() {
+		return lastname;
+	}
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/log/ConferenceLogType.java b/src/db/java/org/apache/openmeetings/db/entity/log/ConferenceLogType.java
new file mode 100644
index 0000000..1d88b05
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/log/ConferenceLogType.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.log;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getConferenceLogTypeByEventName", query = "select a from ConferenceLogType a " +
+					"WHERE a.eventType = :eventType")
+})
+@Table(name = "conferencelogtype")
+public class ConferenceLogType implements Serializable {
+	private static final long serialVersionUID = 4388958579350356294L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private long conferenceLogTypeId;
+	
+	@Column(name="eventtype")
+	private String eventType;
+	
+	@Column(name="inserted")
+	private Date inserted;
+	
+	@Column(name="insertedby")
+	private long insertedby;
+	
+	public long getConferenceLogTypeId() {
+		return conferenceLogTypeId;
+	}
+	public void setConferenceLogTypeId(long conferenceLogTypeId) {
+		this.conferenceLogTypeId = conferenceLogTypeId;
+	}
+
+	public String getEventType() {
+		return eventType;
+	}
+	public void setEventType(String eventType) {
+		this.eventType = eventType;
+	}
+	
+	public Date getInserted() {
+		return inserted;
+	}
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+	
+	public long getInsertedby() {
+		return insertedby;
+	}
+	public void setInsertedby(long insertedby) {
+		this.insertedby = insertedby;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecording.java b/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecording.java
new file mode 100644
index 0000000..579737c
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecording.java
@@ -0,0 +1,498 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.record;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.ElementList;
+import org.simpleframework.xml.Root;
+
+/**
+ * An item in the file explorer in the recording section. Can be either:<br/>
+ * <ul>
+ * <li>a conference recording</li>
+ * <li>a interview recording</li>
+ * <li>a folder</li>
+ * </ul>
+ * 
+ * Recorded files are situated in: webapps/openmeetings/streams/hibernate.<br/>
+ * The raw recorded files are situated in:
+ * webapps/openmeetings/streams/$ROOM_ID.<br/>
+ * 
+ * @author sebawagner
+ * 
+ */
+@Entity
+@NamedQueries({ 
+	@NamedQuery(name = "getRecordingById", query = "SELECT f FROM FlvRecording f WHERE f.flvRecordingId = :id") 
+	, @NamedQuery(name = "getRecordingByHash", query = "SELECT f FROM FlvRecording f WHERE f.fileHash = :fileHash") 
+	, @NamedQuery(name = "getRecordingsByExternalUser", query = "SELECT c FROM FlvRecording c, User u "
+			+ "WHERE c.insertedBy = u.user_id AND u.externalUserId = :externalUserId  AND u.externalUserType = :externalUserType "
+			+ "AND c.deleted = false") 
+	, @NamedQuery(name = "getRecordingsPublic", query = "SELECT f FROM FlvRecording f WHERE f.deleted = false AND f.ownerId IS NULL "
+			+ "AND f.organization_id IS NULL AND (f.parentFileExplorerItemId IS NULL OR f.parentFileExplorerItemId = 0) "
+			+ "ORDER BY f.folder DESC, f.inserted")
+	, @NamedQuery(name = "getRecordingsByOrganization", query = "SELECT f FROM FlvRecording f WHERE f.deleted = false AND f.ownerId IS NULL "
+			+ "AND f.organization_id = :organization_id AND (f.parentFileExplorerItemId IS NULL OR f.parentFileExplorerItemId = 0) "
+			+ "ORDER BY f.folder DESC, f.inserted")
+	, @NamedQuery(name = "getRecordingsByOwner", query = "SELECT f FROM FlvRecording f WHERE f.deleted = false AND f.ownerId = :ownerId "
+			+ "AND (f.parentFileExplorerItemId IS NULL OR f.parentFileExplorerItemId = 0) "
+			+ "ORDER BY f.folder DESC, f.inserted")
+	, @NamedQuery(name = "getRecordingsByParent", query = "SELECT f FROM FlvRecording f WHERE f.deleted = false AND f.parentFileExplorerItemId = :parentId "
+			+ "ORDER BY f.folder DESC, f.inserted")
+	, @NamedQuery(name = "resetRecordingProcessingStatus", query = "UPDATE FlvRecording f SET f.status = :error WHERE f.status IN (:recording, :converting)")
+	, @NamedQuery(name = "getRecordingsByExternalType", query = "SELECT rec FROM FlvRecording rec, Room r, User u "
+			+ "WHERE rec.deleted = false AND rec.room_id = r.rooms_id AND rec.insertedBy = u.user_id "
+			+ "AND (r.externalRoomType = :externalType OR u.externalUserType = :externalType)")
+})
+@Table(name = "flvrecording")
+@Root(name = "flvrecording")
+public class FlvRecording implements Serializable {
+	private static final long serialVersionUID = 1L;
+	
+	public enum Status {
+		NONE
+		, RECORDING
+		, CONVERTING
+		, PROCESSED
+		, ERROR
+	}
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(data = true)
+	private long flvRecordingId;
+
+	@Column(name = "filename")
+	@Element(data = true, required = false)
+	private String fileName;
+
+	@Column(name = "alternate_download")
+	@Element(data = true, required = false)
+	private String alternateDownload;
+
+	@Column(name = "filehash")
+	@Element(data = true, required = false)
+	private String fileHash;
+
+	@Column(name = "comment_field")
+	@Element(data = true, required = false)
+	private String comment;
+
+	@Column(name = "parent_fileexploreritem_id")
+	@Element(data = true, required = false)
+	private Long parentFileExplorerItemId;
+
+	@Column(name = "room_id")
+	@Element(data = true, required = false)
+	private Long room_id;
+
+	@Column(name = "owner_id")
+	@Element(data = true, required = false)
+	private Long ownerId;// OwnerID => only set if its directly root in Owner
+							// Directory, other Folders and Files
+							// maybe are also in a Home directory but just
+							// because their parent is
+
+	@Column(name = "is_folder")
+	@Element(data = true, required = false)
+	private boolean folder;
+
+	@Column(name = "is_image")
+	@Element(data = true, required = false)
+	private Boolean isImage;
+
+	@Column(name = "is_presentation")
+	@Element(data = true, required = false)
+	private Boolean isPresentation;
+
+	@Column(name = "is_recording")
+	@Element(data = true, required = false)
+	private Boolean isRecording;
+
+	@Column(name = "record_start")
+	@Element(data = true, required = false)
+	private Date recordStart;
+
+	@Column(name = "record_end")
+	@Element(data = true, required = false)
+	private Date recordEnd;
+
+	@Column(name = "inserted_by")
+	@Element(data = true, required = false)
+	private Long insertedBy;
+
+	@Column(name = "inserted")
+	@Element(data = true, required = false)
+	private Date inserted;
+
+	@Column(name = "updated")
+	private Date updated;
+
+	@Column(name = "deleted")
+	@Element(data = true, required = false)
+	private boolean deleted;
+
+	@Column(name = "width")
+	@Element(data = true, required = false)
+	private Integer width;
+
+	@Column(name = "height")
+	@Element(data = true, required = false)
+	private Integer height;
+
+	@Column(name = "flv_width")
+	@Element(data = true, required = false)
+	private Integer flvWidth;
+
+	@Column(name = "flv_height")
+	@Element(data = true, required = false)
+	private Integer flvHeight;
+
+	@Column(name = "preview_image")
+	@Element(data = true, required = false)
+	private String previewImage;
+
+	@Column(name = "duration")
+	@Element(data = true, required = false)
+	private String duration;
+
+	@Column(name = "recorder_stream_id")
+	@Element(data = true, required = false)
+	private String recorderStreamId;
+
+	@Column(name = "organization_id")
+	@Element(data = true, required = false)
+	private Long organization_id;
+
+	@Column(name = "is_interview")
+	@Element(data = true, required = false)
+	private Boolean isInterview;
+
+	@Column(name = "progress_post_processing")
+	@Element(data = true, required = false)
+	private Integer progressPostProcessing;
+
+	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+	@JoinColumn(name = "flvrecording_id")
+	@ElementList(name = "flvrecordingmetadatas", required = false)
+	private List<FlvRecordingMetaData> flvRecordingMetaData;
+
+	@Column(name = "status")
+	@Enumerated(value = EnumType.STRING)
+	@Element(data = true, required = false)
+	private Status status = Status.NONE;
+	
+	// Not Mapped
+	@Transient
+	private User creator;
+
+	@Transient
+	private Room room;
+
+	@Transient
+	private List<FlvRecordingLog> flvRecordingLog;
+
+	public long getFlvRecordingId() {
+		return flvRecordingId;
+	}
+
+	public void setFlvRecordingId(long flvRecordingId) {
+		this.flvRecordingId = flvRecordingId;
+	}
+
+	public String getFileName() {
+		return fileName;
+	}
+
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public String getFileHash() {
+		return fileHash;
+	}
+
+	public void setFileHash(String fileHash) {
+		this.fileHash = fileHash;
+	}
+
+	public Long getParentFileExplorerItemId() {
+		return parentFileExplorerItemId;
+	}
+
+	public void setParentFileExplorerItemId(Long parentFileExplorerItemId) {
+		this.parentFileExplorerItemId = parentFileExplorerItemId;
+	}
+
+	public Long getRoom_id() {
+		return room_id;
+	}
+
+	public void setRoom_id(Long room_id) {
+		this.room_id = room_id;
+	}
+
+	public Long getOwnerId() {
+		return ownerId;
+	}
+
+	public void setOwnerId(Long ownerId) {
+		this.ownerId = ownerId;
+	}
+
+	public boolean isFolder() {
+		return folder;
+	}
+
+	public void setFolder(boolean folder) {
+		this.folder = folder;
+	}
+
+	public Boolean getIsImage() {
+		return isImage;
+	}
+
+	public void setIsImage(Boolean isImage) {
+		this.isImage = isImage;
+	}
+
+	public Boolean getIsPresentation() {
+		return isPresentation;
+	}
+
+	public void setIsPresentation(Boolean isPresentation) {
+		this.isPresentation = isPresentation;
+	}
+
+	public Boolean getIsRecording() {
+		return isRecording;
+	}
+
+	public void setIsRecording(Boolean isRecording) {
+		this.isRecording = isRecording;
+	}
+
+	public Long getInsertedBy() {
+		return insertedBy;
+	}
+
+	public void setInsertedBy(Long insertedBy) {
+		this.insertedBy = insertedBy;
+	}
+
+	public Date getInserted() {
+		return inserted;
+	}
+
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	public String getDuration() {
+		return duration;
+	}
+
+	public void setDuration(String duration) {
+		this.duration = duration;
+	}
+
+	public Date getRecordStart() {
+		return recordStart;
+	}
+
+	public void setRecordStart(Date recordStart) {
+		this.recordStart = recordStart;
+	}
+
+	public Date getRecordEnd() {
+		return recordEnd;
+	}
+
+	public void setRecordEnd(Date recordEnd) {
+		this.recordEnd = recordEnd;
+	}
+
+	public String getRecorderStreamId() {
+		return recorderStreamId;
+	}
+
+	public void setRecorderStreamId(String recorderStreamId) {
+		this.recorderStreamId = recorderStreamId;
+	}
+
+	public Long getOrganization_id() {
+		return organization_id;
+	}
+
+	public void setOrganization_id(Long organization_id) {
+		this.organization_id = organization_id;
+	}
+
+	public List<FlvRecordingMetaData> getFlvRecordingMetaData() {
+		return flvRecordingMetaData;
+	}
+
+	public void setFlvRecordingMetaData(
+			List<FlvRecordingMetaData> flvRecordingMetaData) {
+		this.flvRecordingMetaData = flvRecordingMetaData;
+	}
+
+	public User getCreator() {
+		return creator;
+	}
+
+	public void setCreator(User creator) {
+		this.creator = creator;
+	}
+
+	public Room getRoom() {
+		return room;
+	}
+
+	public void setRoom(Room room) {
+		this.room = room;
+	}
+
+	public Integer getWidth() {
+		return width;
+	}
+
+	public void setWidth(Integer width) {
+		this.width = width;
+	}
+
+	public Integer getHeight() {
+		return height;
+	}
+
+	public void setHeight(Integer height) {
+		this.height = height;
+	}
+
+	public Integer getFlvWidth() {
+		return flvWidth;
+	}
+
+	public void setFlvWidth(Integer flvWidth) {
+		this.flvWidth = flvWidth;
+	}
+
+	public Integer getFlvHeight() {
+		return flvHeight;
+	}
+
+	public void setFlvHeight(Integer flvHeight) {
+		this.flvHeight = flvHeight;
+	}
+
+	public String getPreviewImage() {
+		return previewImage;
+	}
+
+	public void setPreviewImage(String previewImage) {
+		this.previewImage = previewImage;
+	}
+
+	public String getAlternateDownload() {
+		return alternateDownload;
+	}
+
+	public void setAlternateDownload(String alternateDownload) {
+		this.alternateDownload = alternateDownload;
+	}
+
+	public List<FlvRecordingLog> getFlvRecordingLog() {
+		return flvRecordingLog;
+	}
+
+	public void setFlvRecordingLog(List<FlvRecordingLog> flvRecordingLog) {
+		this.flvRecordingLog = flvRecordingLog;
+	}
+
+	public Boolean getIsInterview() {
+		return isInterview;
+	}
+
+	public void setIsInterview(Boolean isInterview) {
+		this.isInterview = isInterview;
+	}
+
+	public Integer getProgressPostProcessing() {
+		return progressPostProcessing;
+	}
+
+	public void setProgressPostProcessing(Integer progressPostProcessing) {
+		this.progressPostProcessing = progressPostProcessing;
+	}
+
+	public Status getStatus() {
+		return status;
+	}
+
+	public void setStatus(Status status) {
+		this.status = status;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingLog.java b/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingLog.java
new file mode 100644
index 0000000..afafcfe
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingLog.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.record;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+@Entity
+@NamedQueries({ 
+	@NamedQuery(name = "getRecordingLogsByRecording", query = "SELECT fl FROM FlvRecordingLog fl WHERE fl.flvRecording.flvRecordingId = :recId ORDER BY fl.inserted")
+	, @NamedQuery(name = "countErrorRecordingLogsByRecording", query = "SELECT COUNT(fl) FROM FlvRecordingLog fl WHERE fl.flvRecording.flvRecordingId = :recId AND fl.exitValue <> '0'")
+	, @NamedQuery(name = "deleteErrorRecordingLogsByRecording", query = "DELETE FROM FlvRecordingLog fl WHERE fl.flvRecording.flvRecordingId = :recId")
+})
+@Table(name = "flvrecording_log")
+public class FlvRecordingLog implements Serializable {
+	private static final long serialVersionUID = 1L;
+	public static final int MAX_LOG_SIZE = 64 * 1024; //64K until column definition will be fixed
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private long flvRecordingLogId;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="flvrecording_id", nullable=true)
+	private FlvRecording flvRecording;
+	
+	@Column(name="inserted")
+	private Date inserted;
+	
+	@Column(name="msg_type")
+	private String msgType;
+	
+	@Lob
+	@Column(name="ful_message", length = MAX_LOG_SIZE)
+	private String fullMessage;
+	
+	@Column(name="exit_value")
+	private String exitValue;
+	
+	public long getFlvRecordingLogId() {
+		return flvRecordingLogId;
+	}
+	public void setFlvRecordingLogId(long flvRecordingLogId) {
+		this.flvRecordingLogId = flvRecordingLogId;
+	}
+	
+	public FlvRecording getFlvRecording() {
+		return flvRecording;
+	}
+	public void setFlvRecording(FlvRecording flvRecording) {
+		this.flvRecording = flvRecording;
+	}
+	
+	public Date getInserted() {
+		return inserted;
+	}
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+	
+	public String getMsgType() {
+		return msgType;
+	}
+	public void setMsgType(String msgType) {
+		this.msgType = msgType;
+	}
+	
+	public String getFullMessage() {
+		return fullMessage;
+	}
+	public void setFullMessage(String fullMessage) {
+		this.fullMessage = fullMessage == null || fullMessage.length() < MAX_LOG_SIZE ? fullMessage : fullMessage.substring(0,  MAX_LOG_SIZE);
+	}
+	
+	public String getExitValue() {
+		return exitValue;
+	}
+	public void setExitValue(String exitValue) {
+		this.exitValue = exitValue;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaData.java b/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaData.java
new file mode 100644
index 0000000..bedb5e4
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaData.java
@@ -0,0 +1,292 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.record;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+/**
+ * contains meta data about each stream, for example if it is a screen sharing or
+ * audio/video stream. There is also a {@link Status} value
+ * {@link #streamStatus}, as long as this variable is not set
+ * to {@link Status.STOPPED}, the recording process will not proceed and start to convert all
+ * input sources to a single recording file.
+ * 
+ * @author sebawagner
+ */
+@Entity
+@NamedQueries({ 
+	@NamedQuery(name = "getMetaById", query = "SELECT c FROM FlvRecordingMetaData c WHERE c.flvRecordingMetaDataId = :id")
+	, @NamedQuery(name = "getMetaByRecording", query = "SELECT c FROM FlvRecordingMetaData c WHERE c.flvRecording.flvRecordingId = :recordingId AND c.deleted = false")
+	, @NamedQuery(name = "getAudioMetaByRecording", query = "SELECT c FROM FlvRecordingMetaData c WHERE c.flvRecording.flvRecordingId = :recordingId "
+			+ "AND c.screenData = false AND c.streamStatus <> :none AND (c.audioOnly = true OR (c.audioOnly = false AND c.videoOnly = false))")
+	, @NamedQuery(name = "getScreenMetaByRecording", query = "SELECT c FROM FlvRecordingMetaData c WHERE c.flvRecording.flvRecordingId = :recordingId"
+			+ " AND c.screenData = true")
+})
+@Table(name = "flvrecording_metadata")
+@Root(name = "flvrecordingmetadata")
+public class FlvRecordingMetaData implements Serializable {
+	private static final long serialVersionUID = 1L;
+	public enum Status {
+		NONE
+		, STARTED
+		, STOPPING
+		, STOPPED
+	}
+	
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(name = "flvRecordingMetaDataId", data = true, required = false)
+	private long flvRecordingMetaDataId;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "flvrecording_id", nullable = true)
+	@ForeignKey(enabled = true)
+	private FlvRecording flvRecording;
+
+	@Column(name = "record_start")
+	@Element(data = true)
+	private Date recordStart;
+
+	@Column(name = "record_end")
+	@Element(data = true, required = false)
+	private Date recordEnd;
+
+	@Column(name = "stream_name")
+	@Element(data = true)
+	private String streamName;
+
+	@Column(name = "free_text_user_name")
+	@Element(data = true)
+	private String freeTextUserName;
+
+	@Column(name = "is_audio_only")
+	@Element(name = "isAudioOnly", data = true)
+	private boolean audioOnly;
+
+	@Column(name = "is_video_only")
+	@Element(name = "isVideoOnly", data = true)
+	private boolean videoOnly;
+
+	@Column(name = "is_screen_data")
+	@Element(name = "isScreenData", data = true)
+	private boolean screenData;
+
+	@Column(name = "inserted_by")
+	@Element(data = true, required = false)
+	private Long insertedBy;
+
+	@Column(name = "inserted")
+	@Element(data = true)
+	private Date inserted;
+
+	@Column(name = "updated")
+	@Element(data = true, required = false)
+	private Date updated;
+
+	@Column(name = "deleted")
+	private boolean deleted;
+
+	@Column(name = "wav_audio_data")
+	@Element(data = true, required = false)
+	private String wavAudioData;
+
+	@Column(name = "full_wav_audio_data")
+	@Element(data = true, required = false)
+	private String fullWavAudioData;
+
+	@Column(name = "audio_is_valid")
+	@Element(name="audioIsValid", data = true, required = false)
+	private boolean audioValid;
+
+	@Column(name = "interiew_pod_id")
+	@Element(data = true, required = false)
+	private Integer interiewPodId;
+
+	/**
+	 * this is only STOPPED when the asynchronous stream writer's have completed to write packets to the file.
+	 * @see BaseStreamWriter#closeStream()
+	 */
+	@Column(name = "stream_status")
+	@Enumerated(EnumType.STRING)
+	private Status streamStatus = Status.NONE;
+
+	public long getFlvRecordingMetaDataId() {
+		return flvRecordingMetaDataId;
+	}
+
+	public void setFlvRecordingMetaDataId(long flvRecordingMetaDataId) {
+		this.flvRecordingMetaDataId = flvRecordingMetaDataId;
+	}
+
+	public FlvRecording getFlvRecording() {
+		return flvRecording;
+	}
+
+	public void setFlvRecording(FlvRecording flvRecording) {
+		this.flvRecording = flvRecording;
+	}
+
+	public Date getRecordStart() {
+		return recordStart;
+	}
+
+	public void setRecordStart(Date recordStart) {
+		this.recordStart = recordStart;
+	}
+
+	public Date getRecordEnd() {
+		return recordEnd;
+	}
+
+	public void setRecordEnd(Date recordEnd) {
+		this.recordEnd = recordEnd;
+	}
+
+	public String getFreeTextUserName() {
+		return freeTextUserName;
+	}
+
+	public void setFreeTextUserName(String freeTextUserName) {
+		this.freeTextUserName = freeTextUserName;
+	}
+
+	public boolean isAudioOnly() {
+		return audioOnly;
+	}
+
+	public void setAudioOnly(boolean audioOnly) {
+		this.audioOnly = audioOnly;
+	}
+
+	public boolean isVideoOnly() {
+		return videoOnly;
+	}
+
+	public void setVideoOnly(boolean videoOnly) {
+		this.videoOnly = videoOnly;
+	}
+
+	public Long getInsertedBy() {
+		return insertedBy;
+	}
+
+	public void setInsertedBy(Long insertedBy) {
+		this.insertedBy = insertedBy;
+	}
+
+	public Date getInserted() {
+		return inserted;
+	}
+
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	public boolean isScreenData() {
+		return screenData;
+	}
+
+	public void setScreenData(boolean screenData) {
+		this.screenData = screenData;
+	}
+
+	public String getStreamName() {
+		return streamName;
+	}
+
+	public void setStreamName(String streamName) {
+		this.streamName = streamName;
+	}
+
+	public String getWavAudioData() {
+		return wavAudioData;
+	}
+
+	public void setWavAudioData(String wavAudioData) {
+		this.wavAudioData = wavAudioData;
+	}
+
+	public String getFullWavAudioData() {
+		return fullWavAudioData;
+	}
+
+	public void setFullWavAudioData(String fullWavAudioData) {
+		this.fullWavAudioData = fullWavAudioData;
+	}
+
+	public boolean isAudioValid() {
+		return audioValid;
+	}
+
+	public void setAudioValid(boolean audioValid) {
+		this.audioValid = audioValid;
+	}
+
+	public Integer getInteriewPodId() {
+		return interiewPodId;
+	}
+
+	public void setInteriewPodId(Integer interiewPodId) {
+		this.interiewPodId = interiewPodId;
+	}
+
+	public Status getStreamStatus() {
+		return streamStatus;
+	}
+
+	public void setStreamStatus(Status status) {
+		this.streamStatus = status;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaDelta.java b/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaDelta.java
new file mode 100644
index 0000000..ce84b7c
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/record/FlvRecordingMetaDelta.java
@@ -0,0 +1,220 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.record;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+/**
+ * 
+ *
+ */
+@Entity
+@Table(name = "flvrecording_meta_delta")
+public class FlvRecordingMetaDelta implements Serializable {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private long flvRecordingMetaDeltaId;
+	
+	@Column(name="flvrecording_metadata_id")
+	private Long flvRecordingMetaDataId;
+	
+	@Column(name="time_stamp")
+	private Integer timeStamp;
+	
+	@Column(name="delta_time")
+	private Long deltaTime;
+	
+	@Column(name="last_time_stamp")
+	private Long lastTimeStamp;
+	
+	@Column(name="start_time")
+	private Date startTime;
+	
+	@Column(name="current_event_time")
+	private Date currentTime;
+	
+	@Column(name="delta_time_stamp")
+	private Long deltaTimeStamp;
+	
+	@Column(name="missing_time")
+	private Long missingTime;
+	
+	@Column(name="duration")
+	private Integer duration;
+	
+	@Column(name="start_time_stamp")
+	private Integer startTimeStamp;
+	
+	@Column(name="packet_time_stamp")
+	private Integer packetTimeStamp;
+	
+	@Column(name="wave_out_put_name")
+	private String waveOutPutName;
+	
+	@Column(name="data_length_packet")
+	private Integer dataLengthPacket;
+	
+	@Column(name="received_audio_data_length")
+	private Long receivedAudioDataLength;
+	
+	@Column(name="is_end_padding")
+	private boolean endPadding;
+	
+	@Column(name="is_start_padding")
+	private boolean startPadding;
+	
+	@Column(name="debug_status")
+	private String debugStatus;
+	
+	public long getFlvRecordingMetaDeltaId() {
+		return flvRecordingMetaDeltaId;
+	}
+	public void setFlvRecordingMetaDeltaId(long flvRecordingMetaDeltaId) {
+		this.flvRecordingMetaDeltaId = flvRecordingMetaDeltaId;
+	}
+	
+	public Long getFlvRecordingMetaDataId() {
+		return flvRecordingMetaDataId;
+	}
+	public void setFlvRecordingMetaDataId(Long flvRecordingMetaDataId) {
+		this.flvRecordingMetaDataId = flvRecordingMetaDataId;
+	}
+	
+	public Integer getTimeStamp() {
+		return timeStamp;
+	}
+	public void setTimeStamp(Integer timeStamp) {
+		this.timeStamp = timeStamp;
+	}
+	
+	public Long getDeltaTime() {
+		return deltaTime;
+	}
+	public void setDeltaTime(Long deltaTime) {
+		this.deltaTime = deltaTime;
+	}
+	
+	public Long getLastTimeStamp() {
+		return lastTimeStamp;
+	}
+	public void setLastTimeStamp(Long lastTimeStamp) {
+		this.lastTimeStamp = lastTimeStamp;
+	}
+	
+	public Long getDeltaTimeStamp() {
+		return deltaTimeStamp;
+	}
+	public void setDeltaTimeStamp(Long deltaTimeStamp) {
+		this.deltaTimeStamp = deltaTimeStamp;
+	}
+	
+	public Integer getPacketTimeStamp() {
+		return packetTimeStamp;
+	}
+	public void setPacketTimeStamp(Integer packetTimeStamp) {
+		this.packetTimeStamp = packetTimeStamp;
+	}
+	
+	public Integer getStartTimeStamp() {
+		return startTimeStamp;
+	}
+	public void setStartTimeStamp(Integer startTimeStamp) {
+		this.startTimeStamp = startTimeStamp;
+	}
+	
+	public Long getMissingTime() {
+		return missingTime;
+	}
+	public void setMissingTime(Long missingTime) {
+		this.missingTime = missingTime;
+	}
+	
+	public Integer getDuration() {
+		return duration;
+	}
+	public void setDuration(Integer duration) {
+		this.duration = duration;
+	}
+	
+	public Date getStartTime() {
+		return startTime;
+	}
+	public void setStartTime(Date startTime) {
+		this.startTime = startTime;
+	}
+	
+	public Date getCurrentTime() {
+		return currentTime;
+	}
+	public void setCurrentTime(Date currentTime) {
+		this.currentTime = currentTime;
+	}
+	
+	public boolean isEndPadding() {
+		return endPadding;
+	}
+	public void setEndPadding(boolean endPadding) {
+		this.endPadding = endPadding;
+	}
+	
+	public boolean isStartPadding() {
+		return startPadding;
+	}
+	public void setStartPadding(boolean startPadding) {
+		this.startPadding = startPadding;
+	}
+	
+	public String getDebugStatus() {
+		return debugStatus;
+	}
+	public void setDebugStatus(String debugStatus) {
+		this.debugStatus = debugStatus;
+	}
+	
+	public String getWaveOutPutName() {
+		return waveOutPutName;
+	}
+	public void setWaveOutPutName(String waveOutPutName) {
+		this.waveOutPutName = waveOutPutName;
+	}
+	
+	public Integer getDataLengthPacket() {
+		return dataLengthPacket;
+	}
+	public void setDataLengthPacket(Integer dataLengthPacket) {
+		this.dataLengthPacket = dataLengthPacket;
+	}
+	
+	public Long getReceivedAudioDataLength() {
+		return receivedAudioDataLength;
+	}
+	public void setReceivedAudioDataLength(Long receivedAudioDataLength) {
+		this.receivedAudioDataLength = receivedAudioDataLength;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/Client.java b/src/db/java/org/apache/openmeetings/db/entity/room/Client.java
new file mode 100644
index 0000000..9b345f5
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/Client.java
@@ -0,0 +1,897 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.util.CalendarPatterns;
+
+/**
+ * Can be configured to be stored in memory or in database
+ * 
+ * @author sebawagner
+ */
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "deleteAll", query = "DELETE FROM Client"),
+	@NamedQuery(name = "deletedById", query = "DELETE FROM Client c WHERE c.id = :id"),
+	@NamedQuery(name = "deleteClientsByServer", query = "DELETE FROM Client c WHERE c.server = :server"),
+	@NamedQuery(name = "deletedByServerAndStreamId", query = "DELETE FROM Client c WHERE c.server = :server AND c.streamid LIKE :streamid"),
+	@NamedQuery(name = "countClients", query = "SELECT count(c.id) FROM Client c"),
+	@NamedQuery(name = "countClientsByServer", query = "SELECT count(c.id) FROM Client c WHERE c.server = :server"),
+	@NamedQuery(name = "countClientsByServerAndStreamId", query = "SELECT count(c.id) FROM Client c WHERE c.streamid LIKE :streamid AND c.server = :server"),
+	@NamedQuery(name = "getClientByServerAndStreamId", query = "SELECT c FROM Client c WHERE c.streamid LIKE :streamid AND c.server = :server"),
+	@NamedQuery(name = "getClientsByPublicSIDAndServer", query = "SELECT c FROM Client c WHERE c.publicSID LIKE :publicSID AND c.server = :server"),
+	@NamedQuery(name = "getClientsByPublicSID", query = "SELECT c FROM Client c WHERE c.publicSID LIKE :publicSID"),
+	@NamedQuery(name = "getClientsByServer", query = "SELECT c FROM Client c WHERE c.server = :server"),
+	@NamedQuery(name = "getClients", query = "SELECT c FROM Client c"),
+	@NamedQuery(name = "getClientsWithServer", query = "SELECT c FROM Client c LEFT JOIN FETCH c.server"),
+	@NamedQuery(name = "getClientsByUserId", query = "SELECT c FROM Client c WHERE c.server = :server AND c.user_id = :user_id"),
+	@NamedQuery(name = "getClientsByRoomId", query = "SELECT c FROM Client c WHERE c.room_id = :room_id"),
+	@NamedQuery(name = "getRoomsIdsByServer", query = "SELECT c.room_id FROM Client c WHERE c.server = :server GROUP BY c.room_id")
+})
+@Table(name = "client")
+public class Client implements IDataProviderEntity, Serializable {
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private long id;
+	
+	/**
+	 * @see Client#getUsername()
+	 */
+	@Column(name = "username")
+	private String username = "";
+	
+	/**
+	 * @see Client#getStreamid()
+	 */
+	@Column(name = "streamid")
+	private String streamid = "";
+	
+	/**
+	 * @see Client#getScope()
+	 */
+	@Column(name = "scope")
+	private String scope = "";
+	
+	/**
+	 * @see Client#getVWidth()
+	 */
+	@Column(name = "vwidth")
+	private int vWidth = 0;
+	
+	/**
+	 * @see Client#getVHeight()
+	 */
+	@Column(name = "vheight")
+	private int vHeight = 0;
+	
+	/**
+	 * @see Client#getVX()
+	 */
+	@Column(name = "vx")
+	private int vX = 0;
+	
+	/**
+	 * @see Client#getVY()
+	 */
+	@Column(name = "vy")
+	private int vY = 0;
+	
+	/**
+	 * @see Client#getStreamPublishName()
+	 */
+	@Column(name = "stream_publish_name")
+	private String streamPublishName = "";
+	
+	/**
+	 * @see Client#getPublicSID()
+	 */
+	@Column(name = "public_sid")
+	private String publicSID = "";
+	
+	/**
+	 * @see Client#getIsMod()
+	 */
+	@Column(name = "is_mod")
+	private boolean isMod = false;
+	
+	/**
+	 * @see Client#getIsSuperModerator()
+	 */
+	@Column(name = "is_supermoderator")
+	private Boolean isSuperModerator = false;
+	
+	/**
+	 * @see Client#getCanDraw()
+	 */
+	@Column(name = "can_draw")
+	private Boolean canDraw = false;
+	
+	/**
+	 * @see Client#getCanShare()
+	 */
+	@Column(name = "can_share")
+	private Boolean canShare = false;
+	
+	/**
+	 * @see Client#getCanRemote()
+	 */
+	@Column(name = "can_remote")
+	private Boolean canRemote = false;
+	
+	/**
+	 * @see Client#getCanGiveAudio()
+	 */
+	@Column(name = "can_giveaudio")
+	private Boolean canGiveAudio = false;
+
+	@Column(name = "can_video")
+	private boolean canVideo = false;
+
+	/**
+	 * @see Client#getConnectedSince()
+	 */
+	@Column(name = "connected_since")
+	private Date connectedSince;
+	
+	/**
+	 * @see Client#getFormatedDate()
+	 */
+	@Column(name = "formated_date")
+	private String formatedDate;
+	
+	/**
+	 * @see Client#getIsScreenClient()
+	 */
+	@Column(name = "is_screenclient")
+	private boolean isScreenClient = false;
+	
+	/**
+	 * @see Client#getIsAVClient()
+	 */
+	@Column(name = "is_avclient")
+	private boolean isAVClient = false;
+	
+	/**
+	 * @see Client#getUsercolor()
+	 */
+	@Column(name = "usercolor")
+	private String usercolor;
+	
+	/**
+	 * @see Client#getUserpos()
+	 */
+	@Column(name = "userpos")
+	private Integer userpos;
+	
+	/**
+	 * @see Client#getUserip()
+	 */
+	@Column(name = "userip")
+	private String userip;
+	
+	/**
+	 * @see Client#getUserport()
+	 */
+	@Column(name = "userport")
+	private int userport;
+	
+	/**
+	 * @see Client#getRoom_id()
+	 */
+	@Column(name = "room_id")
+	private Long room_id;
+	
+	/**
+	 * @see Client#getRoomEnter()
+	 */
+	@Column(name = "room_enter")
+	private Date roomEnter = null;
+	
+	/**
+	 * @see Client#getBroadCastID()
+	 */
+	@Column(name = "broadcast_id")
+	private long broadCastID = -2;
+	
+	/**
+	 * @see Client#getUser_id()
+	 */
+	@Column(name = "user_id")
+	private Long user_id = null;
+	
+	/**
+	 * @see Client#getFirstname()
+	 */
+	@Column(name = "firstname")
+	private String firstname = "";
+	
+	/**
+	 * @see Client#getLastname()
+	 */
+	@Column(name = "lastname")
+	private String lastname = "";
+	
+	/**
+	 * @see Client#getMail()
+	 */
+	@Column(name = "email")
+	private String email;
+	
+	/**
+	 * @see Client#getLastLogin()
+	 */
+	@Column(name = "last_login")
+	private String lastLogin;
+	
+	/**
+	 * @see Client#getOfficial_code()
+	 */
+	@Column(name = "official_code")
+	private String official_code;
+	
+	/**
+	 * @see Client#getPicture_uri()
+	 */
+	@Column(name = "picture_uri")
+	private String picture_uri;
+	
+	/**
+	 * @see Client#getLanguage()
+	 */
+	@Column(name = "language")
+	private String language = "";
+	
+	/**
+	 * @see Client#getAvsettings()
+	 */
+	@Column(name = "avsettings")
+	private String avsettings = "";
+	
+	/**
+	 * @see Client#getSwfurl()
+	 */
+	// FIXME: Move to {@link ClientSession}
+	@Column(name = "swfurl", length=2048)
+	private String swfurl;
+	
+	/**
+	 * @see Client#getIsRecording()
+	 */
+	@Column(name = "is_recording")
+	private Boolean isRecording = false;
+	
+	/**
+	 * @see Client#getRoomRecordingName()
+	 */
+	@Column(name = "room_recording_name")
+	private String roomRecordingName;
+	
+	/**
+	 * @see Client#getFlvRecordingId()
+	 */
+	@Column(name = "flvrecording_id")
+	private Long flvRecordingId;
+	
+	/**
+	 * @see Client#getFlvRecordingMetaDataId()
+	 */
+	@Column(name = "flvrecordingmetadata_id")
+	private Long flvRecordingMetaDataId;
+	
+	/**
+	 * @see Client#getOrganization_id()
+	 */
+	@Column(name = "organization_id")
+	private Long organization_id;
+	
+	/**
+	 * @see Client#isStartRecording()
+	 */
+	@Column(name = "start_recording")
+	private boolean startRecording = false;
+	
+	/**
+	 * @see Client#isStartStreaming()
+	 */
+	@Column(name = "start_streaming")
+	private boolean startStreaming = false;
+	
+	/**
+	 * @see Client#isScreenPublishStarted()
+	 */
+	@Column(name = "screen_publish_started")
+	private boolean screenPublishStarted = false;
+	
+	/**
+	 * @see Client#isStreamPublishStarted()
+	 */
+	@Column(name = "stream_publish_started")
+	private boolean streamPublishStarted = false;
+	
+	/**
+	 * @see Client#getIsBroadcasting()
+	 */
+	@Column(name = "is_broadcasting")
+	private Boolean isBroadcasting = false;
+	
+	/**
+	 * @see Client#getExternalUserId()
+	 */
+	@Column(name = "external_user_id")
+	private String externalUserId;
+	
+	/**
+	 * @see Client#getExternalUserType()
+	 */
+	@Column(name = "external_user_type")
+	private String externalUserType;
+	
+	/**
+	 * @see Client#getInterviewPodId()
+	 */
+	@Column(name = "interview_pod_id")
+	private Integer interviewPodId = null;
+	
+	/**
+	 * @see Client#isAllowRecording()
+	 */
+	@Column(name = "allow_recording")
+	private boolean allowRecording = true;
+	
+	/**
+	 * @see Client#getZombieCheckFlag()
+	 */
+	@Column(name = "zombie_check_flag")
+	private Boolean zombieCheckFlag = false;
+	
+	/**
+	 * @see Client#getMicMuted()
+	 */
+	@Column(name = "mic_muted")
+	private Boolean micMuted = false;
+	
+	/**
+	 * @see Client#isSipTransport()
+	 */
+	@Column(name = "sip_transport")
+	private boolean sipTransport = false;
+	
+	@Column(name = "mobile")
+	private boolean mobile = false;
+
+	@ManyToOne(fetch = FetchType.LAZY)
+	@JoinColumn(name = "server_id")
+	private Server server;
+    
+	public Client() {}
+    
+	public Client(String streamid, String publicSID, Long room_id,
+			Long user_id, String firstname, String lastname, boolean isAVClient,
+			String username, String connectedSince, String scope) {
+		super();
+		this.streamid = streamid;
+		this.publicSID = publicSID;
+		this.room_id = room_id;
+		this.user_id = user_id;
+		this.firstname = firstname;
+		this.lastname = lastname;
+		this.isAVClient = isAVClient;
+		this.username = username;
+		this.connectedSince = CalendarPatterns.parseDateWithHour(connectedSince);
+		this.scope = scope;
+	}
+
+	public void setUserObject(Long user_id, String username, String firstname, String lastname) {
+		this.user_id = user_id;
+		this.username = username;
+		this.firstname = firstname;
+		this.lastname = lastname;
+	}
+
+	public void setUserObject(String username, String firstname, String lastname) {
+		this.username = username;
+		this.firstname = firstname;
+		this.lastname = lastname;
+	}
+	
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public Date getConnectedSince() {
+		return connectedSince;
+	}
+
+	public void setConnectedSince(Date connectedSince) {
+		this.connectedSince = connectedSince;
+	}
+
+	public boolean getIsMod() {
+		return isMod;
+	}
+
+	public void setIsMod(boolean isMod) {
+		this.isMod = isMod;
+	}
+	
+	public String getUsername() {
+		return username;
+	}
+
+	public void setUsername(String username) {
+		this.username = username;
+	}
+
+	public String getStreamid() {
+		return streamid;
+	}
+
+	public void setStreamid(String streamid) {
+		this.streamid = streamid;
+	}
+
+	public String getScope() {
+		return scope;
+	}
+
+	public void setScope(String scope) {
+		this.scope = scope;
+	}
+
+	public String getFormatedDate() {
+		return formatedDate;
+	}
+
+	public void setFormatedDate(String formatedDate) {
+		this.formatedDate = formatedDate;
+	}
+
+	public String getUsercolor() {
+		return usercolor;
+	}
+
+	public void setUsercolor(String usercolor) {
+		this.usercolor = usercolor;
+	}
+
+	public Integer getUserpos() {
+		return userpos;
+	}
+
+	public void setUserpos(Integer userpos) {
+		this.userpos = userpos;
+	}
+
+	public String getUserip() {
+		return userip;
+	}
+
+	public void setUserip(String userip) {
+		this.userip = userip;
+	}
+
+	public String getSwfurl() {
+		return swfurl;
+	}
+
+	public void setSwfurl(String swfurl) {
+		this.swfurl = swfurl;
+	}
+
+	public int getUserport() {
+		return userport;
+	}
+
+	public void setUserport(int userport) {
+		this.userport = userport;
+	}
+
+	public String getFirstname() {
+		return firstname;
+	}
+
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+
+	public String getLanguage() {
+		return language;
+	}
+
+	public void setLanguage(String language) {
+		this.language = language;
+	}
+
+	public String getLastLogin() {
+		return lastLogin;
+	}
+
+	public void setLastLogin(String lastLogin) {
+		this.lastLogin = lastLogin;
+	}
+
+	public String getLastname() {
+		return lastname;
+	}
+
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getOfficial_code() {
+		return official_code;
+	}
+
+	public void setOfficial_code(String official_code) {
+		this.official_code = official_code;
+	}
+
+	public String getPicture_uri() {
+		return picture_uri;
+	}
+
+	public void setPicture_uri(String picture_uri) {
+		this.picture_uri = picture_uri;
+	}
+
+	public Long getUser_id() {
+		return user_id;
+	}
+
+	public void setUser_id(Long user_id) {
+		this.user_id = user_id;
+	}
+
+	public Long getRoom_id() {
+		return room_id;
+	}
+
+	public void setRoom_id(Long room_id) {
+		this.room_id = room_id;
+	}
+
+	public Date getRoomEnter() {
+		return roomEnter;
+	}
+
+	public void setRoomEnter(Date roomEnter) {
+		this.roomEnter = roomEnter;
+	}
+
+	public Boolean getIsRecording() {
+		return isRecording;
+	}
+
+	public void setIsRecording(Boolean isRecording) {
+		this.isRecording = isRecording;
+	}
+
+	public String getRoomRecordingName() {
+		return roomRecordingName;
+	}
+
+	public void setRoomRecordingName(String roomRecordingName) {
+		this.roomRecordingName = roomRecordingName;
+	}
+
+	public String getAvsettings() {
+		return avsettings;
+	}
+
+	public void setAvsettings(String avsettings) {
+		this.avsettings = avsettings;
+	}
+
+	public long getBroadCastID() {
+		return broadCastID;
+	}
+
+	public void setBroadCastID(long broadCastID) {
+		this.broadCastID = broadCastID;
+	}
+
+	public String getPublicSID() {
+		return publicSID;
+	}
+	
+	public void setPublicSID(String publicSID) {
+		this.publicSID = publicSID;
+	}
+
+	public Boolean getZombieCheckFlag() {
+		return zombieCheckFlag;
+	}
+	
+	public void setZombieCheckFlag(Boolean zombieCheckFlag) {
+		this.zombieCheckFlag = zombieCheckFlag;
+	}
+
+	public Boolean getMicMuted() {
+		return micMuted;
+	}
+
+	public void setMicMuted(Boolean micMuted) {
+		this.micMuted = micMuted;
+	}
+
+	public Boolean getCanDraw() {
+		return canDraw;
+	}
+
+	public void setCanDraw(Boolean canDraw) {
+		this.canDraw = canDraw;
+	}
+
+	public Boolean getIsBroadcasting() {
+		return isBroadcasting;
+	}
+
+	public void setIsBroadcasting(Boolean isBroadcasting) {
+		this.isBroadcasting = isBroadcasting;
+	}
+
+	public Boolean getCanShare() {
+		return canShare;
+	}
+
+	public void setCanShare(Boolean canShare) {
+		this.canShare = canShare;
+	}
+
+	public String getExternalUserId() {
+		return externalUserId;
+	}
+
+	public void setExternalUserId(String externalUserId) {
+		this.externalUserId = externalUserId;
+	}
+
+	public String getExternalUserType() {
+		return externalUserType;
+	}
+
+	public void setExternalUserType(String externalUserType) {
+		this.externalUserType = externalUserType;
+	}
+
+	public Boolean getIsSuperModerator() {
+		return isSuperModerator;
+	}
+
+	public void setIsSuperModerator(Boolean isSuperModerator) {
+		this.isSuperModerator = isSuperModerator;
+	}
+
+	public boolean getIsScreenClient() {
+		return isScreenClient;
+	}
+
+	public void setIsScreenClient(boolean isScreenClient) {
+		this.isScreenClient = isScreenClient;
+	}
+
+	public int getVWidth() {
+		return vWidth;
+	}
+
+	public void setVWidth(int width) {
+		vWidth = width;
+	}
+
+	public int getVHeight() {
+		return vHeight;
+	}
+
+	public void setVHeight(int height) {
+		vHeight = height;
+	}
+
+	public int getVX() {
+		return vX;
+	}
+
+	public void setVX(int vx) {
+		vX = vx;
+	}
+
+	public int getVY() {
+		return vY;
+	}
+
+	public void setVY(int vy) {
+		vY = vy;
+	}
+
+	public String getStreamPublishName() {
+		return streamPublishName;
+	}
+
+	public void setStreamPublishName(String streamPublishName) {
+		this.streamPublishName = streamPublishName;
+	}
+
+	public Long getFlvRecordingId() {
+		return flvRecordingId;
+	}
+
+	public void setFlvRecordingId(Long flvRecordingId) {
+		this.flvRecordingId = flvRecordingId;
+	}
+
+	public Long getFlvRecordingMetaDataId() {
+		return flvRecordingMetaDataId;
+	}
+
+	public void setFlvRecordingMetaDataId(Long flvRecordingMetaDataId) {
+		this.flvRecordingMetaDataId = flvRecordingMetaDataId;
+	}
+
+	public boolean isScreenPublishStarted() {
+		return screenPublishStarted;
+	}
+
+	public void setScreenPublishStarted(boolean screenPublishStarted) {
+		this.screenPublishStarted = screenPublishStarted;
+	}
+
+	public Long getOrganization_id() {
+		return organization_id;
+	}
+
+	public void setOrganization_id(Long organization_id) {
+		this.organization_id = organization_id;
+	}
+
+	public boolean isStartRecording() {
+		return startRecording;
+	}
+
+	public void setStartRecording(boolean startRecording) {
+		this.startRecording = startRecording;
+	}
+
+	public boolean isStartStreaming() {
+		return startStreaming;
+	}
+
+	public void setStartStreaming(boolean startStreaming) {
+		this.startStreaming = startStreaming;
+	}
+
+	public Integer getInterviewPodId() {
+		return interviewPodId;
+	}
+
+	public void setInterviewPodId(Integer interviewPodId) {
+		this.interviewPodId = interviewPodId;
+	}
+
+	public Boolean getCanRemote() {
+		return canRemote;
+	}
+
+	public void setCanRemote(Boolean canRemote) {
+		this.canRemote = canRemote;
+	}
+
+	public Boolean getCanGiveAudio() {
+		return canGiveAudio;
+	}
+
+	public void setCanGiveAudio(Boolean canGiveAudio) {
+		this.canGiveAudio = canGiveAudio;
+	}
+
+	public boolean getCanVideo() {
+		return canVideo;
+	}
+
+	public void setCanVideo(boolean canVideo) {
+		this.canVideo = canVideo;
+	}
+
+	public boolean isAllowRecording() {
+		return allowRecording;
+	}
+
+	public void setAllowRecording(boolean allowRecording) {
+		this.allowRecording = allowRecording;
+	}
+
+	public boolean getIsAVClient() {
+		return isAVClient;
+	}
+
+	public void setIsAVClient(boolean isAVClient) {
+		this.isAVClient = isAVClient;
+	}
+
+	public boolean isStreamPublishStarted() {
+		return streamPublishStarted;
+	}
+
+	public void setStreamPublishStarted(boolean streamPublishStarted) {
+		this.streamPublishStarted = streamPublishStarted;
+	}
+
+	public boolean isSipTransport() {
+		return sipTransport;
+	}
+
+	public void setSipTransport(boolean sipTransport) {
+		this.sipTransport = sipTransport;
+	}
+	
+	public Server getServer() {
+		return server;
+	}
+
+	public void setServer(Server server) {
+		this.server = server;
+	}
+
+	public boolean isMobile() {
+		return mobile;
+	}
+
+	public void setMobile(boolean mobile) {
+		this.mobile = mobile;
+	}
+
+	@Override
+	public String toString() {
+		return "Client [streamid=" + streamid + ", publicSID=" + publicSID + ", isScreenClient=" + isScreenClient
+				+ ", isAVClient=" + isAVClient + ", isMobile = " + mobile + ", room_id=" + room_id + ", broadCastID=" + broadCastID + ", user_id="
+				+ user_id + ", avsettings=" + avsettings + ", isRecording=" + isRecording + ", flvRecordingId="
+				+ flvRecordingId + ", flvRecordingMetaDataId=" + flvRecordingMetaDataId + ", screenPublishStarted="
+				+ screenPublishStarted + ", interviewPodId=" + interviewPodId + ", server=" + server + "]";
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/Invitation.java b/src/db/java/org/apache/openmeetings/db/entity/room/Invitation.java
new file mode 100644
index 0000000..a514cc4
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/Invitation.java
@@ -0,0 +1,274 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.user.User;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getInvitationbyId", query = "SELECT i FROM Invitation i WHERE i.deleted = false AND i.id = :id"),
+	@NamedQuery(name = "getInvitationByHashCode", query = "SELECT i FROM Invitation i where i.hash LIKE :hashCode AND i.deleted = false"),
+	@NamedQuery(name = "getInvitationByAppointment", query = "SELECT i FROM Invitation i WHERE i.appointment.id = :appointmentId  ")
+})
+@Table(name = "invitations")
+public class Invitation implements Serializable {
+	private static final long serialVersionUID = 1153321347974705506L;
+
+	public enum Valid {
+		OneTime
+		, Period
+		, Endless;
+		
+		public static Valid fromInt(int valid) {
+			return valid == 1 ? Endless : (valid == 2 ? Period : OneTime);
+		}
+	}
+	
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long id;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "invited_by", nullable = true)
+	@ForeignKey(enabled = true)
+	private User invitedBy;
+	
+	@Column(name = "inserted")
+	private Date inserted;
+	
+	@Column(name = "updated")
+	private Date updated;
+	
+	@Column(name = "deleted")
+	private boolean deleted;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "room_id", nullable = true)
+	@ForeignKey(enabled = true)
+	private Room room;
+
+	// the hash for the link
+	@Column(name = "hash")
+	private String hash;
+	
+	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+	@JoinColumn(name = "invitee_id", nullable = true)
+	@ForeignKey(enabled = true)
+	private User invitee;
+
+	@Column(name = "password_protected")
+	private boolean passwordProtected;
+	
+	@Column(name = "password")
+	private String password;
+
+	// Invitations by Time are only valid between the validFrom validTo
+	// TimeStamp
+	@Column(name = "valid")
+	@Enumerated(EnumType.STRING)
+	private Valid valid = Valid.Period;
+	
+	@Column(name = "valid_from")
+	private Date validFrom;
+	
+	@Column(name = "valid_to")
+	private Date validTo;
+	
+	@Column(name = "was_used")
+	private boolean used;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "appointment_id", nullable = true)
+	@ForeignKey(enabled = true)
+	private Appointment appointment;
+
+	//variable used in Flash
+	@Transient
+	private boolean allowEntry = true;
+	
+	public Invitation() {}
+	
+	public Invitation(Invitation i) {
+		id = i.id;
+		invitedBy = i.invitedBy;
+		inserted = i.inserted;
+		updated = i.updated;
+		deleted = i.deleted;
+		room = i.room;
+		hash = i.hash;
+		invitee = i.invitee;
+		passwordProtected = i.passwordProtected;
+		password = i.password;
+		valid = i.valid;
+		validFrom = i.validFrom;
+		validTo = i.validTo;
+		used = i.used;
+		appointment = i.appointment;
+	}
+	
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Room getRoom() {
+		return room;
+	}
+
+	public void setRoom(Room room) {
+		this.room = room;
+	}
+
+	public User getInvitedBy() {
+		return invitedBy;
+	}
+
+	public void setInvitedBy(User invitedBy) {
+		this.invitedBy = invitedBy;
+	}
+
+	public Date getInserted() {
+		return inserted;
+	}
+
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public Date getUpdated() {
+		return updated;
+	}
+
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public String getHash() {
+		return hash;
+	}
+
+	public void setHash(String hash) {
+		this.hash = hash;
+	}
+
+	public User getInvitee() {
+		return invitee;
+	}
+
+	public void setInvitee(User invitee) {
+		this.invitee = invitee;
+	}
+
+	public boolean isPasswordProtected() {
+		return passwordProtected;
+	}
+
+	public void setPasswordProtected(boolean passwordProtected) {
+		this.passwordProtected = passwordProtected;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public Date getValidFrom() {
+		return validFrom;
+	}
+
+	public void setValidFrom(Date validFrom) {
+		this.validFrom = validFrom;
+	}
+
+	public Date getValidTo() {
+		return validTo;
+	}
+
+	public void setValidTo(Date validTo) {
+		this.validTo = validTo;
+	}
+
+	public boolean isUsed() {
+		return used;
+	}
+
+	public void setUsed(boolean used) {
+		this.used = used;
+	}
+
+	public Appointment getAppointment() {
+		return appointment;
+	}
+
+	public void setAppointment(Appointment appointment) {
+		this.appointment = appointment;
+	}
+
+	public Valid getValid() {
+		return valid;
+	}
+
+	public void setValid(Valid valid) {
+		this.valid = valid;
+	}
+	
+	public boolean isAllowEntry() {
+		return allowEntry;
+	}
+
+	public void setAllowEntry(boolean allowEntry) {
+		this.allowEntry = allowEntry;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/PollType.java b/src/db/java/org/apache/openmeetings/db/entity/room/PollType.java
new file mode 100644
index 0000000..b70b19e
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/PollType.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getPollTypes", query = "SELECT pt FROM PollType pt"),
+	@NamedQuery(name = "getPollType", query = "SELECT pt FROM PollType pt " +
+			"WHERE pt.pollTypesId = :pollTypesId")		
+})
+@Table(name = "poll_types")
+public class PollType implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long pollTypesId;
+	
+	@Column(name = "fieldvalues_id")
+	private Long label;
+	
+	@Column(name = "numeric_answer")
+	private boolean isNumericAnswer;
+	
+	/**
+	 * @return the pollTypesId
+	 */
+	public Long getPollTypesId() {
+		return pollTypesId;
+	}
+	/**
+	 * @param pollTypesId the pollTypesId to set
+	 */
+	public void setPollTypesId(Long pollTypesId) {
+		this.pollTypesId = pollTypesId;
+	}
+	/**
+	 * @return the isNumericAnswer
+	 */
+	public boolean getIsNumericAnswer() {
+		return isNumericAnswer;
+	}
+	/**
+	 * @param isNumericAnswer the isNumericAnswer to set
+	 */
+	public void setIsNumericAnswer(boolean isNumericAnswer) {
+		this.isNumericAnswer = isNumericAnswer;
+	}
+	/**
+	 * @return the pollTypeLabelid
+	 */
+	public Long getLabel() {
+		return label;
+	}
+	/**
+	 * @param pollTypeLabelid the pollTypeLabelid to set
+	 */
+	public void setLabel(Long label) {
+		this.label = label;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/Room.java b/src/db/java/org/apache/openmeetings/db/entity/room/Room.java
new file mode 100644
index 0000000..75568d0
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/Room.java
@@ -0,0 +1,588 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import org.apache.openjpa.persistence.ElementDependent;
+import org.apache.openjpa.persistence.FetchAttribute;
+import org.apache.openjpa.persistence.FetchGroup;
+import org.apache.openjpa.persistence.FetchGroups;
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.ElementList;
+import org.simpleframework.xml.Root;
+
+@Entity
+@FetchGroups({
+	@FetchGroup(name = "roomModerators", attributes = { @FetchAttribute(name = "moderators"), @FetchAttribute(name = "roomOrganisations") })
+})
+@NamedQueries({
+	@NamedQuery(name = "getNondeletedRooms", query = "SELECT r FROM Room r WHERE r.deleted = false"),
+	@NamedQuery(name = "getPublicRooms", query = "SELECT r from Room r WHERE r.ispublic = true and r.deleted = false and r.roomtype.roomtypes_id = :typeId"),
+	@NamedQuery(name = "getRoomByOwnerAndTypeId", query = "select c from Room as c "
+					+ "where c.ownerId = :ownerId "
+					+ "AND c.roomtype.roomtypes_id = :roomtypesId "
+					+ "AND c.deleted = false"),	
+										
+	@NamedQuery(name = "selectMaxFromRooms", query = "select count(c.rooms_id) from Room c "
+			+ "where c.deleted = false AND c.name LIKE :search "),
+	@NamedQuery(name = "getRoomByExternalId", query = "select c from Room as c JOIN c.roomtype as rt "
+			+ "where c.externalRoomId = :externalRoomId AND c.externalRoomType = :externalRoomType "
+			+ "AND rt.roomtypes_id = :roomtypes_id AND c.deleted = false"),
+	@NamedQuery(name = "getPublicRoomsOrdered", query = "SELECT r from Room r WHERE r.ispublic= true AND r.deleted= false AND r.appointment = false ORDER BY r.name ASC"),
+	@NamedQuery(name = "getRoomById", query = "SELECT r FROM Room r WHERE r.deleted = false AND r.rooms_id = :id"),
+	@NamedQuery(name = "getSipRoomIdsByIds", query = "SELECT r.rooms_id FROM Room r WHERE r.deleted = false AND r.sipEnabled = true AND r.rooms_id IN :ids"),
+	@NamedQuery(name = "countRooms", query = "SELECT COUNT(r) FROM Room r WHERE r.deleted = false"),
+	@NamedQuery(name = "getBackupRooms", query = "SELECT r FROM Room r ORDER BY r.rooms_id"),
+	@NamedQuery(name = "getRoomsCapacityByIds", query = "SELECT SUM(r.numberOfPartizipants) FROM Room r WHERE r.deleted = false AND r.rooms_id IN :ids")
+	, @NamedQuery(name = "getOrganisationRooms", query = "SELECT DISTINCT c.room FROM RoomOrganisation c LEFT JOIN FETCH c.room "
+				+ "WHERE c.organisation.organisation_id = :orgId AND c.deleted = false AND c.room.deleted = false AND c.room.appointment = false "
+				+ "AND c.organisation.deleted = false ORDER BY c.room.name ASC")
+})
+@Table(name = "room")
+@Root(name = "room")
+public class Room implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(data = true, required=false)
+	private Long rooms_id;
+
+	@Column(name = "name")
+	@Element(data = true, required=false)
+	private String name;
+
+	@Lob
+	@Column(name = "comment_field")
+	@Element(data = true, required = false)
+	private String comment;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "roomtypes_id")
+	@ForeignKey(enabled = true)
+	@Element(name = "roomtypeId", data = true, required = false)
+	private RoomType roomtype;
+
+	@Column(name = "starttime")
+	private Date starttime;
+
+	@Column(name = "updatetime")
+	private Date updatetime;
+
+	@Column(name = "deleted")
+	@Element(data = true)
+	private boolean deleted;
+
+	@Column(name = "ispublic")
+	@Element(name = "ispublic", data = true, required = false)
+	private boolean ispublic;
+
+	@Column(name = "numberOfPartizipants")
+	@Element(data = true, required = false)
+	private Long numberOfPartizipants = new Long(4);
+
+	@Column(name = "appointment")
+	@Element(data = true, required = false)
+	private boolean appointment;
+
+	// Vars to simulate external Room
+	@Column(name = "externalRoomId")
+	@Element(data = true, required = false)
+	private Long externalRoomId;
+
+	@Column(name = "externalRoomType")
+	@Element(data = true, required = false)
+	private String externalRoomType;
+
+	@Column(name = "isdemoroom")
+	@Element(data = true, required = false)
+	private Boolean isDemoRoom;
+
+	@Column(name = "demo_time")
+	@Element(data = true, required = false)
+	private Integer demoTime; // In Seconds
+
+	// If this is true all participants of a meeting have to wait for the
+	// moderator to come into the room
+	@Column(name = "ismoderatedroom")
+	@Element(name="isModeratedRoom", data = true, required = false)
+	private boolean isModeratedRoom;
+
+	@Column(name = "allow_user_questions")
+	@Element(data = true, required = false)
+	private Boolean allowUserQuestions;
+
+	@Column(name = "is_audio_only")
+	@Element(name = "isAudioOnly", data = true, required = false)
+	private Boolean isAudioOnly;
+	
+	@Column(name = "allow_font_styles", nullable = false)
+	@Element(data = true, required = false)
+	private boolean allowFontStyles = false;
+
+	@Column(name = "is_closed")
+	@Element(data = true, required = false)
+	private boolean isClosed;
+
+	@Column(name = "redirect_url")
+	@Element(data = true, required = false)
+	private String redirectURL;
+
+	@Column(name = "owner_id")
+	@Element(name = "ownerid", data = true, required = false)
+	private Long ownerId; // Those are the rooms from the myrooms section
+
+	@Column(name = "wait_for_recording")
+	@Element(data = true, required = false)
+	private Boolean waitForRecording; // Show warning that user has to start
+										// recording
+
+	@Column(name = "allow_recording")
+	@Element(name = "allowRecording", data = true, required = false)
+	private boolean allowRecording = true; // Show or show not the recording option in a conference room
+	/**
+	 * Layout of Room
+	 */
+	@Column(name = "hide_top_bar")
+	@Element(data = true, required = false)
+	private Boolean hideTopBar = false;
+
+	@Column(name = "hide_chat")
+	@Element(name = "hideChat", data = true, required = false)
+	private Boolean hideChat = false;
+
+	@Column(name = "hide_activities_and_actions")
+	@Element(name = "hideActivitiesAndActions", data = true, required = false)
+	private Boolean hideActivitiesAndActions = false;
+
+	@Column(name = "hide_files_explorer")
+	@Element(data = true, required = false)
+	private Boolean hideFilesExplorer = false;
+
+	@Column(name = "hide_actions_menu")
+	@Element(data = true, required = false)
+	private Boolean hideActionsMenu = false;
+
+	@Column(name = "hide_screen_sharing")
+	@Element(data = true, required = false)
+	private Boolean hideScreenSharing = false;
+
+	@Column(name = "hide_whiteboard")
+	@Element(data = true, required = false)
+	private Boolean hideWhiteboard = false;
+
+	@Column(name = "show_microphone_status")
+	@Element(data = true, required = false)
+	private Boolean showMicrophoneStatus = false;
+
+	@Column(name = "chat_moderated")
+	@Element(data = true, required = false)
+	private Boolean chatModerated = false;
+
+	@Column(name = "chat_opened")
+	@Element(data = true, required = false)
+	private boolean chatOpened = false;
+
+	@Column(name = "files_opened")
+	@Element(data = true, required = false)
+	private boolean filesOpened = false;
+
+	@Column(name = "auto_video_select")
+	@Element(data = true, required = false)
+	private boolean autoVideoSelect = false;
+
+	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+	@JoinColumn(name = "roomId")
+	@ForeignKey(enabled = true)
+	@ElementList(name = "room_moderators", required=false)
+	private List<RoomModerator> moderators = new ArrayList<RoomModerator>();
+
+	@Column(name = "sip_enabled")
+	@Element(data = true, required = false)
+	private boolean sipEnabled;
+	
+	@Column(name = "confno")
+	@Element(data = true, required = false)
+	private String confno;
+	
+	@Column(name = "pin")
+	@Element(data = true, required = false)
+	private String pin;
+	
+	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+	@JoinColumn(name = "rooms_id", insertable = true, updatable = true)
+	@ElementDependent
+	@org.simpleframework.xml.Transient
+	private List<RoomOrganisation> roomOrganisations = new ArrayList<RoomOrganisation>();
+
+	@Transient
+	private List<Client> currentusers;
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Long getRooms_id() {
+		return rooms_id;
+	}
+
+	public void setRooms_id(Long rooms_id) {
+		this.rooms_id = rooms_id;
+	}
+
+	public RoomType getRoomtype() {
+		return roomtype;
+	}
+
+	public void setRoomtype(RoomType roomtype) {
+		this.roomtype = roomtype;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Boolean getIspublic() {
+		return ispublic;
+	}
+
+	public void setIspublic(Boolean ispublic) {
+		this.ispublic = ispublic;
+	}
+
+	public List<Client> getCurrentusers() {
+		return currentusers;
+	}
+
+	public void setCurrentusers(List<Client> currentusers) {
+		this.currentusers = currentusers;
+	}
+
+	public Long getNumberOfPartizipants() {
+		return numberOfPartizipants;
+	}
+
+	public void setNumberOfPartizipants(Long numberOfPartizipants) {
+		this.numberOfPartizipants = numberOfPartizipants;
+	}
+
+	public Boolean getAppointment() {
+		return appointment;
+	}
+
+	public void setAppointment(Boolean appointment) {
+		this.appointment = appointment;
+	}
+
+	public Boolean getIsDemoRoom() {
+		return isDemoRoom;
+	}
+
+	public void setIsDemoRoom(Boolean isDemoRoom) {
+		this.isDemoRoom = isDemoRoom;
+	}
+
+	public Integer getDemoTime() {
+		return demoTime;
+	}
+
+	public void setDemoTime(Integer demoTime) {
+		this.demoTime = demoTime;
+	}
+
+	public Boolean getIsModeratedRoom() {
+		return isModeratedRoom;
+	}
+
+	public void setIsModeratedRoom(Boolean isModeratedRoom) {
+		this.isModeratedRoom = isModeratedRoom;
+	}
+
+	public Long getExternalRoomId() {
+		return externalRoomId;
+	}
+
+	public void setExternalRoomId(Long externalRoomId) {
+		this.externalRoomId = externalRoomId;
+	}
+
+	public String getExternalRoomType() {
+		return externalRoomType;
+	}
+
+	public void setExternalRoomType(String externalRoomType) {
+		this.externalRoomType = externalRoomType;
+	}
+
+	public Boolean getAllowUserQuestions() {
+		return allowUserQuestions;
+	}
+
+	public void setAllowUserQuestions(Boolean allowUserQuestions) {
+		this.allowUserQuestions = allowUserQuestions;
+	}
+
+	public Boolean getIsAudioOnly() {
+		return isAudioOnly;
+	}
+
+	public void setIsAudioOnly(Boolean isAudioOnly) {
+		this.isAudioOnly = isAudioOnly;
+	}
+
+	public boolean getAllowFontStyles() {
+		return allowFontStyles;
+	}
+
+	public void setAllowFontStyles(boolean allowFontStyles) {
+		this.allowFontStyles = allowFontStyles;
+	}
+
+	public boolean getIsClosed() {
+		return isClosed;
+	}
+
+	public void setIsClosed(boolean isClosed) {
+		this.isClosed = isClosed;
+	}
+
+	public String getRedirectURL() {
+		return redirectURL;
+	}
+
+	public void setRedirectURL(String redirectURL) {
+		this.redirectURL = redirectURL;
+	}
+
+	public Long getOwnerId() {
+		return ownerId;
+	}
+
+	public void setOwnerId(Long ownerId) {
+		this.ownerId = ownerId;
+	}
+
+	public Boolean getWaitForRecording() {
+		return waitForRecording;
+	}
+
+	public void setWaitForRecording(Boolean waitForRecording) {
+		this.waitForRecording = waitForRecording;
+	}
+
+	public boolean isAllowRecording() {
+		return allowRecording;
+	}
+
+	public void setAllowRecording(boolean allowRecording) {
+		this.allowRecording = allowRecording;
+	}
+
+	public Boolean getHideTopBar() {
+		return hideTopBar;
+	}
+
+	public void setHideTopBar(Boolean hideTopBar) {
+		this.hideTopBar = hideTopBar;
+	}
+
+	public Boolean getHideChat() {
+		return hideChat;
+	}
+
+	public void setHideChat(Boolean hideChat) {
+		this.hideChat = hideChat;
+	}
+
+	public Boolean getHideActivitiesAndActions() {
+		return hideActivitiesAndActions;
+	}
+
+	public void setHideActivitiesAndActions(Boolean hideActivitiesAndActions) {
+		this.hideActivitiesAndActions = hideActivitiesAndActions;
+	}
+
+	public Boolean getHideFilesExplorer() {
+		return hideFilesExplorer;
+	}
+
+	public void setHideFilesExplorer(Boolean hideFilesExplorer) {
+		this.hideFilesExplorer = hideFilesExplorer;
+	}
+
+	public Boolean getHideActionsMenu() {
+		return hideActionsMenu;
+	}
+
+	public void setHideActionsMenu(Boolean hideActionsMenu) {
+		this.hideActionsMenu = hideActionsMenu;
+	}
+
+	public Boolean getHideScreenSharing() {
+		return hideScreenSharing;
+	}
+
+	public void setHideScreenSharing(Boolean hideScreenSharing) {
+		this.hideScreenSharing = hideScreenSharing;
+	}
+
+	public Boolean getHideWhiteboard() {
+		return hideWhiteboard;
+	}
+
+	public void setHideWhiteboard(Boolean hideWhiteboard) {
+		this.hideWhiteboard = hideWhiteboard;
+	}
+
+	public Boolean getShowMicrophoneStatus() {
+		return showMicrophoneStatus;
+	}
+
+	public void setShowMicrophoneStatus(Boolean showMicrophoneStatus) {
+		this.showMicrophoneStatus = showMicrophoneStatus;
+	}
+
+	public List<RoomModerator> getModerators() {
+		return moderators;
+	}
+
+	public void setModerators(List<RoomModerator> moderators) {
+		if (moderators != null) {
+			this.moderators = moderators;
+		}
+	}
+
+	public Boolean getChatModerated() {
+		return chatModerated;
+	}
+
+	public void setChatModerated(Boolean chatModerated) {
+		this.chatModerated = chatModerated;
+	}
+
+	public List<RoomOrganisation> getRoomOrganisations() {
+		return roomOrganisations;
+	}
+
+	public void setRoomOrganisations(List<RoomOrganisation> roomOrganisations) {
+		this.roomOrganisations = roomOrganisations;
+	}
+
+	public boolean isChatOpened() {
+		return chatOpened;
+	}
+
+	public void setChatOpened(boolean chatOpened) {
+		this.chatOpened = chatOpened;
+	}
+
+	public boolean isFilesOpened() {
+		return filesOpened;
+	}
+
+	public void setFilesOpened(boolean filesOpened) {
+		this.filesOpened = filesOpened;
+	}
+
+	public boolean isAutoVideoSelect() {
+		return autoVideoSelect;
+	}
+
+	public void setAutoVideoSelect(boolean autoVideoSelect) {
+		this.autoVideoSelect = autoVideoSelect;
+	}
+
+	public boolean isSipEnabled() {
+		return sipEnabled;
+	}
+
+	public void setSipEnabled(boolean sipEnabled) {
+		this.sipEnabled = sipEnabled;
+	}
+
+	public String getConfno() {
+		return confno;
+	}
+
+	public void setConfno(String confno) {
+		this.confno = confno;
+	}
+
+	public String getPin() {
+		return pin;
+	}
+
+	public void setPin(String pin) {
+		this.pin = pin;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/RoomModerator.java b/src/db/java/org/apache/openmeetings/db/entity/room/RoomModerator.java
new file mode 100644
index 0000000..a5a7f8a
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/RoomModerator.java
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getRoomModeratorById", query = "select c from RoomModerator as c where c.roomModeratorsId = :roomModeratorsId"),
+	@NamedQuery(name = "getRoomModeratorsByIds", query = "select c from RoomModerator as c where c.roomModeratorsId IN :ids"),
+	@NamedQuery(name = "getRoomModeratorByRoomId", query = "select c from RoomModerator as c where c.roomId = :roomId AND c.deleted = false"),
+	@NamedQuery(name = "getRoomModeratorByUserAndRoomId", query = "select c from RoomModerator as c "
+			+ "where c.roomId = :roomId "
+			+ "AND c.deleted <> :deleted "
+			+ "AND c.user.user_id = :user_id")
+})
+@Table(name = "rooms_moderator")
+@Root(name = "room_moderator")
+public class RoomModerator implements Serializable {
+	private static final long serialVersionUID = 5407758673591515018L;
+	
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private long roomModeratorsId;
+	
+	@Column(name = "roomId")
+	private Long roomId;
+	
+	@Column(name="is_supermoderator")
+	@Element(name="is_supermoderator", data = true)
+	private Boolean isSuperModerator;
+	
+	@ManyToOne(fetch = FetchType.EAGER) 
+	@JoinColumn (name="user_id")
+	@ForeignKey(enabled = true)
+	@Element(name="user_id", data = true, required=false)
+	private User user;
+	
+	@Column(name = "starttime")
+	private Date starttime;
+	
+	@Column(name = "updatetime")
+	private Date updatetime;
+	
+	@Column(name = "deleted")
+	private boolean deleted;
+	
+	public long getRoomModeratorsId() {
+		return roomModeratorsId;
+	}
+	public void setRoomModeratorsId(long roomModeratorsId) {
+		this.roomModeratorsId = roomModeratorsId;
+	}
+	
+	public Boolean getIsSuperModerator() {
+		return isSuperModerator;
+	}
+	public void setIsSuperModerator(Boolean isSuperModerator) {
+		this.isSuperModerator = isSuperModerator;
+	}
+	
+	
+	public User getUser() {
+		return user;
+	}
+	public void setUser(User user) {
+		this.user = user;
+	}
+	
+	public Date getStarttime() {
+		return starttime;
+	}
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+	
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+	
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+	
+	public Long getRoomId() {
+		return roomId;
+	}
+	public void setRoomId(Long roomId) {
+		this.roomId = roomId;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/RoomOrganisation.java b/src/db/java/org/apache/openmeetings/db/entity/room/RoomOrganisation.java
new file mode 100644
index 0000000..6d9fe26
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/RoomOrganisation.java
@@ -0,0 +1,147 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getAllRoomsOrganisations", query = "select ro from RoomOrganisation ro ORDER BY ro.rooms_organisation_id"),
+	@NamedQuery(name = "getRoomsOrganisationByOrganisationIdAndRoomType", query = "select c from RoomOrganisation as c "
+			+ "where c.room.roomtypes_id = :roomtypes_id "
+			+ "AND c.organisation.organisation_id = :organisation_id "
+			+ "AND c.deleted <> :deleted"),
+	@NamedQuery(name = "getRoomsOrganisationByOrganisationId", query = "SELECT c FROM RoomOrganisation c "
+			+ "LEFT JOIN FETCH c.room "
+			+ "WHERE c.organisation.organisation_id = :organisation_id "
+			+ "AND c.deleted <> :deleted AND c.room.deleted <> :deleted AND c.room.appointment = false "
+			+ "AND c.organisation.deleted <> :deleted "
+			+ "ORDER BY c.room.name ASC"),
+	@NamedQuery(name = "selectMaxFromRoomsByOrganisation", query = "select c from Rooms_Organisation as c "
+			+ "where c.organisation.organisation_id = :organisation_id "
+			+ "AND c.deleted <> :deleted"),
+	@NamedQuery(name = "getRoomsOrganisationByOrganisationIdAndRoomId", query = "select c from RoomOrganisation as c "
+			+ "where c.room.rooms_id = :rooms_id "
+			+ "AND c.organisation.organisation_id = :organisation_id "
+			+ "AND c.deleted <> :deleted"),
+	@NamedQuery(name = "getRoomsOrganisationByRoomsId", query = "select c from RoomOrganisation as c "
+			+ "where c.room.rooms_id = :rooms_id "
+			+ "AND c.deleted <> :deleted")
+})
+@Table(name = "rooms_organisation")
+@Root(name="room_organisation")
+public class RoomOrganisation implements Serializable {
+	private static final long serialVersionUID = 4153935045968138984L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	@Element(data=true)
+	private Long rooms_organisation_id;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="rooms_id", nullable=true)
+	@ForeignKey(enabled = true)
+	@Element(name="rooms_id", data=true, required=false)
+	private Room room;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="organisation_id", nullable=true)
+	@ForeignKey(enabled = true)
+	@Element(name="organisation_id", data=true, required=false)
+	private Organisation organisation;
+	
+	@Column(name = "starttime")
+	private Date starttime;
+	
+	@Column(name = "updatetime")
+	private Date updatetime;
+	
+	@Column(name = "deleted")
+	@Element(data=true)
+	private boolean deleted;
+
+	public RoomOrganisation(Organisation org, Room room) {
+		this.organisation = org;
+		this.room = room;
+	}
+
+	public RoomOrganisation() {
+	}
+
+	public Organisation getOrganisation() {
+		return organisation;
+	}
+	public void setOrganisation(Organisation organisation) {
+		this.organisation = organisation;
+	}
+	
+	public Room getRoom() {
+		return room;
+	}
+	public void setRoom(Room room) {
+		this.room = room;
+	}
+
+	public Long getRooms_organisation_id() {
+		return rooms_organisation_id;
+	}
+	public void setRooms_organisation_id(Long rooms_organisation_id) {
+		this.rooms_organisation_id = rooms_organisation_id;
+	}
+    
+	public Date getStarttime() {
+		return starttime;
+	}
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+    
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}	
+	
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/RoomPoll.java b/src/db/java/org/apache/openmeetings/db/entity/room/RoomPoll.java
new file mode 100644
index 0000000..1214eea
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/RoomPoll.java
@@ -0,0 +1,233 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.ElementList;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "closePoll", query = "UPDATE RoomPoll rp SET rp.archived = :archived " +
+			"WHERE rp.room.rooms_id = :rooms_id"),
+	@NamedQuery(name = "deletePoll", query = "DELETE FROM RoomPoll rp WHERE rp.roomPollId = :roomPollId"),
+	@NamedQuery(name = "getPoll", query = "SELECT rp FROM RoomPoll rp " +
+			"WHERE rp.room.rooms_id = :room_id AND rp.archived = :archived"),
+	@NamedQuery(name = "getPollListBackup", query = "SELECT rp FROM RoomPoll rp ORDER BY rp.roomPollId"),
+	@NamedQuery(name = "getArchivedPollList", query = "SELECT rp FROM RoomPoll rp " +
+			"WHERE rp.room.rooms_id = :room_id AND rp.archived = :archived"),
+	@NamedQuery(name = "hasPoll", query = "SELECT COUNT(rp) FROM RoomPoll rp " +
+			"WHERE rp.room.rooms_id = :room_id AND rp.archived = :archived")
+})
+@Table(name = "room_polls")
+@Root(name="roompoll")
+public class RoomPoll implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long roomPollId;
+	
+	@Column(name = "poll_name")
+	@Element(name="pollname", data=true, required=false)
+	private String pollName;
+	
+	@Column(name = "poll_question")
+	@Element(name="pollquestion", data=true, required=false)
+	private String pollQuestion;
+	
+	@Column(name = "created")
+	@Element(data=true, required=false)
+	private Date created;
+	
+	@Column(name = "archived")
+	@Element(data=true, required=false)
+	private boolean archived;
+	
+	@OneToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "poll_type_id")
+	@ForeignKey(enabled = true)
+	@Element(name="polltypeid", data=true, required=false)
+	private PollType pollType;
+	
+	@OneToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "users_id")
+	@ForeignKey(enabled = true)
+	@Element(name="createdbyuserid", data=true, required=false)
+	private User createdBy;
+	
+	@OneToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "rooms_id")
+	@ForeignKey(enabled = true)
+	@Element(name="roomid", data=true, required=false)
+	private Room room;
+	
+	@OneToMany(fetch = FetchType.EAGER, cascade=CascadeType.ALL)
+	@JoinColumn(name = "room_poll_id")
+	@ElementList(name="roompollanswers", required=false)
+	private List<RoomPollAnswers> roomPollAnswerList;
+
+	/**
+	 * @return the createdBy
+	 */
+	public User getCreatedBy() {
+		return createdBy;
+	}
+
+	/**
+	 * @param createdBy
+	 *            the createdBy to set
+	 */
+	public void setCreatedBy(User createdBy) {
+		this.createdBy = createdBy;
+	}
+
+	/**
+	 * @return the created
+	 */
+	public Date getCreated() {
+		return created;
+	}
+
+	/**
+	 * @param created
+	 *            the created to set
+	 */
+	public void setCreated(Date created) {
+		this.created = created;
+	}
+
+	/**
+	 * @return the pollQuestion
+	 */
+	public String getPollQuestion() {
+		return pollQuestion;
+	}
+
+	/**
+	 * @param pollQuestion
+	 *            the pollQuestion to set
+	 */
+	public void setPollQuestion(String pollQuestion) {
+		this.pollQuestion = pollQuestion;
+	}
+
+	/**
+	 * @return the roomPollAnswerList
+	 */
+	public List<RoomPollAnswers> getRoomPollAnswerList() {
+		if (roomPollAnswerList == null) {
+			roomPollAnswerList = new LinkedList<RoomPollAnswers>();
+		}
+		return roomPollAnswerList;
+	}
+
+	/**
+	 * @param roomPollAnswerList
+	 *            the roomPollAnswerList to set
+	 */
+	public void setRoomPollAnswerList(List<RoomPollAnswers> roomPollAnswerList) {
+		this.roomPollAnswerList = roomPollAnswerList;
+	}
+
+	/**
+	 * @return the roomPollId
+	 */
+	public Long getRoomPollId() {
+		return roomPollId;
+	}
+
+	/**
+	 * @param roomPollId
+	 *            the roomPollId to set
+	 */
+	public void setRoomPollId(Long roomPollId) {
+		this.roomPollId = roomPollId;
+	}
+
+	/**
+	 * @return the pollTypeId
+	 */
+	public PollType getPollType() {
+		return pollType;
+	}
+
+	public void setPollType(PollType pollType) {
+		this.pollType = pollType;
+	}
+
+	public Room getRoom() {
+		return room;
+	}
+
+	public void setRoom(Room room) {
+		this.room = room;
+	}
+
+	/**
+	 * @return the archived
+	 */
+	public boolean isArchived() {
+		return archived;
+	}
+
+	/**
+	 * @param archived the archived to set
+	 */
+	public void setArchived(boolean archived) {
+		this.archived = archived;
+	}
+
+	/**
+	 * @return the pollName
+	 */
+	public String getPollName() {
+		return pollName;
+	}
+
+	/**
+	 * @param pollName the pollName to set
+	 */
+	public void setPollName(String pollName) {
+		this.pollName = pollName;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/RoomPollAnswers.java b/src/db/java/org/apache/openmeetings/db/entity/room/RoomPollAnswers.java
new file mode 100644
index 0000000..b5eea3e
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/RoomPollAnswers.java
@@ -0,0 +1,155 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "hasVoted", query = "SELECT rpa FROM RoomPollAnswers rpa "
+				+ "WHERE rpa.roomPoll.room.rooms_id = :room_id " +
+				"AND rpa.votedUser.user_id = :userid AND rpa.roomPoll.archived = :archived")
+})
+@Table(name = "room_poll_answers")
+@Root(name="roompollanswer")
+public class RoomPollAnswers implements Serializable {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long id;
+	
+	@OneToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "users_id")
+	@ForeignKey(enabled = true)
+	@Element(name="voteduserid", data=false, required=false)
+	private User votedUser;
+	
+	@Column(name = "answer")
+	@Element(data=false, required=false)
+	private Boolean answer;
+	
+	@Column(name = "pointList")
+	@Element(name="pointlist", data=false, required=false)
+	private Integer pointList;
+	
+	@Column(name = "voteDate")
+	@Element(name="votedate", data=false)
+	private Date voteDate;
+	
+	@OneToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "room_poll_id")
+	private RoomPoll roomPoll;
+	
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	/**
+	 * @return the answer
+	 */
+	public Boolean getAnswer() {
+		return answer;
+	}
+
+	/**
+	 * @param answer
+	 *            the answer to set
+	 */
+	public void setAnswer(Boolean answer) {
+		this.answer = answer;
+	}
+
+	/**
+	 * @return the pointList
+	 */
+	public Integer getPointList() {
+		return pointList;
+	}
+
+	/**
+	 * @param pointList
+	 *            the pointList to set
+	 */
+	public void setPointList(Integer pointList) {
+		this.pointList = pointList;
+	}
+
+	/**
+	 * @return the voteDate
+	 */
+	public Date getVoteDate() {
+		return voteDate;
+	}
+
+	/**
+	 * @param voteDate
+	 *            the voteDate to set
+	 */
+	public void setVoteDate(Date voteDate) {
+		this.voteDate = voteDate;
+	}
+
+	/**
+	 * @return the votedClient
+	 */
+	public User getVotedUser() {
+		return votedUser;
+	}
+
+	/**
+	 * @param votedClient
+	 *            the votedClient to set
+	 */
+	public void setVotedUser(User votedUser) {
+		this.votedUser = votedUser;
+	}
+
+	public RoomPoll getRoomPoll() {
+		return roomPoll;
+	}
+
+	public void setRoomPoll(RoomPoll roomPoll) {
+		this.roomPoll = roomPoll;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/RoomType.java b/src/db/java/org/apache/openmeetings/db/entity/room/RoomType.java
new file mode 100644
index 0000000..95e8278
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/RoomType.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.simpleframework.xml.Element;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getAllRoomTypes", query = "select c from RoomType as c where c.deleted <> :deleted"),
+	@NamedQuery(name = "getRoomTypesById", query = "select c from RoomType as c " +
+			"where c.roomtypes_id = :roomtypes_id AND c.deleted <> :deleted")
+})
+@Table(name = "roomtype")
+public class RoomType implements Serializable {
+	private static final long serialVersionUID = -4441029424324591356L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private Long roomtypes_id;
+	
+	@Column(name = "starttime")
+	private Date starttime;
+	
+	@Column(name = "updatetime")
+	private Date updatetime;
+	
+	@Column(name="name")
+	private String name;
+	
+	@Column(name = "deleted")
+	private boolean deleted;
+	
+	@Column(name="fieldvalues_id")
+	@Element(data=true, required=false)
+	private Long fieldvalues_id;
+	
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+    
+	public Long getRoomtypes_id() {
+		return roomtypes_id;
+	}
+	public void setRoomtypes_id(Long roomtypes_id) {
+		this.roomtypes_id = roomtypes_id;
+	}
+    
+	public Date getStarttime() {
+		return starttime;
+	}
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+    
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}	
+	
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Long getFieldvalues_id() {
+		return fieldvalues_id;
+	}
+	public void setFieldvalues_id(Long fieldvalues_id) {
+		this.fieldvalues_id = fieldvalues_id;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/Whiteboard.java b/src/db/java/org/apache/openmeetings/db/entity/room/Whiteboard.java
new file mode 100644
index 0000000..17a274d
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/Whiteboard.java
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import java.util.Calendar;
+import java.util.Collection;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ElementJoinColumn;
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+
+@Entity
+@Table(name = "whiteboard")
+public class Whiteboard {
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private long id;
+
+	@Column(name = "room_id")
+	private Integer roomId = 0;
+
+	@Column(name = "x")
+	private Integer x = 0;
+
+	@Column(name = "y")
+	private Integer y = 0;
+
+	@Column(name = "zoom")
+	private Integer zoom = 100;
+
+	@Column(name = "full_fit")
+	private Boolean fullFit;
+
+	@Column(name = "created")
+	private Calendar created;
+
+	@OneToMany
+	@ElementJoinColumn(name = "whiteboarditem_id", referencedColumnName = "id")
+	@ForeignKey(enabled = true)
+	private Collection<WhiteboardItem> roomItems;
+
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public Integer getX() {
+		return x;
+	}
+
+	public void setX(Integer x) {
+		this.x = x;
+	}
+
+	public Integer getY() {
+		return y;
+	}
+
+	public void setY(Integer y) {
+		this.y = y;
+	}
+
+	public Integer getZoom() {
+		return zoom;
+	}
+
+	public void setZoom(Integer zoom) {
+		this.zoom = zoom;
+	}
+
+	public Boolean getFullFit() {
+		return fullFit;
+	}
+
+	public void setFullFit(Boolean fullFit) {
+		this.fullFit = fullFit;
+	}
+
+	public Calendar getCreated() {
+		return created;
+	}
+
+	public void setCreated(Calendar created) {
+		this.created = created;
+	}
+
+	public Integer getRoomId() {
+		return roomId;
+	}
+
+	public void setRoomId(Integer roomId) {
+		this.roomId = roomId;
+	}
+
+	public Collection<WhiteboardItem> getRoomItems() {
+		return roomItems;
+	}
+
+	public void setRoomItems(Collection<WhiteboardItem> roomItems) {
+		this.roomItems = roomItems;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/room/WhiteboardItem.java b/src/db/java/org/apache/openmeetings/db/entity/room/WhiteboardItem.java
new file mode 100644
index 0000000..fd97ac7
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/room/WhiteboardItem.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.room;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "whiteboard_item")
+public class WhiteboardItem {
+	
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private long id;
+	
+	@Column(name = "keyx")
+	private String key;
+	
+	@Column(name = "value")
+	private String value;
+
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public String getKey() {
+		return key;
+	}
+
+	public void setKey(String key) {
+		this.key = key;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/server/LdapConfig.java b/src/db/java/org/apache/openmeetings/db/entity/server/LdapConfig.java
new file mode 100644
index 0000000..850aef8
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/server/LdapConfig.java
@@ -0,0 +1,185 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.server;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.db.entity.user.User;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name="getNondeletedLdapConfigs", query="SELECT u FROM LdapConfig u WHERE u.deleted = false")
+	, @NamedQuery(name="getActiveLdapConfigs", query="SELECT c FROM LdapConfig c WHERE c.deleted = false AND c.isActive = :isActive ORDER BY c.ldapConfigId")
+})
+@Table(name = "ldapconfig")
+@Root(name="ldapconfig")
+public class LdapConfig implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private long ldapConfigId = 0L;
+	
+	@Column(name="name")
+	@Element(data=true)
+	private String name;
+	
+	@Column(name="config_file_name")
+	@Element(data=true, required = false)
+	private String configFileName;
+	
+	@Column(name="add_domain_to_user_name")
+	@Element(data=true)
+	private boolean addDomainToUserName;
+	
+	@Column(name="domain")
+	@Element(data=true, required = false)
+	private String domain;
+	
+	@Column(name="is_active")
+	@Element(data=true)
+	private boolean isActive;
+	
+	@Column(name="inserted")
+	private Date inserted;
+	
+	@Column(name="updated")
+	private Date updated;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="insertedby_id", updatable=true, insertable=true)
+	@ForeignKey(enabled = true)
+	private User insertedby;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="updatedby_id", updatable=true, insertable=true)
+	@ForeignKey(enabled = true)
+	private User updatedby;
+	
+	@Column(name="deleted")
+	private boolean deleted;
+	
+	@Lob
+	@Column(name = "comment_field", length = 2048)
+	@Element(data = true, required = false)
+	private String comment;
+
+	public long getLdapConfigId() {
+		return ldapConfigId;
+	}
+	public void setLdapConfigId(long ldapConfigId) {
+		this.ldapConfigId = ldapConfigId;
+	}
+    
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+    
+	public String getConfigFileName() {
+		return configFileName;
+	}
+	public void setConfigFileName(String configFileName) {
+		this.configFileName = configFileName;
+	}
+    
+	public boolean getAddDomainToUserName() {
+		return addDomainToUserName;
+	}
+	public void setAddDomainToUserName(boolean addDomainToUserName) {
+		this.addDomainToUserName = addDomainToUserName;
+	}
+    
+	public String getDomain() {
+		return domain;
+	}
+	public void setDomain(String domain) {
+		this.domain = domain;
+	}
+    
+	public boolean getIsActive() {
+		return isActive;
+	}
+	public void setIsActive(boolean isActive) {
+		this.isActive = isActive;
+	}
+	
+	public Date getInserted() {
+		return inserted;
+	}
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+	
+	public Date getUpdated() {
+		return updated;
+	}
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+	
+	public User getInsertedby() {
+		return insertedby;
+	}
+	public void setInsertedby(User insertedby) {
+		this.insertedby = insertedby;
+	}
+	
+	public User getUpdatedby() {
+		return updatedby;
+	}
+	public void setUpdatedby(User updatedby) {
+		this.updatedby = updatedby;
+	}
+	
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/server/OAuthServer.java b/src/db/java/org/apache/openmeetings/db/entity/server/OAuthServer.java
new file mode 100644
index 0000000..b524a64
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/server/OAuthServer.java
@@ -0,0 +1,269 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.server;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@Table(name = "oauth_servers")
+@NamedQueries({
+		@NamedQuery(name = "getEnabledOAuthServers", query = "select s from OAuthServer as s where s.enabled = true and s.deleted = false"),
+		@NamedQuery(name = "getOAuthServerById", query = "select s from OAuthServer as s where s.id = :id"),
+		@NamedQuery(name = "getAllOAuthServers", query = "SELECT s FROM OAuthServer s WHERE s.deleted = false ORDER BY s.id"),
+		@NamedQuery(name = "countOAuthServers", query = "select count(s) from OAuthServer s WHERE s.deleted = false") })
+@Root
+public class OAuthServer implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(data = true)
+	private Long id;
+	
+	@Column(name = "name")
+	@Element(data = true)
+	private String name;
+	
+	@Column(name = "icon_url")
+	@Element(data = true)
+	private String iconUrl;
+	
+	@Column(name = "enabled")
+	@Element(data = true)
+	private boolean enabled;
+	
+	@Column(name = "client_id")
+	@Element(data = true)
+	private String clientId;
+	
+	@Column(name = "client_secret")
+	@Element(data = true)
+	private String clientSecret;
+	
+	@Column(name = "request_key_url")
+	@Element(data = true)
+	private String requestKeyUrl;
+	
+	@Column(name = "request_token_url")
+	@Element(data = true)
+	private String requestTokenUrl;
+	
+	@Column(name = "request_token_attributes")
+	@Element(data = true)
+	private String requestTokenAttributes;
+	
+	@Column(name = "request_method")
+	@Element(data = true)
+	@Enumerated(EnumType.STRING)
+	private RequestMethod requestTokenMethod = RequestMethod.POST;
+	
+	@Column(name = "request_info_url")
+	@Element(data = true)
+	private String requestInfoUrl;
+	
+	@Column(name = "login_param_name")
+	@Element(data = true)
+	private String loginParamName;
+	
+	@Column(name = "email_param_name")
+	@Element(data = true, required = false)
+	private String emailParamName;
+	
+	@Column(name = "firstname_param_name")
+	@Element(data = true, required = false)
+	private String firstnameParamName;
+	
+	@Column(name = "lastname_param_name")
+	@Element(data = true, required = false)
+	private String lastnameParamName;
+	
+	@Column(name = "deleted")
+	@Element(data = true)
+	private boolean deleted;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getIconUrl() {
+		return iconUrl;
+	}
+
+	public void setIconUrl(String iconUrl) {
+		this.iconUrl = iconUrl;
+	}
+
+	public boolean isEnabled() {
+		return enabled;
+	}
+
+	public void setEnabled(boolean enabled) {
+		this.enabled = enabled;
+	}
+
+	public String getClientId() {
+		return clientId;
+	}
+
+	public void setClientId(String clientId) {
+		this.clientId = clientId;
+	}
+
+	public String getClientSecret() {
+		return clientSecret;
+	}
+
+	public void setClientSecret(String clientSecret) {
+		this.clientSecret = clientSecret;
+	}
+
+	public String getRequestKeyUrl() {
+		return requestKeyUrl;
+	}
+
+	public void setRequestKeyUrl(String requestKeyUrl) {
+		this.requestKeyUrl = requestKeyUrl;
+	}
+
+	public String getRequestTokenUrl() {
+		return requestTokenUrl;
+	}
+
+	public void setRequestTokenUrl(String requestTokenUrl) {
+		this.requestTokenUrl = requestTokenUrl;
+	}
+
+	public String getRequestTokenAttributes() {
+		return requestTokenAttributes;
+	}
+
+	public void setRequestTokenAttributes(String requestTokenAttributes) {
+		this.requestTokenAttributes = requestTokenAttributes;
+	}
+
+	public RequestMethod getRequestTokenMethod() {
+		return requestTokenMethod;
+	}
+
+	public void setRequestTokenMethod(RequestMethod requestTokenMethod) {
+		this.requestTokenMethod = requestTokenMethod;
+	}
+
+	public String getRequestInfoUrl() {
+		return requestInfoUrl;
+	}
+
+	public void setRequestInfoUrl(String requestInfoUrl) {
+		this.requestInfoUrl = requestInfoUrl;
+	}
+
+	public String getLoginParamName() {
+		return loginParamName;
+	}
+
+	public void setLoginParamName(String loginParamName) {
+		this.loginParamName = loginParamName;
+	}
+
+	public String getEmailParamName() {
+		return emailParamName;
+	}
+
+	public void setEmailParamName(String emailParamName) {
+		this.emailParamName = emailParamName;
+	}
+
+	public String getFirstnameParamName() {
+		return firstnameParamName;
+	}
+
+	public void setFirstnameParamName(String firstnameParamName) {
+		this.firstnameParamName = firstnameParamName;
+	}
+
+	public String getLastnameParamName() {
+		return lastnameParamName;
+	}
+
+	public void setLastnameParamName(String lastnameParamName) {
+		this.lastnameParamName = lastnameParamName;
+	}
+
+	public boolean isDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	@Override
+	public String toString() {
+		return "OAuthServer [id=" + id + ", name=" + name + ", iconUrl=" + iconUrl + ", enabled=" + enabled
+				+ ", clientId=" + clientId + ", clientSecret=" + clientSecret + ", requestKeyUrl=" + requestKeyUrl
+				+ ", requestTokenUrl=" + requestTokenUrl + ", requestTokenAttributes=" + requestTokenAttributes
+				+ ", requestTokenMethod=" + requestTokenMethod + ", requestInfoUrl=" + requestInfoUrl
+				+ ", loginParamName=" + loginParamName + ", emailParamName=" + emailParamName + ", firstnameParamName="
+				+ firstnameParamName + ", lastnameParamName=" + lastnameParamName + ", deleted=" + deleted + "]";
+	}
+
+	public enum RequestMethod {
+		POST("post"), GET("get");
+
+		private String name;
+
+		private RequestMethod(String name) {
+			this.name = name;
+		}
+
+		@Override
+		public String toString() {
+			return name;
+		}
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/server/RemoteSessionObject.java b/src/db/java/org/apache/openmeetings/db/entity/server/RemoteSessionObject.java
new file mode 100644
index 0000000..1ab500c
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/server/RemoteSessionObject.java
@@ -0,0 +1,162 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.server;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+
+import org.red5.logging.Red5LoggerFactory;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+import org.simpleframework.xml.Serializer;
+import org.simpleframework.xml.core.Persister;
+import org.slf4j.Logger;
+
+/**
+ * This Class is marshaled as an XML-Object and stored as a String in the DB to make
+ * it more easy to extend it
+ * 
+ * @author sebastianwagner
+ *
+ */
+@Root
+public class RemoteSessionObject {
+	private static final Logger log = Red5LoggerFactory.getLogger(RemoteSessionObject.class, webAppRootKey);
+	@Element(required = false)
+	private String username;
+	@Element(required = false)
+	private String firstname;
+	@Element(required = false)
+	private String lastname;
+	@Element(required = false)
+	private String pictureUrl;
+	@Element(required = false)
+	private String email;
+	@Element
+	private String externalUserId;
+	@Element
+	private String externalUserType;
+	
+	public RemoteSessionObject() {
+	}
+	
+	public RemoteSessionObject(String username, String firstname, String lastname,
+			String pictureUrl, String email) {
+		this(username, firstname, lastname, pictureUrl, email, "0", "");
+	}
+	
+	
+	/**
+	 * @param username
+	 * @param firstname
+	 * @param lastname
+	 * @param pictureUrl
+	 * @param email
+	 * @param externalUserId
+	 * @param externalUserType
+	 *
+	 * 06.09.2009 17:05:48
+	 * sebastianwagner
+	 * 
+	 * 
+	 */
+	public RemoteSessionObject(String username, String firstname,
+			String lastname, String pictureUrl, String email,
+			String externalUserId, String externalUserType) {
+		super();
+		this.username = username;
+		this.firstname = firstname;
+		this.lastname = lastname;
+		this.pictureUrl = pictureUrl;
+		this.email = email;
+		this.externalUserId = externalUserId;
+		this.externalUserType = externalUserType;
+	}
+
+	public String getUsername() {
+		return username;
+	}
+	public void setUsername(String username) {
+		this.username = username;
+	}
+	public String getFirstname() {
+		return firstname;
+	}
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+	public String getLastname() {
+		return lastname;
+	}
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+	public String getPictureUrl() {
+		return pictureUrl;
+	}
+	public void setPictureUrl(String pictureUrl) {
+		this.pictureUrl = pictureUrl;
+	}
+	public String getEmail() {
+		return email;
+	}
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getExternalUserId() {
+		return externalUserId;
+	}
+	public void setExternalUserId(String externalUserId) {
+		this.externalUserId = externalUserId;
+	}
+
+	public String getExternalUserType() {
+		return externalUserType;
+	}
+	public void setExternalUserType(String externalUserType) {
+		this.externalUserType = externalUserType;
+	}
+
+	public String toXml() throws Exception {
+		StringWriter sw = new StringWriter();
+		Serializer serializer = new Persister();
+		serializer.write(this, sw);
+		return sw.toString();
+	}
+
+	public static RemoteSessionObject fromXml(String xml) {
+		Serializer serializer = new Persister();
+		try {
+			return serializer.read(RemoteSessionObject.class, new StringReader(xml));
+		} catch (Exception e) {
+			log.error("Unexpected error while restoring object from XML: " + xml, e);
+		}
+		return null;
+	}
+	
+	@Override
+	public String toString() {
+		return "RemoteSessionObject [username=" + username + ", firstname=" + firstname + ", lastname=" + lastname
+				+ ", pictureUrl=" + pictureUrl + ", email=" + email + ", externalUserId=" + externalUserId
+				+ ", externalUserType=" + externalUserType + "]";
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/server/SOAPLogin.java b/src/db/java/org/apache/openmeetings/db/entity/server/SOAPLogin.java
new file mode 100644
index 0000000..badff56
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/server/SOAPLogin.java
@@ -0,0 +1,187 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.server;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "soaplogin")
+public class SOAPLogin implements Serializable {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private long soapLoginId;
+	
+	@Column(name="hash")
+	private String hash;
+	
+	@Column(name="room_id")
+	private Long room_id;
+	
+	@Column(name="session_hash")
+	private String sessionHash;
+	
+	@Column(name="created")
+	private Date created;
+	
+	@Column(name="used")
+	private boolean used;
+	
+	@Column(name="use_date")
+	private Date useDate;
+	
+	@Column(name="becomemoderator")
+	private boolean becomemoderator;
+	
+	@Column(name="showaudiovideotest")
+	private boolean showAudioVideoTest;
+	
+	@Column(name="allow_same_url_multiple_times")
+	private boolean allowSameURLMultipleTimes;
+	
+	@Column(name="show_nick_name_dialog")
+	private boolean showNickNameDialog;
+	
+	@Column(name="client_url")
+	private String clientURL;
+	
+	@Column(name="room_recording_id")
+	private Long roomRecordingId;
+	
+	@Column(name="landing_zone")
+	private String landingZone;
+	
+	@Column(name="allow_recording")
+	private boolean allowRecording;
+	
+	public long getSoapLoginId() {
+		return soapLoginId;
+	}
+	public void setSoapLoginId(long soapLoginId) {
+		this.soapLoginId = soapLoginId;
+	}
+	
+	public String getHash() {
+		return hash;
+	}
+	public void setHash(String hash) {
+		this.hash = hash;
+	}
+	
+	public Long getRoom_id() {
+		return room_id;
+	}
+	public void setRoom_id(Long room_id) {
+		this.room_id = room_id;
+	}
+	
+	public String getSessionHash() {
+		return sessionHash;
+	}
+	public void setSessionHash(String sessionHash) {
+		this.sessionHash = sessionHash;
+	}
+	
+	public Date getCreated() {
+		return created;
+	}
+	public void setCreated(Date created) {
+		this.created = created;
+	}
+	
+	public boolean getUsed() {
+		return used;
+	}
+	public void setUsed(boolean used) {
+		this.used = used;
+	}
+	
+	public Date getUseDate() {
+		return useDate;
+	}
+	public void setUseDate(Date useDate) {
+		this.useDate = useDate;
+	}
+	
+	public boolean getBecomemoderator() {
+		return becomemoderator;
+	}
+	public void setBecomemoderator(boolean becomemoderator) {
+		this.becomemoderator = becomemoderator;
+	}
+	
+	public boolean getShowAudioVideoTest() {
+		return showAudioVideoTest;
+	}
+	public void setShowAudioVideoTest(boolean showAudioVideoTest) {
+		this.showAudioVideoTest = showAudioVideoTest;
+	}
+	
+	public boolean getAllowSameURLMultipleTimes() {
+		return allowSameURLMultipleTimes;
+	}
+	public void setAllowSameURLMultipleTimes(boolean allowSameURLMultipleTimes) {
+		this.allowSameURLMultipleTimes = allowSameURLMultipleTimes;
+	}
+
+	public boolean getShowNickNameDialog() {
+		return showNickNameDialog;
+	}
+	public void setShowNickNameDialog(boolean showNickNameDialog) {
+		this.showNickNameDialog = showNickNameDialog;
+	}
+	
+	public String getClientURL() {
+		return clientURL;
+	}
+	public void setClientURL(String clientURL) {
+		this.clientURL = clientURL;
+	}
+	
+	public Long getRoomRecordingId() {
+		return roomRecordingId;
+	}
+	public void setRoomRecordingId(Long roomRecordingId) {
+		this.roomRecordingId = roomRecordingId;
+	}
+	
+	public String getLandingZone() {
+		return landingZone;
+	}
+	public void setLandingZone(String landingZone) {
+		this.landingZone = landingZone;
+	}
+	
+	public boolean isAllowRecording() {
+		return allowRecording;
+	}
+	public void setAllowRecording(boolean allowRecording) {
+		this.allowRecording = allowRecording;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/server/Server.java b/src/db/java/org/apache/openmeetings/db/entity/server/Server.java
new file mode 100644
index 0000000..03a7402
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/server/Server.java
@@ -0,0 +1,302 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.db.entity.server;

+

+import java.io.Serializable;

+import java.util.Calendar;

+import java.util.Date;

+

+import javax.persistence.Column;

+import javax.persistence.Entity;

+import javax.persistence.FetchType;

+import javax.persistence.GeneratedValue;

+import javax.persistence.GenerationType;

+import javax.persistence.Id;

+import javax.persistence.JoinColumn;

+import javax.persistence.Lob;

+import javax.persistence.ManyToOne;

+import javax.persistence.NamedQueries;

+import javax.persistence.NamedQuery;

+import javax.persistence.Table;

+

+import org.apache.openjpa.persistence.jdbc.ForeignKey;

+import org.apache.openmeetings.db.entity.IDataProviderEntity;

+import org.apache.openmeetings.db.entity.user.User;

+import org.simpleframework.xml.Element;

+import org.simpleframework.xml.Root;

+

+@Entity

+@NamedQueries({

+		@NamedQuery(name = "getAllServers", query = "SELECT s FROM Server s WHERE s.deleted = false ORDER BY s.id"),

+		@NamedQuery(name = "getServerCount", query = "SELECT COUNT(s) FROM Server s WHERE s.deleted = false"),

+		@NamedQuery(name = "getServerById", query = "SELECT s FROM Server s LEFT JOIN FETCH s.insertedby LEFT JOIN FETCH s.updatedby WHERE s.deleted = false AND s.id = :id"),

+		@NamedQuery(name = "getServerByName", query = "SELECT s FROM Server s WHERE s.deleted = false AND s.name LIKE :name"),

+		@NamedQuery(name = "getServerByAddress", query = "SELECT s FROM Server s WHERE s.deleted = false AND s.address LIKE :address"),

+		@NamedQuery(name = "getServersWithNoUsers", query = "SELECT s FROM Server s WHERE s.deleted = false AND s.id NOT IN (SELECT u.server.id FROM User u where u.server.id IS NOT NULL)"),

+		@NamedQuery(name = "getServerWithMinimumUsers", query = "SELECT s.id, COUNT(u) AS cnt FROM User u JOIN u.server s WHERE s.deleted = false GROUP BY s.id ORDER BY cnt"),

+		@NamedQuery(name = "getActiveServers", query = "SELECT s FROM Server s WHERE s.deleted = false AND s.active = true") //

+})

+@Table(name = "server")

+@Root

+public class Server implements Serializable, IDataProviderEntity {

+

+	private static final long serialVersionUID = 1L;

+

+	@Id

+	@GeneratedValue(strategy = GenerationType.IDENTITY)

+	@Column(name = "id")

+	@Element(data = true)

+	private long id = 0;

+

+	@Column(name = "name")

+	@Element(data = true)

+	private String name;

+

+	@Column(name = "address")

+	@Element(data = true)

+	private String address;

+

+	@Column(name = "inserted")

+	public Date inserted;

+

+	@Column(name = "updated")

+	public Date updated;

+

+	@ManyToOne(fetch = FetchType.LAZY)

+	@JoinColumn(name = "insertedby_id", updatable = true, insertable = true)

+	@ForeignKey(enabled = true)

+	public User insertedby;

+

+	@ManyToOne(fetch = FetchType.LAZY)

+	@JoinColumn(name = "updatedby_id", updatable = true, insertable = true)

+	@ForeignKey(enabled = true)

+	public User updatedby;

+

+	@Lob

+	@Column(name = "comment_field", length = 2048)

+	@Element(data = true, required = false)

+	private String comment;

+

+	@Column(name = "last_ping", nullable = true)

+	@Element(data = true, required = false)

+	private Calendar lastPing;

+	

+	@Column(name = "port", nullable = true)

+	@Element(data = true, required = false)

+	private int port;

+

+	@Column(name = "protocol", nullable = true)

+	@Element(data = true, required = false)

+	private String protocol;

+

+	@Column(name = "webapp", nullable = true)

+	@Element(data = true, required = false)

+	private String webapp;

+

+	@Column(name = "login", nullable = true)

+	@Element(data = true, required = false)

+	private String user;

+

+	@Column(name = "pass", nullable = true)

+	@Element(data = true, required = false)

+	private String pass;

+

+	@Column(name = "active", nullable = true)

+	@Element(data = true, required = false)

+	private boolean active;

+	

+	@Column(name = "deleted", nullable = false)

+	@Element(data = true)

+	private boolean deleted = false;

+

+	public Long getId() {

+		return id;

+	}

+

+	public void setId(Long id) {

+		this.id = id;

+	}

+

+	public String getName() {

+		return name;

+	}

+

+	public void setName(String name) {

+		this.name = name;

+	}

+

+	public String getAddress() {

+		return address;

+	}

+

+	public void setAddress(String address) {

+		this.address = address;

+	}

+

+	public boolean isDeleted() {

+		return deleted;

+	}

+

+	public void setDeleted(boolean deleted) {

+		this.deleted = deleted;

+	}

+

+	public Date getInserted() {

+		return inserted;

+	}

+

+	public void setInserted(Date inserted) {

+		this.inserted = inserted;

+	}

+

+	public Date getUpdated() {

+		return updated;

+	}

+

+	public void setUpdated(Date updated) {

+		this.updated = updated;

+	}

+

+	public User getInsertedby() {

+		return insertedby;

+	}

+

+	public void setInsertedby(User insertedby) {

+		this.insertedby = insertedby;

+	}

+

+	public User getUpdatedby() {

+		return updatedby;

+	}

+

+	public void setUpdatedby(User updatedby) {

+		this.updatedby = updatedby;

+	}

+

+	public String getComment() {

+		return comment;

+	}

+

+	public void setComment(String comment) {

+		this.comment = comment;

+	}

+	

+	public Calendar getLastPing() {

+		return lastPing;

+	}

+

+	public void setLastPing(Calendar lastPing) {

+		this.lastPing = lastPing;

+	}

+

+	public int getPort() {

+		return port;

+	}

+

+	public void setPort(int port) {

+		this.port = port;

+	}

+

+	public String getProtocol() {

+		return protocol;

+	}

+

+	public void setProtocol(String protocol) {

+		this.protocol = protocol;

+	}

+

+	public String getWebapp() {

+		return webapp;

+	}

+

+	public void setWebapp(String webapp) {

+		this.webapp = webapp;

+	}

+

+	public String getUser() {

+		return user;

+	}

+

+	public void setUser(String user) {

+		this.user = user;

+	}

+

+	public String getPass() {

+		return pass;

+	}

+

+	public void setPass(String pass) {

+		this.pass = pass;

+	}

+

+	public void setId(long id) {

+		this.id = id;

+	}

+

+	public boolean isActive() {

+		return active;

+	}

+

+	public void setActive(boolean active) {

+		this.active = active;

+	}

+

+	@Override

+	public String toString() {

+		return "Server [id=" + id + ", name=" + name + ", address=" + address

+				+ ", port=" + port + ", user=" + user + ", pass=" + pass

+				+ ", protocol=" + protocol 

+				+ ", active=" + active + ", webapp=" + webapp + ", deleted="

+				+ deleted + "]";

+	}

+

+	@Override

+	public int hashCode() {

+		final int prime = 31;

+		int result = 1;

+		result = prime * result + ((address == null) ? 0 : address.hashCode());

+		result = prime * result + (int) (id ^ (id >>> 32));

+		return result;

+	}

+

+	@Override

+	public boolean equals(Object obj) {

+		if (this == obj) {

+			return true;

+		}

+		if (obj == null) {

+			return false;

+		}

+		if (getClass() != obj.getClass()) {

+			return false;

+		}

+		Server other = (Server) obj;

+		if (address == null) {

+			if (other.address != null) {

+				return false;

+			}

+		} else if (!address.equals(other.address)) {

+			return false;

+		}

+		if (id != other.id) {

+			return false;

+		}

+		return true;

+	}

+}

diff --git a/src/db/java/org/apache/openmeetings/db/entity/server/Sessiondata.java b/src/db/java/org/apache/openmeetings/db/entity/server/Sessiondata.java
new file mode 100644
index 0000000..f878e10
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/server/Sessiondata.java
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.server;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getSessionById", query = "select c from Sessiondata as c "
+					+ "where c.session_id LIKE :session_id"),
+	@NamedQuery(name = "getSessionToDelete", query = "Select c from Sessiondata c "
+					+ "WHERE c.refresh_time < :refresh_time " + "AND ( "
+					+ "c.storePermanent IS NULL " + "OR "
+					+ "c.storePermanent = false " + ")")
+})
+@Table(name = "sessiondata")
+public class Sessiondata implements Serializable {
+	private static final long serialVersionUID = 1928177917452866750L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	private Long id;
+	
+	@Column(name="user_id")
+	private Long user_id;
+	
+	@Column(name="session_id")
+	private String session_id;
+	
+	@Column(name="starttermin_time")
+	private Date starttermin_time;
+	
+	@Column(name="refresh_time")
+	private Date refresh_time;
+	
+	@Lob
+	@Column(name="sessionXml")
+	private String sessionXml;
+	
+	@Column(name="storePermanent")
+	private Boolean storePermanent;
+	
+	@Column(name="language_id")
+	private Long language_id;
+	
+	@Column(name="organization_id")
+	private Long organization_id;
+	
+	public Sessiondata() {
+		super();
+		// TODO Auto-generated constructor stub
+	}
+    
+    public Long getId() {
+        return id;
+    }
+    public void setId(Long id) {
+        this.id = id;
+    }
+    
+    public Date getRefresh_time() {
+        return refresh_time;
+    }
+    public void setRefresh_time(Date refresh_time) {
+        this.refresh_time = refresh_time;
+    }
+    
+    public String getSession_id() {
+        return session_id;
+    }
+    public void setSession_id(String session_id) {
+        this.session_id = session_id;
+    }
+    
+    public Date getStarttermin_time() {
+        return starttermin_time;
+    }
+    public void setStarttermin_time(Date starttermin_time) {
+        this.starttermin_time = starttermin_time;
+    }
+    
+    public Long getUser_id() {
+        return user_id;
+    }
+    public void setUser_id(Long user_id) {
+        this.user_id = user_id;
+    }
+
+	public String getSessionXml() {
+		return sessionXml;
+	}
+	public void setSessionXml(String sessionXml) {
+		this.sessionXml = sessionXml;
+	}
+
+	public Boolean getStorePermanent() {
+		return storePermanent;
+	}
+	public void setStorePermanent(Boolean storePermanent) {
+		this.storePermanent = storePermanent;
+	}
+
+	public Long getLanguage_id() {
+		return language_id;
+	}
+	public void setLanguage_id(Long language_id) {
+		this.language_id = language_id;
+	}
+
+	public Long getOrganization_id() {
+		return organization_id;
+	}
+	public void setOrganization_id(Long organization_id) {
+		this.organization_id = organization_id;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/Address.java b/src/db/java/org/apache/openmeetings/db/entity/user/Address.java
new file mode 100644
index 0000000..24b9f3a
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/Address.java
@@ -0,0 +1,207 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@Table(name = "address")
+@Root(name="address")
+public class Address implements Serializable {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long adresses_id;
+	
+	@Column(name = "additionalname")
+	@Element(data=true, required=false)
+	private String additionalname;
+	
+	@Lob
+	@Column(name = "comment_field", length=2048)
+	@Element(data=true, required=false)
+	private String comment;
+	
+	@Column(name = "fax")
+	@Element(data=true, required=false)
+	private String fax;
+	
+	@Column(name = "starttime")
+	@Element(data=true, required=false)
+	private Date starttime;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "state_id")
+	@Element(name="state_id", data=true, required=false)
+	private State states;
+	
+	@Column(name = "street")
+	@Element(data=true, required=false)
+	private String street;
+	
+	@Column(name = "town")
+	@Element(data=true, required=false)
+	private String town;
+	
+	@Column(name = "updatetime")
+	private Date updatetime;
+	
+	@Column(name = "zip")
+	@Element(data=true, required=false)
+	private String zip;
+	
+	@Column(name = "deleted")
+	private boolean deleted;
+
+	@Column(name = "email")
+	@Element(name="mail", data=true, required=false)
+	private String email;
+	
+	@Column(name = "phone")
+	@Element(data=true, required=false)
+	private String phone;
+
+	public String getAdditionalname() {
+		return additionalname;
+	}
+
+	public void setAdditionalname(String additionalname) {
+		this.additionalname = additionalname;
+	}
+
+	public Long getAdresses_id() {
+		return adresses_id;
+	}
+
+	public void setAdresses_id(Long adresses_id) {
+		this.adresses_id = adresses_id;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public String getFax() {
+		return fax;
+	}
+
+	public void setFax(String fax) {
+		this.fax = fax;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public State getStates() {
+		return states;
+	}
+
+	public void setStates(State states) {
+		this.states = states;
+	}
+
+	public String getStreet() {
+		return street;
+	}
+
+	public void setStreet(String street) {
+		this.street = street;
+	}
+
+	public String getTown() {
+		return town;
+	}
+
+	public void setTown(String town) {
+		this.town = town;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public String getZip() {
+		return zip;
+	}
+
+	public void setZip(String zip) {
+		this.zip = zip;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getPhone() {
+		return phone;
+	}
+
+	public void setPhone(String phone) {
+		this.phone = phone;
+	}
+
+	@Override
+	public String toString() {
+		return "Address [id=" + adresses_id + ", states=" + states
+				+ ", street=" + street + ", town=" + town + ", zip=" + zip
+				+ ", deleted=" + deleted + ", email=" + email + ", phone="
+				+ phone + "]";
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/AsteriskSipUser.java b/src/db/java/org/apache/openmeetings/db/entity/user/AsteriskSipUser.java
new file mode 100644
index 0000000..d03253a
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/AsteriskSipUser.java
@@ -0,0 +1,267 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.xml.bind.annotation.XmlType;
+
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@Table(name = "sipusers")
+@Root(name="asterisksipuser")
+public class AsteriskSipUser implements Serializable {
+	private static final long serialVersionUID = 1L;
+	
+	@XmlType(namespace="org.apache.openmeetings.user.asterisk")
+	public enum Type {
+		friend,
+		user,
+		peer
+	}
+
+	@Id
+	@Column(name = "id")
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Element(data = true)
+	private long id;
+
+	@Column(name = "type", nullable = false, length=6)
+	@Enumerated(EnumType.STRING)
+	@Element(data=true, required=false)
+	private Type type = Type.friend;
+	
+	@Column(name = "name", nullable = false, length=128)
+	@Element(data=true, required=false)
+	private String name = ""; //	Varchar 128
+	
+	@Column(name = "secret", length=128)
+	@Element(data=true, required = false)
+	private String secret; //	Varchar 128
+	
+	@Column(name = "context", length=128)
+	@Element(data=true, required = false)
+	private String context; //	Varchar 128
+	
+	@Column(name = "host", nullable = false, length=128)
+	@Element(data=true, required = false)
+	private String host = "dynamic"; //	Varchar 128
+	
+	@Column(name = "ipaddr", nullable = false, length=128)
+	@Element(data=true, required=false)
+	private String ipaddr = ""; //	Varchar 128
+	
+	@Column(name = "port", nullable = false, length=8)
+	@Element(data=true, required=false)
+	private Integer port = 0; //	mediumint(8)
+	
+	@Column(name = "regseconds", nullable = false)
+	@Element(data=true, required = false)
+	private Long regseconds = 0L; //	Bigint
+	
+	@Column(name = "defaultuser", nullable = true, length=128)
+	@Element(data=true, required = false)
+	private String defaultuser; //	Varchar 128
+	
+	@Column(name = "fullcontact", length=512)
+	@Element(data=true, required = false)
+	private String fullcontact;
+	
+	@Column(name = "regserver", nullable = true, length=128)
+	@Element(data=true, required = false)
+	private String regserver; //	Varchar 128
+	
+	@Column(name = "useragent", nullable = true, length=128)
+	@Element(data=true, required = false)
+	private String useragent; //	Varchar 128
+	
+	@Column(name = "lastms")
+	@Element(data=true, required = false)
+	private Integer lastms; //	Integer
+	
+	@Column(name = "md5secret")
+	@Element(data=true, required = false)
+	private String md5secret;
+
+	@Column(name = "nat", nullable=false)
+	@Element(data=true, required = false)
+	private String nat = "force_rport,comedia";
+	
+	@Column(name = "callbackextension", nullable=true, length=250)
+	@Element(data=true, required = false)
+	private String callbackextension;
+
+	@Column(name = "allow", nullable=false, length=100)
+	@Element(data=true, required = false)
+	private String allow = "ulaw;alaw;h264";
+
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public Type getType() {
+		return type;
+	}
+
+	public void setType(Type type) {
+		this.type = type;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getSecret() {
+		return secret;
+	}
+
+	public void setSecret(String secret) {
+		this.secret = secret;
+	}
+
+	public String getContext() {
+		return context;
+	}
+
+	public void setContext(String context) {
+		this.context = context;
+	}
+
+	public String getHost() {
+		return host;
+	}
+
+	public void setHost(String host) {
+		this.host = host;
+	}
+
+	public String getIpaddr() {
+		return ipaddr;
+	}
+
+	public void setIpaddr(String ipaddr) {
+		this.ipaddr = ipaddr;
+	}
+
+	public Integer getPort() {
+		return port;
+	}
+
+	public void setPort(Integer port) {
+		this.port = port;
+	}
+
+	public Long getRegseconds() {
+		return regseconds;
+	}
+
+	public void setRegseconds(Long regseconds) {
+		this.regseconds = regseconds;
+	}
+
+	public String getDefaultuser() {
+		return defaultuser;
+	}
+
+	public void setDefaultuser(String defaultuser) {
+		this.defaultuser = defaultuser;
+	}
+
+	public String getFullcontact() {
+		return fullcontact;
+	}
+
+	public void setFullcontact(String fullcontact) {
+		this.fullcontact = fullcontact;
+	}
+
+	public String getRegserver() {
+		return regserver;
+	}
+
+	public void setRegserver(String regserver) {
+		this.regserver = regserver;
+	}
+
+	public String getUseragent() {
+		return useragent;
+	}
+
+	public void setUseragent(String useragent) {
+		this.useragent = useragent;
+	}
+
+	public Integer getLastms() {
+		return lastms;
+	}
+
+	public void setLastms(Integer lastms) {
+		this.lastms = lastms;
+	}
+
+	public String getMd5secret() {
+		return md5secret;
+	}
+
+	public void setMd5secret(String md5secret) {
+		this.md5secret = md5secret;
+	}
+
+	public String getNat() {
+		return nat;
+	}
+
+	public void setNat(String nat) {
+		this.nat = nat;
+	}
+
+	public String getCallbackextension() {
+		return callbackextension;
+	}
+
+	public void setCallbackextension(String callbackextension) {
+		this.callbackextension = callbackextension;
+	}
+
+	public String getAllow() {
+		return allow;
+	}
+
+	public void setAllow(String allow) {
+		this.allow = allow;
+	}
+}
\ No newline at end of file
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/Organisation.java b/src/db/java/org/apache/openmeetings/db/entity/user/Organisation.java
new file mode 100644
index 0000000..9dace60
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/Organisation.java
@@ -0,0 +1,137 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name="getOrganisationById",
+		query="SELECT c FROM Organisation AS c WHERE c.organisation_id = :id AND c.deleted = false")
+	, @NamedQuery(name="getOrganisationByName",
+		query="SELECT o FROM Organisation AS o WHERE o.name = :name AND o.deleted = false")
+	, @NamedQuery(name="getAnyOrganisationById",
+		query="SELECT c FROM Organisation AS c WHERE c.organisation_id = :organisation_id")
+	, @NamedQuery(name="getOrganisationsByIds",
+		query="SELECT c FROM Organisation AS c WHERE c.organisation_id IN :ids")
+	, @NamedQuery(name="getOrganisationsByUserId",
+		query="SELECT ou.organisation FROM User u, IN(u.organisation_users) ou WHERE u.deleted = false AND u.user_id = :user_id")
+	, @NamedQuery(name="getNondeletedOrganisations", query="SELECT o FROM Organisation o WHERE o.deleted = false ORDER BY o.organisation_id")
+	, @NamedQuery(name="countOrganisations", query="SELECT COUNT(c) FROM Organisation AS c WHERE c.deleted = false")
+})
+@Table(name = "organisation")
+@Root(name="organisation")
+public class Organisation implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+	
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	@Element(data=true)
+	private Long organisation_id;
+	
+	@Column(name="name")
+	@Element(data = true, required = false)
+	private String name;
+	
+	@Column(name="insertedby")
+	private Long insertedby;
+	
+	@Column(name="updatedby")
+	private Long updatedby;
+	
+	@Column(name="starttime")
+	private Date starttime;
+	
+	@Column(name="updatetime")
+	private Date updatetime;
+	
+	@Column(name="deleted")
+	@Element(data = true, required = false)
+	private boolean deleted;
+	
+
+	public Long getInsertedby() {
+		return insertedby;
+	}
+	public void setInsertedby(Long insertedby) {
+		this.insertedby = insertedby;
+	}
+
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Long getOrganisation_id() {
+		return organisation_id;
+	}
+	public void setOrganisation_id(Long organisation_id) {
+		this.organisation_id = organisation_id;
+	}
+
+	public Long getUpdatedby() {
+		return updatedby;
+	}
+	public void setUpdatedby(Long updatedby) {
+		this.updatedby = updatedby;
+	}	
+	
+	public Date getStarttime() {
+		return starttime;
+	}
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+    
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+	
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+	@Override
+	public String toString() {
+		return "Organisation [id=" + organisation_id + ", name="
+				+ name + ", deleted=" + deleted + "]";
+	}	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/Organisation_Users.java b/src/db/java/org/apache/openmeetings/db/entity/user/Organisation_Users.java
new file mode 100644
index 0000000..6fc328f
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/Organisation_Users.java
@@ -0,0 +1,175 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name="deleteUsersFromOrganisation", query="DELETE FROM Organisation_Users c WHERE c.organisation.organisation_id = :id")
+	, @NamedQuery(name="countOrganisationUsers", query="SELECT COUNT(c) FROM Organisation_Users c WHERE c.organisation.organisation_id = :id")
+	, @NamedQuery(name="getOrganisationUsersById", query="SELECT c FROM Organisation_Users c WHERE c.organisation_users_id = :id")
+	, @NamedQuery(name="getOrganisationUsersByOrgId", query="SELECT c FROM Organisation_Users c WHERE c.organisation.organisation_id = :id")
+	, @NamedQuery(name="isUserInOrganization", query="SELECT c FROM Organisation_Users c WHERE c.organisation.organisation_id = :orgId AND c.user.user_id = :userId")
+})
+@Table(name = "organisation_users")
+@Root(name="user_organisation")
+public class Organisation_Users implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long organisation_users_id;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "organisation_id", insertable = true, updatable = true)
+	@ForeignKey(enabled = true)
+	@Element(name="organisation_id", required=false)
+	private Organisation organisation;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "user_id", insertable = true, updatable = true)
+	@ForeignKey(enabled = true)
+	private User user;
+	
+	@Column(name = "starttime")
+	private Date starttime;
+	
+	@Column(name = "updatetime")
+	private Date updatetime;
+	
+	@Column(name = "deleted")
+	@Element(data=true)
+	private boolean deleted;
+	
+	@Column(name = "is_moderator")
+	@Element(data = true, required = false)
+	private Boolean isModerator;
+	
+	public Organisation_Users(Organisation organisation) {
+		this.organisation = organisation;
+	}
+	
+	public Organisation getOrganisation() {
+		return organisation;
+	}
+
+	public void setOrganisation(Organisation organisation) {
+		this.organisation = organisation;
+	}
+
+	public Long getOrganisation_users_id() {
+		return organisation_users_id;
+	}
+
+	public void setOrganisation_users_id(Long organisation_users_id) {
+		this.organisation_users_id = organisation_users_id;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Boolean getIsModerator() {
+		return isModerator;
+	}
+
+	public void setIsModerator(Boolean isModerator) {
+		this.isModerator = isModerator;
+	}
+
+	public User getUser() {
+		return user;
+	}
+
+	public void setUser(User user) {
+		this.user = user;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + ((organisation_users_id == null) ? 0 : organisation_users_id.hashCode());
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		Organisation_Users other = (Organisation_Users) obj;
+		if (organisation_users_id == null) {
+			if (other.organisation_users_id != null)
+				return false;
+		} else if (!organisation_users_id.equals(other.organisation_users_id))
+			return false;
+		return true;
+	}
+
+	@Override
+	public String toString() {
+		return "Organisation_Users [id="
+				+ organisation_users_id + ", organisation=" + organisation
+				+ ", user=" + user + ", deleted=" + deleted + "]";
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/PrivateMessage.java b/src/db/java/org/apache/openmeetings/db/entity/user/PrivateMessage.java
new file mode 100644
index 0000000..89c5c3d
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/PrivateMessage.java
@@ -0,0 +1,274 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getPrivateMessages", query = "SELECT c FROM PrivateMessage c ORDER BY c.id"),
+	@NamedQuery(name = "getPrivateMessageById", query = "SELECT c FROM PrivateMessage c WHERE c.id = :id "),
+	@NamedQuery(name = "updatePrivateMessagesReadStatus", query = "UPDATE PrivateMessage c SET c.isRead = :isRead " +
+			"WHERE c.id IN (:ids) "),
+	@NamedQuery(name = "moveMailsToFolder", query = "UPDATE PrivateMessage c SET c.folderId = :folderId " +
+			"WHERE c.id IN (:ids) "),
+	@NamedQuery(name = "deletePrivateMessages", query = "DELETE FROM PrivateMessage c WHERE c.id IN (:ids) "),
+	@NamedQuery(name = "getPrivateMessagesByRoom", query = "SELECT c FROM PrivateMessage c WHERE c.room.rooms_id = :roomId ")
+})
+@Table(name = "private_message")
+@Root(name = "privatemessage")
+public class PrivateMessage implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+	public final static long INBOX_FOLDER_ID = 0;
+	public final static long SENT_FOLDER_ID = -1;
+	public final static long TRASH_FOLDER_ID = -2;
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(data = true, name = "privateMessageId")
+	private long id;
+
+	@Column(name = "subject")
+	@Element(data = true, required = false)
+	private String subject;
+
+	@Lob
+	@Column(name = "message")
+	@Element(data = true, required = false)
+	private String message;
+
+	@Column(name = "inserted")
+	@Element(data = true)
+	private Date inserted;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "from_id")
+	@ForeignKey(enabled = true)
+	@Element(data = true, required = false)
+	private User from;
+
+	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
+	@JoinColumn(name = "to_id")
+	@ForeignKey(enabled = true)
+	@Element(data = true, required = false)
+	private User to;
+
+	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
+	@JoinColumn(name = "owner_id")
+	@ForeignKey(enabled = true)
+	@Element(data = true, required = false)
+	private User owner;
+
+	@Column(name = "booked_room")
+	@Element(data = true)
+	private boolean bookedRoom;
+
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name = "rooms_id")
+	@ForeignKey(enabled = true)
+	@Element(data = true, required = false)
+	private Room room;
+
+	@Column(name = "is_read")
+	@Element(data = true)
+	private boolean isRead;
+
+	@Element(data = true)
+	private boolean isTrash;
+
+	@Column(name = "parent_message_id")
+	@Element(data = true, required = false)
+	private Long parentMessage;
+
+	@Column(name = "private_message_folder_id")
+	@Element(data = true, name = "privateMessageFolderId")
+	private Long folderId;
+
+	@Column(name = "is_contact_request")
+	@Element(data = true)
+	private boolean isContactRequest;
+
+	@Column(name = "user_contact_id")
+	@Element(data = true, required = false)
+	private Long userContactId;
+
+	public PrivateMessage() {
+	}
+	
+	public PrivateMessage(PrivateMessage copy) {
+		subject = copy.subject;
+		message = copy.message;
+		from = copy.from;
+		to = copy.to;
+		owner = copy.owner;
+		bookedRoom = copy.bookedRoom;
+		room = copy.room;
+		isRead = copy.isRead;
+		parentMessage = copy.parentMessage;
+		folderId = copy.folderId;
+		isContactRequest = copy.isContactRequest;
+		userContactId = copy.userContactId;
+	}
+	
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public String getSubject() {
+		return subject;
+	}
+
+	public void setSubject(String subject) {
+		this.subject = subject;
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+
+	public Date getInserted() {
+		return inserted;
+	}
+
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+
+	public User getFrom() {
+		return from;
+	}
+
+	public void setFrom(User from) {
+		this.from = from;
+	}
+
+	public User getTo() {
+		return to;
+	}
+
+	public void setTo(User to) {
+		this.to = to;
+	}
+
+	public User getOwner() {
+		return owner;
+	}
+
+	public void setOwner(User owner) {
+		this.owner = owner;
+	}
+
+	public boolean isBookedRoom() {
+		return bookedRoom;
+	}
+
+	public void setBookedRoom(boolean bookedRoom) {
+		this.bookedRoom = bookedRoom;
+	}
+
+	public Room getRoom() {
+		return room;
+	}
+
+	public void setRoom(Room room) {
+		this.room = room;
+	}
+
+	public Long getParentMessage() {
+		return parentMessage;
+	}
+
+	public void setParentMessage(Long parentMessage) {
+		this.parentMessage = parentMessage;
+	}
+
+	@Deprecated
+	public boolean getIsTrash() {
+		return TRASH_FOLDER_ID == folderId;
+	}
+
+	@Deprecated
+	public void setIsTrash(boolean isTrash) {
+		if (isTrash) {
+			folderId = TRASH_FOLDER_ID;
+		}
+	}
+
+	public Long getFolderId() {
+		return folderId;
+	}
+
+	public void setFolderId(Long folderId) {
+		this.folderId = folderId;
+	}
+
+	public Boolean getIsRead() {
+		return isRead;
+	}
+
+	public void setIsRead(Boolean isRead) {
+		this.isRead = isRead;
+	}
+
+	public Boolean getIsContactRequest() {
+		return isContactRequest;
+	}
+
+	public void setIsContactRequest(Boolean isContactRequest) {
+		this.isContactRequest = isContactRequest;
+	}
+
+	public Long getUserContactId() {
+		return userContactId;
+	}
+
+	public void setUserContactId(Long userContactId) {
+		this.userContactId = userContactId;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/PrivateMessageFolder.java b/src/db/java/org/apache/openmeetings/db/entity/user/PrivateMessageFolder.java
new file mode 100644
index 0000000..aa51e35
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/PrivateMessageFolder.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@Table(name = "private_messages_folder")
+@Root(name="privatemessagefolder")
+public class PrivateMessageFolder implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = 3689814412815025816L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	@Element(data=true)
+	private long privateMessageFolderId;
+	
+	@Column(name="folder_name")
+	@Element(data=true)
+	private String folderName;
+	
+	@Column(name="user_id")
+	@Element(data=true)
+	private Long userId;
+	
+	@Column(name="inserted")
+	private Date inserted;
+	
+	@Column(name="updated")
+	private Date updated;
+	
+	public long getPrivateMessageFolderId() {
+		return privateMessageFolderId;
+	}
+	public void setPrivateMessageFolderId(long privateMessageFolderId) {
+		this.privateMessageFolderId = privateMessageFolderId;
+	}
+	
+	public String getFolderName() {
+		return folderName;
+	}
+	public void setFolderName(String folderName) {
+		this.folderName = folderName;
+	}
+	
+	public Long getUserId() {
+		return userId;
+	}
+	public void setUserId(Long userId) {
+		this.userId = userId;
+	}
+	
+	public Date getInserted() {
+		return inserted;
+	}
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+	
+	public Date getUpdated() {
+		return updated;
+	}
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/Salutation.java b/src/db/java/org/apache/openmeetings/db/entity/user/Salutation.java
new file mode 100644
index 0000000..2af38c6
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/Salutation.java
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@Table(name = "salutation")
+@NamedQueries({
+	@NamedQuery(name = "getSalutationById", query = "SELECT s FROM Salutation AS s WHERE s.salutations_id = :id")
+	, @NamedQuery(name = "getSalutations", query = "SELECT s FROM Salutation AS s")
+})
+@Root
+public class Salutation implements Serializable {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	@Element(name="id", data=true)
+	private Long salutations_id;
+	
+	@Column(name="name")
+	@Element(data=true, required=false)
+	private String name;
+	
+	@Column(name="starttime")
+	private Date starttime;
+	
+	@Column(name="updatetime")
+	private Date updatetime;
+	
+	@Column(name="deleted")
+	@Element(data=true, required=false)
+	private boolean deleted;
+	
+	@Column(name="fieldvalues_id")
+	@Element(data=true, required=false)
+	private Long fieldvalues_id;
+	
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+    
+	public Long getSalutations_id() {
+		return salutations_id;
+	}
+	public void setSalutations_id(Long salutations_id) {
+		this.salutations_id = salutations_id;
+	}
+
+    
+	public Date getStarttime() {
+		return starttime;
+	}
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+    
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+	
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Long getFieldvalues_id() {
+		return fieldvalues_id;
+	}
+	public void setFieldvalues_id(Long fieldvalues_id) {
+		this.fieldvalues_id = fieldvalues_id;
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/State.java b/src/db/java/org/apache/openmeetings/db/entity/user/State.java
new file mode 100644
index 0000000..a6c6fec
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/State.java
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "getStateById", query = "select c from State as c " +
+			"where c.state_id = :state_id AND c.deleted <> :deleted"),
+	@NamedQuery(name = "getStates", query = "select c from State as c where c.deleted <> :deleted"),
+	@NamedQuery(name = "getStateByName", query = "select c from State as c " +
+			"where lower(c.name) LIKE :name AND c.deleted <> :deleted")
+})
+@Table(name = "state")
+public class State implements Serializable {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	private Long state_id;
+	
+	@Column(name = "name")
+	private String name;
+	
+	@Column(name = "starttime")
+	private Date starttime;
+	
+	@Column(name = "updatetime")
+	private Date updatetime;
+	
+	@Column(name = "deleted")
+	private boolean deleted;
+	
+	@Column(name = "shortName")
+	private String shortName;
+	
+	@Column(name = "code")
+	private int code;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public Long getState_id() {
+		return state_id;
+	}
+
+	public void setState_id(Long state_id) {
+		this.state_id = state_id;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public String getShortName() {
+		return shortName;
+	}
+
+	public void setShortName(String shortName) {
+		this.shortName = shortName;
+	}
+
+	public int getCode() {
+		return code;
+	}
+
+	public void setCode(int code) {
+		this.code = code;
+	}
+
+	@Override
+	public String toString() {
+		return "State [id=" + state_id + ", name=" + name + ", deleted="
+				+ deleted + ", shortName=" + shortName + ", code=" + code + "]";
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/User.java b/src/db/java/org/apache/openmeetings/db/entity/user/User.java
new file mode 100644
index 0000000..9a73f1c
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/User.java
@@ -0,0 +1,594 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import static org.apache.openmeetings.db.util.UserHelper.invalidPassword;
+
+import java.io.Serializable;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.persistence.Basic;
+import javax.persistence.CascadeType;
+import javax.persistence.CollectionTable;
+import javax.persistence.Column;
+import javax.persistence.ElementCollection;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.PrimaryKeyJoinColumn;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+import javax.xml.bind.annotation.XmlType;
+
+import org.apache.openjpa.persistence.ElementDependent;
+import org.apache.openjpa.persistence.FetchAttribute;
+import org.apache.openjpa.persistence.FetchGroup;
+import org.apache.openjpa.persistence.FetchGroups;
+import org.apache.openjpa.persistence.LoadFetchGroup;
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.util.crypt.MD5;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.ElementList;
+import org.simpleframework.xml.Root;
+
+/**
+ * Entity to store user data, password field is {@link FetchType#LAZY}, so that
+ * is why there is an extra udpate statement at this moment
+ * 
+ * @author sebawagner, solomax
+ * 
+ */
+@Entity
+@FetchGroups({
+	@FetchGroup(name = "backupexport", attributes = { @FetchAttribute(name = "password") })
+	, @FetchGroup(name = "orgUsers", attributes = { @FetchAttribute(name = "organisation_users")})
+})
+@NamedQueries({
+	@NamedQuery(name = "getUserById", query = "SELECT u FROM User u WHERE u.user_id = :id"),
+	@NamedQuery(name = "getUsersByIds", query = "select c from User c where c.user_id IN :ids"),
+	@NamedQuery(name = "getUserByLogin", query = "SELECT u FROM User u WHERE u.deleted = false AND u.type = :type AND u.login = :login AND ((:domainId = 0 AND u.domainId IS NULL) OR (:domainId > 0 AND u.domainId = :domainId))"),
+	@NamedQuery(name = "getUserByEmail", query = "SELECT u FROM User u WHERE u.deleted = false AND u.type = :type AND u.adresses.email = :email AND ((:domainId = 0 AND u.domainId IS NULL) OR (:domainId > 0 AND u.domainId = :domainId))"),
+	@NamedQuery(name = "getUserByHash",  query = "SELECT u FROM User u WHERE u.deleted = false AND u.type = :type AND u.resethash = :resethash"),
+	@NamedQuery(name = "getContactByEmailAndUser", query = "SELECT u FROM User u WHERE u.deleted = false AND u.adresses.email = :email AND u.type = :type AND u.ownerId = :ownerId"), 
+	@NamedQuery(name = "selectMaxFromUsersWithSearch", query = "select count(c.user_id) from User c "
+			+ "where c.deleted = false " + "AND ("
+			+ "lower(c.login) LIKE :search "
+			+ "OR lower(c.firstname) LIKE :search "
+			+ "OR lower(c.lastname) LIKE :search )"),
+	@NamedQuery(name = "getAllUsers", query = "SELECT u FROM User u ORDER BY u.user_id"),
+	@NamedQuery(name = "checkPassword", query = "select count(c.user_id) from User c "
+			+ "where c.deleted = false " //
+			+ "AND c.user_id = :userId " //
+			+ "AND c.password LIKE :password"), //
+	@NamedQuery(name = "updatePassword", query = "UPDATE User u SET u.password = :password WHERE u.user_id = :userId"), //
+	@NamedQuery(name = "getNondeletedUsers", query = "SELECT u FROM User u WHERE u.deleted = false"),
+	@NamedQuery(name = "countNondeletedUsers", query = "SELECT COUNT(u) FROM User u WHERE u.deleted = false"),
+	@NamedQuery(name = "getUsersByOrganisationId", query = "SELECT u FROM User u WHERE u.deleted = false AND u.organisation_users.organisation.organisation_id = :organisation_id"), 
+	@NamedQuery(name = "getExternalUser", query = "SELECT u FROM User u WHERE u.deleted = false AND u.externalUserId LIKE :externalId AND u.externalUserType LIKE :externalType"),
+	@NamedQuery(name = "getUserByLoginOrEmail", query = "SELECT u from User u WHERE u.deleted = false AND u.type = :type AND (u.login = :userOrEmail OR u.adresses.email = :userOrEmail)")
+})
+@Table(name = "om_user")
+@Root(name = "user")
+public class User implements Serializable, IDataProviderEntity {
+	private static final long serialVersionUID = 1L;
+	
+	@XmlType(namespace="org.apache.openmeetings.user.user.right")
+	public enum Right {
+		Admin			// access to Admin module
+		, Room			// enter the room
+		, Dashboard		// access the dashboard
+		, Login			// login to Om internal DB
+		, Soap			// use rest/soap calls
+	}
+	
+	@XmlType(namespace="org.apache.openmeetings.user.user.type")
+	public enum Type {
+		user
+		, ldap
+		, oauth
+		, external
+		, contact
+	}
+
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name = "id")
+	@Element(data = true, name = "user_id")
+	private Long user_id;
+
+	@Column(name = "age")
+	@Element(data = true, required = false)
+	private Date age;
+
+	@Column(name = "firstname")
+	@Element(data = true, required = false)
+	private String firstname;
+
+	@Column(name = "lastlogin")
+	private Date lastlogin;
+
+	@Column(name = "lastname")
+	@Element(data = true, required = false)
+	private String lastname;
+
+	@Column(name = "lasttrans")
+	@Element(data = true, required = false)
+	private Long lasttrans;
+
+	@Column(name = "login")
+	@Element(data = true, required = false)
+	private String login;
+
+	@Basic(fetch = FetchType.LAZY)
+	@Column(name = "password")
+	@LoadFetchGroup("backupexport")
+	@Element(name = "pass", data = true, required = false)
+	private String password;
+
+	@Column(name = "regdate")
+	@Element(data = true, required = false)
+	private Date regdate;
+
+	@Column(name = "salutations_id")
+	@Element(name = "title_id", data = true, required = false)
+	private Long salutations_id;
+
+	@Column(name = "starttime")
+	private Date starttime;
+
+	@Column(name = "updatetime")
+	private Date updatetime;
+
+	@Column(name = "pictureuri")
+	@Element(data = true, required = false)
+	private String pictureuri;
+
+	@Column(name = "deleted")
+	@Element(data = true, required = false)
+	private boolean deleted;
+
+	@Column(name = "language_id")
+	@Element(name = "language_id", data = true, required = false)
+	private Long language_id;
+
+	@Column(name = "resethash")
+	@Element(data = true, required = false)
+	private String resethash;
+
+	@Column(name = "activatehash")
+	@Element(data = true, required = false)
+	private String activatehash;
+
+	@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+	@JoinColumn(name = "adresses_id", insertable = true, updatable = true)
+	@ForeignKey(enabled = true)
+	@Element(name = "address", required = false)
+	private Address adresses;
+
+	@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+	@JoinColumn(name = "user_id", insertable = true, updatable = true)
+	@ElementList(name = "organisations", required = false)
+	@ElementDependent
+	private List<Organisation_Users> organisation_users = new ArrayList<Organisation_Users>();
+
+	@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+	@PrimaryKeyJoinColumn(name="sip_user_id", referencedColumnName="id")
+	@Element(name = "sipUser", required = false)
+	private AsteriskSipUser sipUser;
+
+	// Vars to simulate external Users
+	@Column(name = "externalUserId")
+	@Element(data = true, required = false)
+	private String externalUserId;
+
+	@Column(name = "externalUserType")
+	@Element(data = true, required = false)
+	private String externalUserType;
+
+	/**
+	 * java.util.TimeZone Id
+	 */
+	@Column(name = "time_zone_id")
+	@Element(data = true, required = false)
+	private String timeZoneId;
+
+	@Transient
+	private Sessiondata sessionData;
+
+	@Column(name = "forceTimeZoneCheck")
+	@Element(data = true, required = false)
+	private Boolean forceTimeZoneCheck;
+
+	@Column(name = "sendSMS")
+	@Element(data = false, required = false)
+	private boolean sendSMS;
+
+	@Column(name = "user_offers")
+	@Element(data = true, required = false)
+	private String userOffers;
+
+	@Column(name = "user_searchs")
+	@Element(data = true, required = false)
+	private String userSearchs;
+
+	@Column(name = "show_contact_data")
+	@Element(data = true, required = false)
+	private boolean showContactData;
+
+	@Column(name = "show_contact_data_to_contacts")
+	@Element(data = true, required = false)
+	private boolean showContactDataToContacts;
+
+	@Column(name = "type")
+	@Element(data = true, required = false)
+	@Enumerated(EnumType.STRING)
+	private Type type = Type.user;
+
+	@Column(name = "owner_id")
+	@Element(data = true, required = false)
+	private Long ownerId;
+	
+	@ElementCollection(fetch = FetchType.EAGER)
+	@Column(name = "om_right")
+	@CollectionTable(name = "om_user_right", joinColumns = @JoinColumn(name = "user_id"))
+	@Enumerated(EnumType.STRING)
+	@ElementList(name="rights", data = true, required = false)
+	private Set<Right> rights = new HashSet<User.Right>();
+	
+	@Column(name = "domain_id")
+	@Element(data = true, required = false)
+	private Long domainId; // LDAP config id for LDAP, OAuth server id for OAuth
+	
+	public Long getUser_id() {
+		return user_id;
+	}
+
+	public void setUser_id(Long user_id) {
+		this.user_id = user_id;
+	}
+
+	public Address getAdresses() {
+		return adresses;
+	}
+
+	public void setAdresses(Address adresses) {
+		this.adresses = adresses;
+	}
+
+	public Date getAge() {
+		return age;
+	}
+
+	public void setAge(Date age) {
+		this.age = age == null ? new Date() :age;
+	}
+
+	public String getFirstname() {
+		return firstname;
+	}
+
+	public void setFirstname(String firstname) {
+		this.firstname = firstname;
+	}
+
+	public Date getLastlogin() {
+		return lastlogin;
+	}
+
+	public void setLastlogin(Date lastlogin) {
+		this.lastlogin = lastlogin;
+	}
+
+	public String getLastname() {
+		return lastname;
+	}
+
+	public void setLastname(String lastname) {
+		this.lastname = lastname;
+	}
+
+	public Long getLasttrans() {
+		return lasttrans;
+	}
+
+	public void setLasttrans(Long lasttrans) {
+		this.lasttrans = lasttrans;
+	}
+
+	public String getLogin() {
+		return login;
+	}
+
+	public void setLogin(String login) {
+		this.login = login;
+	}
+
+	public void updatePassword(ConfigurationDao configDao, String pass) throws NoSuchAlgorithmException {
+		updatePassword(configDao, pass, false);
+	}
+	
+	public void updatePassword(ConfigurationDao configDao, String pass, boolean empty) throws NoSuchAlgorithmException {
+		if (!empty) {
+			if (invalidPassword(pass, configDao)) {
+				throw new RuntimeException("Password of invalid length is provided");
+			}
+		}
+		String sipEnabled = configDao.getConfValue("red5sip.enable", String.class, "no");
+        if("yes".equals(sipEnabled)) {
+        	if (getSipUser() == null) {
+        		setSipUser(new AsteriskSipUser());
+        	}
+        	AsteriskSipUser u = getSipUser();
+        	String defaultRoomContext = configDao.getConfValue("red5sip.exten_context", String.class, "rooms");
+        	u.setName(login);
+        	u.setDefaultuser(login);
+        	u.setMd5secret(MD5.do_checksum(login + ":asterisk:" + pass));
+        	u.setContext(defaultRoomContext);
+        	u.setHost("dynamic");
+        } else {
+        	setSipUser(null);
+        }
+		password = ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(pass);
+	}
+	
+	public String getPassword() {
+		return password;
+	}
+
+	@Deprecated //should not be used directly (for bean usage only)
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public Date getRegdate() {
+		return regdate;
+	}
+
+	public void setRegdate(Date regdate) {
+		this.regdate = regdate;
+	}
+
+	public Long getSalutations_id() {
+		return salutations_id;
+	}
+
+	public void setSalutations_id(Long salutations_id) {
+		this.salutations_id = salutations_id;
+	}
+
+	public Date getStarttime() {
+		return starttime;
+	}
+
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+
+	public boolean getDeleted() {
+		return deleted;
+	}
+
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public String getPictureuri() {
+		return pictureuri;
+	}
+
+	public void setPictureuri(String pictureuri) {
+		this.pictureuri = pictureuri;
+	}
+
+	public Long getLanguage_id() {
+		return language_id;
+	}
+
+	public void setLanguage_id(Long language_id) {
+		this.language_id = language_id;
+	}
+
+	public List<Organisation_Users> getOrganisation_users() {
+		if (organisation_users == null) {
+			organisation_users = new ArrayList<Organisation_Users>();
+		}
+		return organisation_users;
+	}
+
+	public void setOrganisation_users(List<Organisation_Users> organisation_users) {
+		if (organisation_users != null) {
+			this.organisation_users = organisation_users;
+		}
+	}
+
+	public String getResethash() {
+		return resethash;
+	}
+
+	public void setResethash(String resethash) {
+		this.resethash = resethash;
+	}
+
+	public String getActivatehash() {
+		return activatehash;
+	}
+
+	public void setActivatehash(String activatehash) {
+		this.activatehash = activatehash;
+	}
+
+	public String getExternalUserId() {
+		return externalUserId;
+	}
+
+	public void setExternalUserId(String externalUserId) {
+		this.externalUserId = externalUserId;
+	}
+
+	public String getExternalUserType() {
+		return externalUserType;
+	}
+
+	public void setExternalUserType(String externalUserType) {
+		this.externalUserType = externalUserType;
+	}
+
+	public Sessiondata getSessionData() {
+		return sessionData;
+	}
+
+	public void setSessionData(Sessiondata sessionData) {
+		this.sessionData = sessionData;
+	}
+
+	public AsteriskSipUser getSipUser() {
+		return sipUser;
+	}
+
+	public void setSipUser(AsteriskSipUser sipUser) {
+		this.sipUser = sipUser;
+	}
+
+	public String getTimeZoneId() {
+		return timeZoneId;
+	}
+	public void setTimeZoneId(String timeZoneId) {
+		this.timeZoneId = timeZoneId;
+	}
+
+	public Boolean getForceTimeZoneCheck() {
+		return forceTimeZoneCheck;
+	}
+
+	public void setForceTimeZoneCheck(Boolean forceTimeZoneCheck) {
+		this.forceTimeZoneCheck = forceTimeZoneCheck;
+	}
+
+	public boolean getSendSMS() {
+		return sendSMS;
+	}
+
+	public void setSendSMS(boolean sendSMS) {
+		this.sendSMS = sendSMS;
+	}
+
+	public String getUserOffers() {
+		return userOffers;
+	}
+
+	public void setUserOffers(String userOffers) {
+		this.userOffers = userOffers;
+	}
+
+	public String getUserSearchs() {
+		return userSearchs;
+	}
+
+	public void setUserSearchs(String userSearchs) {
+		this.userSearchs = userSearchs;
+	}
+
+	public boolean getShowContactData() {
+		return showContactData;
+	}
+
+	public void setShowContactData(boolean showContactData) {
+		this.showContactData = showContactData;
+	}
+
+	public boolean getShowContactDataToContacts() {
+		return showContactDataToContacts;
+	}
+
+	public void setShowContactDataToContacts(boolean showContactDataToContacts) {
+		this.showContactDataToContacts = showContactDataToContacts;
+	}
+
+	public String getPhoneForSMS() {
+		return getSendSMS() ? getAdresses().getPhone() : "";
+	}
+
+	public Type getType() {
+		return type;
+	}
+
+	public void setType(Type type) {
+		this.type = type;
+	}
+	
+	public Long getOwnerId(){
+		return ownerId;
+	}
+	
+	public void setOwnerId(Long ownerId){
+		this.ownerId = ownerId;
+	}
+
+	public Set<Right> getRights() {
+		return rights;
+	}
+
+	public void setRights(Set<Right> rights) {
+		this.rights = rights;
+	}
+
+	public Long getDomainId() {
+		return domainId;
+	}
+
+	public void setDomainId(Long domainId) {
+		this.domainId = domainId;
+	}
+
+	@Override
+	public String toString() {
+		return "User [id=" + user_id + ", firstname=" + firstname
+				+ ", lastname=" + lastname + ", login=" + login
+				+ ", pictureuri=" + pictureuri + ", deleted=" + deleted
+				+ ", language_id=" + language_id + ", adresses=" + adresses
+				+ ", externalId=" + externalUserId + ", externalType=" + externalUserType
+				+ ", type=" + type + "]";
+	}
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/UserContact.java b/src/db/java/org/apache/openmeetings/db/entity/user/UserContact.java
new file mode 100644
index 0000000..16f4687
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/UserContact.java
@@ -0,0 +1,168 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
+import javax.persistence.Table;
+
+import org.apache.openjpa.persistence.jdbc.ForeignKey;
+import org.simpleframework.xml.Element;
+import org.simpleframework.xml.Root;
+
+@Entity
+@NamedQueries({
+	@NamedQuery(name = "deleteUserContact", query = "delete from UserContact u where u.userContactId = :userContactDeleteId"),
+	@NamedQuery(name = "deleteAllUserContacts", query = "delete from UserContact u where u.owner.user_id = :ownerId"),
+	@NamedQuery(name = "getContactByUserOwner", query = "SELECT c FROM UserContact c WHERE c.contact.user_id = :userId AND c.owner.user_id = :ownerId AND c.contact.deleted = false"),
+	@NamedQuery(name = "getContactsByHash", query = "select c from UserContact c " +
+			"where c.hash like :hash "),
+	@NamedQuery(name = "getContactsByUserAndStatus", query = "select c from UserContact c " +
+			"where c.owner.user_id = :ownerId " +
+			"AND c.pending = :pending " +
+			"AND c.contact.deleted <> true"),
+	@NamedQuery(name = "getUserContactByShareCalendar", query = "select c from UserContact c "
+			+ "where c.contact.user_id = :userId "
+			+ "AND c.owner.user_id = :contactId "
+			+ "AND c.shareCalendar = :shareCalendar "
+			+ "AND c.contact.deleted <> true"),
+	@NamedQuery(name = "getContactsByShareCalendar", query = "select c from UserContact c " +
+			"where c.contact.user_id = :contactId " +
+			"AND c.shareCalendar = :shareCalendar " +
+			"AND c.contact.deleted <> true"),
+	@NamedQuery(name = "getContactRequestsByUserAndStatus", query = "select c from UserContact c " +
+			"where c.contact.user_id = :user_id " +
+			"AND c.pending = :pending " +
+			"AND c.contact.deleted <> true"),
+	@NamedQuery(name = "getContactsByUser", query = "SELECT c FROM UserContact c " +
+			"WHERE c.contact.user_id = :user_id " +
+			"AND c.contact.deleted <> true ORDER BY c.pending DESC"),
+	@NamedQuery(name = "countContactsByUser", query = "select COUNT(c) from UserContact c " +
+			"where c.contact.user_id = :user_id " +
+			"AND c.contact.deleted <> true"),
+	@NamedQuery(name = "getUserContactsById", query = "SELECT c FROM UserContact c WHERE c.userContactId = :userContactId"),
+	@NamedQuery(name = "getUserContacts", query = "SELECT c FROM UserContact c ORDER BY c.userContactId")
+})
+@Table(name = "user_contact")
+@Root(name="usercontact")
+public class UserContact implements Serializable {
+	private static final long serialVersionUID = 1L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+	@Element(data = true, name = "userContactId")
+	private long userContactId;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="user_id")
+	@Element(data=true, required=false)
+	private User contact;
+	
+	@ManyToOne(fetch = FetchType.EAGER)
+	@JoinColumn(name="owner_id")
+	@ForeignKey(enabled = true)
+	@Element(data=true, required=false)
+	private User owner;
+	
+	@Column(name="pending")
+	@Element(data=true)
+	private boolean pending;
+	
+	@Column(name="hash")
+	@Element(data=true, required = false)
+	private String hash;
+	
+	@Column(name="inserted")
+	private Date inserted;
+	
+	@Column(name="updated")
+	private Date updated;
+	
+	@Column(name="share_calendar")
+	@Element(data=true, required=false)
+	private boolean shareCalendar;
+	
+	public long getUserContactId() {
+		return userContactId;
+	}
+	public void setUserContactId(long userContactId) {
+		this.userContactId = userContactId;
+	}
+	
+	public User getContact() {
+		return contact;
+	}
+	public void setContact(User contact) {
+		this.contact = contact;
+	}
+	
+	public User getOwner() {
+		return owner;
+	}
+	public void setOwner(User owner) {
+		this.owner = owner;
+	}
+	
+	public boolean isPending() {
+		return pending;
+	}
+	public void setPending(boolean pending) {
+		this.pending = pending;
+	}
+	
+	public Date getInserted() {
+		return inserted;
+	}
+	public void setInserted(Date inserted) {
+		this.inserted = inserted;
+	}
+	
+	public Date getUpdated() {
+		return updated;
+	}
+	public void setUpdated(Date updated) {
+		this.updated = updated;
+	}
+	
+	public String getHash() {
+		return hash;
+	}
+	public void setHash(String hash) {
+		this.hash = hash;
+	}
+	
+	public boolean getShareCalendar() {
+		return shareCalendar;
+	}
+	public void setShareCalendar(boolean shareCalendar) {
+		this.shareCalendar = shareCalendar;
+	}
+	
+}
diff --git a/src/db/java/org/apache/openmeetings/db/entity/user/Userdata.java b/src/db/java/org/apache/openmeetings/db/entity/user/Userdata.java
new file mode 100644
index 0000000..4942482
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/entity/user/Userdata.java
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.entity.user;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "user_data")
+public class Userdata implements Serializable {
+	private static final long serialVersionUID = 8365799229794940172L;
+	@Id
+	@GeneratedValue(strategy = GenerationType.IDENTITY)
+	@Column(name="id")
+    private Long data_id;
+	
+	@Column(name="user_id")
+    private Long user_id;
+	
+	@Column(name="data_key")
+    private String data_key;
+	
+	@Column(name="data")
+    private String data;
+	
+	@Column(name = "starttime")
+	private Date starttime;
+	
+	@Column(name = "updatetime")
+	private Date updatetime;
+	
+	@Lob
+	@Column(name = "comment_field")
+    private String comment;
+	
+	@Column(name = "deleted")
+    private boolean deleted;
+
+	public String getComment() {
+		return comment;
+	}
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public String getData() {
+		return data;
+	}
+	public void setData(String data) {
+		this.data = data;
+	}
+
+	public String getData_key() {
+		return data_key;
+	}
+	public void setData_key(String data_key) {
+		this.data_key = data_key;
+	}
+    
+	public Long getData_id() {
+		return data_id;
+	}
+	public void setData_id(Long data_id) {
+		this.data_id = data_id;
+	}
+
+    
+	public Date getStarttime() {
+		return starttime;
+	}
+	public void setStarttime(Date starttime) {
+		this.starttime = starttime;
+	}
+    
+	public Date getUpdatetime() {
+		return updatetime;
+	}
+	public void setUpdatetime(Date updatetime) {
+		this.updatetime = updatetime;
+	}
+	
+	public boolean getDeleted() {
+		return deleted;
+	}
+	public void setDeleted(boolean deleted) {
+		this.deleted = deleted;
+	}
+
+	public Long getUser_id() {
+		return user_id;
+	}
+	public void setUser_id(Long user_id) {
+		this.user_id = user_id;
+	}
+
+
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/util/TimezoneUtil.java b/src/db/java/org/apache/openmeetings/db/util/TimezoneUtil.java
new file mode 100644
index 0000000..2e424be
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/util/TimezoneUtil.java
@@ -0,0 +1,199 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.util;
+
+import static org.apache.openmeetings.util.OmFileHelper.getLanguagesDir;
+import static org.apache.openmeetings.util.OmFileHelper.nameOfTimeZoneFile;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TimezoneUtil {
+	private static final Logger log = Red5LoggerFactory.getLogger(TimezoneUtil.class, webAppRootKey);
+	private static final Map<String, String> ICAL_TZ_MAP = new Hashtable<String, String>();
+
+	private static void initTimeZones() {
+		SAXReader reader = new SAXReader();
+		Document document;
+		try {
+			ICAL_TZ_MAP.clear();
+			document = reader.read(new File(getLanguagesDir(), nameOfTimeZoneFile));
+
+			Element root = document.getRootElement();
+
+			for (@SuppressWarnings("rawtypes")
+			Iterator it = root.elementIterator("timezone"); it.hasNext();) {
+				Element item = (Element) it.next();
+				String timeZoneName = item.attributeValue("name");
+				String iCal = item.attributeValue("iCal");
+				ICAL_TZ_MAP.put(timeZoneName, iCal);
+			}
+		} catch (DocumentException e) {
+			log.error("Unexpected error while reading old time zone list", e);
+		}
+	}
+
+	@Autowired
+	private ConfigurationDao configurationDao;
+
+	/**
+	 * Parameters: ID - the ID for a TimeZone, either an abbreviation such as "PST", a full name such as
+	 * "America/Los_Angeles", or a custom ID such as "GMT-8:00". Note that the support of abbreviations is for JDK 1.1.x
+	 * compatibility only and full names should be used.
+	 * 
+	 * Returns: the specified TimeZone, or the GMT zone if the given ID cannot be understood. <br/>
+	 * <br/>
+	 * TODO: Fall-back mechanism and maybe a log output if the given timeZoneId is not found in the list of available
+	 * TimeZones of the current java.util.TimeZone package of the Java SDK the the user is running <br/>
+	 * 
+	 * @param timeZoneId
+	 * @return
+	 */
+
+	public TimeZone getTimeZone(String timeZoneId) {
+
+		if (timeZoneId == null || timeZoneId.equals("")) {
+			return getDefaultTimeZone();
+		}
+
+		// see TODO in comments
+
+		return TimeZone.getTimeZone(timeZoneId);
+	}
+
+	/**
+	 * @return The current server configured time zone in the table configuration key: "default.timezone"
+	 */
+	public TimeZone getDefaultTimeZone() {
+
+		String defaultTzName = configurationDao.getConfValue("default.timezone", String.class, "Europe/Berlin");
+
+		TimeZone timeZoneByOmTimeZone = TimeZone.getTimeZone(defaultTzName);
+
+		if (timeZoneByOmTimeZone != null) {
+			return timeZoneByOmTimeZone;
+		}
+
+		// If everything fails take the servers default one
+		log.error("There is no correct time zone set in the configuration of OpenMeetings for the key default.timezone or key is missing in table, using default locale!");
+		return TimeZone.getDefault();
+
+	}
+
+	/**
+	 * Returns the timezone based on the user profile, if not return the timezone from the server
+	 * 
+	 * @param user
+	 * @return
+	 */
+	public TimeZone getTimeZone(User user) {
+
+		if (user != null && user.getTimeZoneId() != null) {
+
+			TimeZone timeZone = TimeZone.getTimeZone(user.getTimeZoneId());
+
+			if (timeZone != null) {
+				return timeZone;
+			}
+
+		}
+
+		// if user has not time zone get one from the server configuration
+		return getDefaultTimeZone();
+	}
+
+	/**
+	 * Return the timezone based on our internal jName
+	 * 
+	 * @param jName
+	 * @return
+	 */
+	public TimeZone getTimezoneByInternalJName(String jName) {
+		if (ICAL_TZ_MAP.isEmpty()) {
+			initTimeZones();
+		}
+		String omTimeZone = ICAL_TZ_MAP.get(jName);
+
+		if (omTimeZone == null) {
+			String err = String.format("There is not omTimeZone for this jName: '%s'", jName);
+			log.error(err);
+			throw new RuntimeException(err);
+		}
+		
+		TimeZone timeZone = TimeZone.getTimeZone(omTimeZone);
+
+		if (timeZone != null) {
+			return timeZone;
+		}
+		// if user has not time zone get one from the server configuration
+		return getDefaultTimeZone();
+	}
+
+	/**
+	 * We ignore the fact that a Date Object is always in UTC internally and treat it as if it contains only dd.mm.yyyy
+	 * HH:mm:ss. We need to do this cause we cannot trust the Date Object send from the client. We have the timeZone
+	 * information additional to the Date, so we use it to transform it now to a Calendar Object.
+	 * 
+	 * @param dateTime
+	 * @param timezone
+	 * @return
+	 */
+	public static Calendar getCalendarInTimezone(String dateTimeStr, TimeZone timezone) {
+
+		Date dateTime = CalendarPatterns.parseImportDate(dateTimeStr);
+
+		Calendar calOrig = Calendar.getInstance();
+		calOrig.setTime(dateTime);
+
+		Calendar cal = Calendar.getInstance(timezone);
+		cal.set(Calendar.YEAR, calOrig.get(Calendar.YEAR));
+		cal.set(Calendar.MONTH, calOrig.get(Calendar.MONTH));
+		cal.set(Calendar.DATE, calOrig.get(Calendar.DATE));
+		cal.set(Calendar.HOUR_OF_DAY, calOrig.get(Calendar.HOUR_OF_DAY));
+		cal.set(Calendar.MINUTE, calOrig.get(Calendar.MINUTE));
+		cal.set(Calendar.SECOND, calOrig.get(Calendar.SECOND));
+		cal.set(Calendar.MILLISECOND, 0);
+
+		return cal;
+	}
+
+	public static long _getOffset(TimeZone timezone) {
+		Calendar cal = Calendar.getInstance();
+		cal.setTimeZone(timezone);
+		return cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET);
+	}
+
+}
diff --git a/src/db/java/org/apache/openmeetings/db/util/UserHelper.java b/src/db/java/org/apache/openmeetings/db/util/UserHelper.java
new file mode 100644
index 0000000..9983b7f
--- /dev/null
+++ b/src/db/java/org/apache/openmeetings/db/util/UserHelper.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.db.util;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_LOGIN_MIN_LENGTH_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PASS_MIN_LENGTH_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_LOGIN_MINIMUM_LENGTH;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_PASSWORD_MINIMUM_LENGTH;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+
+public class UserHelper {
+	public static int getMinLoginLength(ConfigurationDao cfgDao) {
+		return cfgDao.getConfValue(CONFIG_LOGIN_MIN_LENGTH_KEY, Integer.class, "" + USER_LOGIN_MINIMUM_LENGTH);
+	}
+	
+	public static int getMinPasswdLength(ConfigurationDao cfgDao) {
+		return cfgDao.getConfValue(CONFIG_PASS_MIN_LENGTH_KEY, Integer.class, "" + USER_PASSWORD_MINIMUM_LENGTH);
+	}
+	
+	public static boolean invalidPassword(String pass, ConfigurationDao cfgDao) {
+		return (pass == null || pass.length() < getMinPasswdLength(cfgDao));
+	}
+}
diff --git a/src/doc/java/org/apache/openmeetings/doc/WebServiceDoclet.java b/src/doc/java/org/apache/openmeetings/doc/WebServiceDoclet.java
new file mode 100644
index 0000000..fc23e14
--- /dev/null
+++ b/src/doc/java/org/apache/openmeetings/doc/WebServiceDoclet.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.doc;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.Velocity;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.sun.javadoc.ClassDoc;
+import com.sun.javadoc.RootDoc;
+import com.sun.javadoc.Tag;
+import com.sun.tools.doclets.standard.Standard;
+
+public class WebServiceDoclet extends Standard {
+	private static final Logger log = Red5LoggerFactory.getLogger(WebServiceDoclet.class, webAppRootKey);
+	
+	static final String baseTemplatePath = "xdocs";
+	static final String basePath = "dist/red5/webapps/openmeetings/docs";
+	static final String templateName = "ApiMethodsTemplate.vm";
+	static final String templateNameIndex = "ApiClassesTemplate.vm";
+
+	public static boolean start(RootDoc root) {
+
+		try {
+			
+			Velocity.init();
+			out("Start WebServiceDoclet templateNameNew " + templateName);
+			
+			ArrayList<Map<String,String>> classesParsed = new ArrayList<Map<String,String>>(root.classes().length);
+			
+			// iterate over all classes.
+			ClassDoc[] classes = root.classes();
+			for (int i = 0; i < classes.length; i++) {
+				// iterate over all methods and print their names.
+				
+				VelocityContext vContext = new VelocityContext();
+				vContext.put("className", classes[i].name());
+				vContext.put("classComment", classes[i].commentText());
+				
+				String defaultOutputName = classes[i].name();
+				for (Tag tag : classes[i].tags()) {
+					if (tag.name().equals("@webservice")) {
+						defaultOutputName = tag.text();
+					}
+				}
+				
+				vContext.put("webServiceName", defaultOutputName);
+				
+				HashMap<String,String> classItem = new HashMap<String,String>();
+				classItem.put("name",defaultOutputName);
+				classItem.put("comment",classes[i].commentText());
+				classesParsed.add(classItem);
+				
+				vContext.put("methods", classes[i].methods());
+				
+				FileWriter strWriter = new FileWriter(basePath
+						+ File.separatorChar + defaultOutputName + ".html");
+
+				Velocity.mergeTemplate(baseTemplatePath + File.separatorChar
+						+ templateName, "UTF-8", vContext, strWriter);
+				
+				strWriter.flush();
+				strWriter.close();
+
+			}
+			
+			
+			VelocityContext vIndexContext = new VelocityContext();
+			vIndexContext.put("classes", classesParsed);
+			
+			FileWriter newFileIndexWriter = new FileWriter(basePath
+					+ File.separatorChar + "WebserviceIndex.html");
+
+			Velocity.mergeTemplate(baseTemplatePath + File.separatorChar
+					+ templateNameIndex, "UTF-8", vIndexContext, newFileIndexWriter);
+			
+			newFileIndexWriter.flush();
+			newFileIndexWriter.close();
+			
+
+		} catch (Exception err) {
+			log.error("[start]", err);
+		}
+
+		// No error processing done, simply return true.
+		return true;
+	}
+
+	private static void out(String msg) {
+		System.out.println(msg);
+	}
+
+}
diff --git a/src/install/java/org/apache/openmeetings/backup/AppointmentCategoryConverter.java b/src/install/java/org/apache/openmeetings/backup/AppointmentCategoryConverter.java
new file mode 100644
index 0000000..560b13f
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/AppointmentCategoryConverter.java
@@ -0,0 +1,46 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.backup;

+

+import org.apache.openmeetings.db.dao.calendar.AppointmentCategoryDao;

+import org.apache.openmeetings.db.entity.calendar.AppointmentCategory;

+import org.simpleframework.xml.stream.InputNode;

+import org.simpleframework.xml.stream.OutputNode;

+

+public class AppointmentCategoryConverter  extends OmConverter<AppointmentCategory> {

+	private AppointmentCategoryDao appointmentCategoryDaoImpl;

+	

+	public AppointmentCategoryConverter() {

+		//default constructor is for export

+	}

+	

+	public AppointmentCategoryConverter(AppointmentCategoryDao appointmentCategoryDaoImpl) {

+		this.appointmentCategoryDaoImpl = appointmentCategoryDaoImpl;

+	}

+	

+	public AppointmentCategory read(InputNode node) throws Exception {

+		return appointmentCategoryDaoImpl.get(getlongValue(node));

+	}

+

+	public void write(OutputNode node, AppointmentCategory value)

+			throws Exception {

+		node.setData(true);

+		node.setValue(value == null ? "0" : "" + value.getCategoryId());

+	}

+}

diff --git a/src/install/java/org/apache/openmeetings/backup/AppointmentConverter.java b/src/install/java/org/apache/openmeetings/backup/AppointmentConverter.java
new file mode 100644
index 0000000..947d769
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/AppointmentConverter.java
@@ -0,0 +1,53 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.backup;

+

+import java.util.Map;

+

+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;

+import org.apache.openmeetings.db.entity.calendar.Appointment;

+import org.simpleframework.xml.stream.InputNode;

+import org.simpleframework.xml.stream.OutputNode;

+

+public class AppointmentConverter extends OmConverter<Appointment> {

+	private AppointmentDao appointmentDao;

+	private Map<Long, Long> idMap;

+	

+	public AppointmentConverter() {

+		//default constructor is for export

+	}

+	

+	public AppointmentConverter(AppointmentDao appointmentDao, Map<Long, Long> idMap) {

+		this.appointmentDao = appointmentDao;

+		this.idMap = idMap;

+	}

+	

+	public Appointment read(InputNode node) throws Exception {

+		long oldId = getlongValue(node);

+		long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;

+		

+		Appointment a = appointmentDao.getAppointmentByIdBackup(newId);

+		return a == null ? new Appointment() : a;

+	}

+

+	public void write(OutputNode node, Appointment value) throws Exception {

+		node.setData(true);

+		node.setValue(value == null ? "0" : "" + value.getId());

+	}

+}
\ No newline at end of file
diff --git a/src/install/java/org/apache/openmeetings/backup/AppointmentReminderTypeConverter.java b/src/install/java/org/apache/openmeetings/backup/AppointmentReminderTypeConverter.java
new file mode 100644
index 0000000..62c7172
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/AppointmentReminderTypeConverter.java
@@ -0,0 +1,45 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.backup;

+

+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;

+import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps;

+import org.simpleframework.xml.stream.InputNode;

+import org.simpleframework.xml.stream.OutputNode;

+

+public class AppointmentReminderTypeConverter extends OmConverter<AppointmentReminderTyps> {

+	private AppointmentReminderTypDao appointmentReminderTypDaoImpl;

+	

+	public AppointmentReminderTypeConverter() {

+		//default constructor is for export

+	}

+	

+	public AppointmentReminderTypeConverter(AppointmentReminderTypDao appointmentReminderTypDaoImpl) {

+		this.appointmentReminderTypDaoImpl = appointmentReminderTypDaoImpl;

+	}

+	

+	public AppointmentReminderTyps read(InputNode node) throws Exception {

+		return appointmentReminderTypDaoImpl.get(getlongValue(node));

+	}

+

+	public void write(OutputNode node, AppointmentReminderTyps value) throws Exception {

+		node.setData(true);

+		node.setValue(value == null ? "0" : "" + value.getTypId());

+	}

+}
\ No newline at end of file
diff --git a/src/install/java/org/apache/openmeetings/backup/BackupExport.java b/src/install/java/org/apache/openmeetings/backup/BackupExport.java
new file mode 100644
index 0000000..863697b
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/BackupExport.java
@@ -0,0 +1,593 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.net.URI;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openmeetings.db.dao.basic.ChatDao;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.room.RoomOrganisationDao;
+import org.apache.openmeetings.db.dao.server.LdapConfigDao;
+import org.apache.openmeetings.db.dao.server.OAuth2Dao;
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.PrivateMessageFolderDao;
+import org.apache.openmeetings.db.dao.user.PrivateMessagesDao;
+import org.apache.openmeetings.db.dao.user.UserContactsDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.basic.ChatMessage;
+import org.apache.openmeetings.db.entity.basic.Configuration;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.AppointmentCategory;
+import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.room.PollType;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomPoll;
+import org.apache.openmeetings.db.entity.room.RoomType;
+import org.apache.openmeetings.db.entity.server.LdapConfig;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.PrivateMessage;
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.simpleframework.xml.Serializer;
+import org.simpleframework.xml.convert.Registry;
+import org.simpleframework.xml.convert.RegistryStrategy;
+import org.simpleframework.xml.core.Persister;
+import org.simpleframework.xml.strategy.Strategy;
+import org.simpleframework.xml.stream.Format;
+import org.simpleframework.xml.stream.NodeBuilder;
+import org.simpleframework.xml.stream.OutputNode;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * @author sebastianwagner
+ * 
+ */
+public class BackupExport {
+	private static final Logger log = Red5LoggerFactory.getLogger(BackupExport.class, webAppRootKey);
+	private static final String BACKUP_COMMENT = 
+			"###############################################\n"
+			+ "This File is auto-generated by the Backup Tool \n"
+			+ "you should use the BackupPanel to modify or change this file \n"
+			+ "see http://openmeetings.apache.org/Upgrade.html for Details \n"
+			+ "###############################################\n";
+
+	@Autowired
+	private AppointmentDao appointmentDao;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private FileExplorerItemDao fileExplorerItemDao;
+	@Autowired
+	private FlvRecordingDao flvRecordingDao;
+	@Autowired
+	private UserDao usersDao;
+	@Autowired
+	private MeetingMemberDao meetingMemberDao;
+	@Autowired
+	private LdapConfigDao ldapConfigDao;
+	@Autowired
+	private PrivateMessagesDao privateMessagesDao;
+	@Autowired
+	private PrivateMessageFolderDao privateMessageFolderDao;
+	@Autowired
+	private UserContactsDao userContactsDao;
+	@Autowired
+	private PollDao pollManager;
+	@Autowired
+	private ConfigurationDao configurationDao;
+	@Autowired
+	private ChatDao chatDao;
+	@Autowired
+	private OAuth2Dao auth2Dao;
+	@Autowired
+	private ServerDao serverDao;
+	@Autowired
+	private OrganisationDao organisationDao;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private RoomOrganisationDao roomOrganisationDao;
+
+	public void performExport(File filePath, File backup_dir, boolean includeFiles, ProgressHolder progressHolder) throws Exception {
+		if (!backup_dir.exists()) {
+			backup_dir.mkdirs();
+		}
+		Serializer simpleSerializer = new Persister();
+		
+		progressHolder.setProgress(0);
+		/*
+		 * ##################### Backup Organizations
+		 */
+		writeList(simpleSerializer, backup_dir, "organizations.xml",
+				"organisations", organisationDao.get(0, Integer.MAX_VALUE));
+		progressHolder.setProgress(5);
+		/*
+		 * ##################### Backup Users
+		 */
+		exportUsers(backup_dir, usersDao.getAllBackupUsers());
+		progressHolder.setProgress(10);
+
+		/*
+		 * ##################### Backup Room
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(User.class, UserConverter.class);
+			registry.bind(RoomType.class, RoomTypeConverter.class);
+			
+			writeList(serializer, backup_dir, "rooms.xml", "rooms", roomDao.get());
+			progressHolder.setProgress(15);
+		}
+
+		/*
+		 * ##################### Backup Room Organizations
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(Organisation.class, OrganisationConverter.class);
+			registry.bind(Room.class, RoomConverter.class);
+			
+			writeList(serializer, backup_dir, "rooms_organisation.xml",
+					"room_organisations", roomOrganisationDao.get());
+			progressHolder.setProgress(20);
+		}
+
+		/*
+		 * ##################### Backup Appointments
+		 */
+		{
+			List<Appointment> list = appointmentDao.getAppointments();
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(AppointmentCategory.class, AppointmentCategoryConverter.class);
+			registry.bind(User.class, UserConverter.class);
+			registry.bind(AppointmentReminderTyps.class, AppointmentReminderTypeConverter.class);
+			registry.bind(Room.class, RoomConverter.class);
+			if (list != null && list.size() > 0) {
+				registry.bind(list.get(0).getStart().getClass(), DateConverter.class);
+			}
+			
+			writeList(serializer, backup_dir, "appointements.xml", "appointments", list);
+			progressHolder.setProgress(25);
+		}
+
+		/*
+		 * ##################### Backup Meeting Members
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(User.class, UserConverter.class);
+			registry.bind(Appointment.class, AppointmentConverter.class);
+			
+			writeList(serializer, backup_dir, "meetingmembers.xml",
+					"meetingmembers", meetingMemberDao.getMeetingMembers());
+			progressHolder.setProgress(30);
+		}
+
+		/*
+		 * ##################### LDAP Configs
+		 */
+		List<LdapConfig> ldapList = ldapConfigDao.get();
+		if (!ldapList.isEmpty()) {
+			ldapList.remove(0);
+		}
+		writeList(simpleSerializer, backup_dir, "ldapconfigs.xml", "ldapconfigs", ldapList);
+		progressHolder.setProgress(35);
+
+		/*
+		 * ##################### Cluster servers
+		 */
+		writeList(simpleSerializer, backup_dir, "servers.xml", "servers", serverDao.get(0, Integer.MAX_VALUE));
+		progressHolder.setProgress(40);
+
+		/*
+		 * ##################### OAuth2 servers
+		 */
+		writeList(simpleSerializer, backup_dir, "oauth2servers.xml", "oauth2servers", auth2Dao.get(0, Integer.MAX_VALUE));
+		progressHolder.setProgress(45);
+
+		/*
+		 * ##################### Private Messages
+		 */
+		{
+			List<PrivateMessage> list = privateMessagesDao.get(0, Integer.MAX_VALUE);
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(User.class, UserConverter.class);
+			registry.bind(Room.class, RoomConverter.class);
+			if (list != null && list.size() > 0) {
+				registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
+			}
+			
+			writeList(serializer, backup_dir, "privateMessages.xml",
+					"privatemessages", list);
+			progressHolder.setProgress(50);
+		}
+
+		/*
+		 * ##################### Private Message Folders
+		 */
+		writeList(simpleSerializer, backup_dir, "privateMessageFolder.xml",
+				"privatemessagefolders", privateMessageFolderDao.get(0, Integer.MAX_VALUE));
+		progressHolder.setProgress(55);
+
+		/*
+		 * ##################### User Contacts
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(User.class, UserConverter.class);
+			
+			writeList(serializer, backup_dir, "userContacts.xml",
+					"usercontacts", userContactsDao.get());
+			progressHolder.setProgress(60);
+		}
+
+		/*
+		 * ##################### File-Explorer
+		 */
+		{
+			List<FileExplorerItem> list = fileExplorerItemDao.getFileExplorerItems();
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			if (list != null && list.size() > 0) {
+				registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
+			}
+			
+			writeList(serializer, backup_dir, "fileExplorerItems.xml",
+					"fileExplorerItems", list);
+			progressHolder.setProgress(65);
+		}
+
+		/*
+		 * ##################### Recordings
+		 */
+		{
+			List<FlvRecording> list = flvRecordingDao.getAllFlvRecordings();
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			if (list != null && list.size() > 0) {
+				registry.bind(list.get(0).getInserted().getClass(), DateConverter.class);
+			}
+			
+			writeList(serializer, backup_dir, "flvRecordings.xml",
+					"flvrecordings", list);
+			progressHolder.setProgress(70);
+		}
+
+		/*
+		 * ##################### Polls
+		 */
+		{
+			List<RoomPoll> list = pollManager.getPollListBackup();
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(User.class, UserConverter.class);
+			registry.bind(Room.class, RoomConverter.class);
+			registry.bind(PollType.class, PollTypeConverter.class);
+			if (list != null && list.size() > 0) {
+				registry.bind(list.get(0).getCreated().getClass(), DateConverter.class);
+			}
+			
+			writeList(serializer, backup_dir, "roompolls.xml", "roompolls", list);
+			progressHolder.setProgress(75);
+		}
+
+		/*
+		 * ##################### Config
+		 */
+		{
+			List<Configuration> list = configurationDao.getConfigurations(0, Integer.MAX_VALUE, "c.configuration_id", true);
+			Registry registry = new Registry();
+			registry.bind(State.class, StateConverter.class);
+			registry.bind(User.class, UserConverter.class);
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			if (list != null && list.size() > 0) {
+				registry.bind(list.get(0).getStarttime().getClass(), DateConverter.class);
+			}
+			
+			writeList(serializer, backup_dir, "configs.xml", "configs", list);
+			progressHolder.setProgress(80);
+		}
+		
+		/*
+		 * ##################### Chat
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(User.class, UserConverter.class);
+			registry.bind(Room.class, RoomConverter.class);
+			List<ChatMessage> list = chatDao.get(0, Integer.MAX_VALUE);
+			if (list != null && list.size() > 0) {
+				registry.bind(list.get(0).getSent().getClass(), DateConverter.class);
+			}
+			
+			writeList(serializer, backup_dir, "chat_messages.xml", "chat_messages", list);
+			progressHolder.setProgress(85);
+		}
+		if (includeFiles) {
+			/*
+			 * ##################### Backup Room Files
+			 */
+			File targetRootDir = new File(backup_dir, "roomFiles");
+
+			if (!targetRootDir.exists()) {
+				targetRootDir.mkdir();
+			}
+
+			File sourceDir = OmFileHelper.getUploadDir();
+
+			File[] files = sourceDir.listFiles();
+			for (File file : files) {
+				if (file.isDirectory()) {
+					if (!file.getName().equals("backup") && !file.getName().equals("import")) {
+						log.debug("### " + file.getName());
+
+						FileHelper.copyRec(file, new File(targetRootDir, file.getName()));
+					}
+				}
+			}
+
+			/*
+			 * ##################### Backup Recording Files
+			 */
+			File targetDirRec = new File(backup_dir, "recordingFiles");
+
+			if (!targetDirRec.exists()) {
+				targetDirRec.mkdir();
+			}
+
+			File sourceDirRec = OmFileHelper.getStreamsHibernateDir();
+
+			FileHelper.copyRec(sourceDirRec, targetDirRec);
+			progressHolder.setProgress(90);
+		}
+
+		writeZipDir(backup_dir, filePath);
+		progressHolder.setProgress(100);
+		log.debug("---Done");
+	}
+	
+	private <T> void writeList(Serializer ser, File backup_dir, String fileName, String listElement, List<T> list) throws Exception {
+		FileOutputStream fos = new FileOutputStream(new File(backup_dir, fileName));
+		writeList(ser, fos, listElement, list);
+	}
+	
+	private <T> void writeList(Serializer ser, OutputStream os, String listElement, List<T> list) throws Exception {
+		Format format = new Format("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+		OutputNode doc = NodeBuilder.write(new OutputStreamWriter(os, "UTF-8"), format);
+		OutputNode root = doc.getChild("root");
+		root.setComment(BACKUP_COMMENT);
+		OutputNode listNode = root.getChild(listElement);
+
+		if (list != null) {
+			for (T t : list) {
+				try {
+					ser.write(t, listNode);
+				} catch (Exception e) {
+					log.debug("Exception While writing node of type: " + t.getClass(), e);
+				}
+			}
+		}
+		root.commit();
+	}
+
+	public void exportUsers(File backup_dir, List<User> list) throws Exception {
+		FileOutputStream fos = new FileOutputStream(new File(backup_dir, "users.xml"));
+		exportUsers(fos, list);
+	}
+	
+	public void exportUsers(OutputStream os, List<User> list) throws Exception {
+		Registry registry = new Registry();
+		Strategy strategy = new RegistryStrategy(registry);
+		Serializer serializer = new Persister(strategy);
+
+		registry.bind(Organisation.class, OrganisationConverter.class);
+		registry.bind(State.class, StateConverter.class);
+		if (list != null && list.size() > 0) {
+			Class<?> dateClass = list.get(0).getRegdate() != null ? list.get(0).getRegdate().getClass() : list.get(0).getStarttime().getClass();
+			registry.bind(dateClass, DateConverter.class);
+		}
+		
+		writeList(serializer, os, "users", list);
+	}
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest
+	 * , javax.servlet.http.HttpServletResponse)
+	 */
+	public void service(HttpServletRequest request, HttpServletResponse response, ServletContext ctx) throws ServletException, IOException {
+		String sid = request.getParameter("sid");
+		if (sid == null) {
+			sid = "default";
+		}
+		log.debug("sid: " + sid);
+
+		Long users_id = sessiondataDao.checkSession(sid);
+		Set<Right> rights = usersDao.get(users_id).getRights();
+
+		log.debug("users_id: " + users_id);
+		log.debug("user_level: " + rights);
+
+		if (AuthLevelUtil.hasAdminLevel(rights)) {
+			// if (true) {
+
+			String includeFileOption = request.getParameter("includeFileOption");
+			boolean includeFiles = includeFileOption == null || "yes".equals(includeFileOption);
+
+			String moduleName = request.getParameter("moduleName");
+			if (moduleName == null) {
+				moduleName = "moduleName";
+			}
+			log.debug("moduleName: " + moduleName);
+
+			if (moduleName.equals("backup")) {
+
+				/*
+				 * ##################### Create Base Folder structure
+				 */
+
+				File working_dir = OmFileHelper.getUploadBackupDir();
+
+				String dateString = "backup_"
+						+ CalendarPatterns.getTimeForStreamId(new Date());
+
+				File backup_dir = new File(working_dir, dateString);
+				String requestedFile = dateString + ".zip";
+				File backupFile = new File(backup_dir, requestedFile);
+
+				try {
+					performExport(backupFile, backup_dir, includeFiles, new ProgressHolder());
+
+					response.reset();
+					response.resetBuffer();
+					response.setContentType("APPLICATION/OCTET-STREAM");
+					response.setHeader("Content-Disposition", "attachment; filename=\"" + requestedFile + "\"");
+					response.setHeader("Content-Length", "" + backupFile.length());
+
+					OutputStream out = response.getOutputStream();
+					OmFileHelper.copyFile(backupFile, out);
+
+					out.flush();
+					out.close();
+				} catch (Exception er) {
+					log.error("Error exporting: ", er);
+				}
+
+				if (backupFile.exists()) {
+					// log.debug("DELETE :1: "+backupFile.getCanonicalPath());
+					backupFile.delete();
+				}
+
+				FileHelper.removeRec(backup_dir);
+			}
+		} else {
+			log.error("BackupExport: not authorized FileDownload ");
+		}
+	}
+
+	private void writeZipDir(File directoryToZip, File zipFile) throws IOException {
+		FileOutputStream fos = null;
+		ZipOutputStream zos = null;
+		try {
+			fos = new FileOutputStream(zipFile);
+			zos = new ZipOutputStream(fos);
+			
+			writeZipDir(directoryToZip.toURI(), directoryToZip, zos, zipFile);
+		} finally {
+			if (zos != null) {
+				try {
+					zos.close();
+				} catch (IOException e) {
+					log.debug("Enexpected error while closing ZipOutputStream", e);
+				}
+			}
+			if (fos != null) {
+				try {
+					fos.close();
+				} catch (IOException e) {
+					log.debug("Enexpected error while closing FileOutputStream", e);
+				}
+			}
+		}
+	}
+	
+	private void writeZipDir(URI base, File dir, ZipOutputStream zos, File zipFile) throws IOException {
+		for (File file : dir.listFiles()) {
+			if (zipFile.equals(file)) {
+				continue;
+			}
+			if (file.isDirectory()) {
+				writeZipDir(base, file, zos, zipFile);
+			} else {
+				String path = base.relativize(file.toURI()).toString();
+				log.debug("Writing '" + path + "' to zip file");
+				ZipEntry zipEntry = new ZipEntry(path);
+				zos.putNextEntry(zipEntry);
+
+				OmFileHelper.copyFile(file, zos);
+				zos.closeEntry();
+			}
+		}
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/backup/BackupImport.java b/src/install/java/org/apache/openmeetings/backup/BackupImport.java
new file mode 100644
index 0000000..f09e822
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/BackupImport.java
@@ -0,0 +1,1021 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import static org.apache.commons.transaction.util.FileHelper.copyRec;
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.SENT_FOLDER_ID;
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.TRASH_FOLDER_ID;
+import static org.apache.openmeetings.db.util.UserHelper.getMinLoginLength;
+import static org.apache.openmeetings.util.OmFileHelper.getStreamsHibernateDir;
+import static org.apache.openmeetings.util.OmFileHelper.getUploadDir;
+import static org.apache.openmeetings.util.OmFileHelper.getUploadProfilesUserDir;
+import static org.apache.openmeetings.util.OmFileHelper.getUploadRoomDir;
+import static org.apache.openmeetings.util.OmFileHelper.profilesPrefix;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CRYPT_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openmeetings.db.dao.basic.ChatDao;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentCategoryDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;
+import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.room.RoomOrganisationDao;
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.dao.server.LdapConfigDao;
+import org.apache.openmeetings.db.dao.server.OAuth2Dao;
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.PrivateMessageFolderDao;
+import org.apache.openmeetings.db.dao.user.PrivateMessagesDao;
+import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.dao.user.UserContactsDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.basic.ChatMessage;
+import org.apache.openmeetings.db.entity.basic.Configuration;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.AppointmentCategory;
+import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;
+import org.apache.openmeetings.db.entity.room.PollType;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomModerator;
+import org.apache.openmeetings.db.entity.room.RoomOrganisation;
+import org.apache.openmeetings.db.entity.room.RoomPoll;
+import org.apache.openmeetings.db.entity.room.RoomPollAnswers;
+import org.apache.openmeetings.db.entity.room.RoomType;
+import org.apache.openmeetings.db.entity.server.LdapConfig;
+import org.apache.openmeetings.db.entity.server.OAuthServer;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.db.entity.user.Address;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.PrivateMessage;
+import org.apache.openmeetings.db.entity.user.PrivateMessageFolder;
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.db.entity.user.UserContact;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.crypt.MD5Implementation;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.simpleframework.xml.Serializer;
+import org.simpleframework.xml.convert.Registry;
+import org.simpleframework.xml.convert.RegistryStrategy;
+import org.simpleframework.xml.core.Persister;
+import org.simpleframework.xml.strategy.Strategy;
+import org.simpleframework.xml.stream.InputNode;
+import org.simpleframework.xml.stream.NodeBuilder;
+import org.simpleframework.xml.transform.RegistryMatcher;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+public class BackupImport {
+	private static final Logger log = Red5LoggerFactory.getLogger(BackupImport.class, webAppRootKey);
+
+	@Autowired
+	private AppointmentDao appointmentDao;
+	@Autowired
+	private StateDao statemanagement;
+	@Autowired
+	private OrganisationDao orgDao;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private AppointmentCategoryDao appointmentCategoryDaoImpl;
+	@Autowired
+	private AppointmentReminderTypDao appointmentReminderTypDaoImpl;
+	@Autowired
+	private UserDao usersDao;
+	@Autowired
+	private FlvRecordingDao flvRecordingDao;
+	@Autowired
+	private PrivateMessageFolderDao privateMessageFolderDao;
+	@Autowired
+	private PrivateMessagesDao privateMessagesDao;
+	@Autowired
+	private MeetingMemberDao meetingMemberDao;
+	@Autowired
+	private LdapConfigDao ldapConfigDao;
+	@Autowired
+	private FileExplorerItemDao fileExplorerItemDao;
+	@Autowired
+	private UserContactsDao userContactsDao;
+	@Autowired
+	private PollDao pollManager;
+	@Autowired
+	private ConfigurationDao configurationDao;
+	@Autowired
+	private TimezoneUtil tzUtil;
+	@Autowired
+	private ChatDao chatDao;
+	@Autowired
+	private ServerDao serverDao;
+	@Autowired
+	private OAuth2Dao auth2Dao;
+	@Autowired
+	private OrganisationDao organisationDao;
+	@Autowired
+	private RoomTypeDao roomTypeDao;
+	@Autowired
+	private RoomOrganisationDao roomOrganisationDao;
+
+	private final Map<Long, Long> usersMap = new HashMap<Long, Long>();
+	private final Map<Long, Long> organisationsMap = new HashMap<Long, Long>();
+	private final Map<Long, Long> appointmentsMap = new HashMap<Long, Long>();
+	private final Map<Long, Long> roomsMap = new HashMap<Long, Long>();
+	private final Map<Long, Long> messageFoldersMap = new HashMap<Long, Long>();
+	private final Map<Long, Long> userContactsMap = new HashMap<Long, Long>();
+	private final Map<String, Integer> userEmailMap = new HashMap<String, Integer>();
+
+	private enum Maps {
+		USERS, ORGANISATIONS, APPOINTMENTS, ROOMS, MESSAGEFOLDERS, USERCONTACTS
+	};
+
+	public void performImport(InputStream is) throws Exception {
+		File working_dir = OmFileHelper.getUploadImportDir();
+		if (!working_dir.exists()) {
+			working_dir.mkdir();
+		}
+		usersMap.clear();
+		organisationsMap.clear();
+		appointmentsMap.clear();
+		roomsMap.clear();
+		messageFoldersMap.clear();
+		userContactsMap.clear();
+		userEmailMap.clear();
+		messageFoldersMap.put(INBOX_FOLDER_ID, INBOX_FOLDER_ID);
+		messageFoldersMap.put(SENT_FOLDER_ID, SENT_FOLDER_ID);
+		messageFoldersMap.put(TRASH_FOLDER_ID, TRASH_FOLDER_ID);
+		File f = OmFileHelper.getNewDir(working_dir, "import_" + CalendarPatterns.getTimeForStreamId(new Date()));
+
+		log.debug("##### WRITE FILE TO: " + f);
+		
+		ZipInputStream zipinputstream = new ZipInputStream(is);
+		ZipEntry zipentry = zipinputstream.getNextEntry();
+		while (zipentry != null) {
+			String fName = zipentry.getName();
+			if (File.pathSeparatorChar != '\\' && fName.indexOf('\\') > -1) {
+				fName = fName.replace('\\', '/');
+			}
+			// for each entry to be extracted
+			File fentry = new File(f, fName);
+			File dir = fentry.isDirectory() ? fentry : fentry.getParentFile();
+			dir.mkdirs();
+			if (fentry.isDirectory()) {
+				zipentry = zipinputstream.getNextEntry();
+				continue;
+			}
+
+			FileHelper.copy(zipinputstream, fentry);
+			zipinputstream.closeEntry();
+			zipentry = zipinputstream.getNextEntry();
+
+		}
+		zipinputstream.close();
+
+		/*
+		 * ##################### Import Configs
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			RegistryMatcher matcher = new RegistryMatcher(); //TODO need to be removed in the later versions
+			Serializer serializer = new Persister(strategy, matcher);
+
+			matcher.bind(Long.class, LongTransform.class);
+			registry.bind(Date.class, DateConverter.class);
+			registry.bind(User.class, new UserConverter(usersDao, usersMap));
+			
+			List<Configuration> list = readList(serializer, f, "configs.xml", "configs", Configuration.class, true);
+			for (Configuration c : list) {
+				if (c.getConf_key() == null || c.isDeleted()) {
+					continue;
+				}
+				Configuration cfg = configurationDao.forceGet(c.getConf_key());
+				if (cfg != null && !cfg.isDeleted()) {
+					log.warn("Non deleted configuration with same key is found! old value: {}, new value: {}", cfg.getConf_value(), c.getConf_value());
+				}
+				c.setConfiguration_id(cfg == null ? null : cfg.getConfiguration_id());
+				if (c.getUser() != null && c.getUser().getUser_id() == null) {
+					c.setUser(null);
+				}
+				if (CONFIG_CRYPT_KEY.equals(c.getConf_key())) {
+					try {
+						Class.forName(c.getConf_value());
+					} catch (ClassNotFoundException e) {
+						c.setConf_value(MD5Implementation.class.getCanonicalName());
+					}
+				}
+				configurationDao.update(c, null);
+			}
+		}
+
+		log.info("Configs import complete, starting organization import");
+		/*
+		 * ##################### Import Organizations
+		 */
+		Serializer simpleSerializer = new Persister();
+		{
+			List<Organisation> list = readList(simpleSerializer, f, "organizations.xml", "organisations", Organisation.class);
+			for (Organisation o : list) {
+				long oldId = o.getOrganisation_id();
+				o.setOrganisation_id(null);
+				o = organisationDao.update(o, null);
+				organisationsMap.put(oldId, o.getOrganisation_id());
+			}
+		}
+
+		log.info("Organizations import complete, starting user import");
+		/*
+		 * ##################### Import Users
+		 */
+		{
+			String jNameTimeZone = configurationDao.getConfValue("default.timezone", String.class, "Europe/Berlin");
+			List<User> list = readUserList(f, "users.xml", "users");
+			int minLoginLength = getMinLoginLength(configurationDao);
+			for (User u : list) {
+				if (u.getLogin() == null) {
+					continue;
+				}
+				if (u.getType() == Type.contact && u.getLogin().length() < minLoginLength) {
+					u.setLogin(UUID.randomUUID().toString());
+				}
+				//FIXME: OPENMEETINGS-750
+				//Convert old Backups with OmTimeZone to new schema
+				
+				String tz = u.getTimeZoneId();
+				if (tz == null) {
+					u.setTimeZoneId(jNameTimeZone);
+					u.setForceTimeZoneCheck(true);
+				} else {
+					u.setForceTimeZoneCheck(false);
+				}
+				
+				u.setStarttime(new Date());
+				long userId = u.getUser_id();
+				u.setUser_id(null);
+				if (u.getSipUser() != null && u.getSipUser().getId() != 0) {
+					u.getSipUser().setId(0);
+				}
+				if (!Strings.isEmpty(u.getExternalUserType())) {
+					u.setType(Type.external);
+				}
+				usersDao.update(u, -1L);
+				usersMap.put(userId, u.getUser_id());
+			}
+		}
+
+		log.info("Users import complete, starting room import");
+		/*
+		 * ##################### Import Rooms
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			RegistryMatcher matcher = new RegistryMatcher(); //TODO need to be removed in the later versions
+			Serializer serializer = new Persister(strategy, matcher);
+
+			matcher.bind(Long.class, LongTransform.class);
+			matcher.bind(Integer.class, IntegerTransform.class);
+			registry.bind(User.class, new UserConverter(usersDao, usersMap));
+			registry.bind(RoomType.class, new RoomTypeConverter(roomTypeDao));
+			
+			List<Room> list = readList(serializer, f, "rooms.xml", "rooms", Room.class);
+			for (Room r : list) {
+				Long roomId = r.getRooms_id();
+
+				// We need to reset ids as openJPA reject to store them otherwise
+				r.setRooms_id(null);
+				if (r.getModerators() != null) {
+					for (Iterator<RoomModerator> i = r.getModerators().iterator(); i.hasNext();) {
+						RoomModerator rm = i.next();
+						if (rm.getUser().getUser_id() == null) {
+							i.remove();
+						}
+					}
+				}
+				r = roomDao.update(r, null);
+				roomsMap.put(roomId, r.getRooms_id());
+			}
+		}
+
+		log.info("Room import complete, starting room organizations import");
+		/*
+		 * ##################### Import Room Organisations
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(Organisation.class, new OrganisationConverter(orgDao, organisationsMap));
+			registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));
+			
+			List<RoomOrganisation> list = readList(serializer, f, "rooms_organisation.xml", "room_organisations", RoomOrganisation.class);
+			for (RoomOrganisation ro : list) {
+				if (!ro.getDeleted() && ro.getRoom() != null && ro.getRoom().getRooms_id() != null && ro.getOrganisation() != null && ro.getOrganisation().getOrganisation_id() != null) {
+					// We need to reset this as openJPA reject to store them otherwise
+					ro.setRooms_organisation_id(null);
+					roomOrganisationDao.update(ro, null);
+				}
+			}
+		}
+
+		log.info("Room organizations import complete, starting chat messages import");
+		/*
+		 * ##################### Import Chat messages
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(User.class, new UserConverter(usersDao, usersMap));
+			registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));
+			registry.bind(Date.class, DateConverter.class);
+			
+			List<ChatMessage> list = readList(serializer, f, "chat_messages.xml", "chat_messages", ChatMessage.class, true);
+			for (ChatMessage m : list) {
+				chatDao.update(m);
+			}
+		}
+		
+		log.info("Chat messages import complete, starting appointement import");
+		/*
+		 * ##################### Import Appointements
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(AppointmentCategory.class, new AppointmentCategoryConverter(appointmentCategoryDaoImpl));
+			registry.bind(User.class, new UserConverter(usersDao, usersMap));
+			registry.bind(AppointmentReminderTyps.class, new AppointmentReminderTypeConverter(appointmentReminderTypDaoImpl));
+			registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));
+			registry.bind(Date.class, DateConverter.class);
+			
+			List<Appointment> list = readList(serializer, f, "appointements.xml", "appointments", Appointment.class);
+			log.debug(list.size() + " Appointments found in backup");
+			for (Appointment a : list) {
+				Long appId = a.getId();
+
+				// We need to reset this as openJPA reject to store them otherwise
+				a.setId(null);
+				if (a.getOwner() != null && a.getOwner().getUser_id() == null) {
+					a.setOwner(null);
+				}
+				if (a.getRoom() != null && a.getRoom().getRooms_id() == null) {
+					a.setRoom(null);
+				}
+				a = appointmentDao.update(a, null, false);
+				appointmentsMap.put(appId, a.getId());
+			}
+		}
+
+		log.info("Appointement import complete, starting meeting members import");
+		/*
+		 * ##################### Import MeetingMembers
+		 * 
+		 * Reminder Invitations will be NOT send!
+		 */
+		{
+			List<MeetingMember> list = readMeetingMemberList(f, "meetingmembers.xml", "meetingmembers");
+			for (MeetingMember ma : list) {
+				meetingMemberDao.update(ma);
+			}
+		}
+
+		log.info("Meeting members import complete, starting ldap config import");
+		/*
+		 * ##################### Import LDAP Configs
+		 */
+		{
+			List<LdapConfig> list = readList(simpleSerializer, f, "ldapconfigs.xml", "ldapconfigs", LdapConfig.class, true);
+			for (LdapConfig c : list) {
+				if (!"local DB [internal]".equals(c.getName())) {
+					ldapConfigDao.addLdapConfigByObject(c);
+				}
+			}
+		}
+
+		log.info("Ldap config import complete, starting cluster servers import");
+		/*
+		 * ##################### Cluster servers
+		 */
+		{
+			List<Server> list = readList(simpleSerializer, f, "servers.xml", "servers", Server.class, true);
+			for (Server s : list) {
+				serverDao.update(s, null);
+			}
+		}
+
+		log.info("Cluster servers import complete, starting OAuth2 servers import");
+		/*
+		 * ##################### OAuth2 servers
+		 */
+		{
+			List<OAuthServer> list = readList(simpleSerializer, f, "oauth2servers.xml", "oauth2servers", OAuthServer.class, true);
+			for (OAuthServer s : list) {
+				auth2Dao.update(s, null);
+			}
+		}
+
+		log.info("OAuth2 servers import complete, starting recordings import");
+		/*
+		 * ##################### Import Recordings
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			RegistryMatcher matcher = new RegistryMatcher(); //TODO need to be removed in the later versions
+			Serializer serializer = new Persister(strategy, matcher);
+
+			matcher.bind(Long.class, LongTransform.class);
+			matcher.bind(Integer.class, IntegerTransform.class);
+			registry.bind(Date.class, DateConverter.class);
+			
+			List<FlvRecording> list = readList(serializer, f, "flvRecordings.xml", "flvrecordings", FlvRecording.class, true);
+			for (FlvRecording fr : list) {
+				fr.setFlvRecordingId(0);
+				if (fr.getRoom_id() != null) {
+					fr.setRoom_id(roomsMap.get(fr.getRoom_id()));
+				}
+				if (fr.getOwnerId() != null) {
+					fr.setOwnerId(usersMap.get(fr.getOwnerId()));
+				}
+				if (fr.getFlvRecordingMetaData() != null) {
+					for (FlvRecordingMetaData meta : fr.getFlvRecordingMetaData()) {
+						meta.setFlvRecordingMetaDataId(0);
+						meta.setFlvRecording(fr);
+					}
+				}
+				flvRecordingDao.update(fr);
+			}
+		}
+
+		log.info("FLVrecording import complete, starting private message folder import");
+		/*
+		 * ##################### Import Private Message Folders
+		 */
+		{
+			List<PrivateMessageFolder> list = readList(simpleSerializer, f, "privateMessageFolder.xml"
+				, "privatemessagefolders", PrivateMessageFolder.class, true);
+			for (PrivateMessageFolder p : list) {
+				Long folderId = p.getPrivateMessageFolderId();
+				PrivateMessageFolder storedFolder = privateMessageFolderDao.get(folderId);
+				if (storedFolder == null) {
+					p.setPrivateMessageFolderId(0);
+					Long newFolderId = privateMessageFolderDao.addPrivateMessageFolderObj(p);
+					messageFoldersMap.put(folderId, newFolderId);
+				}
+			}
+		}
+
+		log.info("Private message folder import complete, starting user contacts import");
+		/*
+		 * ##################### Import User Contacts
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(User.class, new UserConverter(usersDao, usersMap));
+			
+			List<UserContact> list = readList(serializer, f, "userContacts.xml", "usercontacts", UserContact.class, true);
+			for (UserContact uc : list) {
+				Long ucId = uc.getUserContactId();
+				UserContact storedUC = userContactsDao.get(ucId);
+
+				if (storedUC == null && uc.getContact() != null && uc.getContact().getUser_id() != null) {
+					uc.setUserContactId(0);
+					if (uc.getOwner() != null && uc.getOwner().getUser_id() == null) {
+						uc.setOwner(null);
+					}
+					Long newId = userContactsDao.addUserContactObj(uc);
+					userContactsMap.put(ucId, newId);
+				}
+			}
+		}
+
+		log.info("Usercontact import complete, starting private messages item import");
+		/*
+		 * ##################### Import Private Messages
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			Serializer serializer = new Persister(strategy);
+	
+			registry.bind(User.class, new UserConverter(usersDao, usersMap));
+			registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));
+			registry.bind(Date.class, DateConverter.class);
+			
+			List<PrivateMessage> list = readList(serializer, f, "privateMessages.xml", "privatemessages", PrivateMessage.class, true);
+			boolean oldBackup = true;
+			for (PrivateMessage p : list) {
+				if (p.getFolderId() < 0) {
+					oldBackup = false;
+					break;
+				}
+				
+			}
+			for (PrivateMessage p : list) {
+				p.setId(0);
+				p.setFolderId(getNewId(p.getFolderId(), Maps.MESSAGEFOLDERS));
+				p.setUserContactId(getNewId(p.getUserContactId(), Maps.USERCONTACTS));
+				if (p.getRoom() != null && p.getRoom().getRooms_id() == null) {
+					p.setRoom(null);
+				}
+				if (p.getTo() != null && p.getTo().getUser_id() == null) {
+					p.setTo(null);
+				}
+				if (p.getFrom() != null && p.getFrom().getUser_id() == null) {
+					p.setFrom(null);
+				}
+				if (p.getOwner() != null && p.getOwner().getUser_id() == null) {
+					p.setOwner(null);
+				}
+				if (oldBackup && p.getOwner() != null && p.getOwner().getUser_id() != null 
+						&& p.getFrom() != null && p.getFrom().getUser_id() != null 
+						&& p.getOwner().getUser_id() == p.getFrom().getUser_id())
+				{
+					p.setFolderId(SENT_FOLDER_ID);
+				}
+				privateMessagesDao.update(p, null);
+			}
+		}
+
+		log.info("Private message import complete, starting file explorer item import");
+		/*
+		 * ##################### Import File-Explorer Items
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			RegistryMatcher matcher = new RegistryMatcher(); //TODO need to be removed in the later versions
+			Serializer serializer = new Persister(strategy, matcher);
+
+			matcher.bind(Long.class, LongTransform.class);
+			matcher.bind(Integer.class, IntegerTransform.class);
+			registry.bind(Date.class, DateConverter.class);
+			
+			List<FileExplorerItem> list = readList(serializer, f, "fileExplorerItems.xml", "fileExplorerItems", FileExplorerItem.class, true);
+			for (FileExplorerItem file : list) {
+				// We need to reset this as openJPA reject to store them otherwise
+				file.setFileExplorerItemId(0);
+				Long roomId = file.getRoom_id();
+				file.setRoom_id(roomsMap.containsKey(roomId) ? roomsMap.get(roomId) : null);
+				if (file.getOwnerId() != null) {
+					file.setOwnerId(usersMap.get(file.getOwnerId()));
+				}
+				fileExplorerItemDao.addFileExplorerItem(file);
+			}
+		}
+
+		log.info("File explorer item import complete, starting file poll import");
+		/*
+		 * ##################### Import Room Polls
+		 */
+		{
+			Registry registry = new Registry();
+			Strategy strategy = new RegistryStrategy(registry);
+			RegistryMatcher matcher = new RegistryMatcher(); //TODO need to be removed in the later versions
+			Serializer serializer = new Persister(strategy, matcher);
+	
+			matcher.bind(Integer.class, IntegerTransform.class);
+			registry.bind(User.class, new UserConverter(usersDao, usersMap));
+			registry.bind(Room.class, new RoomConverter(roomDao, roomsMap));
+			registry.bind(PollType.class, new PollTypeConverter(pollManager));
+			registry.bind(Date.class, DateConverter.class);
+			
+			List<RoomPoll> list = readList(serializer, f, "roompolls.xml", "roompolls", RoomPoll.class, true);
+			for (RoomPoll rp : list) {
+				if (rp.getRoom() == null || rp.getRoom().getRooms_id() == null) {
+					//room was deleted
+					continue;
+				}
+				if (rp.getCreatedBy() == null || rp.getCreatedBy().getUser_id() == null) {
+					rp.setCreatedBy(null);
+				}
+				for (RoomPollAnswers rpa : rp.getRoomPollAnswerList()) {
+					if (rpa.getVotedUser() == null || rpa.getVotedUser().getUser_id() == null) {
+						rpa.setVotedUser(null);
+					}
+				}
+				pollManager.savePollBackup(rp);
+			}
+		}
+		
+		log.info("Poll import complete, starting copy of files and folders");
+		/*
+		 * ##################### Import real files and folders
+		 */
+		importFolders(f);
+
+		log.info("File explorer item import complete, clearing temp files");
+		
+		FileHelper.removeRec(f);
+	}
+	
+	private <T> List<T> readList(Serializer ser, File baseDir, String fileName, String listNodeName, Class<T> clazz) throws Exception {
+		return readList(ser, baseDir, fileName, listNodeName, clazz, false);
+	}
+	
+	private <T> List<T> readList(Serializer ser, File baseDir, String fileName, String listNodeName, Class<T> clazz, boolean notThow) throws Exception {
+		List<T> list = new ArrayList<T>();
+		File xml = new File(baseDir, fileName);
+		if (!xml.exists()) {
+			final String msg = fileName + " missing";
+			if (notThow) {
+				log.debug(msg);
+			} else {
+				throw new Exception(msg);
+			}
+		} else {
+			InputNode root = NodeBuilder.read(new FileInputStream(xml));
+			InputNode listNode = root.getNext();
+			if (listNodeName.equals(listNode.getName())) {
+				InputNode item = listNode.getNext();
+				while (item != null) {
+					T o = ser.read(clazz, item, false);
+					list.add(o);
+					item = listNode.getNext();
+				}
+			}
+		}
+		return list;
+	}
+	
+	private Node getNode(Node doc, String name) {
+		NodeList nl = doc.getChildNodes();
+		for (int i = 0; i < nl.getLength(); ++i) {
+			Node node = nl.item(i);
+			if (node.getNodeType() == Node.ELEMENT_NODE && name.equals(node.getNodeName())) {
+				return node;
+			}
+		}
+		return null;
+	}
+	
+	public List<User> readUserList(InputStream xml, String listNodeName) throws Exception {
+		return readUserList(new InputSource(xml), listNodeName);
+	}
+	
+	public List<User> readUserList(File baseDir, String fileName, String listNodeName) throws Exception {
+		File xml = new File(baseDir, fileName);
+		if (!xml.exists()) {
+			throw new Exception(fileName + " missing");
+		}
+		
+		return readUserList(new InputSource(xml.toURI().toASCIIString()), listNodeName);
+	}
+	
+	//FIXME (need to be removed in later versions) HACK to add external attendees previously stored in MeetingMember structure
+	private List<MeetingMember> readMeetingMemberList(File baseDir, String filename, String listNodeName) throws Exception {
+		Registry registry = new Registry();
+		Strategy strategy = new RegistryStrategy(registry);
+		Serializer ser = new Persister(strategy);
+
+		registry.bind(User.class, new UserConverter(usersDao, usersMap));
+		registry.bind(Appointment.class, new AppointmentConverter(appointmentDao, appointmentsMap));
+		
+		File xml = new File(baseDir, filename);
+		if (!xml.exists()) {
+			throw new Exception(filename + " missing");
+		}
+		
+		DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+		Document doc = dBuilder.parse(new InputSource(xml.toURI().toASCIIString()));
+		
+		StringWriter sw = new StringWriter();
+		Transformer xformer = TransformerFactory.newInstance().newTransformer();
+        xformer.transform(new DOMSource(doc), new StreamResult(sw));
+        
+		List<MeetingMember> list = new ArrayList<MeetingMember>();
+		InputNode root = NodeBuilder.read(new StringReader(sw.toString()));
+		InputNode root1 = NodeBuilder.read(new StringReader(sw.toString())); //HACK to handle external attendee's firstname, lastname, email
+		InputNode listNode = root.getNext();
+		InputNode listNode1 = root1.getNext(); //HACK to handle external attendee's firstname, lastname, email
+		if (listNodeName.equals(listNode.getName())) {
+			InputNode item = listNode.getNext();
+			InputNode item1 = listNode1.getNext(); //HACK to handle external attendee's firstname, lastname, email
+			while (item != null) {
+				MeetingMember mm = ser.read(MeetingMember.class, item, false);
+
+				boolean needToSkip1 = true;
+				if (mm.getUser() == null) {
+					mm.setUser(new User());
+				}
+				if (mm.getUser().getUser_id() == null) {
+					//HACK to handle external attendee's firstname, lastname, email
+					boolean contactValid = false;
+					do {
+						if (Type.contact == mm.getUser().getType() && "firstname".equals(item1.getName())) {
+							mm.getUser().setFirstname(item1.getValue());
+						}
+						if (Type.contact == mm.getUser().getType() && "lastname".equals(item1.getName())) {
+							mm.getUser().setLastname(item1.getValue());
+						}
+						if ("email".equals(item1.getName())) {
+							String email = item1.getValue();
+							if (mm.getAppointment() != null && mm.getAppointment().getOwner() != null) {
+								mm.setUser(usersDao.getContact(email, mm.getAppointment().getOwner()));
+							}
+							contactValid = true;
+						}
+						item1 = listNode1.getNext(); //HACK to handle old om_time_zone
+					} while (item1 != null && !"meetingmember".equals(item1.getName()));
+					if (!contactValid) {
+						mm = null;
+					}
+					needToSkip1 = false;
+				}
+				if (needToSkip1) {
+					do {
+						item1 = listNode1.getNext(); //HACK to handle Address inside user
+					} while (item1 != null && !"meetingmember".equals(item1.getName()));
+				}
+				item = listNode.getNext();
+				if (mm != null && !mm.isDeleted() && mm.getUser() != null && mm.getAppointment() != null && mm.getAppointment().getId() != null) {
+					mm.setId(null);
+					list.add(mm);
+				}
+			}
+		}
+		return list;
+	}
+	
+	//FIXME (need to be removed in later versions) HACK to fix 2 deleted nodes in users.xml and inline Adresses and sipData
+	private List<User> readUserList(InputSource xml, String listNodeName) throws Exception {
+		Registry registry = new Registry();
+		Strategy strategy = new RegistryStrategy(registry);
+		Serializer ser = new Persister(strategy);
+
+		registry.bind(Organisation.class, new OrganisationConverter(orgDao, organisationsMap));
+		registry.bind(State.class, new StateConverter(statemanagement));
+		registry.bind(Date.class, DateConverter.class);
+
+		DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+		Document doc = dBuilder.parse(xml);
+		NodeList nl = getNode(getNode(doc, "root"), listNodeName).getChildNodes();
+		userEmailMap.clear();
+		//add existence email from database
+		List<User>  users = usersDao.getAllUsers();
+		for (User u : users){
+			if (u.getAdresses() == null || u.getAdresses().getEmail() == null || Type.user != u.getType()) {
+				continue;
+			}
+			userEmailMap.put(u.getAdresses().getEmail(), -1);
+		}
+		// one of the old OM version created 2 nodes "deleted" this code block handles this
+		for (int i = 0; i < nl.getLength(); ++i) {
+			Node user = nl.item(i);
+			NodeList nl1 = user.getChildNodes();
+			boolean deletedFound = false;
+			for (int j = 0; j < nl1.getLength(); ++j) {
+				Node node = nl1.item(j);
+				if (node.getNodeType() == Node.ELEMENT_NODE && "deleted".equals(node.getNodeName())) {
+					if (deletedFound) {
+						user.removeChild(node);
+						break;
+					}
+					deletedFound = true;
+				}
+			}
+		}
+		
+		StringWriter sw = new StringWriter();
+		Transformer xformer = TransformerFactory.newInstance().newTransformer();
+        xformer.transform(new DOMSource(doc), new StreamResult(sw));
+        
+		List<User> list = new ArrayList<User>();
+		InputNode root = NodeBuilder.read(new StringReader(sw.toString()));
+		InputNode root1 = NodeBuilder.read(new StringReader(sw.toString())); //HACK to handle Address inside user
+		InputNode root2 = NodeBuilder.read(new StringReader(sw.toString())); //HACK to handle old om_time_zone, level_id, status
+		InputNode listNode = root.getNext();
+		InputNode listNode1 = root1.getNext(); //HACK to handle Address inside user
+		InputNode listNode2 = root2.getNext(); //HACK to handle old om_time_zone
+		if (listNodeName.equals(listNode.getName())) {
+			InputNode item = listNode.getNext();
+			InputNode item1 = listNode1.getNext(); //HACK to handle Address inside user
+			InputNode item2 = listNode2.getNext(); //HACK to handle old om_time_zone, level_id, status
+			while (item != null) {
+				User u = ser.read(User.class, item, false);
+				
+				boolean needToSkip1 = true;
+				//HACK to handle Address inside user
+				if (u.getAdresses() == null) {
+					Address a = ser.read(Address.class, item1, false);
+					u.setAdresses(a);
+					needToSkip1 = false;
+				}
+				if (needToSkip1) {
+					do {
+						item1 = listNode1.getNext(); //HACK to handle Address inside user
+					} while (item1 != null && !"user".equals(item1.getName()));
+				}
+				String level_id = null, status = null;
+				do {
+					if (u.getTimeZoneId() == null && "omTimeZone".equals(item2.getName())) {
+						String jName = item2.getValue();
+						u.setTimeZoneId(jName == null ? null : tzUtil.getTimezoneByInternalJName(jName).getID());
+					}
+					if ("level_id".equals(item2.getName())) {
+						level_id = item2.getValue();
+					}
+					if ("status".equals(item2.getName())) {
+						status = item2.getValue();
+					}
+					item2 = listNode2.getNext(); //HACK to handle old om_time_zone, level_id, status
+				} while (item2 != null && !"user".equals(item2.getName()));
+				if (u.getRights().isEmpty()) {
+					u.getRights().add(Right.Room);
+					if ("1".equals(status)) {
+						u.getRights().add(Right.Dashboard);
+						u.getRights().add(Right.Login);
+					}
+					if ("3".equals(level_id)) {
+						u.getRights().add(Right.Admin);
+						u.getRights().add(Right.Soap);
+					}
+					if ("4".equals(level_id)) {
+						u.getRights().add(Right.Soap);
+					}
+				}
+				// check that email is unique
+				if (u.getAdresses() != null && u.getAdresses().getEmail() != null && Type.user == u.getType()) {
+					if (userEmailMap.containsKey(u.getAdresses().getEmail())) {
+						log.warn("Email is duplicated for user " + u.toString());
+						String updateEmail = "modified_by_import_<" + list.size() + ">" + u.getAdresses().getEmail();
+						u.getAdresses().setEmail(updateEmail);
+					}
+					userEmailMap.put(u.getAdresses().getEmail(), userEmailMap.size());
+				}
+				list.add(u);
+				item = listNode.getNext();
+			}
+		}
+		return list;
+	}
+	
+	private Long getProfileId(File f) {
+		String n = f.getName();
+		if (n.indexOf(profilesPrefix) > -1) {
+			return importLongType(n.substring(profilesPrefix.length()));
+		}
+		return null;
+	}
+	
+	private void importFolders(File importBaseDir) throws IOException {
+		// Now check the room files and import them
+		File roomFilesFolder = new File(importBaseDir, "roomFiles");
+
+		File uploadDir = getUploadDir();
+
+		log.debug("roomFilesFolder PATH " + roomFilesFolder.getCanonicalPath());
+
+		if (roomFilesFolder.exists()) {
+			for (File file : roomFilesFolder.listFiles()) {
+				if (file.isDirectory()) {
+					String fName = file.getName();
+					if ("profiles".equals(fName)) {
+						// profile should correspond to the new user id
+						for (File profile : file.listFiles()) {
+							Long oldId = getProfileId(profile);
+							Long id = oldId != null ? getNewId(oldId, Maps.USERS) : null;
+							if (id != null) {
+								copyRec(profile, getUploadProfilesUserDir(id));
+							}
+						}
+						continue;
+					} else {
+						// check if folder is room folder, store it under new id if necessary
+						Long oldId = importLongType(fName);
+						Long id = oldId != null ? getNewId(oldId, Maps.ROOMS) : null;
+						if (id != null) {
+							copyRec(file, getUploadRoomDir(id.toString()));
+							continue;
+						}
+					}
+					copyRec(file, new File(uploadDir, fName));
+				}
+			}
+		}
+
+		// Now check the recordings and import them
+
+		File sourceDirRec = new File(importBaseDir, "recordingFiles");
+
+		log.debug("sourceDirRec PATH " + sourceDirRec.getCanonicalPath());
+		if (sourceDirRec.exists()) {
+			copyRec(sourceDirRec, getStreamsHibernateDir());
+		}
+	}
+
+	private Long importLongType(String value) {
+		Long val = null;
+		try {
+			val = Long.valueOf(value);
+		} catch (Exception e) {
+			// no-op
+		}
+		return val;
+	}
+
+	private Long getNewId(Long oldId, Maps map) {
+		Long newId = oldId;
+		switch (map) {
+			case USERS:
+				if (usersMap.containsKey(oldId)) {
+					newId = usersMap.get(oldId);
+				}
+				break;
+			case ORGANISATIONS:
+				if (organisationsMap.containsKey(oldId)) {
+					newId = organisationsMap.get(oldId);
+				}
+				break;
+			case APPOINTMENTS:
+				if (appointmentsMap.containsKey(oldId)) {
+					newId = appointmentsMap.get(oldId);
+				}
+				break;
+			case ROOMS:
+				if (roomsMap.containsKey(oldId)) {
+					newId = roomsMap.get(oldId);
+				}
+				break;
+			case MESSAGEFOLDERS:
+				if (messageFoldersMap.containsKey(oldId)) {
+					newId = messageFoldersMap.get(oldId);
+				}
+				break;
+			case USERCONTACTS:
+				if (userContactsMap.containsKey(oldId)) {
+					newId = userContactsMap.get(oldId);
+				}
+				break;
+			default:
+				break;
+		}
+		return newId;
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/backup/DateConverter.java b/src/install/java/org/apache/openmeetings/backup/DateConverter.java
new file mode 100644
index 0000000..57ec4f9
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/DateConverter.java
@@ -0,0 +1,39 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.backup;

+

+import java.util.Date;

+

+import org.apache.openmeetings.util.CalendarPatterns;

+import org.simpleframework.xml.convert.Converter;

+import org.simpleframework.xml.stream.InputNode;

+import org.simpleframework.xml.stream.OutputNode;

+

+public class DateConverter implements Converter<Date> {

+	public Date read(InputNode node) throws Exception {

+		String val = node.getValue();

+		return val == null || "null".equals(val) ? new Date() : CalendarPatterns.parseImportDate(val);

+	}

+

+	public void write(OutputNode node, Date value) throws Exception {

+		node.setAttribute("class", "java.util.Date");

+		node.setData(true);

+		node.setValue(value == null ? "0" : CalendarPatterns.getExportDate(value));

+	}

+}
\ No newline at end of file
diff --git a/src/install/java/org/apache/openmeetings/backup/InlineConverter.java b/src/install/java/org/apache/openmeetings/backup/InlineConverter.java
new file mode 100644
index 0000000..4ab9f24
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/InlineConverter.java
@@ -0,0 +1,29 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.backup;

+

+import org.simpleframework.xml.stream.InputNode;

+

+public abstract class InlineConverter<T> extends OmConverter<T> {

+	

+	String getNextValue(InputNode parent, String name) throws Exception {

+		InputNode node = parent.getNext(name);

+		return node != null ? node.getValue() : null;

+	}

+}

diff --git a/src/install/java/org/apache/openmeetings/backup/IntegerTransform.java b/src/install/java/org/apache/openmeetings/backup/IntegerTransform.java
new file mode 100644
index 0000000..031c22f
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/IntegerTransform.java
@@ -0,0 +1,32 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.backup;

+

+import org.simpleframework.xml.transform.Transform;

+

+public class IntegerTransform implements Transform<Integer>{

+	public Integer read(String value) throws Exception {

+		return OmConverter.getintValue(value, 0);

+	}

+

+	public String write(Integer value) throws Exception {

+		return "" + value;

+	}

+

+}

diff --git a/src/install/java/org/apache/openmeetings/backup/LongTransform.java b/src/install/java/org/apache/openmeetings/backup/LongTransform.java
new file mode 100644
index 0000000..f3238a8
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/LongTransform.java
@@ -0,0 +1,32 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.backup;

+

+import org.simpleframework.xml.transform.Transform;

+

+public class LongTransform implements Transform<Long>{

+	public Long read(String value) throws Exception {

+		return OmConverter.getlongValue(value);

+	}

+

+	public String write(Long value) throws Exception {

+		return "" + value;

+	}

+

+}

diff --git a/src/install/java/org/apache/openmeetings/backup/OmConverter.java b/src/install/java/org/apache/openmeetings/backup/OmConverter.java
new file mode 100644
index 0000000..67a3d4c
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/OmConverter.java
@@ -0,0 +1,52 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.backup;

+

+import org.simpleframework.xml.convert.Converter;

+import org.simpleframework.xml.stream.InputNode;

+

+public abstract class OmConverter<T> implements Converter<T> {

+	static long getlongValue(InputNode node) throws Exception {

+		return getlongValue(node.getValue());

+	}

+

+	static long getlongValue(String value) {

+		return getlongValue(value, 0);

+	}

+	

+	static long getlongValue(String value, long def) {

+		long result = def;

+		try {

+			result = Long.valueOf(value).longValue();

+		} catch (Exception e) {

+			//no op

+		}

+		return result;

+	}

+

+	static int getintValue(String value, int def) {

+		int result = def;

+		try {

+			result = Integer.valueOf(value).intValue();

+		} catch (Exception e) {

+			//no op

+		}

+		return result;

+	}

+}

diff --git a/src/install/java/org/apache/openmeetings/backup/OrganisationConverter.java b/src/install/java/org/apache/openmeetings/backup/OrganisationConverter.java
new file mode 100644
index 0000000..a0a8a4c
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/OrganisationConverter.java
@@ -0,0 +1,53 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.backup;

+

+import java.util.Map;

+

+import org.apache.openmeetings.db.dao.user.OrganisationDao;

+import org.apache.openmeetings.db.entity.user.Organisation;

+import org.simpleframework.xml.stream.InputNode;

+import org.simpleframework.xml.stream.OutputNode;

+

+public class OrganisationConverter extends OmConverter<Organisation> {

+	private OrganisationDao orgDao;

+	private Map<Long, Long> idMap;

+	

+	public OrganisationConverter() {

+		//default constructor is for export

+	}

+	

+	public OrganisationConverter(OrganisationDao orgDao, Map<Long, Long> idMap) {

+		this.orgDao = orgDao;

+		this.idMap = idMap;

+	}

+	

+	public Organisation read(InputNode node) throws Exception {

+		long oldId = getlongValue(node);

+		long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;

+		

+		Organisation o = orgDao.get(newId);

+		return o == null ? new Organisation() : o;

+	}

+

+	public void write(OutputNode node, Organisation value) throws Exception {

+		node.setData(true);

+		node.setValue(value == null ? "0" : "" + value.getOrganisation_id());

+	}

+}
\ No newline at end of file
diff --git a/src/install/java/org/apache/openmeetings/backup/PollTypeConverter.java b/src/install/java/org/apache/openmeetings/backup/PollTypeConverter.java
new file mode 100644
index 0000000..89e7e5f
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/PollTypeConverter.java
@@ -0,0 +1,45 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.backup;

+

+import org.apache.openmeetings.db.dao.room.PollDao;

+import org.apache.openmeetings.db.entity.room.PollType;

+import org.simpleframework.xml.stream.InputNode;

+import org.simpleframework.xml.stream.OutputNode;

+

+public class PollTypeConverter extends OmConverter<PollType> {

+	private PollDao pollManager;

+	

+	public PollTypeConverter() {

+		//default constructor is for export

+	}

+	

+	public PollTypeConverter(PollDao pollManagement) {

+		this.pollManager = pollManagement;

+	}

+	

+	public PollType read(InputNode node) throws Exception {

+		return pollManager.getPollType(getlongValue(node));

+	}

+

+	public void write(OutputNode node, PollType value) throws Exception {

+		node.setData(true);

+		node.setValue(value == null ? "0" : "" + value.getPollTypesId());

+	}

+}
\ No newline at end of file
diff --git a/src/install/java/org/apache/openmeetings/backup/ProgressHolder.java b/src/install/java/org/apache/openmeetings/backup/ProgressHolder.java
new file mode 100644
index 0000000..3f53b78
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/ProgressHolder.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.backup;
+
+import java.io.Serializable;
+
+public class ProgressHolder implements Serializable {
+	private static final long serialVersionUID = 1L;
+	
+	private int progress;
+
+	public int getProgress() {
+		return progress;
+	}
+
+	public void setProgress(int progress) {
+		this.progress = progress;
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/backup/RoomConverter.java b/src/install/java/org/apache/openmeetings/backup/RoomConverter.java
new file mode 100644
index 0000000..e0f8eda
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/RoomConverter.java
@@ -0,0 +1,53 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.backup;

+

+import java.util.Map;

+

+import org.apache.openmeetings.db.dao.room.RoomDao;

+import org.apache.openmeetings.db.entity.room.Room;

+import org.simpleframework.xml.stream.InputNode;

+import org.simpleframework.xml.stream.OutputNode;

+

+public class RoomConverter extends OmConverter<Room> {

+	private RoomDao roomDao;

+	private Map<Long, Long> idMap;

+	

+	public RoomConverter() {

+		//default constructor is for export

+	}

+	

+	public RoomConverter(RoomDao roomDao, Map<Long, Long> idMap) {

+		this.roomDao = roomDao;

+		this.idMap = idMap;

+	}

+	

+	public Room read(InputNode node) throws Exception {

+		long oldId = getlongValue(node);

+		long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;

+

+		Room r = roomDao.get(newId);

+		return r == null ? new Room() : r;

+	}

+

+	public void write(OutputNode node, Room value) throws Exception {

+		node.setData(true);

+		node.setValue(value == null ? "0" : "" + value.getRooms_id());

+	}

+}
\ No newline at end of file
diff --git a/src/install/java/org/apache/openmeetings/backup/RoomTypeConverter.java b/src/install/java/org/apache/openmeetings/backup/RoomTypeConverter.java
new file mode 100644
index 0000000..5401722
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/RoomTypeConverter.java
@@ -0,0 +1,46 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.backup;

+

+import org.apache.openmeetings.db.dao.room.RoomTypeDao;

+import org.apache.openmeetings.db.entity.room.RoomType;

+import org.simpleframework.xml.stream.InputNode;

+import org.simpleframework.xml.stream.OutputNode;

+

+public class RoomTypeConverter extends OmConverter<RoomType> {

+	private RoomTypeDao dao;

+	

+	public RoomTypeConverter() {

+		//default constructor is for export

+	}

+	

+	public RoomTypeConverter(RoomTypeDao dao) {

+		this.dao = dao;

+	}

+	

+	public RoomType read(InputNode node) throws Exception {

+		RoomType rt = dao.get(getlongValue(node));

+		return rt != null ? rt : dao.get(1); // conference type will be used in case of bad type

+	}

+

+	public void write(OutputNode node, RoomType value) throws Exception {

+		node.setData(true);

+		node.setValue(value == null ? "0" : "" + value.getRoomtypes_id());

+	}

+}
\ No newline at end of file
diff --git a/src/install/java/org/apache/openmeetings/backup/StateConverter.java b/src/install/java/org/apache/openmeetings/backup/StateConverter.java
new file mode 100644
index 0000000..9188089
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/StateConverter.java
@@ -0,0 +1,45 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.backup;

+

+import org.apache.openmeetings.db.dao.user.StateDao;

+import org.apache.openmeetings.db.entity.user.State;

+import org.simpleframework.xml.stream.InputNode;

+import org.simpleframework.xml.stream.OutputNode;

+

+public class StateConverter extends OmConverter<State> {

+	private StateDao statemanagement;

+	

+	public StateConverter() {

+		//default constructor is for export

+	}

+	

+	public StateConverter(StateDao statemanagement) {

+		this.statemanagement = statemanagement;

+	}

+	

+	public State read(InputNode node) throws Exception {

+		return statemanagement.getStateById(getlongValue(node));

+	}

+

+	public void write(OutputNode node, State value) throws Exception {

+		node.setData(true);

+		node.setValue(value == null ? "0" : "" + value.getState_id());

+	}

+}
\ No newline at end of file
diff --git a/src/install/java/org/apache/openmeetings/backup/UserConverter.java b/src/install/java/org/apache/openmeetings/backup/UserConverter.java
new file mode 100644
index 0000000..1b805fa
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/backup/UserConverter.java
@@ -0,0 +1,53 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.backup;

+

+import java.util.Map;

+

+import org.apache.openmeetings.db.dao.user.UserDao;

+import org.apache.openmeetings.db.entity.user.User;

+import org.simpleframework.xml.stream.InputNode;

+import org.simpleframework.xml.stream.OutputNode;

+

+public class UserConverter extends OmConverter<User> {

+	private UserDao userDao;

+	private Map<Long, Long> idMap;

+	

+	public UserConverter() {

+		//default constructor is for export

+	}

+	

+	public UserConverter(UserDao userDao, Map<Long, Long> idMap) {

+		this.userDao = userDao;

+		this.idMap = idMap;

+	}

+	

+	public User read(InputNode node) throws Exception {

+		long oldId = getlongValue(node);

+		long newId = idMap.containsKey(oldId) ? idMap.get(oldId) : oldId;

+		

+		User u = userDao.get(newId);

+		return u == null ? new User() : u;

+	}

+

+	public void write(OutputNode node, User value) throws Exception {

+		node.setData(true);

+		node.setValue(value == null ? "0" : "" + value.getUser_id());

+	}

+}
\ No newline at end of file
diff --git a/src/install/java/org/apache/openmeetings/cli/Admin.java b/src/install/java/org/apache/openmeetings/cli/Admin.java
new file mode 100644
index 0000000..834e89d
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/Admin.java
@@ -0,0 +1,622 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+import static org.apache.openmeetings.db.util.UserHelper.getMinPasswdLength;
+import static org.apache.openmeetings.db.util.UserHelper.invalidPassword;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_LOGIN_MINIMUM_LENGTH;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_PASSWORD_MINIMUM_LENGTH;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Date;
+import java.util.Map;
+import java.util.TimeZone;
+
+import javax.mail.internet.AddressException;
+import javax.mail.internet.InternetAddress;
+import javax.servlet.ServletContextEvent;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.OptionGroup;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
+import org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl;
+import org.apache.openjpa.jdbc.schema.SchemaTool;
+import org.apache.openjpa.lib.log.Log;
+import org.apache.openjpa.lib.log.LogFactoryImpl.LogImpl;
+import org.apache.openmeetings.backup.BackupExport;
+import org.apache.openmeetings.backup.BackupImport;
+import org.apache.openmeetings.backup.ProgressHolder;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.installation.ImportInitvalues;
+import org.apache.openmeetings.installation.InstallationConfig;
+import org.apache.openmeetings.installation.InstallationDocumentHandler;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.ImportHelper;
+import org.apache.openmeetings.util.OMContextListener;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.mail.MailUtil;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.scheduling.quartz.SchedulerFactoryBean;
+
+public class Admin {
+	private static final Logger log = Red5LoggerFactory.getLogger(Admin.class);
+	
+	private boolean verbose = false;
+	private InstallationConfig cfg = null;
+	private Options opts = null;
+	private CommandLine cmdl = null;
+	private ClassPathXmlApplicationContext ctx = null;
+
+	private Admin() {
+		cfg = new InstallationConfig();
+		opts = buildOptions();
+	}
+	
+	private Options buildOptions() {
+		Options options = new Options();
+		OptionGroup group = new OptionGroup()
+			.addOption(new OmOption("h", 0, "h", "help", false, "prints this message"))
+			.addOption(new OmOption("b", 1, "b", "backup", false, "Backups OM"))
+			.addOption(new OmOption("r", 2, "r", "restore", false, "Restores OM"))
+			.addOption(new OmOption("i", 3, "i", "install", false, "Fill DB table, and make OM usable"))
+			.addOption(new OmOption("l", 3, "l", "languages", false, "Reimport All language files into DB"))
+			.addOption(new OmOption("f", 4, "f", "files", false, "File operations - statictics/cleanup"));
+		group.setRequired(true); 
+		options.addOptionGroup(group);
+		//general
+		options.addOption(new OmOption(null, "v", "verbose", false, "verbose error messages"));
+		//backup/restore
+		options.addOption(new OmOption("b", null, "exclude-files", false, "should backup exclude files [default: include]", true));
+		options.addOption(new OmOption("b,r,i", "file", null, true, "file used for backup/restore/install", "b"));
+		//install
+		options.addOption(new OmOption("i", "user", null, true, "Login name of the default user, minimum " + USER_LOGIN_MINIMUM_LENGTH + " characters (mutually exclusive with 'file')"));
+		options.addOption(new OmOption("i", "email", null, true, "Email of the default user (mutually exclusive with 'file')"));
+		options.addOption(new OmOption("i", "group", null, true, "The name of the default user group (mutually exclusive with 'file')"));
+		options.addOption(new OmOption("i", "tz", null, true, "Default server time zone, and time zone for the selected user (mutually exclusive with 'file')"));
+		options.addOption(new OmOption("i", null, "password", true, "Password of the default user, minimum " + USER_PASSWORD_MINIMUM_LENGTH + " characters (will be prompted if not set)", true));
+		options.addOption(new OmOption("i", null, "system-email-address", true, "System e-mail address [default: " + cfg.mailReferer + "]", true));
+		options.addOption(new OmOption("i", null, "smtp-server", true, "SMTP server for outgoing e-mails [default: " + cfg.smtpServer + "]", true));
+		options.addOption(new OmOption("i", null, "smtp-port", true, "SMTP server for outgoing e-mails [default: " + cfg.smtpPort + "]", true));
+		options.addOption(new OmOption("i", null, "email-auth-user", true, "Email auth username (anonymous connection will be used if not set)", true));
+		options.addOption(new OmOption("i", null, "email-auth-pass", true, "Email auth password (anonymous connection will be used if not set)", true));
+		options.addOption(new OmOption("i", null, "email-use-tls", false, "Is secure e-mail connection [default: no]", true));
+		options.addOption(new OmOption("i", null, "skip-default-rooms", false, "Do not create default rooms [created by default]", true));
+		options.addOption(new OmOption("i", null, "disable-frontend-register", false, "Do not allow front end register [allowed by default]", true));
+
+		options.addOption(new OmOption("i", null, "db-type", true, "The type of the DB to be used", true));
+		options.addOption(new OmOption("i", null, "db-host", true, "DNS name or IP address of database", true));
+		options.addOption(new OmOption("i", null, "db-port", true, "Database port", true));
+		options.addOption(new OmOption("i", null, "db-name", true, "The name of Openmeetings database", true));
+		options.addOption(new OmOption("i", null, "db-user", true, "User with write access to the DB specified", true));
+		options.addOption(new OmOption("i", null, "db-pass", true, "Password of the user with write access to the DB specified", true));
+		options.addOption(new OmOption("i", null, "drop", false, "Drop database before installation", true));
+		options.addOption(new OmOption("i", null, "force", false, "Install without checking the existence of old data in the database.", true));
+		//files
+		options.addOption(new OmOption("f", null, "cleanup", false, "Should intermediate files be clean up", true));
+		
+		return options;
+	}
+	
+	private enum Command {
+		install
+		, backup
+		, restore
+		, files
+		, usage
+	}
+	
+	private void usage() {
+		OmHelpFormatter formatter = new OmHelpFormatter();
+		formatter.setWidth(100);
+		formatter.printHelp("admin", "Please specify one of the required parameters.", opts, "Examples:\n" +
+				"\t./admin.sh -b\n" +
+				"\t./admin.sh -i -v -file backup_31_07_2012_12_07_51.zip --drop\n" +
+				"\t./admin.sh -i -v -user admin -email someemail@gmail.com -tz \"Asia/Tehran\" -group \"yourgroup\" --db-type mysql --db-host localhost");
+	}
+	
+	private void handleError(String msg, Exception e) {
+		handleError(msg, e, false);
+	}
+	
+	private void handleError(String msg, Exception e, boolean printUsage) {
+		if (printUsage) {
+			usage();
+		}
+		if (verbose) {
+			log.error(msg, e);
+		} else {
+			log.error(msg + " " + e.getMessage());
+		}
+		System.exit(1);
+	}
+	
+	private ClassPathXmlApplicationContext getApplicationContext(final String ctxName) {
+		if (ctx == null) {
+			OMContextListener omcl = new OMContextListener();
+			omcl.contextInitialized(new ServletContextEvent(new DummyServletContext(ctxName)));
+			try {
+				ctx = new ClassPathXmlApplicationContext("openmeetings-applicationContext.xml");
+			} catch (Exception e) {
+				handleError("Unable to obtain application context", e);
+			}
+			SchedulerFactoryBean sfb = ctx.getBean(SchedulerFactoryBean.class);
+			try {
+				sfb.getScheduler().shutdown(false);
+			} catch (Exception e) {
+				handleError("Unable to shutdown schedulers", e);
+			}
+		}
+		return ctx;
+	}
+	
+	private void process(String[] args) {
+		String ctxName = System.getProperty("context", "openmeetings");
+		File home = new File(System.getenv("RED5_HOME"));
+		OmFileHelper.setOmHome(new File(new File(home, "webapps"), ctxName));
+		
+		CommandLineParser parser = new DefaultParser();
+		try {
+			cmdl = parser.parse(opts, args);
+		} catch (ParseException e) {
+			System.out.println(e.getMessage());
+			usage();
+			System.exit(1);
+		}
+		verbose = cmdl.hasOption('v');
+
+		Command cmd = Command.usage;
+		if (cmdl.hasOption('i')) {
+			cmd = Command.install;
+		} else if (cmdl.hasOption('b')) {
+			cmd = Command.backup;
+		} else if (cmdl.hasOption('r')) {
+			cmd = Command.restore;
+		} else if (cmdl.hasOption('f')) {
+			cmd = Command.files;
+		}
+
+		String file = cmdl.getOptionValue("file", "");
+		switch(cmd) {
+			case install:
+				try {
+					if (cmdl.hasOption("file") && (cmdl.hasOption("user") || cmdl.hasOption("email") || cmdl.hasOption("group"))) {
+						System.out.println("Please specify even 'file' option or 'admin user'.");
+						System.exit(1);
+					}
+					boolean force = cmdl.hasOption("force");
+					if (cmdl.hasOption("skip-default-rooms")) {
+						cfg.createDefaultRooms = "0";
+					}
+					if (cmdl.hasOption("disable-frontend-register")) {
+						cfg.allowFrontendRegister = "0";
+					}
+					if (cmdl.hasOption("system-email-address")) {
+						cfg.mailReferer = cmdl.getOptionValue("system-email-address");
+					}
+					if (cmdl.hasOption("smtp-server")) {
+						cfg.smtpServer = cmdl.getOptionValue("smtp-server");
+					}
+					if (cmdl.hasOption("smtp-port")) {
+						cfg.smtpPort = Integer.valueOf(cmdl.getOptionValue("smtp-port"));
+					}
+					if (cmdl.hasOption("email-auth-user")) {
+						cfg.mailAuthName = cmdl.getOptionValue("email-auth-user");
+					}
+					if (cmdl.hasOption("email-auth-pass")) {
+						cfg.mailAuthPass = cmdl.getOptionValue("email-auth-pass");
+					}
+					if (cmdl.hasOption("email-use-tls")) {
+						cfg.mailUseTls = "1";
+					}
+					ConnectionProperties connectionProperties = new ConnectionProperties();
+					File conf = OmFileHelper.getPersistence();
+					if (!conf.exists() || cmdl.hasOption("db-type") || cmdl.hasOption("db-host") || cmdl.hasOption("db-port") || cmdl.hasOption("db-name") || cmdl.hasOption("db-user") || cmdl.hasOption("db-pass")) {
+						String dbType = cmdl.getOptionValue("db-type", "derby");
+						connectionProperties = ConnectionPropertiesPatcher.patch(dbType
+								, cmdl.getOptionValue("db-host", "localhost")
+								, cmdl.getOptionValue("db-port", null)
+								, cmdl.getOptionValue("db-name", null)
+								, cmdl.getOptionValue("db-user", null)
+								, cmdl.getOptionValue("db-pass", null)
+								);
+					} else {
+						//get properties from existent persistence.xml
+						connectionProperties = ConnectionPropertiesPatcher.getConnectionProperties(conf);
+					}
+					if (cmdl.hasOption("file")) {
+						File backup = checkRestoreFile(file);
+						dropDB(connectionProperties);
+						
+						ImportInitvalues importInit = getApplicationContext(ctxName).getBean(ImportInitvalues.class);
+						importInit.loadSystem(cfg, force); 
+						restoreOm(ctxName, backup);
+					} else {
+						checkAdminDetails(ctxName);
+						dropDB(connectionProperties);
+						
+						ImportInitvalues importInit = getApplicationContext(ctxName).getBean(ImportInitvalues.class);
+						importInit.loadAll(cfg, force);
+					}					
+					
+					InstallationDocumentHandler.createDocument(3);
+				} catch(Exception e) {
+					handleError("Install failed", e);
+				}
+				break;
+			case backup:
+				try {
+					File f;
+					if (!cmdl.hasOption("file")) {
+						file = "backup_" + CalendarPatterns.getTimeForStreamId(new Date()) + ".zip";
+						f = new File(home, file);
+						System.out.println("File name was not specified, '" + file + "' will be used");
+					} else {
+						f = new File(file);
+					}
+					boolean includeFiles = !cmdl.hasOption("exclude-files");
+					File backup_dir = new File(OmFileHelper.getUploadTempDir(), "" + System.currentTimeMillis());
+					backup_dir.mkdirs();
+					
+					BackupExport export = getApplicationContext(ctxName).getBean(BackupExport.class);
+					export.performExport(f, backup_dir, includeFiles, new ProgressHolder());
+					FileHelper.removeRec(backup_dir);
+					backup_dir.delete();
+				} catch (Exception e) {
+					handleError("Backup failed", e);
+				}
+				break;
+			case restore:
+				try {
+					restoreOm(ctxName, checkRestoreFile(file));
+				} catch (Exception e) {
+					handleError("Restore failed", e);
+				}
+				break;
+			case files:
+				try {
+					boolean cleanup = cmdl.hasOption("cleanup");
+					if (cleanup) {
+						System.out.println("WARNING: all intermadiate files will be clean up!");
+					}
+					StringBuilder report = new StringBuilder();
+					report.append("Temporary files allocates: ").append(OmFileHelper.getHumanSize(OmFileHelper.getUploadTempDir())).append("\n");
+					{ //UPLOAD
+						long sectionSize = OmFileHelper.getSize(OmFileHelper.getUploadDir());
+						report.append("Upload totally allocates: ").append(OmFileHelper.getHumanSize(sectionSize)).append("\n");
+						//Profiles
+						File profiles = OmFileHelper.getUploadProfilesDir();
+						long invalid = 0;
+						long deleted = 0;
+						ClassPathXmlApplicationContext ctx = getApplicationContext(ctxName);
+						UserDao udao = ctx.getBean(UserDao.class);
+						for (File profile : profiles.listFiles()) {
+							long pSize = OmFileHelper.getSize(profile);
+							long userId = getUserIdByProfile(profile.getName());
+							User u = udao.get(userId);
+							if (profile.isFile() || userId < 0 || u == null) {
+								if (cleanup) {
+									FileHelper.removeRec(profile);
+								} else {
+									invalid += pSize;
+								}
+							} else if (u.getDeleted()) {
+								if (cleanup) {
+									FileHelper.removeRec(profile);
+								} else {
+									deleted += pSize;
+								}
+							}
+						}
+						long missing = 0;
+						for (User u : udao.getAllBackupUsers()) {
+							if (!u.getDeleted() && u.getPictureuri() != null && !new File(OmFileHelper.getUploadProfilesUserDir(u.getUser_id()), u.getPictureuri()).exists()) {
+								missing++;
+							}
+						}
+						long size = OmFileHelper.getSize(profiles);
+						long restSize = sectionSize - size;
+						report.append("\t\tprofiles: ").append(OmFileHelper.getHumanSize(size)).append("\n");
+						report.append("\t\t\tinvalid: ").append(OmFileHelper.getHumanSize(invalid)).append("\n");
+						report.append("\t\t\tdeleted: ").append(OmFileHelper.getHumanSize(deleted)).append("\n");
+						report.append("\t\t\tmissing count: ").append(missing).append("\n");
+						size = OmFileHelper.getSize(OmFileHelper.getUploadImportDir());
+						restSize -= size;
+						report.append("\t\timport: ").append(OmFileHelper.getHumanSize(size)).append("\n");
+						size = OmFileHelper.getSize(OmFileHelper.getUploadBackupDir());
+						restSize -= size;
+						report.append("\t\tbackup: ").append(OmFileHelper.getHumanSize(size)).append("\n");
+						//Files
+						File files = OmFileHelper.getUploadFilesDir();
+						size = OmFileHelper.getSize(files);
+						restSize -= size;
+						FileExplorerItemDao fileDao = ctx.getBean(FileExplorerItemDao.class);
+						invalid = 0;
+						deleted = 0;
+						for (File f : files.listFiles()) {
+							long fSize = OmFileHelper.getSize(f);
+							FileExplorerItem item = fileDao.getFileExplorerItemsByHash(f.getName());
+							if (item == null) {
+								if (cleanup) {
+									FileHelper.removeRec(f);
+								} else {
+									invalid += fSize;
+								}
+							} else if (item.getDeleted()) {
+								if (cleanup) {
+									FileHelper.removeRec(f);
+								} else {
+									deleted += fSize;
+								}
+							}
+						}
+						missing = 0;
+						for (FileExplorerItem item : fileDao.getFileExplorerItems()) {
+							if (!item.getDeleted() && item.getFileHash() != null && !new File(files, item.getFileHash()).exists()) {
+								missing++;
+							}
+						}
+						report.append("\t\tfiles: ").append(OmFileHelper.getHumanSize(size)).append("\n");
+						report.append("\t\t\tinvalid: ").append(OmFileHelper.getHumanSize(invalid)).append("\n");
+						report.append("\t\t\tdeleted: ").append(OmFileHelper.getHumanSize(deleted)).append("\n");
+						report.append("\t\t\tmissing count: ").append(missing).append("\n");
+						report.append("\t\trest: ").append(OmFileHelper.getHumanSize(restSize)).append("\n");
+					}
+					{ //STREAMS
+						File streamsDir = OmFileHelper.getStreamsDir();
+						File hibernateDir = OmFileHelper.getStreamsHibernateDir();
+						if (cleanup) {
+							String hiberPath = hibernateDir.getCanonicalPath();
+							for (File f : streamsDir.listFiles()) {
+								if (!f.getCanonicalPath().equals(hiberPath)) {
+									FileHelper.removeRec(f);
+								}
+							}
+						}
+						long sectionSize = OmFileHelper.getSize(streamsDir);
+						report.append("Recordings allocates: ").append(OmFileHelper.getHumanSize(sectionSize)).append("\n");
+						long size = OmFileHelper.getSize(hibernateDir);
+						long restSize = sectionSize - size;
+						FlvRecordingDao recordDao = getApplicationContext(ctxName).getBean(FlvRecordingDao.class);
+						long[] params = {0, 0}; // [0] == deleted [1] == missing
+						for (FlvRecording rec : recordDao.getAllFlvRecordings()) {
+							checkRecordingFile(hibernateDir, rec.getFileHash(), rec.getDeleted(), params, cleanup);
+							checkRecordingFile(hibernateDir, rec.getAlternateDownload(), rec.getDeleted(), params, cleanup);
+							checkRecordingFile(hibernateDir, rec.getPreviewImage(), rec.getDeleted(), params, cleanup);
+						}
+						long invalid = 0;
+						for (File f : hibernateDir.listFiles()) {
+							if (f.isFile() && f.getName().endsWith(".flv")) {
+								FlvRecording rec = recordDao.getRecordingByHash(f.getName());
+								if (rec == null) {
+									cleanUpFile(invalid, cleanup, f);
+									String name = f.getName().substring(0, f.getName().length() - 5);
+									cleanUpFile(invalid, cleanup, new File(hibernateDir, name + ".avi"));
+									cleanUpFile(invalid, cleanup, new File(hibernateDir, name + ".jpg"));
+									cleanUpFile(invalid, cleanup, new File(hibernateDir, name + ".flv.meta"));
+								}
+							}
+						}
+						report.append("\t\tfinal: ").append(OmFileHelper.getHumanSize(size)).append("\n");
+						report.append("\t\t\tinvalid: ").append(OmFileHelper.getHumanSize(invalid)).append("\n");
+						report.append("\t\t\tdeleted: ").append(OmFileHelper.getHumanSize(params[0])).append("\n");
+						report.append("\t\t\tmissing count: ").append(params[1]).append("\n");
+						report.append("\t\trest: ").append(OmFileHelper.getHumanSize(restSize)).append("\n");
+					}
+					System.out.println(report);
+				} catch (Exception e) {
+					handleError("Files failed", e);
+				}
+				break;
+			case usage:
+			default:
+				usage();
+				break;
+		}
+		
+		System.out.println("... Done");
+		System.exit(0);
+	}
+	
+	private long cleanUpFile(long invalid, boolean cleanup, File f) {
+		if (f.exists()) {
+			if (cleanup) {
+				FileHelper.removeRec(f);
+			} else {
+				invalid += f.length();
+			}
+		}
+		return invalid;
+	}
+	private void checkRecordingFile(File hibernateDir, String name, boolean deleted, long[] params, boolean cleanup) {
+		File flv = name != null ? new File(hibernateDir, name) : null;
+		if (flv != null) {
+			if (flv.exists() && flv.isFile()) {
+				if (deleted) {
+					params[0] += flv.length();
+					if (cleanup) {
+						FileHelper.removeRec(flv);
+					}
+				}
+			} else {
+				params[1]++;
+			}
+		}
+	}
+	
+	private long getUserIdByProfile(String name) {
+		long result = -1;
+		if (name.startsWith(OmFileHelper.profilesPrefix)) {
+			try {
+				result = Long.parseLong(name.substring(OmFileHelper.profilesPrefix.length()));
+			} catch (Exception e) {
+				//noop
+			}
+		}
+		return result;
+	}
+	
+	private void checkAdminDetails(String ctxName) throws Exception {
+		cfg.username = cmdl.getOptionValue("user");
+		cfg.email = cmdl.getOptionValue("email");
+		cfg.group = cmdl.getOptionValue("group");
+		if (cfg.username == null || cfg.username.length() < USER_LOGIN_MINIMUM_LENGTH) {
+			System.out.println("User login was not provided, or too short, should be at least " + USER_LOGIN_MINIMUM_LENGTH + " character long.");
+			System.exit(1);
+		}
+		
+		try {
+			if (cfg.email == null || !MailUtil.matches(cfg.email)) {
+			    throw new AddressException("Invalid address");
+			}
+			new InternetAddress(cfg.email, true);
+		} catch (AddressException ae) {
+			System.out.println("Please provide non-empty valid email: '" + cfg.email + "' is not valid.");
+			System.exit(1);
+		}
+		if (cfg.group == null || cfg.group.length() < 1) {
+			System.out.println("User group was not provided, or too short, should be at least 1 character long: " + cfg.group);
+			System.exit(1);
+		}
+		cfg.password = cmdl.getOptionValue("password");
+		ConfigurationDao cfgDao = getApplicationContext(ctxName).getBean(ConfigurationDao.class);
+		if (invalidPassword(cfg.password, cfgDao)) {
+			System.out.print("Please enter password for the user '" + cfg.username + "':");
+			cfg.password = new BufferedReader(new InputStreamReader(System.in)).readLine();
+			if (invalidPassword(cfg.password, cfgDao)) {
+				System.out.println("Password was not provided, or too short, should be at least " + getMinPasswdLength(cfgDao) + " character long.");
+				System.exit(1);
+			}
+		}
+		Map<String, String> tzMap = ImportHelper.getAllTimeZones(TimeZone.getAvailableIDs());
+		cfg.ical_timeZone = null;
+		if (cmdl.hasOption("tz")) {
+			cfg.ical_timeZone = cmdl.getOptionValue("tz");
+			cfg.ical_timeZone = tzMap.containsKey(cfg.ical_timeZone) ? cfg.ical_timeZone : null;
+		}
+		if (cfg.ical_timeZone == null) {
+			System.out.println("Please enter timezone, Possible timezones are:");
+			
+			for (Map.Entry<String,String> me : tzMap.entrySet()) {
+				System.out.println(String.format("%1$-25s%2$s", "\"" + me.getKey() + "\"", me.getValue()));
+			}
+			System.exit(1);
+		}
+	}
+	
+	public void dropDB() throws Exception {
+		File conf = OmFileHelper.getPersistence();
+		ConnectionProperties connectionProperties = ConnectionPropertiesPatcher.getConnectionProperties(conf);
+		immediateDropDB(connectionProperties);
+	}
+	
+	private void dropDB(ConnectionProperties props) throws Exception {
+		if(cmdl.hasOption("drop")) {
+			immediateDropDB(props);
+		}
+	}
+	
+	private static LogImpl getLogImpl(JDBCConfiguration conf) {
+		return (LogImpl)conf.getLog(JDBCConfiguration.LOG_SCHEMA);
+	}
+
+	private static void runSchemaTool(JDBCConfigurationImpl conf, String action) throws Exception {
+		SchemaTool st = new SchemaTool(conf, action);
+		st.setIgnoreErrors(true);
+		st.setOpenJPATables(true);
+		st.setIndexes(false);
+		st.setPrimaryKeys(false);
+		if (!SchemaTool.ACTION_DROPDB.equals(action)) {
+			st.setSchemaGroup(st.getDBSchemaGroup());
+		}
+		st.run();
+	}
+	
+	private void immediateDropDB(ConnectionProperties props) throws Exception {
+		if (ctx != null) {
+			ctx.destroy();
+			ctx = null;
+		}
+    	JDBCConfigurationImpl conf = new JDBCConfigurationImpl();
+        try {
+        	conf.setPropertiesFile(OmFileHelper.getPersistence());
+        	conf.setConnectionDriverName(props.getDriver());
+        	conf.setConnectionURL(props.getURL());
+        	conf.setConnectionUserName(props.getLogin());
+        	conf.setConnectionPassword(props.getPassword());
+    		//HACK to suppress all warnings
+    		getLogImpl(conf).setLevel(Log.INFO);
+    		runSchemaTool(conf, SchemaTool.ACTION_DROPDB);
+    		runSchemaTool(conf, SchemaTool.ACTION_CREATEDB);
+        } finally {
+            conf.close();
+        }
+	}
+
+	private File checkRestoreFile(String file) {
+		File backup = new File(file);
+		if (!cmdl.hasOption("file") || !backup.exists() || !backup.isFile()) {
+			System.out.println("File should be specified, and point the existent zip file");
+			usage();
+			System.exit(1);
+		}
+		
+		return backup;
+	}
+	
+	private void restoreOm(String ctxName, File backup) {
+		InputStream is = null;
+		try {
+			BackupImport importCtrl = getApplicationContext(ctxName).getBean(BackupImport.class);
+			is = new FileInputStream(backup);
+			importCtrl.performImport(is);
+		} catch (Exception e) {
+			handleError("Restore failed", e);
+		} finally {
+			if (is != null) {
+				try {
+					is.close();
+				} catch (IOException e) {
+					throw new RuntimeException("Error while closing ldap config file", e);
+				}
+			}
+		}
+	}
+	
+	public static void main(String[] args) {
+		new Admin().process(args);
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/cli/ConnectionProperties.java b/src/install/java/org/apache/openmeetings/cli/ConnectionProperties.java
new file mode 100644
index 0000000..ea4e012
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/ConnectionProperties.java
@@ -0,0 +1,86 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.cli;

+

+import java.io.Serializable;

+

+public class ConnectionProperties implements Serializable {

+	private static final long serialVersionUID = 1L;

+

+	public enum DbType {

+		db2

+		, derby

+		, mssql

+		, mysql

+		, oracle

+		, postgresql

+	}

+

+	private String driver = "org.apache.derby.jdbc.EmbeddedDriver";

+	private String url = "jdbc:derby:openmeetings";

+	private String login = "user";

+	private String password = "secret";

+	private DbType dbType = DbType.derby;

+

+	public String getDriver() {

+		return driver;

+	}

+

+	public void setDriver(String driverName) {

+		this.driver = driverName;

+	}

+

+	public String getURL() {

+		return url;

+	}

+

+	public void setURL(String connectionURL) {

+		this.url = connectionURL;

+	}

+

+	public String getLogin() {

+		return login;

+	}

+

+	public void setLogin(String connectionLogin) {

+		this.login = connectionLogin;

+	}

+

+	public String getPassword() {

+		return password;

+	}

+

+	public void setPassword(String connectionPass) {

+		this.password = connectionPass;

+	}

+

+	public DbType getDbType() {

+		return dbType;

+	}

+

+	public void setDbType(DbType dbType) {

+		this.dbType = dbType;

+	}

+	

+	@Override

+	public String toString() {

+		return "ConnectionProperties [type=" + dbType + ", driver=" + driver + ", url=" + url

+				+ ", login=" + login + ", password=" + password + "]";

+	}

+}

diff --git a/src/install/java/org/apache/openmeetings/cli/ConnectionPropertiesPatcher.java b/src/install/java/org/apache/openmeetings/cli/ConnectionPropertiesPatcher.java
new file mode 100644
index 0000000..79819ee
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/ConnectionPropertiesPatcher.java
@@ -0,0 +1,188 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.cli;

+

+import java.io.File;

+

+import javax.xml.parsers.DocumentBuilder;

+import javax.xml.parsers.DocumentBuilderFactory;

+import javax.xml.transform.Transformer;

+import javax.xml.transform.TransformerFactory;

+import javax.xml.transform.dom.DOMSource;

+import javax.xml.transform.stream.StreamResult;

+import javax.xml.xpath.XPath;

+import javax.xml.xpath.XPathConstants;

+import javax.xml.xpath.XPathExpression;

+import javax.xml.xpath.XPathFactory;

+

+import org.apache.commons.lang3.StringEscapeUtils;

+import org.apache.commons.lang3.StringUtils;

+import org.apache.openmeetings.cli.ConnectionProperties.DbType;

+import org.apache.openmeetings.util.OmFileHelper;

+import org.w3c.dom.Attr;

+import org.w3c.dom.Document;

+import org.w3c.dom.Element;

+

+public abstract class ConnectionPropertiesPatcher {

+	protected static final String URL_PREFIX = "Url";

+	protected static final String DRIVER_PREFIX = "DriverClassName";

+	protected static final String USER_PREFIX = "Username";

+	protected static final String PASS_PREFIX = "Password";

+	protected ConnectionProperties props;

+	

+	public static ConnectionPropertiesPatcher getPatcher(ConnectionProperties props) {

+		ConnectionPropertiesPatcher patcher = null;

+		switch (props.getDbType()) {

+			case db2:

+				patcher = new Db2Patcher();

+				break;

+			case mssql:

+				patcher = new MssqlPatcher();

+				break;

+			case mysql:

+				patcher = new MysqlPatcher();

+				break;

+			case oracle:

+				patcher = new OraclePatcher();

+				break;

+			case postgresql:

+				patcher = new PostgresPatcher();

+				break;

+			case derby:

+			default:

+				patcher = new DerbyPatcher();

+				break;

+		}

+		patcher.props = props;

+		return patcher;

+	}

+	

+	public static ConnectionProperties getConnectionProperties(File conf) throws Exception {

+		ConnectionProperties props = new ConnectionProperties();

+		Document doc = getDocument(conf);

+		Attr attr = getConnectionProperties(doc);

+		String[] tokens = attr.getValue().split(",");

+		loadProperties(tokens, props);

+		

+		return props;

+	}

+	

+	private static Document getDocument(File xml) throws Exception {

+		DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();

+		//dbFactory.setNamespaceAware(true);

+		DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();

+		return dBuilder.parse(xml);

+	}

+	

+	private static Attr getConnectionProperties(Document doc) throws Exception {

+		XPath xPath = XPathFactory.newInstance().newXPath();

+		XPathExpression expr = xPath.compile("/persistence/persistence-unit/properties/property[@name='openjpa.ConnectionProperties']");

+

+		Element element = (Element)expr.evaluate(doc, XPathConstants.NODE);

+		return element.getAttributeNode("value");

+	}

+	

+	public static void patch(ConnectionProperties props) throws Exception {

+		ConnectionPropertiesPatcher patcher = getPatcher(props);

+		Document doc = getDocument(OmFileHelper.getPersistence(props.getDbType()));

+		Attr attr = getConnectionProperties(doc);

+		String[] tokens = attr.getValue().split(",");

+		patcher.patchAttribute(tokens);

+		attr.setValue(StringUtils.join(tokens, ","));

+		

+		TransformerFactory transformerFactory = TransformerFactory.newInstance();

+		Transformer transformer = transformerFactory.newTransformer();

+		DOMSource source = new DOMSource(doc);

+		transformer.transform(source, new StreamResult(OmFileHelper.getPersistence().getCanonicalPath())); //this constructor is used to avoid transforming path to URI

+	}

+	

+	public static ConnectionProperties patch(String dbType, String host, String port, String db, String user, String pass) throws Exception {

+		ConnectionProperties props = getConnectionProperties(OmFileHelper.getPersistence(dbType));

+		props.setLogin(user);

+		props.setPassword(pass);

+		ConnectionPropertiesPatcher patcher = getPatcher(props);

+		props.setURL(patcher.getUrl(props.getURL(), host, port, db));

+		patch(props);

+		return props;

+	}

+	

+	public static void updateUrl(ConnectionProperties props, String host, String port, String db) {

+		ConnectionPropertiesPatcher patcher = getPatcher(props);

+		props.setURL(patcher.getUrl(props.getURL(), host, port, db));

+	}

+	

+	protected void patchAttribute(String[] tokens) {

+		for (int i = 0; i < tokens.length; ++i) {

+			patchProp(tokens, i, USER_PREFIX, props.getLogin());

+			patchProp(tokens, i, PASS_PREFIX, props.getPassword() == null ? "" : props.getPassword());

+			patchProp(tokens, i, URL_PREFIX, props.getURL());

+		}

+	}

+

+	protected static void patchProp(String[] tokens, int idx, String name, String value) {

+		String prop = tokens[idx].trim();

+		if (prop.startsWith(name)) {

+			prop = name + "=" + StringEscapeUtils.escapeXml10(value);

+			tokens[idx] = prop;

+		}

+	}

+	

+	private static void loadProperties(String[] tokens, ConnectionProperties connectionProperties) {

+		String prop;

+		for (int i = 0; i < tokens.length; ++i) {

+			prop = getPropFromPersistence(tokens, i, DRIVER_PREFIX);

+			if (prop != null) {

+				connectionProperties.setDriver(prop);

+			}

+			

+			prop = getPropFromPersistence(tokens, i, USER_PREFIX);

+			if (prop != null) {

+				connectionProperties.setLogin(prop);

+			}

+			

+			prop = getPropFromPersistence(tokens, i, PASS_PREFIX);

+			if (prop != null) {

+				connectionProperties.setPassword(prop);

+			}

+

+			prop = getPropFromPersistence(tokens, i, URL_PREFIX);

+			if (prop != null) {

+				try {

+					//will try to "guess" dbType

+					String[] parts = prop.split(":");

+					connectionProperties.setDbType("sqlserver".equals(parts[1]) ? DbType.mssql : DbType.valueOf(parts[1]));

+				} catch (Exception e) {

+					//ignore

+				}

+				connectionProperties.setURL(prop);

+			}

+		}

+	}

+	

+	protected static String getPropFromPersistence(String[] tokens, int idx, String name){

+		String prop = tokens[idx].trim();

+		if (prop.startsWith(name)) {

+			//From "Username=root" getting only "root"

+			return prop.substring(prop.indexOf("=") + 1);

+		}

+		return null;

+	}

+	

+	protected abstract String getUrl(String url, String host, String port, String db);

+}

diff --git a/src/install/java/org/apache/openmeetings/cli/Db2Patcher.java b/src/install/java/org/apache/openmeetings/cli/Db2Patcher.java
new file mode 100644
index 0000000..b681979
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/Db2Patcher.java
@@ -0,0 +1,28 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.cli;

+

+public class Db2Patcher extends ConnectionPropertiesPatcher {

+	@Override

+	protected String getUrl(String _url, String host, String _port, String _db) {

+		String port = (_port == null) ? "50000" : _port;

+		String db = (_db == null) ? "openmeet" : _db;

+		return "jdbc:db2://" + host + ":" + port + "/" + db; 

+	}

+}

diff --git a/src/install/java/org/apache/openmeetings/cli/DerbyPatcher.java b/src/install/java/org/apache/openmeetings/cli/DerbyPatcher.java
new file mode 100644
index 0000000..ff5498e
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/DerbyPatcher.java
@@ -0,0 +1,33 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.cli;

+

+public class DerbyPatcher extends ConnectionPropertiesPatcher {

+	@Override

+	protected String getUrl(String _url, String host, String _port, String _db) {

+		String db = (_db == null) ? "openmeetings" : _db;

+		String suffix = _url.substring(_url.indexOf(';'));

+		

+		if (host != null && _port != null) {

+			//return "jdbc:derby" + "://" + host + ":" + _port + "/" + db + suffix;

+		}

+		

+		return "jdbc:derby" + ":" + db + suffix; 

+	}

+}

diff --git a/src/install/java/org/apache/openmeetings/cli/DummyServletContext.java b/src/install/java/org/apache/openmeetings/cli/DummyServletContext.java
new file mode 100644
index 0000000..777f983
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/DummyServletContext.java
@@ -0,0 +1,348 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.cli;

+

+import java.io.InputStream;

+import java.net.MalformedURLException;

+import java.net.URL;

+import java.util.Enumeration;

+import java.util.EventListener;

+import java.util.Map;

+import java.util.Set;

+

+import javax.servlet.Filter;

+import javax.servlet.FilterRegistration;

+import javax.servlet.FilterRegistration.Dynamic;

+import javax.servlet.RequestDispatcher;

+import javax.servlet.Servlet;

+import javax.servlet.ServletContext;

+import javax.servlet.ServletException;

+import javax.servlet.ServletRegistration;

+import javax.servlet.SessionCookieConfig;

+import javax.servlet.SessionTrackingMode;

+import javax.servlet.descriptor.JspConfigDescriptor;

+

+public class DummyServletContext implements ServletContext {

+	private String ctx;

+	

+	public DummyServletContext(String ctx) {

+		this.ctx = ctx;

+	}

+

+	@Override

+	public Dynamic addFilter(String arg0, String arg1) {

+		// stab

+		return null;

+	}

+

+	@Override

+	public Dynamic addFilter(String arg0, Filter arg1) {

+		// stab

+		return null;

+	}

+

+	@Override

+	public Dynamic addFilter(String arg0, Class<? extends Filter> arg1) {

+		// stab

+		return null;

+	}

+

+	@Override

+	public void addListener(String arg0) {

+		// stab

+	}

+

+	@Override

+	public <T extends EventListener> void addListener(T arg0) {

+		// stab

+	}

+

+	@Override

+	public void addListener(Class<? extends EventListener> arg0) {

+		// stab

+	}

+

+	@Override

+	public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, String arg1) {

+		// stab

+		return null;

+	}

+

+	@Override

+	public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, Servlet arg1) {

+		// stab

+		return null;

+	}

+

+	@Override

+	public javax.servlet.ServletRegistration.Dynamic addServlet(String arg0, Class<? extends Servlet> arg1) {

+		// stab

+		return null;

+	}

+

+	@Override

+	public <T extends Filter> T createFilter(Class<T> arg0) throws ServletException {

+		// stab

+		return null;

+	}

+

+	@Override

+	public <T extends EventListener> T createListener(Class<T> arg0) throws ServletException {

+		// stab

+		return null;

+	}

+

+	@Override

+	public <T extends Servlet> T createServlet(Class<T> arg0) throws ServletException {

+		// stab

+		return null;

+	}

+

+	@Override

+	public void declareRoles(String... arg0) {

+		// stab

+	}

+

+	@Override

+	public Object getAttribute(String arg0) {

+		// stab

+		return null;

+	}

+

+	@Override

+	public Enumeration<String> getAttributeNames() {

+		// stab

+		return null;

+	}

+

+	@Override

+	public ClassLoader getClassLoader() {

+		// stab

+		return null;

+	}

+

+	@Override

+	public ServletContext getContext(String arg0) {

+		// stab

+		return null;

+	}

+

+	@Override

+	public String getContextPath() {

+		return ctx;

+	}

+

+	@Override

+	public Set<SessionTrackingMode> getDefaultSessionTrackingModes() {

+		// stab

+		return null;

+	}

+

+	@Override

+	public int getEffectiveMajorVersion() {

+		// stab

+		return 0;

+	}

+

+	@Override

+	public int getEffectiveMinorVersion() {

+		// stab

+		return 0;

+	}

+

+	@Override

+	public Set<SessionTrackingMode> getEffectiveSessionTrackingModes() {

+		// stab

+		return null;

+	}

+

+	@Override

+	public FilterRegistration getFilterRegistration(String arg0) {

+		// stab

+		return null;

+	}

+

+	@Override

+	public Map<String, ? extends FilterRegistration> getFilterRegistrations() {

+		// stab

+		return null;

+	}

+

+	@Override

+	public String getInitParameter(String arg0) {

+		// stab

+		return null;

+	}

+

+	@Override

+	public Enumeration<String> getInitParameterNames() {

+		// stab

+		return null;

+	}

+

+	@Override

+	public JspConfigDescriptor getJspConfigDescriptor() {

+		// stab

+		return null;

+	}

+

+	@Override

+	public int getMajorVersion() {

+		// stab

+		return 0;

+	}

+

+	@Override

+	public String getMimeType(String arg0) {

+		// stab

+		return null;

+	}

+

+	@Override

+	public int getMinorVersion() {

+		// stab

+		return 0;

+	}

+

+	@Override

+	public RequestDispatcher getNamedDispatcher(String arg0) {

+		// stab

+		return null;

+	}

+

+	@Override

+	public String getRealPath(String arg0) {

+		// stab

+		return null;

+	}

+

+	@Override

+	public RequestDispatcher getRequestDispatcher(String arg0) {

+		// stab

+		return null;

+	}

+

+	@Override

+	public URL getResource(String arg0) throws MalformedURLException {

+		// stab

+		return null;

+	}

+

+	@Override

+	public InputStream getResourceAsStream(String arg0) {

+		// stab

+		return null;

+	}

+

+	@Override

+	public Set<String> getResourcePaths(String arg0) {

+		// stab

+		return null;

+	}

+

+	@Override

+	public String getServerInfo() {

+		// stab

+		return null;

+	}

+

+	@Override

+	public Servlet getServlet(String arg0) throws ServletException {

+		// stab

+		return null;

+	}

+

+	@Override

+	public String getServletContextName() {

+		// stab

+		return null;

+	}

+

+	@Override

+	public Enumeration<String> getServletNames() {

+		// stab

+		return null;

+	}

+

+	@Override

+	public ServletRegistration getServletRegistration(String arg0) {

+		// stab

+		return null;

+	}

+

+	@Override

+	public Map<String, ? extends ServletRegistration> getServletRegistrations() {

+		// stab

+		return null;

+	}

+

+	@Override

+	public Enumeration<Servlet> getServlets() {

+		// stab

+		return null;

+	}

+

+	@Override

+	public SessionCookieConfig getSessionCookieConfig() {

+		// stab

+		return null;

+	}

+

+	@Override

+	public String getVirtualServerName() {

+		// stab

+		return null;

+	}

+

+	@Override

+	public void log(String arg0) {

+		// stab

+	}

+

+	@Override

+	public void log(Exception arg0, String arg1) {

+		// stab

+	}

+

+	@Override

+	public void log(String arg0, Throwable arg1) {

+		// stab

+	}

+

+	@Override

+	public void removeAttribute(String arg0) {

+		// stab

+	}

+

+	@Override

+	public void setAttribute(String arg0, Object arg1) {

+		// stab

+	}

+

+	@Override

+	public boolean setInitParameter(String arg0, String arg1) {

+		// stab

+		return false;

+	}

+

+	@Override

+	public void setSessionTrackingModes(Set<SessionTrackingMode> arg0) {

+		// stab

+	}

+}

diff --git a/src/install/java/org/apache/openmeetings/cli/MssqlPatcher.java b/src/install/java/org/apache/openmeetings/cli/MssqlPatcher.java
new file mode 100644
index 0000000..681331d
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/MssqlPatcher.java
@@ -0,0 +1,28 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.cli;

+

+public class MssqlPatcher extends ConnectionPropertiesPatcher {

+	@Override

+	protected String getUrl(String _url, String host, String _port, String _db) {

+		String port = (_port == null) ? "1433" : _port;

+		String db = (_db == null) ? "openmeetings" : _db;

+		return "jdbc:sqlserver://" + host + ":" + port + ";databaseName=" + db;

+	}

+}

diff --git a/src/install/java/org/apache/openmeetings/cli/MysqlPatcher.java b/src/install/java/org/apache/openmeetings/cli/MysqlPatcher.java
new file mode 100644
index 0000000..163e710
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/MysqlPatcher.java
@@ -0,0 +1,29 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.cli;

+

+public class MysqlPatcher extends ConnectionPropertiesPatcher {

+	@Override

+	protected String getUrl(String _url, String host, String _port, String _db) {

+		String port = (_port == null) ? "3306" : _port;

+		String db = (_db == null) ? "openmeetings" : _db;

+		String suffix = _url.substring(_url.indexOf('?'));

+		return "jdbc:mysql://" + host + ":" + port + "/" + db + suffix;

+	}

+}

diff --git a/src/install/java/org/apache/openmeetings/cli/OmHelpFormatter.java b/src/install/java/org/apache/openmeetings/cli/OmHelpFormatter.java
new file mode 100644
index 0000000..8cfe911
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/OmHelpFormatter.java
@@ -0,0 +1,208 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.OptionGroup;
+import org.apache.commons.cli.Options;
+
+public class OmHelpFormatter extends HelpFormatter {
+	private static String GENERAL_OPTION_GROUP = "";
+	private int maxPrefixLength = 0;
+	
+	@SuppressWarnings("unchecked")
+	private List<OmOption> getReqOptions(Options opts) {
+		//suppose we have only 1 group (for now)
+		OptionGroup g = ((List<OptionGroup>)opts.getRequiredOptions()).get(0);
+		List<OmOption> result = new ArrayList<OmOption>();
+		for (Option o : g.getOptions()) {
+			result.add((OmOption)o);
+		}
+		Collections.sort(result, new Comparator<OmOption>() {
+			public int compare(OmOption o1, OmOption o2) {
+				return o1.getOrder() - o2.getOrder();
+			}
+		});
+		return result;
+	}
+	
+	private LinkedHashMap<String, List<OmOption>> getOptions(Options opts, int leftPad) {
+		final String longOptSeparator = " ";
+		final String lpad = createPadding(leftPad);
+		final String lpadParam = createPadding(leftPad + 2);
+		List<OmOption> reqOptions = getReqOptions(opts);
+		LinkedHashMap<String, List<OmOption>> map = new LinkedHashMap<String, List<OmOption>>(reqOptions.size());
+		map.put(GENERAL_OPTION_GROUP, new ArrayList<OmOption>());
+		for (OmOption o : reqOptions) {
+			map.put(o.getOpt(), new ArrayList<OmOption>());
+		}
+		for (Option _o : opts.getOptions()) {
+			OmOption o = (OmOption)_o;
+			//TODO need better check (required option should go first and should not be duplicated
+			boolean skipOption = map.containsKey(o.getOpt());
+			boolean mainOption = skipOption || o.getGroup() == null;
+			
+			// first create list containing only <lpad>-a,--aaa where
+			// -a is opt and --aaa is long opt; in parallel look for
+			// the longest opt string this list will be then used to
+			// sort options ascending
+			StringBuilder optBuf = new StringBuilder();
+			if (o.getOpt() == null) {
+				optBuf.append(mainOption ? lpad : lpadParam).append("   ").append(getLongOptPrefix())
+						.append(o.getLongOpt());
+			} else {
+				optBuf.append(mainOption ? lpad : lpadParam).append(getOptPrefix())
+						.append(o.getOpt());
+
+				if (o.hasLongOpt()) {
+					optBuf.append(',').append(getLongOptPrefix())
+							.append(o.getLongOpt());
+				}
+			}
+
+			if (o.hasArg()) {
+				String argName = o.getArgName();
+				if (argName != null && argName.length() == 0) {
+					// if the option has a blank argname
+					optBuf.append(' ');
+				} else {
+					optBuf.append(o.hasLongOpt() ? longOptSeparator : " ");
+					optBuf.append("<")
+							.append(argName != null ? o.getArgName()
+									: getArgName()).append(">");
+				}
+			}
+
+			o.setHelpPrefix(optBuf);
+			maxPrefixLength = Math.max(optBuf.length(), maxPrefixLength);
+			
+			if (skipOption) {
+				//TODO need better check (required option should go first and should not be duplicated
+				continue;
+			}
+			String grp = o.getGroup();
+			grp = grp == null ? GENERAL_OPTION_GROUP : grp;
+			String[] grps = grp.split(",");
+			for(String g : grps) {
+				map.get(g).add(o);
+			}
+		}
+		for (String _key : map.keySet()) {
+			final String key = _key;
+			List<OmOption> options = map.get(key);
+			Collections.sort(options, new Comparator<OmOption>(){
+				public int compare(OmOption o1, OmOption o2) {
+					boolean o1opt = !o1.isOptional(key);
+					boolean o2opt = !o2.isOptional(key);
+					return (o1opt && o2opt || !o1opt && !o2opt) ? (o1.getOpt() == null ? 1 : -1) : (o1opt ? -1 : 1);
+				}
+				
+			});
+			if (opts.hasOption(key)) {
+				options.add(0, (OmOption)opts.getOption(key));
+			}
+		}
+		return map;
+	}
+	
+	private StringBuilder getReqOptionsString(Options opts) {
+		String delim = "";
+		StringBuilder result = new StringBuilder();
+		for (Option o : getReqOptions(opts)) {
+			result.append(delim).append("-").append(o.getOpt());
+			delim = "|";
+		}
+		return result;
+	}
+	
+	@Override
+	protected StringBuffer renderOptions(StringBuffer sb, int width, Options options, int leftPad, int descPad) {
+		final String dpad = createPadding(descPad);
+		final String optional = "(optional) ";
+
+		LinkedHashMap<String, List<OmOption>> optList = getOptions(options, leftPad);
+
+		char[] delimiter = new char[width - 2];
+		Arrays.fill(delimiter, '-');
+
+		for (String key : optList.keySet()) {
+			if (GENERAL_OPTION_GROUP.equals(key)) {
+				sb.append("General options:").append(getNewLine());
+			}
+			for (OmOption option : optList.get(key)) {
+				StringBuilder optBuf = new StringBuilder(option.getHelpPrefix());
+
+				if (optBuf.length() < maxPrefixLength) {
+					optBuf.append(createPadding(maxPrefixLength - optBuf.length()));
+				}
+
+				optBuf.append(dpad);
+
+				int nextLineTabStop = maxPrefixLength + descPad;
+
+				if (option.isOptional(key)) {
+					optBuf.append(optional);
+				}
+				if (option.getDescription() != null) {
+					optBuf.append(option.getDescription());
+				}
+
+				renderWrappedText(sb, width, nextLineTabStop, optBuf.toString());
+
+				sb.append(getNewLine());
+			}
+			sb.append(delimiter).append(getNewLine());
+		}
+		return sb;
+	}
+
+	@Override
+	public void printHelp(PrintWriter pw, int width, String cmdLineSyntax,
+			String header, Options options, int leftPad, int descPad,
+			String footer, boolean autoUsage) {
+		if ((cmdLineSyntax == null) || (cmdLineSyntax.length() == 0)) {
+			throw new IllegalArgumentException("cmdLineSyntax not provided");
+		}
+
+		printUsage(pw, width, cmdLineSyntax, options);
+
+		if ((header != null) && (header.trim().length() > 0)) {
+			printWrapped(pw, width, header);
+		}
+
+		printOptions(pw, width, options, leftPad, descPad);
+
+		if ((footer != null) && (footer.trim().length() > 0)) {
+			printWrapped(pw, width, footer);
+		}
+	}
+    
+	public void printUsage(PrintWriter pw, int width, String app, Options opts) {
+		pw.println(String.format("usage: %1$s [%2$s] [options]", app, getReqOptionsString(opts)));
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/cli/OmOption.java b/src/install/java/org/apache/openmeetings/cli/OmOption.java
new file mode 100644
index 0000000..bca3109
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/OmOption.java
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cli;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.cli.Option;
+
+public class OmOption extends Option {
+	private static final long serialVersionUID = 1L;
+	private String group = null;
+	private Map<String, Boolean> optional = null;
+	private int order = 0;
+	private String helpPrefix = "";
+
+	public OmOption(String group, String opt, String longOpt, boolean hasArg,
+			String description, boolean optional) throws IllegalArgumentException {
+		this(group, 0, opt, longOpt, hasArg, description);
+		setOptional(optional);
+	}
+
+	public OmOption(String group, String opt, String longOpt, boolean hasArg,
+			String description, String optional) throws IllegalArgumentException {
+		this(group, 0, opt, longOpt, hasArg, description);
+		setOptional(optional);
+	}
+
+	public OmOption(String group, int order, String opt, String longOpt, boolean hasArg,
+			String description) throws IllegalArgumentException {
+		super(opt, longOpt, hasArg, description);
+		this.group = group;
+		this.setOrder(order);
+	}
+
+	public OmOption(String group, String opt, String longOpt, boolean hasArg,
+			String description) throws IllegalArgumentException {
+		this(group, 0, opt, longOpt, hasArg, description);
+	}
+
+	public String getGroup() {
+		return group;
+	}
+
+	public void setGroup(String group) {
+		this.group = group;
+	}
+
+	public boolean isOptional(String group) {
+		boolean result = false;
+		if (optional != null) {
+			String[] grps = group.split(",");
+			for(String g : grps) {
+				result |= optional.containsKey(g) ? optional.get(g) : false;
+			}
+		}
+		return result;
+	}
+
+	public void setOptional(boolean val) {
+		setOptional(group);
+	}
+	
+	public void setOptional(String group) {
+		String[] grps = group.split(",");
+		optional = new HashMap<String, Boolean>(grps.length);
+		for(String g : grps) {
+			optional.put(g, true);
+		}
+	}
+
+	public int getOrder() {
+		return order;
+	}
+
+	public void setOrder(int order) {
+		this.order = order;
+	}
+
+	public String getHelpPrefix() {
+		return helpPrefix;
+	}
+
+	public void setHelpPrefix(StringBuilder helpPrefix) {
+		this.helpPrefix = helpPrefix.toString();
+	}
+
+	public void setHelpPrefix(String helpPrefix) {
+		this.helpPrefix = helpPrefix;
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/cli/OraclePatcher.java b/src/install/java/org/apache/openmeetings/cli/OraclePatcher.java
new file mode 100644
index 0000000..6cc9428
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/OraclePatcher.java
@@ -0,0 +1,28 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.cli;

+

+public class OraclePatcher extends ConnectionPropertiesPatcher {

+	@Override

+	protected String getUrl(String _url, String host, String _port, String _db) {

+		String port = (_port == null) ? "1521" : _port;

+		String db = (_db == null) ? "openmeetings" : _db;

+		return "jdbc:oracle:thin:@" + host + ":" + port + ":" + db; 

+	}

+}

diff --git a/src/install/java/org/apache/openmeetings/cli/PostgresPatcher.java b/src/install/java/org/apache/openmeetings/cli/PostgresPatcher.java
new file mode 100644
index 0000000..e1b885c
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/cli/PostgresPatcher.java
@@ -0,0 +1,28 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.cli;

+

+public class PostgresPatcher extends ConnectionPropertiesPatcher {

+	@Override

+	protected String getUrl(String _url, String host, String _port, String _db) {

+		String port = (_port == null) ? "5432" : _port;

+		String db = (_db == null) ? "openmeetings" : _db;

+		return "jdbc:postgresql://" + host + ":" + port + "/" + db; 

+	}

+}

diff --git a/src/install/java/org/apache/openmeetings/installation/ImportInitvalues.java b/src/install/java/org/apache/openmeetings/installation/ImportInitvalues.java
new file mode 100644
index 0000000..8995baf
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/installation/ImportInitvalues.java
@@ -0,0 +1,733 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.installation;
+
+import static org.apache.openmeetings.db.dao.basic.ConfigurationDao.DEFAULT_APP_NAME;
+import static org.apache.openmeetings.db.dao.basic.ConfigurationDao.DEFAULT_MAX_UPLOAD_SIZE;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPLICATION_BASE_URL;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPOINTMENT_REMINDER_MINUTES;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CALENDAR_FIRST_DAY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CRYPT_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_MYROOMS_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_RSS_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_GROUP_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANDING_ZONE;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LDAP_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FRONTEND_REGISTER_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_IGNORE_BAD_SSL;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_LOGIN_MIN_LENGTH_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MAX_UPLOAD_SIZE_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_OAUTH_REGISTER_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_PASS_MIN_LENGTH_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_RSS_FEED1_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_RSS_FEED2_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_ALLOW_REMOTE;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS_SHOW;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_QUALITY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SOAP_REGISTER_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_LOGIN_MINIMUM_LENGTH;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_PASSWORD_MINIMUM_LENGTH;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.util.Date;
+import java.util.Iterator;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.basic.ErrorDao;
+import org.apache.openmeetings.db.dao.basic.NavigationDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentCategoryDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.dao.room.SipDao;
+import org.apache.openmeetings.db.dao.server.OAuth2Dao;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.SalutationDao;
+import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomOrganisation;
+import org.apache.openmeetings.db.entity.server.OAuthServer;
+import org.apache.openmeetings.db.entity.server.OAuthServer.RequestMethod;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class ImportInitvalues {
+	private static final Logger log = Red5LoggerFactory.getLogger(ImportInitvalues.class, webAppRootKey);
+
+	@Autowired
+	private ConfigurationDao cfgDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private StateDao statemanagement;
+	@Autowired
+	private NavigationDao navimanagement;
+	@Autowired
+	private ErrorDao errorManagement;
+	@Autowired
+	private SalutationDao salutationmanagement;
+	@Autowired
+	private AppointmentCategoryDao appointmentCategoryDaoImpl;
+	@Autowired
+	private AppointmentReminderTypDao appointmentReminderTypDaoImpl;
+	@Autowired
+	private PollDao pollManager;
+	@Autowired
+	private SipDao sipDao;
+	@Autowired
+	private OAuth2Dao oauthDao;
+	@Autowired
+	private RoomTypeDao roomTypeDao;
+	@Autowired
+	private OrganisationDao organisationDao;
+	@Autowired
+	private RoomDao roomDao;
+	
+	
+	private int progress = 0;
+
+	public int getProgress() {
+		return progress;
+	}
+	
+	public void loadMainMenu() {
+		/*
+		 * ######################## Dashboard Menu Points
+		 */
+		navimanagement.addGlobalStructure("home", 1, 124, false, true, 1,
+				"home", false, 582L);
+		navimanagement.addMainStructure("dashboardModuleStartScreen", null, 1,
+				290, true, false, 1, "Dashboard Module", 1, false, 1450L);
+		navimanagement.addMainStructure("dashboardModuleCalendar", null, 2,
+				291, true, false, 1, "Module Calendar", 1, false, 1451L);
+
+		/*
+		 * ######################## Conference Menu Points
+		 */
+
+		navimanagement.addGlobalStructure("meetings", 2, 792, false, true, 1,
+				"List of Conference Rooms Global Navi", false, 793L);
+
+		navimanagement.addMainStructure("conferenceModuleRoomList",
+				"publicTabButton", 1, 777, true, false, 1,
+				"List of Conference Rooms Main Navi", 2, false, 1506L);
+
+		navimanagement.addMainStructure("conferenceModuleRoomList",
+				"privateTabButton", 2, 779, true, false, 1,
+				"List of Conference Rooms Main Navi", 2, false, 1507L);
+
+		navimanagement.addMainStructure("conferenceModuleRoomList",
+				"myTabButton", 3, 781, true, false, 1,
+				"List of Conference Rooms Main Navi", 2, false, 1508L);
+
+		/*
+		 * ######################## Recording Menu Points - disabled by default
+		 */
+
+		navimanagement.addGlobalStructure("record", 3, 395, false, true, 1,
+				"record", false, 583L);
+		navimanagement.addMainStructure("recordModule", null, 1, 395, true,
+				false, 1, "Module Recording Player", 3, false, 1452L);
+
+		/*
+		 * ######################## Event Menu Points
+		 */
+
+		navimanagement.addGlobalStructure("events", 4, 3, false, true, 1,
+				"List of Event Rooms Global Navi", true, 585L);
+
+		navimanagement
+				.addMainStructure("eventModuleRoomList", null, 1, 3, true,
+						false, 1, "List of Event Rooms Main Navi", 4, false,
+						null);
+
+		/*
+		 * ######################## Moderation Menu Points - disabled by default
+		 */
+		navimanagement.addGlobalStructure("moderate", 5, 649L, false, true, 2,
+				"Moderation Menu", true, 660L);
+
+		navimanagement.addMainStructure("moderatorModuleUser", null, 1, 650,
+				true, false, 1, "Moderate Users", 5, false, null);
+
+		navimanagement.addMainStructure("moderatorModuleRoom", null, 1, 651,
+				true, false, 1, "Moderate Rooms", 5, false, null);
+
+		/*
+		 * ######################## Administration Menu Points
+		 */
+
+		navimanagement.addGlobalStructure("admin", 6, 6, false, true, 3,
+				"Administration Menu", false, 586L);
+
+		navimanagement.addMainStructure("adminModuleUser", null, 14, 125, true,
+				false, 2, "Administration of Users", 6, false, 1454L);
+
+		navimanagement.addMainStructure("adminModuleConnections", null, 15,
+				597, true, false, 3, "Aministration of Connections", 6, false,
+				1455L);
+
+		navimanagement.addMainStructure("adminModuleOrg", null, 16, 127, true,
+				false, 3, "Administration of Organizations", 6, false, 1456L);
+
+		navimanagement.addMainStructure("adminModuleRoom", null, 17, 186, true,
+				false, 3, "Administration of Rooms", 6, false, 1457L);
+
+		navimanagement.addMainStructure("adminModuleConfiguration", null, 18,
+				263, true, false, 3, "Administration of Configuration", 6,
+				false, 1458L);
+
+		navimanagement.addMainStructure("adminModuleLanguages", null, 19, 348,
+				true, false, 3, "Administration of Languages", 6, false, 1459L);
+
+		navimanagement.addMainStructure("adminModuleLDAP", null, 20, 1103,
+				true, false, 3, "Administration of LDAP Configs", 6, false,
+				1460L);
+
+		navimanagement.addMainStructure("adminModuleOAuth", null, 21, 1571, 
+				true, false, 3, "Administration of OAuth2 servers", 6, false, 1572L);
+
+		navimanagement.addMainStructure("adminModuleBackup", null, 22, 367,
+				true, false, 3, "Administration of Backups", 6, false, 1461L);
+
+		navimanagement.addMainStructure("adminModuleServers", null, 23, 1498,
+				true, false, 3, "Administration of Servers", 6, false, 1499L);
+		log.debug("MainMenu ADDED");
+	}
+	
+	public void loadErrorTypes() {
+		errorManagement.addErrorType(new Long(1), new Long(322));
+		errorManagement.addErrorType(new Long(2), new Long(323));
+		log.debug("Error types ADDED");
+	}
+
+	public void loadErrorMappingsFromXML() throws Exception {
+		SAXReader reader = new SAXReader();
+		Document document = reader.read(new File(OmFileHelper.getLanguagesDir(), OmFileHelper.nameOfErrorFile));
+
+		Element root = document.getRootElement();
+
+		for (@SuppressWarnings("unchecked")
+		Iterator<Element> it = root.elementIterator("row"); it.hasNext();) {
+
+			Element row = it.next();
+
+			Long errorvalues_id = null;
+			Long fieldvalues_id = null;
+			Long errortype_id = null;
+
+			for (@SuppressWarnings("unchecked")
+			Iterator<Element> itSub = row.elementIterator("field"); itSub.hasNext();) {
+				Element field = itSub.next();
+
+				String name = field.attributeValue("name");
+				String text = field.getText();
+				// System.out.println("NAME | TEXT "+name+" | "+text);
+				if (name.equals("errorvalues_id")) {
+					errorvalues_id = Long.valueOf(text);
+				}
+				if (name.equals("fieldvalues_id")) {
+					fieldvalues_id = Long.valueOf(text);
+				}
+				if (name.equals("errortype_id")) {
+					errortype_id = Long.valueOf(text);
+				}
+			}
+
+			errorManagement.addErrorValues(errorvalues_id, errortype_id, fieldvalues_id);
+		}
+		log.debug("ErrorMappings ADDED");
+	}
+
+	public void loadSalutations() {
+		salutationmanagement.addUserSalutation("Mr", 261);
+		salutationmanagement.addUserSalutation("Ms", 262);
+		salutationmanagement.addUserSalutation("Mrs", 841);
+		salutationmanagement.addUserSalutation("Dr", 842);
+		salutationmanagement.addUserSalutation("Prof", 1464);
+		log.debug("Salutations ADDED");
+	}
+
+	public void loadConfiguration(InstallationConfig cfg) {
+		cfgDao.add(CONFIG_CRYPT_KEY, cfg.cryptClassName, null,
+				"This Class is used for Authentification-Crypting. "
+						+ "Be carefull what you do here! If you change it while "
+						+ "running previous Pass of users will not be workign anymore! "
+						+ "for more Information see http://openmeetings.apache.org/CustomCryptMechanism.html");
+
+		cfgDao.add(CONFIG_FRONTEND_REGISTER_KEY, cfg.allowFrontendRegister, null, "Is user register available on login screen");
+		cfgDao.add(CONFIG_SOAP_REGISTER_KEY, "1", null, "Is user register available via SOAP/REST");
+		cfgDao.add(CONFIG_OAUTH_REGISTER_KEY, "1", null, "Is user register available via OAuth");
+		// this group_id is the Organisation of users who register through the frontend or SOAP
+		cfgDao.add(CONFIG_DEFAULT_GROUP_ID, "1", null, "");
+
+		cfgDao.add("smtp_server", cfg.smtpServer, null,
+				"this is the smtp server to send messages");
+
+		cfgDao.add("smtp_port", "" + cfg.smtpPort, null,
+				"this is the smtp server port normally 25");
+
+		cfgDao.add("system_email_addr", cfg.mailReferer, null, "all send e-mails by the system will have this address");
+
+		cfgDao.add("email_username", cfg.mailAuthName, null, "System auth email username");
+
+		cfgDao.add("email_userpass", cfg.mailAuthPass, null, "System auth email password");
+
+		cfgDao.add("mail.smtp.starttls.enable", cfg.mailUseTls, null, "Enable TLS 1=true, 0=false");
+		
+		cfgDao.add("mail.smtp.connection.timeout", "30000", null,
+				"Socket connection timeout value in milliseconds. Default is 30 seconds (30000).");
+		
+		cfgDao.add("mail.smtp.timeout", "30000", null,
+				"Socket I/O timeout value in milliseconds. Default is 30 seconds (30000).");
+
+		cfgDao.add("application.name", DEFAULT_APP_NAME, null, "Name of the Browser Title window");
+
+		// "1" == "EN"
+		cfgDao.add(CONFIG_DEFAULT_LANG_KEY, cfg.defaultLangId, null, "Default System Language ID see languages.xml");
+
+		cfgDao.add("swftools_zoom", "" + cfg.swfZoom, null,
+				"dpi for conversion of PDF to SWF (should be an integer between 50 and  600 with a default value of 100 dpi)");
+
+		cfgDao.add("swftools_jpegquality", "" + cfg.swfJpegQuality, null,
+				"compression quality for conversion of PDF to SWF (should be an integer between 1 and 100, with a default value of 85)");
+
+		cfgDao.add("swftools_path", cfg.swfPath, null, "Path To SWF-Tools");
+
+		cfgDao.add("imagemagick_path", cfg.imageMagicPath, null, "Path to ImageMagick tools");
+
+		cfgDao.add("sox_path", cfg.soxPath, null, "Path To SoX-Tools");
+
+		cfgDao.add("ffmpeg_path", cfg.ffmpegPath, null, "Path To FFMPEG");
+		cfgDao.add("office.path", cfg.officePath, null,
+				"The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically");
+		cfgDao.add("jod.path", cfg.jodPath, null,
+				"The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar");
+
+		cfgDao.add(CONFIG_RSS_FEED1_KEY, cfg.urlFeed, null, "Feed URL");
+
+		cfgDao.add(CONFIG_RSS_FEED2_KEY, cfg.urlFeed2, null, "Feed URL 2");
+
+		cfgDao.add("sendEmailAtRegister", cfg.sendEmailAtRegister, null,
+				"User get a EMail with their Account data. Values: 0(No) or 1(Yes)");
+
+		cfgDao.add("sendEmailWithVerficationCode", cfg.sendEmailWithVerficationCode, null,
+				"User must activate their account by clicking on the "
+					+ "activation-link in the registering Email. Values: 0(No) or 1(Yes) "
+					+ "It makes no sense to make this(sendEmailWithVerficationCode) 1(Yes) while "
+					+ "sendEmailAtRegister is 0(No) cause you need"
+					+ "to send a EMail.");
+		cfgDao.add("default_export_font", cfg.defaultExportFont, null,
+				"The Name of the Font used for exporting/render Images from Whiteboard"
+					+ "The Font has to exist on the Server which runs Red5");
+
+		cfgDao.add("default.rpc.userid", "" + 1, null, "The User-Id of the Control User in OpenMeetings");
+
+		cfgDao.add(CONFIG_APPLICATION_BASE_URL, cfg.baseUrl, null, "Base URL your OPenmeetings installation will be accessible at.");
+		
+		// ***************************************
+		// ***************************************
+		// red5SIP Integration Coniguration Values
+		// ***************************************
+
+		cfgDao.add("red5sip.enable", cfg.red5SipEnable, null, "Enable to enable the red5SIP integration ");
+		cfgDao.add("red5sip.room_prefix", cfg.red5SipRoomPrefix, null,
+				"Numerical prefix for OM rooms created inside the SIP");
+		cfgDao.add("red5sip.exten_context", cfg.red5SipExtenContext, null,
+				"Enable to enable the red5SIP integration ");
+
+		// ***************************************
+		// ***************************************
+		// Timezone settings
+		// ***************************************
+
+		cfgDao.add("default.timezone", cfg.ical_timeZone, null, "This is the default timezone if nothing is specified");
+
+		// ***************************************
+		// ***************************************
+		// additional settings
+		// ***************************************
+
+		cfgDao.add(CONFIG_SCREENSHARING_QUALITY, "1", null,
+				"Default selection in ScreenSharing Quality:\n 0 - bigger frame rate, no resize\n 1 - no resize\n 2 - size == 1/2 of selected area\n 3 - size == 3/8 of selected area");
+
+		cfgDao.add(CONFIG_SCREENSHARING_FPS, "10", null, "Default selection in ScreenSharing FPS");
+		cfgDao.add(CONFIG_SCREENSHARING_FPS_SHOW, "true", null, "Is screensharing FPS should be displayed or not (true/false)");
+		cfgDao.add(CONFIG_SCREENSHARING_ALLOW_REMOTE, "true", null, "Is remote control will be enabled while screensharing. Allowing remote control will be not possible in case it is set to 'false' (true/false)");
+
+		cfgDao.add(CONFIG_DASHBOARD_SHOW_MYROOMS_KEY, "1", null, "Show My Rooms Tab");
+
+		cfgDao.add("dashboard.show.chat", "1", null, "Show Chat Tab");
+
+		cfgDao.add(CONFIG_DASHBOARD_SHOW_RSS_KEY, "0", null, "Show RSS Tab");
+
+		cfgDao.add("show.whiteboard.draw.status", "0", null,
+				"Display name of the user who draw the current object (User Name auto-disapper after 3 seconds.");
+
+		cfgDao.add(CONFIG_MAX_UPLOAD_SIZE_KEY, "" + DEFAULT_MAX_UPLOAD_SIZE, null,
+				"Maximum size of upload file (bytes)"); // defaults to 1GB
+
+		cfgDao.add(CONFIG_APPOINTMENT_REMINDER_MINUTES, "15", null,
+				"The number of minutes before reminder emails are send. Set to 0 to disable reminder emails");
+
+		cfgDao.add(CONFIG_LOGIN_MIN_LENGTH_KEY, "" + USER_LOGIN_MINIMUM_LENGTH, null,
+				"Number of chars needed in a user login");
+
+		cfgDao.add(CONFIG_PASS_MIN_LENGTH_KEY, "" + USER_PASSWORD_MINIMUM_LENGTH, null,
+				"Number of chars needed in a user login");
+
+		cfgDao.add("calendar.conference.rooms.default.size", "50", null,
+				"Default number of participants conference room created via calendar");
+
+		cfgDao.add("use.old.style.ffmpeg.map.option", "0", null,
+				"specify a 1 if you would like to use old FFMPEG -map option with 0.0 instead of 0:0");
+
+		// give exclusive audio key code
+		cfgDao.add("exclusive.audio.keycode", "123", null,
+				"A hot key code for the 'give exclusive audio' functionality. Keycode 123 is F12");
+		// mute/unmute audio key code
+		cfgDao.add("mute.keycode", "118", null,
+				"A hot key code for the 'mute/unmute audio' functionality. Keycode 118 is F7");
+		
+		// system-wide ldap params
+		cfgDao.add(CONFIG_DEFAULT_LDAP_ID, "0", null, "Ldap domain selected by default in the login screen");
+
+		// set inviter's email address as ReplyTo in email invitations
+		cfgDao.add("inviter.email.as.replyto", cfg.replyToOrganizer, null,
+				"Set inviter's email address as ReplyTo in email invitations (1 == set, 0 == NOT set)");
+
+		cfgDao.add(CONFIG_DEFAULT_LANDING_ZONE, "user/dashboard", null
+				, "Area to be shown to the user after login. Possible values are: "
+					+ "user/dashboard, user/calendar, user/record, rooms/my, rooms/group, rooms/public, admin/user, admin/connection"
+					+ ", admin/group, admin/room, admin/config, admin/lang, admin/ldap, admin/backup, admin/server, admin/oauth2");
+		
+		// oauth2 params
+		cfgDao.add(CONFIG_IGNORE_BAD_SSL, "no", null, 
+				"Set \"yes\" or \"no\" to enable/disable ssl certifications checking for OAuth2");
+
+		cfgDao.add(CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY, "", null,
+				"Users entered the room via invitationHash or secureHash will be redirected to this URL on connection lost");
+		cfgDao.add(CONFIG_CALENDAR_FIRST_DAY, "0", null, "The day that each week begins. The value must be a number that represents the day of the week. Sunday=0, Monday=1, Tuesday=2, etc.");
+		
+		log.debug("Configurations ADDED");
+	}
+
+	public void loadRoomTypes() {
+		long conference_Id = roomTypeDao.addRoomType(
+				"conference", 1541, false);
+		log.debug("conference_Id: " + conference_Id);
+
+		// Audience room type is not in use anymore
+		roomTypeDao.addRoomType("audience", -1, true);
+
+		long restricted_Id = roomTypeDao.addRoomType(
+				"restricted", 1542, false);
+		log.debug("restricted_Id: " + restricted_Id);
+
+		long interview_Id = roomTypeDao.addRoomType(
+				"interview", 1543, false);
+		log.debug("interview_Id: " + interview_Id);
+
+		// Custom room type is not in use anymore
+		roomTypeDao.addRoomType("custom", -2, true);
+		log.debug("RoomTypes ADDED");
+	}
+
+	private Room createRoom(String name, long typeId, long capacity, boolean isPublic, Long orgId) {
+		Room r = new Room();
+		r.setName(name);
+		r.setComment("");
+		r.setStarttime(new Date());
+		r.setNumberOfPartizipants(capacity);
+		r.setRoomtype(roomTypeDao.get(typeId));
+		r.setIspublic(isPublic);
+		r.setAllowUserQuestions(true);
+		r.setIsAudioOnly(false);
+		r.setAllowFontStyles(true);
+
+		r.setAppointment(false);
+
+		r.setIsDemoRoom(false);
+		r.setDemoTime(null);
+
+		r.setIsModeratedRoom(false);
+		r.setHideTopBar(false);
+
+		r.setDeleted(false);
+
+		r.setIsClosed(false);
+		r.setRedirectURL(null);
+
+		r.setOwnerId(null);
+
+		r.setWaitForRecording(false);
+		r.setAllowRecording(true);
+		
+		r.setHideChat(false);
+		r.setHideActivitiesAndActions(false);
+		r.setHideActionsMenu(false);
+		r.setHideFilesExplorer(false);
+		r.setHideScreenSharing(false);	
+		r.setHideWhiteboard(false);
+		if (orgId != null) {
+			RoomOrganisation ro = new RoomOrganisation();
+			ro.setRoom(r);
+			ro.setOrganisation(organisationDao.get(orgId));
+			ro.setStarttime(new Date());
+		}
+		r = roomDao.update(r, null);
+		return r;
+	}
+	public void loadDefaultRooms(boolean createRooms) {
+		if (createRooms) {
+			// hardcoded IDs (they are not intended to be changed)
+			long conference_Id = 1;
+			long restricted_Id = 3;
+			long interview_Id = 4;
+
+			createRoom("public Interview Room", interview_Id, 16L, true, null);
+			createRoom("public Conference Room", conference_Id, 32L, true, null);
+			Room r = createRoom("public Video Only Room", conference_Id, 32L, true, null);
+			r.setHideWhiteboard(true);
+			roomDao.update(r, null);
+			createRoom("public Video And Whiteboard Room", conference_Id, 32L, true, null);
+			createRoom("public Restricted Room", restricted_Id, 100L, true, null);
+			r = createRoom("restricted room with micro option set", restricted_Id, 100L, true, null);
+			r.setShowMicrophoneStatus(true);
+			roomDao.update(r, null);
+
+			r = createRoom("conference room with micro option set", conference_Id, 32L, true, null);
+			r.setShowMicrophoneStatus(true);
+			roomDao.update(r, null);
+
+			createRoom("private Conference Room", conference_Id, 32L, false, 1L);
+		}
+	}
+
+	public void loadInitUserAndOrganisation(InstallationConfig cfg) throws Exception {
+		// Add default group
+		Organisation org = new Organisation();
+		org.setName(cfg.group);
+		org.setInsertedby(1L);
+		org.setDeleted(false);
+		org.setStarttime(new Date());
+		org = organisationDao.update(org, null);
+
+		User u = userDao.getNewUserInstance(null);
+		u.setType(User.Type.user);
+		u.getRights().add(Right.Admin);
+		u.getRights().add(Right.Soap);
+		u.setLogin(cfg.username);
+		u.setFirstname("firstname");
+		u.setLastname("lastname");
+		u.getAdresses().setEmail(cfg.email);
+		u.getOrganisation_users().add(new Organisation_Users(org));
+
+		u = userDao.update(u, cfg.password, -1);
+
+		log.debug("Installation - User Added user-Id " + u.getUser_id());
+
+		if (u.getUser_id() == null) {
+			throw new Exception("Unable to add user");
+		}
+	}
+
+	/**
+	 * import all language Names from the xml file
+	 * 
+	 * @param filePath
+	 * @throws Exception
+	 */
+	private void loadCountriesFiles() throws Exception {
+		SAXReader reader = new SAXReader();
+		Document document = reader.read(new File(
+				OmFileHelper.getLanguagesDir(),
+				OmFileHelper.nameOfCountriesFile));
+
+		Element root = document.getRootElement();
+
+		for (@SuppressWarnings("rawtypes")
+		Iterator it = root.elementIterator("country"); it.hasNext();) {
+			Element item = (Element) it.next();
+
+			statemanagement.addState(item.attributeValue("name"),
+					item.attributeValue("short"),
+					Integer.parseInt(item.attributeValue("code")));
+		}
+		log.debug("Countries ADDED");
+	}
+
+	/**
+	 * @author o.becherer initial fillment of Appointmentcategories
+	 */
+	// ------------------------------------------------------------------------------
+	public void loadInitAppointmentCategories() {
+		log.debug("ImportInitValues.loadInitAppointmentCategories");
+
+		appointmentCategoryDaoImpl.addAppointmentCategory(new Long(-1), "default", "default");
+	}
+
+	// ------------------------------------------------------------------------------
+
+	/**
+	 * @author o.becherer initial fillment of AppointMentReminderTypes
+	 */
+	// ------------------------------------------------------------------------------
+	public void loadInitAppointmentReminderTypes() {
+		log.debug("ImportInitValues.loadInitAppointmentReminderTypes");
+
+		appointmentReminderTypDaoImpl.addAppointmentReminderTyps(-1L, "do not send notification", 1568);
+		appointmentReminderTypDaoImpl.addAppointmentReminderTyps(-1L, "simple email", 1569);
+		appointmentReminderTypDaoImpl.addAppointmentReminderTyps(-1L, "iCal email", 1570);
+	}
+
+	public void loadInitialOAuthServers() throws Exception {
+		// Yandex
+		OAuthServer yandexServer = new OAuthServer();
+		yandexServer.setName("Yandex");
+		yandexServer.setIconUrl("http://yandex.st/morda-logo/i/favicon.ico");
+		yandexServer.setClientId("<put your client_id>");
+		yandexServer.setClientSecret("<put your client_secret>");
+		yandexServer.setEnabled(false);
+		yandexServer.setRequestInfoUrl("https://login.yandex.ru/info?format=json&oauth_token={$access_token}");
+		yandexServer.setRequestTokenUrl("https://oauth.yandex.ru/token");
+		yandexServer.setRequestKeyUrl("https://oauth.yandex.ru/authorize?response_type=code&client_id={$client_id}");
+		yandexServer.setRequestTokenAttributes("grant_type=authorization_code&code={$code}&client_id={$client_id}&client_secret={$client_secret}");
+		yandexServer.setRequestTokenMethod(RequestMethod.POST);
+		yandexServer.setLoginParamName("login");
+		yandexServer.setEmailParamName("default_email");
+		yandexServer.setFirstnameParamName("first_name");
+		yandexServer.setLastnameParamName("last_name");
+		oauthDao.update(yandexServer, null);
+		
+		// Google
+		OAuthServer googleServer = new OAuthServer();
+		googleServer.setName("Google");
+		googleServer.setIconUrl("https://www.google.ru/images/google_favicon_128.png");
+		googleServer.setEnabled(false);
+		googleServer.setClientId("<put your client_id>");
+		googleServer.setClientSecret("<put your client_secret>");
+		googleServer.setRequestKeyUrl("https://accounts.google.com/o/oauth2/auth?redirect_uri={$redirect_uri}&response_type=code&client_id={$client_id}"
+				+ "&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile");
+		googleServer.setRequestTokenUrl("https://accounts.google.com/o/oauth2/token");
+		googleServer.setRequestTokenMethod(RequestMethod.POST);
+		googleServer.setRequestTokenAttributes("code={$code}&client_id={$client_id}&client_secret={$client_secret}&redirect_uri={$redirect_uri}&grant_type=authorization_code");
+		googleServer.setRequestInfoUrl("https://www.googleapis.com/oauth2/v1/userinfo?access_token={$access_token}");
+		googleServer.setLoginParamName("email");
+		googleServer.setEmailParamName("email");
+		googleServer.setFirstnameParamName("given_name");
+		googleServer.setLastnameParamName("family_name");
+		oauthDao.update(googleServer, null);
+		
+		// Facebook
+		OAuthServer facebookServer = new OAuthServer();
+		facebookServer.setName("Facebook");
+		facebookServer.setIconUrl("https://www.facebook.com/images/fb_icon_325x325.png");
+		facebookServer.setEnabled(false);
+		facebookServer.setClientId("<put your client_id>");
+		facebookServer.setClientSecret("<put your client_secret>");
+		facebookServer.setRequestKeyUrl("https://www.facebook.com/dialog/oauth?client_id={$client_id}&redirect_uri={$redirect_uri}&scope=email");
+		facebookServer.setRequestTokenUrl("https://graph.facebook.com/v2.3/oauth/access_token");
+		facebookServer.setRequestTokenMethod(RequestMethod.POST);
+		facebookServer.setRequestTokenAttributes("client_id={$client_id}&redirect_uri={$redirect_uri}&client_secret={$client_secret}&code={$code}");
+		facebookServer.setRequestInfoUrl("https://graph.facebook.com/me?access_token={$access_token}&fields=id,first_name,last_name,email");
+		facebookServer.setLoginParamName("id");
+		facebookServer.setEmailParamName("email");
+		facebookServer.setFirstnameParamName("first_name");
+		facebookServer.setLastnameParamName("last_name");
+		oauthDao.update(facebookServer, null);
+	}
+	
+	// ------------------------------------------------------------------------------
+
+	/**
+	 * Create poll types
+	 */
+	// ------------------------------------------------------------------------------
+	public void loadPollTypes() {
+		pollManager.addPollType(26L, false);
+		pollManager.addPollType(27L, true);
+	}
+
+	// ------------------------------------------------------------------------------
+
+	public void loadSystem(InstallationConfig cfg, boolean force) throws Exception {
+		// FIXME dummy check if installation was performed before
+		if (!force && userDao.count() > 0) {
+			log.debug("System contains users, no need to install data one more time.");
+		}
+		sipDao.delete();
+		progress = 8;
+		loadMainMenu();
+		progress = 16;
+		loadErrorTypes();
+		progress = 24;
+		loadErrorMappingsFromXML();
+		progress = 32;
+		loadCountriesFiles();
+		progress = 40;
+		loadSalutations();
+		progress = 48;
+		// AppointMent Categories
+		loadInitAppointmentCategories();
+		progress = 56;
+		// Appointment Reminder types
+		loadInitAppointmentReminderTypes();
+		progress = 64;
+		// Appointment poll types
+		loadPollTypes();
+		progress = 72;
+		loadRoomTypes();
+		progress = 80;
+
+		loadConfiguration(cfg);
+		progress = 88;
+		loadInitialOAuthServers();
+		progress = 96;
+	}
+
+	public void loadAll(InstallationConfig cfg, boolean force) throws Exception {
+		// FIXME dummy check if installation was performed before
+		if (!force && userDao.count() > 0) {
+			log.debug("System contains users, no need to install data one more time.");
+			return;
+		}
+		loadSystem(cfg, force);
+		loadInitUserAndOrganisation(cfg);
+		progress = 94;
+
+		loadDefaultRooms("1".equals(cfg.createDefaultRooms));
+		progress = 100;
+	}
+}
diff --git a/src/install/java/org/apache/openmeetings/installation/InstallationConfig.java b/src/install/java/org/apache/openmeetings/installation/InstallationConfig.java
new file mode 100644
index 0000000..ca3ba68
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/installation/InstallationConfig.java
@@ -0,0 +1,93 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.installation;

+

+import static org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_BASE_URL;

+

+import java.io.Serializable;

+

+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;

+import org.apache.openmeetings.util.crypt.MD5Implementation;

+

+public class InstallationConfig implements Serializable {

+	private static final long serialVersionUID = 1L;

+	

+	public String appName = ConfigurationDao.DEFAULT_APP_NAME;

+	public String username;

+	public String password;

+	public String email;

+	public String group;

+	public String allowFrontendRegister = "1";

+	public String createDefaultRooms = "1";

+	public String ical_timeZone = "Europe/Berlin";

+	

+	public String cryptClassName = MD5Implementation.class.getCanonicalName();

+	//email

+	public Integer smtpPort = 25;

+	public String smtpServer = "localhost";

+	public String mailAuthName = "";

+	public String mailAuthPass = "";

+	public String mailReferer = "noreply@openmeetings.apache.org";

+	public String mailUseTls = "0";

+	//paths

+	public Integer swfZoom = 100;

+	public Integer swfJpegQuality = 85;

+	public String swfPath = "";

+	public String imageMagicPath = "";

+	public String ffmpegPath = "";

+	public String soxPath = "";

+	public String jodPath = "/opt/jod/lib";

+	public String officePath = "";

+	

+	public String defaultLangId = "1";

+	public String sendEmailAtRegister = "0";

+	public String urlFeed = "http://mail-archives.apache.org/mod_mbox/openmeetings-user/?format=atom";

+	public String urlFeed2 = "http://mail-archives.apache.org/mod_mbox/openmeetings-dev/?format=atom";

+	public String sendEmailWithVerficationCode = "0";

+	public String defaultExportFont = "TimesNewRoman";

+    public String red5SipEnable = "no";

+    public String red5SipRoomPrefix = "400";

+    public String red5SipExtenContext = "rooms";

+    public String replyToOrganizer = "1";

+    public String baseUrl = DEFAULT_BASE_URL;

+    

+	@Override

+	public String toString() {

+		return "InstallationConfig [allowFrontendRegister="

+				+ allowFrontendRegister + ", createDefaultRooms="

+				+ createDefaultRooms + ", cryptClassName=" + cryptClassName

+				+ ", smtpPort=" + smtpPort + ", smtpServer=" + smtpServer

+				+ ", mailAuthName=" + mailAuthName + ", mailAuthPass="

+				+ mailAuthPass + ", mailReferer=" + mailReferer

+				+ ", mailUseTls=" + mailUseTls + ", swfZoom=" + swfZoom

+				+ ", swfJpegQuality=" + swfJpegQuality  + ", swfPath=" + swfPath

+				+ ", imageMagicPath=" + imageMagicPath + ", ffmpegPath="

+				+ ffmpegPath + ", soxPath=" + soxPath + ", jodPath=" + jodPath

+				+ ", defaultLangId=" + defaultLangId + ", sendEmailAtRegister="

+				+ sendEmailAtRegister + ", urlFeed=" + urlFeed + ", urlFeed2="

+				+ urlFeed2 + ", sendEmailWithVerficationCode="

+				+ sendEmailWithVerficationCode + ", defaultExportFont="

+				+ defaultExportFont + ", red5SipEnable="

+				+ red5SipEnable + ", red5SipRoomPrefix=" + red5SipRoomPrefix

+				+ ", red5SipExtenContext=" + red5SipExtenContext

+				+ ", replyToOrganizer=" + replyToOrganizer

+				+ ", ical_timeZone=" + ical_timeZone 

+				+ "]";

+	}

+}

diff --git a/src/install/java/org/apache/openmeetings/installation/InstallationDocumentHandler.java b/src/install/java/org/apache/openmeetings/installation/InstallationDocumentHandler.java
new file mode 100644
index 0000000..cd355ad
--- /dev/null
+++ b/src/install/java/org/apache/openmeetings/installation/InstallationDocumentHandler.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.installation;
+
+import java.io.FileWriter;
+
+import org.apache.openmeetings.util.OmFileHelper;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.dom4j.Node;
+import org.dom4j.io.SAXReader;
+import org.dom4j.io.XMLWriter;
+
+public class InstallationDocumentHandler {
+	public static void createDocument(Integer stepNo) throws Exception {
+		
+		Document document = DocumentHelper.createDocument();
+		
+		Element root = document.addElement( "install" );
+		Element step = root.addElement("step");
+		
+		step.addElement("stepnumber").addText(stepNo.toString());
+		step.addElement("stepname").addText("Step "+stepNo);
+		
+		XMLWriter writer = new XMLWriter(new FileWriter(OmFileHelper.getInstallFile()));
+        writer.write( document );
+        writer.close();
+		
+	}
+	
+	public static int getCurrentStepNumber() throws Exception{
+		
+	    SAXReader reader = new SAXReader();
+        Document document = reader.read(OmFileHelper.getInstallFile());
+        
+        Node node = document.selectSingleNode( "//install/step/stepnumber" );
+        
+        return Integer.valueOf(node.getText()).intValue();
+        
+	}
+	
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/batik/beans/PrintBean.java b/src/main/java/org/apache/openmeetings/batik/beans/PrintBean.java
new file mode 100644
index 0000000..63b42f6
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/batik/beans/PrintBean.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.batik.beans;
+
+import java.util.List;
+
+public class PrintBean {
+
+	public String hash;
+	@SuppressWarnings("rawtypes")
+	public List map;
+	public int width;
+	public int height;
+
+	public PrintBean(String hash, @SuppressWarnings("rawtypes") List map,
+			int width, int height) {
+		super();
+		this.hash = hash;
+		this.height = height;
+		this.map = map;
+		this.width = width;
+	}
+
+	public String getHash() {
+		return hash;
+	}
+
+	public void setHash(String hash) {
+		this.hash = hash;
+	}
+
+	@SuppressWarnings("rawtypes")
+	public List getMap() {
+		return map;
+	}
+
+	@SuppressWarnings("rawtypes")
+	public void setMap(List map) {
+		this.map = map;
+	}
+
+	public int getWidth() {
+		return width;
+	}
+
+	public void setWidth(int width) {
+		this.width = width;
+	}
+
+	public int getHeight() {
+		return height;
+	}
+
+	public void setHeight(int height) {
+		this.height = height;
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/cluster/SlaveHTTPConnectionManager.java b/src/main/java/org/apache/openmeetings/cluster/SlaveHTTPConnectionManager.java
new file mode 100644
index 0000000..4a2fc86
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/cluster/SlaveHTTPConnectionManager.java
@@ -0,0 +1,102 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.cluster;

+

+import java.util.HashMap;

+import java.util.Map;

+

+import org.apache.openmeetings.cluster.sync.RestClient;

+import org.apache.openmeetings.db.entity.server.Server;

+import org.apache.openmeetings.util.OpenmeetingsVariables;

+import org.red5.logging.Red5LoggerFactory;

+import org.slf4j.Logger;

+

+/**

+ * Manages connections to the other nodes of the cluster.

+ * 

+ * Use-case: When you kick a user via the admin-panel, it is probably on anther server.

+ * So you need to perform a REST call to the node and let that node do the actual disconnect.

+ * 

+ * @author sebawagner

+ *

+ */

+public class SlaveHTTPConnectionManager {

+

+	private static Logger log = Red5LoggerFactory.getLogger(

+			SlaveHTTPConnectionManager.class, OpenmeetingsVariables.webAppRootKey);

+

+	/**

+	 * We store the list of RestClients in the memory, so that we can simply

+	 * call ping to get the load, without the need to get a new session Hash and

+	 * to login again. <br/>

+	 * There can be only one RestClient per server, so we use the primary key of

+	 * the server to store the RestClient.

+	 */

+	private static Map<Long, RestClient> restClientsSessionStore = new HashMap<Long, RestClient>();

+

+	/**

+	 * Synchronized, cause nobody should manipulate the object while another

+	 * process requests it, the scheduler could run several times and request

+	 * the same object, add or remove it.<br/>

+	 * If there is no object yet, create one.

+	 * 

+	 * @param server

+	 */

+	private synchronized RestClient getRestClient(Server server) {

+		RestClient restClient = restClientsSessionStore.get(server.getId());

+

+		// check if any values of the server have been changed,

+		// if yes, we need a new RestClient to make sure it will re-login to the

+		// changed server details

+		if (restClient != null && restClient.hasServerDetailsChanged(server)) {

+			log.debug("Server details changed, get new rest client");

+			restClient = null;

+		}

+

+		if (restClient == null) {

+			restClient = new RestClient(server);

+			restClientsSessionStore.put(server.getId(), restClient);

+		}

+		return restClient;

+	}

+

+	/**

+	 * Gets the current {@link RestClient} from the session store and then

+	 * performs a kickUser on that. It is not possible that there is no

+	 * {@link RestClient}, because if you want to kick a user from a slave, the

+	 * master <i>must</i> already have loaded the sessions from the slave, so

+	 * there logically <i>must</i> by a {@link RestClient} available that has an 

+	 * open connection to that slave / {@link Server}

+	 * 

+	 * @param serverId

+	 * @param publicSID

+	 */

+	public void kickSlaveUser(Server server, String publicSID) throws Exception {

+		

+		RestClient rClient = getRestClient(server);

+		

+		if (rClient == null) {

+			throw new Exception("No RestClient found for server " + server);

+		}

+		

+		rClient.kickUser(publicSID);

+		

+	}

+	

+}

diff --git a/src/main/java/org/apache/openmeetings/cluster/sync/RestClient.java b/src/main/java/org/apache/openmeetings/cluster/sync/RestClient.java
new file mode 100644
index 0000000..5f88693
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/cluster/sync/RestClient.java
@@ -0,0 +1,395 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.cluster.sync;
+
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axis2.Constants;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.client.Options;
+import org.apache.axis2.client.ServiceClient;
+import org.apache.axis2.transport.http.HTTPConstants;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * 
+ * Performs call to the WebService Gateway to load the server load from the
+ * slave's of the cluster
+ * 
+ * @author sebawagner
+ * 
+ */
+public class RestClient {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			RestClient.class, OpenmeetingsVariables.webAppRootKey);
+	
+	private enum Action {
+		//kick the user from the server
+		KICK_USER,
+	}
+
+	private final String host;
+	private final int port;
+	private final String protocol;
+	private final String webapp;
+	private final String user;
+	private final String pass;
+
+	private boolean loginSuccess = false;
+	private String sessionId;
+	
+	private String publicSID;
+
+//	private static String nameSpaceForSlaveDto = "http://room.conference.openmeetings.apache.org/xsd";
+	
+	private static String NAMESPACE_PREFIX = "http://services.axis.openmeetings.apache.org";
+
+	private String getUserServiceEndPoint() {
+		return protocol + "://" + host + ":" + port + "/" + webapp
+				+ "/services/UserService";
+	}
+//
+//	private String getRoomServiceEndPoint() {
+//		return protocol + "://" + host + ":" + port + "/" + webapp
+//				+ "/services/RoomService";
+//	}
+
+	/**
+	 * The observerInstance will be notified whenever a ping was completed
+	 * 
+	 * @param observerInstance
+	 * @param host
+	 * @param port
+	 * @param protocol
+	 * @param webapp
+	 * @param user
+	 * @param pass
+	 */
+	public RestClient(Server server) {
+		//this.server = server;
+		this.host = server.getAddress();
+		this.port = server.getPort();
+		this.protocol = server.getProtocol();
+		this.webapp = server.getWebapp();
+		this.user = server.getUser();
+		this.pass = server.getPass();
+	}
+	
+	/**
+	 * Main method to perform tests
+	 * 
+	 * @param strings
+	 */
+	public static void main(String... strings) {
+		RestClient rClient = new RestClient("127.0.0.1", 5080, "http",
+				"openmeetings", "swagner", "qweqwe");
+		try {
+			rClient.loginUser(Action.KICK_USER);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/**
+	 * for simple testing this method provides a version of the constructor
+	 * without need for a server entity.<br/>
+	 * <br/>
+	 * There is no spring or JPA enhanced class in use here. This Object is
+	 * stored in session/memory
+	 * 
+	 * @param host
+	 * @param port
+	 * @param protocol
+	 * @param webapp
+	 * @param user
+	 * @param pass
+	 */
+	private RestClient(String host, int port, String protocol, String webapp,
+			String user, String pass) {
+		this.host = host;
+		this.port = port;
+		this.protocol = protocol;
+		this.webapp = webapp;
+		this.user = user;
+		this.pass = pass;
+	}
+
+	/**
+	 * compare if the details here and the one stored are still the same
+	 * 
+	 * @param server2
+	 * @return
+	 */
+	public boolean hasServerDetailsChanged(Server server2) {
+
+		if (!host.equals(server2.getAddress())) {
+			return true;
+		}
+		if (port != server2.getPort()) {
+			return true;
+		}
+		if (!user.equals(server2.getUser())) {
+			return true;
+		}
+		if (!pass.equals(server2.getPass())) {
+			return true;
+		}
+		if (!webapp.equals(server2.getWebapp())) {
+			return true;
+		}
+		if (!protocol.equals(server2.getProtocol())) {
+			return true;
+		}
+
+		return false;
+	}
+
+	/**
+	 * Login the user via REST
+	 * 
+	 * @throws Exception
+	 */
+	public void loginUser(Action action) throws Exception {
+
+		ServiceClient sender = createServiceClient(getUserServiceEndPoint());
+		
+		OMElement getSessionResult = sender
+				.sendReceive(getPayloadMethodGetSession());
+		sessionId = getSessionIdFromResult(getSessionResult);
+
+		OMElement loginUserResult = sender
+				.sendReceive(getPayloadMethodLoginUser());
+
+		loginSuccess = loginSuccessFromResult(loginUserResult);
+
+		switch (action) {
+			case KICK_USER:
+				kickUserInternl();
+				break;
+			default:
+				throw new Exception("No action defined");
+		}
+
+	}
+	
+	private ServiceClient createServiceClient(String serviceEndPoint) throws Exception {
+		ServiceClient sender = new ServiceClient();
+		sender.engageModule(new QName(Constants.MODULE_ADDRESSING)
+				.getLocalPart());
+		Options options = new Options();
+		options.setTo(new EndpointReference(serviceEndPoint));
+		options.setProperty(Constants.Configuration.ENABLE_REST,
+				Constants.VALUE_TRUE);
+		int timeOutInMilliSeconds = 2000;
+		// setting timeout to 2 second should be sufficient, if the server is
+		// not available within the 3 second interval you got a problem anyway
+		options.setTimeOutInMilliSeconds(timeOutInMilliSeconds);
+		options.setProperty(HTTPConstants.SO_TIMEOUT, timeOutInMilliSeconds);
+		options.setProperty(HTTPConstants.CONNECTION_TIMEOUT, timeOutInMilliSeconds);
+		sender.setOptions(options);
+		
+		return sender;
+	}
+	
+	private OMElement createOMElement(OMFactory fac, OMNamespace omNs, String name, String value) {
+		OMElement omElement = fac.createOMElement(name, omNs);
+		omElement.addChild(fac.createOMText(omElement, value));
+		return omElement;
+	}
+
+	/**
+	 * sets the publicSID and removes a user from a slave host by calling a REST service
+	 * 
+	 * @param publicSID
+	 */
+	public void kickUser(String publicSID) {
+		this.publicSID = publicSID;
+		kickUserInternl();
+	}
+	
+	private void kickUserInternl() {
+		try {
+			
+			if (!loginSuccess) {
+				loginUser(Action.KICK_USER);
+			}
+
+			ServiceClient sender = createServiceClient(getUserServiceEndPoint());
+			
+			OMElement kickUserByPublicSIDResult = sender
+					.sendReceive(getPayloadMethodKickUserByPublicSID());
+			Boolean result = kickUserByPublicSIDFromResult(kickUserByPublicSIDResult);
+			
+			if (!result) {
+				throw new Exception("Could not delete user from slave host");
+			}
+
+		} catch (Exception err) {
+			log.error("[kickUser failed]", err);
+		}
+	}
+
+	private Boolean kickUserByPublicSIDFromResult(OMElement result) throws Exception {
+		QName kickUserResult = new QName(NAMESPACE_PREFIX, "return");
+
+		@SuppressWarnings("unchecked")
+		Iterator<OMElement> elements = result.getChildrenWithName(kickUserResult);
+		if (elements.hasNext()) {
+			OMElement resultElement = elements.next();
+			if (resultElement.getText().equals("true")) {
+				return true;
+			} else {
+				throw new Exception("Could not delete user from slave host, returns: "
+						+ resultElement.getText());
+			}
+		} else {
+			throw new Exception("Could not parse kickUserByPublicSID result");
+		}
+	}
+
+	private OMElement getPayloadMethodKickUserByPublicSID() throws Exception {
+		OMFactory fac = OMAbstractFactory.getOMFactory();
+		OMNamespace omNs = fac.createOMNamespace(NAMESPACE_PREFIX, "pre");
+		OMElement method = fac.createOMElement("kickUserByPublicSID", omNs);
+		method.addChild(createOMElement(fac, omNs, "SID", sessionId));
+		method.addChild(createOMElement(fac, omNs, "publicSID", publicSID));
+		return method;
+	}
+
+	/**
+	 * Create the REST request to get a new session Id
+	 * 
+	 * @return
+	 */
+	private OMElement getPayloadMethodGetSession() throws Exception {
+		OMFactory fac = OMAbstractFactory.getOMFactory();
+		OMNamespace omNs = fac.createOMNamespace(NAMESPACE_PREFIX, "pre");
+		OMElement method = fac.createOMElement("getSession", omNs);
+		return method;
+	}
+
+	/**
+	 * Parse the session Id from the REST request
+	 * 
+	 * @param result
+	 * @return
+	 * @throws Exception
+	 */
+	private String getSessionIdFromResult(OMElement result) throws Exception {
+		QName sessionElements = new QName(null, "session_id");
+
+		@SuppressWarnings("unchecked")
+		Iterator<OMElement> elements = result.getFirstElement()
+				.getChildrenWithName(sessionElements);
+		if (elements.hasNext()) {
+			OMElement sessionElement = elements.next();
+			return sessionElement.getText();
+		} else {
+			throw new Exception("Could not find session id");
+		}
+	}
+
+	/**
+	 * create the payload to login to another OpenMeetings instance via REST
+	 * 
+	 * @return
+	 */
+	private OMElement getPayloadMethodLoginUser() throws Exception {
+		OMFactory fac = OMAbstractFactory.getOMFactory();
+		OMNamespace omNs = fac.createOMNamespace(NAMESPACE_PREFIX, "pre");
+		OMElement method = fac.createOMElement("loginUser", omNs);
+		method.addChild(createOMElement(fac, omNs, "SID", sessionId));
+		method.addChild(createOMElement(fac, omNs, "username", user));
+		method.addChild(createOMElement(fac, omNs, "userpass", pass));
+		return method;
+	}
+
+	/**
+	 * check the result of the REST request if the login was successful
+	 * 
+	 * @param result
+	 * @return
+	 * @throws Exception
+	 */
+	private boolean loginSuccessFromResult(OMElement result) throws Exception {
+
+		QName loginResult = new QName(NAMESPACE_PREFIX, "return");
+
+		@SuppressWarnings("unchecked")
+		Iterator<OMElement> elements = result.getChildrenWithName(loginResult);
+		if (elements.hasNext()) {
+			OMElement resultElement = elements.next();
+			if (resultElement.getText().equals("1")) {
+				return true;
+			} else {
+				throw new Exception("Could not login user at, error code is: "
+						+ resultElement.getText());
+			}
+		} else {
+			throw new Exception("Could not parse login result");
+		}
+
+	}
+
+	/**
+	 * Get and cast the element's text (if there is any)
+	 * 
+	 * @param resultElement
+	 * @param elementName
+	 * @param typeObject
+	 * @return
+	 */
+//	private <T> T getElementTextByName(OMElement resultElement, String elementName, Class<T> typeObject) {
+//		try {
+//			OMElement userIdElement = resultElement
+//					.getFirstChildWithName(new QName(nameSpaceForSlaveDto, elementName));
+//			if (userIdElement != null && userIdElement.getText() != null
+//					&& userIdElement.getText().length() > 0) {
+//				
+//				String defaultValue = userIdElement.getText();
+//				
+//				// Either this can be directly assigned or try to find a constructor
+//				// that handles it
+//				if (typeObject.isAssignableFrom(defaultValue.getClass())) {
+//					return typeObject.cast(defaultValue);
+//				}
+//				Constructor<T> c = typeObject.getConstructor(defaultValue
+//						.getClass());
+//				return c.newInstance(defaultValue);
+//				
+//			}
+//		} catch (Exception err) {
+//			//Catch any class cast exception, but log only
+//			log.error("[getElementTextByName]", err);
+//		}
+//		return null;
+//	}
+	
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/converter/BaseConverter.java b/src/main/java/org/apache/openmeetings/converter/BaseConverter.java
new file mode 100644
index 0000000..564f406
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/converter/BaseConverter.java
@@ -0,0 +1,373 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.converter;
+
+import static org.apache.openmeetings.data.flvrecord.listener.async.BaseStreamWriter.TIME_TO_WAIT_FOR_FRAME;
+import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.OGG_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.getRecording;
+import static org.apache.openmeetings.util.OmFileHelper.getRecordingMetaData;
+import static org.apache.openmeetings.util.OmFileHelper.getStreamsSubDir;
+import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDeltaDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData.Status;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaDelta;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ProcessHelper;
+import org.red5.io.flv.impl.FLVWriter;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public abstract class BaseConverter {
+	private static final Logger log = Red5LoggerFactory.getLogger(BaseConverter.class, webAppRootKey);
+
+	@Autowired
+	private ConfigurationDao configurationDao;
+	@Autowired
+	private FlvRecordingMetaDataDao metaDataDao;
+	@Autowired
+	private FlvRecordingMetaDeltaDao metaDeltaDao;
+
+	private String getPath(String key, String app) {
+		String path = configurationDao.getConfValue(key, String.class, "");
+		if (!"".equals(path) && !path.endsWith(File.separator)) {
+			path += File.separator;
+		}
+		path += app;
+		return path;
+	}
+	
+	public String getPathToFFMPEG() {
+		return getPath("ffmpeg_path", "ffmpeg");
+	}
+
+	protected String getPathToSoX() {
+		return getPath("sox_path", "sox");
+	}
+
+	protected String getPathToImageMagick() {
+		return getPath("imagemagick_path", "convert") + GenerateSWF.execExt;
+	}
+
+	protected boolean isUseOldStyleFfmpegMap() {
+		return "1".equals(configurationDao.getConfValue("use.old.style.ffmpeg.map.option", String.class, "0"));
+	}
+	
+	protected File getStreamFolder(FlvRecording flvRecording) {
+		return getStreamsSubDir(flvRecording.getRoom_id());
+	}
+
+	protected long diff(Date from, Date to) {
+		return from.getTime() - to.getTime();
+	}
+
+	protected double diffSeconds(Date from, Date to) {
+		return diffSeconds(diff(from, to));
+	}
+	
+	protected double diffSeconds(long val) {
+		return ((double)val) / 1000;
+	}
+	
+	protected String formatMillis(long millis) {
+		long hours = TimeUnit.MILLISECONDS.toHours(millis);
+		millis -= TimeUnit.HOURS.toMillis(hours);
+		long minutes = TimeUnit.MILLISECONDS.toMinutes(millis);
+		millis -= TimeUnit.MINUTES.toMillis(minutes);
+		long seconds = TimeUnit.MILLISECONDS.toSeconds(millis);
+		millis -= TimeUnit.SECONDS.toMillis(seconds);
+		return String.format("%02d:%02d:%02d.%03d", hours, minutes, seconds, millis);
+	}
+
+	protected void updateDuration(FlvRecording r) {
+		r.setDuration(formatMillis(diff(r.getRecordEnd(), r.getRecordStart())));
+	}
+	
+	protected void deleteFileIfExists(String name) {
+		File f = new File(name);
+
+		if (f.exists()) {
+			f.delete();
+		}
+	}
+	
+	protected String[] mergeAudioToWaves(List<String> listOfFullWaveFiles, String outputFullWav) {
+		List<String> argv = new ArrayList<String>();
+		
+		argv.add(getPathToSoX());
+		argv.add("-m");
+		for (String arg : listOfFullWaveFiles) {
+			argv.add(arg);
+		}
+		argv.add(outputFullWav);
+		
+		return argv.toArray(new String[0]);
+	}
+	
+	protected void stripAudioFirstPass(FlvRecording flvRecording, List<ConverterProcessResult> returnLog,
+			List<String> listOfFullWaveFiles, File streamFolder)
+	{
+		stripAudioFirstPass(flvRecording, returnLog, listOfFullWaveFiles, streamFolder
+				, metaDataDao.getAudioMetaDataByRecording(flvRecording.getFlvRecordingId()));
+	}
+	
+	private String[] addSoxPad(List<ConverterProcessResult> returnLog, String job, double length, double position, File inFile, File outFile) throws IOException {
+		//FIXME need to check this
+		if (length < 0 || position < 0) {
+			log.debug("::addSoxPad " + job + " Invalid parameters: "
+					+ " length = " + length + "; position = " + position + "; inFile = " + inFile);
+		}
+		length = length < 0 ? 0 : length;
+		position = position < 0 ? 0 : position;
+
+		String[] argv = new String[] { getPathToSoX(), inFile.getCanonicalPath(), outFile.getCanonicalPath(), "pad", "" + length, "" + position };
+
+		returnLog.add(ProcessHelper.executeScript(job, argv));
+		return argv;
+	}
+	
+	private static File getMetaFlvSer(FlvRecordingMetaData metaData) {
+		File metaDir = getStreamsSubDir(metaData.getFlvRecording().getRoom_id());
+		return new File(metaDir, metaData.getStreamName() + ".flv.ser");
+	}
+	
+	public static void printMetaInfo(FlvRecordingMetaData metaData, String prefix) {
+		if (log.isDebugEnabled()) {
+			log.debug(String.format("### %s:: recording id %s; stream with id %s; current status: %s ", prefix, metaData.getFlvRecording().getFlvRecordingId()
+					, metaData.getFlvRecordingMetaDataId(), metaData.getStreamStatus()));
+			File metaFlv = getRecordingMetaData(metaData.getFlvRecording().getRoom_id(), metaData.getStreamName());
+			File metaSer = getMetaFlvSer(metaData);
+			log.debug(String.format("### %s:: Flv file [%s] exists ? %s; size: %s, lastModified: %s ", prefix, metaFlv.getPath(), metaFlv.exists(), metaFlv.length(), metaFlv.lastModified()));
+			log.debug(String.format("### %s:: Ser file [%s] exists ? %s; size: %s, lastModified: %s ", prefix, metaSer.getPath(), metaSer.exists(), metaSer.length(), metaSer.lastModified()));
+		}
+	}
+	
+	protected FlvRecordingMetaData waitForTheStream(long metaId) throws InterruptedException {
+		FlvRecordingMetaData metaData = metaDataDao.get(metaId);
+		if (metaData.getStreamStatus() != Status.STOPPED) {
+			log.debug("### meta Stream not yet written to disk " + metaId);
+			long counter = 0;
+			long maxTimestamp = 0;
+			while(true) {
+				log.trace("### Stream not yet written Thread Sleep - " + metaId);
+				
+				metaData = metaDataDao.get(metaId);
+				
+				if (metaData.getStreamStatus() == Status.STOPPED) {
+					printMetaInfo(metaData, "Stream now written");
+					log.debug("### Thread continue ... " );
+					break;
+				} else {
+					File metaFlv = getRecordingMetaData(metaData.getFlvRecording().getRoom_id(), metaData.getStreamName());
+					if (metaFlv.exists() && maxTimestamp < metaFlv.lastModified()) {
+						maxTimestamp = metaFlv.lastModified();
+					}
+					File metaSer = getMetaFlvSer(metaData);
+					if (metaSer.exists() && maxTimestamp < metaSer.lastModified()) {
+						maxTimestamp = metaSer.lastModified();
+					}
+					if (maxTimestamp + TIME_TO_WAIT_FOR_FRAME < System.currentTimeMillis()) {
+						if (metaSer.exists()) {
+							log.debug("### long time without any update, trying to repair ... ");
+							try {
+								if (FLVWriter.repair(metaSer.getCanonicalPath(), null, null) && !metaSer.exists()) {
+									log.debug("### Repairing was successful ... ");
+								} else {
+									log.debug("### Repairing was NOT successful ... ");
+								}
+							} catch (IOException e) {
+								log.error("### Error while file repairing ... ", e);
+							}
+						} else {
+							log.debug("### long time without any update, closing ... ");
+						}
+						metaData.setStreamStatus(Status.STOPPED);
+						metaDataDao.update(metaData);
+						break;
+					}
+				}
+				if (++counter % 1000 == 0) {
+					printMetaInfo(metaData, "Still waiting");
+				}
+				
+				Thread.sleep(100L);
+			}
+		}
+		return metaData;
+	}
+	
+	protected void stripAudioFirstPass(FlvRecording flvRecording,
+			List<ConverterProcessResult> returnLog,
+			List<String> listOfFullWaveFiles, File streamFolder,
+			List<FlvRecordingMetaData> metaDataList) {
+		try {
+			// Init variables
+			log.debug("### meta Data Number - " + metaDataList.size());
+			log.debug("###################################################");
+	
+			for (FlvRecordingMetaData metaData : metaDataList) {
+				long metaId = metaData.getFlvRecordingMetaDataId();
+				log.debug("### processing metadata: " + metaId);
+				if (metaData.getStreamStatus() == Status.NONE) {
+					log.debug("Stream has not been started, error in recording " + metaId);
+					continue;
+				}
+				
+				metaData = waitForTheStream(metaId);
+	
+				File inputFlvFile = new File(streamFolder, metaData.getStreamName() + ".flv");
+	
+				File outputWav = new File(streamFolder, metaData.getStreamName() + "_WAVE.wav");
+	
+				metaData.setWavAudioData(outputWav.getName());
+	
+				
+				log.debug("FLV File Name: {} Length: {} ", inputFlvFile.getName(), inputFlvFile.length());
+	
+				if (inputFlvFile.exists()) {
+					String[] argv = new String[] {
+							getPathToFFMPEG(), "-y"
+							, "-i", inputFlvFile.getCanonicalPath()
+							, "-af", "aresample=32k:min_comp=0.001:min_hard_comp=0.100000"
+							, outputWav.getCanonicalPath()};
+	
+					returnLog.add(ProcessHelper.executeScript("stripAudioFromFLVs", argv));
+				}
+	
+				if (outputWav.exists() && outputWav.length() != 0) {
+					metaData.setAudioValid(true);
+					// Strip Wave to Full Length
+					File outputGapFullWav = outputWav;
+	
+					// Fix Start/End in Audio
+					List<FlvRecordingMetaDelta> flvRecordingMetaDeltas = metaDeltaDao.getFlvRecordingMetaDeltaByMetaId(metaId);
+	
+					int counter = 0;
+	
+					for (FlvRecordingMetaDelta metaDelta : flvRecordingMetaDeltas) {
+						File inputFile = outputGapFullWav;
+	
+						// Strip Wave to Full Length
+						String hashFileGapsFullName = metaData.getStreamName() + "_GAP_FULL_WAVE_" + counter + ".wav";
+						outputGapFullWav = new File(streamFolder, hashFileGapsFullName);
+	
+						metaDelta.setWaveOutPutName(hashFileGapsFullName);
+	
+						String[] argv_sox = null;
+	
+						if (metaDelta.getDeltaTime() != null) {
+							double gapSeconds = diffSeconds(metaDelta.getDeltaTime());
+							if (metaDelta.isStartPadding()) {
+								argv_sox = addSoxPad(returnLog, "fillGap", gapSeconds, 0, inputFile, outputGapFullWav);
+							} else if (metaDelta.isEndPadding()) {
+								argv_sox = addSoxPad(returnLog, "fillGap", 0, gapSeconds, inputFile, outputGapFullWav);
+							}
+						}
+	
+						if (argv_sox != null) {
+							log.debug("START fillGap ################# Delta-ID :: " + metaDelta.getFlvRecordingMetaDeltaId());
+	
+							metaDeltaDao.updateFlvRecordingMetaDelta(metaDelta);
+							counter++;
+						} else {
+							outputGapFullWav = inputFile;
+						}
+					}
+	
+					// Strip Wave to Full Length
+					String hashFileFullName = metaData.getStreamName() + "_FULL_WAVE.wav";
+					File outputFullWav = new File(streamFolder, hashFileFullName);
+	
+					// Calculate delta at beginning
+					double startPad = diffSeconds(metaData.getRecordStart(), flvRecording.getRecordStart());
+	
+					// Calculate delta at ending
+					double endPad = diffSeconds(flvRecording.getRecordEnd(), metaData.getRecordEnd());
+	
+					addSoxPad(returnLog, "addStartEndToAudio", startPad, endPad, outputGapFullWav, outputFullWav);
+	
+					// Fix for Audio Length - Invalid Audio Length in Recorded Files
+					// Audio must match 100% the Video
+					log.debug("############################################");
+					log.debug("Trim Audio to Full Length -- Start");
+	
+					if (!outputFullWav.exists()) {
+						throw new Exception("Audio File does not exist , could not extract the Audio correctly");
+					}
+					metaData.setFullWavAudioData(hashFileFullName);
+	
+					// Finally add it to the row!
+					listOfFullWaveFiles.add(outputFullWav.getCanonicalPath());
+				}
+	
+				metaDataDao.update(metaData);
+			}
+		} catch (Exception err) {
+			log.error("[stripAudioFirstPass]", err);
+		}
+	}
+	
+	public void convertToMp4(FlvRecording r, List<ConverterProcessResult> returnLog) throws IOException {
+		//TODO add faststart, move filepaths to helpers
+		if (!isRecordingExists(r.getFileHash())) {
+			return;
+		}
+		File file = getRecording(r.getFileHash());
+		String path = file.getCanonicalPath();
+		String mp4path = path + MP4_EXTENSION;
+		String[] argv = new String[] {
+				getPathToFFMPEG(), "-y",
+				"-i", path,
+				"-c:v", "libx264",
+				"-crf", "24",
+				"-pix_fmt", "yuv420p",
+				"-preset", "medium",
+				"-profile:v", "baseline",
+				"-c:a", "libfaac",
+				"-c:a", "libfdk_aac", "-b:a", "32k", //FIXME add quality constants 
+				"-s", r.getFlvWidth() + "x" + r.getFlvHeight(), //
+				mp4path
+				};
+		returnLog.add(ProcessHelper.executeScript("generate MP4", argv));
+		
+		argv = new String[] {
+				getPathToFFMPEG(), "-y",
+				"-i", mp4path,
+				"-vcodec", "libtheora",
+				"-acodec", "libvorbis",
+				path + OGG_EXTENSION
+				};
+
+		returnLog.add(ProcessHelper.executeScript("generate OGG", argv));
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/converter/FlvExplorerConverter.java b/src/main/java/org/apache/openmeetings/converter/FlvExplorerConverter.java
new file mode 100644
index 0000000..e37d220
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/converter/FlvExplorerConverter.java
@@ -0,0 +1,153 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.converter;
+
+import static org.apache.openmeetings.util.OmFileHelper.getStreamsHibernateDir;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingLogDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ProcessHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class FlvExplorerConverter extends BaseConverter {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			FlvExplorerConverter.class, OpenmeetingsVariables.webAppRootKey);
+
+	// Spring loaded Beans
+	@Autowired
+	private FileExplorerItemDao fileExplorerItemDaoImpl;
+	@Autowired
+	private FlvRecordingLogDao flvRecordingLogDaoImpl;
+	
+	private class FlvDimension {
+		public FlvDimension(int width, int height) {
+			this.width = width;
+			this.height = height;
+		}
+		public int width = 0;
+		public int height = 0;
+	}
+
+	public List<ConverterProcessResult> startConversion(Long fileExplorerItemId, String moviePath) {
+		List<ConverterProcessResult> returnLog = new ArrayList<ConverterProcessResult>();
+		try {
+			FileExplorerItem fileExplorerItem = fileExplorerItemDaoImpl.getFileExplorerItemsById(fileExplorerItemId);
+
+			log.debug("fileExplorerItem " + fileExplorerItem.getFileExplorerItemId());
+
+			//  Convert to FLV
+			return convertToFLV(fileExplorerItem, moviePath);
+
+			// Add empty pieces at the beginning and end of the wav
+			// FIXME: Is this really needed anymore?!
+
+		} catch (Exception err) {
+			log.error("[startConversion]", err);
+			returnLog.add(new ConverterProcessResult("startConversion", err.getMessage(), err));
+		}
+
+		return returnLog;
+	}
+
+	private List<ConverterProcessResult> convertToFLV(FileExplorerItem fileExplorerItem, String moviePath) {
+		List<ConverterProcessResult> returnLog = new ArrayList<ConverterProcessResult>();
+		try {
+			String name = "UPLOADFLV_" + fileExplorerItem.getFileExplorerItemId();
+			File outputFullFlv = new File(getStreamsHibernateDir(), name + ".flv");
+
+			fileExplorerItem.setIsVideo(true);
+
+			String[] argv_fullFLV = new String[] { getPathToFFMPEG(), "-y", "-i", moviePath,
+					"-ar", "22050", "-acodec", "libmp3lame", "-ab", "32k",
+					"-vcodec", "flv",
+					outputFullFlv.getCanonicalPath() };
+			// "-s", flvWidth + "x" + flvHeight, 
+
+			ConverterProcessResult returnMapConvertFLV = ProcessHelper.executeScript("uploadFLV ID :: "
+					+ fileExplorerItem.getFileExplorerItemId(), argv_fullFLV);
+			
+			//Parse the width height from the FFMPEG output
+			FlvDimension flvDimension = getFlvDimension(returnMapConvertFLV.getError());
+			int flvWidth = flvDimension.width;
+			int flvHeight = flvDimension.height;
+			
+			
+			fileExplorerItem.setFlvWidth(flvWidth);
+			fileExplorerItem.setFlvHeight(flvHeight);
+
+			returnLog.add(returnMapConvertFLV);
+
+			String hashFileFullNameJPEG = "UPLOADFLV_" + fileExplorerItem.getFileExplorerItemId() + ".jpg";
+			File outPutJpeg = new File(getStreamsHibernateDir(), name + ".jpg");
+
+			fileExplorerItem.setPreviewImage(hashFileFullNameJPEG);
+
+			String[] argv_previewFLV = new String[] { getPathToFFMPEG(), "-y", "-i",
+					outputFullFlv.getCanonicalPath(), "-vcodec", "mjpeg", "-vframes", "1", "-an",
+					"-f", "rawvideo", "-s", flvWidth + "x" + flvHeight,
+					outPutJpeg.getCanonicalPath() };
+
+			returnLog.add(ProcessHelper.executeScript("previewUpload ID :: "
+							+ fileExplorerItem.getFileExplorerItemId(),
+							argv_previewFLV));
+
+			fileExplorerItemDaoImpl.updateFileOrFolder(fileExplorerItem);
+
+			for (ConverterProcessResult returnMap : returnLog) {
+				flvRecordingLogDaoImpl.addFLVRecordingLog("generateFFMPEG", null, returnMap);
+			}
+		} catch (Exception err) {
+			log.error("[convertToFLV]", err);
+			returnLog.add(new ConverterProcessResult("convertToFLV", err.getMessage(), err));
+		}
+
+		return returnLog;
+	}
+	
+	private FlvDimension getFlvDimension(String txt) throws Exception {
+		
+		Pattern p = Pattern.compile("\\d{2,4}(x)\\d{2,4}");
+		
+		Matcher matcher = p.matcher(txt);
+		
+		while ( matcher.find() ) {
+			String foundResolution = txt.substring(matcher.start(), matcher.end());
+			
+			String[] resultions = foundResolution.split("x");
+			
+			return new FlvDimension(Integer.valueOf(resultions[0]).intValue(), Integer.valueOf(resultions[1]).intValue());
+			
+	    }
+		
+		return null;
+	}
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/converter/FlvInterviewConverter.java b/src/main/java/org/apache/openmeetings/converter/FlvInterviewConverter.java
new file mode 100644
index 0000000..026945b
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/converter/FlvInterviewConverter.java
@@ -0,0 +1,318 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.converter;
+
+import static org.apache.openmeetings.util.OmFileHelper.getRecordingMetaData;
+import static org.apache.openmeetings.util.OmFileHelper.getStreamsHibernateDir;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingLogDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ProcessHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class FlvInterviewConverter extends BaseConverter implements IRecordingConverter {
+	private static final Logger log = Red5LoggerFactory.getLogger(FlvInterviewConverter.class, webAppRootKey);
+	private static class ReConverterParams {
+		private int leftSideLoud = 1;
+		private int rightSideLoud = 1;
+		@SuppressWarnings("unused")
+		private Integer leftSideTime = 0;
+		@SuppressWarnings("unused")
+		private Integer rightSideTime = 0;
+	}
+
+	// Spring loaded Beans
+	@Autowired
+	private FlvRecordingDao recordingDao;
+	@Autowired
+	private FlvRecordingMetaDataDao metaDataDao;
+	@Autowired
+	private FlvRecordingLogDao logDao;
+
+	private String[] mergeAudioToWaves(List<String> listOfFullWaveFiles, String outputFullWav,
+			List<FlvRecordingMetaData> metaDataList, ReConverterParams rcv) {
+		String[] argv_full_sox = new String[listOfFullWaveFiles.size() + 5];
+		argv_full_sox[0] = this.getPathToSoX();
+		argv_full_sox[1] = "-m";
+
+		int counter = 2;
+		for (int i = 0; i < listOfFullWaveFiles.size(); i++) {
+			for (FlvRecordingMetaData flvRecordingMetaData : metaDataList) {
+				String hashFileFullNameStored = flvRecordingMetaData.getFullWavAudioData();
+
+				String fullFilePath = listOfFullWaveFiles.get(i);
+				String fileNameOnly = new File(fullFilePath).getName();
+
+				if (hashFileFullNameStored.equals(fileNameOnly)) {
+					if (flvRecordingMetaData.getInteriewPodId() == 1) {
+						argv_full_sox[counter] = "-v " + rcv.leftSideLoud;
+						counter++;
+					}
+					if (flvRecordingMetaData.getInteriewPodId() == 2) {
+						argv_full_sox[counter] = "-v " + rcv.rightSideLoud;
+						counter++;
+					}
+				}
+			}
+			argv_full_sox[counter] = listOfFullWaveFiles.get(i);
+			counter++;
+		}
+
+		argv_full_sox[counter] = outputFullWav;
+
+		return argv_full_sox;
+	}
+
+	public void startConversion(Long flvRecordingId) {
+		startConversion(flvRecordingId, false, new ReConverterParams());
+	}
+
+	public void startConversion(Long flvRecordingId, boolean reconversion, ReConverterParams rcv) {
+		FlvRecording flvRecording = null;
+		try {
+			flvRecording = recordingDao.get(flvRecordingId);
+			log.debug("flvRecording " + flvRecording.getFlvRecordingId());
+			flvRecording.setStatus(FlvRecording.Status.CONVERTING);
+			flvRecording = recordingDao.update(flvRecording);
+
+			List<ConverterProcessResult> returnLog = new ArrayList<ConverterProcessResult>();
+			List<String> listOfFullWaveFiles = new LinkedList<String>();
+			File streamFolder = getStreamFolder(flvRecording);
+			List<FlvRecordingMetaData> metaDataList = metaDataDao.getAudioMetaDataByRecording(flvRecording.getFlvRecordingId());
+	
+			stripAudioFirstPass(flvRecording, returnLog, listOfFullWaveFiles, streamFolder, metaDataList);
+		
+			// Merge Wave to Full Length
+			File streamFolderGeneral = getStreamsHibernateDir();
+
+			String hashFileFullName = "INTERVIEW_" + flvRecording.getFlvRecordingId() + "_FINAL_WAVE.wav";
+			String outputFullWav = streamFolder.getAbsolutePath() + File.separatorChar + hashFileFullName;
+			deleteFileIfExists(outputFullWav);
+
+			if (listOfFullWaveFiles.size() == 1) {
+				outputFullWav = listOfFullWaveFiles.get(0);
+			} else if (listOfFullWaveFiles.size() > 0) {
+				String[] argv_full_sox;
+				if (reconversion) {
+					argv_full_sox = mergeAudioToWaves(listOfFullWaveFiles, outputFullWav, metaDataList, rcv);
+				} else {
+					argv_full_sox = mergeAudioToWaves(listOfFullWaveFiles, outputFullWav);
+				}
+
+				returnLog.add(ProcessHelper.executeScript("mergeAudioToWaves", argv_full_sox));
+			} else {
+				// create default Audio to merge it.
+				// strip to content length
+				File outputWav = new File(streamFolderGeneral, "one_second.wav");
+
+				// Calculate delta at beginning
+				double deltaPadding = diffSeconds(flvRecording.getRecordEnd(), flvRecording.getRecordStart());
+
+				String[] argv_full_sox = new String[] { getPathToSoX(), outputWav.getCanonicalPath(), outputFullWav, "pad", "0", "" + deltaPadding };
+
+				returnLog.add(ProcessHelper.executeScript("generateSampleAudio", argv_full_sox));
+			}
+			// Default Image for empty interview video pods
+			final File defaultInterviewImageFile = new File(streamFolderGeneral, "default_interview_image.png");
+
+			if (!defaultInterviewImageFile.exists()) {
+				throw new Exception("defaultInterviewImageFile does not exist!");
+			}
+
+			final int flvWidth = 320;
+			final int flvHeight = 260;
+			final int frameRate = 25;
+			// Merge Audio with Video / Calculate resulting FLV
+
+			String[] pods = new String[2];
+			boolean found = false;
+			for (FlvRecordingMetaData meta : metaDataList) {
+				File flv = getRecordingMetaData(flvRecording.getRoom_id(), meta.getStreamName());
+
+				Integer pod = meta.getInteriewPodId();
+				if (flv.exists() && pod != null && pod > 0 && pod < 3) {
+					String path = flv.getCanonicalPath();
+					/*
+					 * CHECK FILE:
+					 * ffmpeg -i rec_316_stream_567_2013_08_28_11_51_45.flv -v error -f null file.null
+					 */ 
+					String[] args = new String[] {getPathToFFMPEG(), "-y"
+							, "-i", path
+							, "-an" // only input files with video will be treated as video sources
+							, "-v", "error"
+							, "-f", "null"
+							, "file.null"};
+					ConverterProcessResult r = ProcessHelper.executeScript("checkFlvPod_" + pod , args);
+					returnLog.add(r);
+					if ("0".equals(r.getExitValue())) {
+						//TODO need to remove smallest gap
+						long diff = diff(meta.getRecordStart(), meta.getFlvRecording().getRecordStart());
+						if (diff != 0L) {
+							// stub to add
+							// ffmpeg -y -loop 1 -i /home/solomax/work/openmeetings/branches/3.0.x/dist/red5/webapps/openmeetings/streams/hibernate/default_interview_image.jpg -filter_complex '[0:0]scale=320:260' -c:v libx264 -t 00:00:29.059 -pix_fmt yuv420p out.flv
+							File podFB = new File(streamFolder, meta.getStreamName() + "_pod_" + pod + "_blank.flv");
+							String podPB = podFB.getCanonicalPath();
+							String[] argsPodB = new String[] { getPathToFFMPEG(), "-y" //
+									, "-loop", "1", "-i", defaultInterviewImageFile.getCanonicalPath() //
+									, "-filter_complex", String.format("[0:0]scale=%1$d:%2$d", flvWidth, flvHeight) //
+									, "-c:v", "libx264" //
+									, "-t", formatMillis(diff) //
+									, "-pix_fmt", "yuv420p" //
+									, podPB };
+							returnLog.add(ProcessHelper.executeScript("blankFlvPod_" + pod , argsPodB));
+							
+							//ffmpeg -y -i out.flv -i rec_15_stream_4_2014_07_15_20_41_03.flv -filter_complex '[0:0]setsar=1/1[sarfix];[1:0]scale=320:260,setsar=1/1[scale];[sarfix] [scale] concat=n=2:v=1:a=0 [v]' -map '[v]'  output1.flv
+							File podF = new File(streamFolder, meta.getStreamName() + "_pod_" + pod + ".flv");
+							String podP = podF.getCanonicalPath();
+							String[] argsPod = new String[] { getPathToFFMPEG(), "-y"//
+									, "-i", podPB //
+									, "-i", path //
+									, "-filter_complex", String.format("[0:0]setsar=1/1[sarfix];[1:0]scale=%1$d:%2$d,setsar=1/1[scale];[sarfix] [scale] concat=n=2:v=1:a=0 [v]", flvWidth, flvHeight) //
+									, "-map", "[v]" //
+									, podP };
+							returnLog.add(ProcessHelper.executeScript("shiftedFlvPod_" + pod , argsPod));
+	
+							pods[pod - 1] = podP;
+						} else {
+							pods[pod - 1] = path;
+						}
+					}
+					found = true;
+				}
+			}
+			if (!found) {
+				ConverterProcessResult r = new ConverterProcessResult();
+				r.setProcess("CheckFlvFilesExists");
+				r.setError("No valid pods found");
+				returnLog.add(r);
+				return;
+			}
+			boolean shortest = false;
+			List<String> args = new ArrayList<String>();
+			args.add(getPathToFFMPEG());
+			args.add("-y"); 
+			for (int i = 0; i < 2; ++i) {
+				/*
+				 * INSERT BLANK INSTEAD OF BAD PAD:
+				 * ffmpeg -loop 1 -i default_interview_image.jpg -i rec_316_stream_569_2013_08_28_11_51_45.flv -filter_complex '[0:v]scale=320:260,pad=2*320:260[left];[1:v]scale=320:260[right];[left][right]overlay=main_w/2:0' -shortest -y out4.flv
+				 *
+				 * JUST MERGE:
+				 * ffmpeg -i rec_316_stream_569_2013_08_28_11_51_45.flv -i rec_316_stream_569_2013_08_28_11_51_45.flv -filter_complex '[0:v]scale=320:260,pad=2*320:260[left];[1:v]scale=320:260[right];[left][right]overlay=main_w/2:0' -y out4.flv
+				 */
+				if (pods[i] == null) {
+					shortest = true;
+					args.add("-loop"); args.add("1");
+					args.add("-i"); args.add(defaultInterviewImageFile.getCanonicalPath());
+				} else {
+					args.add("-i"); args.add(pods[i]);
+				}
+			}
+			args.add("-i"); args.add(outputFullWav);
+			args.add("-ar"); args.add("22050");
+			args.add("-ab"); args.add("32k");
+			args.add("-filter_complex");
+			args.add(String.format("[0:v]scale=%1$d:%2$d,pad=2*%1$d:%2$d[left];[1:v]scale=%1$d:%2$d[right];[left][right]overlay=main_w/2:0%3$s"
+					, flvWidth, flvHeight, shortest ? ":shortest=1" : ""));
+			if (shortest) {
+				args.add("-shortest");
+			}
+			args.add("-map"); args.add("0:0");
+			args.add("-map"); args.add("1:0");
+			args.add("-map"); args.add("2:0");
+			args.add("-r"); args.add("" + frameRate);
+			args.add("-qmax"); args.add("1");
+			args.add("-qmin"); args.add("1");
+			args.add("-y");
+			String hashFileFullNameFlv = "flvRecording_" + flvRecording.getFlvRecordingId() + ".flv";
+			String outputFullFlv = new File(streamFolderGeneral, hashFileFullNameFlv).getCanonicalPath();
+			args.add(outputFullFlv);
+			// TODO additional flag to 'quiet' output should be added
+			returnLog.add(ProcessHelper.executeScript("generateFullBySequenceFLV", args.toArray(new String[]{})));
+
+			flvRecording.setFlvWidth(2 * flvWidth);
+			flvRecording.setFlvHeight(flvHeight);
+
+			flvRecording.setFileHash(hashFileFullNameFlv);
+
+			// Extract first Image for preview purpose
+			// ffmpeg -i movie.flv -vcodec mjpeg -vframes 1 -an -f rawvideo -s
+			// 320x240 movie.jpg
+
+			String hashFileFullNameJPEG = "flvRecording_" + flvRecording.getFlvRecordingId() + ".jpg";
+			String outPutJpeg = new File(streamFolderGeneral, hashFileFullNameJPEG).getCanonicalPath();
+			deleteFileIfExists(outPutJpeg);
+
+			flvRecording.setPreviewImage(hashFileFullNameJPEG);
+
+			String[] argv_previewFLV = new String[] { //
+					getPathToFFMPEG(), "-y", //
+					"-i", outputFullFlv, //
+					"-vcodec", "mjpeg", //
+					"-vframes", "100", "-an", //
+					"-f", "rawvideo", //
+					"-s", (2 * flvWidth) + "x" + flvHeight, //
+					outPutJpeg };
+
+			returnLog.add(ProcessHelper.executeScript("generateFullFLV", argv_previewFLV));
+
+			String alternateDownloadName = "flvRecording_" + flvRecording.getFlvRecordingId() + ".avi";
+			String alternateDownloadFullName = new File(streamFolderGeneral, alternateDownloadName).getCanonicalPath();
+			deleteFileIfExists(alternateDownloadFullName);
+
+			String[] argv_alternateDownload = new String[] { getPathToFFMPEG(), "-y", "-i", outputFullFlv, alternateDownloadFullName };
+
+			returnLog.add(ProcessHelper.executeScript("alternateDownload", argv_alternateDownload));
+
+			flvRecording.setAlternateDownload(alternateDownloadName);
+
+			updateDuration(flvRecording);
+			convertToMp4(flvRecording, returnLog);
+			flvRecording.setStatus(FlvRecording.Status.PROCESSED);
+
+			logDao.deleteByRecordingId(flvRecording.getFlvRecordingId());
+			for (ConverterProcessResult returnMap : returnLog) {
+				logDao.addFLVRecordingLog("generateFFMPEG", flvRecording, returnMap);
+			}
+
+			// Delete Wave Files
+			for (String fileName : listOfFullWaveFiles) {
+				File audio = new File(fileName);
+				if (audio.exists()) {
+					audio.delete();
+				}
+			}
+		} catch (Exception err) {
+			log.error("[startConversion]", err);
+			flvRecording.setStatus(FlvRecording.Status.ERROR);
+		}
+		recordingDao.update(flvRecording);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/converter/FlvRecorderConverter.java b/src/main/java/org/apache/openmeetings/converter/FlvRecorderConverter.java
new file mode 100644
index 0000000..da133e1
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/converter/FlvRecorderConverter.java
@@ -0,0 +1,202 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.converter;
+
+import static org.apache.openmeetings.util.OmFileHelper.getStreamsHibernateDir;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingLogDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData.Status;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ProcessHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class FlvRecorderConverter extends BaseConverter implements IRecordingConverter {
+	private static final Logger log = Red5LoggerFactory.getLogger(FlvRecorderConverter.class, webAppRootKey);
+
+	// Spring loaded Beans
+	@Autowired
+	private FlvRecordingDao recordingDao;
+	@Autowired
+	private FlvRecordingMetaDataDao metaDataDao;
+	@Autowired
+	private FlvRecordingLogDao logDao;
+
+	private String FFMPEG_MAP_PARAM = ":";
+
+	public void startConversion(Long flvRecordingId) {
+		FlvRecording flvRecording = null;
+		try {
+			if (isUseOldStyleFfmpegMap()) {
+				FFMPEG_MAP_PARAM = ".";
+			}
+
+			String finalNamePrefix = "flvRecording_" + flvRecordingId;
+			flvRecording = recordingDao.get(flvRecordingId);
+			log.debug("flvRecording " + flvRecording.getFlvRecordingId());
+
+			List<ConverterProcessResult> returnLog = new ArrayList<ConverterProcessResult>();
+			List<String> listOfFullWaveFiles = new ArrayList<String>();
+			File streamFolder = getStreamFolder(flvRecording);
+			
+			FlvRecordingMetaData screenMetaData = metaDataDao.getScreenMetaDataByRecording(flvRecording.getFlvRecordingId());
+
+			if (screenMetaData == null) {
+				throw new Exception("screenMetaData is Null FlvRecordingId " + flvRecording.getFlvRecordingId());
+			}
+
+			if (screenMetaData.getStreamStatus() == Status.NONE) {
+				throw new Exception("Stream has not been started, error in recording");
+			}
+			flvRecording.setStatus(FlvRecording.Status.CONVERTING);
+			flvRecording = recordingDao.update(flvRecording);
+
+			screenMetaData = waitForTheStream(screenMetaData.getFlvRecordingMetaDataId());
+
+			stripAudioFirstPass(flvRecording, returnLog, listOfFullWaveFiles, streamFolder);
+
+			// Merge Wave to Full Length
+			String hashFileFullName = screenMetaData.getStreamName() + "_FINAL_WAVE.wav";
+			String outputFullWav = new File(streamFolder, hashFileFullName).getCanonicalPath();
+
+			if (listOfFullWaveFiles.size() == 1) {
+				outputFullWav = listOfFullWaveFiles.get(0);
+			} else if (listOfFullWaveFiles.size() > 0) {
+				String[] argv_full_sox = mergeAudioToWaves(listOfFullWaveFiles, outputFullWav);
+
+				returnLog.add(ProcessHelper.executeScript("mergeAudioToWaves", argv_full_sox));
+			} else {
+				// create default Audio to merge it. strip to content length
+				String outputWav = new File(getStreamsHibernateDir(), "one_second.wav").getCanonicalPath();
+
+				// Calculate delta at beginning
+				double deltaPadding = diffSeconds(flvRecording.getRecordEnd(), flvRecording.getRecordStart());
+
+				String[] argv_full_sox = new String[] { getPathToSoX(), outputWav, outputFullWav, "pad", "0", "" + deltaPadding };
+
+				returnLog.add(ProcessHelper.executeScript("generateSampleAudio", argv_full_sox));
+			}
+			screenMetaData.setFullWavAudioData(hashFileFullName);
+			metaDataDao.update(screenMetaData);
+
+			// Merge Audio with Video / Calculate resulting FLV
+
+			String inputScreenFullFlv = new File(streamFolder, screenMetaData.getStreamName() + ".flv").getCanonicalPath();
+
+			File outputFullFlv = new File(getStreamsHibernateDir(), finalNamePrefix + ".flv");
+
+			// ffmpeg -vcodec flv -qscale 9.5 -r 25 -ar 22050 -ab 32k -s 320x240
+			// -i 65318fb5c54b1bc1b1bca077b493a914_28_12_2009_23_38_17_FINAL_WAVE.wav
+			// -i 65318fb5c54b1bc1b1bca077b493a914_28_12_2009_23_38_17.flv
+			// final1.flv
+
+			int flvWidth = flvRecording.getWidth();
+			int flvHeight = flvRecording.getHeight();
+
+			log.debug("flvWidth -1- " + flvWidth);
+			log.debug("flvHeight -1- " + flvHeight);
+
+			flvWidth = Double.valueOf((Math.floor(flvWidth / 16)) * 16).intValue();
+			flvHeight = Double.valueOf((Math.floor(flvHeight / 16)) * 16).intValue();
+
+			log.debug("flvWidth -2- " + flvWidth);
+			log.debug("flvHeight -2- " + flvHeight);
+
+			flvRecording.setFlvWidth(flvWidth);
+			flvRecording.setFlvHeight(flvHeight);
+
+			String[] argv_fullFLV = new String[] { getPathToFFMPEG(), "-y",//
+					"-itsoffset", formatMillis(diff(screenMetaData.getRecordStart(), flvRecording.getRecordStart())),
+					"-i", inputScreenFullFlv, "-i", outputFullWav, "-ar", "22050", //
+					"-acodec", "libmp3lame", //
+					"-ab", "32k", //
+					"-s", flvWidth + "x" + flvHeight, //
+					"-vcodec", "flashsv", //
+					"-map", "0" + FFMPEG_MAP_PARAM + "0", //
+					"-map", "1" + FFMPEG_MAP_PARAM + "0", //
+					outputFullFlv.getCanonicalPath() };
+
+			returnLog.add(ProcessHelper.executeScript("generateFullFLV", argv_fullFLV));
+
+			flvRecording.setFileHash(outputFullFlv.getName());
+
+			// Extract first Image for preview purpose
+			// ffmpeg -i movie.flv -vcodec mjpeg -vframes 1 -an -f rawvideo -s
+			// 320x240 movie.jpg
+
+			File outPutJpeg = new File(getStreamsHibernateDir(), finalNamePrefix + ".jpg");
+
+			flvRecording.setPreviewImage(outPutJpeg.getName());
+
+			String[] argv_previewFLV = new String[] { //
+					getPathToFFMPEG(), "-y",//
+					"-i", outputFullFlv.getCanonicalPath(), //
+					"-vcodec", "mjpeg", //
+					"-vframes", "1", "-an", //
+					"-f", "rawvideo", //
+					"-s", flvWidth + "x" + flvHeight, //
+					outPutJpeg.getCanonicalPath() };
+
+			returnLog.add(ProcessHelper.executeScript("previewFullFLV", argv_previewFLV));
+
+			File alternateDownload = new File(getStreamsHibernateDir(), finalNamePrefix + ".avi");
+
+			String[] argv_alternateDownload = new String[] { getPathToFFMPEG(), "-y", "-i", outputFullFlv.getCanonicalPath(), "-vcodec",
+					"copy", alternateDownload.getCanonicalPath() };
+
+			returnLog.add(ProcessHelper.executeScript("alternateDownload", argv_alternateDownload));
+
+			flvRecording.setAlternateDownload(alternateDownload.getName());
+
+			updateDuration(flvRecording);
+			convertToMp4(flvRecording, returnLog);
+			flvRecording.setStatus(FlvRecording.Status.PROCESSED);
+
+			logDao.deleteByRecordingId(flvRecording.getFlvRecordingId());
+			for (ConverterProcessResult returnMap : returnLog) {
+				logDao.addFLVRecordingLog("generateFFMPEG", flvRecording, returnMap);
+			}
+
+			// Delete Wave Files
+			for (String fileName : listOfFullWaveFiles) {
+				File audio = new File(fileName);
+				if (audio.exists()) {
+					audio.delete();
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[startConversion]", err);
+			flvRecording.setStatus(FlvRecording.Status.ERROR);
+		}
+		if (flvRecording != null) {
+			recordingDao.update(flvRecording);
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/converter/GenerateImage.java b/src/main/java/org/apache/openmeetings/converter/GenerateImage.java
new file mode 100644
index 0000000..dc2fdcc
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/converter/GenerateImage.java
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.converter;
+
+import static org.apache.openmeetings.util.OmFileHelper.bigImagePrefix;
+import static org.apache.openmeetings.util.OmFileHelper.chatImagePrefix;
+import static org.apache.openmeetings.util.OmFileHelper.getUploadProfilesUserDir;
+import static org.apache.openmeetings.util.OmFileHelper.JPG_EXTENTION;
+import static org.apache.openmeetings.util.OmFileHelper.profileFileName;
+import static org.apache.openmeetings.util.OmFileHelper.profileImagePrefix;
+import static org.apache.openmeetings.util.OmFileHelper.thumbImagePrefix;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.io.IOException;
+
+import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ConverterProcessResultList;
+import org.apache.openmeetings.util.process.ProcessHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class GenerateImage extends BaseConverter {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(GenerateImage.class, webAppRootKey);
+
+	@Autowired
+	private UserDao usersDao;
+	@Autowired
+	private GenerateThumbs generateThumbs;
+
+	public ConverterProcessResultList convertImage(String fileName, String fileExt,
+			String roomName, String fileNameShort, boolean fullProcessing)
+			throws Exception {
+
+		ConverterProcessResultList returnMap = new ConverterProcessResultList();
+
+		File fileFullPath = new File(OmFileHelper.getUploadTempRoomDir(roomName), fileName + fileExt);
+
+		File destinationFile = OmFileHelper.getNewFile(OmFileHelper.getUploadRoomDir(roomName), fileName, ".jpg");
+
+		log.debug("##### convertImage destinationFile: " + destinationFile);
+
+		ConverterProcessResult processJPG = convertSingleJpg(fileFullPath.getCanonicalPath(), destinationFile);
+		ConverterProcessResult processThumb = generateThumbs.generateThumb(thumbImagePrefix, destinationFile, 50);
+
+		returnMap.addItem("processJPG", processJPG);
+		returnMap.addItem("processThumb", processThumb);
+
+		// Delete old one
+		fileFullPath.delete();
+
+		return returnMap;
+	}
+
+	public ConverterProcessResultList convertImageUserProfile(File file, Long users_id, boolean skipConvertion) throws Exception {
+		ConverterProcessResultList returnMap = new ConverterProcessResultList();
+		
+		// User Profile Update
+		for (File f : getUploadProfilesUserDir(users_id).listFiles(new FileFilter() {
+			public boolean accept(File pathname) {
+				return pathname.getName().endsWith(JPG_EXTENTION);
+			}
+		})) {
+			FileHelper.removeRec(f);
+		}
+		
+		File destinationFile = OmFileHelper.getNewFile(getUploadProfilesUserDir(users_id), profileFileName, JPG_EXTENTION);
+		if (!skipConvertion) {
+			returnMap.addItem("processJPG", convertSingleJpg(file.getCanonicalPath(), destinationFile));
+		} else {
+			FileHelper.copy(file, destinationFile);
+		}
+		returnMap.addItem("processThumb1", generateThumbs.generateThumb(chatImagePrefix, destinationFile, 40));
+		returnMap.addItem("processThumb2", generateThumbs.generateThumb(profileImagePrefix, destinationFile, 126));
+		returnMap.addItem("processThumb3", generateThumbs.generateThumb(bigImagePrefix, destinationFile, 240));
+
+		if (!skipConvertion) {
+			// Delete old one
+			file.delete();
+		}
+
+		String pictureuri = destinationFile.getName();
+		User us = usersDao.get(users_id);
+		us.setUpdatetime(new java.util.Date());
+		us.setPictureuri(pictureuri);
+		usersDao.update(us, users_id);
+
+		//FIXME: After uploading a new picture all other clients should refresh
+		//scopeApplicationAdapter.updateUserSessionObject(users_id, pictureuri);
+
+		return returnMap;
+	}
+
+	/**
+	 * -density 150 -resize 800
+	 * @throws IOException 
+	 * 
+	 */
+	private ConverterProcessResult convertSingleJpg(String inputFile, File outputfile) throws IOException {
+		String[] argv = new String[] { getPathToImageMagick(), inputFile, outputfile.getCanonicalPath() };
+
+		return ProcessHelper.executeScript("generateBatchThumbByWidth", argv);
+	}
+
+	public ConverterProcessResult convertImageByTypeAndSize(String inputFile,
+			String outputfile, int width, int height) {
+		String[] argv = new String[] { getPathToImageMagick(), "-size",
+				width + "x" + height, inputFile, outputfile };
+		return ProcessHelper.executeScript("convertImageByTypeAndSizeAndDepth", argv);
+	}
+
+	public ConverterProcessResult convertImageByTypeAndSizeAndDepth(
+			String inputFile, String outputfile, int width, int height,
+			int depth) {
+		String[] argv = new String[] { getPathToImageMagick(), "-size",
+				width + "x" + height, "-depth", Integer.toString(depth),
+				inputFile, outputfile };
+		return ProcessHelper.executeScript("convertImageByTypeAndSizeAndDepth", argv);
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/converter/GenerateSWF.java b/src/main/java/org/apache/openmeetings/converter/GenerateSWF.java
new file mode 100644
index 0000000..7ae7601
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/converter/GenerateSWF.java
@@ -0,0 +1,127 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.converter;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ProcessHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class GenerateSWF {
+
+	public static final Logger log = Red5LoggerFactory.getLogger(GenerateSWF.class, webAppRootKey);
+
+	@Autowired
+	private ConfigurationDao configurationDao;
+
+	public final static boolean isPosix = System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") == -1;
+
+	public final static String execExt = isPosix ? "" : ".exe";
+
+	private String getPathToSwfTools() {
+		String pathToSWFTools = configurationDao.getConfValue("swftools_path", String.class, "");
+		// If SWFTools Path is not blank a File.separator at the end of the path
+		// is needed
+		if (!"".equals(pathToSWFTools) && !pathToSWFTools.endsWith(File.separator)) {
+			pathToSWFTools = pathToSWFTools + File.separator;
+		}
+		return pathToSWFTools;
+	}
+
+	private String getSwfZoom() {
+		String valueForSwfZoom = configurationDao.getConfValue("swftools_zoom", String.class, "");
+		// WARNING CODE NOT COMPLETE: If SWFTools zoom (dpi) should be an integer between 50 and  600 with a default value of 100 dpi
+		if ("".equals(valueForSwfZoom)) {
+			valueForSwfZoom = "72";
+		}
+		return valueForSwfZoom;
+	}
+
+	private String getSwfJpegQuality() {
+		String valueForSwfJpegQuality = configurationDao.getConfValue("swftools_jpegquality", String.class, "");
+		// WARNING CODE NOT COMPLETE: If SWFTools JPEG Quality should be an integer between 1 and 100, with a default value of 85
+		if ("".equals(valueForSwfJpegQuality)) {
+			valueForSwfJpegQuality = "85";
+		}
+		return valueForSwfJpegQuality;
+	}
+
+	public ConverterProcessResult generateSwf(File originalFolder, File destinationFolder, String fileNamePure) throws IOException {
+		
+		// Create the Content of the Converter Script (.bat or .sh File)
+		String[] argv = new String[] {
+				getPathToSwfTools() + "pdf2swf" + execExt, "-s",
+				"insertstop", // insert Stop command into every frame
+				"-s","poly2bitmap", //http://www.swftools.org/gfx_tutorial.html#Rendering_pages_to_SWF_files
+				"-i", // change draw order to reduce pdf complexity
+				"-j", "" + getSwfJpegQuality(), // JPEG Quality 
+				"-s", "zoom=" + getSwfZoom(), // set zoom dpi 
+				new File(originalFolder, fileNamePure + ".pdf").getCanonicalPath(),
+				new File(destinationFolder, fileNamePure + ".swf").getCanonicalPath() };
+
+		return ProcessHelper.executeScript("generateSwf", argv);
+	}
+
+	/**
+	 * Generates an SWF from the list of files.
+	 */
+	public ConverterProcessResult generateSwfByImages(List<String> images, String outputfile, int fps) {
+		List<String> argvList = Arrays.asList(new String[] {
+				getPathToSwfTools() + "png2swf" + execExt, "-s", 
+				"insertstop", // Insert Stop command into every frame
+				"-o", outputfile, "-r", Integer.toString(fps), "-z" });
+
+		argvList.addAll(images);
+		return ProcessHelper.executeScript("generateSwfByImages", argvList.toArray(new String[0]));
+	}
+
+	/**
+	 * Combines a bunch of SWFs into one SWF by concatenate.
+	 */
+	public ConverterProcessResult generateSWFByCombine(List<String> swfs, String outputswf, int fps) {
+		List<String> argvList = Arrays.asList(new String[] {
+				getPathToSwfTools() + "swfcombine" + execExt, "-s",
+				"insertstop", // Insert Stop command into every frame
+				"-o", outputswf, "-r", Integer.toString(fps), "-z", "-a" });
+
+		argvList.addAll(swfs);
+		return ProcessHelper.executeScript("generateSWFByCombine", argvList.toArray(new String[0]));
+	}
+
+	public ConverterProcessResult generateSWFByFFMpeg(String inputWildCard,
+			String outputswf, int fps, int width, int height) {
+		// FIXME: ffmpeg should be on the system path
+		String[] argv = new String[] { "ffmpeg" + execExt, "-r",
+				Integer.toString(fps), "-i", inputWildCard, "-s",
+				width + "x" + height, "-b", "750k", "-ar", "44100", "-y",
+				outputswf };
+
+		return ProcessHelper.executeScript("generateSWFByFFMpeg", argv);
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/converter/GenerateThumbs.java b/src/main/java/org/apache/openmeetings/converter/GenerateThumbs.java
new file mode 100644
index 0000000..2817b62
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/converter/GenerateThumbs.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.converter;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ProcessHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class GenerateThumbs extends BaseConverter {
+	private static final Logger log = Red5LoggerFactory.getLogger(GenerateThumbs.class, webAppRootKey);
+
+	public ConverterProcessResult generateThumb(String pre, File f, Integer thumbSize) throws IOException {
+		log.debug("generateThumb");
+		// Init variables
+		String name = f.getName();
+		File parent = f.getParentFile();
+
+		String[] argv = new String[] {
+			getPathToImageMagick()
+			, "-thumbnail"
+			, Integer.toString(thumbSize) + "x" + Integer.toString(thumbSize)
+			, f.getCanonicalPath()
+			, new File(parent, pre + name).getCanonicalPath()
+			};
+
+		return ProcessHelper.executeScript("generateBatchThumbByWidth", argv);
+	}
+
+	public ConverterProcessResult decodePDF(String inputfile, String outputfile) {
+		log.debug("decodePDF");
+		String[] argv = new String[] { getPathToImageMagick(), inputfile, outputfile };
+
+		return ProcessHelper.executeScript("generateBatchThumbByWidth", argv);
+	}
+
+	public ConverterProcessResult generateBatchThumb(File inputfile, File outputpath, Integer thumbSize, String pre) throws IOException {
+		log.debug("generateBatchThumbByWidth");
+		String[] argv = new String[] {
+			getPathToImageMagick()
+			, "-thumbnail" // FIXME
+			, Integer.toString(thumbSize)
+			, inputfile.getCanonicalPath()
+			, new File(outputpath, "_" + pre + "_page-%04d.jpg").getCanonicalPath()
+			};
+
+		return ProcessHelper.executeScript("generateBatchThumbByWidth", argv);
+	}
+
+	public ConverterProcessResult generateImageBatchByWidth(
+			String current_dir, String inputfile, String outputpath,
+			Integer thumbWidth, String pre) {
+		log.debug("generateImageBatchByWidth");
+
+		String[] argv = new String[] { getPathToImageMagick(),
+				"-resize", Integer.toString(thumbWidth), inputfile,
+				outputpath + "_" + pre + "_page.png" };
+
+		return ProcessHelper.executeScript("generateImageBatchByWidth", argv);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/converter/IRecordingConverter.java b/src/main/java/org/apache/openmeetings/converter/IRecordingConverter.java
new file mode 100644
index 0000000..1a53c2e
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/converter/IRecordingConverter.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.converter;
+
+public interface IRecordingConverter {
+	void startConversion(Long recordingId);
+}
diff --git a/src/main/java/org/apache/openmeetings/data/beans/rooms/RoomsList.java b/src/main/java/org/apache/openmeetings/data/beans/rooms/RoomsList.java
new file mode 100644
index 0000000..0228088
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/beans/rooms/RoomsList.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.beans.rooms;
+
+import org.apache.openmeetings.db.entity.room.Room;
+
+public class RoomsList {
+	
+	Room[] roomList = null;
+
+	public Room[] getRoomList() {
+		return roomList;
+	}
+	public void setRoomList(Room[] roomList) {
+		this.roomList = roomList;
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/data/calendar/management/AppointmentLogic.java b/src/main/java/org/apache/openmeetings/data/calendar/management/AppointmentLogic.java
new file mode 100644
index 0000000..9ae0a55
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/calendar/management/AppointmentLogic.java
@@ -0,0 +1,294 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.calendar.management;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPLICATION_BASE_URL;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_APPOINTMENT_REMINDER_MINUTES;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.DEFAULT_BASE_URL;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.TimeZone;
+
+import org.apache.openmeetings.data.conference.InvitationManager;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentCategoryDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;
+import org.apache.openmeetings.db.dao.calendar.IInvitationManager.MessageType;
+import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.room.InvitationDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.web.mail.template.AppointmentReminderTemplate;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class AppointmentLogic {
+	private static final Logger log = Red5LoggerFactory.getLogger(AppointmentLogic.class, webAppRootKey);
+
+	@Autowired
+	private AppointmentDao appointmentDao;
+	@Autowired
+	private AppointmentCategoryDao appointmentCategoryDao;
+	@Autowired
+	private AppointmentReminderTypDao appointmentReminderTypDao;
+	@Autowired
+	private ConfigurationDao configurationDao;
+	@Autowired
+	private LabelDao langDao;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private InvitationManager invitationManager;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+	@Autowired
+	private InvitationDao invitationDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private MeetingMemberDao meetingMemberDao;
+	@Autowired
+	private RoomTypeDao roomTypeDao;
+
+	private static int DEFAULT_MINUTES_REMINDER_SEND = 15;
+
+	public List<Appointment> getTodaysAppointmentsForUser(Long userId) {
+		try {
+			log.debug("getTodaysAppointmentsForUser");
+			List<Appointment> points = appointmentDao.getTodaysAppointmentsbyRangeAndMember(userId);
+			log.debug("Count Appointments for Today : " + points.size());
+			return points;
+		} catch (Exception err) {
+			log.error("[getTodaysAppointmentsForUser]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * @author o.becherer
+	 * @param room_id
+	 * @return
+	 */
+	// --------------------------------------------------------------------------------------------
+	public Appointment getAppointmentByRoom(Long room_id) throws Exception {
+		log.debug("getAppointmentByRoom");
+
+		Room room = roomDao.get(room_id);
+
+		if (room == null) {
+			throw new Exception("Room does not exist in database!");
+		}
+
+		if (!room.getAppointment()) {
+			throw new Exception("Room " + room.getName() + " isnt part of an appointed meeting");
+		}
+
+		return appointmentDao.getAppointmentByRoom(room_id);
+	}
+
+	// --------------------------------------------------------------------------------------------
+
+	private void sendReminder(User u, Appointment a) throws Exception {
+		Invitation i = new Invitation();
+		i.setInvitedBy(u);
+		i.setInvitee(u);
+		i.setAppointment(a);
+		i.setRoom(a.getRoom());
+		sendReminder(u, a, i);
+	}
+	
+	private void sendReminder(User u, Appointment a, Invitation inv) throws Exception {
+		if (inv == null) {
+			log.error(String.format("Error retrieving Invitation for member %s in Appointment %s"
+					, u.getAdresses().getEmail(), a.getTitle()));
+			return;
+		}
+
+		TimeZone tz = timezoneUtil.getTimeZone(u.getTimeZoneId());
+
+		long langId = u.getLanguage_id();
+		// Get the required labels one time for all meeting members. The
+		// Language of the email will be the system default language
+
+		String smsSubject = generateSMSSubject(langDao.getString(1158L, langId), a);
+
+		AppointmentReminderTemplate t = AppointmentReminderTemplate.get(langId, a, tz);
+		invitationManager.sendInvitionLink(inv, MessageType.Create, t.getSubject(), t.getEmail(), false);
+
+		invitationManager.sendInvitationReminderSMS(u.getAdresses().getPhone(), smsSubject, langId);
+		if (inv.getHash() != null) {
+			inv.setUpdated(new Date());
+			invitationDao.update(inv);
+		}
+	}
+	
+	/**
+	 * Sending Reminder in Simple mail format 5 minutes before Meeting begins
+	 */
+	// ----------------------------------------------------------------------------------------------
+	public void doScheduledMeetingReminder() throws Exception {
+		// log.debug("doScheduledMeetingReminder");
+		String baseUrl = configurationDao.getConfValue(CONFIG_APPLICATION_BASE_URL, String.class, DEFAULT_BASE_URL);
+		if (baseUrl == null || baseUrl.length() < 1) {
+			log.error("Error retrieving baseUrl for application");
+			return;
+		}
+		Integer minutesReminderSend = configurationDao.getConfValue(CONFIG_APPOINTMENT_REMINDER_MINUTES, Integer.class
+				, "" + DEFAULT_MINUTES_REMINDER_SEND);
+		if (minutesReminderSend == null) {
+			throw new Exception("minutesReminderSend is null!");
+		}
+
+		if (minutesReminderSend == 0) {
+			log.warn("minutesReminderSend is 0, disabling reminder scheduler");
+			return;
+		}
+
+		long milliseconds = (minutesReminderSend * 60 * 1000L);
+		Calendar start = Calendar.getInstance();
+		if (milliseconds < 0) {
+			start.setTimeInMillis(start.getTimeInMillis() + milliseconds);
+		}
+		Calendar end = Calendar.getInstance();
+		if (milliseconds > 0) {
+			end.setTimeInMillis(end.getTimeInMillis() + milliseconds);
+		}
+
+		for (Appointment a : appointmentDao.getAppointmentsInRange(start, end)) {
+			// Prevent email from being send twice, even if the cycle takes
+			// very long to send each
+			if (a.isReminderEmailSend()) {
+				continue;
+			}
+			TimeZone ownerZone = timezoneUtil.getTimeZone(a.getOwner().getTimeZoneId());
+			Calendar aNow = Calendar.getInstance(ownerZone);
+			Calendar aStart = a.startCalendar(ownerZone);
+			aStart.add(Calendar.MINUTE, -minutesReminderSend);
+			if (aStart.after(aNow)) {
+				// to early to send reminder
+				continue;
+			}
+			// Update Appointment to not send invitation twice
+			a.setReminderEmailSend(true);
+			appointmentDao.update(a, null, false);
+
+			List<MeetingMember> members = a.getMeetingMembers();
+
+			sendReminder(a.getOwner(), a);
+			if (members == null) {
+				log.debug("doScheduledMeetingReminder : no members in meeting!");
+				continue;
+			}
+			//TODO should we add reminder for the owner????
+
+			// Iterate through all MeetingMembers
+			for (MeetingMember mm : members) {
+				log.debug("doScheduledMeetingReminder : Member " + mm.getUser().getAdresses().getEmail());
+
+				Invitation inv = mm.getInvitation();
+
+				sendReminder(mm.getUser(), a, inv);
+			}
+		}
+	}
+
+	private String generateSMSSubject(String labelid1158, Appointment ment) {
+		String subj = configurationDao.getConfValue("sms.subject", String.class, null);
+		return subj == null || subj.length() == 0 ? 
+				labelid1158 + " " + ment.getTitle() : subj;
+	}
+
+	public Appointment getAppointment(String appointmentName,
+			String appointmentLocation, String appointmentDescription,
+			Calendar appointmentstart, Calendar appointmentend,
+			Boolean isDaily, Boolean isWeekly, Boolean isMonthly,
+			Boolean isYearly, Long categoryId, Long remind, String[] mmClient,
+			Long roomType, Long languageId,
+			Boolean isPasswordProtected, String password, long roomId, Long users_id) {
+		Appointment a = new Appointment();
+		a.setTitle(appointmentName);
+		a.setLocation(appointmentLocation);
+		a.setDescription(appointmentDescription);
+		a.setStart(appointmentstart.getTime());
+		a.setEnd(appointmentend.getTime());
+		a.setIsDaily(isDaily);
+		a.setIsWeekly(isWeekly);
+		a.setIsMonthly(isMonthly);
+		a.setIsYearly(isYearly);
+		a.setCategory(appointmentCategoryDao.get(categoryId));
+		a.setRemind(appointmentReminderTypDao.get(remind));
+		if (roomId > 0) {
+			a.setRoom(roomDao.get(roomId));
+		} else {
+			a.setRoom(new Room());
+			a.getRoom().setComment(appointmentDescription);
+			a.getRoom().setName(appointmentName);
+			a.getRoom().setRoomtype(roomTypeDao.get(roomType));
+		}
+		a.setOwner(userDao.get(users_id));
+		a.setPasswordProtected(isPasswordProtected);
+		a.setPassword(password);
+		a.setMeetingMembers(new ArrayList<MeetingMember>());
+		for (String singleClient : mmClient) {
+			if (Strings.isEmpty(singleClient)) {
+				continue;
+			}
+			MeetingMember mm = getMeetingMember(users_id, languageId, singleClient);
+			mm.setAppointment(a);
+			a.getMeetingMembers().add(mm);
+		}
+		return a;
+	}
+
+	public MeetingMember getMeetingMember(Long userId, Long langId, String str) {
+		String[] params = str.split(",");
+		
+		try {
+			return meetingMemberDao.get(Long.valueOf(params[0]));
+		} catch (Exception e) {
+			//no-op
+		}
+		MeetingMember mm = new MeetingMember();
+		try {
+			mm.setUser(userDao.get(Long.valueOf(params[4])));
+		} catch (Exception e) {
+			//no-op
+		}
+		if (mm.getUser() == null) {
+			mm.setUser(userDao.getContact(params[3], params[1], params[2], langId, params[5], userId));
+		}
+		
+		return mm;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/conference/InvitationManager.java b/src/main/java/org/apache/openmeetings/data/conference/InvitationManager.java
new file mode 100644
index 0000000..fffc778
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/conference/InvitationManager.java
@@ -0,0 +1,392 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.conference;
+
+import static org.apache.openmeetings.util.CalendarHelper.getZoneId;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.security.NoSuchAlgorithmException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.TimeZone;
+import java.util.Vector;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.IInvitationManager;
+import org.apache.openmeetings.db.dao.room.InvitationDao;
+import org.apache.openmeetings.db.entity.basic.MailMessage;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.room.Invitation.Valid;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.mail.MailHandler;
+import org.apache.openmeetings.mail.SMSHandler;
+import org.apache.openmeetings.util.CalendarHelper;
+import org.apache.openmeetings.util.LinkHelper;
+import org.apache.openmeetings.util.crypt.MD5;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.apache.openmeetings.util.mail.IcalHandler;
+import org.apache.openmeetings.web.mail.template.AbstractAppointmentTemplate;
+import org.apache.openmeetings.web.mail.template.CanceledAppointmentTemplate;
+import org.apache.openmeetings.web.mail.template.CreatedAppointmentTemplate;
+import org.apache.openmeetings.web.mail.template.InvitationTemplate;
+import org.apache.openmeetings.web.mail.template.UpdatedAppointmentTemplate;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.threeten.bp.LocalDateTime;
+import org.threeten.bp.ZonedDateTime;
+
+/**
+ * 
+ * @author swagner
+ * 
+ */
+public class InvitationManager implements IInvitationManager {
+	private static final Logger log = Red5LoggerFactory.getLogger(InvitationManager.class, webAppRootKey);
+
+	@Autowired
+	private InvitationDao invitationDao;
+	@Autowired
+	private MailHandler mailHandler;
+	@Autowired
+	private SMSHandler smsHandler;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+	@Autowired
+	private ConfigurationDao configDao;
+
+	/**
+	 * @author vasya
+	 * 
+	 * @param mm
+	 * @param a
+	 * @param message
+	 * @param subject
+	 * @throws Exception 
+	 */
+	private void sendInvitionLink(Appointment a, MeetingMember mm, MessageType type, boolean ical) throws Exception	{
+		User owner = a.getOwner();
+		String invitorName = owner.getFirstname() + " " + owner.getLastname();
+		Long langId = mm.getUser().getLanguage_id();
+		TimeZone tz = timezoneUtil.getTimeZone(mm.getUser());
+		AbstractAppointmentTemplate t = null;
+		switch (type) {
+			case Cancel:
+				t = CanceledAppointmentTemplate.get(langId, a, tz, invitorName);
+				break;
+			case Create:
+				t = CreatedAppointmentTemplate.get(langId, a, tz, invitorName);
+				break;
+			case Update:
+			default:
+				t = UpdatedAppointmentTemplate.get(langId, a, tz, invitorName);
+				break;
+			
+		}
+		sendInvitionLink(mm.getInvitation(), type, t.getSubject(), t.getEmail(), ical);
+	}
+	
+	public void sendInvitionLink(Invitation i, MessageType type, String subject, String message, boolean ical) throws Exception {
+		String invitation_link = type == MessageType.Cancel ? null : LinkHelper.getInvitationLink(configDao.getBaseUrl(), i);
+		User owner = i.getInvitedBy();
+		
+		String invitorName = owner.getFirstname() + " " + owner.getLastname();
+		String template = InvitationTemplate.getEmail(i.getInvitee().getLanguage_id(), invitorName, message, invitation_link);
+		String email = i.getInvitee().getAdresses().getEmail();
+		String replyToEmail = owner.getAdresses().getEmail();
+		
+		if (ical) {
+			String username = i.getInvitee().getLogin();
+			boolean isOwner = owner.getUser_id().equals(i.getInvitee().getUser_id());
+			IcalHandler handler = new IcalHandler(MessageType.Cancel == type ? IcalHandler.ICAL_METHOD_CANCEL : IcalHandler.ICAL_METHOD_REQUEST);
+
+			HashMap<String, String> attendeeList = handler.getAttendeeData(email, username, isOwner);
+
+			Vector<HashMap<String, String>> atts = new Vector<HashMap<String, String>>();
+			atts.add(attendeeList);
+
+			// Defining Organizer
+
+			HashMap<String, String> organizerAttendee = handler.getAttendeeData(email, username, isOwner);
+			organizerAttendee = handler.getAttendeeData(replyToEmail, owner.getLogin(), isOwner);
+
+			Appointment a = i.getAppointment();
+			// Create ICal Message
+			//FIXME should be checked to generate valid time
+			String meetingId = handler.addNewMeeting(a.getStart(), a.getEnd(),
+					a.getTitle(), atts, invitation_link,
+					organizerAttendee, a.getIcalId(), timezoneUtil.getTimeZone(owner));
+
+			// Writing back meetingUid
+			if (Strings.isEmpty(a.getIcalId())) {
+				a.setIcalId(meetingId);
+				// TODO should it be saved ???
+			}
+
+			log.debug(handler.getICalDataAsString());
+			mailHandler.send(new MailMessage(email, replyToEmail, subject, template, handler.getIcalAsByteArray()));
+		} else {
+			mailHandler.send(email, replyToEmail, subject, template);
+		}
+	}
+
+	/**
+	 * This method sends invitation reminder SMS
+	 * @param phone user's phone
+	 * @param subject 
+	 * @return
+	 */
+	public boolean sendInvitationReminderSMS(String phone, String subject, long language_id) {
+		if (!Strings.isEmpty(phone)) {
+			log.debug("sendInvitationReminderSMS to " + phone + ": " + subject);
+			try {
+				return smsHandler.sendSMS(phone, subject, language_id);
+			} catch (Exception e) {
+				log.error("sendInvitationReminderSMS", e);
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * 
+	 * @param hashCode
+	 * @param hidePass
+	 * @return
+	 */
+	public Object getInvitationByHashCode(String hashCode, boolean hidePass) {
+		try {
+			log.debug("Invitation was requested by hashcode: " + hashCode);
+			Invitation i = invitationDao.getInvitationByHashCode(hashCode, hidePass);
+
+			if (i == null) {
+				// already deleted or does not exist
+				return new Long(-31);
+			} else {
+				switch (i.getValid()) {
+					case OneTime:
+						// do this only if the user tries to get the Invitation, not
+						// while checking the PWD
+						if (hidePass) {
+							// one-time invitation
+							if (i.isUsed()) {
+								// Invitation is of type *only-one-time* and was
+								// already used
+								return new Long(-32);
+							} else {
+								// set to true if this is the first time / a normal
+								// getInvitation-Query
+								i.setUsed(true);
+								invitationDao.update(i);
+								// invitation.setInvitationpass(null);
+								i.setAllowEntry(true);
+							}
+						} else {
+							i.setAllowEntry(true);
+						}
+						break;
+					case Period:
+						LocalDateTime now = ZonedDateTime.now(getZoneId(i.getInvitee().getTimeZoneId())).toLocalDateTime();
+						LocalDateTime from = CalendarHelper.getDateTime(i.getValidFrom(), i.getInvitee().getTimeZoneId());
+						LocalDateTime to = CalendarHelper.getDateTime(i.getValidTo(), i.getInvitee().getTimeZoneId());
+						if (now.isAfter(from) && now.isBefore(to)) {
+							invitationDao.update(i);
+							// invitation.setInvitationpass(null);
+							i.setAllowEntry(true);
+						} else {
+
+							// Invitation is of type *period* and is not valid
+							// anymore, this is an extra hook to display the time
+							// correctly
+							// in the method where it shows that the hash code does
+							// not work anymore
+							i.setAllowEntry(false);
+						}
+						break;
+					case Endless:
+					default:
+						invitationDao.update(i);
+
+						i.setAllowEntry(true);
+						// invitation.setInvitationpass(null);
+						break;
+				}
+				return i;
+			}
+
+		} catch (Exception err) {
+			log.error("[getInvitationByHashCode]", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * 
+	 * @param hashCode
+	 * @param pass
+	 * @return
+	 */
+	public Object checkInvitationPass(String hashCode, String pass) {
+		try {
+			Object obj = getInvitationByHashCode(hashCode, false);
+			log.debug("checkInvitationPass - obj: " + obj);
+			if (obj instanceof Invitation) {
+				Invitation invitation = (Invitation) obj;
+
+
+				if (ManageCryptStyle.getInstanceOfCrypt().verifyPassword(pass, invitation.getPassword())) {
+					return new Long(1);
+				} else {
+					return new Long(-34);
+				}
+			} else {
+				return obj;
+			}
+		} catch (Exception ex2) {
+			log.error("[checkInvitationPass] ", ex2);
+		}
+		return new Long(-1);
+	}
+	
+	/**
+	 * @author vasya
+	 * 
+	 * @param member
+	 * @param a
+	 */
+	public void processInvitation(Appointment a, MeetingMember member, MessageType type) {
+		processInvitation(a, member, type, true);
+	}
+
+	public void processInvitation(Appointment a, MeetingMember mm, MessageType type, boolean sendMail) {
+		if (a.getRemind() == null) {
+			log.error("Appointment doesn't have reminder set!");
+			return;
+		}
+		long remindType = a.getRemind().getTypId();
+		if (remindType < 2) {
+			log.error("MeetingMember should not have invitation!");
+			return;
+		}
+
+		log.debug(":::: processInvitation ..... " + remindType);
+
+		// appointment.getRemind().getTypId() == 1 will not receive emails
+		if (remindType > 1) {
+			log.debug("Invitation for Appointment : simple email");
+
+			try {
+				mm.setInvitation(getInvitation(mm.getInvitation()
+						, mm.getUser(), a.getRoom(), a.isPasswordProtected(), a.getPassword()
+						, Valid.Period, a.getOwner(), null, a.getStart(), a.getEnd(), a));
+				if (sendMail) {
+					sendInvitionLink(a, mm, type, remindType > 2);
+				}
+			} catch (Exception e) {
+				log.error("Unexpected error while setting invitation", e);
+			}
+		}
+	}
+
+	public Invitation getInvitation(Invitation _invitation, User inveetee, Room room
+			, boolean isPasswordProtected, String invitationpass, Valid valid,
+			User createdBy, Long language_id, Date gmtTimeStart, Date gmtTimeEnd
+			, Appointment appointment) {
+		
+		Invitation invitation = _invitation;
+		if (null == _invitation) {
+			invitation = new Invitation();
+			String hashRaw = "HASH" + (System.currentTimeMillis());
+			try {
+				invitation.setHash(MD5.do_checksum(hashRaw));
+			} catch (NoSuchAlgorithmException e) {
+				log.error("Unexpected error while creating invitation", e);
+				throw new RuntimeException(e);
+			}
+		}
+
+		invitation.setPasswordProtected(isPasswordProtected);
+		if (isPasswordProtected) {
+			invitation.setPassword(ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(invitationpass));
+		}
+
+		invitation.setUsed(false);
+		invitation.setValid(valid);
+		
+		// valid period of Invitation
+		switch (valid) {
+			case Period:
+				invitation.setValidFrom(new Date(gmtTimeStart.getTime() - (5 * 60 * 1000)));
+				invitation.setValidTo(gmtTimeEnd);
+				break;
+			case Endless:
+			case OneTime:
+			default:
+				break;
+		}
+
+		invitation.setDeleted(false);
+
+		invitation.setInvitedBy(createdBy);
+		invitation.setInvitee(inveetee);
+		if (language_id != null && Type.contact == invitation.getInvitee().getType()) {
+			invitation.getInvitee().setLanguage_id(language_id);
+		}
+		invitation.setRoom(room);
+		invitation.setInserted(new Date());
+		invitation.setAppointment(appointment);
+
+		return invitation;
+	}
+
+	/**
+	 * Sending invitation within plain mail
+	 * 
+	 * @param user_level
+	 * @param username
+	 * @param message
+	 * @param email
+	 * @param subject
+	 * @param rooms_id
+	 * @param conferencedomain
+	 * @param isPasswordProtected
+	 * @param invitationpass
+	 * @param valid
+	 * @param validFrom
+	 * @param validTo
+	 * @param createdBy
+	 * @return
+	 */
+	public Invitation getInvitation(User inveetee, Room room
+			, boolean isPasswordProtected, String invitationpass, Valid valid,
+			User createdBy, Long language_id, Date gmtTimeStart, Date gmtTimeEnd
+			, Appointment appointment)
+	{
+		Invitation i = getInvitation(null, inveetee, room, isPasswordProtected, invitationpass, valid, createdBy
+				, language_id, gmtTimeStart, gmtTimeEnd, appointment);
+		i = invitationDao.update(i);
+		return i;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/conference/RoomManager.java b/src/main/java/org/apache/openmeetings/data/conference/RoomManager.java
new file mode 100644
index 0000000..1fc3a07
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/conference/RoomManager.java
@@ -0,0 +1,1103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.conference;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+
+import org.apache.openmeetings.db.dao.room.IRoomManager;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.dao.room.SipDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomModerator;
+import org.apache.openmeetings.db.entity.room.RoomOrganisation;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 
+ * @author swagner
+ * 
+ */
+@Transactional
+public class RoomManager implements IRoomManager {
+	private static final Logger log = Red5LoggerFactory.getLogger(RoomManager.class, webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+
+	@Autowired
+	private OrganisationDao orgDao;
+	@Autowired
+	private UserDao usersDao;
+	@Autowired
+	private ISessionManager sessionManager;
+    @Autowired
+	private RoomDao roomDao;
+    @Autowired
+	private SipDao sipDao;
+    @Autowired
+	private RoomTypeDao roomTypeDao;
+
+	/**
+	 * Get a Rooms-Object or NULL
+	 * 
+	 * @param externalRoomId
+	 * @return Rooms-Object or NULL
+	 */
+	public Room getRoomByExternalId(Long externalRoomId,
+			String externalRoomType, long roomtypes_id) {
+		log.debug("getRoombyExternalId : " + externalRoomId + " - "
+				+ externalRoomType + " - " + roomtypes_id);
+		try {
+			TypedQuery<Room> query = em.createNamedQuery("getRoomByExternalId", Room.class);
+			query.setParameter("externalRoomId", externalRoomId);
+			query.setParameter("externalRoomType", externalRoomType);
+			query.setParameter("roomtypes_id", roomtypes_id);
+			List<?> ll = query.getResultList();
+			if (ll.size() > 0) {
+				return (Room) ll.get(0);
+			} else {
+				log.error("Could not find room " + externalRoomId);
+			}
+		} catch (Exception ex2) {
+			log.error("[getRoomByExternalId] ", ex2);
+		}
+		return null;
+	}
+
+	public SearchResult<Room> getRooms(int start, int max, String orderby, boolean asc, String search) {
+		try {
+			SearchResult<Room> sResult = new SearchResult<Room>();
+			sResult.setRecords(this.selectMaxFromRooms(search));
+			sResult.setObjectName(Room.class.getName());
+			sResult.setResult(this.getRoomsInternatlByHQL(start, max,
+					orderby, asc, search));
+			return sResult;
+		} catch (Exception ex2) {
+			log.error("[getRooms] ", ex2);
+		}
+		return null;
+	}
+	
+	public SearchResult<Room> getRoomsWithCurrentUsers(int start, int max, String orderby, boolean asc) {
+		try {
+			SearchResult<Room> sResult = new SearchResult<Room>();
+			sResult.setRecords(this.selectMaxFromRooms(""));
+			sResult.setObjectName(Room.class.getName());
+
+			List<Room> rooms = this.getRoomsInternatl(start, max, orderby,
+					asc);
+
+			for (Room room : rooms) {
+				room.setCurrentusers(sessionManager.getClientListByRoom(room.getRooms_id()));
+			}
+
+			sResult.setResult(rooms);
+			return sResult;
+		} catch (Exception ex2) {
+			log.error("[getRooms] ", ex2);
+		}
+		return null;
+	}
+
+	public List<Room> getRoomsWithCurrentUsersByList(int start, int max, String orderby, boolean asc) {
+		try {
+			List<Room> rooms = this.getRoomsInternatl(start, max, orderby,
+					asc);
+
+			for (Room room : rooms) {
+				room.setCurrentusers(sessionManager.getClientListByRoom(room.getRooms_id()));
+			}
+
+			return rooms;
+		} catch (Exception ex2) {
+			log.error("[getRooms] ", ex2);
+		}
+		return null;
+	}
+
+	public List<Room> getRoomsWithCurrentUsersByListAndType(int start, int max, String orderby, boolean asc, String externalRoomType) {
+		try {
+			List<Room> rooms = this.getRoomsInternatlbyType(start, max,
+					orderby, asc, externalRoomType);
+
+			for (Room room : rooms) {
+				room.setCurrentusers(sessionManager.getClientListByRoom(room.getRooms_id()));
+			}
+
+			return rooms;
+		} catch (Exception ex2) {
+			log.error("[getRooms] ", ex2);
+		}
+		return null;
+	}
+
+	public Long selectMaxFromRooms(String search) {
+		try {
+			if (search.length() == 0) {
+				search = "%";
+			} else {
+				search = "%" + search + "%";
+			}
+			// get all users
+			TypedQuery<Long> query = em.createNamedQuery("selectMaxFromRooms", Long.class);
+			query.setParameter("search", search);
+			List<Long> ll = query.getResultList();
+			log.debug("Number of records" + ll.get(0));
+			return ll.get(0);
+		} catch (Exception ex2) {
+			log.error("[selectMaxFromRooms] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * gets a list of all availible rooms
+	 * 
+	 * @param user_level
+	 * @param start
+	 * @param max
+	 * @param orderby
+	 * @param asc
+	 * @return
+	 */
+	public List<Room> getRoomsInternatl(int start, int max, String orderby,
+			boolean asc) {
+		try {
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			CriteriaQuery<Room> cq = cb.createQuery(Room.class);
+			Root<Room> c = cq.from(Room.class);
+			Predicate condition = cb.equal(c.get("deleted"), false);
+			cq.where(condition);
+			cq.distinct(asc);
+			if (asc) {
+				cq.orderBy(cb.asc(c.get(orderby)));
+			} else {
+				cq.orderBy(cb.desc(c.get(orderby)));
+			}
+			TypedQuery<Room> q = em.createQuery(cq);
+			q.setFirstResult(start);
+			q.setMaxResults(max);
+			List<Room> ll = q.getResultList();
+			return ll;
+		} catch (Exception ex2) {
+			log.error("[getRooms ] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * gets a list of all availible rooms
+	 * 
+	 * @param user_level
+	 * @param start
+	 * @param max
+	 * @param orderby
+	 * @param asc
+	 * @return
+	 */
+	public List<Room> getRoomsInternatlByHQL(int start, int max,
+			String orderby, boolean asc, String search) {
+		try {
+
+			String hql = "select c from Room c where c.deleted = false AND c.name LIKE :search ";
+
+			if (search.length() == 0) {
+				search = "%";
+			} else {
+				search = "%" + search + "%";
+			}
+			if (orderby != null) {
+				hql += " ORDER BY " + (orderby.startsWith("c.") ? "" : "c.") + orderby;
+	
+				if (asc) {
+					hql += " ASC";
+				} else {
+					hql += " DESC";
+				}
+			}
+			TypedQuery<Room> query = em.createQuery(hql, Room.class);
+			query.setParameter("search", search);
+			query.setFirstResult(start);
+			query.setMaxResults(max);
+
+			return query.getResultList();
+
+		} catch (Exception ex2) {
+			log.error("[getRooms ] ", ex2);
+		}
+		return null;
+	}
+
+	public List<Room> getAllRooms() {
+		try {
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			CriteriaQuery<Room> cq = cb.createQuery(Room.class);
+			Root<Room> c = cq.from(Room.class);
+			Predicate condition = cb.equal(c.get("deleted"), false);
+			cq.where(condition);
+			TypedQuery<Room> q = em.createQuery(cq);
+			List<Room> ll = q.getResultList();
+			return ll;
+		} catch (Exception ex2) {
+			log.error("[getAllRooms]", ex2);
+		}
+		return null;
+	}
+
+	public List<Room> getRoomsInternatlbyType(int start, int max,
+			String orderby, boolean asc, String externalRoomType) {
+		try {
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			CriteriaQuery<Room> cq = cb.createQuery(Room.class);
+			Root<Room> c = cq.from(Room.class);
+			Predicate condition = cb.equal(c.get("deleted"), false);
+			Predicate subCondition = cb.equal(c.get("externalRoomType"),
+					externalRoomType);
+			cq.where(condition, subCondition);
+			cq.distinct(asc);
+			if (asc) {
+				cq.orderBy(cb.asc(c.get(orderby)));
+			} else {
+				cq.orderBy(cb.desc(c.get(orderby)));
+			}
+			TypedQuery<Room> q = em.createQuery(cq);
+			q.setFirstResult(start);
+			q.setMaxResults(max);
+			List<Room> ll = q.getResultList();
+			return ll;
+		} catch (Exception ex2) {
+			log.error("[getRooms ] ", ex2);
+		}
+		return null;
+	}
+
+	public List<RoomOrganisation> getOrganisationsByRoom(long rooms_id) {
+		try {
+			String hql = "select c from RoomOrganisation as c "
+					+ "where c.room.rooms_id = :rooms_id "
+					+ "AND c.deleted = false";
+			TypedQuery<RoomOrganisation> q = em.createQuery(hql, RoomOrganisation.class);
+
+			q.setParameter("rooms_id", rooms_id);
+			List<RoomOrganisation> ll = q.getResultList();
+			return ll;
+		} catch (Exception ex2) {
+			log.error("[getOrganisationsByRoom] ", ex2);
+		}
+		return null;
+	}
+
+	public List<Room> getRoomsByIds(List<Integer> roomIds) {
+		try {
+			if (roomIds == null || roomIds.size() == 0) {
+				return new LinkedList<Room>();
+			}
+
+			String queryString = "SELECT r from Room r " + "WHERE ";
+
+			queryString += "(";
+
+			int i = 0;
+			for (Integer room_id : roomIds) {
+				if (i != 0) {
+					queryString += " OR ";
+				}
+				queryString += " r.rooms_id = " + room_id;
+				i++;
+			}
+
+			queryString += ")";
+
+			TypedQuery<Room> q = em.createQuery(queryString, Room.class);
+
+			List<Room> ll = q.getResultList();
+
+			return ll;
+
+		} catch (Exception ex2) {
+			log.error("[getRoomsByIds] ", ex2);
+		}
+		return null;
+	}
+
+	// ---------------------------------------------------------------------------------------------
+
+    /**
+     * Returns number of SIP conference participants
+     * @param rooms_id id of room
+     * @return number of participants
+     */
+    public Integer getSipConferenceMembersNumber(Long rooms_id) {
+    	Room r = roomDao.get(rooms_id);
+    	return r == null || r.getConfno() == null ? null : sipDao.countUsers(r.getConfno());
+    }
+
+    private List<RoomModerator> getModerators(List<Map<String, Object>> list, Long roomId) {
+		List<RoomModerator> result = new ArrayList<RoomModerator>();
+
+		for (Map<String, Object> roomModeratorObj : list) {
+			Long roomModeratorsId = roomModeratorObj.containsKey("roomModeratorsId") ? Long.parseLong(roomModeratorObj.get("roomModeratorsId").toString()) : null;
+			Long userId = Long.parseLong(roomModeratorObj.get("userId").toString());
+			Boolean isSuperModerator = Boolean.parseBoolean(roomModeratorObj.get("isSuperModerator").toString());
+
+			RoomModerator rm = new RoomModerator();
+			rm.setRoomModeratorsId(roomModeratorsId);
+			rm.setRoomId(roomId);
+			rm.setUser(usersDao.get(userId));
+			rm.setIsSuperModerator(isSuperModerator);
+			
+			result.add(rm);
+		}
+		return result;
+    }
+
+	/**
+	 * adds a new Record to the table rooms
+	 * @param name
+	 * @param roomtypes_id
+	 * @param ispublic
+	 * @param hideActivitiesAndActions TODO
+	 * @param hideFilesExplorer TODO
+	 * @param hideActionsMenu TODO
+	 * @param hideScreenSharing TODO
+	 * @param hideWhiteboard TODO
+	 * @return id of the newly created room or NULL
+	 */
+	public Long addRoom(String name, long roomtypes_id,
+			String comment, Long numberOfPartizipants, boolean ispublic,
+			List<Integer> organisations, Boolean appointment, Boolean isDemoRoom,
+			Integer demoTime, Boolean isModeratedRoom,
+			List<Map<String, Object>> roomModerators,
+			Boolean allowUserQuestions, Boolean isAudioOnly, Boolean allowFontStyles, Boolean isClosed,
+			String redirectURL, String conferencePin,
+			Long ownerId, Boolean waitForRecording, boolean allowRecording,
+			Boolean hideTopBar, Boolean hideChat, Boolean hideActivitiesAndActions, Boolean hideFilesExplorer, 
+			Boolean hideActionsMenu, Boolean hideScreenSharing, Boolean hideWhiteboard,
+			Boolean showMicrophoneStatus, Boolean chatModerated, boolean chatOpened
+			, boolean filesOpened, boolean autoVideoSelect, boolean sipEnabled) {
+
+		try {
+			Room r = new Room();
+			r.setName(name);
+			r.setComment(comment);
+			r.setStarttime(new Date());
+			r.setNumberOfPartizipants(numberOfPartizipants);
+			r.setRoomtype(roomTypeDao.get(roomtypes_id));
+			r.setIspublic(ispublic);
+			r.setAllowUserQuestions(allowUserQuestions);
+			r.setIsAudioOnly(isAudioOnly);
+			r.setAllowFontStyles(allowFontStyles);
+
+			r.setAppointment(appointment);
+
+			r.setIsDemoRoom(isDemoRoom);
+			r.setDemoTime(demoTime);
+
+			r.setIsModeratedRoom(isModeratedRoom);
+			r.setHideTopBar(hideTopBar);
+
+			r.setDeleted(false);
+
+			r.setIsClosed(isClosed);
+			r.setRedirectURL(redirectURL);
+
+			r.setOwnerId(ownerId);
+
+			r.setWaitForRecording(waitForRecording);
+			r.setAllowRecording(allowRecording);
+			
+			r.setHideChat(hideChat);
+			r.setHideActivitiesAndActions(hideActivitiesAndActions);
+			r.setHideActionsMenu(hideActionsMenu);
+			r.setHideFilesExplorer(hideFilesExplorer);
+			r.setHideScreenSharing(hideScreenSharing);	
+			r.setHideWhiteboard(hideWhiteboard);
+			r.setShowMicrophoneStatus(showMicrophoneStatus);
+			r.setChatModerated(chatModerated);
+			r.setChatOpened(chatOpened);
+			r.setFilesOpened(filesOpened);
+			r.setAutoVideoSelect(autoVideoSelect);
+			r.setSipEnabled(sipEnabled);
+			r.setPin(conferencePin);
+			
+			r = roomDao.update(r, ownerId);
+
+			if (organisations != null) {
+				Long t = this.updateRoomOrganisations(organisations, r);
+				if (t == null) {
+					return null;
+				}
+			}
+
+			if (roomModerators != null) {
+				r.setModerators(getModerators(roomModerators, r.getRooms_id()));
+				r = roomDao.update(r, ownerId);
+			}
+
+			return r.getRooms_id();
+		} catch (Exception ex2) {
+			log.error("[addRoom] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * adds/check a new Record to the table rooms with external fields
+	 * 
+	 * @param name
+	 * @param roomtypes_id
+	 * @param comment
+	 * @param numberOfPartizipants
+	 * @param ispublic
+	 * @param organisations
+	 * @param appointment
+	 * @param isDemoRoom
+	 * @param demoTime
+	 * @param isModeratedRoom
+	 * @param roomModerators
+	 * @param externalRoomId
+	 * @param externalRoomType
+	 * @param allowUserQuestions
+	 * @param isAudioOnly
+	 * @param allowFontStyles
+	 * @param isClosed
+	 * @param redirectURL
+	 * @param waitForRecording
+	 * @param allowRecording
+	 * @param hideTopBar
+	 * @return id of (the newly created) room or NULL
+	 */
+	public Long addExternalRoom(String name, long roomtypes_id, String comment,
+			Long numberOfPartizipants, boolean ispublic, List<Integer> organisations,
+			Boolean appointment, Boolean isDemoRoom, Integer demoTime,
+			Boolean isModeratedRoom, List<Map<String, Object>> roomModerators,
+			Long externalRoomId, String externalRoomType,
+			Boolean allowUserQuestions, Boolean isAudioOnly, Boolean allowFontStyles, Boolean isClosed,
+			String redirectURL, Boolean waitForRecording,
+			boolean allowRecording, Boolean hideTopBar) {
+
+		log.debug("addExternalRoom");
+
+		try {
+			Room r = new Room();
+			r.setName(name);
+			r.setComment(comment);
+			r.setStarttime(new Date());
+			r.setNumberOfPartizipants(numberOfPartizipants);
+			r.setRoomtype(roomTypeDao.get(roomtypes_id));
+			r.setIspublic(ispublic);
+
+			r.setAllowUserQuestions(allowUserQuestions);
+			r.setIsAudioOnly(isAudioOnly);
+			r.setAllowFontStyles(allowFontStyles);
+
+			r.setAppointment(appointment);
+
+			r.setIsDemoRoom(isDemoRoom);
+			r.setDemoTime(demoTime);
+
+			r.setIsModeratedRoom(isModeratedRoom);
+
+			r.setDeleted(false);
+
+			r.setExternalRoomId(externalRoomId);
+			r.setExternalRoomType(externalRoomType);
+
+			r.setIsClosed(isClosed);
+			r.setRedirectURL(redirectURL);
+
+			r.setWaitForRecording(waitForRecording);
+			r.setAllowRecording(allowRecording);
+
+			r.setHideTopBar(hideTopBar);
+
+			r = em.merge(r);
+
+			long returnId = r.getRooms_id();
+
+			if (organisations != null) {
+				Long t = this.updateRoomOrganisations(organisations, r);
+				if (t == null) {
+					return null;
+				}
+			}
+
+			if (roomModerators != null) {
+				r.setModerators(getModerators(roomModerators, r.getRooms_id()));
+				r = roomDao.update(r, null);
+			}
+
+			return returnId;
+		} catch (Exception ex2) {
+			log.error("[addExternalRoom] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * adds a new record to the table rooms_organisation
+	 * 
+	 * @param rooms_id
+	 * @param organisation_id
+	 * @return the id of the newly created Rooms_Organisation or NULL
+	 */
+	public Long addRoomToOrganisation(long rooms_id,
+			long organisation_id) {
+		try {
+			RoomOrganisation rOrganisation = new RoomOrganisation();
+			rOrganisation.setRoom(roomDao.get(rooms_id));
+			log.debug("addRoomToOrganisation rooms '"
+					+ rOrganisation.getRoom().getName() + "'");
+			rOrganisation.setStarttime(new Date());
+			rOrganisation.setOrganisation(orgDao.get(organisation_id));
+			rOrganisation.setDeleted(false);
+
+			rOrganisation = em.merge(rOrganisation);
+			long returnId = rOrganisation.getRooms_organisation_id();
+			return returnId;
+		} catch (Exception ex2) {
+			log.error("[addRoomToOrganisation] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param rooms_organisation_id
+	 * @return
+	 */
+	public RoomOrganisation getRoomsOrganisationById(
+			long rooms_organisation_id) {
+		try {
+			CriteriaBuilder cb = em.getCriteriaBuilder();
+			CriteriaQuery<RoomOrganisation> cq = cb
+					.createQuery(RoomOrganisation.class);
+			Root<RoomOrganisation> c = cq.from(RoomOrganisation.class);
+			Predicate condition = cb.equal(c.get("rooms_organisation_id"),
+					rooms_organisation_id);
+			cq.where(condition);
+			TypedQuery<RoomOrganisation> q = em.createQuery(cq);
+			List<RoomOrganisation> ll = q.getResultList();
+
+			if (ll.size() > 0) {
+				return ll.get(0);
+			}
+		} catch (Exception ex2) {
+			log.error("[getRoomsByOrganisation] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * get List of Rooms_Organisation by organisation and roomtype
+	 * 
+	 * @param user_level
+	 * @param organisation_id
+	 * @param roomtypes_id
+	 * @return
+	 */
+	public List<RoomOrganisation> getRoomsOrganisationByOrganisationIdAndRoomType(long organisation_id, long roomtypes_id) {
+		try {
+			TypedQuery<RoomOrganisation> q = em.
+					createNamedQuery("getRoomsOrganisationByOrganisationIdAndRoomType", RoomOrganisation.class);
+			q.setParameter("roomtypes_id", roomtypes_id);
+			q.setParameter("organisation_id", organisation_id);
+			q.setParameter("deleted", true);
+			return q.getResultList();
+		} catch (Exception ex2) {
+			log.error("[getRoomsByOrganisation] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * Gets all rooms by an organisation
+	 * 
+	 * @param organisation_id
+	 * @return list of Rooms_Organisation with Rooms as Sub-Objects or null
+	 */
+	public List<RoomOrganisation> getRoomsOrganisationByOrganisationId(long organisation_id) {
+		try {
+			TypedQuery<RoomOrganisation> query = em.
+					createNamedQuery("getRoomsOrganisationByOrganisationId", RoomOrganisation.class);
+
+			query.setParameter("organisation_id", organisation_id);
+			query.setParameter("deleted", true);
+
+			List<RoomOrganisation> ll = query.getResultList();
+
+			return ll;
+		} catch (Exception ex2) {
+			log.error("[getPublicRoomsWithoutType] ", ex2);
+		}
+		return null;
+	}
+
+	public SearchResult<RoomOrganisation> getRoomsOrganisationsByOrganisationId(long organisation_id, int start, int max, String orderby,
+			boolean asc) {
+		try {
+			SearchResult<RoomOrganisation> sResult = new SearchResult<RoomOrganisation>();
+			sResult.setObjectName(RoomOrganisation.class.getName());
+			sResult.setRecords(this.selectMaxFromRoomsByOrganisation(
+					organisation_id).longValue());
+			sResult.setResult(getRoomsOrganisationByOrganisationId(organisation_id, start, max, orderby, asc));
+			return sResult;
+		} catch (Exception ex2) {
+			log.error("[getRoomsByOrganisation] ", ex2);
+		}
+		return null;
+	}
+
+	public Integer selectMaxFromRoomsByOrganisation(long organisation_id) {
+		try {
+			// get all users
+			TypedQuery<RoomOrganisation> q = em.createNamedQuery("selectMaxFromRoomsByOrganisation", RoomOrganisation.class);
+
+			q.setParameter("organisation_id", organisation_id);
+			q.setParameter("deleted", true);
+			List<RoomOrganisation> ll = q.getResultList();
+
+			return ll.size();
+		} catch (Exception ex2) {
+			log.error("[selectMaxFromRooms] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param organisation_id
+	 * @param start
+	 * @param max
+	 * @param orderby
+	 * @param asc
+	 * @return
+	 */
+	private List<RoomOrganisation> getRoomsOrganisationByOrganisationId(
+			long organisation_id, int start, int max, String orderby,
+			boolean asc) {
+		try {
+			String hql = "select c from RoomOrganisation as c "
+					+ "where c.organisation.organisation_id = :organisation_id "
+					+ "AND c.deleted = false";
+			if (orderby.startsWith("c.")) {
+				hql += "ORDER BY " + orderby;
+			} else {
+				hql += "ORDER BY " + "c." + orderby;
+			}
+			if (asc) {
+				hql += " ASC";
+			} else {
+				hql += " DESC";
+			}
+
+			TypedQuery<RoomOrganisation> q = em.createQuery(hql, RoomOrganisation.class);
+
+			q.setParameter("organisation_id", organisation_id);
+			q.setFirstResult(start);
+			q.setMaxResults(max);
+			List<RoomOrganisation> ll = q.getResultList();
+
+			return ll;
+		} catch (Exception ex2) {
+			log.error("[getRoomsByOrganisation] ", ex2);
+		}
+		return null;
+	}
+
+	public RoomOrganisation getRoomsOrganisationByOrganisationIdAndRoomId(
+			long organisation_id, long rooms_id) {
+		try {
+			TypedQuery<RoomOrganisation> q = em.
+					createNamedQuery("getRoomsOrganisationByOrganisationIdAndRoomId", RoomOrganisation.class);
+
+			q.setParameter("rooms_id", rooms_id);
+			q.setParameter("organisation_id", organisation_id);
+			q.setParameter("deleted", true);
+			List<RoomOrganisation> ll = q.getResultList();
+
+			if (ll.size() > 0) {
+				return ll.get(0);
+			}
+		} catch (Exception ex2) {
+			log.error("[getRoomsOrganisationByOrganisationIdAndRoomId] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param organisation_id
+	 * @return
+	 */
+	public List<RoomOrganisation> getRoomsOrganisationByRoomsId(long rooms_id) {
+		try {
+			TypedQuery<RoomOrganisation> q = em.createNamedQuery("getRoomsOrganisationByRoomsId", RoomOrganisation.class);
+			q.setParameter("rooms_id", rooms_id);
+			q.setParameter("deleted", true);
+			return q.getResultList();
+		} catch (Exception ex2) {
+			log.error("[getRoomsByOrganisation] ", ex2);
+		}
+		return null;
+	}
+
+	public Long updateRoomInternal(long rooms_id, long roomtypes_id,
+			String name, boolean ispublic, String comment,
+			Long numberOfPartizipants, List<Integer> organisations,
+			Boolean appointment, Boolean isDemoRoom, Integer demoTime,
+			Boolean isModeratedRoom, List<Map<String, Object>> roomModerators,
+			Boolean allowUserQuestions, Boolean isAudioOnly, Boolean allowFontStyles, Boolean isClosed,
+			String redirectURL, String conferencePin,
+			Long ownerId, Boolean waitForRecording, boolean allowRecording,
+			Boolean hideTopBar, Boolean hideChat, Boolean hideActivitiesAndActions, Boolean hideFilesExplorer, 
+			Boolean hideActionsMenu, Boolean hideScreenSharing, Boolean hideWhiteboard, 
+			Boolean showMicrophoneStatus, Boolean chatModerated, boolean chatOpened, boolean filesOpened
+			, boolean autoVideoSelect, boolean sipEnabled) {
+		try {
+			log.debug("*** updateRoom numberOfPartizipants: "
+					+ numberOfPartizipants);
+			Room r = roomDao.get(rooms_id);
+			r.setComment(comment);
+
+			r.setIspublic(ispublic);
+			r.setNumberOfPartizipants(numberOfPartizipants);
+			r.setName(name);
+			r.setRoomtype(roomTypeDao.get(roomtypes_id));
+			r.setUpdatetime(new Date());
+			r.setAllowUserQuestions(allowUserQuestions);
+			r.setIsAudioOnly(isAudioOnly);
+			r.setAllowFontStyles(allowFontStyles);
+
+			r.setIsDemoRoom(isDemoRoom);
+			r.setDemoTime(demoTime);
+
+			r.setAppointment(appointment);
+
+			r.setIsModeratedRoom(isModeratedRoom);
+			r.setHideTopBar(hideTopBar);
+
+			r.setIsClosed(isClosed);
+			r.setRedirectURL(redirectURL);
+			r.setOwnerId(ownerId);
+			r.setWaitForRecording(waitForRecording);
+			r.setAllowRecording(allowRecording);
+			
+			r.setHideChat(hideChat);
+			r.setHideActivitiesAndActions(hideActivitiesAndActions);
+			r.setHideActionsMenu(hideActionsMenu);
+			r.setHideFilesExplorer(hideFilesExplorer);
+			r.setHideScreenSharing(hideScreenSharing);
+			r.setHideWhiteboard(hideWhiteboard);
+			r.setShowMicrophoneStatus(showMicrophoneStatus);
+			r.setChatModerated(chatModerated);
+			r.setChatOpened(chatOpened);
+			r.setFilesOpened(filesOpened);
+			r.setAutoVideoSelect(autoVideoSelect);
+			r.setPin(conferencePin);
+			r.setSipEnabled(sipEnabled);
+			r = roomDao.update(r, ownerId);
+
+			if (organisations != null) {
+				Long t = this.updateRoomOrganisations(organisations, r);
+				if (t == null) {
+					return null;
+				}
+			}
+			if (roomModerators != null) {
+				r.setModerators(getModerators(roomModerators, r.getRooms_id()));
+				r = roomDao.update(r, null);
+			}
+
+			return r.getRooms_id();
+		} catch (Exception ex2) {
+			log.error("[updateRoom] ", ex2);
+		}
+		return null;
+	}
+
+	@SuppressWarnings("rawtypes")
+	private boolean checkRoomAlreadyInOrg(Long orgid, List organisations)
+			throws Exception {
+		for (Iterator it = organisations.iterator(); it.hasNext();) {
+			RoomOrganisation rOrganisation = (RoomOrganisation) it.next();
+			if (rOrganisation.getOrganisation().getOrganisation_id()
+					.equals(orgid))
+				return true;
+		}
+		return false;
+	}
+
+	private boolean checkRoomShouldByDeleted(long orgId, List<Integer> organisations) throws Exception {
+		for (Iterator<Integer> it = organisations.iterator(); it.hasNext();) {
+			Integer key = it.next();
+			Long storedOrgId = key.longValue();
+			if (storedOrgId.equals(orgId))
+				return true;
+		}
+		return false;
+	}
+
+	private Long updateRoomOrganisations(List<Integer> organisations, Room room) throws Exception {
+		List<RoomOrganisation> roomOrganisations = getOrganisationsByRoom(room.getRooms_id());
+
+		List<Long> roomsToAdd = new LinkedList<Long>();
+		List<Long> roomsToDel = new LinkedList<Long>();
+
+		for (Iterator<Integer> it = organisations.iterator(); it.hasNext();) {
+			Integer key = it.next();
+			Long orgIdToAdd = key.longValue();
+			if (!this.checkRoomAlreadyInOrg(orgIdToAdd, roomOrganisations))
+				roomsToAdd.add(orgIdToAdd);
+		}
+
+		for (Iterator<RoomOrganisation> it = roomOrganisations.iterator(); it.hasNext();) {
+			RoomOrganisation rOrganisation = it.next();
+			Long orgIdToDel = rOrganisation.getOrganisation()
+					.getOrganisation_id();
+			if (!this.checkRoomShouldByDeleted(orgIdToDel, organisations))
+				roomsToDel.add(orgIdToDel);
+		}
+
+		// log.error("updateRoomOrganisations roomsToAdd: "+roomsToAdd.size());
+		// log.error("updateRoomOrganisations roomsToDel: "+roomsToDel.size());
+
+		for (Iterator<Long> it = roomsToAdd.iterator(); it.hasNext();) {
+			Long orgIdToAdd = it.next();
+			addRoomToOrganisation(room.getRooms_id(), orgIdToAdd);
+		}
+		for (Iterator<Long> it = roomsToDel.iterator(); it.hasNext();) {
+			Long orgToDel = it.next();
+			deleteRoomFromOrganisationByRoomAndOrganisation(room.getRooms_id(), orgToDel);
+		}
+
+		return new Long(1);
+	}
+
+	/**
+	 * delete all Rooms_Organisations and Room by a given room_id
+	 * 
+	 * @param rooms_id
+	 */
+	public Long deleteRoomById(long rooms_id) {
+		try {
+			deleteAllRoomsOrganisationOfRoom(rooms_id);
+			roomDao.delete(roomDao.get(rooms_id), -1L);
+			return rooms_id;
+		} catch (Exception ex2) {
+			log.error("[deleteRoomById] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * delete all Rooms_Organisation by a rooms_id
+	 * 
+	 * @param rooms_id
+	 */
+	@SuppressWarnings("rawtypes")
+	public void deleteAllRoomsOrganisationOfRoom(long rooms_id) {
+		try {
+			List ll = this.getRoomsOrganisationByRoomsId(rooms_id);
+			for (Iterator it = ll.iterator(); it.hasNext();) {
+				RoomOrganisation rOrg = (RoomOrganisation) it.next();
+				this.deleteRoomsOrganisation(rOrg);
+			}
+		} catch (Exception ex2) {
+			log.error("[deleteAllRoomsOrganisationOfRoom] ", ex2);
+		}
+	}
+
+	/**
+	 * Delete all room of a given Organisation
+	 * 
+	 * @param organisation_id
+	 */
+	public void deleteAllRoomsOrganisationOfOrganisation(long organisation_id) {
+		try {
+			for (RoomOrganisation rOrg : getRoomsOrganisationByOrganisationId(organisation_id)) {
+				this.deleteRoomsOrganisation(rOrg);
+			}
+		} catch (Exception ex2) {
+			log.error("[deleteAllRoomsOfOrganisation] ", ex2);
+		}
+	}
+
+	/**
+	 * Delete a Rooms_Organisation by its id
+	 * 
+	 * @param rooms_organisation_id
+	 */
+	public Long deleteRoomsOrganisationByID(long rooms_organisation_id) {
+		try {
+			RoomOrganisation rOrg = this
+					.getRoomsOrganisationById(rooms_organisation_id);
+			return this.deleteRoomsOrganisation(rOrg);
+		} catch (Exception ex2) {
+			log.error("[deleteRoomsOrganisationByID] ", ex2);
+		}
+		return null;
+	}
+
+	private Long deleteRoomFromOrganisationByRoomAndOrganisation(long rooms_id,
+			long organisation_id) {
+		try {
+			RoomOrganisation rOrganisation = this
+					.getRoomsOrganisationByOrganisationIdAndRoomId(
+							organisation_id, rooms_id);
+			return this.deleteRoomsOrganisation(rOrganisation);
+		} catch (Exception ex2) {
+			log.error("[deleteRoomFromOrganisationByRoomAndOrganisation] ", ex2);
+		}
+		return null;
+	}
+
+	/**
+	 * delete a Rooms_Organisation-Object
+	 * 
+	 * @param rOrg
+	 */
+	public Long deleteRoomsOrganisation(RoomOrganisation rOrg) {
+		try {
+			rOrg.setDeleted(true);
+			rOrg.setUpdatetime(new Date());
+			if (rOrg.getRooms_organisation_id() == null) {
+				em.persist(rOrg);
+			} else {
+				if (!em.contains(rOrg)) {
+					em.merge(rOrg);
+				}
+			}
+			return rOrg.getRooms_organisation_id();
+		} catch (Exception ex2) {
+			log.error("[deleteRoomsOrganisation] ", ex2);
+		}
+		return null;
+	}
+
+	// --------------------------------------------------------------------------------------------
+
+	public void closeRoom(Long rooms_id, Boolean status) {
+		try {
+
+			Room room = roomDao.get(rooms_id);
+
+			room.setIsClosed(status);
+
+			roomDao.update(room, -1L);
+
+		} catch (Exception e) {
+			log.error("Error updateRoomObject : ", e);
+		}
+	}
+
+	/**
+	 * Get a Rooms-Object or NULL
+	 * 
+	 * @param rooms_id
+	 * @return Rooms-Object or NULL
+	 */
+	public Room getRoomByOwnerAndTypeId(Long ownerId, Long roomtypesId, String roomName) {
+		try {
+
+			if (roomtypesId == null || roomtypesId == 0) {
+				return null;
+			}
+			log.debug("getRoomByOwnerAndTypeId : " + ownerId + " || " + roomtypesId);
+			Room room = null;
+			TypedQuery<Room> query = em.createNamedQuery("getRoomByOwnerAndTypeId", Room.class);
+			query.setParameter("ownerId", ownerId);
+			query.setParameter("roomtypesId", roomtypesId);
+			List<Room> ll = query.getResultList();
+			if (ll.size() > 0) {
+				room = ll.get(0);
+			}
+
+			if (room != null) {
+				return room;
+			} else {
+				log.debug("Could not find room " + ownerId + " || " + roomtypesId);
+				
+				Long rooms_id = addRoom(roomName, roomtypesId,
+						"My Rooms of ownerId " + ownerId,
+						(roomtypesId == 1) ? 25L : 150L, // numberOfPartizipants
+						false, // ispublic
+						null, // organisations
+						false, // appointment
+						false, // isDemoRoom
+						null, // demoTime
+						false, // isModeratedRoom
+						null, // roomModerators
+						true, // allowUserQuestions
+						false, // isAudioOnly
+						true, // allowFontStyle
+						false, // isClosed
+						"", // redirectURL
+						"", // conferencePin
+						ownerId, null,
+						true,  // allowRecording 
+						false, // hideTopBar
+						false, // hideChat
+						false, // hideActivitiesAndActions
+						false, // hideFilesExplorer
+						false, // hideActionsMenu
+						false, // hideScreenSharing 
+						false, // hideWhiteboard
+						false, //showMicrophoneStatus
+						false, // chatModerated
+						false, //chatOpened
+						false, //filesOpened
+						false, //autoVideoSelect
+						false //sipEnabled
+						);
+
+				if (rooms_id != null) {
+					return roomDao.get(rooms_id);
+				}
+			}
+		} catch (Exception ex2) {
+			log.error("[getRoomByOwnerAndTypeId] ", ex2);
+		}
+		return null;
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/data/file/FileProcessor.java b/src/main/java/org/apache/openmeetings/data/file/FileProcessor.java
new file mode 100644
index 0000000..bf09ac0
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/file/FileProcessor.java
@@ -0,0 +1,182 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.file;
+
+import static org.apache.openmeetings.util.OmFileHelper.thumbImagePrefix;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openmeetings.converter.FlvExplorerConverter;
+import org.apache.openmeetings.converter.GenerateImage;
+import org.apache.openmeetings.converter.GenerateThumbs;
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.documents.GeneratePDF;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.StoredFile;
+import org.apache.openmeetings.util.crypt.MD5;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ConverterProcessResultList;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class FileProcessor {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(FileProcessor.class, OpenmeetingsVariables.webAppRootKey);
+
+	//Spring loaded Beans
+	@Autowired
+	private FlvExplorerConverter flvExplorerConverter;
+	@Autowired
+	private FileExplorerItemDao fileExplorerItemDao;
+	@Autowired
+	private GenerateImage generateImage;
+	@Autowired
+	private GenerateThumbs generateThumbs;
+	@Autowired
+	private GeneratePDF generatePDF;
+
+	public ConverterProcessResultList processFile(Long userId, Long room_id, 
+			boolean isOwner, InputStream is, Long parentFolderId, String fileSystemName, 
+			Long externalFileId, String externalType) throws Exception {
+		
+		ConverterProcessResultList returnError = new ConverterProcessResultList();
+		
+		int dotidx = fileSystemName.lastIndexOf('.');
+
+        // Generate a random string to prevent any problems with
+        // foreign characters and duplicates
+        Date d = new Date();
+        String newFileSystemName = MD5.do_checksum("FILE_" + d.getTime());
+
+        String newFileExtDot = fileSystemName.substring(dotidx, fileSystemName.length()).toLowerCase();
+        String newFileExt = newFileExtDot.substring(1);
+        log.debug("newFileExt: " + newFileExt);
+        StoredFile storedFile = new StoredFile(newFileSystemName, newFileExt); 
+
+        // Check variable to see if this file is a presentation
+        // check if this is a a file that can be converted by
+        // openoffice-service
+        boolean canBeConverted = storedFile.isConvertable();
+        boolean isPdf = storedFile.isPdf();
+        boolean isImage = storedFile.isImage();
+        boolean isChart = storedFile.isChart();
+        boolean isAsIs = storedFile.isAsIs();
+        boolean isVideo = storedFile.isVideo();
+
+        log.debug("isAsIs: " + isAsIs);
+
+        // add outputfolders for profiles
+        // if it is a presenation it will be copied to another place
+        if (!(canBeConverted || isPdf || isImage || isVideo || isAsIs)) {
+        	returnError.addItem("wrongType", new ConverterProcessResult("The file type cannot be converted"));
+            return returnError;
+        }
+
+        File completeName = new File(
+        	isAsIs ? OmFileHelper.getUploadFilesDir() : OmFileHelper.getUploadTempFilesDir()
+        	, newFileSystemName + newFileExtDot);
+        log.debug("writing file to: " + completeName);
+        FileHelper.copy(is, completeName);
+        is.close();
+
+        Long ownerId = null;
+        if (parentFolderId == -2) {
+            parentFolderId = 0L;
+            ownerId = userId;
+        }
+        if (isOwner) {
+            ownerId = userId;
+        }
+
+        String fileHashName = newFileSystemName + newFileExtDot;
+        Boolean isPresentation = false;
+        if (canBeConverted || isPdf) {
+            // In case of a presentation the hash is a folder-name
+            fileHashName = newFileSystemName;
+            isPresentation = true;
+        }
+        if (isImage) {
+            fileHashName = newFileSystemName + ".jpg";
+        }
+        if (isVideo) {
+            fileHashName = newFileSystemName + ".flv";
+        }
+
+        FileExplorerItem fileExplorerItem = fileExplorerItemDao.getFileExplorerItemsById(parentFolderId);
+
+        if (fileExplorerItem != null) {
+            if (fileExplorerItem.getIsFolder() == null
+                    || !fileExplorerItem.getIsFolder()) {
+                parentFolderId = 0L;
+            }
+        }
+
+        Long fileExplorerItemId = fileExplorerItemDao.add(
+                fileSystemName, fileHashName, // The Hashname of the file
+                parentFolderId, ownerId, room_id, userId, false, // isFolder
+                isImage, isPresentation, "", false, isChart, 
+                externalFileId, externalType);
+        log.debug("fileExplorerItemId: " + fileExplorerItemId);
+        
+        
+        
+        log.debug("canBeConverted: " + canBeConverted);
+        if (canBeConverted) {
+            // convert to pdf, thumbs, swf and xml-description
+            returnError = generatePDF.convertPDF(newFileSystemName, "files", true, completeName);
+        } else if (isPdf) {
+            // convert to thumbs, swf and xml-description
+            returnError = generatePDF.convertPDF(newFileSystemName, "files", false, completeName);
+        } else if (isChart) {
+            log.debug("uploaded chart file");
+        } else if (isImage && !isAsIs) {
+            // convert it to JPG
+            log.debug("##### convert it to JPG: ");
+            returnError = generateImage.convertImage(newFileSystemName, newFileExtDot, "files",
+                    newFileSystemName, false);
+        } else if (isAsIs) {
+        	ConverterProcessResult processThumb = generateThumbs.generateThumb(thumbImagePrefix, completeName, 50);
+            returnError.addItem("processThumb", processThumb);
+        } else if (isVideo) {
+        	List<ConverterProcessResult> returnList = flvExplorerConverter.startConversion(fileExplorerItemId, completeName.getCanonicalPath());
+        	
+        	int i=0;
+        	for (ConverterProcessResult returnMap : returnList) {
+        		returnError.addItem("processFLV "+i, returnMap);
+        	}
+        	
+        }
+        
+        // has to happen at the end, otherwise it will be overwritten
+        //cause the variable is new initialized
+        returnError.setCompleteName(completeName.getName());
+        returnError.setFileExplorerItemId(fileExplorerItemId);
+        
+		return returnError;
+		
+	}
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/data/file/FileUtils.java b/src/main/java/org/apache/openmeetings/data/file/FileUtils.java
new file mode 100644
index 0000000..930299d
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/file/FileUtils.java
@@ -0,0 +1,127 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.file;
+
+import static org.apache.openmeetings.util.OmFileHelper.thumbImagePrefix;
+
+import java.io.File;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class FileUtils {
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			FileProcessor.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private FileExplorerItemDao fileExplorerItemDao;
+
+	public long getSizeOfDirectoryAndSubs(FileExplorerItem fileExplorerItem) {
+		try {
+
+			long fileSize = 0;
+
+			File base = OmFileHelper.getUploadFilesDir();
+			if (fileExplorerItem.getIsImage()) {
+
+				File tFile = new File(base, fileExplorerItem.getFileHash());
+				if (tFile.exists()) {
+					fileSize += tFile.length();
+				}
+
+				File thumbFile = new File(base, thumbImagePrefix + fileExplorerItem.getFileHash());
+				if (thumbFile.exists()) {
+					fileSize += thumbFile.length();
+				}
+
+			}
+
+			if (fileExplorerItem.getIsPresentation()) {
+
+				File tFolder = new File(base, fileExplorerItem.getFileHash());
+
+				if (tFolder.exists()) {
+					fileSize += OmFileHelper.getSize(tFolder);
+				}
+
+			}
+
+			log.debug("calling [1] FileExplorerItemDaoImpl.updateFileOrFolder()");
+			fileExplorerItemDao.updateFileOrFolder(fileExplorerItem);
+
+			FileExplorerItem[] childElements = fileExplorerItemDao
+					.getFileExplorerItemsByParent(fileExplorerItem
+							.getFileExplorerItemId());
+
+			for (FileExplorerItem childExplorerItem : childElements) {
+
+				fileSize += this.getSizeOfDirectoryAndSubs(childExplorerItem);
+
+			}
+
+			return fileSize;
+
+		} catch (Exception err) {
+			log.error("[getSizeOfDirectoryAndSubs] ", err);
+		}
+		return 0;
+	}
+
+	public void setFileToOwnerOrRoomByParent(FileExplorerItem fileExplorerItem,
+			Long users_id, Long room_id) {
+		try {
+
+			fileExplorerItem.setOwnerId(users_id);
+			fileExplorerItem.setRoom_id(room_id);
+
+			log.debug("calling [2] FileExplorerItemDaoImpl.updateFileOrFolder()");
+			fileExplorerItemDao.updateFileOrFolder(fileExplorerItem);
+
+			FileExplorerItem[] childElements = fileExplorerItemDao
+					.getFileExplorerItemsByParent(fileExplorerItem
+							.getFileExplorerItemId());
+
+			for (FileExplorerItem childExplorerItem : childElements) {
+
+				this.setFileToOwnerOrRoomByParent(childExplorerItem, users_id,
+						room_id);
+
+			}
+
+		} catch (Exception err) {
+			log.error("[setFileToOwnerOrRoomByParent] ", err);
+		}
+	}
+
+	public String formatDate(Date date) {
+		SimpleDateFormat formatter;
+		String pattern = "dd/MM/yy H:mm:ss";
+		Locale locale = new Locale("en", "US");
+		formatter = new SimpleDateFormat(pattern, locale);
+		return formatter.format(date);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/flvrecord/converter/FlvInterviewConverterTask.java b/src/main/java/org/apache/openmeetings/data/flvrecord/converter/FlvInterviewConverterTask.java
new file mode 100644
index 0000000..c6bb890
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/flvrecord/converter/FlvInterviewConverterTask.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.flvrecord.converter;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import org.apache.openmeetings.converter.FlvInterviewConverter;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.task.TaskExecutor;
+
+public class FlvInterviewConverterTask {
+	private static final Logger log = Red5LoggerFactory.getLogger(FlvInterviewConverterTask.class, webAppRootKey);
+
+	@Autowired
+	private TaskExecutor taskExecutor;
+	@Autowired
+	private FlvInterviewConverter flvInterviewConverter;
+
+	public void startConversionThread(final Long flvRecordingId) {
+		try {
+			log.debug("[-1-]" + taskExecutor);
+
+			taskExecutor.execute(new Runnable() {
+				public void run() {
+					flvInterviewConverter.startConversion(flvRecordingId);
+				}
+			});
+		} catch (Exception err) {
+			log.error("[startConversionThread]", err);
+		}
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/data/flvrecord/converter/FlvRecorderConverterTask.java b/src/main/java/org/apache/openmeetings/data/flvrecord/converter/FlvRecorderConverterTask.java
new file mode 100644
index 0000000..05b85bd
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/flvrecord/converter/FlvRecorderConverterTask.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.flvrecord.converter;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import org.apache.openmeetings.converter.FlvRecorderConverter;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.task.TaskExecutor;
+
+public class FlvRecorderConverterTask {
+	private static final Logger log = Red5LoggerFactory.getLogger(FlvRecorderConverterTask.class, webAppRootKey);
+
+	@Autowired
+	private TaskExecutor taskExecutor;
+	@Autowired
+	private FlvRecorderConverter flvRecorderConverter;
+
+	public void startConversionThread(final Long flvRecordingId) {
+		try {
+			log.debug("[-1-]" + taskExecutor);
+
+			taskExecutor.execute(new Runnable() {
+				public void run() {
+					flvRecorderConverter.startConversion(flvRecordingId);
+				}
+			});
+		} catch (Exception err) {
+			log.error("[startConversionThread]", err);
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/flvrecord/listener/StreamListener.java b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/StreamListener.java
new file mode 100644
index 0000000..3c738b8
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/StreamListener.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.flvrecord.listener;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+
+import org.apache.openmeetings.data.flvrecord.listener.async.BaseStreamWriter;
+import org.apache.openmeetings.data.flvrecord.listener.async.CachedEvent;
+import org.apache.openmeetings.data.flvrecord.listener.async.StreamAudioWriter;
+import org.apache.openmeetings.data.flvrecord.listener.async.StreamVideoWriter;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDeltaDao;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.scope.IScope;
+import org.red5.server.api.stream.IBroadcastStream;
+import org.red5.server.api.stream.IStreamListener;
+import org.red5.server.api.stream.IStreamPacket;
+import org.red5.server.net.rtmp.event.VideoData;
+import org.slf4j.Logger;
+
+public class StreamListener implements IStreamListener {
+	private static final Logger log = Red5LoggerFactory.getLogger(StreamListener.class, webAppRootKey);
+
+	private final BaseStreamWriter streamWriter;
+
+	public StreamListener(boolean isAudio, String streamName, IScope scope, Long metaDataId,
+			boolean isScreenData, boolean isInterview, FlvRecordingMetaDataDao metaDataDao
+			, FlvRecordingMetaDeltaDao metaDeltaDao) {
+		streamWriter = isAudio
+			? new StreamAudioWriter(streamName, scope, metaDataId, isScreenData, isInterview, metaDataDao, metaDeltaDao)
+			: new StreamVideoWriter(streamName, scope, metaDataId, isScreenData, isInterview, metaDataDao);
+	}
+
+	public void packetReceived(IBroadcastStream broadcastStream, IStreamPacket streampacket) {
+		try {
+			CachedEvent cachedEvent = new CachedEvent();
+			cachedEvent.setData(streampacket.getData().duplicate());
+			cachedEvent.setDataType(streampacket.getDataType());
+			cachedEvent.setTimestamp(streampacket.getTimestamp());
+			cachedEvent.setCurrentTime(new Date());
+			if (streampacket instanceof VideoData) {
+				cachedEvent.setFrameType(((VideoData) streampacket).getFrameType());
+			}
+
+			if (log.isTraceEnabled()) {
+				log.trace("##REC:: Packet recieved. type: {} frame type: {}", cachedEvent.getDataType(), cachedEvent.getFrameType());
+			}
+			streamWriter.append(cachedEvent);
+		} catch (Exception e) {
+			log.error("##REC:: [packetReceived]", e);
+		}
+	}
+
+	public void closeStream() {
+		streamWriter.stop();
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java
new file mode 100644
index 0000000..1db384c
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/BaseStreamWriter.java
@@ -0,0 +1,198 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.data.flvrecord.listener.async;

+

+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;

+

+import java.io.File;

+import java.io.IOException;

+import java.util.Date;

+import java.util.concurrent.BlockingQueue;

+import java.util.concurrent.LinkedBlockingQueue;

+import java.util.concurrent.TimeUnit;

+

+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao;

+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;

+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData.Status;

+import org.apache.openmeetings.util.OmFileHelper;

+import org.red5.io.IStreamableFile;

+import org.red5.io.ITagWriter;

+import org.red5.logging.Red5LoggerFactory;

+import org.red5.server.api.scope.IScope;

+import org.red5.server.api.service.IStreamableFileService;

+import org.red5.server.api.stream.IStreamableFileFactory;

+import org.red5.server.stream.StreamableFileFactory;

+import org.red5.server.util.ScopeUtils;

+import org.slf4j.Logger;

+

+public abstract class BaseStreamWriter implements Runnable {

+	private static final Logger log = Red5LoggerFactory.getLogger(BaseStreamWriter.class, webAppRootKey);

+	private final static int MINUTE_MULTIPLIER = 60 * 1000;

+	public final static int TIME_TO_WAIT_FOR_FRAME = 15 * MINUTE_MULTIPLIER;

+	protected int startTimeStamp = -1;

+	protected long initialDelta = 0;

+

+	// thread is running

+	private boolean running = false;

+	// thread is stopped

+	private boolean stopping = false;

+	// thread will be stopped as soon as the queue is empty

+	private boolean dostopping = false;

+

+	protected ITagWriter writer = null;

+

+	protected Long metaDataId = null;

+

+	protected Date startedSessionTimeDate = null;

+

+	protected File file;

+

+	protected IScope scope;

+

+	protected boolean isScreenData = false;

+

+	protected String streamName = "";

+	protected final FlvRecordingMetaDataDao metaDataDao;

+	private final BlockingQueue<CachedEvent> queue = new LinkedBlockingQueue<CachedEvent>();

+

+	public BaseStreamWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData, FlvRecordingMetaDataDao metaDataDao) {

+		startedSessionTimeDate = new Date();

+		this.isScreenData = isScreenData;

+		this.streamName = streamName;

+		this.metaDataId = metaDataId;

+		this.metaDataDao = metaDataDao;

+		this.scope = scope;

+		try {

+			init();

+		} catch (IOException ex) {

+			log.error("##REC:: [BaseStreamWriter] Could not init Thread", ex);

+		}

+		FlvRecordingMetaData metaData = metaDataDao.get(metaDataId);

+		metaData.setStreamStatus(Status.STARTED);

+		metaDataDao.update(metaData);

+		

+		open();

+	}

+

+	/**

+	 * Initialization

+	 * 

+	 * @throws IOException

+	 *             I/O exception

+	 */

+	private void init() throws IOException {

+		file = new File(OmFileHelper.getStreamsSubDir(scope.getName()), streamName + ".flv");

+

+		IStreamableFileFactory factory = (IStreamableFileFactory) ScopeUtils.getScopeService(scope, IStreamableFileFactory.class,

+				StreamableFileFactory.class);

+

+		if (!file.isFile()) {

+			// Maybe the (previously existing) file has been deleted

+			file.createNewFile();

+

+		} else if (!file.canWrite()) {

+			throw new IOException("The file is read-only");

+		}

+

+		IStreamableFileService service = factory.getService(file);

+		IStreamableFile flv = service.getStreamableFile(file);

+		writer = flv.getWriter();

+	}

+

+	private void open() {

+		running = true;

+		new Thread(this, "Recording " + file.getName()).start();

+	}

+

+	public void stop() {

+		dostopping = true;

+	}

+

+	public void run() {

+		log.debug("##REC:: stream writer started");

+		long lastPackedRecieved = System.currentTimeMillis() + TIME_TO_WAIT_FOR_FRAME;

+		long counter = 0;

+		while (!stopping) {

+			try {

+				CachedEvent item = queue.poll(100, TimeUnit.MICROSECONDS);

+				if (item != null) {

+					log.trace("##REC:: got packet"); 

+					lastPackedRecieved = System.currentTimeMillis();

+					if (dostopping) {

+						log.trace("metadatId: {} :: Recording stopped but still packets to write to file!", metaDataId);

+					}

+

+					packetReceived(item);

+				} else if (dostopping || lastPackedRecieved + TIME_TO_WAIT_FOR_FRAME < System.currentTimeMillis()) {

+					log.debug(String.format("##REC:: none packets received for: %s minutes, exiting", (System.currentTimeMillis() - lastPackedRecieved) / MINUTE_MULTIPLIER)); 

+					stopping = true;

+					closeStream();

+				}

+				if (++counter % 5000 == 0) {

+					log.debug("##REC:: Stream writer is still listening:: " + file.getName());;

+				}

+			} catch (InterruptedException e) {

+				log.error("##REC:: [run]", e);

+			}

+		}

+		log.debug("##REC:: stream writer stopped");

+	}

+

+	/**

+	 * Write the actual packet data to the disk and do calculate any needed additional information

+	 * 

+	 * @param streampacket

+	 */

+	public abstract void packetReceived(CachedEvent streampacket);

+

+	protected abstract void internalCloseStream();

+	/**

+	 * called when the stream is finished written on the disk

+	 */

+	public void closeStream() {

+		try {

+			writer.close();

+		} catch (Exception err) {

+			log.error("[closeStream, close writer]", err);

+		}

+		internalCloseStream();

+		// Write the complete Bit to the meta data, the converter task will wait for this bit!

+		try {

+			FlvRecordingMetaData metaData = metaDataDao.get(metaDataId);

+			log.debug("##REC:: Stream Status was: {} has been written for: {}", metaData.getStreamStatus(), metaDataId);

+			metaData.setStreamStatus(Status.STOPPED);

+			metaDataDao.update(metaData);

+		} catch (Exception err) {

+			log.error("##REC:: [closeStream, complete Bit]", err);

+		}

+	}

+

+	public void append(CachedEvent streampacket) {

+		if (!running) {

+			throw new IllegalStateException("Append called before the Thread was started!");

+		}

+		try {

+			queue.put(streampacket);

+			log.trace("##REC:: Q put, successful: " + queue.size());

+		} catch (InterruptedException ignored) {

+			log.error("##REC:: [append]", ignored);

+		}

+	}

+

+}

diff --git a/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/CachedEvent.java b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/CachedEvent.java
new file mode 100644
index 0000000..6e160dd
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/CachedEvent.java
@@ -0,0 +1,73 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.data.flvrecord.listener.async;

+

+import java.util.Date;

+

+import org.apache.mina.core.buffer.IoBuffer;

+import org.red5.server.api.stream.IStreamPacket;

+import org.red5.server.net.rtmp.event.VideoData.FrameType;

+

+public class CachedEvent implements IStreamPacket {

+	private byte dataType;

+	private int timestamp; //this is the timeStamp, showing the time elapsed since the microphone was turned on

+	private IoBuffer data;

+	private Date currentTime; //this is the actually current timeStamp when the packet with audio data did enter the server

+	private FrameType frameType = FrameType.UNKNOWN;

+

+	public Date getCurrentTime() {

+		return currentTime;

+	}

+

+	public void setCurrentTime(Date currentTime) {

+		this.currentTime = currentTime;

+	}

+

+	public void setDataType(byte dataType) {

+		this.dataType = dataType;

+	}

+

+	public void setTimestamp(int timestamp) {

+		this.timestamp = timestamp;

+	}

+

+	public void setData(IoBuffer data) {

+		this.data = data;

+	}

+

+	public byte getDataType() {

+		return dataType;

+	}

+

+	public int getTimestamp() {

+		return timestamp;

+	}

+

+	public IoBuffer getData() {

+		return data;

+	}

+

+	public FrameType getFrameType() {

+		return frameType;

+	}

+

+	public void setFrameType(FrameType frameType) {

+		this.frameType = frameType;

+	}

+}

diff --git a/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java
new file mode 100644
index 0000000..cd2cbbf
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamAudioWriter.java
@@ -0,0 +1,228 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.data.flvrecord.listener.async;

+

+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;

+import static org.red5.io.IoConstants.TYPE_AUDIO;

+import static org.red5.server.net.rtmp.event.VideoData.FrameType.KEYFRAME;

+

+import java.util.Date;

+

+import org.apache.mina.core.buffer.IoBuffer;

+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao;

+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDeltaDao;

+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;

+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaDelta;

+import org.red5.io.ITag;

+import org.red5.io.flv.impl.Tag;

+import org.red5.logging.Red5LoggerFactory;

+import org.red5.server.api.scope.IScope;

+import org.slf4j.Logger;

+

+public class StreamAudioWriter extends BaseStreamWriter {

+	private static final Logger log = Red5LoggerFactory.getLogger(StreamAudioWriter.class, webAppRootKey);

+

+	private int duration = 0;

+

+	private Integer lastTimeStamp = -1;

+	private Date lastcurrentTime = null;

+

+	private int lastStreamPacketTimeStamp = -1;

+

+	private long byteCount = 0;

+

+	// Autowire is not possible

+	protected final FlvRecordingMetaDeltaDao metaDeltaDao;

+

+	private boolean isInterview = false;

+

+	public StreamAudioWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData,

+			boolean isInterview, FlvRecordingMetaDataDao metaDataDao, FlvRecordingMetaDeltaDao metaDeltaDao) {

+		super(streamName, scope, metaDataId, isScreenData, metaDataDao);

+

+		this.metaDeltaDao = metaDeltaDao;

+		this.isInterview = isInterview;

+	}

+

+	@Override

+	public void packetReceived(CachedEvent streampacket) {

+		try {

+			// We only care about audio at this moment

+			if (isInterview || TYPE_AUDIO == streampacket.getDataType()) {

+				if (streampacket.getTimestamp() <= 0) {

+					log.warn("##REC:: Negative TimeStamp");

+					return;

+				}

+				// we should not skip audio data in case it is Audio only interview

+				if (isInterview && isScreenData && startTimeStamp == -1 && KEYFRAME != streampacket.getFrameType()) {

+					//skip until keyframe

+					log.trace("##REC:: no KEYFRAME, skipping");

+					return;

+				}

+				IoBuffer data = streampacket.getData().asReadOnlyBuffer();

+				if (data.limit() == 0) {

+					log.trace("##REC:: data.limit() == 0 ");

+					return;

+				}

+

+				byteCount += data.limit();

+

+				lastcurrentTime = streampacket.getCurrentTime();

+				int timeStamp = streampacket.getTimestamp();

+				Date virtualTime = streampacket.getCurrentTime();

+

+				if (startTimeStamp == -1) {

+					// Calculate the delta between the initial start and the first audio-packet data

+

+					initialDelta = virtualTime.getTime() - startedSessionTimeDate.getTime();

+

+					FlvRecordingMetaDelta metaDelta = new FlvRecordingMetaDelta();

+

+					metaDelta.setDeltaTime(initialDelta);

+					metaDelta.setFlvRecordingMetaDataId(metaDataId);

+					metaDelta.setTimeStamp(0);

+					metaDelta.setDebugStatus("INIT AUDIO");

+					metaDelta.setStartPadding(true);

+					metaDelta.setEndPadding(false);

+					metaDelta.setDataLengthPacket(data.limit());

+					metaDelta.setReceivedAudioDataLength(byteCount);

+					metaDelta.setStartTime(startedSessionTimeDate);

+					metaDelta.setPacketTimeStamp(streampacket.getTimestamp());

+

+					Long deltaTimeStamp = virtualTime.getTime() - startedSessionTimeDate.getTime();

+

+					metaDelta.setDuration(0);

+

+					Long missingTime = deltaTimeStamp - 0;

+

+					metaDelta.setMissingTime(missingTime);

+

+					metaDelta.setCurrentTime(virtualTime);

+					metaDelta.setDeltaTimeStamp(deltaTimeStamp);

+					metaDelta.setStartTimeStamp(startTimeStamp);

+

+					metaDeltaDao.addFlvRecordingMetaDelta(metaDelta);

+

+					// That will be not bigger then long value

+					startTimeStamp = streampacket.getTimestamp();

+				

+					FlvRecordingMetaData metaData = metaDataDao.get(metaDataId);

+					metaData.setRecordStart(virtualTime);

+					metaDataDao.update(metaData);

+				}

+

+				lastStreamPacketTimeStamp = streampacket.getTimestamp();

+

+				timeStamp -= startTimeStamp;

+

+				// Offset at the beginning is calculated above

+				long deltaTime = lastTimeStamp == -1 ? 0 : timeStamp - lastTimeStamp;

+

+				Long preLastTimeStamp = Long.parseLong(lastTimeStamp.toString());

+

+				lastTimeStamp = timeStamp;

+

+				if (deltaTime > 75) {

+					FlvRecordingMetaDelta metaDelta = new FlvRecordingMetaDelta();

+

+					metaDelta.setDeltaTime(deltaTime);

+					metaDelta.setFlvRecordingMetaDataId(metaDataId);

+					metaDelta.setTimeStamp(timeStamp);

+					metaDelta.setDebugStatus("RUN AUDIO");

+					metaDelta.setStartPadding(false);

+					metaDelta.setLastTimeStamp(preLastTimeStamp);

+					metaDelta.setEndPadding(false);

+					metaDelta.setDataLengthPacket(data.limit());

+					metaDelta.setReceivedAudioDataLength(byteCount);

+					metaDelta.setStartTime(startedSessionTimeDate);

+					metaDelta.setPacketTimeStamp(streampacket.getTimestamp());

+

+					Date current_date = new Date();

+					Long deltaTimeStamp = current_date.getTime() - startedSessionTimeDate.getTime();

+

+					duration = Math.max(duration, timeStamp + writer.getOffset());

+					metaDelta.setDuration(duration);

+

+					Long missingTime = deltaTimeStamp - timeStamp;

+

+					metaDelta.setMissingTime(missingTime);

+

+					metaDelta.setCurrentTime(current_date);

+					metaDelta.setDeltaTimeStamp(deltaTimeStamp);

+					metaDelta.setStartTimeStamp(startTimeStamp);

+

+					metaDeltaDao.addFlvRecordingMetaDelta(metaDelta);

+				}

+

+				log.trace("##REC:: timeStamp :: " + timeStamp);

+				ITag tag = new Tag();

+				tag.setDataType(streampacket.getDataType());

+

+				// log.debug("data.limit() :: "+data.limit());

+				tag.setBodySize(data.limit());

+				tag.setTimestamp(timeStamp);

+				tag.setBody(data);

+

+				writer.writeTag(tag);

+

+			}

+		} catch (Exception e) {

+			log.error("##REC:: [packetReceived]", e);

+		}

+	}

+

+	@Override

+	protected void internalCloseStream() {

+		try {

+			// We do not add any End Padding or count the gaps for the

+			// Screen Data, cause there is no!

+

+			Date virtualTime = lastcurrentTime;

+			log.debug("##REC:: virtualTime: " + virtualTime);

+			log.debug("##REC:: startedSessionTimeDate: " + startedSessionTimeDate);

+

+			long deltaRecordingTime = virtualTime == null ? 0 : virtualTime.getTime() - startedSessionTimeDate.getTime();

+

+			log.debug("##REC:: lastTimeStamp :closeStream: " + lastTimeStamp);

+			log.debug("##REC:: lastStreamPacketTimeStamp :closeStream: " + lastStreamPacketTimeStamp);

+			log.debug("##REC:: deltaRecordingTime :closeStream: " + deltaRecordingTime);

+

+			long deltaTimePaddingEnd = deltaRecordingTime - lastTimeStamp - initialDelta;

+

+			log.debug("##REC:: deltaTimePaddingEnd :: " + deltaTimePaddingEnd);

+

+			FlvRecordingMetaDelta metaDelta = new FlvRecordingMetaDelta();

+

+			metaDelta.setDeltaTime(deltaTimePaddingEnd);

+			metaDelta.setFlvRecordingMetaDataId(metaDataId);

+			metaDelta.setTimeStamp(lastTimeStamp);

+			metaDelta.setDebugStatus("END AUDIO");

+			metaDelta.setStartPadding(false);

+			metaDelta.setEndPadding(true);

+			metaDelta.setDataLengthPacket(null);

+			metaDelta.setReceivedAudioDataLength(byteCount);

+			metaDelta.setStartTime(startedSessionTimeDate);

+			metaDelta.setCurrentTime(new Date());

+

+			metaDeltaDao.addFlvRecordingMetaDelta(metaDelta);

+		} catch (Exception err) {

+			log.error("##REC:: [internalCloseStream]", err);

+		}

+	}

+}

diff --git a/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java
new file mode 100644
index 0000000..5a40eea
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/flvrecord/listener/async/StreamVideoWriter.java
@@ -0,0 +1,98 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.data.flvrecord.listener.async;

+

+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;

+import static org.red5.server.net.rtmp.event.VideoData.FrameType.KEYFRAME;

+

+import java.util.Date;

+

+import org.apache.mina.core.buffer.IoBuffer;

+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao;

+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;

+import org.red5.io.ITag;

+import org.red5.io.flv.impl.Tag;

+import org.red5.logging.Red5LoggerFactory;

+import org.red5.server.api.scope.IScope;

+import org.slf4j.Logger;

+

+public class StreamVideoWriter extends BaseStreamWriter {

+	private static final Logger log = Red5LoggerFactory.getLogger(StreamVideoWriter.class, webAppRootKey);

+	private Date startedSessionScreenTimeDate = null;

+

+	public StreamVideoWriter(String streamName, IScope scope, Long metaDataId, boolean isScreenData,

+			boolean isInterview, FlvRecordingMetaDataDao metaDataDao) {

+

+		super(streamName, scope, metaDataId, isScreenData, metaDataDao);

+	}

+

+	@Override

+	public void packetReceived(CachedEvent streampacket) {

+		try {

+			int timeStamp = streampacket.getTimestamp();

+			log.trace("incoming timeStamp :: " + timeStamp);

+			if (startTimeStamp == -1 && KEYFRAME != streampacket.getFrameType()) {

+				//skip until keyframe

+				log.trace("no KEYFRAME, skipping ::" + streampacket.getFrameType());

+				return;

+			}

+			if (timeStamp <= 0) {

+				log.warn("Negative TimeStamp");

+				return;

+			}

+			IoBuffer data = streampacket.getData().asReadOnlyBuffer();

+			if (data.limit() == 0) {

+				log.trace("Data.limit() == 0");

+				return;

+			}

+			Date virtualTime = streampacket.getCurrentTime();

+

+			if (startedSessionScreenTimeDate == null) {

+				startedSessionScreenTimeDate = virtualTime;

+

+				FlvRecordingMetaData metaData = metaDataDao.get(metaDataId);

+				metaData.setRecordStart(virtualTime);

+				metaDataDao.update(metaData);

+			}

+

+			if (startTimeStamp == -1) {

+				// That will be not bigger then long value

+				startTimeStamp = timeStamp;

+			}

+

+			timeStamp -= startTimeStamp;

+

+			log.trace("timeStamp :: " + timeStamp);

+			ITag tag = new Tag();

+			tag.setDataType(streampacket.getDataType());

+

+			tag.setBodySize(data.limit());

+			tag.setTimestamp(timeStamp);

+			tag.setBody(data);

+

+			writer.writeTag(tag);

+		} catch (Exception e) {

+			log.error("[packetReceived]", e);

+		}

+	}

+

+	@Override

+	protected void internalCloseStream() {

+	}

+}

diff --git a/src/main/java/org/apache/openmeetings/data/record/BatikMethods.java b/src/main/java/org/apache/openmeetings/data/record/BatikMethods.java
new file mode 100644
index 0000000..909fb6f
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/record/BatikMethods.java
@@ -0,0 +1,525 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.record;
+
+import java.awt.AlphaComposite;
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.geom.Ellipse2D;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Line2D;
+import java.awt.geom.Rectangle2D;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JTextArea;
+
+import org.apache.batik.dom.svg.SVGDOMImplementation;
+import org.apache.batik.svggen.SVGGraphics2D;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.geom.ArrowStyle;
+import org.apache.openmeetings.util.geom.GeomPoint;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class BatikMethods {
+	
+	private static final Logger log = Red5LoggerFactory.getLogger(BatikMethods.class, OpenmeetingsVariables.webAppRootKey);
+	@Autowired
+	private ConfigurationDao configurationDao;
+
+	public void paintTextByWidthHeight(SVGGraphics2D g2d, int x1, int y1, int width, int height,
+			String text, int style, int size, Color fontColor) throws Exception {
+
+		//String default_export_font = Configurationmanagement.getInstance().getConfKey(3,"default_export_font").getConf_value();
+		
+		this.drawTextByJTextArea(g2d, x1, y1, width, height, text, "Verdana", style, size, fontColor);
+
+	}
+	
+	public void _paintTextByWidthHeight(SVGGraphics2D g2d, int x1, int y1, int width, int height,
+			String text, int style, int size, Color fontColor) throws Exception {
+
+		String default_export_font = configurationDao.getConfValue("default_export_font", String.class, "");
+		
+		this.drawTextByString(g2d, x1, y1, width, height, text, default_export_font, style, size, fontColor);
+
+	}
+	
+	@SuppressWarnings("rawtypes")
+	public void drawPointsObject(Graphics2D g2d, List pointsList, Color lineColor, int size, 
+			double xObj, double yObj, float alpha) throws Exception {
+		
+		for (Iterator iter = pointsList.iterator();iter.hasNext();) {
+			List point = (List) iter.next();
+			
+//			log.debug("POINT FROM TO :" +
+//					Double.valueOf(point.get(1).toString()).doubleValue()+","+
+//					Double.valueOf(point.get(2).toString()).doubleValue()+","+ 
+//					Double.valueOf(point.get(3).toString()).doubleValue()+","+
+//					Double.valueOf(point.get(4).toString()).doubleValue());
+			
+			this.drawThickLine2DPaint(g2d, Double.valueOf(point.get(1).toString()).doubleValue(), 
+					Double.valueOf(point.get(2).toString()).doubleValue(), 
+					Double.valueOf(point.get(3).toString()).doubleValue(), 
+					Double.valueOf(point.get(4).toString()).doubleValue(),  
+					size, lineColor, xObj, yObj, alpha);
+		}
+		
+		
+	}
+	
+	public void drawLine(Graphics2D g2d, Double x1, Double y1, Double x2, Double y2, Color lineColor, int size, 
+			double xObj, double yObj, float alpha) throws Exception {
+		
+		this.drawThickLine2D(g2d, x1, y1, x2, y2,  
+				size, lineColor, xObj, yObj, alpha);
+		
+	}
+	
+	public void paintEllipse2D(Graphics2D g2d, double x, double y, double width, double height, 
+			Color linecoler, int thickness, Color fillColor, float alpha) throws Exception {
+		
+		g2d.setStroke(new BasicStroke(thickness, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
+		
+		int[] rules = new int[8]; 
+		
+		//all possible Compositing Rules:
+		rules[0] = AlphaComposite.SRC_OVER;
+		rules[1] = AlphaComposite.DST_OVER;
+		rules[2] = AlphaComposite.CLEAR;
+		rules[3] = AlphaComposite.SRC;
+		rules[4] = AlphaComposite.SRC_IN;
+		rules[5] = AlphaComposite.DST_IN;
+		rules[6] = AlphaComposite.SRC_OUT;
+		rules[7] = AlphaComposite.DST_OUT;
+		
+		g2d.setComposite( AlphaComposite.getInstance( AlphaComposite.SRC,alpha));
+		
+        //int x, int y, int width, int height
+        
+        if (linecoler != null) {
+	        g2d.setPaint(linecoler);
+	        g2d.draw(new Ellipse2D.Double(x,y,width,height));
+        }
+        
+        if (fillColor != null) {
+        	g2d.setPaint(fillColor);
+            g2d.fill(new Ellipse2D.Double(x,y,width,height));
+        }
+        
+    }
+	
+	public void paintRect2D(Graphics2D g2d, double x, double y, double width, double height, 
+			Color linecoler, int thickness, Color fillColor, float alpha) throws Exception {
+		
+		g2d.setStroke(new BasicStroke(thickness, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
+		
+		int[] rules = new int[8]; 
+		
+		//all possible Compositing Rules:
+		rules[0] = AlphaComposite.SRC_OVER;
+		rules[1] = AlphaComposite.DST_OVER;
+		rules[2] = AlphaComposite.CLEAR;
+		rules[3] = AlphaComposite.SRC;
+		rules[4] = AlphaComposite.SRC_IN;
+		rules[5] = AlphaComposite.DST_IN;
+		rules[6] = AlphaComposite.SRC_OUT;
+		rules[7] = AlphaComposite.DST_OUT;
+		
+		g2d.setComposite( AlphaComposite.getInstance( AlphaComposite.SRC,alpha));
+		
+        //int x, int y, int width, int height
+        
+        if (linecoler != null) {
+	        g2d.setPaint(linecoler);
+	        g2d.draw(new Rectangle2D.Double(x,y,width,height));
+        }
+        
+        if (fillColor != null) {
+        	g2d.setPaint(fillColor);
+            g2d.fill(new Rectangle2D.Double(x,y,width,height));
+        }
+        
+    }
+	
+	public void paintRect(Graphics2D g2d, int x, int y, int width, int height, 
+			Color linecoler, int thickness, Color fillColor) throws Exception {
+		
+		//int x, int y, int width, int height
+        //g2d.fill(new Rectangle(x,y,width,height));
+        
+        g2d.setStroke(new BasicStroke(thickness));
+        
+        if (linecoler != null) {
+	        g2d.setPaint(linecoler);
+	        g2d.drawRect(x, y, width, height);
+        }
+        
+        if (fillColor != null) {
+        	g2d.setPaint(fillColor);
+	        g2d.fillRect(x, y, width, height);
+        }
+        
+    }
+	
+	public void paintLine(Graphics2D g2d, int x1, int y1, int x2, int y2, Color col) throws Exception {
+		g2d.setPaint(col);
+		g2d.drawLine(x1, y1, x2, y2);
+	}
+	
+	public void drawThickLine2DPaint(Graphics2D g2d, double x1, double y1, double x2, double y2, 
+			int width, Color c, double xObj, double yObj, float alpha) throws Exception {
+		g2d.setPaint(c);
+		
+		int[] rules = new int[8]; 
+		
+		//all possible Compositing Rules:
+		rules[0] = AlphaComposite.SRC_OVER;
+		rules[1] = AlphaComposite.DST_OVER;
+		rules[2] = AlphaComposite.CLEAR;
+		rules[3] = AlphaComposite.SRC;
+		rules[4] = AlphaComposite.SRC_IN;
+		rules[5] = AlphaComposite.DST_IN;
+		rules[6] = AlphaComposite.SRC_OUT;
+		rules[7] = AlphaComposite.DST_OUT;
+		
+		g2d.setComposite( AlphaComposite.getInstance( AlphaComposite.SRC,alpha));
+		g2d.setStroke(new BasicStroke(width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
+		Line2D line = new Line2D.Double(x1, y1, x2, y2);
+	    g2d.draw(line);
+	}
+
+	
+	public void drawThickLine2D(Graphics2D g2d, double x1, double y1, double x2, double y2, 
+			int width, Color c, double xObj, double yObj, float alpha) throws Exception {
+		g2d.setPaint(c);
+		
+		int[] rules = new int[8]; 
+		
+		//all possible Compositing Rules:
+		rules[0] = AlphaComposite.SRC_OVER;
+		rules[1] = AlphaComposite.DST_OVER;
+		rules[2] = AlphaComposite.CLEAR;
+		rules[3] = AlphaComposite.SRC;
+		rules[4] = AlphaComposite.SRC_IN;
+		rules[5] = AlphaComposite.DST_IN;
+		rules[6] = AlphaComposite.SRC_OUT;
+		rules[7] = AlphaComposite.DST_OUT;
+		
+		g2d.setComposite( AlphaComposite.getInstance( AlphaComposite.SRC,alpha));
+		g2d.setStroke(new BasicStroke(width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
+		Line2D line = new Line2D.Double(x1+xObj, y1+yObj, x2+xObj, y2+yObj);
+	    g2d.draw(line);
+	}
+
+	public void drawThickLine(Graphics2D g2d, int x1, int y1, int x2, int y2, int width, Color c) throws Exception {
+		g2d.setPaint(c);
+		g2d.setStroke(new BasicStroke(width, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
+	    g2d.drawLine(x1, y1, x2, y2);
+	}	
+	
+	public void paintTextByWidthHeightAndDocument(SVGGraphics2D g2d, int x1, int y1, int width, int height,
+			String text, int style, int size, Color fontColor, Document document) throws Exception {
+
+		// String default_export_font =
+		// Configurationmanagement.getInstance().getConfKey("default_export_font").getConf_value();
+		
+		this.drawText(g2d, x1, y1, width, height, text, "Verdana", style, size, fontColor, document);
+
+	}
+
+	public void drawText(SVGGraphics2D g2d, int x, int y, int width, int height, 
+			String text, String default_export_font, int style, int size, Color fontColor,
+			Document document) throws Exception {
+		
+//		g2d.setClip(x, y, width, height);
+//		g2d.setColor(Color.black);
+//		g2d.drawString(text, x, y+20);
+		
+		String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
+
+		// Get the root element (the 'svg' element).
+		Element svgRoot = document.getDocumentElement();
+
+		log.debug("svgNS DEBUG: "+svgNS);
+		
+		//Element textElement = g2d.getDOMFactory().createElementNS(svgNS,"text");
+		Element rectangle = document.createElementNS(svgNS, "rect");
+		rectangle.setAttributeNS(svgNS, "x", "10");
+		rectangle.setAttributeNS(svgNS, "y", "20");
+		rectangle.setAttributeNS(svgNS, "width", "100");
+		rectangle.setAttributeNS(svgNS, "height", "50");
+		rectangle.setAttributeNS(svgNS, "fill", "red");
+
+		// Attach the rectangle to the root 'svg' element.
+		svgRoot.appendChild(rectangle);
+
+
+	}
+	
+	public void drawTextByString(SVGGraphics2D g2d, int x, int y, int width, int height, 
+			String text, String default_export_font, int style, int size, Color fontColor) throws Exception {
+		
+		//g2d.setClip(x, y, width, height);
+		g2d.setColor(Color.black);
+		g2d.drawString(text, x, y);
+		
+		
+	}
+
+	public void drawTextByJTextArea(Graphics2D g2d, int x, int y, int width, int height, 
+			String text, String default_export_font, int style, int size, Color fontColor) throws Exception {
+		
+//		g2d.setClip(x, y, width, height);
+//		g2d.setColor(Color.black);
+//		g2d.drawString(text, x, y+20);
+		
+		//Font font = new Font("Verdana", Font.PLAIN, 11);
+		Font font = new Font(default_export_font, style, size);
+
+		String[] stringsText = text.split("\r");
+		//log.debug("TEXT: "+stringsText);
+		//log.debug("TEXT: "+stringsText.length);
+		
+		String newText = "";
+		
+		for (int i=0;i<stringsText.length;i++) {
+			newText += stringsText[i];
+			if (i+1<stringsText.length) {
+				newText += "\n";
+			}
+		}
+		
+		JTextArea n = new JTextArea( newText );
+		n.setFont(font);
+		n.setWrapStyleWord( true );
+		n.setLineWrap( true );
+		n.setForeground( fontColor );
+		
+		//log.debug("Text at: "+x+" "+y);
+			//int x, int y, int width, int height
+		n.setBounds( x, y , width, height );
+		n.setOpaque( false );
+		
+		//Text
+		SVGGraphics2D svgGenerator2 = (SVGGraphics2D) g2d.create(x, y, width, height);
+
+		//svgGenerator2.create(x, y, width, height);
+		//svgGenerator2.draw(.dra)
+		n.paint( svgGenerator2 );
+		
+	}
+	
+
+	public void drawArrow(SVGGraphics2D g2d,
+			GeomPoint start, GeomPoint end, float thickness, float alpha,
+			Color linecoler, Color fillColor) {
+		
+		if (start.equals(end)) return;
+		
+		
+//		(double edgeControlPosition, double edgeControlSize,
+//				double headLength, double headWidth, double shaftControlPosition,
+//				double shaftControlSize, float shaftPosition, double shaftThickness)
+		ArrowStyle arrowStyle = new ArrowStyle(0.5, 0.5, thickness*5, 
+				thickness*5, 0.5, 0.5, 0, thickness);
+		
+		GeomPoint fullVect = end.subtract(start);
+		double halfWidth = (arrowStyle.headWidth != -1) ? arrowStyle.headWidth/2 : arrowStyle.headLength/2; 
+		
+		//Figure out the line start/end points
+		GeomPoint startNorm = new GeomPoint();
+		startNorm.setLocation(fullVect.getY(),-fullVect.getX());
+		startNorm.normalize(arrowStyle.shaftThickness/2);
+		GeomPoint start1 = start.add(startNorm);
+		GeomPoint start2 = start.subtract(startNorm);
+		GeomPoint end1 = end.add(startNorm);
+		GeomPoint end2 = end.subtract(startNorm);
+				
+		//log.debug("startNorm: "+startNorm.toString());
+        //log.debug("start1: "+start1.toString());
+        //log.debug("start2: "+start2.toString());
+        //log.debug("end1: "+end1.toString());
+        //log.debug("end2: "+end2.toString());
+		
+		//figure out where the arrow head starts
+		GeomPoint headPnt = fullVect.clone();
+		//log.debug("headPnt 1: "+headPnt.toString());
+		//log.debug("headPnt.length 1: "+headPnt.length());
+		//log.debug("arrowStyle.headLength 1: "+arrowStyle.headLength);
+		headPnt.normalize(headPnt.length()-arrowStyle.headLength);
+		//log.debug("headPnt 2: "+headPnt.toString());
+		headPnt = headPnt.add(start);
+		//log.debug("headPnt 3: "+headPnt.toString());
+		
+		//calculate the arrowhead corners
+		GeomPoint headPntNorm = startNorm.clone();
+		//log.debug("headPntNorm ^^: "+headPntNorm.toString());
+		//log.debug("halfWidth ^^: "+halfWidth);
+		headPntNorm.normalize(halfWidth);
+		//log.debug("headPntNorm: "+headPntNorm.toString());
+		GeomPoint edge1 = headPnt.add(headPntNorm);
+		GeomPoint edge2 = headPnt.subtract(headPntNorm);
+		
+		//log.debug("edge1: "+edge1.toString());
+        //log.debug("edge2: "+edge2.toString());
+		
+		//Figure out where the arrow connects the the shaft, then calc the intersections
+		GeomPoint shaftCenter = GeomPoint.interpolate(end,headPnt,arrowStyle.shaftPosition);
+		//log.debug("end"+end.toString());
+		//log.debug("headPnt: "+headPnt.toString());
+		//log.debug("arrowStyle.shaftPosition: "+arrowStyle.shaftPosition);
+		//log.debug("shaftCenter: "+shaftCenter);
+		//log.debug("edge1: "+edge1);
+		//shaftCenter.setLocation(185.857864376269, 185.857864376269);
+		GeomPoint inter1 = GeomPoint.getLineIntersection(start1,end1,shaftCenter,edge1);
+		GeomPoint inter2 = GeomPoint.getLineIntersection(start2,end2,shaftCenter,edge2);
+		
+		//log.debug("inter1: "+inter1.toString());
+        //log.debug("inter2: "+inter2.toString());
+		
+		//Figure out the control points
+		GeomPoint edgeCenter = GeomPoint.interpolate(end,headPnt,(float) arrowStyle.edgeControlPosition);
+		GeomPoint edgeNorm = startNorm.clone();
+		edgeNorm.normalize(halfWidth*arrowStyle.edgeControlSize);
+		//log.debug("halfWidth*arrowStyle.edgeControlSize: "+(halfWidth*arrowStyle.edgeControlSize));
+		//log.debug("edgeNorm: "+edgeNorm.toString());
+		GeomPoint edgeCntrl1 = edgeCenter.add(edgeNorm);
+		GeomPoint edgeCntrl2 = edgeCenter.subtract(edgeNorm);
+		
+		//log.debug("edgeCntrl1: "+edgeCntrl1.toString());
+        //log.debug("edgeCntrl2: "+edgeCntrl2.toString());
+
+		g2d.setPaint(new Color(255,0,0));
+		
+//		graphics.moveTo(start1.x,start1.y);
+//		graphics.lineTo(inter1.x,inter1.y);
+//		graphics.lineTo(edge1.x,edge1.y);
+//		graphics.curveTo(edgeCntrl1.x,edgeCntrl1.y,end.x,end.y);
+//		graphics.curveTo(edgeCntrl2.x,edgeCntrl2.y,edge2.x,edge2.y);
+//		graphics.lineTo(inter2.x,inter2.y);
+//		graphics.lineTo(start2.x,start2.y);
+//		graphics.lineTo(start1.x,start1.y);
+		
+//		log.debug("moveTo"+start1.x+","+start1.y);
+//		log.debug("lineTo"+inter1.x+","+inter1.y);
+//		log.debug("lineTo"+edge1.x+","+edge1.y);
+//		log.debug("quadTo"+edgeCntrl1.x+","+edgeCntrl1.y+","+end.x+","+end.y);
+//		log.debug("quadTo"+edgeCntrl2.x+","+edgeCntrl2.y+","+edge2.x+","+edge2.y);
+//		log.debug("lineTo"+inter2.x+","+inter2.y);
+//		log.debug("lineTo"+start2.x+","+start2.y);
+//		log.debug("lineTo"+start1.x+","+start1.y);
+		
+		GeneralPath graphics = new GeneralPath();
+		graphics.moveTo(start1.x,start1.y);
+		graphics.lineTo(inter1.x,inter1.y);
+		graphics.lineTo(edge1.x,edge1.y);
+		graphics.quadTo(edgeCntrl1.x,edgeCntrl1.y,end.x,end.y);
+		graphics.quadTo(edgeCntrl2.x,edgeCntrl2.y,edge2.x,edge2.y);
+		graphics.lineTo(inter2.x,inter2.y);
+		graphics.lineTo(start2.x,start2.y);
+		graphics.lineTo(start1.x,start1.y);
+		graphics.closePath();
+		
+		int[] rules = new int[8]; 
+		
+		//all possible Compositing Rules:
+		rules[0] = AlphaComposite.SRC_OVER;
+		rules[1] = AlphaComposite.DST_OVER;
+		rules[2] = AlphaComposite.CLEAR;
+		rules[3] = AlphaComposite.SRC;
+		rules[4] = AlphaComposite.SRC_IN;
+		rules[5] = AlphaComposite.DST_IN;
+		rules[6] = AlphaComposite.SRC_OUT;
+		rules[7] = AlphaComposite.DST_OUT;
+		
+		g2d.setComposite( AlphaComposite.getInstance( AlphaComposite.SRC,alpha));
+		g2d.setStroke(new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL));
+		
+		if (linecoler != null) {
+	        g2d.setPaint(linecoler);
+	        g2d.draw(graphics);
+        }
+        
+        if (fillColor != null) {
+        	g2d.setPaint(fillColor);
+	        g2d.fill(graphics);
+        }
+        
+	}
+	
+
+	
+	
+	
+	
+	
+	public String workAroundPixelErrorInSVG(String xmlDef) throws Exception {
+		String resultingString = "";
+        
+        boolean byPassedFirst = false;
+        
+        while (xmlDef.indexOf("font-size:") != -1) {
+        	
+        	log.debug("xmlDef "+xmlDef);
+        	int i = xmlDef.indexOf("font-size:");
+        	
+        	log.debug("Found i "+i);
+        	if (byPassedFirst) {
+        		log.debug("byPassedFirst DO PROCESS ");
+	        	String start = xmlDef.substring(0, i+10);
+	        	xmlDef = xmlDef.substring(i+10, xmlDef.length());
+	        	log.debug("byPassedFirst FIRST PART Process "+start);
+	        	log.debug("byPassedFirst END PART Process "+xmlDef);
+	        	
+	        	int firstSemicolon = xmlDef.indexOf(";");
+	        	log.debug("firstSemicolon "+firstSemicolon);
+	        	String fontSize = xmlDef.substring(0, firstSemicolon);
+	        	log.debug("fontSize "+fontSize);
+	        	
+	        	xmlDef = xmlDef.substring(firstSemicolon, xmlDef.length());
+	        	
+	        	resultingString += start + fontSize + "px";
+        	} else {
+        		log.debug("byPassedFirst DO NOT PROCESS ");
+        		String start = xmlDef.substring(0, i+10);
+        		log.debug("byPassedFirst FIRST PART "+start);
+        		xmlDef = xmlDef.substring(i+10, xmlDef.length());
+        		log.debug("byPassedFirst END PART "+xmlDef);
+        		resultingString += start;
+        		byPassedFirst = true;
+        	}
+        }
+        
+        resultingString += xmlDef;
+        
+        log.debug("###################### ");
+        log.debug("resultingString "+resultingString);
+        
+        return resultingString;
+	}
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/data/record/WhiteboardMapToSVG.java b/src/main/java/org/apache/openmeetings/data/record/WhiteboardMapToSVG.java
new file mode 100644
index 0000000..080ee8e
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/record/WhiteboardMapToSVG.java
@@ -0,0 +1,305 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.record;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Image;
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.imageio.ImageIO;
+
+import org.apache.batik.svggen.SVGGraphics2D;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.geom.GeomPoint;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class WhiteboardMapToSVG extends BatikMethods {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(WhiteboardMapToSVG.class, OpenmeetingsVariables.webAppRootKey);
+
+	private WhiteboardMapToSVG() {
+	}
+
+	private static WhiteboardMapToSVG instance = null;
+
+	public static synchronized WhiteboardMapToSVG getInstance() {
+		if (instance == null) {
+			instance = new WhiteboardMapToSVG();
+		}
+
+		return instance;
+	}
+	
+	@SuppressWarnings("rawtypes")
+	public SVGGraphics2D convertMapToSVG(SVGGraphics2D svgGenerator, List whiteBoardMap) throws Exception {
+		
+		//log.debug("convertMapToSVG: "+whiteBoardMap.size());
+		
+        for (Iterator iter = whiteBoardMap.iterator();iter.hasNext();) {
+        	
+        	List graphObject = (List) iter.next();
+        	
+        	String graphType = graphObject.get(0).toString();
+        	
+        	//log.debug("graphType: "+graphType);
+        	
+        	if (graphType.equals("paint")) {
+        		
+        		List pointsList = (List) graphObject.get(1);
+        		
+        		Integer lineWidth = Integer.valueOf(graphObject.get(3).toString()).intValue();
+        		Integer col = Integer.valueOf(graphObject.get(4).toString()).intValue();
+        		
+        		Float alpha = Float.valueOf(graphObject.get(5).toString()).floatValue();
+        		
+        		Double x = Double.valueOf(graphObject.get(graphObject.size()-5).toString()).doubleValue();
+        		Double y = Double.valueOf(graphObject.get(graphObject.size()-4).toString()).doubleValue();
+        		
+        		//log.debug("x,y,width,height: "+x+","+y+","+width+","+height);
+        		
+        		//Draw a Painting
+    	        SVGGraphics2D svgGenerator_temp = new SVGGraphics2D(svgGenerator);
+    	        //SVGGraphics2D svgGenerator2 = new SVGGraphics2D(document);
+    	         
+    	        log.debug("pointsList: "+pointsList);
+    	        this.drawPointsObject(svgGenerator_temp, pointsList, new Color(col), lineWidth, x, y, alpha);
+    	        
+        	} else if (graphType.equals("rectangle")) {
+        		
+        		/*actionObject[0] = 'rectangle';
+		        actionObject[1] = stroke;
+		        actionObject[2] = line;
+		        actionObject[3] = fill;
+		        actionObject[4] = strokeDis;
+		        actionObject[5] = fillDis;
+		        actionObject[6] = this.currentrectangleOpacity;*/
+        		
+        		Integer lineWidth = Integer.valueOf(graphObject.get(2).toString()).intValue();
+        		
+        		Integer stroke = Integer.valueOf(graphObject.get(1).toString()).intValue();
+        		Integer strokeDis= Integer.valueOf(graphObject.get(4).toString()).intValue();
+        		
+        		Color strokeColor = null;
+        		if (strokeDis != -1) {
+        			strokeColor = new Color(stroke);
+        		}
+        		
+        		Integer fill = Integer.valueOf(graphObject.get(3).toString()).intValue();
+        		Integer fillDis= Integer.valueOf(graphObject.get(5).toString()).intValue();
+        		
+        		Color fillColor = null;
+        		if (fillDis != -1) {
+        			fillColor = new Color(fill);
+        		}
+        		
+        		Float alpha = Float.valueOf(graphObject.get(6).toString()).floatValue();
+        		
+        		Double x = Double.valueOf(graphObject.get(graphObject.size()-5).toString()).doubleValue();
+        		Double y = Double.valueOf(graphObject.get(graphObject.size()-4).toString()).doubleValue();
+        		Double width = Double.valueOf(graphObject.get(graphObject.size()-3).toString()).doubleValue();
+        		Double height = Double.valueOf(graphObject.get(graphObject.size()-2).toString()).doubleValue();
+        	
+        		SVGGraphics2D svgGenerator_temp = new SVGGraphics2D(svgGenerator);
+        		this.paintRect2D(svgGenerator_temp, x, y, width, height, strokeColor, lineWidth, fillColor, alpha);
+        		
+        	} else if (graphType.equals("ellipse")) {
+        		
+        		Integer lineWidth = Integer.valueOf(graphObject.get(2).toString()).intValue();
+        		
+        		Integer stroke = Integer.valueOf(graphObject.get(1).toString()).intValue();
+        		Integer strokeDis= Integer.valueOf(graphObject.get(4).toString()).intValue();
+        		
+        		Color strokeColor = null;
+        		if (strokeDis != -1) {
+        			strokeColor = new Color(stroke);
+        		}
+        		
+        		Integer fill = Integer.valueOf(graphObject.get(3).toString()).intValue();
+        		Integer fillDis= Integer.valueOf(graphObject.get(5).toString()).intValue();
+        		
+        		Color fillColor = null;
+        		if (fillDis != -1) {
+        			fillColor = new Color(fill);
+        		}
+        		
+        		Float alpha = Float.valueOf(graphObject.get(6).toString()).floatValue();
+        		
+        		Double x = Double.valueOf(graphObject.get(graphObject.size()-5).toString()).doubleValue();
+        		Double y = Double.valueOf(graphObject.get(graphObject.size()-4).toString()).doubleValue();
+        		Double width = Double.valueOf(graphObject.get(graphObject.size()-3).toString()).doubleValue();
+        		Double height = Double.valueOf(graphObject.get(graphObject.size()-2).toString()).doubleValue();
+        	
+        		SVGGraphics2D svgGenerator_temp = new SVGGraphics2D(svgGenerator);
+        		this.paintEllipse2D(svgGenerator_temp, x, y, width, height, strokeColor, lineWidth, fillColor, alpha);
+        		
+        	} else if (graphType.equals("letter")) {
+        		
+        		String text = graphObject.get(1).toString();
+        		Color fontColor = new Color (Integer.valueOf(graphObject.get(2).toString()).intValue());
+        		Integer fontSize = Integer.valueOf(graphObject.get(3).toString()).intValue();
+        		
+        		String fontStyle = graphObject.get(4).toString();
+        		Integer style = null;
+        		if (fontStyle.equals("plain")) {
+        			style = Font.PLAIN;
+        		} else if (fontStyle.equals("bold")) {
+        			style = Font.BOLD;
+        		} else if (fontStyle.equals("italic")) {
+        			style = Font.ITALIC;
+        		} else if (fontStyle.equals("bolditalic")) {
+        			style = Font.ITALIC+Font.BOLD;
+        		}
+        		
+        		log.debug("fontStyle,style "+style+" fs: "+fontStyle);
+        		
+        		Double x = Double.valueOf(graphObject.get(graphObject.size()-5).toString()).doubleValue();
+        		Double y = Double.valueOf(graphObject.get(graphObject.size()-4).toString()).doubleValue();
+        		Double width = Double.valueOf(graphObject.get(graphObject.size()-3).toString()).doubleValue();
+        		Double height = Double.valueOf(graphObject.get(graphObject.size()-2).toString()).doubleValue();
+        		
+        		SVGGraphics2D svgGenerator_temp = new SVGGraphics2D(svgGenerator);
+        		this.paintTextByWidthHeight(svgGenerator_temp, (int) Math.round(x), (int) Math.round(y), (int) Math.round(width), 
+        					(int) Math.round(height), text, style, fontSize, fontColor);
+        		
+        	} else if (graphType.equals("drawarrow")) {
+        		
+        		Integer thickness = Integer.valueOf(graphObject.get(2).toString()).intValue();
+        		
+        		Integer stroke = Integer.valueOf(graphObject.get(1).toString()).intValue();
+        		Integer strokeDis= Integer.valueOf(graphObject.get(4).toString()).intValue();
+        		
+        		Color strokeColor = null;
+        		if (strokeDis != -1) {
+        			strokeColor = new Color(stroke);
+        		}
+        		
+        		Integer fill = Integer.valueOf(graphObject.get(3).toString()).intValue();
+        		Integer fillDis= Integer.valueOf(graphObject.get(5).toString()).intValue();
+        		
+        		Color fillColor = null;
+        		if (fillDis != -1) {
+        			fillColor = new Color(fill);
+        		}
+        		
+        		Float alpha = Float.valueOf(graphObject.get(6).toString()).floatValue();
+        		
+        		Double x = Double.valueOf(graphObject.get(graphObject.size()-5).toString()).doubleValue();
+        		Double y = Double.valueOf(graphObject.get(graphObject.size()-4).toString()).doubleValue();
+        		//Double width = Double.valueOf(graphObject.get(graphObject.size()-3).toString()).doubleValue();
+        		//Double height = Double.valueOf(graphObject.get(graphObject.size()-2).toString()).doubleValue();
+        		
+        		Double x1 = Double.valueOf(graphObject.get(7).toString()).doubleValue();
+        		Double y1 = Double.valueOf(graphObject.get(8).toString()).doubleValue();
+        		Double x2 = Double.valueOf(graphObject.get(9).toString()).doubleValue();
+        		Double y2 = Double.valueOf(graphObject.get(10).toString()).doubleValue();
+        		
+        		GeomPoint start = new GeomPoint();
+    	        start.setLocation(x+x1,y+y1);
+    	        GeomPoint end = new GeomPoint();
+    	        end.setLocation(x+x2,y+y2);
+    	        
+    	        SVGGraphics2D svgGenerator_temp = new SVGGraphics2D(svgGenerator);
+    	        this.drawArrow(svgGenerator_temp, start, end, thickness, alpha, strokeColor,fillColor);
+        	} else if (graphType.equals("image")) {
+        		
+        		//log.debug("graphObject image "+graphObject);
+        		//log.debug("",graphObject);
+        		
+        		String room = graphObject.get(6).toString();
+        		String parentPath = graphObject.get(5).toString();
+        		String fileItemName = graphObject.get(3).toString();
+        		
+        		File imageFile = new File(OmFileHelper.getUploadDir(), room);
+        		
+        		if (parentPath.length() > 1) {
+        			imageFile = new File(imageFile, parentPath);
+        		}
+        		
+        		//log.debug("fileItemName: "+fileItemName);
+        		
+        		File myFile = new File(imageFile, fileItemName);
+        		
+        		if (myFile.exists() && myFile.canRead()) {
+        			
+        			Image myImage = ImageIO.read(myFile);
+        			
+        			int x = (int) Math.round(Double.valueOf(graphObject.get(graphObject.size()-5).toString()).doubleValue());
+        			int y = (int) Math.round(Double.valueOf(graphObject.get(graphObject.size()-4).toString()).doubleValue());
+        			int width = (int) Math.round(Double.valueOf(graphObject.get(graphObject.size()-3).toString()).doubleValue());
+        			int height = (int) Math.round(Double.valueOf(graphObject.get(graphObject.size()-2).toString()).doubleValue());
+	        		
+	        		SVGGraphics2D svgGenerator_temp = new SVGGraphics2D(svgGenerator);
+	        		svgGenerator_temp.drawImage(myImage, x, y, width, height, null);
+        			
+        		} else {
+        			log.error("tried to inculde a non existing File into SVG/Image Export Path: " + myFile);
+        		}
+        		
+        	} else if(graphType.equals("line") || graphType.equals("uline")) {
+        		
+//        		actionObject[0] = 'line';
+//                actionObject[1] = stroke;
+//                actionObject[2] = line;
+//                actionObject[3] = opacity;
+//                actionObject[4] = x1  
+//                actionObject[5] = y1;  
+//                actionObject[6] = x2;    
+//                actionObject[7] = y2;    
+//                actionObject[8] = this.counter; 
+//                actionObject[9] = x;
+//                actionObject[10] = y;
+//                actionObject[11] = width;
+//                actionObject[12] = height;  
+//                actionObject[13] = newName;
+        		
+    			Integer lineWidth = Integer.valueOf(graphObject.get(2).toString()).intValue();
+        		
+        		Integer stroke = Integer.valueOf(graphObject.get(1).toString()).intValue();
+        		Color strokeColor = new Color(stroke);
+        		
+        		Float alpha = Float.valueOf(graphObject.get(3).toString()).floatValue();
+        		
+        		Double x = Double.valueOf(graphObject.get(graphObject.size()-5).toString()).doubleValue();
+        		Double y = Double.valueOf(graphObject.get(graphObject.size()-4).toString()).doubleValue();
+        		//Double width = Double.valueOf(graphObject.get(graphObject.size()-3).toString()).doubleValue();
+        		//Double height = Double.valueOf(graphObject.get(graphObject.size()-2).toString()).doubleValue();
+
+        		Double x1 = Double.valueOf(graphObject.get(4).toString()).doubleValue();
+        		Double y1 = Double.valueOf(graphObject.get(5).toString()).doubleValue();
+        		Double x2 = Double.valueOf(graphObject.get(6).toString()).doubleValue();
+        		Double y2 = Double.valueOf(graphObject.get(7).toString()).doubleValue();
+        		
+        		SVGGraphics2D svgGenerator_temp = new SVGGraphics2D(svgGenerator);
+        		this.drawLine(svgGenerator_temp, x1, y1, x2, y2, strokeColor, lineWidth, x, y, alpha);
+        		
+        	} else {
+        		log.error("tried to include a non supported Graph-Object graphType: "+graphType);
+        	}
+        	
+        }
+        
+        return svgGenerator;
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/data/user/EmailManager.java b/src/main/java/org/apache/openmeetings/data/user/EmailManager.java
new file mode 100644
index 0000000..af1ba85
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/user/EmailManager.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.user;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.mail.MailHandler;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.mail.template.FeedbackTemplate;
+import org.apache.openmeetings.web.mail.template.RegisterUserTemplate;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @author swagner
+ *
+ */
+public class EmailManager {
+	private static final Logger log = Red5LoggerFactory.getLogger(EmailManager.class, webAppRootKey);
+
+	@Autowired
+	private ConfigurationDao configurationDao;
+	@Autowired
+	private MailHandler mailHandler;
+
+	/**
+	 * sends a mail adress to the user with his account data
+	 * 
+	 * @param username
+	 * @param userpass
+	 * @param email
+	 * @return
+	 * @throws Exception
+	 */
+	public String sendMail(String username, String userpass, String email, String link, Boolean sendEmailWithVerficationCode, Long langId) {
+		log.debug("sendMail:: username = {}, email = {}", username, email);
+		Integer sendEmailAtRegister = configurationDao.getConfValue("sendEmailAtRegister", Integer.class, "0");
+
+		if (sendEmailAtRegister == 1) {
+			RegisterUserTemplate.ensureApplication(langId != null ? langId :
+					configurationDao.getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, "1"));
+			mailHandler.send(email, Application.getString(512)  
+				, RegisterUserTemplate.getEmail(username, userpass, email, sendEmailWithVerficationCode ? link : null));
+		}
+		return "success";
+	}
+
+	//FIXME, seems to be not used
+	public void sendFeedback(String username, String email, String message) {
+		mailHandler.send("user@openmeetings.apache.org", Application.getString(499), FeedbackTemplate.getEmail(username, email, message));
+	}
+	
+	public String addEmailCon(String EMail, int CONTACT_ID) {
+		String succ = "invalid email";
+		return succ;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/user/UserManager.java b/src/main/java/org/apache/openmeetings/data/user/UserManager.java
new file mode 100644
index 0000000..85bf72b
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/user/UserManager.java
@@ -0,0 +1,607 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.user;
+
+import static org.apache.openmeetings.db.util.UserHelper.getMinLoginLength;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_GROUP_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SOAP_REGISTER_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.Arrays;
+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.Random;
+import java.util.Set;
+import java.util.TimeZone;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.TypedQuery;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.IUserManager;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.db.entity.user.Address;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.db.entity.user.Userdata;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.DaoHelper;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.scope.IScope;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 
+ * @author swagner
+ * 
+ */
+@Transactional
+public class UserManager implements IUserManager {
+	private static final Logger log = Red5LoggerFactory.getLogger(UserManager.class, webAppRootKey);
+
+	@PersistenceContext
+	private EntityManager em;
+
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private ConfigurationDao cfgDao;
+	@Autowired
+	private StateDao stateDao;
+	@Autowired
+	private OrganisationDao orgDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private EmailManager emailManagement;
+	@Autowired
+	private ScopeApplicationAdapter scopeApplicationAdapter;
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+
+	public SearchResult<User> getAllUserByRange(String search, int start, int max,
+			String orderby, boolean asc) {
+		try {
+			SearchResult<User> sresult = new SearchResult<User>();
+			sresult.setObjectName(User.class.getName());
+			sresult.setRecords(userDao.count(search));
+
+			String sort = null;
+			if (orderby != null && orderby.length() > 0) {
+				sort = orderby;
+			}
+			if (asc) {
+				sort += " ASC ";
+			} else {
+				sort += " DESC ";
+			}
+			String hql = DaoHelper.getSearchQuery("User", "u", search, true, false, sort, UserDao.searchFields);
+
+			log.debug("Show HQL: " + hql);
+
+			TypedQuery<User> query = em.createQuery(hql, User.class);
+			// query.setParameter("macomUserId", userId);
+
+			// query
+			// if (asc) ((Criteria) query).addOrder(Order.asc(orderby));
+			// else ((Criteria) query).addOrder(Order.desc(orderby));
+			query.setFirstResult(start);
+			query.setMaxResults(max);
+			List<User> ll = query.getResultList();
+
+			sresult.setResult(ll);
+
+			return sresult;
+
+		} catch (Exception ex2) {
+			log.error("[getAllUserByRange] ", ex2);
+		}
+		return null;
+	}
+
+	public User loginUserByRemoteHash(String SID, String remoteHash) {
+		try {
+
+			Sessiondata sessionData = sessiondataDao
+					.getSessionByHash(remoteHash);
+
+			if (sessionData != null) {
+
+				User u = userDao.get(sessionData.getUser_id());
+
+				sessiondataDao.updateUserWithoutSession(SID, u.getUser_id());
+
+				return u;
+			}
+
+		} catch (Exception ex2) {
+			log.error("[loginUserByRemoteHash]: ", ex2);
+		}
+		return null;
+	}
+
+	public Long logout(String SID, long USER_ID) {
+		sessiondataDao.updateUser(SID, 0, false, null);
+		return -12L;
+	}
+
+	public List<Userdata> getUserdataDashBoard(Long user_id) {
+		if (user_id != null && user_id.longValue() > 0) {
+			try {
+				TypedQuery<Userdata> query = em.createQuery("select c from Userdata as c where c.user_id = :user_id AND c.deleted = false", Userdata.class);
+				query.setParameter("user_id", user_id);
+				List<Userdata> ll = query.getResultList();
+				return ll;
+			} catch (Exception ex2) {
+				log.error("getUserdataDashBoard", ex2);
+			}
+		}
+		return null;
+	}
+
+	public Userdata getUserdataByKey(Long user_id, String DATA_KEY) {
+		Userdata userdata = new Userdata();
+		if (user_id != null && user_id.longValue() > 0) {
+			try {
+				TypedQuery<Userdata> query = em.createQuery("select c from Userdata as c where c.user_id = :user_id AND c.data_key = :data_key AND c.deleted = false", Userdata.class);
+				query.setParameter("user_id", user_id);
+				query.setParameter("data_key", DATA_KEY);
+				for (Iterator<Userdata> it2 = query.getResultList().iterator(); it2.hasNext();) {
+					userdata = it2.next();
+				}
+			} catch (Exception ex2) {
+				log.error("getUserdataByKey", ex2);
+			}
+		} else {
+			userdata.setComment("Error: No USER_ID given");
+		}
+		return userdata;
+	}
+
+	public String updateUserdata(int DATA_ID, long USER_ID, String DATA_KEY,
+			String DATA, String Comment) {
+		String res = "Fehler beim Update";
+		try {
+			String hqlUpdate = "update userdata set DATA_KEY= :DATA_KEY, USER_ID = :USER_ID, DATA = :DATA, updatetime = :updatetime, comment = :Comment where DATA_ID= :DATA_ID";
+			int updatedEntities = em.createQuery(hqlUpdate)
+					.setParameter("DATA_KEY", DATA_KEY)
+					.setParameter("USER_ID", USER_ID)
+					.setParameter("DATA", DATA)
+					.setParameter("updatetime", -1L)
+					.setParameter("Comment", Comment)
+					.setParameter("DATA_ID", DATA_ID).executeUpdate();
+			res = "Success" + updatedEntities;
+		} catch (Exception ex2) {
+			log.error("updateUserdata", ex2);
+		}
+		return res;
+	}
+
+	public String updateUserdataByKey(Long USER_ID, String DATA_KEY,
+			String DATA, String Comment) {
+		String res = "Fehler beim Update";
+		try {
+			String hqlUpdate = "UPDATE Userdata set data = :data, updatetime = :updatetime, "
+					+ "comment = :comment where user_id= :user_id AND data_key = :data_key";
+			int updatedEntities = em.createQuery(hqlUpdate)
+					.setParameter("data", DATA)
+					.setParameter("updatetime", -1L)
+					.setParameter("comment", Comment)
+					.setParameter("user_id", USER_ID)
+					.setParameter("data_key", DATA_KEY).executeUpdate();
+			res = "Success" + updatedEntities;
+		} catch (Exception ex2) {
+			log.error("updateUserdataByKey", ex2);
+		}
+		return res;
+	}
+
+	public String addUserdata(long USER_ID, String DATA_KEY, String DATA,
+			String Comment) {
+		String ret = "Fehler beim speichern der Userdata";
+		Userdata userdata = new Userdata();
+		userdata.setData_key(DATA_KEY);
+		userdata.setData(DATA);
+		userdata.setStarttime(new Date());
+		userdata.setUpdatetime(null);
+		userdata.setComment(Comment);
+		userdata.setUser_id(USER_ID);
+		userdata.setDeleted(false);
+		try {
+			em.merge(userdata);
+			ret = "success";
+		} catch (Exception ex2) {
+			log.error("addUserdata", ex2);
+		}
+		return ret;
+	}
+
+	/**
+	 * Method to register a new User, User will automatically be added to the
+	 * default user_level(1) new users will be automatically added to the
+	 * Organisation with the id specified in the configuration value
+	 * default_group_id
+	 * 
+	 * @param user_level
+	 * @param availible
+	 * @param status
+	 * @param login
+	 * @param Userpass
+	 * @param lastname
+	 * @param firstname
+	 * @param email
+	 * @param age
+	 * @param street
+	 * @param additionalname
+	 * @param fax
+	 * @param zip
+	 * @param states_id
+	 * @param town
+	 * @param language_id
+	 * @return
+	 */
+	public Long registerUser(String login, String Userpass, String lastname,
+			String firstname, String email, Date age, String street,
+			String additionalname, String fax, String zip, long states_id,
+			String town, long language_id, String phone, boolean sendSMS, boolean generateSipUserData, String jNameTimeZone) {
+		
+		String baseURL = cfgDao.getBaseUrl();
+		boolean sendConfirmation = baseURL != null
+				&& !baseURL.isEmpty()
+				&& 1 == cfgDao.getConfValue("sendEmailWithVerficationCode", Integer.class, "0");
+		
+		return registerUser(login, Userpass, lastname, firstname, email, age,
+				street, additionalname, fax, zip, states_id, town, language_id,
+				phone, sendSMS, generateSipUserData, jNameTimeZone, sendConfirmation);
+	}
+
+	public Long registerUserNoEmail(String login, String Userpass,
+			String lastname, String firstname, String email, Date age,
+			String street, String additionalname, String fax, String zip,
+			long states_id, String town, long language_id, String phone, boolean sendSMS, 
+			boolean generateSipUserData, String jNameTimeZone) {
+		
+		return registerUser(login, Userpass, lastname, firstname, email, age,
+				street, additionalname, fax, zip, states_id, town, language_id,
+				phone, sendSMS, generateSipUserData, jNameTimeZone, false);
+	}
+
+	private Long registerUser(String login, String Userpass, String lastname,
+			String firstname, String email, Date age, String street,
+			String additionalname, String fax, String zip, long states_id,
+			String town, long language_id, String phone, boolean sendSMS,
+			boolean generateSipUserData, String jNameTimeZone, Boolean sendConfirmation) {
+		try {
+			// Checks if FrontEndUsers can register
+			if ("1".equals(cfgDao.getConfValue(CONFIG_SOAP_REGISTER_KEY, String.class, "0"))) {
+				
+				// TODO: Read and generate SIP-Data via RPC-Interface Issue 1098
+
+				Long user_id = registerUserInit(UserDao.getDefaultRights(), login,
+						Userpass, lastname, firstname, email, age, street,
+						additionalname, fax, zip, states_id, town, language_id,
+						true, Arrays.asList(cfgDao.getConfValue(CONFIG_DEFAULT_GROUP_ID, Long.class, null)), phone,
+						sendSMS, sendConfirmation, timezoneUtil.getTimeZone(jNameTimeZone), false, "", "", false, true, null);
+
+				if (user_id > 0 && sendConfirmation) {
+					return -40L;
+				}
+
+				return user_id;
+			}
+		} catch (Exception e) {
+			log.error("[registerUser]", e);
+		}
+		return null;
+	}
+
+	/**
+	 * @param user_level
+	 * @param availible
+	 * @param status
+	 * @param login
+	 * @param password
+	 * @param lastname
+	 * @param firstname
+	 * @param email
+	 * @param age
+	 * @param street
+	 * @param additionalname
+	 * @param fax
+	 * @param zip
+	 * @param states_id
+	 * @param town
+	 * @param language_id
+	 * @param sendWelcomeMessage
+	 * @param organisations
+	 * @param phone
+	 * @param sendSMS
+	 * @param sendConfirmation
+	 * @param timezone
+	 * @param forceTimeZoneCheck
+	 * @param userOffers
+	 * @param userSearchs
+	 * @param showContactData
+	 * @param showContactDataToContacts
+	 * @return new users_id OR null if an exception, -1 if an error, -4 if mail
+	 *         already taken, -5 if username already taken, -3 if login or pass
+	 *         or mail is empty
+	 * @throws Exception
+	 */
+	public Long registerUserInit(Set<Right> rights, String login, String password, String lastname,
+			String firstname, String email, Date age, String street,
+			String additionalname, String fax, String zip, long states_id,
+			String town, long language_id, boolean sendWelcomeMessage,
+			List<Long> organisations, String phone, boolean sendSMS, Boolean sendConfirmation,
+			TimeZone timezone, Boolean forceTimeZoneCheck,
+			String userOffers, String userSearchs, Boolean showContactData,
+			Boolean showContactDataToContacts, String activatedHash) throws Exception {
+		// TODO: make phone number persistent
+		// Check for required data
+		if (login.length() >= getMinLoginLength(cfgDao)) {
+			// Check for duplicates
+			boolean checkName = userDao.checkLogin(login, User.Type.user, null, null);
+			boolean checkEmail = Strings.isEmpty(email) || userDao.checkEmail(email, User.Type.user, null, null);
+			if (checkName && checkEmail) {
+
+				String link = cfgDao.getBaseUrl();
+				String hash = activatedHash;
+				if (hash == null){
+					hash = ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(login
+							+ CalendarPatterns.getDateWithTimeByMiliSeconds(new Date()));
+				}
+				link += "activate?u=" + hash;
+
+				if (sendWelcomeMessage && email.length() != 0) {
+					String sendMail = emailManagement.sendMail(login, password, email, link, sendConfirmation, language_id);
+					if (!sendMail.equals("success")) {
+						return -19L;
+					}
+				}
+				Address adr =  userDao.getAddress(street, zip, town, states_id, additionalname, fax, phone, email);
+
+				// If this user needs first to click his E-Mail verification
+				// code then set the status to 0
+				if (sendConfirmation && rights.contains(Right.Login)) {
+					rights.remove(Right.Login);
+				}
+
+				List<Organisation_Users> orgList = new ArrayList<Organisation_Users>();
+				for (Long id : organisations) {
+					orgList.add(new Organisation_Users(orgDao.get(id)));
+				}
+				User u = userDao.addUser(rights, firstname, login, lastname, language_id,
+						password, adr, sendSMS, age, hash, timezone,
+						forceTimeZoneCheck, userOffers, userSearchs, showContactData,
+						showContactDataToContacts, null, null, orgList, null);
+				if (u == null) {
+					return -111L;
+				}
+				log.debug("Added user-Id " + u.getUser_id());
+
+				/*
+				 * Long adress_emails_id =
+				 * emailManagement.registerEmail(email, address_id,""); if
+				 * (adress_emails_id==null) { return new Long(-112); }
+				 */
+
+				if (adr.getAdresses_id() > 0 && u.getUser_id() > 0) {
+					return u.getUser_id();
+				} else {
+					return -16L;
+				}
+			} else {
+				if (!checkName) {
+					return -15L;
+				} else if (!checkEmail) {
+					return -17L;
+				}
+			}
+		}
+		return -1L;
+	}
+
+	/**
+	 * @param admin
+	 * @param room_id
+	 * @return
+	 */
+	public Boolean kickUserByStreamId(String SID, Long room_id) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			// admins only
+			if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+
+				sessiondataDao.clearSessionByRoomId(room_id);
+
+				for (Client rcl : sessionManager.getClientListByRoom(room_id)) {
+					if (rcl == null) {
+						return true;
+					}
+					String scopeName = "hibernate";
+					if (rcl.getRoom_id() != null) {
+						scopeName = rcl.getRoom_id().toString();
+					}
+					IScope currentScope = scopeApplicationAdapter
+							.getRoomScope(scopeName);
+					scopeApplicationAdapter.roomLeaveByScope(rcl, currentScope, true);
+
+					HashMap<Integer, String> messageObj = new HashMap<Integer, String>();
+					messageObj.put(0, "kick");
+					scopeApplicationAdapter.sendMessageById(messageObj,
+							rcl.getStreamid(), currentScope);
+
+				}
+				return true;
+			}
+		} catch (Exception err) {
+			log.error("[kickUserByStreamId]", err);
+		}
+		return null;
+	}
+
+	public Boolean kickUserByPublicSID(String SID, String publicSID) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			// admins only
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+
+				Client rcl = sessionManager
+						.getClientByPublicSID(publicSID, false, null);
+
+				if (rcl == null) {
+					return true;
+				}
+
+				String scopeName = "hibernate";
+				if (rcl.getRoom_id() != null) {
+					scopeName = rcl.getRoom_id().toString();
+				}
+				IScope currentScope = scopeApplicationAdapter
+						.getRoomScope(scopeName);
+
+				HashMap<Integer, String> messageObj = new HashMap<Integer, String>();
+				messageObj.put(0, "kick");
+				scopeApplicationAdapter.sendMessageById(messageObj,
+						rcl.getStreamid(), currentScope);
+
+				scopeApplicationAdapter.roomLeaveByScope(rcl, currentScope, true);
+
+				return true;
+			}
+		} catch (Exception err) {
+			log.error("[kickUserByStreamId]", err);
+		}
+		return null;
+	}
+	
+	public Long getLanguage(Locale loc) {
+		if (loc != null) {
+			for (Map.Entry<Long, Locale> e : LabelDao.languages.entrySet()) {
+				if (loc.equals(e.getValue())) {
+					return e.getKey();
+				}
+			}
+		}
+		return cfgDao.getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, "1");
+	}
+
+	public State getCountry(Locale loc) {
+		List<State> states = stateDao.getStates();
+		if (loc != null) {
+			String code = loc.getISO3Country().toUpperCase();
+			for (State s : states) {
+				if (s.getShortName().toUpperCase().equals(code)) {
+					return s;
+				}
+			}
+		}
+		return states.get(0);
+	}
+
+	public User loginOAuth(Map<String, String> params, long serverId) throws IOException, NoSuchAlgorithmException {
+		String login = params.get("login");
+		String email = params.get("email");
+		String lastname = params.get("lastname");
+		String firstname = params.get("firstname");
+		if (firstname == null) {
+			firstname = "";
+		}
+		if (lastname == null) {
+			lastname = "";
+		}
+		if (!userDao.validLogin(login)) {
+			log.error("Invalid login, please check parameters");
+			return null; //TODO FIXME need to be checked
+		}
+		User u = userDao.getByLogin(login, Type.oauth, serverId);
+		if (!userDao.checkEmail(email, Type.oauth, serverId, u == null ? null : u.getUser_id())) {
+			log.error("Another user with the same email exists");
+			return null; //TODO FIXME need to be checked
+		}
+		// generate random password
+		byte[] rawPass = new byte[25];
+		Random rnd = new Random();
+		for (int i = 0; i < rawPass.length; ++i) {
+			rawPass[i] = (byte) ('!' + rnd.nextInt(93));
+		}
+		String pass = new String(rawPass, "UTF-8");
+		// check if the user already exists and register new one if it's needed
+		if (u == null) {
+			u = userDao.getNewUserInstance(null);
+			u.setType(Type.oauth);
+			u.getRights().remove(Right.Login);;
+			u.setDomainId(serverId);
+			u.getOrganisation_users().add(new Organisation_Users(orgDao.get(cfgDao.getConfValue(CONFIG_DEFAULT_GROUP_ID, Long.class, "-1"))));
+			u.setLogin(login);
+			u.setShowContactDataToContacts(true);
+			u.setLastname(lastname);
+			u.setFirstname(firstname);
+			u.getAdresses().setEmail(email);
+			String picture = params.get("picture");
+			if (picture != null) {
+				u.setPictureuri(picture);
+			}
+			String locale = params.get("locale");
+			if (locale != null) {
+				Locale loc = Locale.forLanguageTag(locale);
+				if (loc != null) {
+					u.setLanguage_id(getLanguage(loc));
+					u.getAdresses().setStates(getCountry(loc));
+				}
+			}
+		}
+		//TODO FIXME should we update fields on login ????
+		u.setLastlogin(new Date());
+		u = userDao.update(u, pass, -1);
+		
+		return u;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/whiteboard/EmoticonsManager.java b/src/main/java/org/apache/openmeetings/data/whiteboard/EmoticonsManager.java
new file mode 100644
index 0000000..ecda7f9
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/whiteboard/EmoticonsManager.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.whiteboard;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.util.LinkedList;
+
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.stringhandlers.ChatString;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.XppDriver;
+
+/**
+ * Load the list of available emoticons from the XML file and store them in
+ * memory to load faster, {@link #loadEmot()} is only called once: during server
+ * startup
+ * 
+ * @author sebawagner
+ * 
+ */
+public class EmoticonsManager {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(EmoticonsManager.class, OpenmeetingsVariables.webAppRootKey);
+	
+	private LinkedList<LinkedList<String>> emotfilesList = new LinkedList<LinkedList<String>>();
+
+	@SuppressWarnings("unchecked")
+	public void loadEmot(){
+		try {
+			XStream xStream = new XStream(new XppDriver());
+			xStream.setMode(XStream.NO_REFERENCES);
+			BufferedReader reader = new BufferedReader(new FileReader(new File(OmFileHelper.getPublicEmotionsDir(), "emotes.xml")));
+		    String xmlString = "";
+		    while (reader.ready()) {
+		    	xmlString += reader.readLine();
+		    }
+		    reader.close();
+		    emotfilesList = ChatString.replaceAllRegExp((LinkedList<LinkedList<String>>) xStream.fromXML(xmlString));
+		    
+		    log.debug("##### loadEmot completed");
+		    
+		} catch (Exception err) {
+			log.error("[loadEmot]",err);
+		}
+	}
+	
+	public synchronized LinkedList<LinkedList<String>> getEmotfilesList() {
+		return emotfilesList;
+	}
+	
+	public synchronized void setEmotfilesList(LinkedList<LinkedList<String>> emotfilesListNew) {
+		emotfilesList = emotfilesListNew;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/whiteboard/WhiteBoardObjectListManagerById.java b/src/main/java/org/apache/openmeetings/data/whiteboard/WhiteBoardObjectListManagerById.java
new file mode 100644
index 0000000..ee9c8ad
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/whiteboard/WhiteBoardObjectListManagerById.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.whiteboard;
+
+import java.util.HashMap;
+
+import org.apache.openmeetings.db.dto.room.WhiteboardObject;
+import org.apache.openmeetings.db.dto.room.WhiteboardObjectList;
+
+/**
+ * Memory based cache, configured as singleton in spring configuration
+ * 
+ * @author sebawagner
+ *
+ */
+public class WhiteBoardObjectListManagerById {
+	
+	private HashMap<Long,WhiteboardObjectList> whiteBoardObjectList = new HashMap<Long,WhiteboardObjectList>();
+	
+	private Long whiteboardId = 0L;
+	
+	public Long getNewWhiteboardId(Long room_id) throws Exception {
+		whiteboardId++;
+		this.setWhiteBoardObjectListRoomObjAndWhiteboardId(room_id, new WhiteboardObject(), whiteboardId);
+		return whiteboardId;
+	}
+	
+	/*
+	 * Room items a Whiteboard
+	 */
+	public synchronized WhiteboardObjectList getWhiteBoardObjectListByRoomId(Long room_id){
+		WhiteboardObjectList whiteboardObjectList = whiteBoardObjectList.get(room_id);
+		if (whiteboardObjectList == null) {
+			whiteboardObjectList = new WhiteboardObjectList();
+		}
+		return whiteboardObjectList;
+	}
+	
+	public synchronized WhiteboardObject getWhiteBoardObjectListByRoomIdAndWhiteboard(Long room_id, Long whiteBoardId){
+		WhiteboardObjectList whiteboardObjectList = whiteBoardObjectList.get(room_id);
+		if (whiteboardObjectList == null) {
+			whiteboardObjectList = new WhiteboardObjectList();
+		}
+		WhiteboardObject whiteboardObjects = whiteboardObjectList.getWhiteboardObjects().get(whiteBoardId);
+		if (whiteboardObjects == null) {
+			whiteboardObjects = new WhiteboardObject();
+		}
+		return whiteboardObjects;
+	}
+	
+	/*
+	 * Whiteboard Object List
+	 * 
+	 */
+	
+	public synchronized void setWhiteBoardObjectListRoomObj(Long room_id, WhiteboardObjectList whiteboardObjectList){
+		whiteBoardObjectList.put(room_id, whiteboardObjectList);
+	}
+	
+	public synchronized void setWhiteBoardObjectListRoomObjAndWhiteboardId(Long room_id, WhiteboardObject whiteboardObjects, Long whiteBoardId){
+		WhiteboardObjectList whiteboardObjectList = whiteBoardObjectList.get(room_id);
+		if (whiteboardObjectList == null) {
+			whiteboardObjectList = new WhiteboardObjectList();
+			whiteboardObjectList.setRoom_id(room_id);
+		}
+		whiteboardObjects.setWhiteBoardId(whiteBoardId);
+		whiteboardObjectList.getWhiteboardObjects().put(whiteBoardId, whiteboardObjects);
+		whiteBoardObjectList.put(room_id, whiteboardObjectList);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/data/whiteboard/WhiteBoardObjectSyncManager.java b/src/main/java/org/apache/openmeetings/data/whiteboard/WhiteBoardObjectSyncManager.java
new file mode 100644
index 0000000..2f3e38c
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/whiteboard/WhiteBoardObjectSyncManager.java
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.whiteboard;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dto.room.WhiteboardSyncLockObject;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * Memory based, configured as singleton in spring configuration
+ * 
+ * @author sebawagner
+ *
+ */
+public class WhiteBoardObjectSyncManager {
+
+	private HashMap<Long, Map<String, WhiteboardSyncLockObject>> whiteBoardSyncList = new HashMap<Long, Map<String, WhiteboardSyncLockObject>>();
+
+	private HashMap<Long, Map<String, Map<String, WhiteboardSyncLockObject>>> whiteBoardObjectSyncList = new HashMap<Long, Map<String, Map<String, WhiteboardSyncLockObject>>>();
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			WhiteBoardObjectSyncManager.class,
+			OpenmeetingsVariables.webAppRootKey);
+
+	/*
+	 * Initial Sync Process
+	 */
+	public synchronized void setWhiteBoardSyncListByRoomid(Long room_id,
+			Map<String, WhiteboardSyncLockObject> mapObject) {
+		whiteBoardSyncList.put(room_id, mapObject);
+	}
+
+	public synchronized Map<String, WhiteboardSyncLockObject> getWhiteBoardSyncListByRoomid(
+			Long room_id) {
+		Map<String, WhiteboardSyncLockObject> roomList = whiteBoardSyncList
+				.get(room_id);
+		if (roomList == null) {
+			roomList = new HashMap<String, WhiteboardSyncLockObject>();
+		}
+		return roomList;
+	}
+
+	/*
+	 * Image Sync Process
+	 */
+	public synchronized void setWhiteBoardImagesSyncListByRoomid(Long room_id,
+			Map<String, Map<String, WhiteboardSyncLockObject>> mapObject) {
+		whiteBoardObjectSyncList.put(room_id, mapObject);
+	}
+
+	public synchronized void setWhiteBoardImagesSyncListByRoomAndObjectId(
+			Long room_id, String object_id,
+			Map<String, WhiteboardSyncLockObject> imageSyncList) {
+		Map<String, Map<String, WhiteboardSyncLockObject>> roomList = whiteBoardObjectSyncList
+				.get(room_id);
+		if (roomList == null) {
+			roomList = new HashMap<String, Map<String, WhiteboardSyncLockObject>>();
+		}
+		if (imageSyncList.size() == 0) {
+			roomList.remove(object_id);
+		} else {
+			roomList.put(object_id, imageSyncList);
+		}
+		setWhiteBoardImagesSyncListByRoomid(room_id, roomList);
+	}
+
+	public synchronized Map<String, Map<String, WhiteboardSyncLockObject>> getWhiteBoardObjectSyncListByRoomid(
+			Long room_id) {
+		Map<String, Map<String, WhiteboardSyncLockObject>> roomList = whiteBoardObjectSyncList
+				.get(room_id);
+		if (roomList == null) {
+			roomList = new HashMap<String, Map<String, WhiteboardSyncLockObject>>();
+		}
+		return roomList;
+	}
+
+	public synchronized Map<String, WhiteboardSyncLockObject> getWhiteBoardObjectSyncListByRoomAndObjectId(
+			Long room_id, String object_id) {
+		log.debug("getWhiteBoardImagesSyncListByRoomAndImageid room_id: "
+				+ room_id);
+		Map<String, Map<String, WhiteboardSyncLockObject>> roomList = whiteBoardObjectSyncList
+				.get(room_id);
+		if (roomList == null) {
+			roomList = new HashMap<String, Map<String, WhiteboardSyncLockObject>>();
+		}
+		log.debug("getWhiteBoardImagesSyncListByRoomAndImageid roomList: "
+				+ roomList);
+		log.debug("getWhiteBoardImagesSyncListByRoomAndImageid object_id: "
+				+ object_id);
+		if (roomList.size() == 1) {
+			log.debug("getWhiteBoardImagesSyncListByRoomAndImageid roomList Key image_id: "
+					+ roomList.keySet().iterator().next());
+		}
+		Map<String, WhiteboardSyncLockObject> imageSyncList = roomList
+				.get(object_id);
+		if (imageSyncList == null) {
+			imageSyncList = new HashMap<String, WhiteboardSyncLockObject>();
+		}
+		return imageSyncList;
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/data/whiteboard/WhiteboardManager.java b/src/main/java/org/apache/openmeetings/data/whiteboard/WhiteboardManager.java
new file mode 100644
index 0000000..964b23a
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/data/whiteboard/WhiteboardManager.java
@@ -0,0 +1,334 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.whiteboard;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dto.room.WhiteboardObject;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class WhiteboardManager {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			WhiteboardManager.class, OpenmeetingsVariables.webAppRootKey);
+	
+	@Autowired
+	private WhiteBoardObjectListManagerById whiteBoardObjectListManagerById;
+
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public void addWhiteBoardObjectById(Long room_id, Map whiteboardObj,
+			Long whiteBoardId) {
+		try {
+			log.debug("addWhiteBoardObjectById: ", whiteboardObj);
+
+			// log.debug("whiteboardObj 0: Event: "+whiteboardObj.get(0));
+			// log.debug("whiteboardObj 1: Event: "+whiteboardObj.get(1));
+			// log.debug("whiteboardObj 2: Event: "+whiteboardObj.get(2));
+			// log.debug("whiteboardObj 3: Event: "+whiteboardObj.get(3));
+
+			// log.debug("whiteboardObj NUMB3: Event: "+whiteboardObj.get(3).getClass().getName());
+
+			// Date dateOfEvent = (Date) whiteboardObj.get(1);
+			String action = whiteboardObj.get(2).toString();
+
+			log.debug("action: " + action);
+			log.debug("actionObject: " + whiteboardObj.get(3));
+
+			List actionObject = (List) whiteboardObj.get(3);
+
+			if (action.equals("moveMap")) {
+				WhiteboardObject whiteboardObject = whiteBoardObjectListManagerById
+						.getWhiteBoardObjectListByRoomIdAndWhiteboard(room_id,
+								whiteBoardId);
+
+				whiteboardObject.setX(Integer.valueOf(
+						actionObject.get(1).toString()).intValue());
+				whiteboardObject.setY(Integer.valueOf(
+						actionObject.get(2).toString()).intValue());
+
+				whiteBoardObjectListManagerById
+						.setWhiteBoardObjectListRoomObjAndWhiteboardId(room_id,
+								whiteboardObject, whiteBoardId);
+			} else if (action.equals("draw") || action.equals("redo")) {
+				WhiteboardObject whiteboardObject = whiteBoardObjectListManagerById
+						.getWhiteBoardObjectListByRoomIdAndWhiteboard(room_id,
+								whiteBoardId);
+
+				// log.debug(actionObject);
+				// log.debug(actionObject.size()-1);
+				// log.debug(actionObject.get(actionObject.size()-1));
+				String objectType = actionObject.get(0).toString();
+				if (!objectType.equals("pointerWhiteBoard")) {
+					String objectOID = actionObject
+							.get(actionObject.size() - 1).toString();
+					log.debug("objectOID: " + objectOID);
+					whiteboardObject.getRoomItems()
+							.put(objectOID, actionObject);
+					whiteBoardObjectListManagerById
+							.setWhiteBoardObjectListRoomObjAndWhiteboardId(
+									room_id, whiteboardObject, whiteBoardId);
+				}
+			} else if (action.equals("clear")) {
+				WhiteboardObject whiteboardObject = whiteBoardObjectListManagerById
+						.getWhiteBoardObjectListByRoomIdAndWhiteboard(room_id,
+								whiteBoardId);
+				whiteboardObject.setRoomItems(new HashMap<String, List>());
+				whiteBoardObjectListManagerById
+						.setWhiteBoardObjectListRoomObjAndWhiteboardId(room_id,
+								whiteboardObject, whiteBoardId);
+			} else if (action.equals("delete") || action.equals("undo")) {
+				WhiteboardObject whiteboardObject = whiteBoardObjectListManagerById
+						.getWhiteBoardObjectListByRoomIdAndWhiteboard(room_id,
+								whiteBoardId);
+				String objectOID = actionObject.get(actionObject.size() - 1)
+						.toString();
+				String objectType = actionObject.get(0).toString();
+				log.debug("removal of objectOID: " + objectOID);
+
+				log.debug("removal of objectOID: " + objectOID);
+
+				// "ellipse"
+				// || this.baseactionobjectList[i][0] == "drawarrow"
+				// || this.baseactionobjectList[i][0] == "line"
+				// || this.baseactionobjectList[i][0] == "paint"
+				// || this.baseactionobjectList[i][0] == "rectangle"
+				// || this.baseactionobjectList[i][0] == "uline"
+				// || this.baseactionobjectList[i][0] == "image"
+				// || this.baseactionobjectList[i][0] == "letter"
+
+				// Re-Index all items in its zIndex
+				if (objectType.equals("ellipse")
+						|| objectType.equals("drawarrow")
+						|| objectType.equals("line")
+						|| objectType.equals("paint")
+						|| objectType.equals("rectangle")
+						|| objectType.equals("uline")
+						|| objectType.equals("image")
+						|| objectType.equals("letter")
+						|| objectType.equals("clipart")
+						|| objectType.equals("swf")
+						|| objectType.equals("mindmapnode")
+						|| objectType.equals("flv")) {
+
+					Integer zIndex = Integer.valueOf(
+							actionObject.get(actionObject.size() - 8)
+									.toString()).intValue();
+
+					log.debug("1|zIndex " + zIndex);
+					log.debug("2|zIndex "
+							+ actionObject.get(actionObject.size() - 8)
+									.toString());
+					log.debug("3|zIndex "
+							+ actionObject.get(actionObject.size() - 8));
+
+					int l = 0;
+					for (Iterator debugIter = actionObject.iterator(); debugIter
+							.hasNext();) {
+						log.debug("4|zIndex " + l + " -- " + debugIter.next());
+						l++;
+					}
+
+					for (Iterator<String> iter = whiteboardObject
+							.getRoomItems().keySet().iterator(); iter.hasNext();) {
+						String whiteboardObjKey = iter.next();
+						List actionObjectStored = whiteboardObject
+								.getRoomItems().get(whiteboardObjKey);
+
+						Integer zIndexStored = Integer.valueOf(
+								actionObjectStored.get(
+										actionObjectStored.size() - 8)
+										.toString()).intValue();
+
+						log.debug("zIndexStored|zIndex " + zIndexStored + "|"
+								+ zIndex);
+
+						if (zIndexStored >= zIndex) {
+							zIndexStored -= 1;
+							log.debug("new-zIndex " + zIndexStored);
+						}
+						actionObjectStored.set(actionObjectStored.size() - 8,
+								zIndexStored);
+
+						whiteboardObject.getRoomItems().put(whiteboardObjKey,
+								actionObjectStored);
+					}
+
+				}
+
+				whiteboardObject.getRoomItems().remove(objectOID);
+
+				whiteBoardObjectListManagerById
+						.setWhiteBoardObjectListRoomObjAndWhiteboardId(room_id,
+								whiteboardObject, whiteBoardId);
+			} else if (action.equals("size") || action.equals("editProp")
+					|| action.equals("editTextMindMapNode")
+					|| action.equals("editText") || action.equals("swf")
+					|| action.equals("flv")
+					|| action.equals("editTextMindMapColor")
+					|| action.equals("editTextMindMapFontColor")) {
+				WhiteboardObject whiteboardObject = whiteBoardObjectListManagerById
+						.getWhiteBoardObjectListByRoomIdAndWhiteboard(room_id,
+								whiteBoardId);
+				String objectOID = actionObject.get(actionObject.size() - 1)
+						.toString();
+				// List roomItem = roomList.get(objectOID);
+				List currentObject = whiteboardObject.getRoomItems().get(
+						objectOID);
+				if (actionObject.get(0).equals("paint")) {
+					actionObject.set(1, currentObject.get(1));
+				}
+				whiteboardObject.getRoomItems().put(objectOID, actionObject);
+
+				Map roomList = whiteboardObject.getRoomItems();
+
+				if (action.equals("swf")) {
+
+					log.debug("actionObject " + actionObject);
+
+					if (actionObject.get(0).equals("swf")) {
+
+						if (actionObject.get(8) != currentObject.get(8)) {
+
+							String baseObjectName = actionObject.get(
+									actionObject.size() - 1).toString();
+							Integer slidesNumber = Integer.valueOf(
+									actionObject.get(8).toString()).intValue();
+
+							log.debug("updateObjectsToSlideNumber :: "
+									+ baseObjectName + "," + slidesNumber);
+
+							for (Iterator<String> iter = roomList.keySet()
+									.iterator(); iter.hasNext();) {
+								String whiteboardObjKey = iter.next();
+								List actionObjectStored = (List) roomList
+										.get(whiteboardObjKey);
+
+								if (actionObjectStored.get(0).equals("ellipse")
+										|| actionObjectStored.get(0).equals(
+												"drawarrow")
+										|| actionObjectStored.get(0).equals(
+												"line")
+										|| actionObjectStored.get(0).equals(
+												"clipart")
+										|| actionObjectStored.get(0).equals(
+												"paint")
+										|| actionObjectStored.get(0).equals(
+												"rectangle")
+										|| actionObjectStored.get(0).equals(
+												"uline")
+										|| actionObjectStored.get(0).equals(
+												"image")
+										|| actionObjectStored.get(0).equals(
+												"letter")) {
+
+									Map swfObj = (Map) actionObjectStored
+											.get(actionObjectStored.size() - 7);
+									log.debug("swfObj :1: " + swfObj);
+
+									if (swfObj != null) {
+
+										if (swfObj.get("name").equals(
+												baseObjectName)) {
+
+											if (Integer.valueOf(
+													swfObj.get("slide")
+															.toString())
+													.intValue() == slidesNumber) {
+
+												swfObj.put("isVisible", true);
+
+												actionObjectStored.set(
+														actionObjectStored
+																.size() - 7,
+														swfObj);
+
+											} else {
+
+												swfObj.put("isVisible", false);
+
+												actionObjectStored.set(
+														actionObjectStored
+																.size() - 7,
+														swfObj);
+
+											}
+
+										}
+
+									}
+
+									log.debug("swfObj :1: " + swfObj);
+
+								}
+
+							}
+
+						}
+
+					}
+				}
+
+				whiteBoardObjectListManagerById
+						.setWhiteBoardObjectListRoomObjAndWhiteboardId(room_id,
+								whiteboardObject, whiteBoardId);
+			} else if (action.equals("clearSlide")) {
+
+				WhiteboardObject whiteboardObject = whiteBoardObjectListManagerById
+						.getWhiteBoardObjectListByRoomIdAndWhiteboard(room_id,
+								whiteBoardId);
+
+				Map roomList = whiteboardObject.getRoomItems();
+
+				for (String objectName : (List<String>) actionObject) {
+
+					roomList.remove(objectName);
+
+				}
+
+				whiteBoardObjectListManagerById
+						.setWhiteBoardObjectListRoomObjAndWhiteboardId(room_id,
+								whiteboardObject, whiteBoardId);
+			} else if (action.equals("whiteboardObj")) {
+				WhiteboardObject whiteboardObject = whiteBoardObjectListManagerById
+						.getWhiteBoardObjectListByRoomIdAndWhiteboard(room_id,
+								whiteBoardId);
+
+				whiteboardObject.setFullFit((Boolean) actionObject.get(1));
+				whiteboardObject.setZoom((Integer) actionObject.get(2));
+
+				whiteBoardObjectListManagerById
+				.setWhiteBoardObjectListRoomObjAndWhiteboardId(room_id,
+						whiteboardObject, whiteBoardId);
+			} else {
+				log.warn("Unkown Type: " + action + " actionObject: "
+						+ actionObject);
+			}
+
+		} catch (Exception err) {
+			log.error("[addWhiteBoardObject]", err);
+		}
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/documents/CreateLibraryPresentation.java b/src/main/java/org/apache/openmeetings/documents/CreateLibraryPresentation.java
new file mode 100644
index 0000000..4b8a6b7
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/documents/CreateLibraryPresentation.java
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.documents;
+
+import static org.apache.openmeetings.util.OmFileHelper.thumbImagePrefix;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FilenameFilter;
+import java.util.Arrays;
+
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.dom4j.io.XMLWriter;
+
+public class CreateLibraryPresentation {
+	public static ConverterProcessResult generateXMLDocument(File targetDirectory, String originalDocument, 
+			String pdfDocument, String swfDocument){
+		ConverterProcessResult returnMap = new ConverterProcessResult();
+		returnMap.setProcess("generateXMLDocument");		
+		try {
+			
+	        Document document = DocumentHelper.createDocument();
+	        Element root = document.addElement( "presentation" );
+
+	        File file = new File(targetDirectory, originalDocument);
+	        root.addElement( "originalDocument" )
+				.addAttribute("lastmod", (new Long(file.lastModified())).toString())
+				.addAttribute("size", (new Long(file.length())).toString())	        
+	            .addText( originalDocument );
+	        
+	        if (pdfDocument!=null){
+	        	File pdfDocumentFile = new File(targetDirectory, pdfDocument);
+		        root.addElement( "pdfDocument" )
+					.addAttribute("lastmod", (new Long(pdfDocumentFile.lastModified())).toString())
+					.addAttribute("size", (new Long(pdfDocumentFile.length())).toString())	   		        
+		            .addText( pdfDocument );
+	        }
+	        
+	        if (swfDocument!=null){
+	        	File swfDocumentFile = new File(targetDirectory, originalDocument);
+		        root.addElement( "swfDocument" )
+					.addAttribute("lastmod", (new Long(swfDocumentFile.lastModified())).toString())
+					.addAttribute("size", (new Long(swfDocumentFile.length())).toString())	  		        
+	            	.addText( swfDocument );	  
+	        }
+	        
+	        Element thumbs = root.addElement( "thumbs" );
+	        
+			//Secoond get all Files of this Folder
+			FilenameFilter ff = new FilenameFilter() {
+			     public boolean accept(File b, String name) {
+			    	  File f = new File(b, name);
+			          return f.isFile();
+			     }
+			};	
+			
+			String[] allfiles = targetDirectory.list(ff);			
+			if(allfiles!=null){
+				Arrays.sort(allfiles);
+				for(int i=0; i<allfiles.length; i++){
+					File thumbfile = new File(targetDirectory, allfiles[i]);
+					if (allfiles[i].startsWith(thumbImagePrefix)){
+						thumbs.addElement( "thumb" )
+							.addAttribute("lastmod", (new Long(thumbfile.lastModified())).toString())
+							.addAttribute("size", (new Long(thumbfile.length())).toString())
+			            	.addText( allfiles[i] );
+					}
+				}
+			}
+	        
+	        // lets write to a file
+	        XMLWriter writer = new XMLWriter(
+	            new FileOutputStream(new File(targetDirectory, OmFileHelper.libraryFileName))
+	        );
+	        writer.write( document );
+	        writer.close();
+			
+	        returnMap.setExitValue("0");
+	        
+			return returnMap;
+		} catch (Exception err) {
+			err.printStackTrace();
+			returnMap.setError(err.getMessage());
+			returnMap.setExitValue("-1");
+			return returnMap;
+		}
+	}
+	
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/documents/GeneratePDF.java b/src/main/java/org/apache/openmeetings/documents/GeneratePDF.java
new file mode 100644
index 0000000..a0bcd0c
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/documents/GeneratePDF.java
@@ -0,0 +1,161 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.documents;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.ArrayList;
+
+import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openmeetings.converter.GenerateSWF;
+import org.apache.openmeetings.converter.GenerateThumbs;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.process.ConverterProcessResult;
+import org.apache.openmeetings.util.process.ConverterProcessResultList;
+import org.apache.openmeetings.util.process.ProcessHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class GeneratePDF {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			GeneratePDF.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private GenerateThumbs generateThumbs;
+	@Autowired
+	private GenerateSWF generateSWF;
+	@Autowired
+	private ConfigurationDao configurationDao;
+
+	public ConverterProcessResultList convertPDF(String fileName,
+			String roomName, boolean fullProcessing, File inFile)
+			throws Exception {
+
+		String inFileName = inFile.getName();
+		ConverterProcessResultList returnError = new ConverterProcessResultList();
+
+		File fileFullPath = new File(OmFileHelper.getUploadTempRoomDir(roomName), inFileName);
+		File destinationFolder = OmFileHelper.getNewDir(OmFileHelper.getUploadRoomDir(roomName), fileName);
+
+		log.debug("fullProcessing: " + fullProcessing);
+		if (fullProcessing) {
+			ConverterProcessResult processOpenOffice = doJodConvert(
+					fileFullPath, destinationFolder, fileName);
+			returnError.addItem("processOpenOffice", processOpenOffice);
+			ConverterProcessResult processThumb = generateThumbs
+					.generateBatchThumb(new File(destinationFolder, fileName + ".pdf"), destinationFolder, 80, "thumb");
+			returnError.addItem("processThumb", processThumb);
+			ConverterProcessResult processSWF = generateSWF
+					.generateSwf(destinationFolder, destinationFolder, fileName);
+			returnError.addItem("processSWF", processSWF);
+		} else {
+
+			log.debug("-- generateBatchThumb --");
+
+			ConverterProcessResult processThumb = generateThumbs
+					.generateBatchThumb(fileFullPath, destinationFolder, 80, "thumb");
+			returnError.addItem("processThumb", processThumb);
+
+			ConverterProcessResult processSWF = generateSWF.generateSwf(
+					fileFullPath.getParentFile(), destinationFolder, fileName);
+			returnError.addItem("processSWF", processSWF);
+		}
+
+		// now it should be completed so copy that file to the expected location
+		File fileWhereToMove = new File(destinationFolder, inFileName);
+		fileWhereToMove.createNewFile();
+		FileHelper.moveRec(inFile, fileWhereToMove);
+
+		if (fullProcessing) {
+			ConverterProcessResult processXML = CreateLibraryPresentation
+					.generateXMLDocument(destinationFolder,
+							inFileName, fileName + ".pdf",
+							fileName + ".swf");
+			returnError.addItem("processXML", processXML);
+		} else {
+			ConverterProcessResult processXML = CreateLibraryPresentation
+					.generateXMLDocument(destinationFolder,
+							inFileName, null, fileName + ".swf");
+			returnError.addItem("processXML", processXML);
+		}
+
+		return returnError;
+	}
+
+	/**
+	 * Generates PDF using JOD Library (external library)
+	 */
+	public ConverterProcessResult doJodConvert(File fileFullPath, File destinationFolder, String outputfile) {
+		try {
+
+			String jodPath = configurationDao.getConfValue("jod.path",
+					String.class, "./jod");
+			String officePath = configurationDao.getConfValue(
+					"office.path", String.class, "");
+
+			File jodFolder = new File(jodPath);
+			if (!jodFolder.exists() || !jodFolder.isDirectory()) {
+				throw new Exception("Path to JOD Library folder does not exist");
+			}
+
+			ArrayList<String> argv = new ArrayList<String>();
+			argv.add("java");
+
+			if (officePath.trim().length() > 0) {
+				argv.add("-Doffice.home=" + officePath);
+			}
+			String jodConverterJar = "";
+
+			for (String jar : jodFolder.list(new FilenameFilter() {
+				public boolean accept(File file1, String name) {
+					return name.endsWith(".jar");
+				}
+			})) {
+				argv.add("-cp");
+				if (jar.startsWith("jodconverter")) {
+					jodConverterJar = jar;
+				}
+				argv.add(new File(jodFolder, jar).getCanonicalPath());
+			}
+			if (jodConverterJar.length() == 0) {
+				throw new Exception(
+						"Could not find jodConverter JAR file in JOD folder");
+			}
+
+			argv.add("-jar");
+			argv.add(new File(jodFolder, jodConverterJar).getCanonicalPath());
+			argv.add(fileFullPath.getCanonicalPath());
+			argv.add(new File(destinationFolder, outputfile + ".pdf").getCanonicalPath());
+
+			return ProcessHelper.executeScript("doJodConvert",
+					argv.toArray(new String[argv.size()]));
+
+		} catch (Exception ex) {
+			log.error("doJodConvert", ex);
+			return new ConverterProcessResult("doJodConvert", ex.getMessage(), ex);
+		}
+	}
+
+	
+
+}
diff --git a/src/main/java/org/apache/openmeetings/documents/LibraryChartLoader.java b/src/main/java/org/apache/openmeetings/documents/LibraryChartLoader.java
new file mode 100644
index 0000000..0e6e955
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/documents/LibraryChartLoader.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.documents;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.util.ArrayList;
+
+import org.apache.openmeetings.util.Logger;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.XppDriver;
+
+public class LibraryChartLoader {
+
+    private static final Logger log = new Logger();
+
+    private static final String fileExt = ".xchart";
+
+    private static LibraryChartLoader instance;
+
+    private LibraryChartLoader() {
+    }
+
+    public static synchronized LibraryChartLoader getInstance() {
+        if (instance == null) {
+            instance = new LibraryChartLoader();
+        }
+        return instance;
+    }
+
+    @SuppressWarnings("rawtypes")
+	public ArrayList loadChart(File dir, String fileName) {
+        try {
+            File file = new File(dir, fileName + fileExt);
+
+            log.error("filepathComplete: " + file);
+
+            XStream xStream = new XStream(new XppDriver());
+            xStream.setMode(XStream.NO_REFERENCES);
+
+            BufferedReader reader = new BufferedReader(new FileReader(file));
+            String xmlString = "";
+            while (reader.ready()) {
+                xmlString += reader.readLine();
+            }
+            reader.close();
+            // lMap = (LinkedHashMap) xStream.fromXML(xmlString);
+            ArrayList lMapList = (ArrayList) xStream.fromXML(xmlString);
+
+            return lMapList;
+        } catch (Exception err) {
+            log.error(err);
+        }
+
+        return null;
+
+    }
+
+}
diff --git a/src/main/java/org/apache/openmeetings/documents/LibraryDocumentConverter.java b/src/main/java/org/apache/openmeetings/documents/LibraryDocumentConverter.java
new file mode 100644
index 0000000..a7cb531
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/documents/LibraryDocumentConverter.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.documents;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.stringhandlers.StringComparer;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.XppDriver;
+
+public class LibraryDocumentConverter {
+	private static final Logger log = Red5LoggerFactory.getLogger(LibraryDocumentConverter.class, OpenmeetingsVariables.webAppRootKey);
+	
+	private static final String fileExt = ".wml";
+	
+	public static String writeToLocalFolder(String fileName, @SuppressWarnings("rawtypes")ArrayList objList) {
+		try {
+			
+			log.debug("filePath: " + OmFileHelper.getUploadWmlDir().getCanonicalPath());
+			
+			String fileNameExtName = fileName.substring(fileName.length()-4,fileName.length());
+			if (fileNameExtName.equals(fileExt)){
+				fileName = StringComparer.getInstance().compareForRealPaths(fileName.substring(0, fileName.length()-4));
+			} else {
+				fileName = StringComparer.getInstance().compareForRealPaths(fileName.substring(0, fileName.length()));
+			}
+			
+			if (fileName.length()<=0){
+				//return new Long(-21);
+				return "-20";
+			}
+			//Add the Folder for the wmlFiles if it does not exist yet
+			File filePathComplete = new File(OmFileHelper.getUploadWmlDir(), fileName + fileExt);
+			
+			if (filePathComplete.exists()){
+				return "-20";
+			}		
+			
+			XStream xStream = new XStream(new XppDriver());
+			xStream.setMode(XStream.NO_REFERENCES);
+			String xmlString = xStream.toXML(objList);	
+			
+			log.debug("Write to "+filePathComplete);
+			
+			PrintWriter pw = new PrintWriter(new FileWriter(filePathComplete));
+		    pw.println(xmlString);
+		    pw.flush();
+		    pw.close();
+	    
+		    //return new Long(1);
+		    
+		    return filePathComplete.getCanonicalPath();
+		} catch (Exception err){
+			log.error("writeToLocalFolder",err);
+		}
+		
+		return null;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/documents/LibraryDocuments.java b/src/main/java/org/apache/openmeetings/documents/LibraryDocuments.java
new file mode 100644
index 0000000..54d10ba
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/documents/LibraryDocuments.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.documents;
+
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class LibraryDocuments {
+	
+	private static final Logger log = Red5LoggerFactory.getLogger(LibraryDocuments.class, OpenmeetingsVariables.webAppRootKey);
+
+	private static LibraryDocuments instance;
+
+	private LibraryDocuments() {}
+
+	public static synchronized LibraryDocuments getInstance() {
+		if (instance == null) {
+			log.debug("instance created");
+			instance = new LibraryDocuments();
+		}
+		return instance;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/documents/LibraryWmlLoader.java b/src/main/java/org/apache/openmeetings/documents/LibraryWmlLoader.java
new file mode 100644
index 0000000..b7f6f96
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/documents/LibraryWmlLoader.java
@@ -0,0 +1,252 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.documents;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.dom4j.Element;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.XppDriver;
+
+public class LibraryWmlLoader {
+	
+	private static final Logger log = Red5LoggerFactory.getLogger(LibraryWmlLoader.class, OpenmeetingsVariables.webAppRootKey);
+	
+	private static final String fileExt = ".wml";
+	
+	@SuppressWarnings({ "rawtypes" })
+	public ArrayList loadWmlFile(String fileName){
+		try {
+			String name = fileName;
+			if (!name.endsWith(fileExt)) {
+				name += fileExt;
+			}
+			File filepathComplete = new File(OmFileHelper.getUploadWmlDir(), name);
+			log.debug("filepathComplete: "+filepathComplete);
+			
+			XStream xStream = new XStream(new XppDriver());
+			xStream.setMode(XStream.NO_REFERENCES);
+			
+			BufferedReader reader = new BufferedReader(new FileReader(filepathComplete));
+		    String xmlString = "";
+		    while (reader.ready()) {
+		    	xmlString += reader.readLine();
+		    }
+		    reader.close();
+		    //lMap = (LinkedHashMap) xStream.fromXML(xmlString);
+		    ArrayList lMapList = (ArrayList) xStream.fromXML(xmlString);
+			
+			return lMapList;
+		} catch (Exception err){
+			log.error("loadWmlFile",err);
+		}
+		
+		return null;
+		
+	}
+	
+	/**
+	 * @deprecated
+	 * @param paintElement
+	 * @param subMap
+	 */
+	@SuppressWarnings({ "unused", "rawtypes" })
+	private void createListObjectPaintByNode(Element paintElement, LinkedHashMap<Integer,Object> subMap){
+		try {
+			
+			LinkedHashMap<Integer,LinkedHashMap> pointMap = new LinkedHashMap<Integer,LinkedHashMap>();
+			Element pointElements = paintElement.element("points");
+			Integer k = 0;
+			
+			for ( Iterator i = pointElements.elementIterator( "point" ); i.hasNext(); ) {
+				Element pointElement = (Element) i.next();
+				LinkedHashMap<Integer,Object> singlePoint = new LinkedHashMap<Integer,Object>();
+				singlePoint.put(0, pointElement.getName());
+				singlePoint.put(1, Integer.valueOf(pointElement.attribute("val1").getText()).intValue());
+				singlePoint.put(2, Integer.valueOf(pointElement.attribute("val2").getText()).intValue());
+				singlePoint.put(3, Integer.valueOf(pointElement.attribute("val3").getText()).intValue());
+				singlePoint.put(4, Integer.valueOf(pointElement.attribute("val4").getText()).intValue());
+				pointMap.put(k, singlePoint);
+				log.debug("createListObjectPaintByNode"+singlePoint);
+				k++;
+			}
+			subMap.put(1, pointMap);
+
+			subMap.put(2, paintElement.element("fillstyle").getText());
+			subMap.put(3, Integer.valueOf(paintElement.element("linewidth").getText()).intValue());
+			subMap.put(4, Integer.valueOf(paintElement.element("strokestyle").getText()).intValue());
+			subMap.put(5, Integer.valueOf(paintElement.element("counter").getText()).intValue());
+			subMap.put(6, Float.valueOf(paintElement.element("x").getText()).floatValue());
+			subMap.put(7, Float.valueOf(paintElement.element("y").getText()).floatValue());
+			subMap.put(8, Float.valueOf(paintElement.element("width").getText()).floatValue());
+			subMap.put(9, Float.valueOf(paintElement.element("height").getText()).floatValue());
+			subMap.put(10, paintElement.element("layername").getText());		
+			
+		} catch (Exception err) {
+			log.error("createListObjectPaintByNode",err);
+		}
+	}
+	
+	/**
+	 * @deprecated
+	 * @param paintElement
+	 * @param subMap
+	 */
+	public void createListObjectLetterByNode(Element paintElement, LinkedHashMap<Integer,Object> subMap){
+		try {
+
+			subMap.put(1, paintElement.element("textforfield").getText());
+			subMap.put(2, Integer.valueOf(paintElement.element("fgcolor").getText()).intValue());
+			subMap.put(3, Integer.valueOf(paintElement.element("fontsize").getText()).intValue());
+			subMap.put(4, paintElement.element("fontstyle").getText());
+			subMap.put(5, Integer.valueOf(paintElement.element("counter").getText()).intValue());
+			subMap.put(6, Float.valueOf(paintElement.element("x").getText()).floatValue());
+			subMap.put(7, Float.valueOf(paintElement.element("y").getText()).floatValue());			
+			subMap.put(8, Float.valueOf(paintElement.element("width").getText()).floatValue());		
+			subMap.put(9, Float.valueOf(paintElement.element("height").getText()).floatValue());		
+			subMap.put(10, paintElement.element("layername").getText());
+			
+		} catch (Exception err) {
+			log.error("createListObjectLetterByNode",err);
+		}
+	}	
+	
+	/**
+	 * @deprecated
+	 * @param paintElement
+	 * @param subMap
+	 */
+	public void createListObjectImageByNode(Element paintElement, LinkedHashMap<Integer,Object> subMap){
+		try {
+
+			subMap.put(1, paintElement.element("urlname").getText());
+			subMap.put(2, paintElement.element("baseurl").getText());
+			subMap.put(3, paintElement.element("filename").getText());
+			subMap.put(4, paintElement.element("modulename").getText());
+			subMap.put(5, paintElement.element("parentpath").getText());
+			subMap.put(6, paintElement.element("room").getText());
+			subMap.put(7, paintElement.element("domain").getText());
+			subMap.put(8, Integer.valueOf(paintElement.element("counter").getText()).intValue());
+			subMap.put(9, Float.valueOf(paintElement.element("x").getText()).floatValue());
+			subMap.put(10, Float.valueOf(paintElement.element("y").getText()).floatValue());
+			subMap.put(11, Float.valueOf(paintElement.element("width").getText()).floatValue());
+			subMap.put(12, Float.valueOf(paintElement.element("height").getText()).floatValue());
+			subMap.put(13, paintElement.element("layername").getText());		
+			
+		} catch (Exception err) {
+			log.error("createListObjectImageByNode",err);
+		}
+	}	
+	
+	/**
+	 * @deprecated
+	 * @param paintElement
+	 * @param subMap
+	 */
+	public void createListObjectObjecByNode(Element paintElement, LinkedHashMap<Integer,Object> subMap){
+		try {	
+			
+			subMap.put(1, paintElement.element("fillstyle").getText());
+			subMap.put(2, paintElement.element("linewidth").getText());
+			subMap.put(3, Integer.valueOf(paintElement.element("strokestyle").getText()).intValue());
+			subMap.put(4, Float.valueOf(paintElement.element("startx").getText()).floatValue());
+			subMap.put(5, Float.valueOf(paintElement.element("starty").getText()).floatValue());
+			subMap.put(6, Float.valueOf(paintElement.element("endx").getText()).floatValue());
+			subMap.put(7, Float.valueOf(paintElement.element("endy").getText()).floatValue());
+			subMap.put(8, Integer.valueOf(paintElement.element("counter").getText()).intValue());
+			subMap.put(9, Float.valueOf(paintElement.element("x").getText()).floatValue());
+			subMap.put(10, Float.valueOf(paintElement.element("y").getText()).floatValue());
+			subMap.put(11, Float.valueOf(paintElement.element("width").getText()).floatValue());
+			subMap.put(12, Float.valueOf(paintElement.element("height").getText()).floatValue());
+			subMap.put(13, paintElement.element("layername").getText());
+			
+		} catch (Exception err) {
+			log.error("createListObjectObjecByNode",err);
+		}
+	}		
+	
+	/**
+	 * @deprecated
+	 * @param paintElement
+	 * @param subMap
+	 */
+	public void createListObjectRectAndEllipseByNode(Element paintElement, LinkedHashMap<Integer,Object> subMap){
+		try {	
+			
+			subMap.put(1, Integer.valueOf(paintElement.element("stroke").getText()).intValue());
+			subMap.put(2, paintElement.element("line").getText());
+			subMap.put(3, Integer.valueOf(paintElement.element("counter").getText()).intValue());
+			subMap.put(4, Float.valueOf(paintElement.element("x").getText()).floatValue());		
+			subMap.put(5, Float.valueOf(paintElement.element("y").getText()).floatValue());
+			subMap.put(6, Float.valueOf(paintElement.element("width").getText()).floatValue());
+			subMap.put(7, Float.valueOf(paintElement.element("height").getText()).floatValue());
+			subMap.put(8, paintElement.element("layername").getText());
+
+		} catch (Exception err) {
+			log.error("createListObjectObjecByNode",err);
+		}
+	}
+	
+	/**
+	 * @deprecated
+	 * @param paintElement
+	 * @param subMap
+	 */
+	public void createListObjectSWFByNode(Element paintElement, LinkedHashMap<Integer,Object> subMap){
+		try {
+
+			subMap.put(1, paintElement.element("urlname").getText());
+			subMap.put(2, paintElement.element("baseurl").getText());
+			subMap.put(3, paintElement.element("filename").getText());
+			subMap.put(4, paintElement.element("modulename").getText());
+			subMap.put(5, paintElement.element("parentpath").getText());
+			subMap.put(6, paintElement.element("room").getText());
+			subMap.put(7, paintElement.element("domain").getText());
+			subMap.put(8, Integer.valueOf(paintElement.element("slideNumber").getText()).intValue());
+			subMap.put(9, Float.valueOf(paintElement.element("innerx").getText()).floatValue());
+			subMap.put(10, Float.valueOf(paintElement.element("innery").getText()).floatValue());
+			subMap.put(11, Float.valueOf(paintElement.element("innerwidth").getText()).floatValue());
+			subMap.put(12, Float.valueOf(paintElement.element("innerheight").getText()).floatValue());
+			subMap.put(13, Integer.valueOf(paintElement.element("zoomlevel").getText()).intValue());
+			subMap.put(14, Float.valueOf(paintElement.element("initwidth").getText()).floatValue());
+			subMap.put(15, Float.valueOf(paintElement.element("initheight").getText()).floatValue());
+			subMap.put(16, Integer.valueOf(paintElement.element("currentzoom").getText()).intValue());
+			subMap.put(17, Integer.valueOf(paintElement.element("counter").getText()).intValue());
+			subMap.put(18, Float.valueOf(paintElement.element("x").getText()).floatValue());
+			subMap.put(19, Float.valueOf(paintElement.element("y").getText()).floatValue());
+			subMap.put(20, Float.valueOf(paintElement.element("width").getText()).floatValue());
+			subMap.put(21, Float.valueOf(paintElement.element("height").getText()).floatValue());
+			subMap.put(22, paintElement.element("layername").getText());		
+			
+		} catch (Exception err) {
+			log.error("createListObjectImageByNode",err);
+		}
+	}		
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/documents/LoadLibraryPresentation.java b/src/main/java/org/apache/openmeetings/documents/LoadLibraryPresentation.java
new file mode 100644
index 0000000..343417a
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/documents/LoadLibraryPresentation.java
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.documents;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.Iterator;
+
+import org.apache.openmeetings.db.dto.file.LibraryPresenationThumbs;
+import org.apache.openmeetings.db.dto.file.LibraryPresentation;
+import org.apache.openmeetings.db.dto.file.LibraryPresentationFile;
+import org.apache.openmeetings.db.dto.file.LibraryPresentationThumb;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class LoadLibraryPresentation {
+	private static final Logger log = Red5LoggerFactory.getLogger(LoadLibraryPresentation.class, OpenmeetingsVariables.webAppRootKey);
+	
+	public static LibraryPresentation parseLibraryFileToObject(File file){
+		try {
+			LibraryPresentation lPresentation = new LibraryPresentation();
+			
+	        SAXReader reader = new SAXReader();
+	        Document document = reader.read( new FileInputStream(file) );
+	        
+	        Element root = document.getRootElement();
+	        
+	        for ( @SuppressWarnings("unchecked")
+			Iterator<Element> i = root.elementIterator(); i.hasNext(); ) {
+	        	
+	            Element item = i.next();
+	            
+	            log.debug(item.getName());
+	            
+	            String nodeVal = item.getName();
+	            
+	            //LinkedHashMap<String,Object> subMap = new LinkedHashMap<String,Object>();
+	            
+	            //subMap.put("name", nodeVal);
+
+				if (nodeVal.equals("originalDocument")){
+					
+					lPresentation.setOriginalDocument(createListObjectLibraryByFileDocument(item));
+					
+				} else if (nodeVal.equals("pdfDocument")){
+					
+					lPresentation.setPdfDocument(createListObjectLibraryByFileDocument(item));
+					
+				} else if (nodeVal.equals("swfDocument")){
+					
+					lPresentation.setSwfDocument(createListObjectLibraryByFileDocument(item));
+					
+				} else if (nodeVal.equals("thumbs")) {
+					
+					lPresentation.setThumbs(createListObjectLibraryByFileDocumentThumbs(item));
+					
+				} else {
+					throw new Exception("Unkown Library type: "+nodeVal);
+				}
+	            
+	        }
+	        
+	        log.debug("Returning presentation file object");
+			
+			return lPresentation;
+		} catch (Exception err) {
+			log.error("parseLibraryFileToObject",err);
+			return null;
+		}
+	}
+	
+	public static LibraryPresentationFile createListObjectLibraryByFileDocument(Element fileElement){
+		try {
+			
+			log.info("createListObjectLibraryByFileDocument"+fileElement);
+			
+			LibraryPresentationFile libraryPresentationFile = new LibraryPresentationFile();
+			libraryPresentationFile.setName(fileElement.getName());
+			libraryPresentationFile.setFilename(fileElement.getText());
+			libraryPresentationFile.setLastmod(fileElement.attribute("lastmod").getText());
+			libraryPresentationFile.setSize(Long.valueOf(fileElement.attribute("size").getText()).longValue());
+			
+			return libraryPresentationFile;
+			
+		} catch (Exception err) {
+			log.error("createListObjectLibraryByFileDocument",err);
+		}
+		return null;
+	}		
+	
+	public static LibraryPresenationThumbs createListObjectLibraryByFileDocumentThumbs(Element fileElement){
+		try {
+			
+			LibraryPresenationThumbs thumbMap = new LibraryPresenationThumbs();
+			thumbMap.setName(fileElement.getName());
+			
+			Integer k = 0;
+			for ( @SuppressWarnings("unchecked")
+			Iterator<Element> i = fileElement.elementIterator(); i.hasNext(); i.next()) {
+				k++;
+			}
+			
+			thumbMap.setThumbs(new LibraryPresentationThumb[k]);
+			
+			
+			k = 0;
+			for ( @SuppressWarnings("unchecked")
+			Iterator<Element> i = fileElement.elementIterator(); i.hasNext(); ) {
+				Element thumbElement = i.next();
+				//log.info("createListObjectLibraryByFileDocumentThumbs"+thumbElement);
+				LibraryPresentationThumb singleThumb = new LibraryPresentationThumb();
+				singleThumb.setName(thumbElement.getName());
+				singleThumb.setFilename(thumbElement.getText());
+				singleThumb.setLastmod(thumbElement.attribute("lastmod").getText());
+				singleThumb.setSize(Long.valueOf(thumbElement.attribute("size").getText()).longValue());
+				thumbMap.getThumbs()[k] = singleThumb;
+				k++;
+			}
+			
+			
+			return thumbMap;
+			
+		} catch (Exception err) {
+			log.error("createListObjectLibraryByFileDocumentThumbs",err);
+		}
+		return null;
+	}	
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/documents/LoadLibraryPresentationToObject.java b/src/main/java/org/apache/openmeetings/documents/LoadLibraryPresentationToObject.java
new file mode 100644
index 0000000..179bb0a
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/documents/LoadLibraryPresentationToObject.java
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.documents;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+
+import org.apache.openmeetings.db.dto.file.FilesObject;
+import org.apache.openmeetings.db.dto.file.PresentationObject;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.dom4j.Document;
+import org.dom4j.Element;
+import org.dom4j.io.SAXReader;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class LoadLibraryPresentationToObject {
+	
+	private static final Logger log = Red5LoggerFactory.getLogger(LoadLibraryPresentationToObject.class, OpenmeetingsVariables.webAppRootKey);
+	
+	private static LoadLibraryPresentationToObject instance;
+
+	private LoadLibraryPresentationToObject() {}
+
+	public static synchronized LoadLibraryPresentationToObject getInstance() {
+		if (instance == null) {
+			instance = new LoadLibraryPresentationToObject();
+		}
+		return instance;
+	}	
+	
+	public PresentationObject parseLibraryFileToObject(String filePath){
+		try {
+			PresentationObject lMap = new PresentationObject();
+			
+	        SAXReader reader = new SAXReader();
+	        Document document = reader.read(filePath);
+	        
+	        Element root = document.getRootElement();
+	        Integer k = 0;
+	        
+	        for (@SuppressWarnings("unchecked")
+			Iterator<Element> i = root.elementIterator(); i.hasNext(); ) {
+	            Element item = i.next();
+	            log.error(item.getName());
+	            
+	            String nodeVal = item.getName();
+	            
+				if (nodeVal.equals("originalDocument")){
+					lMap.setOriginalDocument(this.createListObjectLibraryByFileDocument(item));
+				} else if (nodeVal.equals("pdfDocument")){
+					lMap.setPdfDocument(this.createListObjectLibraryByFileDocument(item));
+				} else if (nodeVal.equals("swfDocument")) {
+					lMap.setSwfDocument(this.createListObjectLibraryByFileDocument(item));
+				} else if (nodeVal.equals("thumbs")) {
+					lMap.setThumbs(this.createListObjectLibraryByFileDocumentThumbs(item));
+				}
+	            
+	            k++;
+
+	        }
+			
+			return lMap;
+		} catch (Exception err) {
+			log.error("parseLibraryFileToObject",err);
+			return null;
+		}
+	}
+	
+	public FilesObject createListObjectLibraryByFileDocument(Element fileElement){
+		try {
+			
+			log.info("createListObjectLibraryByFileDocument"+fileElement);
+			FilesObject fileObject = new FilesObject();
+			fileObject.setFileName(fileElement.getText());
+			fileObject.setLastModified(fileElement.attribute("lastmod").getText());
+			fileObject.setFileBytes(fileElement.attribute("size").getText());
+			return fileObject;
+		} catch (Exception err) {
+			log.error("createListObjectLibraryByFileDocument",err);
+		}
+		return null;
+	}		
+	
+	public LinkedList<FilesObject> createListObjectLibraryByFileDocumentThumbs(Element fileElement){
+		try {
+
+			LinkedList<FilesObject> thumbMap = new LinkedList<FilesObject>();
+			
+			for (@SuppressWarnings("unchecked")
+			Iterator<Element> i = fileElement.elementIterator(); i.hasNext(); ) {
+				Element thumbElement = i.next();
+				log.info("createListObjectLibraryByFileDocumentThumbs"+thumbElement);
+				FilesObject singleThumb = new FilesObject();
+				singleThumb.setFileName(thumbElement.getName());
+				singleThumb.setFileNamePure(thumbElement.getText());
+				singleThumb.setLastModified(thumbElement.attribute("lastmod").getText());
+				singleThumb.setFileBytes(thumbElement.attribute("size").getText());
+				thumbMap.add(singleThumb);
+			}
+			
+			return thumbMap;
+			
+		} catch (Exception err) {
+			log.error("createListObjectLibraryByFileDocumentThumbs",err);
+		}
+		return null;
+	}	
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/ldap/LdapLoginManagement.java b/src/main/java/org/apache/openmeetings/ldap/LdapLoginManagement.java
new file mode 100644
index 0000000..511bf0d
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/ldap/LdapLoginManagement.java
@@ -0,0 +1,461 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.ldap;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_GROUP_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.directory.api.ldap.model.cursor.CursorLdapReferralException;
+import org.apache.directory.api.ldap.model.cursor.EntryCursor;
+import org.apache.directory.api.ldap.model.entry.Attribute;
+import org.apache.directory.api.ldap.model.entry.Entry;
+import org.apache.directory.api.ldap.model.exception.LdapAuthenticationException;
+import org.apache.directory.api.ldap.model.exception.LdapException;
+import org.apache.directory.api.ldap.model.exception.LdapInvalidAttributeValueException;
+import org.apache.directory.api.ldap.model.exception.LdapInvalidDnException;
+import org.apache.directory.api.ldap.model.message.AliasDerefMode;
+import org.apache.directory.api.ldap.model.message.SearchRequestImpl;
+import org.apache.directory.api.ldap.model.message.SearchScope;
+import org.apache.directory.api.ldap.model.name.Dn;
+import org.apache.directory.api.ldap.model.name.Rdn;
+import org.apache.directory.ldap.client.api.EntryCursorImpl;
+import org.apache.directory.ldap.client.api.LdapConnection;
+import org.apache.directory.ldap.client.api.LdapNetworkConnection;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.server.LdapConfigDao;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.server.LdapConfig;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.util.OmException;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Management of optional LDAP Login
+ * 
+ * @author o.becherer
+ * 
+ */
+public class LdapLoginManagement {
+	private static final Logger log = Red5LoggerFactory.getLogger(LdapLoginManagement.class, webAppRootKey);
+	// Config constants
+	private static final String CONFIGKEY_LDAP_HOST = "ldap_conn_host";
+	private static final String CONFIGKEY_LDAP_PORT = "ldap_conn_port";
+	private static final String CONFIGKEY_LDAP_SECURE = "ldap_conn_secure";
+	private static final String CONFIGKEY_LDAP_ADMIN_DN = "ldap_admin_dn";
+	private static final String CONFIGKEY_LDAP_ADMIN_PASSWD = "ldap_passwd";
+	private static final String CONFIGKEY_LDAP_AUTH_TYPE = "ldap_auth_type";
+	private static final String CONFIGKEY_LDAP_PROV_TYPE = "ldap_provisionning";
+
+	private static final String CONFIGKEY_LDAP_SYNC_PASSWD_OM = "ldap_sync_password_to_om"; // 'true' or 'false'
+	private static final String CONFIGKEY_LDAP_USE_LOWER_CASE = "ldap_use_lower_case";
+	private static final String CONFIGKEY_LDAP_TIMEZONE_NAME = "ldap_user_timezone";
+	private static final String CONFIGKEY_LDAP_SEARCH_BASE = "ldap_search_base";
+	private static final String CONFIGKEY_LDAP_SEARCH_QUERY = "ldap_search_query";
+	private static final String CONFIGKEY_LDAP_SEARCH_SCOPE = "ldap_search_scope";
+	private static final String CONFIGKEY_LDAP_USERDN_FORMAT = "ldap_userdn_format";
+	private static final String CONFIGKEY_LDAP_USE_ADMIN_4ATTRS = "ldap_use_admin_to_get_attrs";
+	private static final String CONFIGKEY_LDAP_DEREF_MODE = "ldap_deref_mode";
+	private static final String CONFIGKEY_LDAP_GROUP_MODE = "ldap_group_mode";
+	private static final String CONFIGKEY_LDAP_GROUP_QUERY = "ldap_group_query";
+	
+	// LDAP custom attribute mapping keys
+	private static final String CONFIGKEY_LDAP_KEY_LASTNAME = "ldap_user_attr_lastname";
+	private static final String CONFIGKEY_LDAP_KEY_FIRSTNAME = "ldap_user_attr_firstname";
+	private static final String CONFIGKEY_LDAP_KEY_MAIL = "ldap_user_attr_mail";
+	private static final String CONFIGKEY_LDAP_KEY_STREET = "ldap_user_attr_street";
+	private static final String CONFIGKEY_LDAP_KEY_ADDITIONAL_NAME = "ldap_user_attr_additionalname";
+	private static final String CONFIGKEY_LDAP_KEY_FAX = "ldap_user_attr_fax";
+	private static final String CONFIGKEY_LDAP_KEY_ZIP = "ldap_user_attr_zip";
+	private static final String CONFIGKEY_LDAP_KEY_COUNTRY = "ldap_user_attr_country";
+	private static final String CONFIGKEY_LDAP_KEY_TOWN = "ldap_user_attr_town";
+	private static final String CONFIGKEY_LDAP_KEY_PHONE = "ldap_user_attr_phone";
+	private static final String CONFIGKEY_LDAP_KEY_PICTURE_URI = "ldap_user_picture_uri";
+	private static final String CONFIGKEY_LDAP_KEY_GROUP = "ldap_group_attr";
+
+	// LDAP default attributes mapping
+	private static final String LDAP_KEY_LASTNAME = "sn";
+	private static final String LDAP_KEY_FIRSTNAME = "givenName";
+	private static final String LDAP_KEY_MAIL = "mail";
+	private static final String LDAP_KEY_STREET = "streetAddress";
+	private static final String LDAP_KEY_ADDITIONAL_NAME = "description";
+	private static final String LDAP_KEY_FAX = "facsimileTelephoneNumber";
+	private static final String LDAP_KEY_ZIP = "postalCode";
+	private static final String LDAP_KEY_COUNTRY = "co";
+	private static final String LDAP_KEY_TOWN = "l";
+	private static final String LDAP_KEY_PHONE = "telephoneNumber";
+	private static final String LDAP_KEY_TIMEZONE = "timezone";
+	private static final String LDAP_KEY_PICTURE_URI = "pictureUri";
+	private static final String LDAP_KEY_GROUP = "memberOf";
+
+	public enum AuthType {
+		NONE
+		, SEARCHANDBIND
+		, SIMPLEBIND
+	}
+	
+	public enum Provisionning {
+		NONE
+		, AUTOUPDATE
+		, AUTOCREATE
+	}
+	
+	public enum GroupMode {
+		NONE
+		, ATTRIBUTE
+		, QUERY
+	}
+	
+	@Autowired
+	private ConfigurationDao cfgDao;
+	@Autowired
+	private StateDao stateDao;
+	@Autowired
+	private LdapConfigDao ldapConfigDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private OrganisationDao orgDao;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+
+	private Dn getUserDn(Properties config, String user) throws LdapInvalidDnException {
+		return new Dn(String.format(config.getProperty(CONFIGKEY_LDAP_USERDN_FORMAT, "%s"), user));
+	}
+	
+	private void bindAdmin(LdapConnection conn, String admin, String pass) throws LdapException {
+		if (!Strings.isEmpty(admin)) {
+			conn.bind(admin, pass);
+		} else {
+			conn.bind();
+		}
+	}
+	
+	private String getAttr(Properties config, Entry entry, String aliasCode, String defaultAlias) throws LdapInvalidAttributeValueException {
+		String alias = config.getProperty(aliasCode, "");
+		Attribute a = entry.get(Strings.isEmpty(alias) ? defaultAlias : alias);
+		return a == null ? null : a.getString();
+	}
+	/**
+	 * Ldap Login
+	 * 
+	 * Connection Data is retrieved from ConfigurationFile
+	 * 
+	 */
+	// ----------------------------------------------------------------------------------------
+	public User login(String login, String passwd, Long domainId) throws OmException {
+		log.debug("LdapLoginmanagement.doLdapLogin");
+		if (!userDao.validLogin(login)) {
+			log.error("Invalid login provided");
+			return null;
+		}
+
+		Properties config = new Properties();
+		Reader r = null;
+		try {
+			LdapConfig ldapConfig = ldapConfigDao.get(domainId);
+			r = new InputStreamReader(new FileInputStream(new File(OmFileHelper.getConfDir(), ldapConfig.getConfigFileName())), "UTF-8");
+			config.load(r);
+		} catch (Exception e) {
+			log.error("Error on LdapLogin : Configurationdata couldn't be retrieved!");
+			return null;
+		} finally {
+			if (r != null) {
+				try {
+					r.close();
+				} catch (IOException e) {
+					log.error("Error while closing ldap config file");
+					return null;
+				}
+			}
+		}
+		if (config.isEmpty()) {
+			log.error("Error on LdapLogin : Configurationdata couldnt be retrieved!");
+			return null;
+		}
+
+		String ldap_use_lower_case = config.getProperty(CONFIGKEY_LDAP_USE_LOWER_CASE, "false");
+		if ("true".equals(ldap_use_lower_case)) {
+			login = login.toLowerCase();
+		}
+
+		String ldap_auth_type = config.getProperty(CONFIGKEY_LDAP_AUTH_TYPE, "");
+		AuthType type = AuthType.SIMPLEBIND;
+		try {
+			type = AuthType.valueOf(ldap_auth_type);
+		} catch (Exception e) {
+			log.error(String.format("ConfigKey in Ldap Config contains invalid auth type : '%s' -> Defaulting to %s", ldap_auth_type, type));
+		}
+		
+		String ldap_prov_type = config.getProperty(CONFIGKEY_LDAP_PROV_TYPE, "");
+		Provisionning prov = Provisionning.AUTOCREATE;
+		try {
+			prov = Provisionning.valueOf(ldap_prov_type);
+		} catch (Exception e) {
+			log.error(String.format("ConfigKey in Ldap Config contains invalid provisionning type : '%s' -> Defaulting to %s", ldap_prov_type, prov));
+		}
+		
+		String ldap_deref_mode = config.getProperty(CONFIGKEY_LDAP_DEREF_MODE, "");
+		AliasDerefMode derefMode = AliasDerefMode.DEREF_ALWAYS;
+		try {
+			derefMode = AliasDerefMode.getDerefMode(ldap_deref_mode);
+		} catch (Exception e) {
+			log.error(String.format("ConfigKey in Ldap Config contains invalid deref mode : '%s' -> Defaulting to %s", ldap_deref_mode, derefMode));
+		}
+		
+		if (AuthType.NONE == type && Provisionning.NONE == prov) {
+			log.error("Both AuthType and Provisionning are NONE!");
+			return null;
+		}
+		boolean useAdminForAttrs = true;
+		try {
+			useAdminForAttrs = "true".equals(config.getProperty(CONFIGKEY_LDAP_USE_ADMIN_4ATTRS, ""));
+		} catch (Exception e) {
+			//no-op
+		}
+		GroupMode groupMode = GroupMode.NONE;
+		try {
+			groupMode = GroupMode.valueOf(config.getProperty(CONFIGKEY_LDAP_GROUP_MODE, "NONE"));
+		} catch (Exception e) {
+			//no-op
+		}
+		if (AuthType.NONE == type && !useAdminForAttrs) {
+			log.error("Unable to get Attributes, please change Auth type and/or Use Admin to get attributes");
+			return null;
+		}
+
+		// Connection URL
+		String ldap_host = config.getProperty(CONFIGKEY_LDAP_HOST);
+		int ldap_port = Integer.parseInt(config.getProperty(CONFIGKEY_LDAP_PORT, "389"));
+		boolean ldap_secure = "true".equals(config.getProperty(CONFIGKEY_LDAP_SECURE, "false"));
+
+		// Username for LDAP SERVER himself
+		String ldap_admin_dn = config.getProperty(CONFIGKEY_LDAP_ADMIN_DN);
+
+		// Password for LDAP SERVER himself
+		String ldap_admin_passwd = config.getProperty(CONFIGKEY_LDAP_ADMIN_PASSWD);
+
+		User u = null;
+		LdapConnection conn = null;
+		try {
+			boolean authenticated = true;
+			conn = new LdapNetworkConnection(ldap_host, ldap_port, ldap_secure);
+			Dn userDn = null;
+			Entry entry = null;
+			switch (type) {
+				case SEARCHANDBIND:
+				{
+					bindAdmin(conn, ldap_admin_dn, ldap_admin_passwd);
+					Dn baseDn = new Dn(config.getProperty(CONFIGKEY_LDAP_SEARCH_BASE, ""));
+					String searchQ = String.format(config.getProperty(CONFIGKEY_LDAP_SEARCH_QUERY, "%s"), login);
+					SearchScope scope = SearchScope.valueOf(config.getProperty(CONFIGKEY_LDAP_SEARCH_SCOPE, SearchScope.ONELEVEL.name()));
+			        
+					EntryCursor cursor = new EntryCursorImpl(conn.search(
+							new SearchRequestImpl()
+								.setBase(baseDn)
+								.setFilter(searchQ)
+								.setScope(scope)
+								.addAttributes("*")
+								.setDerefAliases(derefMode)));
+					while (cursor.next()) {
+						try {
+							Entry e = cursor.get();
+							if (userDn != null) {
+								log.error("more than 1 user found in LDAP");
+								throw new OmException(-1L);
+							}
+							userDn = e.getDn();
+							if (useAdminForAttrs) {
+								entry = e;
+							}
+						} catch (CursorLdapReferralException cle) {
+							log.warn("Referral LDAP entry found, ignore it");
+						}
+					}
+					cursor.close();
+					if (userDn == null) {
+						log.error("NONE users found in LDAP");
+						throw new OmException(-11L);
+					}
+					conn.bind(userDn, passwd);
+				}
+					break;
+				case SIMPLEBIND:
+				{
+					userDn = getUserDn(config, login);
+					conn.bind(userDn, passwd);
+				}
+					break;
+				case NONE:
+				default:
+					authenticated = false;
+					break;
+			}
+			u = authenticated ? userDao.getByLogin(login, Type.ldap, domainId) : userDao.login(login, passwd);
+			if (u == null && Provisionning.AUTOCREATE != prov) {
+				log.error("User not found in OM DB and Provisionning.AUTOCREATE was not set");
+				throw new OmException(-11L);
+			}
+			if (authenticated && entry == null) {
+				if (useAdminForAttrs) {
+					bindAdmin(conn, ldap_admin_dn, ldap_admin_passwd);
+				}
+				entry = conn.lookup(userDn);
+			}
+			switch (prov) {
+				case AUTOUPDATE:
+				case AUTOCREATE:
+					if (entry == null) {
+						log.error("LDAP entry is null, search or lookup by Dn failed");
+						throw new OmException(-11L);
+					}
+					if (u == null) {
+						u = userDao.getNewUserInstance(null);
+						u.setType(Type.ldap);
+						u.getRights().remove(Right.Login);
+						u.setDomainId(domainId);
+						u.getOrganisation_users().add(new Organisation_Users(orgDao.get(cfgDao.getConfValue(CONFIG_DEFAULT_GROUP_ID, Long.class, "-1"))));
+						u.setLogin(login);
+						u.setShowContactDataToContacts(true);
+					}
+					if ("true".equals(config.getProperty(CONFIGKEY_LDAP_SYNC_PASSWD_OM, ""))) {
+						u.updatePassword(cfgDao, passwd);
+					}
+					u.setLastname(getAttr(config, entry, CONFIGKEY_LDAP_KEY_LASTNAME, LDAP_KEY_LASTNAME));
+					u.setFirstname(getAttr(config, entry, CONFIGKEY_LDAP_KEY_FIRSTNAME, LDAP_KEY_FIRSTNAME));
+					u.getAdresses().setEmail(getAttr(config, entry, CONFIGKEY_LDAP_KEY_MAIL, LDAP_KEY_MAIL));
+					u.getAdresses().setStreet(getAttr(config, entry, CONFIGKEY_LDAP_KEY_STREET, LDAP_KEY_STREET));
+					u.getAdresses().setAdditionalname(getAttr(config, entry, CONFIGKEY_LDAP_KEY_ADDITIONAL_NAME, LDAP_KEY_ADDITIONAL_NAME));
+					u.getAdresses().setFax(getAttr(config, entry, CONFIGKEY_LDAP_KEY_FAX, LDAP_KEY_FAX));
+					u.getAdresses().setZip(getAttr(config, entry, CONFIGKEY_LDAP_KEY_ZIP, LDAP_KEY_ZIP));
+					u.getAdresses().setStates(stateDao.getStateByName(getAttr(config, entry, CONFIGKEY_LDAP_KEY_COUNTRY, LDAP_KEY_COUNTRY)));
+					u.getAdresses().setTown(getAttr(config, entry, CONFIGKEY_LDAP_KEY_TOWN, LDAP_KEY_TOWN));
+					u.getAdresses().setPhone(getAttr(config, entry, CONFIGKEY_LDAP_KEY_PHONE, LDAP_KEY_PHONE));
+					String tz = getAttr(config, entry, CONFIGKEY_LDAP_TIMEZONE_NAME, LDAP_KEY_TIMEZONE);
+					if (tz == null) {
+						tz = config.getProperty(CONFIGKEY_LDAP_TIMEZONE_NAME, null);
+					}
+					u.setTimeZoneId(timezoneUtil.getTimeZone(tz).getID());
+					String picture = getAttr(config, entry, CONFIGKEY_LDAP_KEY_PICTURE_URI, LDAP_KEY_PICTURE_URI);
+					if (picture == null) {
+						picture = config.getProperty(CONFIGKEY_LDAP_KEY_PICTURE_URI, null);
+					}
+					u.setPictureuri(picture);
+					
+					u = userDao.update(u, null);
+					
+					List<Dn> groups = new ArrayList<>();
+					if (GroupMode.ATTRIBUTE == groupMode) {
+						Attribute a = entry.get(config.getProperty(CONFIGKEY_LDAP_KEY_GROUP, LDAP_KEY_GROUP));
+						String attr = a == null ? "" : a.getString();
+						for (String g : attr.split("|")) {
+							groups.add(new Dn(g));
+						}
+					} else if (GroupMode.QUERY == groupMode) {
+						Dn baseDn = new Dn(config.getProperty(CONFIGKEY_LDAP_SEARCH_BASE, ""));
+						String searchQ = String.format(config.getProperty(CONFIGKEY_LDAP_GROUP_QUERY, "%s"), login);
+				        
+						EntryCursor cursor = new EntryCursorImpl(conn.search(
+								new SearchRequestImpl()
+									.setBase(baseDn)
+									.setFilter(searchQ)
+									.setScope(SearchScope.SUBTREE)
+									.addAttributes("*")
+									.setDerefAliases(AliasDerefMode.DEREF_ALWAYS)));
+						while (cursor.next()) {
+							try {
+								Entry e = cursor.get();
+								groups.add(e.getDn());
+							} catch (CursorLdapReferralException cle) {
+								log.warn("Referral LDAP entry found, ignore it");
+							}
+						}
+						cursor.close();
+					}
+					for (Dn g : groups) {
+						Rdn namer = g.getRdn();
+						String name = namer.getValue().toString();
+						if (!Strings.isEmpty(name)) {
+							Organisation o = orgDao.get(name);
+							boolean found = false;
+							if (o == null) {
+								o = new Organisation();
+								o.setName(name);
+								o = orgDao.update(o, u.getUser_id());
+							} else {
+								for (Organisation_Users ou : u.getOrganisation_users()) {
+									if (ou.getOrganisation().getName().equals(name)) {
+										found = true;
+										break;
+									}
+								}
+							}
+							if (!found) {
+								u.getOrganisation_users().add(new Organisation_Users(o));
+								userDao.update(u, u.getUser_id());
+								log.debug("Going to add user to group:: " + name);
+							}
+						}
+					}
+					break;
+				case NONE:
+				default:
+					break;
+			}
+		} catch (LdapAuthenticationException ae) {
+			log.error("Not authenticated.", ae);
+			throw new OmException(-11L);
+		} catch (OmException e) {
+			throw e;
+		} catch (Exception e) {
+			log.error("Unexpected exception.", e);
+			throw new OmException(e);
+		} finally {
+			if (conn != null) {
+				try {
+					conn.unBind();
+					conn.close();
+				} catch (Exception e) {
+					log.error("Unexpected exception.", e);
+					throw new OmException(e);
+				}
+			}
+		}
+		return u;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/mail/MailHandler.java b/src/main/java/org/apache/openmeetings/mail/MailHandler.java
new file mode 100644
index 0000000..ffeda85
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/mail/MailHandler.java
@@ -0,0 +1,267 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.mail;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
+
+import javax.activation.DataHandler;
+import javax.mail.BodyPart;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Multipart;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+import javax.mail.util.ByteArrayDataSource;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.basic.MailMessageDao;
+import org.apache.openmeetings.db.entity.basic.MailMessage;
+import org.apache.openmeetings.db.entity.basic.MailMessage.Status;
+import org.apache.openmeetings.util.mail.MailUtil;
+import org.apache.openmeetings.util.mail.SmtpAuthenticator;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.task.TaskExecutor;
+
+import com.sun.mail.util.MailSSLSocketFactory;
+
+/**
+ * 
+ * @author swagner
+ * 
+ * For a documentation about Javax mail please see fro example:
+ * http://connector.sourceforge.net/doc-files/Properties.html
+ * 
+ */
+public class MailHandler {
+	private static final Logger log = Red5LoggerFactory.getLogger(MailHandler.class, webAppRootKey);
+	private static final int MAIL_SEND_TIMEOUT = 60 * 60 * 1000; // 1 hour
+	private static final int MAXIMUM_ERROR_COUNT = 5;
+	
+	@Autowired
+	private ConfigurationDao cfgDao;
+	@Autowired
+	private TaskExecutor taskExecutor;
+	@Autowired
+	private MailMessageDao mailMessageDao;
+	private String smtpServer;
+	private String smtpPort;
+	private String from;
+	private String mailAuthUser;
+	private String mailAuthPass;
+	private boolean mailTls;
+	private boolean mailAddReplyTo;
+	private int smtpConnectionTimeOut;
+	private int smtpTimeOut;
+
+	private void init() {
+		smtpServer = cfgDao.getConfValue("smtp_server", String.class, null);
+		smtpPort = cfgDao.getConfValue("smtp_port", String.class, "25");
+		from = cfgDao.getConfValue("system_email_addr", String.class, null);
+		mailAuthUser = cfgDao.getConfValue("email_username", String.class, null);
+		mailAuthPass = cfgDao.getConfValue("email_userpass", String.class, null);
+		mailTls = "1".equals(cfgDao.getConfValue("mail.smtp.starttls.enable", String.class, "0"));
+		mailAddReplyTo = "1".equals(cfgDao.getConfValue("inviter.email.as.replyto", String.class, "1"));
+		smtpConnectionTimeOut = cfgDao.getConfValue("mail.smtp.connection.timeout", Integer.class, "30000");
+		smtpTimeOut = cfgDao.getConfValue("mail.smtp.timeout", Integer.class, "30000");
+	}
+	
+	protected MimeMessage appendIcsBody(MimeMessage msg, MailMessage m) throws Exception {
+		log.debug("setMessageBody for iCal message");
+		// -- Create a new message --
+		Multipart multipart = new MimeMultipart();
+
+		Multipart multiBody = new MimeMultipart("alternative");
+		BodyPart html = new MimeBodyPart();
+		html.setDataHandler(new DataHandler(new ByteArrayDataSource(m.getBody(), "text/html; charset=UTF-8")));
+		multiBody.addBodyPart(html);
+
+		BodyPart iCalContent = new MimeBodyPart();
+		iCalContent.addHeader("content-class", "urn:content-classes:calendarmessage");
+		iCalContent.setDataHandler(new DataHandler(new ByteArrayDataSource(new ByteArrayInputStream(m.getIcs()),
+				"text/calendar; charset=UTF-8; method=REQUEST")));
+		multiBody.addBodyPart(iCalContent);
+		BodyPart body = new MimeBodyPart();
+		body.setContent(multiBody);
+		multipart.addBodyPart(body);
+		
+		BodyPart iCalAttachment = new MimeBodyPart();
+		iCalAttachment.setDataHandler(new DataHandler(new ByteArrayDataSource(new ByteArrayInputStream(m.getIcs()),
+				"application/ics")));
+		iCalAttachment.removeHeader("Content-Transfer-Encoding");
+		iCalAttachment.addHeader("Content-Transfer-Encoding", "base64");
+		iCalAttachment.removeHeader("Content-Type");
+		iCalAttachment.addHeader("Content-Type", "application/ics");
+		iCalAttachment.setFileName("invite.ics");
+		multipart.addBodyPart(iCalAttachment);
+
+		msg.setContent(multipart);
+		return msg;
+	}
+	
+	private MimeMessage appendBody(MimeMessage msg, MailMessage m) throws MessagingException, IOException {
+		// -- Set the subject and body text --
+		msg.setDataHandler(new DataHandler(new ByteArrayDataSource(m.getBody(), "text/html; charset=\"utf-8\"")));
+
+		// -- Set some other header information --
+		msg.setHeader("X-Mailer", "XML-Mail");
+		msg.setSentDate(new Date());
+		
+		return msg;
+	}
+	
+	private MimeMessage getBasicMimeMessage() throws Exception {
+		log.debug("getBasicMimeMessage");
+		if (smtpServer == null) {
+			init();
+		}
+		Properties props = new Properties(System.getProperties());
+
+		props.put("mail.smtp.host", smtpServer);
+		props.put("mail.smtp.port", smtpPort);
+		
+		props.put("mail.smtp.connectiontimeout", smtpConnectionTimeOut); 
+		props.put("mail.smtp.timeout", smtpTimeOut);
+
+		if (mailTls) {
+			props.put("mail.smtp.starttls.enable", "true");
+			MailSSLSocketFactory sf = new MailSSLSocketFactory();
+		    sf.setTrustAllHosts(true);
+		    props.put("mail.smtp.ssl.socketFactory", sf);
+		}
+
+		// Check for Authentication
+		Session session = null;
+		if (mailAuthUser != null && mailAuthUser.length() > 0
+				&& mailAuthPass != null && mailAuthPass.length() > 0) {
+			// use SMTP Authentication
+			props.put("mail.smtp.auth", "true");
+			session = Session.getInstance(props, new SmtpAuthenticator(mailAuthUser, mailAuthPass));
+		} else {
+			// not use SMTP Authentication
+			session = Session.getInstance(props, null);
+		}
+
+		// Building MimeMessage
+		MimeMessage msg = new MimeMessage(session);
+		msg.setFrom(new InternetAddress(from));
+		return msg;
+	}
+	
+	private MimeMessage getMimeMessage(MailMessage m) throws Exception {
+		log.debug("getMimeMessage");
+		// Building MimeMessage
+		MimeMessage msg = getBasicMimeMessage();
+		msg.setSubject(m.getSubject(), "UTF-8");
+		String replyTo = m.getReplyTo();
+		if (replyTo != null && mailAddReplyTo) {
+			log.debug("setReplyTo " + replyTo);
+			if (MailUtil.matches(replyTo)) {
+				msg.setReplyTo(new InternetAddress[]{new InternetAddress(replyTo)});
+			}
+		}
+		msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(m.getRecipients(), false));
+		
+		return m.getIcs() == null ? appendBody(msg, m) : appendIcsBody(msg, m);
+	}
+	
+	public void send(String toEmail, String subj, String message) {
+		send(toEmail, null, subj, message);
+	}
+	
+	public void send(String toEmail, String replyTo, String subj, String message) {
+		send(new MailMessage(toEmail, replyTo, subj, message));
+	}
+	
+	public void send(MailMessage m) {
+		send(m, false);
+	}
+	
+	public void send(final MailMessage m, boolean send) {
+		if (send) {
+			if (m.getId() != null) {
+				m.setStatus(Status.SENDING);
+				mailMessageDao.update(m, null);
+			}
+			taskExecutor.execute(new Runnable() {
+				public void run() {
+					log.debug("Message sending in progress");
+					log.debug("  To: " + m.getRecipients());
+					log.debug("  Subject: " + m.getSubject());
+
+					// -- Send the message --
+					try {
+						Transport.send(getMimeMessage(m));
+						m.setLastError("");
+						m.setStatus(Status.DONE);
+					} catch (Exception e) {
+						log.error("Error while sending message", e);
+						m.setErrorCount(m.getErrorCount() + 1);
+						StringWriter sw = new StringWriter();
+						PrintWriter pw = new PrintWriter(sw);
+						e.printStackTrace(pw);
+						pw.close();
+						m.setLastError(sw.getBuffer().toString());
+						m.setStatus(m.getErrorCount() < MAXIMUM_ERROR_COUNT ? Status.NONE : Status.ERROR);
+					}
+					if (m.getId() != null) {
+						mailMessageDao.update(m, null);
+					}
+				}
+			});
+		} else {
+			m.setStatus(Status.NONE);
+			mailMessageDao.update(m, null);
+		}
+	}
+	
+	public void resetSendingStatus() {
+		log.debug("resetSendingStatus enter ...");
+		Calendar c = Calendar.getInstance();
+		c.add(Calendar.MILLISECOND, -MAIL_SEND_TIMEOUT);
+		mailMessageDao.resetSendingStatus(c);
+		log.debug("... resetSendingStatus done.");
+	}
+	
+	public void sendMails() throws Exception {
+		init();
+		log.debug("sendMails enter ...");
+		List<MailMessage> list = mailMessageDao.get(0, 1);
+		log.debug("Number of emails in init queue " + list.size());
+		while (!list.isEmpty()) {
+			send(list.get(0), true);
+			list = mailMessageDao.get(0, 1);
+		}
+		log.debug("... sendMails done.");
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/mail/SMSHandler.java b/src/main/java/org/apache/openmeetings/mail/SMSHandler.java
new file mode 100644
index 0000000..f78bfca
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/mail/SMSHandler.java
@@ -0,0 +1,117 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.mail;

+

+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;

+import org.apache.openmeetings.util.OpenmeetingsVariables;

+import org.red5.logging.Red5LoggerFactory;

+import org.slf4j.Logger;

+import org.smslib.Message.MessageEncodings;

+import org.smslib.OutboundMessage;

+import org.smslib.Service;

+import org.smslib.http.BulkSmsHTTPGateway;

+import org.springframework.beans.factory.annotation.Autowired;

+import org.springframework.core.task.TaskExecutor;

+

+/**

+ * 

+ * @author iarkh

+ * 

+ */

+

+public class SMSHandler {

+

+	private static final Logger log = Red5LoggerFactory.getLogger(

+			SMSHandler.class, OpenmeetingsVariables.webAppRootKey);

+

+	@Autowired

+	protected ConfigurationDao configurationDao;

+	@Autowired

+	protected TaskExecutor taskExecutor;

+

+	private BulkSmsHTTPGateway gateway = null;

+	

+	private boolean checkBalance() throws Exception {

+		if (gateway == null) {

+			String smsProvider = configurationDao.getConfValue("sms.provider", String.class, null);

+			String smsUsername = configurationDao.getConfValue("sms.username", String.class, null);

+			String smsUserpass = configurationDao.getConfValue("sms.userpass", String.class, null);

+

+			if (smsProvider == null || smsProvider.length() == 0 ||

+					smsUsername == null || smsUsername.length() == 0) {

+				log.error("SMS Provider is not configured properly!");

+				return false;

+			}

+			gateway = new BulkSmsHTTPGateway(smsProvider, smsUsername, smsUserpass);

+			gateway.setOutbound(true);

+			Service.getInstance().addGateway(gateway);

+			Service.getInstance().startService();

+		}

+		return gateway.queryBalance() >= 1; 

+	}

+	

+	public boolean sendSMS(String phone, String subj, long language_id) {

+		try {

+			taskExecutor.execute(new SMSSenderTask(phone, subj, language_id));

+			return true;

+		} catch (Exception ex) {

+			log.error("sendSMS", ex);

+			return false;

+		}

+	}

+	

+	protected class SMSSenderTask implements Runnable {

+		private final String phone;

+		private final String subject;

+		private long language_id;

+

+		public SMSSenderTask(String phone, String subject, long language_id) {

+			this.phone = phone;

+			this.subject = subject;

+			this.language_id = language_id;

+		}

+

+		public void run() {

+			this.send();

+		}

+

+		/**

+		 * Sending an SMS with the given values.

+		 * @return <code>true</code> if sms was sent successfully, <code>false</code> otherwise.

+		 */

+		public boolean send() {

+			try {

+				log.debug("SMS sending to: " + phone + ", subject is: " + subject);

+				if (checkBalance()) {

+					OutboundMessage msg = new OutboundMessage(phone, subject);

+					if (language_id != 1) {

+						msg.setEncoding(MessageEncodings.ENCUCS2);

+					}

+					return Service.getInstance().sendMessage(msg);

+				} else {

+					log.error("Error: insufficient funds on SMS provider account!");

+					return false; 

+				}

+			} catch (Exception ex) {

+				log.error("Error sending sms: ", ex);

+				return false;

+			} 

+		}

+	}

+}

diff --git a/src/main/java/org/apache/openmeetings/quartz/scheduler/MeetingReminderJob.java b/src/main/java/org/apache/openmeetings/quartz/scheduler/MeetingReminderJob.java
new file mode 100644
index 0000000..e62067a
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/quartz/scheduler/MeetingReminderJob.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.quartz.scheduler;
+
+
+import org.apache.openmeetings.data.calendar.management.AppointmentLogic;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class MeetingReminderJob {
+	private static Logger log = Red5LoggerFactory.getLogger(MeetingReminderJob.class, OpenmeetingsVariables.webAppRootKey);
+	@Autowired
+	private AppointmentLogic appointmentLogic;
+	
+	public void doIt() {
+		log.debug("MeetingReminderJob.execute");
+		try {
+			appointmentLogic.doScheduledMeetingReminder();
+		} catch (Exception err){
+			log.error("execute",err);
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/quartz/scheduler/SessionClearJob.java b/src/main/java/org/apache/openmeetings/quartz/scheduler/SessionClearJob.java
new file mode 100644
index 0000000..c1abc2b
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/quartz/scheduler/SessionClearJob.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.quartz.scheduler;
+
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+ 
+public class SessionClearJob {
+	private static Logger log = Red5LoggerFactory.getLogger(SessionClearJob.class, OpenmeetingsVariables.webAppRootKey);
+	@Autowired
+	private SessiondataDao sessiondataDao;
+
+	public void doIt() {
+		log.trace("SessionClearJob.execute");
+		try {
+			// TODO Generate report
+			sessiondataDao.clearSessionTable();
+		} catch (Exception err){
+			log.error("execute",err);
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/quartz/scheduler/TestSetupCleanupJob.java b/src/main/java/org/apache/openmeetings/quartz/scheduler/TestSetupCleanupJob.java
new file mode 100644
index 0000000..7e4d154
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/quartz/scheduler/TestSetupCleanupJob.java
@@ -0,0 +1,60 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.quartz.scheduler;

+

+import java.io.File;

+import java.io.FileFilter;

+

+import org.apache.openmeetings.util.OmFileHelper;

+import org.apache.openmeetings.util.OpenmeetingsVariables;

+import org.red5.logging.Red5LoggerFactory;

+import org.slf4j.Logger;

+

+public class TestSetupCleanupJob {

+	private static Logger log = Red5LoggerFactory.getLogger(TestSetupCleanupJob.class, OpenmeetingsVariables.webAppRootKey);

+	private long expirationInterval = 60 * 60 * 1000; // 1 hour

+

+	public void doIt() {

+		log.debug("TestSetupClearJob.execute");

+		try {

+			//FIXME need to move all these staff to helper

+			File[] folders = OmFileHelper.getStreamsDir().listFiles();

+			if (folders != null) {

+				for (File folder : folders) {

+					if (folder.isDirectory()) {

+						//TODO need to rework this and remove hardcodings

+						for (File file : folder.listFiles(new FileFilter() {

+							public boolean accept(File file) {

+								return file.getName().startsWith("TEST_SETUP_");

+							}

+						}))

+						{

+							if (file.isFile() && file.lastModified() + expirationInterval < System.currentTimeMillis()) {

+								log.debug("expired TEST SETUP found: " + file.getCanonicalPath());

+								file.delete();

+							}

+						}

+					}

+				}

+			}

+		} catch (Exception e) {

+			log.error("Unexpected exception while processing tests setup videous.", e);

+		}

+	}

+}

diff --git a/src/main/java/org/apache/openmeetings/remote/ChatService.java b/src/main/java/org/apache/openmeetings/remote/ChatService.java
new file mode 100644
index 0000000..febfe30
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/ChatService.java
@@ -0,0 +1,372 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.openmeetings.data.whiteboard.EmoticonsManager;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.remote.util.SessionVariablesUtil;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.stringhandlers.ChatString;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.IClient;
+import org.red5.server.api.IConnection;
+import org.red5.server.api.Red5;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.red5.server.api.service.IServiceCapableConnection;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * @author sebawagner
+ *
+ */
+public class ChatService implements IPendingServiceCallback {
+	private static final Logger log = Red5LoggerFactory.getLogger(ChatService.class, OpenmeetingsVariables.webAppRootKey);
+	
+	@Autowired
+	private ScopeApplicationAdapter scopeApplicationAdapter;
+	@Autowired
+	private ISessionManager sessionManager = null;
+	@Autowired
+	private EmoticonsManager emoticonsManager;
+	@Autowired
+	private RoomDao roomDao;
+	
+	//number of items in the chat room history
+	private static final int chatRoomHistory = 50;
+	
+	private static LinkedHashMap<Long,List<HashMap<String,Object>>> myChats = new LinkedHashMap<Long,List<HashMap<String,Object>>>();
+	
+	private String parseDateAsTimeString() {
+		Calendar cal=Calendar.getInstance();
+		
+		int h = cal.get(Calendar.HOUR_OF_DAY);
+		int m = cal.get(Calendar.MINUTE);
+
+		String str_h,str_m;
+		if (h<10) 
+			str_h = "0"+Integer.toString(h);
+		else
+			str_h = Integer.toString(h);
+
+		if (m<10) 
+			str_m = "0"+Integer.toString(m);
+		else
+			str_m = Integer.toString(m);
+		
+		return str_h+':'+str_m;
+	}
+
+	public void sendChatMessage(String message) {
+		IConnection current = Red5.getConnectionLocal();
+		Client client = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+		List<String> msg = new ArrayList<String>();
+		msg.add("chat"); //'privatechat'
+		msg.add(""); //date-time
+		msg.add("newtextmessage");
+		msg.add(client.getUsername());
+		msg.add(message);
+		msg.add(client.getUsercolor());
+		msg.add(client.getPublicSID()); //om[6] = parent.parent.isPrivate ? parent.parent.parent.refObj.publicSID : canvas.publicSID;
+		msg.add("false");// canvas.isrtl;
+		msg.add("" + client.getUser_id());
+		Room room = roomDao.get(client.getRoom_id());
+		msg.add("" + (room.getChatModerated() && !(client.getIsMod() || client.getIsSuperModerator())));
+		sendMessageWithClient(msg);
+	}
+	
+	/**
+	 * sends a Chat-Message
+	 * to all members of the Chatroom
+	 * and all additional users (waitng for a free entry for example)
+	 * 
+	 * @param newMessage
+	 * @return - 1 in case of success, -1 otherwise
+	 */
+	@SuppressWarnings("unchecked")
+	public int sendMessageWithClient(Object newMessage) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			Long room_id = currentClient.getRoom_id();			
+			log.debug("room_id: " + room_id);
+			
+			if (room_id == null) {
+				return 1; //TODO weird
+			}
+			Room room = roomDao.get(room_id);
+			@SuppressWarnings("rawtypes")
+			ArrayList messageMap = (ArrayList) newMessage;
+			// adding delimiter space, cause otherwise an emoticon in the last
+			// string would not be found
+			String messageText = messageMap.get(4) + " ";
+			LinkedList<String[]> parsedStringObjects = ChatString.parseChatString(messageText, emoticonsManager.getEmotfilesList(), room.getAllowFontStyles());
+			// log.error("parsedStringObjects"+parsedStringObjects.size());
+			log.debug("size:" + messageMap.size());
+			messageMap.add(parsedStringObjects);
+			newMessage = messageMap;			
+
+			boolean needModeration = Boolean.valueOf("" + messageMap.get(9));
+			List<HashMap<String, Object>> myChatList = myChats.get(room_id);
+			if (myChatList == null) myChatList = new LinkedList<HashMap<String, Object>>();
+			
+			HashMap<String, Object> hsm = new HashMap<String, Object>();
+			hsm.put("message", newMessage);
+			String publicSID = "" + messageMap.get(6);
+			if (!publicSID.equals(currentClient.getPublicSID())) {
+				hsm.put("client", sessionManager.getClientByPublicSID("" + messageMap.get(6), false, null));
+				//need to remove unconfirmed chat message if any
+				for (int i = myChatList.size() - 1; i > -1; --i) {
+					Client msgClient = (Client)myChatList.get(i).get("client");
+					@SuppressWarnings("rawtypes")
+					List msgList = (List)myChatList.get(i).get("message");
+					if (publicSID.equals(msgClient.getPublicSID())
+						&& ("" + msgList.get(4)).equals(messageMap.get(4))
+						&& ("" + msgList.get(1)).equals(messageMap.get(1))
+						&& Boolean.valueOf("" + msgList.get(9))) {
+						myChatList.remove(i);
+						break;
+					}
+				}
+				
+			} else {
+				// add server time
+				messageMap.set(1, parseDateAsTimeString());
+				hsm.put("client", currentClient);
+			}
+
+			if (myChatList.size() == chatRoomHistory) myChatList.remove(0);
+			myChatList.add(hsm);
+			myChats.put(room_id, myChatList);
+			log.debug("SET CHATROOM: " + room_id);
+
+			//broadcast to everybody in the room/domain
+			for (IConnection conn : current.getScope().getClientConnections()) {
+				if (conn != null) {
+					if (conn instanceof IServiceCapableConnection) {
+						
+						Client rcl = this.sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+						
+						if (rcl == null) {
+							continue;
+						}
+						if (rcl.getIsAVClient()) {
+							continue;
+						}
+						if (rcl.getIsScreenClient()) {
+    						continue;
+    					}
+						if (needModeration && Boolean.TRUE != rcl.getIsMod() && Boolean.TRUE != rcl.getIsSuperModerator()) {
+							continue;
+						}
+						((IServiceCapableConnection) conn).invoke("sendVarsToMessageWithClient",new Object[] { hsm }, this);
+    			 	}
+    			}
+			}
+		} catch (Exception err) {
+			log.error("[ChatService sendMessageWithClient] ",err);
+			return -1;
+		}
+		return 1;
+	}
+
+	//FIXME copy/past need to be removed
+	@SuppressWarnings("unchecked")
+	public int sendMessageWithClientByPublicSID(Object newMessage, String publicSID) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = this.sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			Long room_id = currentClient.getRoom_id();
+			Room room = roomDao.get(room_id);
+			log.debug("room_id: " + room_id);
+
+			@SuppressWarnings("rawtypes")
+			ArrayList messageMap = (ArrayList) newMessage;
+			// adding delimiter space, cause otherwise an emoticon in the last
+			// string would not be found
+			String messageText = messageMap.get(4).toString() + " ";
+			// add server time
+			messageMap.set(1, parseDateAsTimeString());
+			LinkedList<String[]> parsedStringObjects = ChatString.parseChatString(messageText, emoticonsManager.getEmotfilesList(), room.getAllowFontStyles());
+			// log.error("parsedStringObjects"+parsedStringObjects.size());
+			log.debug("size:" + messageMap.size());
+			messageMap.add(parsedStringObjects);
+			newMessage = messageMap;
+
+			HashMap<String, Object> hsm = new HashMap<String, Object>();
+			hsm.put("client", currentClient);
+			hsm.put("message", newMessage);
+
+			// broadcast to everybody in the room/domain
+			for (IConnection conn : current.getScope().getClientConnections()) {
+				if (conn != null) {
+					if (conn instanceof IServiceCapableConnection) {
+						IClient client = conn.getClient();
+						if (SessionVariablesUtil.isScreenClient(client)) {
+							// screen sharing clients do not receive events
+							continue;
+						} else if (SessionVariablesUtil.isAVClient(client)) {
+							// AVClients or potential AVClients do not receive events
+							continue;
+						}
+
+						if (SessionVariablesUtil.getPublicSID(client).equals(publicSID)
+								|| SessionVariablesUtil.getPublicSID(client).equals(
+										currentClient.getPublicSID())) {
+							((IServiceCapableConnection) conn).invoke(
+								"sendVarsToMessageWithClient",
+									new Object[] { hsm }, this);
+						}
+					}
+				}
+			}
+		} catch (Exception err) {
+			log.error("[ChatService sendMessageWithClient] ", err);
+			return -1;
+		}
+		return 1;
+	}
+
+	public List<HashMap<String,Object>> clearChat() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = this.sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			Long room_id = currentClient.getRoom_id();
+			
+			Long chatroom = room_id;
+			log.debug("### GET CHATROOM: "+chatroom);
+			
+			List<HashMap<String,Object>> myChatList = myChats.get(chatroom);
+			myChatList = new LinkedList<HashMap<String,Object>>();
+			
+			myChats.put(chatroom,myChatList);
+			
+			HashMap<String,Object> hsm = new HashMap<String,Object>();
+			
+			scopeApplicationAdapter.sendMessageToCurrentScope("clearChatContent", hsm, true);
+			
+			return myChatList;
+			
+		} catch (Exception err) {
+			log.error("[clearChat] ",err);
+			return null;
+		}
+	}
+	
+	public List<HashMap<String,Object>> getRoomChatHistory() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = this.sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			Long room_id = currentClient.getRoom_id();
+			
+			log.debug("GET CHATROOM: " + room_id);
+			
+			List<HashMap<String,Object>> myChatList = myChats.get(room_id);
+			if (myChatList==null) myChatList = new LinkedList<HashMap<String,Object>>();
+			
+			if (Boolean.TRUE != currentClient.getIsMod() && Boolean.TRUE != currentClient.getIsSuperModerator()) {
+				//current user is not moderator, chat history need to be filtered
+				List<HashMap<String,Object>> tmpChatList = new LinkedList<HashMap<String,Object>>(myChatList);
+				for (int i = tmpChatList.size() - 1; i > -1; --i) {
+					@SuppressWarnings("rawtypes")
+					List msgList = (List)tmpChatList.get(i).get("message");
+					if (Boolean.valueOf("" + msgList.get(9))) { //needModeration
+						tmpChatList.remove(i);
+					}
+				}
+				myChatList = tmpChatList;
+			}
+			
+			return myChatList;
+		} catch (Exception err) {
+			log.error("[getRoomChatHistory] ",err);
+			return null;
+		}
+	}
+	
+	/**
+	 * gets the chat history by string for non-conference-clients
+	 * 
+	 * @param room_id
+	 * @return - chat history of the room given, null in case of exception
+	 */
+	public List<HashMap<String,Object>> getRoomChatHistoryByString(Long room_id) {
+		try {
+			
+			Long chatroom = room_id;
+			log.debug("GET CHATROOM: "+chatroom);
+			
+			List<HashMap<String,Object>> myChatList = myChats.get(chatroom);
+			if (myChatList==null) myChatList = new LinkedList<HashMap<String,Object>>();	
+			
+			return myChatList;
+		} catch (Exception err) {
+			log.error("[getRoomChatHistory] ",err);
+			return null;
+		}
+	}	
+	
+	public void resultReceived(IPendingServiceCall arg0) {
+		// TODO Auto-generated method stub
+		log.error("resultReceived ChatService "+arg0);
+	}
+	
+	public LinkedList<LinkedList<String>> getAllPublicEmoticons(){
+		try {
+			LinkedList<LinkedList<String>> publicemotes = new LinkedList<LinkedList<String>>();
+			LinkedList<LinkedList<String>> allEmotes = emoticonsManager.getEmotfilesList();
+			for (Iterator<LinkedList<String>> iter = allEmotes.iterator();iter.hasNext();){
+				LinkedList<String> emot = iter.next();
+				LinkedList<String> emotPub = new LinkedList<String>();
+				if (emot.get((emot.size()-1)).equals("y")){
+					emotPub.add(emot.get(0));
+					emotPub.add(emot.get(1).replace("\\", ""));
+					if (emot.size()>4) {
+						emotPub.add(emot.get(2).replace("\\", ""));
+						emotPub.add(emot.get(3));
+						emotPub.add(emot.get(4));
+					} else {
+						emotPub.add(emot.get(2));
+						emotPub.add(emot.get(3));
+					}
+					publicemotes.add(emotPub);
+				}
+			}
+			return publicemotes;
+		} catch (Exception err) {
+			log.error("[getAllPublicEmoticons] ",err);
+			return null;
+		}
+	}
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/ConferenceLibrary.java b/src/main/java/org/apache/openmeetings/remote/ConferenceLibrary.java
new file mode 100644
index 0000000..71bc506
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/ConferenceLibrary.java
@@ -0,0 +1,307 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openmeetings.data.whiteboard.WhiteboardManager;
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.file.LibraryPresentation;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.documents.LibraryChartLoader;
+import org.apache.openmeetings.documents.LibraryDocumentConverter;
+import org.apache.openmeetings.documents.LibraryWmlLoader;
+import org.apache.openmeetings.documents.LoadLibraryPresentation;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.crypt.MD5;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.IConnection;
+import org.red5.server.api.Red5;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.red5.server.api.service.IServiceCapableConnection;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * @author swagner
+ * 
+ */
+public class ConferenceLibrary implements IPendingServiceCallback {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			ConferenceLibrary.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private FileExplorerItemDao fileExplorerItemDao;
+	@Autowired
+	private LibraryWmlLoader libraryWmlLoader;
+	@Autowired
+	private WhiteboardManager whiteboardManagement;
+
+	public LibraryPresentation getPresentationPreviewFileExplorer(String SID,
+			String parentFolder) {
+
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			log.debug("#############users_id : " + users_id);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				File working_dir = new File(OmFileHelper.getUploadFilesDir(), parentFolder);
+				log.debug("############# working_dir : " + working_dir);
+
+				File file = new File(working_dir, OmFileHelper.libraryFileName);
+
+				if (!file.exists()) {
+					throw new Exception(file.getCanonicalPath() + ": does not exist");
+				}
+
+				return LoadLibraryPresentation.parseLibraryFileToObject(file);
+
+			} else {
+				throw new Exception("not Authenticated");
+			}
+
+		} catch (Exception e) {
+			log.error("[getListOfFilesByAbsolutePath]", e);
+			return null;
+		}
+
+	}
+
+	/**
+	 * 
+	 * Save an Object to the library and returns the file-explorer Id
+	 * 
+	 * @param SID
+	 * @param room_id
+	 * @param fileName
+	 * @param tObjectRef
+	 * @return - file-explorer Id in case of success, -1 otherwise
+	 */
+	public Long saveAsObject(String SID, Long room_id, String fileName,
+			Object tObjectRef) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				// LinkedHashMap tObject = (LinkedHashMap)t;
+				// ArrayList tObject = (ArrayList)t;
+
+				log.debug("saveAsObject :1: " + tObjectRef);
+				log.debug("saveAsObject :2: " + tObjectRef.getClass().getName());
+
+				@SuppressWarnings("rawtypes")
+				ArrayList tObject = (ArrayList) tObjectRef;
+
+				log.debug("saveAsObject" + tObject.size());
+
+				String localFileName = MD5.do_checksum(new Date().toString()) + ".wml";
+
+				LibraryDocumentConverter.writeToLocalFolder(localFileName, tObject);
+
+				// String wmlPath = current_dir + File.separatorChar+fileName
+				// +".xml";
+				// OwnerID == null
+				Long fileExplorerId = fileExplorerItemDao.add(fileName, "", 0L,
+						null, room_id, users_id, false, // isFolder
+						false, // isImage
+						false, // isPresentation
+						localFileName, // WML localFileName
+						true, // isStoredWML file
+						true, 0L, "");
+
+				return fileExplorerId;
+			}
+		} catch (Exception err) {
+			log.error("[saveAsObject] ", err);
+		}
+		return -1L;
+	}
+
+	/**
+	 * 
+	 * Loads a Object from the library into the whiteboard of all participant of
+	 * the current room
+	 * 
+	 * @param SID
+	 * @param room_id
+	 * @param fileExplorerItemId
+	 * @param whiteboardId
+	 */
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public void loadWmlObject(String SID, Long room_id,
+			Long fileExplorerItemId, Long whiteboardId) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				IConnection current = Red5.getConnectionLocal();
+				Client currentClient = this.sessionManager
+						.getClientByStreamId(current.getClient().getId(), null);
+
+				if (currentClient == null) {
+					return;
+				}
+
+				FileExplorerItem fileExplorerItem = fileExplorerItemDao
+						.getFileExplorerItemsById(fileExplorerItemId);
+
+				ArrayList roomItems = libraryWmlLoader.loadWmlFile(fileExplorerItem.getWmlFilePath());
+
+				Map whiteboardObjClear = new HashMap();
+				whiteboardObjClear.put(2, "clear");
+				whiteboardObjClear.put(3, null);
+
+				whiteboardManagement.addWhiteBoardObjectById(
+						room_id, whiteboardObjClear, whiteboardId);
+
+				for (int k = 0; k < roomItems.size(); k++) {
+
+					ArrayList actionObject = (ArrayList) roomItems.get(k);
+
+					Map whiteboardObj = new HashMap();
+					whiteboardObj.put(2, "draw");
+					whiteboardObj.put(3, actionObject);
+
+					whiteboardManagement.addWhiteBoardObjectById(
+							room_id, whiteboardObj, whiteboardId);
+
+				}
+
+				Map<String, Object> sendObject = new HashMap<String, Object>();
+				sendObject.put("id", whiteboardId);
+				sendObject.put("roomitems", roomItems);
+
+				// Notify all Clients of that Scope (Room)
+				for (IConnection conn : current.getScope().getClientConnections()) {
+					if (conn != null) {
+						if (conn instanceof IServiceCapableConnection) {
+							Client rcl = this.sessionManager
+									.getClientByStreamId(conn.getClient()
+											.getId(), null);
+							if ((rcl == null) || (rcl.getIsScreenClient())) {
+								continue;
+							} else {
+								((IServiceCapableConnection) conn).invoke(
+										"loadWmlToWhiteboardById",
+										new Object[] { sendObject }, this);
+							}
+						}
+					}
+				}
+			}
+		} catch (Exception err) {
+			log.error("[loadWmlObject] ", err);
+		}
+	}
+
+	/**
+	 * 
+	 * Loads a chart object
+	 * 
+	 * @param SID
+	 * @param room_id
+	 * @param fileName
+	 * @return - chart object
+	 */
+	@SuppressWarnings("rawtypes")
+	public ArrayList loadChartObject(String SID, Long room_id, String fileName) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				return LibraryChartLoader.getInstance().loadChart(OmFileHelper.getUploadRoomDir(room_id.toString()),
+						fileName);
+			}
+		} catch (Exception err) {
+			log.error("[loadChartObject] ", err);
+		}
+		return null;
+	}
+
+	/**
+	 * @param SID
+	 * @param flvFileExplorerId
+	 * @return 1 in case of success, -1 otherwise
+	 */
+	public Long copyFileToCurrentRoom(String SID, Long flvFileExplorerId) {
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				IConnection current = Red5.getConnectionLocal();
+				String streamid = current.getClient().getId();
+
+				Client currentClient = this.sessionManager
+						.getClientByStreamId(streamid, null);
+
+				Long room_id = currentClient.getRoom_id();
+
+				if (room_id != null) {
+					File outputFullFlvFile = new File(OmFileHelper.getStreamsHibernateDir()
+						, "UPLOADFLV_" + flvFileExplorerId + ".flv");
+
+					File targetFolder = OmFileHelper.getStreamsSubDir(room_id);
+
+					File targetFullFlvFile = new File(targetFolder
+						, "UPLOADFLV_" + flvFileExplorerId + ".flv");
+					if (outputFullFlvFile.exists() && !targetFullFlvFile.exists()) {
+						FileHelper.copy(outputFullFlvFile, targetFullFlvFile);
+					}
+
+					return 1L;
+				}
+
+			}
+
+		} catch (Exception err) {
+			log.error("[copyFileToCurrentRoom] ", err);
+		}
+		return -1L;
+	}
+
+	public void resultReceived(IPendingServiceCall arg0) {
+		// TODO Auto-generated method stub
+
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/ConferenceService.java b/src/main/java/org/apache/openmeetings/remote/ConferenceService.java
new file mode 100644
index 0000000..f2e8f9a
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/ConferenceService.java
@@ -0,0 +1,512 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.openmeetings.data.calendar.management.AppointmentLogic;
+import org.apache.openmeetings.data.conference.RoomManager;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.room.RoomModeratorsDao;
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomModerator;
+import org.apache.openmeetings.db.entity.room.RoomOrganisation;
+import org.apache.openmeetings.db.entity.room.RoomType;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * @author sebawagner
+ * 
+ */
+public class ConferenceService {
+	private static final Logger log = Red5LoggerFactory.getLogger(ConferenceService.class, webAppRootKey);
+
+	@Autowired
+	private AppointmentLogic appointmentLogic;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private RoomManager roomManager;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private RoomTypeDao roomTypeDao;
+	@Autowired
+	private RoomModeratorsDao roomModeratorsDao;
+	@Autowired
+	private ISessionManager sessionManager = null;
+	@Autowired
+	private ConfigurationDao cfgDao;
+
+	/**
+	 * ( get a List of all available Rooms of this organization
+	 * (non-appointments)
+	 * 
+	 * @param SID
+	 * @param organisation_id
+	 * @return - all available Rooms of this organization
+	 */
+	public List<RoomOrganisation> getRoomsByOrganisationAndType(String SID,
+			long organisation_id, long roomtypes_id) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				log.debug("getRoomsByOrganisationAndType");
+				List<RoomOrganisation> roomOrgsList = roomManager.getRoomsOrganisationByOrganisationIdAndRoomType(organisation_id, roomtypes_id);
+	
+				List<RoomOrganisation> filtered = new ArrayList<RoomOrganisation>();
+	
+				for (Iterator<RoomOrganisation> iter = roomOrgsList.iterator(); iter
+						.hasNext();) {
+					RoomOrganisation orgRoom = iter.next();
+	
+					if (!orgRoom.getRoom().getAppointment()) {
+						orgRoom.getRoom().setCurrentusers(
+								this.getRoomClientsListByRoomId(orgRoom.getRoom()
+										.getRooms_id()));
+						filtered.add(orgRoom);
+					}
+				}
+				return filtered;
+			}
+		} catch (Exception err) {
+			log.error("[getRoomsByOrganisationAndType]", err);
+		}
+		return null;
+	}
+
+	public List<RoomOrganisation> getRoomsByOrganisationWithoutType(
+			String SID, long organisation_id) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				log.debug("getRoomsByOrganisationAndType");
+				List<RoomOrganisation> roomOrgsList = roomManager.getRoomsOrganisationByOrganisationId(organisation_id);
+				
+				for (RoomOrganisation roomOrg : roomOrgsList) {
+					roomOrg.getRoom().setCurrentusers(sessionManager.getClientListByRoom(roomOrg.getRoom().getRooms_id()));
+				}
+	
+				return roomOrgsList;
+			}
+		} catch (Exception err) {
+			log.error("[getRoomsByOrganisationAndType]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * gets all rooms of an organization TODO:check if the requesting user is
+	 * also member of that organization
+	 * 
+	 * @param SID
+	 * @param organisation_id
+	 * @return - all rooms of an organization
+	 */
+	public SearchResult<RoomOrganisation> getRoomsByOrganisation(String SID,
+			long organisation_id, int start, int max, String orderby,
+			boolean asc) {
+
+		log.debug("getRoomsByOrganisation");
+
+		Long user_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasModLevel(userDao.get(user_id), organisation_id)) {
+			return roomManager.getRoomsOrganisationsByOrganisationId(organisation_id, start, max, orderby, asc);
+		}
+		return null;
+	}
+
+	/**
+	 * get a List of all public availible rooms (non-appointments)
+	 * 
+	 * @param SID
+	 * @param roomtypes_id
+	 * @return - public rooms with given type, null in case of the error
+	 */
+	public List<Room> getRoomsPublic(String SID, Long roomtypes_id) {
+		try {
+			log.debug("getRoomsPublic");
+
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+	
+				List<Room> roomList = roomDao.getPublicRooms(roomtypes_id);
+	
+				// Filter : no appointed meetings
+				List<Room> filtered = new ArrayList<Room>();
+	
+				for (Iterator<Room> iter = roomList.iterator(); iter.hasNext();) {
+					Room rooms = iter.next();
+	
+					if (!rooms.getAppointment()) {
+						rooms.setCurrentusers(this.getRoomClientsListByRoomId(rooms
+								.getRooms_id()));
+						filtered.add(rooms);
+					}
+				}
+	
+				return filtered;
+			}
+		} catch (Exception err) {
+			log.error("[getRoomsByOrganisationAndType]", err);
+		}
+		return null;
+	}
+
+	public List<Room> getRoomsPublicWithoutType(String SID) {
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+	
+				List<Room> roomList = roomDao.getPublicRooms();
+				
+				for (Room room : roomList) {
+					room.setCurrentusers(sessionManager.getClientListByRoom(room.getRooms_id()));
+				}
+	
+				return roomList;
+			}
+		} catch (Exception err) {
+			log.error("[getRoomsPublicWithoutType]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * retrieving ServerTime
+	 * 
+	 * @return - server time
+	 */
+	// --------------------------------------------------------------------------------------------
+	public Date getServerTime() {
+		log.debug("getServerTime");
+
+		return new Date(System.currentTimeMillis());
+
+	}
+
+	// --------------------------------------------------------------------------------------------
+
+	/**
+	 * 
+	 * retrieving Appointment for Room
+	 * 
+	 * @param room_id
+	 * @return - Appointment in case the room is appointment, null otherwise
+	 */
+	public Appointment getAppointMentDataForRoom(Long room_id) {
+		log.debug("getAppointMentDataForRoom");
+
+		Room room = roomDao.get(room_id);
+
+		if (room.getAppointment() == false)
+			return null;
+
+		try {
+			Appointment ment = appointmentLogic.getAppointmentByRoom(room_id);
+
+			return ment;
+		} catch (Exception e) {
+			log.error("getAppointMentDataForRoom " + e.getMessage());
+			return null;
+		}
+
+	}
+
+	// --------------------------------------------------------------------------------------------
+
+	/**
+	 * 
+	 */
+	// --------------------------------------------------------------------------------------------
+	public List<Room> getAppointedMeetings(String SID, Long room_types_id) {
+		log.debug("ConferenceService.getAppointedMeetings");
+
+		Long users_id = sessiondataDao.checkSession(SID);
+
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+			List<Appointment> points = appointmentLogic
+					.getTodaysAppointmentsForUser(users_id);
+			List<Room> result = new ArrayList<Room>();
+
+			if (points != null) {
+				for (int i = 0; i < points.size(); i++) {
+					Appointment ment = points.get(i);
+
+					Long rooms_id = ment.getRoom().getRooms_id();
+					Room rooom = roomDao.get(rooms_id);
+
+					if (!rooom.getRoomtype().getRoomtypes_id()
+							.equals(room_types_id))
+						continue;
+
+					rooom.setCurrentusers(getRoomClientsListByRoomId(rooom
+							.getRooms_id()));
+					result.add(rooom);
+				}
+			}
+
+			log.debug("Found " + result.size() + " rooms");
+			return result;
+
+		} else {
+			return null;
+		}
+
+	}
+
+	// --------------------------------------------------------------------------------------------
+
+	public List<Room> getAppointedMeetingRoomsWithoutType(String SID) {
+		log.debug("ConferenceService.getAppointedMeetings");
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				List<Appointment> appointments = appointmentLogic
+						.getTodaysAppointmentsForUser(users_id);
+				List<Room> result = new ArrayList<Room>();
+
+				if (appointments != null) {
+					for (int i = 0; i < appointments.size(); i++) {
+						Appointment ment = appointments.get(i);
+
+						Long rooms_id = ment.getRoom().getRooms_id();
+						Room rooom = roomDao.get(rooms_id);
+
+						rooom.setCurrentusers(this
+								.getRoomClientsListByRoomId(rooom.getRooms_id()));
+						result.add(rooom);
+					}
+				}
+
+				log.debug("Found " + result.size() + " rooms");
+				return result;
+			}
+		} catch (Exception err) {
+			log.error("[getAppointedMeetingRoomsWithoutType]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param SID
+	 * @return - all room types available
+	 */
+	public List<RoomType> getRoomTypes(String SID) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			User user = userDao.get(users_id);
+			return roomTypeDao.getAll(user == null
+					? cfgDao.getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, "1") : user.getLanguage_id());
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param SID
+	 * @param rooms_id
+	 * @return - room with the id given
+	 */
+	public Room getRoomById(String SID, long rooms_id) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			return roomDao.get(rooms_id);
+		}
+		return null;
+	}
+
+	public Room getRoomWithCurrentUsersById(String SID, long rooms_id) {
+		Room room = null;
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			room = roomDao.get(rooms_id);
+			room.setCurrentusers(sessionManager.getClientListByRoom(room.getRooms_id()));
+		}
+		return room;
+	}
+
+	/**
+	 * 
+	 * @param SID
+	 * @param externalUserId
+	 * @param externalUserType
+	 * @param roomtypes_id
+	 * @return - room with the given external id
+	 */
+	public Room getRoomByExternalId(String SID, Long externalUserId, String externalUserType, long roomtypes_id) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			return roomManager.getRoomByExternalId(externalUserId, externalUserType, roomtypes_id);
+		}
+		return null;
+	}
+
+	/**
+	 * gets a list of all available rooms
+	 * 
+	 * @param SID
+	 * @param start
+	 * @param max
+	 * @param orderby
+	 * @param asc
+	 * @return - list of rooms being searched
+	 */
+	public SearchResult<Room> getRooms(String SID, int start, int max,
+			String orderby, boolean asc, String search) {
+		log.debug("getRooms");
+
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+			return roomManager.getRooms(start, max, orderby, asc, search);
+		}
+		return null;
+	}
+
+	public SearchResult<Room> getRoomsWithCurrentUsers(String SID, int start,
+			int max, String orderby, boolean asc) {
+		log.debug("getRooms");
+
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+			return roomManager.getRoomsWithCurrentUsers(start, max, orderby, asc);
+		}
+		return null;
+	}
+
+	public List<RoomModerator> getRoomModeratorsByRoomId(String SID,
+			Long roomId) {
+		try {
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				return roomModeratorsDao.getByRoomId(roomId);
+
+			}
+
+		} catch (Exception err) {
+			log.error("[getRoomModeratorsByRoomId]", err);
+			err.printStackTrace();
+		}
+
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param SID
+	 * @param rooms_id
+	 * @return - id of the room being deleted
+	 */
+	public Long deleteRoom(String SID, long rooms_id) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+			return roomManager.deleteRoomById(rooms_id);
+		}
+		return null;
+	}
+	
+	/**
+	 * return all participants of a room
+	 * 
+	 * @param room_id
+	 * @return - true if room is full, false otherwise
+	 */
+	public boolean isRoomFull(Long room_id) {
+		try {
+			Room room = roomDao.get(room_id);
+			
+			if (room.getNumberOfPartizipants() <= this.sessionManager
+					.getClientListByRoom(room_id).size()) {
+				return true;
+			}
+			
+			return false;
+		} catch (Exception err) {
+			log.error("[isRoomFull]", err);
+		}
+		return true;
+	}
+
+	/**
+	 * return all participants of a room
+	 * 
+	 * @param room_id
+	 * @return - all participants of a room
+	 */
+	public List<Client> getRoomClientsListByRoomId(Long room_id) {
+		return sessionManager.getClientListByRoom(room_id);
+	}
+
+	public List<Room> getRoomsWithCurrentUsersByList(String SID, int start, int max, String orderby, boolean asc) {
+		log.debug("getRoomsWithCurrentUsersByList");
+
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+			return roomManager.getRoomsWithCurrentUsersByList(start, max, orderby, asc);
+		}
+		return null;
+	}
+
+	public List<Room> getRoomsWithCurrentUsersByListAndType(String SID, int start, int max, String orderby, boolean asc, String externalRoomType) {
+		log.debug("getRoomsWithCurrentUsersByListAndType");
+
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+			return roomManager.getRoomsWithCurrentUsersByListAndType(start, max, orderby, asc, externalRoomType);
+		}
+		return null;
+	}
+
+	public Room getRoomByOwnerAndType(String SID, Long roomtypesId, String roomName) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			return roomManager.getRoomByOwnerAndTypeId(users_id,
+					roomtypesId, roomName);
+		}
+		return null;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/ContactService.java b/src/main/java/org/apache/openmeetings/remote/ContactService.java
new file mode 100644
index 0000000..19a301b
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/ContactService.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+
+/**
+ * 
+ * @author swagner
+ *
+ */
+public class ContactService {
+	
+
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/DocumentService.java b/src/main/java/org/apache/openmeetings/remote/DocumentService.java
new file mode 100644
index 0000000..456cd61
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/DocumentService.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import java.util.List;
+
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * 
+ * @author swagner
+ * 
+ */
+public class DocumentService {
+
+	@SuppressWarnings("unused")
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			DocumentService.class, OpenmeetingsVariables.webAppRootKey);
+
+	public List<?> getUserFiles(String SID, String parentFolder) {
+
+		return null;
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/ErrorService.java b/src/main/java/org/apache/openmeetings/remote/ErrorService.java
new file mode 100644
index 0000000..b3ccf20
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/ErrorService.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import org.apache.openmeetings.db.dao.basic.ErrorDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dto.basic.ErrorResult;
+import org.apache.openmeetings.db.entity.basic.ErrorType;
+import org.apache.openmeetings.db.entity.basic.ErrorValue;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * @author swagner
+ * 
+ */
+public class ErrorService {
+	private static final Logger log = Red5LoggerFactory.getLogger(ErrorService.class, webAppRootKey);
+
+	@Autowired
+	private LabelDao labelDao;
+	@Autowired
+	private ErrorDao errorDao;
+
+	/**
+	 * Gets an Error-Object by its id TODO: add error-code-handlers -20
+	 * duplicate FileName -21 FileName too short (length = 0) and make the
+	 * persistent in the DataBase
+	 * 
+	 * @param SID
+	 * @param errorid
+	 * @return - ErrorResult object with the id given
+	 */
+	public ErrorResult getErrorByCode(String SID, Long errorid, Long langId) {
+		if (errorid < 0) {
+			log.debug("errorid, language_id: " + errorid + "|" + langId);
+			ErrorValue eValues = errorDao.get(-1 * errorid);
+			if (eValues != null) {
+				ErrorType eType = errorDao.getErrorType(eValues.getErrortype_id());
+				log.debug("eValues.getFieldvalues_id() = " + eValues.getFieldvalues_id());
+				log.debug("eValues.getErrorType() = " + eType);
+				String eValue = labelDao.getString(eValues.getFieldvalues_id(), langId);
+				String tValue = labelDao.getString(eType.getFieldvalues_id(), langId);
+				if (eValue != null) {
+					return new ErrorResult(errorid, eValue, tValue);
+				}
+			}
+		} else {
+			return new ErrorResult(errorid, "Error ... please check your input", "Error");
+		}
+		return null;
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java b/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java
new file mode 100644
index 0000000..aa318ca
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/FLVRecorderService.java
@@ -0,0 +1,500 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.openmeetings.converter.BaseConverter;
+import org.apache.openmeetings.data.flvrecord.converter.FlvInterviewConverterTask;
+import org.apache.openmeetings.data.flvrecord.converter.FlvRecorderConverterTask;
+import org.apache.openmeetings.data.flvrecord.listener.StreamListener;
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDeltaDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData.Status;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.IConnection;
+import org.red5.server.api.Red5;
+import org.red5.server.api.scope.IScope;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.red5.server.api.service.IServiceCapableConnection;
+import org.red5.server.api.stream.IStreamListener;
+import org.red5.server.stream.ClientBroadcastStream;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class FLVRecorderService implements IPendingServiceCallback {
+	private static final Logger log = Red5LoggerFactory.getLogger(FLVRecorderService.class, webAppRootKey);
+
+	/**
+	 * Stores a reference to all available listeners we need that reference, as the internal references stored with the
+	 * red5 stream object might be gone when the user closes the browser. But each listener has an asynchronous
+	 * component that needs to be closed no matter how the user leaves the application!
+	 */
+	private static final Map<Long, StreamListener> streamListeners = new ConcurrentHashMap<Long, StreamListener>();
+
+	// Spring Beans
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	private FlvRecordingDao flvRecordingDaoImpl;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private FlvRecorderConverterTask flvRecorderConverterTask;
+	@Autowired
+	private FlvInterviewConverterTask flvInterviewConverterTask;
+	@Autowired
+	private FlvRecordingDao recordingDao;
+	@Autowired
+	private ScopeApplicationAdapter scopeApplicationAdapter;
+	@Autowired
+	private FlvRecordingMetaDeltaDao metaDeltaDao;
+	@Autowired
+	private FlvRecordingMetaDataDao metaDataDao;
+
+	public void resultReceived(IPendingServiceCall arg0) {
+	}
+
+	private static String generateFileName(Long flvRecording_id, String streamid) throws Exception {
+		String dateString = CalendarPatterns.getTimeForStreamId(new Date());
+		return "rec_" + flvRecording_id + "_stream_" + streamid + "_" + dateString;
+	}
+
+	public String recordMeetingStream(IConnection current, Client client, String roomRecordingName, String comment, Boolean isInterview) {
+		try {
+			log.debug("##REC:: recordMeetingStream ::");
+
+			Long room_id = client.getRoom_id();
+
+			Date now = new Date();
+
+			FlvRecording flvRecording = new FlvRecording();
+
+			flvRecording.setFileHash("");
+			flvRecording.setFileName(roomRecordingName);
+			Long ownerId = client.getUser_id();
+			if (ownerId != null && ownerId < 0) {
+				User c = userDao.get(-ownerId);
+				if (c != null) {
+					ownerId = c.getOwnerId();
+				}
+			}
+			flvRecording.setInsertedBy(ownerId);
+			flvRecording.setFolder(false);
+			flvRecording.setIsImage(false);
+			flvRecording.setIsPresentation(false);
+			flvRecording.setIsRecording(true);
+			flvRecording.setComment(comment);
+			flvRecording.setIsInterview(isInterview);
+
+			flvRecording.setRoom_id(room_id);
+			flvRecording.setRecordStart(now);
+
+			flvRecording.setWidth(client.getVWidth());
+			flvRecording.setHeight(client.getVHeight());
+
+			flvRecording.setOwnerId(ownerId);
+			flvRecording.setStatus(FlvRecording.Status.RECORDING);
+			flvRecording = recordingDao.update(flvRecording);
+			// Receive flvRecordingId
+			Long flvRecordingId = flvRecording.getFlvRecordingId();
+			log.debug("##REC:: recording created by USER: " + ownerId);
+
+			// Update Client and set Flag
+			client.setIsRecording(true);
+			client.setFlvRecordingId(flvRecordingId);
+			sessionManager.updateClientByStreamId(client.getStreamid(), client, false, null);
+
+			// get all stream and start recording them
+			for (IConnection conn : current.getScope().getClientConnections()) {
+				if (conn != null) {
+					if (conn instanceof IServiceCapableConnection) {
+						Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+
+						// Send every user a notification that the recording did start
+						if (!rcl.getIsAVClient()) {
+							((IServiceCapableConnection) conn).invoke("startedRecording", new Object[] { client }, this);
+						}
+
+						// If its the recording client we need another type of Meta Data
+						if (rcl.getIsScreenClient()) {
+							if (rcl.getFlvRecordingId() != null && rcl.isScreenPublishStarted()) {
+								String streamName_Screen = generateFileName(flvRecordingId, rcl.getStreamPublishName().toString());
+
+								Long flvRecordingMetaDataId = metaDataDao.addFlvRecordingMetaData(
+										flvRecordingId, rcl.getFirstname() + " " + rcl.getLastname(), now, false,
+										false, true, streamName_Screen, rcl.getInterviewPodId());
+
+								// Start FLV Recording
+								recordShow(conn, rcl.getStreamPublishName(), streamName_Screen, flvRecordingMetaDataId, true, isInterview);
+
+								// Add Meta Data
+								rcl.setFlvRecordingMetaDataId(flvRecordingMetaDataId);
+
+								sessionManager.updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
+							}
+						} else if ((rcl.isMobile() || rcl.getIsAVClient())
+								&& (rcl.getAvsettings().equals("av") || rcl.getAvsettings().equals("a") || rcl.getAvsettings().equals("v"))) {
+							// if the user does publish av, a, v
+							// But we only record av or a, video only is not interesting
+							String broadcastId = "" + rcl.getBroadCastID();
+							String streamName = generateFileName(flvRecordingId, broadcastId);
+
+							// Add Meta Data
+							boolean isAudioOnly = false;
+							if (rcl.getAvsettings().equals("a")) {
+								isAudioOnly = true;
+							}
+
+							boolean isVideoOnly = false;
+							if (rcl.getAvsettings().equals("v")) {
+								isVideoOnly = true;
+							}
+
+							Long metaId = metaDataDao.addFlvRecordingMetaData(flvRecordingId,
+									rcl.getFirstname() + " " + rcl.getLastname(), now, isAudioOnly, isVideoOnly, false, streamName,
+									rcl.getInterviewPodId());
+
+							rcl.setFlvRecordingMetaDataId(metaId);
+
+							sessionManager.updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
+
+							// Start FLV recording
+							recordShow(conn, broadcastId, streamName, metaId, !isAudioOnly, isInterview);
+						}
+					}
+				}
+			}
+			return roomRecordingName;
+
+		} catch (Exception err) {
+			log.error("[recordMeetingStream]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Start recording the published stream for the specified broadcast-Id
+	 * 
+	 * @param conn
+	 * @param broadcastid
+	 * @param streamName
+	 * @param metaId
+	 * @throws Exception
+	 */
+	private void recordShow(IConnection conn, String broadcastid, String streamName, Long metaId, boolean isScreenData, Boolean isInterview) throws Exception {
+		try {
+			log.debug("Recording show for: " + conn.getScope().getContextPath());
+			log.debug("Name of CLient and Stream to be recorded: " + broadcastid);
+			// log.debug("Application.getInstance()"+Application.getInstance());
+			log.debug("Scope " + conn);
+			log.debug("Scope " + conn.getScope());
+			// Get a reference to the current broadcast stream.
+			ClientBroadcastStream stream = (ClientBroadcastStream) scopeApplicationAdapter.getBroadcastStream(conn.getScope(), broadcastid);
+
+			if (stream == null) {
+				log.debug("Unable to get stream: " + streamName);
+				return;
+			}
+			// Save the stream to disk.
+			log.debug("### stream " + stream);
+			log.debug("### streamName " + streamName);
+			log.debug("### conn.getScope() " + conn.getScope());
+			log.debug("### flvRecordingMetaDataId " + metaId);
+			log.debug("### isScreenData " + isScreenData);
+			log.debug("### isInterview " + isInterview);
+			StreamListener streamListener = new StreamListener(!isScreenData, streamName, conn.getScope(), metaId, isScreenData, isInterview, metaDataDao, metaDeltaDao);
+
+			streamListeners.put(metaId, streamListener);
+
+			stream.addStreamListener(streamListener);
+			// Just for Debug Purpose
+			// stream.saveAs(streamName+"_DEBUG", false);
+		} catch (Exception e) {
+			log.error("Error while saving stream: " + streamName, e);
+		}
+	}
+
+	/**
+	 * Stops recording the publishing stream for the specified IConnection.
+	 * 
+	 * @param conn
+	 */
+	public synchronized void stopRecordingShow(IConnection conn, String broadcastId, Long metaId) {
+		try {
+			if (metaId == null) {
+				// this should be fixed, can be useful for debugging, after all this is an error
+				// but we don't want the application to completely stop the process
+				log.error("flvRecordingMetaDataId is null");
+			}
+
+			log.debug("** stopRecordingShow: " + conn);
+			log.debug("### Stop recording show for broadcastId: " + broadcastId + " || " + conn.getScope().getContextPath());
+
+			Object streamToClose = scopeApplicationAdapter.getBroadcastStream(conn.getScope(), broadcastId);
+
+			StreamListener listenerAdapter = streamListeners.get(metaId);
+
+			log.debug("Stream Closing :: " + metaId);
+
+			ClientBroadcastStream stream = (ClientBroadcastStream) streamToClose;
+
+			// the stream can be null if the user just closes the browser
+			// without canceling the recording before leaving
+			if (stream != null) {
+				// Iterate through all stream listeners and stop the appropriate
+				if (stream.getStreamListeners() != null) {
+					for (IStreamListener iStreamListener : stream.getStreamListeners()) {
+						stream.removeStreamListener(iStreamListener);
+					}
+				}
+			}
+
+			FlvRecordingMetaData metaData = metaDataDao.get(metaId);
+			BaseConverter.printMetaInfo(metaData, "Stopping the stream");
+			// Manually call finish on the stream so that there is no endless loop waiting in the FlvRecorderConverter waiting for the stream to finish
+			// this would normally happen in the Listener
+			Status s = metaData.getStreamStatus();
+			if (Status.NONE == s) {
+				log.debug("Stream was not started, no need to stop :: stream with id " + metaId);
+			} else {
+				metaData.setStreamStatus(listenerAdapter == null && s == Status.STARTED ? Status.STOPPED : Status.STOPPING);
+				log.debug("Stopping the stream :: New status == " + metaData.getStreamStatus());
+			}
+			metaDataDao.update(metaData);
+			if (listenerAdapter == null) {
+				log.debug("Stream Not Found :: " + metaId);
+				log.debug("Available Streams :: " + streamListeners.size());
+
+				for (Long entryKey : streamListeners.keySet()) {
+					log.debug("Stored flvRecordingMetaDataId in Map: " + entryKey);
+				}
+				throw new IllegalStateException("Could not find Listener to stop! flvRecordingMetaDataId " + metaId);
+			}
+
+			listenerAdapter.closeStream();
+			streamListeners.remove(metaId);
+
+		} catch (Exception err) {
+			log.error("[stopRecordingShow]", err);
+		}
+	}
+
+	public Long stopRecordAndSave(IScope scope, Client currentClient, Long storedFlvRecordingId) {
+		try {
+			log.debug("stopRecordAndSave " + currentClient.getUsername() + "," + currentClient.getUserip());
+
+			// get all stream and stop recording them
+			for (IConnection conn : scope.getClientConnections()) {
+				if (conn != null) {
+					if (conn instanceof IServiceCapableConnection) {
+						Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+
+						if (rcl == null) {
+							continue;
+						}
+						log.debug("is this users still alive? stop it :" + rcl);
+
+						if (rcl.getIsScreenClient()) {
+							if (rcl.getFlvRecordingId() != null && rcl.isScreenPublishStarted()) {
+								// Stop FLV Recording
+								stopRecordingShow(conn, rcl.getStreamPublishName(), rcl.getFlvRecordingMetaDataId());
+
+								// Update Meta Data
+								metaDataDao.updateFlvRecordingMetaDataEndDate(rcl.getFlvRecordingMetaDataId(), new Date());
+							}
+						} else if ((rcl.isMobile() || rcl.getIsAVClient())
+								&& (rcl.getAvsettings().equals("av") || rcl.getAvsettings().equals("a") || rcl.getAvsettings().equals("v"))) {
+
+							stopRecordingShow(conn, String.valueOf(rcl.getBroadCastID()).toString(), rcl.getFlvRecordingMetaDataId());
+
+							// Update Meta Data
+							metaDataDao.updateFlvRecordingMetaDataEndDate(rcl.getFlvRecordingMetaDataId(), new Date());
+						}
+					}
+				}
+			}
+			// Store to database
+			Long flvRecordingId = currentClient.getFlvRecordingId();
+
+			// In the Case of an Interview the stopping client does not mean
+			// that its actually the recording client
+			if (storedFlvRecordingId != null) {
+				flvRecordingId = storedFlvRecordingId;
+			}
+
+			if (flvRecordingId != null) {
+				flvRecordingDaoImpl.updateFlvRecordingEndTime(flvRecordingId, new Date(), currentClient.getOrganization_id());
+
+				// Reset values
+				currentClient.setFlvRecordingId(null);
+				currentClient.setIsRecording(false);
+
+				sessionManager.updateClientByStreamId(currentClient.getStreamid(), currentClient, false, null);
+				log.debug("flvRecorderConverterTask ", flvRecorderConverterTask);
+
+				FlvRecording flvRecording = flvRecordingDaoImpl.get(flvRecordingId);
+				if (flvRecording.getIsInterview() == null || !flvRecording.getIsInterview()) {
+					flvRecorderConverterTask.startConversionThread(flvRecordingId);
+				} else {
+					flvInterviewConverterTask.startConversionThread(flvRecordingId);
+				}
+			}
+		} catch (Exception err) {
+			log.error("[-- stopRecordAndSave --]", err);
+		}
+		return new Long(-1);
+	}
+
+	public Client checkLzRecording() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+
+			log.debug("getCurrentRoomClient -2- " + streamid);
+
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+
+			log.debug("getCurrentRoomClient -#########################- " + currentClient.getRoom_id());
+
+			for (Client rcl : sessionManager.getClientListByRoomAll(currentClient.getRoom_id())) {
+				if (rcl.getIsRecording()) {
+					return rcl;
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[checkLzRecording]", err);
+		}
+		return null;
+	}
+
+	public void stopRecordingShowForClient(IConnection conn, Client rcl) {
+		try {
+			// this cannot be handled here, as to stop a stream and to leave a
+			// room is not
+			// the same type of event.
+			// StreamService.addRoomClientEnterEventFunc(rcl, roomrecordingName,
+			// rcl.getUserip(), false);
+			log.debug("### stopRecordingShowForClient: " + rcl);
+
+			if (rcl.getIsScreenClient()) {
+
+				if (rcl.getFlvRecordingId() != null && rcl.isScreenPublishStarted()) {
+
+					// Stop FLV Recording
+					// FIXME: Is there really a need to stop it manually if the
+					// user just
+					// stops the stream?
+					stopRecordingShow(conn, rcl.getStreamPublishName(), rcl.getFlvRecordingMetaDataId());
+
+					// Update Meta Data
+					metaDataDao.updateFlvRecordingMetaDataEndDate(rcl.getFlvRecordingMetaDataId(), new Date());
+				}
+
+			} else if (rcl.getIsAVClient()
+					&& (rcl.getAvsettings().equals("a") || rcl.getAvsettings().equals("v") || rcl.getAvsettings().equals("av"))) {
+
+				// FIXME: Is there really a need to stop it manually if the user
+				// just stops the stream?
+				stopRecordingShow(conn, String.valueOf(rcl.getBroadCastID()), rcl.getFlvRecordingMetaDataId());
+
+				// Update Meta Data
+				metaDataDao.updateFlvRecordingMetaDataEndDate(rcl.getFlvRecordingMetaDataId(), new Date());
+			}
+
+		} catch (Exception err) {
+			log.error("[stopRecordingShowForClient]", err);
+		}
+	}
+
+	public void addRecordingByStreamId(IConnection conn, String streamId, Client rcl, Long flvRecordingId) {
+		try {
+			FlvRecording flvRecording = flvRecordingDaoImpl.get(flvRecordingId);
+
+			Date now = new Date();
+
+			// If its the recording client we need another type of Meta Data
+			if (rcl.getIsScreenClient()) {
+				if (rcl.getFlvRecordingId() != null && rcl.isScreenPublishStarted()) {
+					String streamName_Screen = generateFileName(flvRecordingId, rcl.getStreamPublishName().toString());
+
+					log.debug("##############  ADD SCREEN OF SHARER :: " + rcl.getStreamPublishName());
+
+					Long flvRecordingMetaDataId = metaDataDao.addFlvRecordingMetaData(flvRecordingId, rcl.getFirstname()
+							+ " " + rcl.getLastname(), now, false, false, true, streamName_Screen, rcl.getInterviewPodId());
+
+					// Start FLV Recording
+					recordShow(conn, rcl.getStreamPublishName(), streamName_Screen, flvRecordingMetaDataId, true,
+							flvRecording.getIsInterview());
+
+					// Add Meta Data
+					rcl.setFlvRecordingMetaDataId(flvRecordingMetaDataId);
+
+					sessionManager.updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
+				}
+			} else if (rcl.getIsAVClient()
+					&& (rcl.getAvsettings().equals("av") || rcl.getAvsettings().equals("a") || rcl.getAvsettings().equals("v"))) {
+				// if the user does publish av, a, v
+				// But we only record av or a, video only is not interesting
+
+				String streamName = generateFileName(flvRecordingId, String.valueOf(rcl.getBroadCastID()).toString());
+
+				// Add Meta Data
+				boolean isAudioOnly = false;
+				if (rcl.getAvsettings().equals("a")) {
+					isAudioOnly = true;
+				}
+				boolean isVideoOnly = false;
+				if (rcl.getAvsettings().equals("v")) {
+					isVideoOnly = true;
+				}
+
+				Long flvRecordingMetaDataId = metaDataDao.addFlvRecordingMetaData(flvRecordingId, rcl.getFirstname() + " "
+						+ rcl.getLastname(), now, isAudioOnly, isVideoOnly, false, streamName, rcl.getInterviewPodId());
+
+				// Start FLV recording
+				recordShow(conn, String.valueOf(rcl.getBroadCastID()).toString(), streamName, flvRecordingMetaDataId, false,
+						flvRecording.getIsInterview());
+
+				rcl.setFlvRecordingMetaDataId(flvRecordingMetaDataId);
+
+				sessionManager.updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
+
+			}
+
+		} catch (Exception err) {
+			log.error("[addRecordingByStreamId]", err);
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/GroupService.java b/src/main/java/org/apache/openmeetings/remote/GroupService.java
new file mode 100644
index 0000000..4ffb584
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/GroupService.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+
+public class GroupService {
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/InvitationService.java b/src/main/java/org/apache/openmeetings/remote/InvitationService.java
new file mode 100644
index 0000000..ba9d981
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/InvitationService.java
@@ -0,0 +1,158 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Date;
+
+import org.apache.openmeetings.data.conference.InvitationManager;
+import org.apache.openmeetings.db.dao.calendar.IInvitationManager.MessageType;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.room.Invitation.Valid;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.CalendarHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.threeten.bp.LocalDateTime;
+
+public class InvitationService implements IPendingServiceCallback {
+	private static final Logger log = Red5LoggerFactory.getLogger(InvitationService.class, webAppRootKey);
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private InvitationManager invitationManager;
+	@Autowired
+	private RoomDao roomDao;
+
+	public void resultReceived(IPendingServiceCall arg0) {
+		log.debug("InvitationService resultReceived" + arg0);
+	}
+
+	private Date getDate(String date, String time, String tzId) {
+		LocalDateTime d = LocalDateTime.of(
+				Integer.parseInt(date.substring(6)) //year
+				, Integer.parseInt(date.substring(3, 5)) //month
+				, Integer.parseInt(date.substring(0, 2)) //dayOfMonth
+				, Integer.parseInt(time.substring(0, 2)) //hour
+				, Integer.parseInt(time.substring(3, 5)) //minute
+				);
+		return CalendarHelper.getDate(d, tzId);
+	}
+	
+	/**
+	 * send an invitation to another user by Mail
+	 * 
+	 * @param SID
+	 * @param firstname
+	 * @param lastname
+	 * @param message
+	 * @param email
+	 * @param subject
+	 * @param room_id
+	 * @param conferencedomain
+	 * @param isPasswordProtected
+	 * @param invitationpass
+	 * @param valid
+	 * @param validFromDate
+	 * @param validFromTime
+	 * @param validToDate
+	 * @param validToTime
+	 * @param language_id
+     * @param iCalTz
+	 * @return - invitation object in case of success, "Sys - Error" string or null in case of error
+	 */
+	public Object sendInvitationHash(String SID, String firstname, String lastname,
+			String message, String email, String subject,
+			Long room_id, String conferencedomain, Boolean isPasswordProtected,
+			String invitationpass, Integer valid, String validFromDate,
+			String validFromTime, String validToDate, String validToTime,
+			Long language_id, String iCalTz, boolean sendMail) {
+
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				log.debug("sendInvitationHash: ");
+	
+				Date from = getDate(validFromDate, validFromTime, iCalTz);
+				Date to = getDate(validToDate, validToTime, iCalTz);
+	
+				User owner = null;
+				if (users_id < 0) {
+					owner = userDao.get(-users_id);
+				}
+				users_id = owner == null ? users_id : owner.getOwnerId();
+				User invitee = userDao.getContact(email, firstname, lastname, users_id);
+				Invitation invitation = invitationManager.getInvitation(invitee, roomDao.get(room_id),
+								isPasswordProtected, invitationpass, Valid.fromInt(valid)
+								, userDao.get(users_id), language_id,
+								from, to, null);
+
+				if (invitation != null) {
+					if (sendMail) {
+						invitationManager.sendInvitionLink(invitation, MessageType.Create, subject, message, false);
+					}
+
+					return invitation;
+				} else {
+					return "Sys - Error";
+				}
+			} else {
+				return "Need User Privileges to perfom the Action";
+			}
+
+		} catch (Exception err) {
+			log.error("[sendInvitationHash]", err);
+		}
+
+		return null;
+	}
+
+	public String sendInvitationByHash(String SID, String invitationHash, String message, String subject
+			, Long language_id) throws Exception {
+		Long users_id = sessiondataDao.checkSession(SID);
+
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			Invitation inv = (Invitation)invitationManager.getInvitationByHashCode(invitationHash, false);
+			inv.getInvitee().setLanguage_id(language_id);
+			invitationManager.sendInvitionLink(inv, MessageType.Create, subject, message, false);
+		} else {
+			return "Need User Privileges to perfom the Action";
+		}
+		return "Success";
+	}
+	
+	public Object getInvitationByHash(String hashCode) {
+		return invitationManager.getInvitationByHashCode(hashCode, true);
+	}
+
+	public Object checkInvitationPass(String hashCode, String pass) {
+		return invitationManager.checkInvitationPass(hashCode, pass);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/LanguageService.java b/src/main/java/org/apache/openmeetings/remote/LanguageService.java
new file mode 100644
index 0000000..3917687
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/LanguageService.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * @author sebastianwagner
+ * 
+ */
+public class LanguageService {
+	@Autowired
+	private ConfigurationDao configurationDao;
+	@Autowired
+	private LabelDao labelDao;
+
+	/**
+	 * @return - List of all available Languages
+	 */
+	public List<Language> getLanguages() {
+		List<Language> result = new ArrayList<Language>();
+		for (Map.Entry<Long, Locale> e : LabelDao.languages.entrySet()) {
+			result.add(new Language(e.getKey(), e.getValue().toLanguageTag(), e.getValue().getDisplayName(Locale.ENGLISH)));
+		}
+		return result;
+	}
+
+	public Integer getDefaultLanguage() {
+		return configurationDao.getConfValue(CONFIG_DEFAULT_LANG_KEY, Integer.class, "1");
+	}
+
+	/**
+	 * get all fields of a given Language_id by params
+	 * 
+	 * @param language_id
+	 * @param start
+	 * @param count
+	 * @return - all fields of a given Language_id in the range given
+	 */
+	public List<Map<String, Object>> getLanguageByIdAndMax(int language_id, int start, int count) {
+		return labelDao.getStrings((long)language_id, start, count);
+	}
+
+	public static class Language implements Serializable {
+		private static final long serialVersionUID = 1L;
+		public long language_id;
+		public String code;
+		public String name;
+		
+		public Language() {}
+		
+		public Language(long language_id, String code, String name) {
+			this.language_id = language_id;
+			this.code = code;
+			this.name = name;
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/MainService.java b/src/main/java/org/apache/openmeetings/remote/MainService.java
new file mode 100644
index 0000000..7133dda
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/MainService.java
@@ -0,0 +1,561 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_MAX_UPLOAD_SIZE_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.openmeetings.data.conference.RoomManager;
+import org.apache.openmeetings.data.user.UserManager;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.log.ConferenceLogDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.SOAPLoginDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.basic.Configuration;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomOrganisation;
+import org.apache.openmeetings.db.entity.server.RemoteSessionObject;
+import org.apache.openmeetings.db.entity.server.SOAPLogin;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.db.entity.user.Address;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.entity.user.Userdata;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.remote.util.SessionVariablesUtil;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.IConnection;
+import org.red5.server.api.Red5;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * @author swagner
+ * 
+ */
+public class MainService implements IPendingServiceCallback {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(MainService.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	private ScopeApplicationAdapter scopeApplicationAdapter;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private ConfigurationDao configurationDao;
+	@Autowired
+	private UserManager userManager;
+	@Autowired
+	private RoomManager roomManager;
+	@Autowired
+	private ConferenceLogDao conferenceLogDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private AppointmentDao appointmentDao;
+	@Autowired
+	private SOAPLoginDao soapLoginDao;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+
+	// External User Types
+	public static final String EXTERNAL_USER_TYPE_LDAP = "LDAP";
+
+
+	/**
+	 * gets a user by its SID
+	 * 
+	 * @param SID
+	 * @param USER_ID
+	 * @return - user with SID given
+	 */
+	public User getUser(String SID, int USER_ID) {
+		User users = new User();
+		Long users_id = sessiondataDao.checkSession(SID);
+		Set<Right> rights = userDao.getRights(users_id);
+		if (AuthLevelUtil.hasAdminLevel(rights) || AuthLevelUtil.hasWebServiceLevel(rights)) {
+			users = userDao.get(USER_ID);
+		} else {
+			users.setFirstname("No rights to do this");
+		}
+		return users;
+	}
+
+	public Client getCurrentRoomClient(String SID) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+
+			log.debug("getCurrentRoomClient -1- " + SID);
+			log.debug("getCurrentRoomClient -2- " + streamid);
+
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+			return currentClient;
+		} catch (Exception err) {
+			log.error("[getCurrentRoomClient]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * load this session id before doing anything else
+	 * 
+	 * @return a unique session identifier
+	 */
+	public Sessiondata getsessiondata() {
+		return sessiondataDao.startsession();
+	}
+
+	public Long setCurrentUserOrganization(String SID, Long organization_id) {
+		try {
+			sessiondataDao.updateUserOrg(SID, organization_id);
+			return 1L;
+		} catch (Exception err) {
+			log.error("[setCurrentUserOrganization]", err);
+		}
+		return -1L;
+	}
+
+	public User loginWicket(String SID, String wicketSID, Long wicketroomid) {
+		log.debug("[loginWicket] SID: '{}'; wicketSID: '{}'; wicketroomid: '{}'", SID, wicketSID, wicketroomid);
+		Long userId = sessiondataDao.checkSession(wicketSID);
+		User u = userId == null ? null : userDao.get(userId);
+		if (u != null && wicketroomid != null) {
+			log.debug("[loginWicket] user and roomid are not empty: " + userId + ", " + wicketroomid);
+			boolean allowed = false;
+			Room r = roomDao.get(wicketroomid);
+			if (r != null) {
+				if (r.getAppointment() != null && r.getAppointment()) {
+					Appointment a = appointmentDao.getAppointmentByRoom(wicketroomid);
+					if (a != null && !a.isDeleted()) {
+						allowed = a.getOwner().getUser_id().equals(userId);
+						log.debug("[loginWicket] appointed room, isOwner ? " + allowed);
+						if (!allowed) {
+							for (MeetingMember mm : a.getMeetingMembers()) {
+								if (mm.getUser().getUser_id().equals(userId)) {
+									allowed = true;
+									break;
+								}
+							}
+						}
+						/*
+						TODO need to be reviewed
+						Calendar c = WebSession.getCalendar();
+						if (c.getTime().after(a.getStart()) && c.getTime().before(a.getEnd())) {
+							allowed = true;
+						} else {
+							SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm"); //FIXME format
+							deniedMessage = Application.getString(1271) + String.format(" %s - %s", sdf.format(a.getStart()), sdf.format(a.getEnd()));
+						}
+						*/
+					}
+				} else {
+					allowed = r.getIspublic() || (r.getOwnerId() != null && r.getOwnerId().equals(userId));
+					log.debug("[loginWicket] public ? " + r.getIspublic() + ", ownedId ? " + r.getOwnerId() + " " + allowed);
+					if (!allowed) {
+						for (RoomOrganisation ro : r.getRoomOrganisations()) {
+							for (Organisation_Users ou : u.getOrganisation_users()) {
+								if (ro.getOrganisation().getOrganisation_id().equals(ou.getOrganisation().getOrganisation_id())) {
+									allowed = true;
+									break;
+								}
+							}
+							if (allowed) {
+								break;
+							}
+						}
+					}
+				}
+			}
+			if (allowed) {
+				IConnection current = Red5.getConnectionLocal();
+				String streamId = current.getClient().getId();
+				Client currentClient = sessionManager.getClientByStreamId(streamId, null);
+				
+				if (!u.getOrganisation_users().isEmpty()) {
+					u.setSessionData(sessiondataDao.getSessionByHash(wicketSID));
+					currentClient.setUser_id(u.getUser_id());
+					currentClient.setRoom_id(wicketroomid);
+					SessionVariablesUtil.setUserId(current.getClient(), u.getUser_id());
+				
+					currentClient.setUsername(u.getLogin());
+					currentClient.setFirstname(u.getFirstname());
+					currentClient.setLastname(u.getLastname());
+					currentClient.setPicture_uri(u.getPictureuri());
+					sessionManager.updateClientByStreamId(streamId, currentClient, false, null);
+					
+					scopeApplicationAdapter.sendMessageToCurrentScope("roomConnect", currentClient, false);
+					
+					return u;
+				}
+			}
+		}
+		return null;
+	}
+	
+	public Object secureLoginByRemote(String SID, String secureHash) {
+		try {
+
+			log.debug("############### secureLoginByRemote " + secureHash);
+
+			String clientURL = Red5.getConnectionLocal().getRemoteAddress();
+
+			log.debug("swfURL " + clientURL);
+
+			SOAPLogin soapLogin = soapLoginDao.get(secureHash);
+
+			if (soapLogin.getUsed()) {
+
+				if (soapLogin.getAllowSameURLMultipleTimes()) {
+
+					if (!soapLogin.getClientURL().equals(clientURL)) {
+						log.debug("does not equal " + clientURL);
+						return -42L;
+					}
+
+				} else {
+					log.debug("Already used " + secureHash);
+					return -42L;
+				}
+			}
+
+			Long loginReturn = loginUserByRemote(soapLogin.getSessionHash());
+
+			IConnection current = Red5.getConnectionLocal();
+			String streamId = current.getClient().getId();
+			Client currentClient = sessionManager.getClientByStreamId(streamId, null);
+
+			if (currentClient.getUser_id() != null) {
+				sessiondataDao.updateUser(SID, currentClient.getUser_id());
+			}
+
+			currentClient.setAllowRecording(soapLogin.isAllowRecording());
+			sessionManager.updateClientByStreamId(streamId, currentClient, false, null);
+
+			if (loginReturn == null) {
+				log.debug("loginReturn IS NULL for SID: " + soapLogin.getSessionHash());
+
+				return -1L;
+			} else if (loginReturn < 0) {
+				log.debug("loginReturn IS < 0 for SID: " + soapLogin.getSessionHash());
+
+				return loginReturn;
+			} else {
+
+				soapLogin.setUsed(true);
+				soapLogin.setUseDate(new Date());
+
+				soapLogin.setClientURL(clientURL);
+
+				soapLoginDao.update(soapLogin);
+
+				// Create Return Object and hide the validated
+				// sessionHash that is stored server side
+				// this hash should be never thrown back to the user
+
+				SOAPLogin returnSoapLogin = new SOAPLogin();
+
+				returnSoapLogin.setRoom_id(soapLogin.getRoom_id());
+				returnSoapLogin.setBecomemoderator(soapLogin.getBecomemoderator());
+				returnSoapLogin.setShowAudioVideoTest(soapLogin.getShowAudioVideoTest());
+				returnSoapLogin.setRoomRecordingId(soapLogin.getRoomRecordingId());
+				returnSoapLogin.setShowNickNameDialog(soapLogin.getShowNickNameDialog());
+				returnSoapLogin.setLandingZone(soapLogin.getLandingZone());
+
+				return returnSoapLogin;
+			}
+
+		} catch (Exception err) {
+			log.error("[secureLoginByRemote]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Function is called if the user loggs in via a secureHash and sets the
+	 * param showNickNameDialog in the Object SOAPLogin to true the user gets
+	 * displayed an additional dialog to enter his nickname
+	 * 
+	 * @param firstname
+	 * @param lastname
+	 * @param email
+	 * @return - 1 in case of success, -1 otherwise
+	 */
+	public Long setUserNickName(String firstname, String lastname, String email) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			String streamId = current.getClient().getId();
+			Client currentClient = sessionManager.getClientByStreamId(streamId, null);
+
+			currentClient.setFirstname(firstname);
+			currentClient.setLastname(lastname);
+			currentClient.setEmail(email);
+
+			// Log the User
+			conferenceLogDao.addConferenceLog(
+					"nicknameEnter", currentClient.getUser_id(), streamId,
+					null, currentClient.getUserip(), currentClient.getScope(),
+					currentClient.getExternalUserId(),
+					currentClient.getExternalUserType(),
+					currentClient.getEmail(), currentClient.getFirstname(),
+					currentClient.getLastname());
+
+			sessionManager.updateClientByStreamId(streamId, currentClient, false, null);
+			scopeApplicationAdapter.sendMessageToCurrentScope("nickNameSet", currentClient, true);
+
+			return 1L;
+		} catch (Exception err) {
+			log.error("[setUserNickName] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * Attention! This SID is NOT the default session id! its the Session id
+	 * retrieved in the call from the SOAP Gateway!
+	 * 
+	 * @param SID
+	 * @return - 1 in case of success, -1 otherwise
+	 */
+	public Long loginUserByRemote(String SID) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasWebServiceLevel(userDao.getRights(users_id))) {
+				Sessiondata sd = sessiondataDao.getSessionByHash(SID);
+				if (sd == null || sd.getSessionXml() == null) {
+					return new Long(-37);
+				} else {
+					RemoteSessionObject userObject = RemoteSessionObject.fromXml(sd.getSessionXml());
+
+					log.debug(userObject.toString());
+
+					IConnection current = Red5.getConnectionLocal();
+					String streamId = current.getClient().getId();
+					Client currentClient = sessionManager.getClientByStreamId(streamId, null);
+
+					// Check if this User is simulated in the OpenMeetings
+					// Database
+
+					if (!Strings.isEmpty(userObject.getExternalUserId())) {
+						// If so we need to check that we create this user in
+						// OpenMeetings and update its record
+
+						User user = userDao.getExternalUser(userObject.getExternalUserId(), userObject.getExternalUserType());
+
+						if (user == null) {
+							String iCalTz = configurationDao.getConfValue("default.timezone", String.class, "");
+
+							Address a = userDao.getAddress(null, null, null, 1L, null, null, null, userObject.getEmail());
+
+							Set<Right> rights = UserDao.getDefaultRights();
+							rights.remove(Right.Login);
+							rights.remove(Right.Dashboard);
+							User u = userDao.addUser(rights, userObject.getFirstname(), userObject.getUsername(),
+											userObject.getLastname(), 1L, "" // password is empty by default
+											, a, false, null, null, timezoneUtil.getTimeZone(iCalTz), false
+											, null, null, false, false, userObject.getExternalUserId()
+											, userObject.getExternalUserType(), null, userObject.getPictureUrl());
+
+							long userId = u.getUser_id();
+							currentClient.setUser_id(userId);
+							SessionVariablesUtil.setUserId(current.getClient(), userId);
+						} else {
+							user.setPictureuri(userObject.getPictureUrl());
+
+							userDao.update(user, users_id);
+
+							currentClient.setUser_id(user.getUser_id());
+							SessionVariablesUtil.setUserId(current.getClient(), user.getUser_id());
+						}
+					}
+
+					log.debug("userObject.getExternalUserId() -2- " + currentClient.getUser_id());
+
+					currentClient.setUserObject(userObject.getUsername(), userObject.getFirstname(), userObject.getLastname());
+					currentClient.setPicture_uri(userObject.getPictureUrl());
+					currentClient.setEmail(userObject.getEmail());
+
+					log.debug("UPDATE USER BY STREAMID " + streamId);
+
+					if (currentClient.getUser_id() != null) {
+						sessiondataDao.updateUser(SID, currentClient.getUser_id());
+					}
+
+					sessionManager.updateClientByStreamId(streamId, currentClient, false, null);
+
+					return new Long(1);
+				}
+			}
+		} catch (Exception err) {
+			log.error("[loginUserByRemote] ", err);
+		}
+		return new Long(-1);
+	}
+
+	/**
+	 * this function returns a user object with organization objects set only
+	 * the organization is not available for users that are using a HASH mechanism
+	 * cause the SOAP/REST API does not guarantee that the user connected to the HASH
+	 * has a valid user object set
+	 * 
+	 * @param SID
+	 */
+	public User markSessionAsLogedIn(String SID) {
+		try {
+			sessiondataDao.updateUserWithoutSession(SID, -1L);
+			
+			Long defaultRpcUserid = configurationDao.getConfValue(
+					"default.rpc.userid", Long.class, "-1");
+			User defaultRpcUser = userDao.get(defaultRpcUserid);
+			
+			User user = new User();
+			user.setOrganisation_users(defaultRpcUser.getOrganisation_users());
+			
+			return user;
+			
+		} catch (Exception err) {
+			log.error("[markSessionAsLogedIn]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * clear this session id
+	 * 
+	 * @param SID
+	 * @return string value if completed
+	 */
+	public Long logoutUser(String SID) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(current.getClient().getId(), null);
+			
+			scopeApplicationAdapter.roomLeaveByScope(currentClient,current.getScope(), false);
+			
+			currentClient.setUserObject(null, null, null, null);
+			
+			return userManager.logout(SID, users_id);
+		} catch (Exception err) {
+			log.error("[logoutUser]",err);
+		}
+		return -1L;
+	}
+
+	public List<Configuration> getGeneralOptions(String SID) {
+		try {
+			return configurationDao.get("exclusive.audio.keycode", "red5sip.enable", CONFIG_MAX_UPLOAD_SIZE_KEY, "mute.keycode", CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY);
+		} catch (Exception err) {
+			log.error("[getGeneralOptions]",err);
+		}
+		return null;
+	}
+
+	public List<Userdata> getUserdata(String SID) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			return userManager.getUserdataDashBoard(users_id);
+		}
+		return null;
+	}
+
+	/**
+	 * TODO: Is this function in usage?
+	 * 
+	 * @deprecated
+	 * @param SID
+	 * @param domain
+	 * @return - empty map
+	 */
+	@Deprecated
+	public LinkedHashMap<Integer, Client> getUsersByDomain(String SID,
+			String domain) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			LinkedHashMap<Integer, Client> lMap = new LinkedHashMap<Integer, Client>();
+			// Integer counter = 0;
+			// for (Iterator<String> it =
+			// Application.getClientList().keySet().iterator();it.hasNext();) {
+			// RoomClient rc = Application.getClientList().get(it.next());
+			// //if (rc.getDomain().equals(domain)) {
+			// lMap.put(counter, rc);
+			// counter++;
+			// //}
+			// }
+			return lMap;
+		} else {
+			return null;
+		}
+	}
+
+	public int closeRoom(String SID, Long room_id, Boolean status) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				roomManager.closeRoom(room_id, status);
+
+				if (status) {
+					Map<String, String> message = new HashMap<String, String>();
+					message.put("message", "roomClosed");
+					scopeApplicationAdapter.sendMessageByRoomAndDomain(room_id, message);
+				}
+
+				return 1;
+
+			}
+
+			return 1;
+		} catch (Exception err) {
+			log.error("[closeRoom]", err);
+		}
+		return -1;
+	}
+
+	public void resultReceived(IPendingServiceCall arg0) {
+		log.debug("[resultReceived]" + arg0);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/MobileService.java b/src/main/java/org/apache/openmeetings/remote/MobileService.java
new file mode 100644
index 0000000..c06e349
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/MobileService.java
@@ -0,0 +1,351 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_GROUP_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FRONTEND_REGISTER_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_OAUTH_REGISTER_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SOAP_REGISTER_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.room.IRoomManager;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.IUserManager;
+import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.remote.util.SessionVariablesUtil;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.OmException;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.IConnection;
+import org.red5.server.api.Red5;
+import org.red5.server.api.service.IServiceCapableConnection;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class MobileService {
+	private static final Logger log = Red5LoggerFactory.getLogger(MainService.class, webAppRootKey);
+	@Autowired
+	private ConfigurationDao cfgDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private StateDao stateDao;
+	@Autowired
+	private IUserManager userManager;
+	@Autowired
+	private SessiondataDao sessionDao;
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private IRoomManager roomManager;
+	@Autowired
+	private LabelDao labelDao;
+	@Autowired
+	private ScopeApplicationAdapter scopeAdapter;
+
+	private void add(Map<String, Object> m, String key, Object v) {
+		m.put(key, v == null ? "" : v);
+	}
+	
+	public Map<String, Object> checkServer() {
+		Map<String, Object> result = new Hashtable<>();
+		result.put("allowSelfRegister",  "1".equals(cfgDao.getConfValue(CONFIG_FRONTEND_REGISTER_KEY, String.class, "0")));
+		result.put("allowSoapRegister",  "1".equals(cfgDao.getConfValue(CONFIG_SOAP_REGISTER_KEY, String.class, "0")));
+		result.put("allowOauthRegister",  "1".equals(cfgDao.getConfValue(CONFIG_OAUTH_REGISTER_KEY, String.class, "0")));
+		return result;
+	}
+	
+	public Map<Long, String> getStates() {
+		Map<Long, String> result = new Hashtable<>();
+		for (State s : stateDao.getStates()) {
+			result.put(s.getState_id(), s.getName());
+		}
+		return result;
+	}
+	
+	public String[] getTimezones() {
+		return TimeZone.getAvailableIDs();
+	}
+	
+	public Map<String, Object> loginGoogle(Map<String, String> umap) {
+		Map<String, Object> result = getResult();
+		try {
+			if ("1".equals(cfgDao.getConfValue(CONFIG_OAUTH_REGISTER_KEY, String.class, "0"))) {
+				User u = userManager.loginOAuth(umap, 2); //TODO hardcoded
+				result = login(u, result);
+			}
+		} catch (Exception e) {
+			log.error("[loginGoogle]", e);
+		}
+		return result;
+	}
+	
+	public Map<String, Object> registerUser(Map<String, String> umap) {
+		Map<String, Object> result = getResult();
+		try {
+			if ("1".equals(cfgDao.getConfValue(CONFIG_FRONTEND_REGISTER_KEY, String.class, "0"))) {
+				String login = umap.get("login");
+				String email = umap.get("email");
+				String lastname = umap.get("lastname");
+				String firstname = umap.get("firstname");
+				if (firstname == null) {
+					firstname = "";
+				}
+				if (lastname == null) {
+					lastname = "";
+				}
+				String password = umap.get("password");
+				String tzId = umap.get("tzId");
+				Long stateId = Long.valueOf(umap.get("stateId"));
+				Long langId = Long.valueOf(umap.get("langId"));
+				
+				//FIXME TODO unify with Register dialog
+				String hash = ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(
+						login + CalendarPatterns.getDateWithTimeByMiliSeconds(new Date()));
+
+				String baseURL = cfgDao.getBaseUrl();
+				boolean sendConfirmation = !Strings.isEmpty(baseURL)
+						&& 1 == cfgDao.getConfValue("sendEmailWithVerficationCode", Integer.class, "0");
+				Long userId = userManager.registerUserInit(UserDao.getDefaultRights(), login, password, lastname
+						, firstname, email, null /* age/birthday */, "" /* street */
+						, "" /* additionalname */, "" /* fax */, "" /* zip */, stateId
+						, "" /* town */, langId, true /* sendWelcomeMessage */
+						, Arrays.asList(cfgDao.getConfValue(CONFIG_DEFAULT_GROUP_ID, Long.class, null)),
+						"" /* phone */, false, sendConfirmation, TimeZone.getTimeZone(tzId),
+						false /* forceTimeZoneCheck */, "" /* userOffers */, "" /* userSearchs */, false /* showContactData */,
+						true /* showContactDataToContacts */, hash);
+				if (userId == null) {
+					//do nothing
+				} else if (userId > 0) {
+					User u = userDao.get(userId);
+					if (sendConfirmation) {
+						add(result, "status", -666L);
+					} else {
+						result = login(u, result);
+					}
+				} else {
+					add(result, "status", userId);
+				}
+			}
+		} catch (Exception e) {
+			log.error("[registerUser]", e);
+		}
+		return result;
+	}
+	
+	public Map<String, Object> loginUser(String login, String password) {
+		Map<String, Object> result = getResult();
+		try {
+			User u = userDao.login(login, password);
+			result = login(u, result);
+		} catch (OmException e) {
+			result.put("status", e.getCode());
+		} catch (Exception e) {
+			log.error("[loginUser]", e);
+		}
+		return result;
+	}
+	
+	private Map<String, Object> getResult() {
+		Map<String, Object> result = new Hashtable<>();
+		result.put("status", -1);
+		return result;
+	}
+	
+	private Map<String, Object> login(User u, Map<String, Object> result) {
+		if (u != null) {
+			Sessiondata sd = sessionDao.startsession();
+			boolean bool = sessionDao.updateUser(sd.getSession_id(), u.getUser_id(), false, u.getLanguage_id());
+			if (!bool) {
+				// invalid Session-Object
+				result.put("status", -35);
+			} else {
+				IConnection conn = Red5.getConnectionLocal();
+				String streamId = conn.getClient().getId();
+				Client c = sessionManager.getClientByStreamId(streamId, null);
+				if (c == null) {
+					c = sessionManager.addClientListItem(streamId, conn.getScope().getName(), conn.getRemotePort(),
+						conn.getRemoteAddress(), "", false, null);
+				}
+				
+				SessionVariablesUtil.initClient(conn.getClient(), false, c.getPublicSID());
+				c.setUser_id(u.getUser_id());
+				c.setFirstname(u.getFirstname());
+				c.setLastname(u.getLastname());
+				c.setMobile(true);
+				sessionManager.updateClientByStreamId(streamId, c, false, null);
+
+				add(result, "sid", sd.getSession_id());
+				add(result, "publicSid", c.getPublicSID());
+				add(result, "status", 0);
+				add(result, "userId", u.getUser_id());
+				add(result, "firstname", u.getFirstname());
+				add(result, "lastname", u.getLastname());
+				add(result, "login", u.getLogin());
+				add(result, "email", u.getAdresses() == null ? "" : u.getAdresses().getEmail());
+				add(result, "language", u.getLanguage_id()); //TODO rights
+			}
+		}
+		return result;
+	}
+	
+	public List<Map<String, Object>> getVideoStreams() {
+		List<Map<String, Object>> result = new ArrayList<Map<String,Object>>();
+		// Notify all clients of the same scope (room)
+		IConnection current = Red5.getConnectionLocal();
+		for (IConnection conn : current.getScope().getClientConnections()) {
+			if (conn != null && conn instanceof IServiceCapableConnection) {
+				Client c = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+				if ((c.isMobile() || c.getIsAVClient()) && !Strings.isEmpty(c.getAvsettings()) && !Boolean.TRUE.equals(c.getIsScreenClient())) {
+					Map<String, Object> map = new Hashtable<String, Object>();
+					add(map, "streamId", c.getStreamid());
+					add(map, "broadCastId", c.getBroadCastID());
+					add(map, "userId", c.getUser_id());
+					add(map, "firstname", c.getFirstname());
+					add(map, "lastname", c.getLastname());
+					add(map, "publicSid", c.getPublicSID());
+					add(map, "login", c.getUsername());
+					add(map, "email", c.getEmail());
+					add(map, "avsettings", c.getAvsettings());
+					add(map, "interviewPodId", c.getInterviewPodId());
+					add(map, "vWidth", c.getVWidth());
+					add(map, "vHeight", c.getVHeight());
+					result.add(map);
+				}
+			}
+		}
+		return result;
+	}
+
+	private void addRoom(String type, String org, boolean first, List<Map<String, Object>> result, Room r) {
+		Map<String, Object> room = new Hashtable<String, Object>();
+		room.put("id", r.getRooms_id());
+		room.put("name", r.getName());
+		room.put("type", type);
+		room.put("roomTypeId", r.getRoomtype().getRoomtypes_id());
+		if (org != null) {
+			room.put("org", org);
+		}
+		room.put("first", first);
+		room.put("users", sessionManager.getClientListByRoom(r.getRooms_id()).size());
+		room.put("total", r.getNumberOfPartizipants());
+		room.put("audioOnly", Boolean.TRUE.equals(r.getIsAudioOnly()));
+		result.add(room);
+	}
+	
+	public List<Map<String, Object>> getRooms() {
+		List<Map<String, Object>> result = new ArrayList<Map<String,Object>>();
+		// FIXME duplicated code
+		IConnection current = Red5.getConnectionLocal();
+		Client c = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+		User u = userDao.get(c.getUser_id());
+		//my rooms
+		List<Room> myl = new ArrayList<Room>();
+		myl.add(roomManager.getRoomByOwnerAndTypeId(u.getUser_id(), 1L, labelDao.getString(1306L, u.getLanguage_id())));
+		myl.add(roomManager.getRoomByOwnerAndTypeId(u.getUser_id(), 3L, labelDao.getString(1307L, u.getLanguage_id())));
+		myl.addAll(roomDao.getAppointedRoomsByUser(u.getUser_id()));
+		for (Room r : myl) {
+			addRoom("my", null, false, result, r);
+		}
+		
+		//private rooms
+		for (Organisation_Users ou : u.getOrganisation_users()) {
+			Organisation org = ou.getOrganisation();
+			boolean first = true;
+			for (Room r : roomDao.getOrganisationRooms(org.getOrganisation_id())) {
+				addRoom("private", org.getName(), first, result, r);
+				first = false;
+			}
+		}
+		
+		//public rooms
+		for (Room r : roomDao.getPublicRooms()) {
+			addRoom("public", null, false, result, r);
+		}
+		return result;
+	}
+	
+	public Map<String, Object> roomConnect(String SID, Long userId) {
+		Map<String, Object> result = new Hashtable<String, Object>();
+		User u = userDao.get(userId);
+		Client c = scopeAdapter.setUsernameReconnect(SID, userId, u.getLogin(), u.getFirstname(), u.getLastname(), u.getPictureuri());
+		 //TODO check if we need anything here
+		long broadcastId = scopeAdapter.getBroadCastId();
+		c.setSipTransport(true);
+		c.setRoom_id(Long.parseLong(c.getScope()));
+		c.setRoomEnter(new Date());
+		c.setBroadCastID(broadcastId);
+		c.setMobile(true);
+		c.setIsBroadcasting(true);
+		sessionManager.updateClientByStreamId(c.getStreamid(), c, false, null);
+		result.put("broadcastId", broadcastId);
+		result.put("publicSid", c.getPublicSID());
+
+		scopeAdapter.sendMessageToCurrentScope("addNewUser", c, false, false);
+		return result;
+	}
+
+	public Map<String, Object> updateAvMode(String avMode, String width, String height, Integer interviewPodId) {
+		IConnection current = Red5.getConnectionLocal();
+		Client c = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+		c.setAvsettings(avMode);
+		c.setVWidth(Integer.parseInt(width));
+		c.setVHeight(Integer.parseInt(height));
+		if (interviewPodId > 0) {
+			c.setInterviewPodId(interviewPodId);
+		}
+		sessionManager.updateClientByStreamId(c.getStreamid(), c, false, null);
+		HashMap<String, Object> hsm = new HashMap<String, Object>();
+		hsm.put("client", c);
+		hsm.put("message", new String[]{"avsettings", "0", avMode});
+		Map<String, Object> result = new Hashtable<String, Object>();
+		if (!"n".equals(avMode)) {
+			result.put("broadcastId", scopeAdapter.getBroadCastId());
+		}
+
+		scopeAdapter.sendMessageToCurrentScope("sendVarsToMessageWithClient", hsm, true, false);
+		return result;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/PrintService.java b/src/main/java/org/apache/openmeetings/remote/PrintService.java
new file mode 100644
index 0000000..1426a44
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/PrintService.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+import org.apache.openmeetings.batik.beans.PrintBean;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.crypt.MD5;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class PrintService {
+
+
+	private static final Logger log = Red5LoggerFactory.getLogger(PrintService.class, OpenmeetingsVariables.webAppRootKey);	
+	
+	private static HashMap<String,PrintBean> currentExportList = new HashMap<String,PrintBean>();
+	@Autowired
+	private SessiondataDao sessiondataDao;
+    @Autowired
+    private UserDao userDao;
+	
+	/*
+	 * Export List
+	 * 
+	 */
+	
+	public String addPrintList(String SID, @SuppressWarnings("rawtypes") List map, int width, int height) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+	        if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+	        	String hashRaw = ""+new Date();
+	        	String hash = MD5.do_checksum(hashRaw);
+	        	PrintService.addPrintItembyMap(hash, map, width, height);
+	        	return hash;
+	        }
+		} catch (Exception err) {
+    		log.error("loginUser",err);
+    	}
+    	return null;
+	}
+	
+	public static synchronized PrintBean getPrintItemByHash(String hash) throws Exception {
+		PrintBean itemList = currentExportList.get(hash);
+//		if (itemList != null) {
+//			currentExportList.remove(hash);
+//		}
+		return itemList;
+	}
+	
+	public static synchronized void addPrintItembyMap(String hash, @SuppressWarnings("rawtypes") List map, int width, int height) throws Exception {
+		PrintBean pBean = new PrintBean(hash, map, width, height);
+		currentExportList.put(hash, pBean);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/UserService.java b/src/main/java/org/apache/openmeetings/remote/UserService.java
new file mode 100644
index 0000000..fedbc0c
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/UserService.java
@@ -0,0 +1,502 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.SENT_FOLDER_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.TimeZone;
+
+import org.apache.openmeetings.cluster.SlaveHTTPConnectionManager;
+import org.apache.openmeetings.db.dao.calendar.AppointmentCategoryDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.IUserService;
+import org.apache.openmeetings.db.dao.user.PrivateMessagesDao;
+import org.apache.openmeetings.db.dao.user.SalutationDao;
+import org.apache.openmeetings.db.dao.user.UserContactsDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.db.entity.user.Salutation;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.UserContact;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.mail.MailHandler;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebClient;
+import org.apache.openmeetings.web.mail.template.AbstractTemplatePanel;
+import org.apache.openmeetings.web.util.ContactsHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.scope.IScope;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Provides method to manipulate {@link User}
+ * 
+ * @author sebawagner
+ * 
+ */
+public class UserService implements IUserService {
+	private static final Logger log = Red5LoggerFactory.getLogger(UserService.class, webAppRootKey);
+
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	private ScopeApplicationAdapter scopeApplicationAdapter;
+	@Autowired
+	private AppointmentDao appointmentDao;
+	@Autowired
+	private AppointmentCategoryDao appointmentCategoryDao;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private SalutationDao salutationmanagement;
+	@Autowired
+	private PrivateMessagesDao privateMessagesDao;
+	@Autowired
+	private UserContactsDao userContactsDao;
+	@Autowired
+	private MailHandler mailHandler;
+	@Autowired
+	private TimezoneUtil timezoneUtil;
+	@Autowired
+	private ServerDao serverDao;
+	@Autowired
+	private SlaveHTTPConnectionManager slaveHTTPConnectionManager;
+	@Autowired
+	private LabelDao labelDao;
+	@Autowired
+	private RoomTypeDao roomTypeDao;
+
+	/**
+	 * get user by id, admin only
+	 * 
+	 * @param SID
+	 * @param user_id
+	 * @return User with the id given
+	 */
+	public User getUserById(String SID, long user_id) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+			return userDao.get(user_id);
+		}
+		return null;
+	}
+
+	/**
+	 * refreshes the current SID
+	 * 
+	 * @param SID
+	 * @return "ok" string in case of success, "error" string in case of the error
+	 */
+	public String refreshSession(String SID) {
+		try {
+			sessiondataDao.checkSession(SID);
+			return "ok";
+		} catch (Exception err) {
+			log.error("[refreshSession]", err);
+		}
+		return "error";
+	}
+
+	/**
+	 * get all availible Salutations
+	 * 
+	 * @param SID
+	 * @return all availible Salutations
+	 */
+	public List<Salutation> getUserSalutations(String SID, long language_id) {
+		return salutationmanagement.getUserSalutations(language_id);
+	}
+
+	/**
+	 * gets a whole user-list(admin-role only)
+	 * 
+	 * @param SID
+	 * @param start
+	 * @param max
+	 * @param orderby
+	 * @return whole user-list
+	 */
+	public List<User> getUserList(String SID, int start, int max, String orderby, boolean asc) {
+		Long users_id = sessiondataDao.checkSession(SID);
+		if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+			return userDao.get("", start, max, orderby + (asc ? " ASC" : " DESC"));
+		}
+		return null;
+	}
+
+	/**
+	 * kicks a user from the server, also from slaves if needed, this method is
+	 * only invoked by the connection administration UI
+	 * 
+	 * @param SID
+	 * @param streamid
+	 * @param serverId
+	 *            0 means the session is locally, otherwise we have to perform a
+	 *            REST call
+	 * @return - true if user has sufficient permissions, false otherwise
+	 */
+	public Boolean kickUserByStreamId(String SID, String streamid, long serverId) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// admins only
+			if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+				if (serverId == 0) {
+					Client rcl = sessionManager.getClientByStreamId(streamid, null);
+
+					if (rcl == null) {
+						return true;
+					}
+					String scopeName = "hibernate";
+					if (rcl.getRoom_id() != null) {
+						scopeName = rcl.getRoom_id().toString();
+					}
+					IScope currentScope = scopeApplicationAdapter.getRoomScope(scopeName);
+
+					HashMap<Integer, String> messageObj = new HashMap<Integer, String>();
+					messageObj.put(0, "kick");
+					scopeApplicationAdapter.sendMessageById(messageObj, streamid, currentScope);
+
+					scopeApplicationAdapter.roomLeaveByScope(rcl, currentScope, true);
+
+					return true;
+				} else {
+					Server server = serverDao.get(serverId);
+					Client rcl = sessionManager.getClientByStreamId(
+							streamid, server);
+					slaveHTTPConnectionManager.kickSlaveUser(server, rcl.getPublicSID());
+					
+					// true means only the REST call is performed, it is no
+					// confirmation that the user is really kicked from the
+					// slave
+					return true;
+				}
+			}
+		} catch (Exception err) {
+			log.error("[kickUserByStreamId]", err);
+		}
+		return false;
+	}
+
+	public User updateUserSelfTimeZone(String SID, String jname) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// users only
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				User us = userDao.get(users_id);
+
+				us.setTimeZoneId(timezoneUtil.getTimezoneByInternalJName(jname).getID());
+				us.setForceTimeZoneCheck(false);
+				us.setUpdatetime(new Date());
+
+				userDao.update(us, users_id);
+				
+				return us;
+			}
+		} catch (Exception err) {
+			log.error("[updateUserTimeZone]", err);
+		}
+		return null;
+	}
+
+	@Deprecated
+	public Long requestUserToContactList(String SID, Long userToAdd_id,
+			String domain, String port, String webapp) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// users only
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				return ContactsHelper.addUserToContactList(userToAdd_id);
+			}
+		} catch (Exception err) {
+			log.error("[requestuserToContactList]", err);
+		}
+		return null;
+	}
+
+	public List<UserContact> getPendingUserContacts(String SID) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// users only
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				List<UserContact> uList = userContactsDao.getContactRequestsByUserAndStatus(users_id, true);
+
+				return uList;
+			}
+		} catch (Exception err) {
+			log.error("[getPendingUserContact]", err);
+		}
+		return null;
+	}
+
+	public List<UserContact> getUserContacts(String SID) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// users only
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				List<UserContact> uList = userContactsDao.getContactsByUserAndStatus(users_id, false);
+
+				return uList;
+			}
+		} catch (Exception err) {
+			log.error("[getPendingUserContact]", err);
+		}
+		return null;
+	}
+
+	public Integer removeContactUser(String SID, Long userContactId) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// users only
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				UserContact userContacts = userContactsDao.get(userContactId);
+
+				if (userContacts == null) {
+					return -49;
+				}
+
+				return userContactsDao.deleteUserContact(userContactId);
+			}
+		} catch (Exception err) {
+			log.error("[removeContactUser]", err);
+		}
+		return null;
+	}
+
+	private Date createCalendarDate(TimeZone timezone, String dateOnly,
+			String time) {
+		Integer hour = Integer.valueOf(time.substring(0, 2)).intValue();
+		Integer minute = Integer.valueOf(time.substring(3, 5)).intValue();
+
+		log.info("createCalendar Hour: " + hour);
+		log.info("createCalendar Minute: " + minute);
+
+		Calendar cal = TimezoneUtil.getCalendarInTimezone(dateOnly, timezone);
+		cal.set(Calendar.HOUR_OF_DAY, hour);
+		cal.set(Calendar.MINUTE, minute);
+		cal.set(Calendar.SECOND, 0);
+		cal.set(Calendar.MILLISECOND, 0);
+
+		return cal.getTime();
+	}
+
+	public Long composeMail(String SID, List<String> recipients,
+			String subject, String message, Boolean bookedRoom,
+			String validFromDate, String validFromTime, String validToDate,
+			String validToTime, Long parentMessageId, Long roomtype_id,
+			String domain, String port, String webapp) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// users only
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				User from = userDao.get(users_id);
+
+				Appointment a = new Appointment();
+				if (a.getMeetingMembers() == null) {
+					a.setMeetingMembers(new ArrayList<MeetingMember>());
+				}
+				for (String email : recipients) {
+					MeetingMember mm = new MeetingMember();
+					mm.setAppointment(a);
+					mm.setUser(userDao.getContact(email, users_id));
+					a.getMeetingMembers().add(mm);
+				}
+				if (bookedRoom) {
+					TimeZone timezone = timezoneUtil.getTimeZone(from);
+					Date start = createCalendarDate(timezone, validFromDate, validFromTime);
+					Date end = createCalendarDate(timezone, validToDate, validToTime);
+
+					log.info("validFromDate: " + CalendarPatterns.getDateWithTimeByMiliSeconds(start));
+					log.info("validToDate: " + CalendarPatterns.getDateWithTimeByMiliSeconds(end));
+
+					a.setTitle(subject);
+					a.setDescription(message);
+					a.setStart(start);
+					a.setEnd(end);
+					a.setCategory(appointmentCategoryDao.get(1L));
+					a.setOwner(from);
+					
+					a.setRoom(new Room());
+					a.getRoom().setAppointment(true);
+					a.getRoom().setName(subject);
+					a.getRoom().setRoomtype(roomTypeDao.get(roomtype_id));
+					a.getRoom().setNumberOfPartizipants(100L);
+					a.getRoom().setAllowUserQuestions(true);
+					a.getRoom().setAllowFontStyles(true);
+
+					a = appointmentDao.update(a, users_id);
+				}
+				for (MeetingMember mm : a.getMeetingMembers()) {
+					User to = mm.getUser();
+					Room room = a.getRoom();
+					
+					// We do not send an email to the one that has created the
+					// private message
+					if (to != null && from.getUser_id().equals(to.getUser_id())) {
+						continue;
+					}
+
+					//TODO should be reviewed
+					// One message to the Send
+					privateMessagesDao.addPrivateMessage(subject,
+							message, SENT_FOLDER_ID, from, to, from,
+							bookedRoom, room, false, 0L);
+
+					// One message to the Inbox
+					privateMessagesDao.addPrivateMessage(subject,
+							message, INBOX_FOLDER_ID, from, to, to,
+							bookedRoom, room, false, 0L);
+
+					if (to.getAdresses() != null) {
+						AbstractTemplatePanel.ensureApplication(from.getLanguage_id());
+						String aLinkHTML = 	"<br/><br/>" + "<a href='" + ContactsHelper.getLink() + "'>"
+									+  labelDao.getString(1302, from.getLanguage_id()) + "</a><br/>";
+						
+						mailHandler.send(to.getAdresses().getEmail(),
+								labelDao.getString(1301, from.getLanguage_id()) + subject,
+								message.replaceAll("\\<.*?>", "") + aLinkHTML);
+					}
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[composeMail]", err);
+		}
+		return null;
+	}
+
+	public Boolean checkUserIsInContactList(String SID, Long user_id) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// users only
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				List<UserContact> uList = userContactsDao.getContactsByUserAndStatus(users_id, false);
+
+				for (UserContact userContact : uList) {
+					if (userContact.getContact().getUser_id().equals(user_id)) {
+						return true;
+					}
+				}
+
+				return false;
+			}
+		} catch (Exception err) {
+			log.error("[checkUserIsInContactList]", err);
+		}
+		return null;
+	}
+
+	public void shareCalendarUserContact(String SID, Long userContactId, Boolean shareCalendar) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			// users only
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				UserContact userContacts = userContactsDao.get(userContactId);
+
+				userContacts.setShareCalendar(shareCalendar);
+
+				userContactsDao.update(userContacts);
+			}
+		} catch (Exception err) {
+			log.error("[shareCalendarUserContact]", err);
+		}
+	}
+
+	/**
+	 * Kick a user by its publicSID.<br/>
+	 * <br/>
+	 * <i>Note:</i>
+	 * This method will not perform a call to the slave, cause this call can only be 
+	 * invoked from inside the conference room, that means all clients are on the
+	 * same server, no matter if clustered or not.
+	 * 
+	 * @param SID
+	 * @param publicSID
+	 * @return - true in case user have sufficient permissions, null otherwise
+	 */
+	public Boolean kickUserByPublicSID(String SID, String publicSID) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// users only
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				Client rcl = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+				if (rcl == null) {
+					return true;
+				}
+				String scopeName = "hibernate";
+				if (rcl.getRoom_id() != null) {
+					scopeName = rcl.getRoom_id().toString();
+				}
+				IScope currentScope = this.scopeApplicationAdapter
+						.getRoomScope(scopeName);
+
+				HashMap<Integer, String> messageObj = new HashMap<Integer, String>();
+				messageObj.put(0, "kick");
+
+				scopeApplicationAdapter.sendMessageById(messageObj, rcl.getStreamid(), currentScope);
+				scopeApplicationAdapter.roomLeaveByScope(rcl, currentScope, true);
+
+				return true;
+			}
+		} catch (Exception err) {
+			log.error("[kickUserByPublicSID]", err);
+		}
+		return null;
+	}
+
+	@Override
+	public Boolean kickUserBySessionId(String SID, long userId, String sessionId) {
+		try {
+			Long users_id = sessiondataDao.checkSession(SID);
+			// admin only
+			if (AuthLevelUtil.hasAdminLevel(userDao.getRights(users_id))) {
+				WebClient client = Application.getClientByKeys(userId, sessionId);
+				if (client != null) {
+					Application.invalidateClient(client);
+				}
+			}
+		} catch (Exception err) {
+			log.error("[kickUserBySessionId]", err);
+		}
+		return null;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/WhiteBoardService.java b/src/main/java/org/apache/openmeetings/remote/WhiteBoardService.java
new file mode 100644
index 0000000..6546840
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/WhiteBoardService.java
@@ -0,0 +1,646 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Map;
+
+import org.apache.commons.collections.ComparatorUtils;
+import org.apache.openmeetings.data.whiteboard.WhiteBoardObjectListManagerById;
+import org.apache.openmeetings.data.whiteboard.WhiteBoardObjectSyncManager;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.room.Cliparts;
+import org.apache.openmeetings.db.dto.room.WhiteboardObject;
+import org.apache.openmeetings.db.dto.room.WhiteboardObjectList;
+import org.apache.openmeetings.db.dto.room.WhiteboardSyncLockObject;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.IConnection;
+import org.red5.server.api.Red5;
+import org.red5.server.api.scope.IScope;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * @author sebastianwagner
+ * 
+ */
+public class WhiteBoardService implements IPendingServiceCallback {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			WhiteBoardService.class, "openmeetings");
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private final ScopeApplicationAdapter scopeApplicationAdapter = null;
+	@Autowired
+	private final ISessionManager sessionManager = null;
+	@Autowired
+	private final WhiteBoardObjectSyncManager whiteBoardObjectListManager = null;
+	@Autowired
+	private final WhiteBoardObjectListManagerById whiteBoardObjectListManagerById = null;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+
+	public Long getNewWhiteboardId() {
+		try {
+
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+			Long room_id = currentClient.getRoom_id();
+
+			Long whiteBoardId = this.whiteBoardObjectListManagerById
+					.getNewWhiteboardId(room_id);
+
+			return whiteBoardId;
+
+		} catch (Exception err) {
+			log.error("[deleteWhiteboard]", err);
+		}
+		return null;
+	}
+
+	public Boolean deleteWhiteboard(Long whiteBoardId) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+			Long room_id = currentClient.getRoom_id();
+
+			WhiteboardObjectList whiteboardObjectList = this.whiteBoardObjectListManagerById
+					.getWhiteBoardObjectListByRoomId(room_id);
+
+			for (Iterator<Long> iter = whiteboardObjectList
+					.getWhiteboardObjects().keySet().iterator(); iter.hasNext();) {
+				Long storedWhiteboardId = iter.next();
+
+				log.debug(" :: storedWhiteboardId :: " + storedWhiteboardId);
+
+				if (storedWhiteboardId.equals(whiteBoardId)) {
+					log.debug("Found Whiteboard to Remove");
+				}
+			}
+			Object returnValue = whiteboardObjectList.getWhiteboardObjects()
+					.remove(whiteBoardId);
+
+			log.debug(" :: whiteBoardId :: " + whiteBoardId);
+
+			this.whiteBoardObjectListManagerById
+					.setWhiteBoardObjectListRoomObj(room_id,
+							whiteboardObjectList);
+
+			if (returnValue != null) {
+				return true;
+			} else {
+				return false;
+			}
+
+		} catch (Exception err) {
+			log.error("[deleteWhiteboard]", err);
+		}
+		return null;
+	}
+
+	public WhiteboardObjectList getRoomItemsBy() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+			Long room_id = currentClient.getRoom_id();
+
+			log.debug("getRoomItems: " + room_id);
+			WhiteboardObjectList whiteboardObjectList = this.whiteBoardObjectListManagerById
+					.getWhiteBoardObjectListByRoomId(room_id);
+
+			if (whiteboardObjectList.getWhiteboardObjects().size() == 0) {
+
+				Long whiteBoardId = this.whiteBoardObjectListManagerById
+						.getNewWhiteboardId(room_id);
+
+				this.whiteBoardObjectListManagerById
+						.setWhiteBoardObjectListRoomObjAndWhiteboardId(room_id,
+								new WhiteboardObject(), whiteBoardId);
+
+				log.debug("Init New Room List");
+
+				whiteboardObjectList = this.whiteBoardObjectListManagerById
+						.getWhiteBoardObjectListByRoomId(room_id);
+
+				return whiteboardObjectList;
+
+			} else {
+
+				return whiteboardObjectList;
+
+			}
+
+			// return completeList;
+		} catch (Exception err) {
+			log.error("[getRoomItemsBy]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * change the draw status of a user, allow disallow him to draw anybody
+	 * besides the Moderator to draw on the whiteboard, only a Moderator is
+	 * allowed to trigger this function
+	 * 
+	 * @param SID
+	 * @param publicSID
+	 * @param canDraw
+	 * @return null in case of success, false otherwise
+	 */
+	public Boolean setCanDraw(String SID, String publicSID, boolean canDraw) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				if (currentClient.getIsMod()) {
+					Client rcl = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+					if (rcl != null) {
+						rcl.setCanDraw(canDraw);
+						sessionManager.updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
+
+						HashMap<Integer, Object> newMessage = new HashMap<Integer, Object>();
+						newMessage.put(0, "updateDrawStatus");
+						newMessage.put(1, rcl);
+						scopeApplicationAdapter.sendMessageWithClientWithSyncObject(newMessage, true);
+					} else {
+						return false;
+					}
+				} else {
+					return false;
+				}
+			}
+		} catch (Exception err) {
+			log.error("[setCanDraw]", err);
+		}
+		return null;
+	}
+
+	public Boolean setCanShare(String SID, String publicSID, boolean canShare) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				if (currentClient.getIsMod()) {
+					Client rcl = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+					if (rcl != null) {
+						rcl.setCanShare(canShare);
+						sessionManager.updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
+
+						HashMap<Integer, Object> newMessage = new HashMap<Integer, Object>();
+						newMessage.put(0, "updateDrawStatus");
+						newMessage.put(1, rcl);
+						scopeApplicationAdapter.sendMessageWithClientWithSyncObject(newMessage, true);
+					} else {
+						return false;
+					}
+				} else {
+					return false;
+				}
+			}
+		} catch (Exception err) {
+			log.error("[setCanShare]", err);
+		}
+		return null;
+	}
+
+	public Boolean setCanRemote(String SID, String publicSID, boolean canRemote) {
+		try {
+
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+
+				if (currentClient.getIsMod()) {
+					Client rcl = this.sessionManager
+							.getClientByPublicSID(publicSID, false, null);
+
+					if (rcl != null) {
+						rcl.setCanRemote(canRemote);
+						this.sessionManager.updateClientByStreamId(
+								rcl.getStreamid(), rcl, false, null);
+
+						HashMap<Integer, Object> newMessage = new HashMap<Integer, Object>();
+						newMessage.put(0, "updateDrawStatus");
+						newMessage.put(1, rcl);
+						this.scopeApplicationAdapter
+								.sendMessageWithClientWithSyncObject(newMessage, true);
+
+					} else {
+						return false;
+					}
+				} else {
+					return false;
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[setCanDraw]", err);
+		}
+		return null;
+	}
+
+    public Boolean setCanGiveAudio(String SID, String publicSID, boolean canGiveAudio) {
+		try {
+            log.debug("[setCanGiveAudio] " + SID + ", " + publicSID + ", " + canGiveAudio);
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+
+			Long users_id = sessiondataDao.checkSession(SID);
+
+			if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
+				if (currentClient.getIsMod()) {
+					Client rcl = this.sessionManager
+							.getClientByPublicSID(publicSID, false, null);
+
+					if (rcl != null) {
+						rcl.setCanGiveAudio(canGiveAudio);
+				        this.sessionManager.updateClientByStreamId(
+				                rcl.getStreamid(), rcl, false, null);
+
+				        HashMap<Integer, Object> newMessage = new HashMap<Integer, Object>();
+				        newMessage.put(0, "updateGiveAudioStatus");
+				        newMessage.put(1, rcl);
+				        this.scopeApplicationAdapter
+				                .sendMessageWithClientWithSyncObject(newMessage, true);
+					} else {
+						return false;
+					}
+				} else {
+					return false;
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[setCanGiveAudio]", err);
+		}
+		return null;
+	}
+
+	public WhiteboardSyncLockObject startNewSyncprocess() {
+		try {
+
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+			Long room_id = currentClient.getRoom_id();
+
+			WhiteboardSyncLockObject wSyncLockObject = new WhiteboardSyncLockObject();
+			wSyncLockObject.setAddtime(new Date());
+			wSyncLockObject.setPublicSID(currentClient.getPublicSID());
+			wSyncLockObject.setInitialLoaded(true);
+
+			Map<String, WhiteboardSyncLockObject> syncListRoom = this.whiteBoardObjectListManager
+					.getWhiteBoardSyncListByRoomid(room_id);
+
+			wSyncLockObject.setCurrentLoadingItem(true);
+			wSyncLockObject.setStarttime(new Date());
+
+			syncListRoom.put(currentClient.getPublicSID(), wSyncLockObject);
+			this.whiteBoardObjectListManager.setWhiteBoardSyncListByRoomid(
+					room_id, syncListRoom);
+			
+			//Sync to clients
+			this.scopeApplicationAdapter.sendMessageToCurrentScope("sendSyncFlag", wSyncLockObject, true);
+
+			return wSyncLockObject;
+
+		} catch (Exception err) {
+			log.error("[startNewSyncprocess]", err);
+		}
+		return null;
+	}
+
+	public void sendCompletedSyncEvent() {
+		try {
+
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+			Long room_id = currentClient.getRoom_id();
+
+			Map<String, WhiteboardSyncLockObject> syncListRoom = this.whiteBoardObjectListManager
+					.getWhiteBoardSyncListByRoomid(room_id);
+
+			WhiteboardSyncLockObject wSyncLockObject = syncListRoom
+					.get(currentClient.getPublicSID());
+
+			if (wSyncLockObject == null) {
+				log.error("WhiteboardSyncLockObject not found for this Client "
+						+ syncListRoom);
+				return;
+			} else if (!wSyncLockObject.isCurrentLoadingItem()) {
+				log.warn("WhiteboardSyncLockObject was not started yet "
+						+ syncListRoom);
+				return;
+			} else {
+				syncListRoom.remove(currentClient.getPublicSID());
+				this.whiteBoardObjectListManager.setWhiteBoardSyncListByRoomid(
+						room_id, syncListRoom);
+
+				int numberOfInitial = this
+						.getNumberOfInitialLoaders(syncListRoom);
+
+				if (numberOfInitial == 0) {
+					scopeApplicationAdapter.sendMessageToCurrentScope("sendSyncCompleteFlag", wSyncLockObject, true);
+				} else {
+					return;
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[sendCompletedSyncEvent]", err);
+		}
+		return;
+	}
+
+	private int getNumberOfInitialLoaders(
+			Map<String, WhiteboardSyncLockObject> syncListRoom)
+			throws Exception {
+		int number = 0;
+		for (Iterator<String> iter = syncListRoom.keySet().iterator(); iter
+				.hasNext();) {
+			WhiteboardSyncLockObject lockObject = syncListRoom.get(iter.next());
+			if (lockObject.isInitialLoaded()) {
+				number++;
+			}
+		}
+		return number;
+	}
+
+	/*
+	 * Image Sync Sequence
+	 */
+
+	public void startNewObjectSyncProcess(String object_id, boolean isStarting) {
+		try {
+
+			log.debug("startNewObjectSyncprocess: " + object_id);
+
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+			Long room_id = currentClient.getRoom_id();
+
+			WhiteboardSyncLockObject wSyncLockObject = new WhiteboardSyncLockObject();
+			wSyncLockObject.setAddtime(new Date());
+			wSyncLockObject.setPublicSID(currentClient.getPublicSID());
+			wSyncLockObject.setStarttime(new Date());
+
+			Map<String, WhiteboardSyncLockObject> syncListImage = this.whiteBoardObjectListManager
+					.getWhiteBoardObjectSyncListByRoomAndObjectId(room_id,
+							object_id);
+			syncListImage.put(currentClient.getPublicSID(), wSyncLockObject);
+			this.whiteBoardObjectListManager
+					.setWhiteBoardImagesSyncListByRoomAndObjectId(room_id,
+							object_id, syncListImage);
+
+			// Do only send the Token to show the Loading Splash for the
+			// initial-Request that starts the loading
+			if (isStarting) {
+				scopeApplicationAdapter.sendMessageToCurrentScope("sendObjectSyncFlag", wSyncLockObject, true);
+			}
+
+		} catch (Exception err) {
+			log.error("[startNewObjectSyncProcess]", err);
+		}
+	}
+
+	public int sendCompletedObjectSyncEvent(String object_id) {
+		try {
+
+			log.debug("sendCompletedObjectSyncEvent: " + object_id);
+
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(streamid, null);
+			Long room_id = currentClient.getRoom_id();
+
+			Map<String, WhiteboardSyncLockObject> syncListImage = this.whiteBoardObjectListManager
+					.getWhiteBoardObjectSyncListByRoomAndObjectId(room_id,
+							object_id);
+
+			log.debug("sendCompletedObjectSyncEvent syncListImage: "
+					+ syncListImage);
+
+			WhiteboardSyncLockObject wSyncLockObject = syncListImage
+					.get(currentClient.getPublicSID());
+
+			if (wSyncLockObject == null) {
+				log.error("WhiteboardSyncLockObject not found for this Client "
+						+ currentClient.getPublicSID());
+				log.error("WhiteboardSyncLockObject not found for this syncListImage "
+						+ syncListImage);
+				return -2;
+
+			} else {
+
+				log.debug("sendCompletedImagesSyncEvent remove: "
+						+ currentClient.getPublicSID());
+
+				syncListImage.remove(currentClient.getPublicSID());
+				this.whiteBoardObjectListManager
+						.setWhiteBoardImagesSyncListByRoomAndObjectId(room_id,
+								object_id, syncListImage);
+
+				int numberOfInitial = this.whiteBoardObjectListManager
+						.getWhiteBoardObjectSyncListByRoomid(room_id).size();
+
+				log.debug("sendCompletedImagesSyncEvent numberOfInitial: "
+						+ numberOfInitial);
+
+				if (numberOfInitial == 0) {
+					scopeApplicationAdapter.sendMessageToCurrentScope("sendObjectSyncCompleteFlag", wSyncLockObject, true);
+					return 1;
+				} else {
+					return -4;
+				}
+			}
+
+		} catch (Exception err) {
+			log.error("[sendCompletedObjectSyncEvent]", err);
+		}
+		return -1;
+	}
+
+	public synchronized void removeUserFromAllLists(IScope scope,
+			Client currentClient) {
+		try {
+
+			Long room_id = currentClient.getRoom_id();
+
+			// TODO: Maybe we should also check all rooms, independent from the
+			// current room_id if there is any user registered
+			if (room_id != null) {
+
+				log.debug("removeUserFromAllLists this.whiteBoardObjectListManager: "
+						+ this.whiteBoardObjectListManager);
+				log.debug("removeUserFromAllLists room_id: " + room_id);
+
+				// Check Initial Loaders
+				Map<String, WhiteboardSyncLockObject> syncListRoom = this.whiteBoardObjectListManager
+						.getWhiteBoardSyncListByRoomid(room_id);
+
+				WhiteboardSyncLockObject wSyncLockObject = syncListRoom
+						.get(currentClient.getPublicSID());
+
+				if (wSyncLockObject != null) {
+					syncListRoom.remove(currentClient.getPublicSID());
+				}
+				this.whiteBoardObjectListManager.setWhiteBoardSyncListByRoomid(
+						room_id, syncListRoom);
+
+				int numberOfInitial = this
+						.getNumberOfInitialLoaders(syncListRoom);
+
+				log.debug("scope " + scope);
+
+				if (numberOfInitial == 0 && scope != null) {
+					
+					scopeApplicationAdapter.sendMessageToCurrentScope("sendSyncCompleteFlag", wSyncLockObject, false);
+					
+				}
+
+				// Check Image Loaders
+				Map<String, Map<String, WhiteboardSyncLockObject>> syncListRoomImages = this.whiteBoardObjectListManager
+						.getWhiteBoardObjectSyncListByRoomid(room_id);
+
+				for (Iterator<String> iter = syncListRoomImages.keySet()
+						.iterator(); iter.hasNext();) {
+					String object_id = iter.next();
+					Map<String, WhiteboardSyncLockObject> syncListImages = syncListRoomImages
+							.get(object_id);
+					WhiteboardSyncLockObject wImagesSyncLockObject = syncListImages
+							.get(currentClient.getPublicSID());
+					if (wImagesSyncLockObject != null) {
+						syncListImages.remove(currentClient.getPublicSID());
+					}
+					this.whiteBoardObjectListManager
+							.setWhiteBoardImagesSyncListByRoomAndObjectId(
+									room_id, object_id, syncListImages);
+				}
+
+				int numberOfImageLoaders = this.whiteBoardObjectListManager
+						.getWhiteBoardObjectSyncListByRoomid(room_id).size();
+
+				if (numberOfImageLoaders == 0 && scope != null) {
+					scopeApplicationAdapter.sendMessageToCurrentScope("sendImagesSyncCompleteFlag", new Object[] { "remove" }, true);
+				}
+
+			}
+
+		} catch (Exception err) {
+			log.error("[removeUserFromAllLists]", err);
+		}
+	}
+
+	public Cliparts getClipArtIcons() {
+		try {
+			File clipart_dir = OmFileHelper.getPublicClipartsDir();
+
+			FilenameFilter getFilesOnly = new FilenameFilter() {
+				public boolean accept(File b, String name) {
+					File f = new File(b, name);
+					return !f.isDirectory();
+				}
+			};
+
+			FilenameFilter getDirectoriesOnly = new FilenameFilter() {
+				public boolean accept(File b, String name) {
+					File f = new File(b, name);
+					return f.isDirectory() && !f.getName().equals("thumb");
+				}
+			};
+
+			Cliparts cl = new Cliparts();
+			cl.setFolderName("general");
+
+			String[] files_general = clipart_dir.list(getFilesOnly);
+			@SuppressWarnings("unchecked")
+			Comparator<String> comparator = ComparatorUtils.naturalComparator();
+			Arrays.sort(files_general, comparator);
+
+			cl.setGeneralList(files_general);
+			cl.setSubCategories(new LinkedList<Cliparts>());
+
+			for (File dir : clipart_dir.listFiles(getDirectoriesOnly)) {
+				Cliparts cl_sub = new Cliparts();
+				cl_sub.setFolderName("math");
+				String[] files = dir.list(getFilesOnly);
+				Arrays.sort(files, comparator);
+				cl_sub.setGeneralList(files);
+				cl.getSubCategories().add(cl_sub);
+			}
+
+			return cl;
+
+		} catch (Exception err) {
+			log.error("[getClipArtIcons]", err);
+		}
+		return null;
+	}
+
+	public void resultReceived(IPendingServiceCall arg0) {
+		log.debug("resultReceived: " + arg0);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java b/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
new file mode 100644
index 0000000..46c710e
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
@@ -0,0 +1,2360 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote.red5;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicLong;
+
+import org.apache.openmeetings.data.calendar.management.AppointmentLogic;
+import org.apache.openmeetings.data.conference.RoomManager;
+import org.apache.openmeetings.data.whiteboard.EmoticonsManager;
+import org.apache.openmeetings.data.whiteboard.WhiteboardManager;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.log.ConferenceLogDao;
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.room.BrowserStatus;
+import org.apache.openmeetings.db.dto.room.RoomStatus;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.remote.FLVRecorderService;
+import org.apache.openmeetings.remote.WhiteBoardService;
+import org.apache.openmeetings.remote.util.SessionVariablesUtil;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.InitializationContainer;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.Version;
+import org.apache.openmeetings.util.process.UploadCompleteMessage;
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.adapter.ApplicationAdapter;
+import org.red5.server.api.IClient;
+import org.red5.server.api.IConnection;
+import org.red5.server.api.Red5;
+import org.red5.server.api.scope.IBasicScope;
+import org.red5.server.api.scope.IBroadcastScope;
+import org.red5.server.api.scope.IScope;
+import org.red5.server.api.scope.ScopeType;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.red5.server.api.service.IServiceCapableConnection;
+import org.red5.server.api.stream.IBroadcastStream;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class ScopeApplicationAdapter extends ApplicationAdapter implements IPendingServiceCallback {
+	private static final Logger log = Red5LoggerFactory.getLogger(ScopeApplicationAdapter.class, webAppRootKey);
+
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	private EmoticonsManager emoticonsManager;
+	@Autowired
+	private WhiteBoardService whiteBoardService;
+	@Autowired
+	private WhiteboardManager whiteboardManagement;
+	@Autowired
+	private FLVRecorderService flvRecorderService;
+	@Autowired
+	private ConfigurationDao configurationDao;
+	@Autowired
+	private AppointmentLogic appointmentLogic;
+	@Autowired
+	private SessiondataDao sessiondataDao;
+	@Autowired
+	private RoomManager roomManager;
+	@Autowired
+	private ConferenceLogDao conferenceLogDao;
+	@Autowired
+	private UserDao usersDao;
+	@Autowired
+	private RoomDao roomDao;
+	@Autowired
+	private FlvRecordingDao recordingDao;
+	@Autowired
+	private ServerDao serverDao;
+
+	private static AtomicLong broadCastCounter = new AtomicLong(0);
+
+	public void resultReceived(IPendingServiceCall arg0) {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	public boolean appStart(IScope scope) {
+		try {
+			OmFileHelper.setOmHome(scope.getResource("/").getFile());
+			LabelDao.initLanguageMap();
+
+			log.debug("webAppPath : " + OmFileHelper.getOmHome());
+
+			// Only load this Class one time Initially this value might by empty, because the DB is empty yet
+			getCryptKey();
+
+			// init your handler here
+
+			// The scheduled Jobs did go into the Spring-Managed Beans, see schedulerJobs.service.xml
+
+			// Spring Definition does not work here, its too early, Instance is not set yet
+			emoticonsManager.loadEmot();
+
+			for (String scopeName : scope.getScopeNames()) {
+				log.debug("scopeName :: " + scopeName);
+			}
+			
+			InitializationContainer.initComplete = true;
+			Version.logOMStarted();
+			recordingDao.resetProcessingStatus(); //we are starting so all processing recordings are now errors
+		} catch (Exception err) {
+			log.error("[appStart]", err);
+		}
+		return true;
+	}
+
+	@Override
+	public boolean roomConnect(IConnection conn, Object[] params) {
+		log.debug("roomConnect : ");
+
+		IServiceCapableConnection service = (IServiceCapableConnection) conn;
+		String streamId = conn.getClient().getId();
+		
+		boolean isAVClient = params.length == 1 ? Boolean.valueOf("" + params[0]) : false;
+
+		log.debug("### Client connected to OpenMeetings, register Client StreamId: " + streamId + " scope "
+				+ conn.getScope().getName() + " isAVClient " + isAVClient);
+
+		// Set StreamId in Client
+		service.invoke("setId", new Object[] { streamId }, this);
+
+		Map<String, Object> map = conn.getConnectParams();
+		String swfURL = map.containsKey("swfUrl") ? (String)map.get("swfUrl") : "";
+
+		//TODO add similar code for other connections
+		if (map.containsKey("screenClient")) {
+			String parentSid = (String)map.get("parentSid");
+			Client parentClient = sessionManager.getClientByPublicSID(parentSid, false, null);
+			if (parentClient == null) {
+				rejectClient();
+			}
+		}
+		Client rcm = sessionManager.addClientListItem(conn.getClient().getId(),
+				conn.getScope().getName(), conn.getRemotePort(),
+				conn.getRemoteAddress(), swfURL, isAVClient, null);
+		
+		SessionVariablesUtil.initClient(conn.getClient(), isAVClient, rcm.getPublicSID());
+		//TODO add similar code for other connections, merge with above block
+		if (map.containsKey("screenClient")) {
+			//TODO add check for room rights
+			String parentSid = (String)map.get("parentSid");
+			rcm.setRoom_id(Long.parseLong(conn.getScope().getName()));
+			rcm.setIsScreenClient(true);
+			SessionVariablesUtil.setIsScreenClient(conn.getClient());
+			
+			rcm.setUser_id(((Integer)map.get("userId")).longValue());
+			SessionVariablesUtil.setUserId(conn.getClient(), rcm.getUser_id());
+
+			rcm.setStreamPublishName(parentSid);
+			User u = usersDao.get(rcm.getUser_id() < 0 ? -rcm.getUser_id() : rcm.getUser_id());
+			rcm.setUsername(u.getLogin());
+			rcm.setFirstname(u.getFirstname());
+			rcm.setLastname(u.getLastname());
+			log.debug("publishName :: " + rcm.getStreamPublishName());
+			sessionManager.updateClientByStreamId(streamId, rcm, false, null);
+		}
+
+		// Log the User
+		conferenceLogDao.addConferenceLog("ClientConnect",
+				rcm.getUser_id(), streamId, null, rcm.getUserip(),
+				rcm.getScope(), rcm.getExternalUserId(),
+				rcm.getExternalUserType(), rcm.getEmail(),
+				rcm.getFirstname(), rcm.getLastname());
+		return true;
+	}
+
+	public Map<String, String> screenSharerAction(Map<String, Object> map) {
+		try {
+			log.debug("-----------  screenSharerAction ENTER");
+			IConnection current = Red5.getConnectionLocal();
+
+			Client control = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			Client client = sessionManager.getClientByPublicSID(control.getStreamPublishName(), false, null);
+
+			Map<String, String> returnMap = new HashMap<String, String>();
+
+			if (client != null) {
+				boolean changed = false;
+				if (Boolean.valueOf("" + map.get("stopStreaming")) && client.isStartStreaming()) {
+					changed = true;
+					client.setStartStreaming(false);
+					//Send message to all users
+					sendMessageToCurrentScope("stopScreenSharingMessage", client, false);
+					
+					returnMap.put("result", "stopSharingOnly");
+				}
+				if (Boolean.valueOf("" + map.get("stopRecording")) && client.getIsRecording()) {
+					changed = true;
+					client.setStartRecording(false);
+					client.setIsRecording(false);
+					
+					returnMap.put("result", "stopRecordingOnly");
+					//Send message to all users
+					sendMessageToCurrentScope("stopRecordingMessage", client, false);
+
+					flvRecorderService.stopRecordAndSave(current.getScope(), client, null);
+				}
+				if (Boolean.valueOf("" + map.get("stopPublishing")) && client.isScreenPublishStarted()) {
+					changed = true;
+					client.setScreenPublishStarted(false);
+					returnMap.put("result", "stopPublishingOnly");
+					
+					//Send message to all users
+					sendMessageToCurrentScope("stopPublishingMessage", client, false);
+				}
+				
+				if (changed) {
+					sessionManager.updateClientByStreamId(client.getStreamid(), client, false, null);
+					
+					if (!client.isStartStreaming() && !client.isStartRecording() && !client.isStreamPublishStarted()) {
+						returnMap.put("result", "stopAll");
+					}
+				}
+			}
+			log.debug("-----------  screenSharerAction, return: " + returnMap);
+			return returnMap;
+		} catch (Exception err) {
+			log.error("[screenSharerAction]", err);
+		}
+		return null;
+	}
+
+	public List<Client> checkScreenSharing() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+
+			log.debug("checkScreenSharing -2- " + streamid);
+
+			List<Client> screenSharerList = new LinkedList<Client>();
+
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+
+			for (Client rcl : sessionManager.getClientListByRoomAll(currentClient.getRoom_id())) {
+				if (rcl.isStartStreaming()) {
+					screenSharerList.add(rcl);
+				}
+			}
+
+			return screenSharerList;
+
+		} catch (Exception err) {
+			log.error("[checkScreenSharing]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param map
+	 * @return returns key,value Map with multiple return values or null in case of exception
+	 * 
+	 */
+	public Map<String, Object> setConnectionAsSharingClient(Map<String, Object> map) {
+		try {
+			log.debug("-----------  setConnectionAsSharingClient");
+			IConnection current = Red5.getConnectionLocal();
+
+			Client control = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			Client client = sessionManager.getClientByPublicSID(control.getStreamPublishName(), false, null);
+
+			if (client != null) {
+				boolean startRecording = Boolean.valueOf("" + map.get("startRecording"));
+				boolean startStreaming = Boolean.valueOf("" + map.get("startStreaming"));
+				boolean startPublishing = Boolean.valueOf("" + map.get("startPublishing")) && (0 == sessionManager.getPublishingCount(client.getRoom_id()));
+
+				boolean alreadyStreaming = client.isStartStreaming();
+				if (startStreaming) {
+					client.setStartStreaming(true);
+				}
+				boolean alreadyRecording = client.isStartRecording();
+				if (startRecording) {
+					client.setStartRecording(true);
+				}
+				if (startPublishing) {
+					client.setStreamPublishStarted(true);
+				}
+
+				client.setVX(Integer.parseInt(map.get("screenX").toString()));
+				client.setVY(Integer.parseInt(map.get("screenY").toString()));
+				client.setVWidth(Integer.parseInt(map.get("screenWidth").toString()));
+				client.setVHeight(Integer.parseInt(map.get("screenHeight").toString()));
+				sessionManager.updateClientByStreamId(current.getClient().getId(), client, false, null);
+
+				Map<String, Object> returnMap = new HashMap<String, Object>();
+				returnMap.put("alreadyPublished", false);
+
+				// if is already started screen sharing, then there is no need
+				// to start it again
+				if (client.isScreenPublishStarted()) {
+					returnMap.put("alreadyPublished", true);
+				}
+
+				log.debug(String.format("screen x,y,width,height %s,%s,%s,%s", client.getVX(), client.getVY(), client.getVWidth(), client.getVHeight()));
+
+				if (startStreaming) {
+					if (!alreadyStreaming) {
+						returnMap.put("modus", "startStreaming");
+	
+						log.debug("start streamPublishStart Is Screen Sharing ");
+						
+						//Send message to all users
+						sendMessageToCurrentScope("newScreenSharing", client, false);
+					} else {
+						log.warn("Streaming is already started for the client id=" + client.getId() + ". Second request is ignored.");
+					}
+				}
+				if (startRecording) {
+					if (!alreadyRecording) {
+						returnMap.put("modus", "startRecording");
+	
+						String recordingName = "Recording " + CalendarPatterns.getDateWithTimeByMiliSeconds(new Date());
+	
+						flvRecorderService.recordMeetingStream(current, client, recordingName, "", false);
+					} else {
+						log.warn("Recording is already started for the client id=" + client.getId() + ". Second request is ignored.");
+					}
+				}
+				if (startPublishing) {
+					sendMessageToCurrentScope("startedPublishing", new Object[]{client, "rtmp://" + map.get("publishingHost") + ":1935/"
+							+ map.get("publishingApp") + "/" + map.get("publishingId")}, false, true);
+					returnMap.put("modus", "startPublishing");
+				}
+				return returnMap;
+
+			} else {
+				throw new Exception("Could not find Screen Sharing Client " + current.getClient().getId());
+			}
+
+		} catch (Exception err) {
+			log.error("[setConnectionAsSharingClient]", err);
+		}
+		return null;
+	}
+
+    public synchronized List<Integer> listRoomBroadcast() {
+    	HashSet<Integer> broadcastList = new HashSet<Integer>();
+        IConnection current = Red5.getConnectionLocal();
+        String streamid = current.getClient().getId();
+        for (IConnection conn : current.getScope().getClientConnections()) {
+            if (conn != null) {
+                Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+                if (rcl == null) {
+                    // continue;
+                } else if (rcl.getIsScreenClient()) {
+                    // continue;
+                } else {
+                    if (!streamid.equals(rcl.getStreamid())) {
+                        // It is not needed to send back
+                        // that event to the actuall
+                        // Moderator
+                        // as it will be already triggered
+                        // in the result of this Function
+                        // in the Client
+                    	int id = (int)rcl.getBroadCastID();
+                    	if (!broadcastList.contains(id)) {
+                    		broadcastList.add(id);
+                    	}
+                    }
+                }
+            }
+        }
+        return new ArrayList<Integer>(broadcastList);
+    }
+
+
+	/**
+	 * this function is invoked directly after initial connecting
+	 * 
+	 * @return publicSID of current client
+	 */
+	public String getPublicSID() {
+		log.debug("-----------  getPublicSID");
+		IConnection current = Red5.getConnectionLocal();
+		Client currentClient = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+		sessionManager.updateClientByStreamId(current.getClient().getId(), currentClient, false, null);
+		return currentClient.getPublicSID();
+	}
+
+	/**
+	 * this function is invoked after a reconnect
+	 * 
+	 * @param newPublicSID
+	 */
+	public Boolean overwritePublicSID(String newPublicSID) {
+		try {
+			log.debug("-----------  overwritePublicSID");
+			IConnection current = Red5.getConnectionLocal();
+			IClient c = current.getClient();
+			Client currentClient = sessionManager.getClientByStreamId(c.getId(), null);
+			if (currentClient == null) {
+				return false;
+			}
+			SessionVariablesUtil.initClient(c, SessionVariablesUtil.isAVClient(c), newPublicSID);
+			currentClient.setPublicSID(newPublicSID);
+			sessionManager.updateClientByStreamId(c.getId(), currentClient, false, null);
+			return true;
+		} catch (Exception err) {
+			log.error("[overwritePublicSID]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Logic must be before roomDisconnect cause otherwise you cannot throw a
+	 * message to each one
+	 * 
+	 */
+	@Override
+	public void roomLeave(IClient client, IScope room) {
+		try {
+			log.debug(String.format("roomLeave %s %s %s %s", client.getId(), room.getClients().size(), room.getContextPath(), room.getName()));
+
+			Client currentClient = sessionManager.getClientByStreamId(client.getId(), null);
+
+			// The Room Client can be null if the Client left the room by using
+			// logicalRoomLeave
+			if (currentClient != null) {
+				log.debug("currentClient IS NOT NULL");
+				roomLeaveByScope(currentClient, room, true);
+			}
+		} catch (Exception err) {
+			log.error("[roomLeave]", err);
+		}
+	}
+
+	/**
+	 * this means a user has left a room but only logically, he didn't leave the
+	 * app he just left the room
+	 * 
+	 * FIXME: Is this really needed anymore if you re-connect to another scope?
+	 * 
+	 * Exit Room by Application
+	 * 
+	 */
+	public void logicalRoomLeave() {
+		log.debug("logicalRoomLeave ");
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+
+			log.debug(streamid + " is leaving");
+
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+
+			roomLeaveByScope(currentClient, current.getScope(), true);
+		} catch (Exception err) {
+			log.error("[logicalRoomLeave]", err);
+		}
+	}
+
+	/**
+	 * Removes the Client from the List, stops recording, adds the Room-Leave
+	 * event to running recordings, clear Polls and removes Client from any list
+	 * 
+	 * This function is kind of private/protected as the client won't be able 
+	 * to call it with proper values.
+	 * 
+	 * @param currentClient
+	 * @param currentScope
+	 */
+	public void roomLeaveByScope(Client currentClient, IScope currentScope, boolean removeUserFromSessionList) {
+		try {
+			log.debug("currentClient " + currentClient);
+			Long room_id = currentClient.getRoom_id();
+
+			// Log the User
+			conferenceLogDao.addConferenceLog("roomLeave",
+					currentClient.getUser_id(), currentClient.getStreamid(),
+					room_id, currentClient.getUserip(), "",
+					currentClient.getExternalUserId(),
+					currentClient.getExternalUserType(),
+					currentClient.getEmail(), currentClient.getFirstname(),
+					currentClient.getLastname());
+
+			// Remove User from Sync List's
+			if (room_id != null) {
+				whiteBoardService.removeUserFromAllLists(currentScope, currentClient);
+			}
+
+			log.debug("removing USername " + currentClient.getUsername() + " "
+					+ currentClient.getConnectedSince() + " streamid: "
+					+ currentClient.getStreamid());
+
+			// stop and save any recordings
+			if (currentClient.getIsRecording()) {
+				log.debug("*** roomLeave Current Client is Recording - stop that");
+				if (currentClient.getInterviewPodId() != null) {
+					//interview, TODO need better check
+					_stopInterviewRecording(currentClient, currentScope);
+				} else {
+					flvRecorderService.stopRecordAndSave(currentScope, currentClient, null);
+
+					// set to true and overwrite the default one cause otherwise no
+					// notification is send
+					currentClient.setIsRecording(true);
+				}
+			}
+
+			// Notify all clients of the same currentScope (room) with domain
+			// and room except the current disconnected cause it could throw an exception
+			log.debug("currentScope " + currentScope);
+
+			if (currentScope != null && currentScope.getClientConnections() != null) {
+				// Notify Users of the current Scope
+				for (IConnection cons : currentScope.getClientConnections()) {
+					if (cons != null && cons instanceof IServiceCapableConnection) {
+						log.debug("sending roomDisconnect to {}  client id {}", cons, cons.getClient().getId());
+
+						Client rcl = sessionManager.getClientByStreamId(cons.getClient().getId(), null);
+
+						// Check if the Client does still exist on the list
+						if (rcl == null) {
+							log.debug("For this StreamId: " + cons.getClient().getId() + " There is no Client in the List anymore");
+							continue;
+						}
+						
+						//Do not send back to sender, but actually all other clients should receive this message swagner 01.10.2009
+						if (!currentClient.getStreamid().equals(rcl.getStreamid())) {
+							// add Notification if another user isrecording
+							log.debug("###########[roomLeave]");
+							if (rcl.getIsRecording()) {
+								log.debug("*** roomLeave Any Client is Recording - stop that");
+								flvRecorderService.stopRecordingShowForClient(cons, currentClient);
+							}
+							
+							//If the user was a avclient, we do not broadcast a message about that to everybody
+							if (currentClient.getIsAVClient()) {
+								continue;
+							}
+							
+							boolean isScreen = rcl.getIsScreenClient();
+							if (isScreen && currentClient.getPublicSID().equals(rcl.getStreamPublishName())) {
+								//going to terminate screen sharing started by this client
+								((IServiceCapableConnection) cons).invoke("stopStream", new Object[] { },this);
+								continue;
+							} else if (isScreen) {
+								// screen sharing clients do not receive events
+								continue;
+							} else if (rcl.getIsAVClient()) {
+								// AVClients or potential AVClients do not receive events
+								continue;
+							}
+							
+							// Send to all connected users
+							((IServiceCapableConnection) cons).invoke("roomDisconnect", new Object[] { currentClient },this);
+							log.debug("sending roomDisconnect to " + cons);
+						}
+					}
+				}
+			}
+
+			if (removeUserFromSessionList) {
+				sessionManager.removeClient(currentClient.getStreamid(), null);
+			}
+		} catch (Exception err) {
+			log.error("[roomLeaveByScope]", err);
+		}
+	}
+
+	/**
+	 * This method handles the Event after a stream has been added all connected
+	 * Clients in the same room will get a notification
+	 * 
+	 */
+	/* (non-Javadoc)
+	 * @see org.red5.server.adapter.MultiThreadedApplicationAdapter#streamPublishStart(org.red5.server.api.stream.IBroadcastStream)
+	 */
+	@Override
+	public void streamPublishStart(IBroadcastStream stream) {
+		try {
+			log.debug("-----------  streamPublishStart");
+			IConnection current = Red5.getConnectionLocal();
+			final String streamid = current.getClient().getId();
+			final Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+
+			//We make a second object the has the reference to the object 
+			//that we will use to send to all participents
+			Client clientObjectSendToSync = currentClient;
+			
+			// Notify all the clients that the stream had been started
+			log.debug("start streamPublishStart broadcast start: " + stream.getPublishedName() + " CONN " + current);
+
+			// In case its a screen sharing we start a new Video for that
+			if (currentClient.getIsScreenClient()) {
+				currentClient.setScreenPublishStarted(true);
+				sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+			}
+			//If its an audio/video client then send the session object with the full data to everybody
+			else if (currentClient.getIsAVClient()) {
+				clientObjectSendToSync = sessionManager.getClientByPublicSID(currentClient.getPublicSID(), false, null);
+			}
+			
+			log.debug("newStream SEND: " + currentClient);
+
+			// Notify all users of the same Scope
+			// We need to iterate through the streams to catch if anybody is recording
+			new MessageSender(current, "newStream", clientObjectSendToSync) {
+				@Override
+				public boolean filter(IConnection conn) {
+					Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+					
+					if (rcl == null) {
+						log.debug("RCL IS NULL newStream SEND");
+						return true;
+					}
+					
+					log.debug("check send to "+rcl);
+					
+					if (rcl.getPublicSID() == "") {
+						log.debug("publicSID IS NULL newStream SEND");
+						return true;
+					}
+					if (rcl.getIsRecording()) {
+						log.debug("RCL getIsRecording newStream SEND");
+						flvRecorderService.addRecordingByStreamId(current, streamid, currentClient, rcl.getFlvRecordingId());
+					}
+					if (rcl.getIsAVClient()) {
+						log.debug("RCL getIsAVClient newStream SEND");
+						return true;
+					}
+					if (rcl.getIsScreenClient()) {
+						log.debug("RCL getIsScreenClient newStream SEND");
+						return true;
+					}
+					
+					if (rcl.getPublicSID().equals(currentClient.getPublicSID())) {
+						log.debug("RCL publicSID is equal newStream SEND");
+						return true;
+					}
+					log.debug("RCL SEND is equal newStream SEND "+rcl.getPublicSID()+" || "+rcl.getUserport());
+					return false;
+				}
+			}.start();
+		} catch (Exception err) {
+			log.error("[streamPublishStart]", err);
+		}
+	}
+
+	public IBroadcastScope getBroadcastScope(IScope scope, String name) {
+		IBasicScope basicScope = scope.getBasicScope(ScopeType.BROADCAST, name);
+		if (!(basicScope instanceof IBroadcastScope)) {
+			return null;
+		} else {
+			return (IBroadcastScope) basicScope;
+		}
+	}
+
+	/**
+	 * This method handles the Event after a stream has been removed all
+	 * connected Clients in the same room will get a notification
+	 * 
+	 */
+	/* (non-Javadoc)
+	 * @see org.red5.server.adapter.MultiThreadedApplicationAdapter#streamBroadcastClose(org.red5.server.api.stream.IBroadcastStream)
+	 */
+	@Override
+	public void streamBroadcastClose(IBroadcastStream stream) {
+
+		// Notify all the clients that the stream had been closed
+		log.debug("start streamBroadcastClose broadcast close: " + stream.getPublishedName());
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client rcl = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			sendClientBroadcastNotifications(stream, "closeStream", rcl);
+		} catch (Exception e) {
+			log.error("[streamBroadcastClose]", e);
+		}
+	}
+
+	/**
+	 * This method handles the notification room-based
+	 * 
+	 * @return void
+	 * 
+	 */
+	private synchronized void sendClientBroadcastNotifications(IBroadcastStream stream, String clientFunction, Client rc) {
+		try {
+			// Store the local so that we do not send notification to ourself back
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+
+			if (currentClient == null) {
+
+				// In case the client has already left(kicked) this message
+				// might be thrown later then the RoomLeave
+				// event and the currentClient is already gone
+				// The second Use-Case where the currentClient is maybe null is
+				// if we remove the client because its a Zombie/Ghost
+
+				return;
+
+			}
+			// Notify all the clients that the stream had been started
+			log.debug("sendClientBroadcastNotifications: " + stream.getPublishedName());
+			log.debug("sendClientBroadcastNotifications : " + currentClient + " " + currentClient.getStreamid());
+
+			// Notify all clients of the same scope (room)
+			for (IConnection conn : current.getScope().getClientConnections()) {
+				if (conn != null) {
+					if (conn instanceof IServiceCapableConnection) {
+						if (conn.equals(current)) {
+							// there is a Bug in the current implementation
+							// of the appDisconnect
+							if (clientFunction.equals("closeStream")) {
+								Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+								if (clientFunction.equals("closeStream") && rcl.getIsRecording()) {
+									log.debug("*** stopRecordingShowForClient Any Client is Recording - stop that");
+									// StreamService.stopRecordingShowForClient(conn,
+									// currentClient,
+									// rcl.getRoomRecordingName(), false);
+									flvRecorderService.stopRecordingShowForClient(conn, currentClient);
+								}
+								// Don't notify current client
+								current.ping();
+							}
+							continue;
+						} else {
+							Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+							if (rcl != null) {
+								if (rcl.getIsScreenClient()) {
+									// continue;
+								} else {
+									log.debug("is this users still alive? :" + rcl);
+									IServiceCapableConnection iStream = (IServiceCapableConnection) conn;
+									iStream.invoke(clientFunction, new Object[] { rc }, this);
+								}
+
+								log.debug("sending notification to " + conn + " ID: ");
+
+								// if this close stream event then stop the
+								// recording of this stream
+								if (clientFunction.equals("closeStream") && rcl.getIsRecording()) {
+									log.debug("***  +++++++ ######## sendClientBroadcastNotifications Any Client is Recording - stop that");
+									flvRecorderService.stopRecordingShowForClient(conn, currentClient);
+								}
+							}
+						}
+					}
+				}
+			}
+		} catch (Exception err) {
+			log.error("[sendClientBroadcastNotifications]", err);
+		}
+	}
+
+
+	/**
+	 * Adds a Moderator by its publicSID
+	 * 
+	 * @param publicSID
+	 * @return -1
+	 */
+	public synchronized Long addModerator(String publicSID) {
+		try {
+			log.debug("-----------  addModerator: " + publicSID);
+
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+			if (currentClient == null) {
+				return -1L;
+			}
+			Long room_id = currentClient.getRoom_id();
+
+			currentClient.setIsMod(true);
+			// Put the mod-flag to true for this client
+			sessionManager.updateClientByStreamId(currentClient.getStreamid(), currentClient, false, null);
+
+			List<Client> currentMods = sessionManager.getCurrentModeratorByRoom(room_id);
+			
+			//Send message to all users
+			sendMessageToCurrentScope("setNewModeratorByList", currentMods, true);
+
+		} catch (Exception err) {
+			log.error("[addModerator]", err);
+		}
+		return -1L;
+	}
+
+	@SuppressWarnings("unchecked")
+	public void setNewCursorPosition(Object item) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+
+			@SuppressWarnings("rawtypes")
+			Map cursor = (Map) item;
+			cursor.put("streamPublishName", currentClient.getStreamPublishName());
+
+			sendMessageToCurrentScope("newRed5ScreenCursor", cursor, true, false);
+		} catch (Exception err) {
+			log.error("[setNewCursorPosition]", err);
+		}
+	}
+
+	public Long removeModerator(String publicSID) {
+		try {
+			log.debug("-----------  removeModerator: " + publicSID);
+
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+			if (currentClient == null) {
+				return -1L;
+			}
+			Long room_id = currentClient.getRoom_id();
+
+			currentClient.setIsMod(false);
+			// Put the mod-flag to true for this client
+			sessionManager.updateClientByStreamId(currentClient.getStreamid(), currentClient, false, null);
+
+			List<Client> currentMods = sessionManager.getCurrentModeratorByRoom(room_id);
+
+			sendMessageToCurrentScope("setNewModeratorByList", currentMods, true);
+		} catch (Exception err) {
+			log.error("[addModerator]", err);
+		}
+		return -1L;
+	}
+
+	public Long setBroadCastingFlag(String publicSID, boolean value, boolean canVideo, Integer interviewPodId) {
+		try {
+			log.debug("-----------  setBroadCastingFlag: " + publicSID);
+
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+			if (currentClient == null) {
+				return -1L;
+			}
+
+			currentClient.setIsBroadcasting(value);
+			currentClient.setCanVideo(value && canVideo); //set to false in case NOT broadcasting
+			currentClient.setInterviewPodId(interviewPodId);
+
+			// Put the mod-flag to true for this client
+			sessionManager.updateClientByStreamId(currentClient.getStreamid(), currentClient, false, null);
+		    
+			// Notify all clients of the same scope (room)
+			sendMessageToCurrentScope("setNewBroadCastingFlag", currentClient, true);
+		} catch (Exception err) {
+			log.error("[setBroadCastingFlag]", err);
+		}
+		return -1L;
+	}
+
+	public Long giveExclusiveAudio(String publicSID) {
+		try {
+			log.debug("-----------  giveExclusiveAudio: " + publicSID);
+
+			IConnection current = Red5.getConnectionLocal();
+			// String streamid = current.getClient().getId();
+
+			final Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+			if (currentClient == null) {
+				return -1L;
+			}
+
+			// Put the mod-flag to true for this client
+			currentClient.setMicMuted(false);
+			sessionManager.updateClientByStreamId(currentClient.getStreamid(), currentClient, false, null);
+
+			// Notify all clients of the same scope (room)
+			new MessageSender(current, "receiveExclusiveAudioFlag", currentClient) {
+				@Override
+				public boolean filter(IConnection conn) {
+					Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+					if (rcl == null) {
+					} else if (rcl.getIsScreenClient()) {
+					} else {
+						if (rcl != currentClient) {
+							rcl.setMicMuted(true);
+							sessionManager.updateClientByStreamId(rcl.getStreamid(), rcl, false, null);
+						}
+						return false;
+					}
+					return true;
+				}
+			}.start();
+		} catch (Exception err) {
+			log.error("[giveExclusiveAudio]", err);
+		}
+		return -1L;
+	}
+
+	public Long switchMicMuted(String publicSID, boolean mute) {
+		try {
+			log.debug("-----------  switchMicMuted: " + publicSID);
+
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+			if (currentClient == null) {
+				return -1L;
+			}
+
+			currentClient.setMicMuted(mute);
+			sessionManager.updateClientByStreamId(currentClient.getStreamid(), currentClient, false, null);
+
+			HashMap<Integer, Object> newMessage = new HashMap<Integer, Object>();
+			newMessage.put(0, "updateMuteStatus");
+			newMessage.put(1, currentClient);
+			sendMessageWithClient(newMessage);
+		} catch (Exception err) {
+			log.error("[switchMicMuted]", err);
+		}
+		return 0L;
+	}
+
+	public Boolean getMicMutedByPublicSID(String publicSID) {
+		try {
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+			if (currentClient == null) {
+				return true;
+			}
+
+			//Put the mod-flag to true for this client
+			Boolean muted = currentClient.getMicMuted();
+			if (null == muted) {
+				muted = true;
+			}
+
+			return muted;
+		} catch (Exception err) {
+			log.error("[getMicMutedByPublicSID]",err);
+		}
+		return true;
+	}
+
+	/**
+	 * Invoked by a User whenever he want to become moderator this is needed,
+	 * cause if the room has no moderator yet there is no-one he can ask to get
+	 * the moderation, in case its a Non-Moderated Room he should then get the
+	 * Moderation without any confirmation needed
+	 * 
+	 * @return Long 1 => means get Moderation, 2 => ask Moderator for
+	 *         Moderation, 3 => wait for Moderator
+	 */
+	public synchronized Long applyForModeration(String publicSID) {
+		try {
+
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+			List<Client> currentModList = sessionManager.getCurrentModeratorByRoom(currentClient.getRoom_id());
+
+			if (currentModList.size() > 0) {
+				return 2L;
+			} else {
+				// No moderator in this room at the moment
+				Room room = roomDao.get(currentClient.getRoom_id());
+
+				return room.getIsModeratedRoom() ? 3L : 1L;
+			}
+
+		} catch (Exception err) {
+			log.error("[applyForModeration]", err);
+		}
+		return -1L;
+	}
+
+	/**
+	 * there will be set an attribute called "broadCastCounter" this is the name
+	 * this user will publish his stream
+	 * 
+	 * @return long broadCastId
+	 */
+	public long getBroadCastId() {
+		try {
+			log.debug("-----------  getBroadCastId");
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client client = sessionManager.getClientByStreamId(streamid, null);
+			client.setBroadCastID(broadCastCounter.getAndIncrement());
+			sessionManager.updateClientByStreamId(streamid, client, false, null);
+			return client.getBroadCastID();
+		} catch (Exception err) {
+			log.error("[getBroadCastId]", err);
+		}
+		return -1;
+	}
+
+	/**
+	 * this must be set _after_ the Video/Audio-Settings have been chosen (see
+	 * editrecordstream.lzx) but _before_ anything else happens, it cannot be
+	 * applied _after_ the stream has started! avsettings can be: av - video and
+	 * audio a - audio only v - video only n - no a/v only static image
+	 * furthermore
+	 * 
+	 * @param avsettings
+	 * @param newMessage
+	 * @param vWidth
+	 * @param vHeight
+	 * @param room_id
+	 * @param publicSID
+	 * @param interviewPodId
+	 * @return RoomClient being updated in case of no errors, null otherwise
+	 */
+	public Client setUserAVSettings(String avsettings,
+			Object newMessage, Integer vWidth, Integer vHeight, 
+			long room_id, String publicSID, Integer interviewPodId) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			IClient c = current.getClient();
+			String streamid = c.getId();
+			log.debug("-----------  setUserAVSettings {} {} {}", new Object[] {streamid, publicSID, avsettings, newMessage});
+			Client parentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+			currentClient.setAvsettings(avsettings);
+			currentClient.setRoom_id(room_id);
+			currentClient.setPublicSID(publicSID);
+			currentClient.setVWidth(vWidth);
+			currentClient.setVHeight(vHeight);
+			currentClient.setInterviewPodId(interviewPodId);
+			currentClient.setUser_id(parentClient.getUser_id());
+			currentClient.setLastname(parentClient.getLastname());
+			currentClient.setFirstname(parentClient.getFirstname());
+			currentClient.setPicture_uri(parentClient.getPicture_uri());
+			sessionManager.updateAVClientByStreamId(streamid, currentClient, null);
+			SessionVariablesUtil.initClient(c, false, publicSID);
+
+			HashMap<String, Object> hsm = new HashMap<String, Object>();
+			hsm.put("client", currentClient);
+			hsm.put("message", newMessage);
+
+			sendMessageToCurrentScope("sendVarsToMessageWithClient", hsm, true);
+			return currentClient;
+		} catch (Exception err) {
+			log.error("[setUserAVSettings]", err);
+		}
+		return null;
+	}
+
+	/*
+	 * checks if the user is allowed to apply for Moderation
+	 */
+	public Boolean checkRoomValues(Long room_id) {
+		try {
+
+			// appointed meeting or moderated Room?
+			Room room = roomDao.get(room_id);
+
+			// not really - default logic
+			if (room.getAppointment() == null || room.getAppointment() == false) {
+				if (room.getIsModeratedRoom()) {
+					// if this is a Moderated Room then the Room can be only
+					// locked off by the Moderator Bit
+					List<Client> clientModeratorListRoom = sessionManager.getCurrentModeratorByRoom(room_id);
+
+					// If there is no Moderator yet and we are asking for it
+					// then deny it
+					// cause at this moment, the user should wait untill a
+					// Moderator enters the Room
+					return clientModeratorListRoom.size() != 0;
+				} else {
+					return true;
+				}
+			} else {
+				// FIXME: TODO: For Rooms that are created as Appointment we
+				// have to check that too
+				// but I don't know yet the Logic behind it - swagner 19.06.2009
+				return true;
+
+			}
+		} catch (Exception err) {
+			log.error("[checkRoomValues]", err);
+		}
+		return false;
+	}
+
+	/**
+	 * This function is called once a User enters a Room
+	 * 
+	 * It contains several different mechanism depending on what roomtype and
+	 * what options are available for the room to find out if the current user
+	 * will be a moderator of that room or not<br/>
+	 * <br/>
+	 * Some rules:<br/>
+	 * <ul>
+	 * <li>If it is a room that was created through the calendar, the user that
+	 * organized the room will be moderator, the param Boolean becomeModerator
+	 * will be ignored then</li>
+	 * <li>In regular rooms you can use the param Boolean becomeModerator to set
+	 * any user to become a moderator of the room</li>
+	 * </ul>
+	 * <br/>
+	 * If a new moderator is detected a Push Call to all current users of the
+	 * room is invoked "setNewModeratorByList" to notify them of the new
+	 * moderator<br/>
+	 * <br/>
+	 * At the end of the mechanism a push call with the new client-object
+	 * and all the informations about the new user is send to every user of the
+	 * current conference room<br/>
+	 * <br/>
+	 *
+	 * @param room_id - id of the room
+	 * @param becomeModerator - is user will become moderator
+	 * @param isSuperModerator - is user super moderator
+	 * @param organization_id - organization id of the user
+	 * @param colorObj - some color
+	 * @return RoomStatus object
+	 */
+	public synchronized RoomStatus setRoomValues(Long room_id, Boolean becomeModerator, Boolean isSuperModerator,
+			Long organization_id, String colorObj) {
+		try {
+			log.debug("-----------  setRoomValues");
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+			currentClient.setRoom_id(room_id);
+			currentClient.setRoomEnter(new Date());
+			currentClient.setOrganization_id(organization_id);
+
+			currentClient.setUsercolor(colorObj);
+
+			// Inject externalUserId if nothing is set yet
+			if (currentClient.getExternalUserId() == null) {
+				if (currentClient.getUser_id() != null) {
+					User us = usersDao.get(currentClient.getUser_id());
+					if (us != null) {
+						currentClient.setExternalUserId(us.getExternalUserId());
+						currentClient.setExternalUserType(us.getExternalUserType());
+					}
+				}
+			}
+
+			// This can be set without checking for Moderation Flag
+			currentClient.setIsSuperModerator(isSuperModerator);
+
+			sessionManager.updateClientByStreamId(streamid, currentClient, true, null);
+
+            Room room = roomDao.get(room_id);
+            if (room.getShowMicrophoneStatus()) {
+            	currentClient.setCanGiveAudio(true);
+            }
+
+			// Log the User
+			conferenceLogDao.addConferenceLog("roomEnter",
+					currentClient.getUser_id(), streamid, room_id,
+					currentClient.getUserip(), "",
+					currentClient.getExternalUserId(),
+					currentClient.getExternalUserType(),
+					currentClient.getEmail(), currentClient.getFirstname(),
+					currentClient.getLastname());
+			
+			// Check for Moderation LogicalRoom ENTER
+			List<Client> clientListRoom = sessionManager.getClientListByRoom(room_id);
+
+			// Return Object
+			RoomStatus roomStatus = new RoomStatus();
+			// appointed meeting or moderated Room? => Check Max Users first
+			if (room.getNumberOfPartizipants() != null && clientListRoom.size() > room.getNumberOfPartizipants()) {
+				roomStatus.setRoomFull(true);
+				return roomStatus;
+			}
+
+			// default logic for non regular rooms
+			if (room.getAppointment() == null || room.getAppointment() == false) {
+				if (room.getIsModeratedRoom()) {
+					// if this is a Moderated Room then the Room can be only
+					// locked off by the Moderator Bit
+					// List<RoomClient> clientModeratorListRoom =
+					// this.sessionManager.getCurrentModeratorByRoom(room_id);
+
+					// If there is no Moderator yet we have to check if the
+					// current User has the Bit set to true to
+					// become one, otherwise he won't get Moderation and has to
+					// wait
+					if (becomeModerator) {
+						currentClient.setIsMod(true);
+
+						// There is a need to send an extra Event here, cause at
+						// this moment there could be
+						// already somebody in the Room waiting
+
+						// Update the Client List
+						sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+
+						List<Client> modRoomList = sessionManager.getCurrentModeratorByRoom(currentClient.getRoom_id());
+						
+						//Sync message to everybody
+						sendMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
+					} else {
+						// The current User is not a Teacher/Admin or whatever
+						// Role that should get the
+						// Moderation
+						currentClient.setIsMod(false);
+					}
+				} else {
+					// If this is a normal Room Moderator rules : first come, first draw ;-)
+					log.debug("setRoomValues : Room"
+							+ room_id
+							+ " not appointed! Moderator rules : first come, first draw ;-)");
+					if (clientListRoom.size() == 1) {
+						log.debug("Room is empty so set this user to be moderation role");
+						currentClient.setIsMod(true);
+					} else {
+						log.debug("Room is already somebody so set this user not to be moderation role");
+
+						if (becomeModerator) {
+							currentClient.setIsMod(true);
+
+							// Update the Client List
+							sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+
+							List<Client> modRoomList = sessionManager.getCurrentModeratorByRoom(currentClient.getRoom_id());
+
+							// There is a need to send an extra Event here,
+							// cause at this moment there could be
+							// already somebody in the Room waiting -swagner check this comment, 20.01.2012
+							
+							//Sync message to everybody
+							sendMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
+
+						} else {
+							// The current User is not a Teacher/Admin or
+							// whatever Role that should get the Moderation
+							currentClient.setIsMod(false);
+						}
+					}
+				}
+
+				// Update the Client List
+				sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+			} else {
+				// If this is an Appointment then the Moderator will be set to the Invitor
+
+				Appointment ment = appointmentLogic.getAppointmentByRoom(room_id);
+
+				Long userIdInRoomClient = currentClient.getUser_id();
+
+				boolean found = false;
+				boolean moderator_set = false;
+				// First check owner who is not in the members list
+				if (ment.getOwner().getUser_id().equals(userIdInRoomClient)) {
+					found = true;
+					log.debug("User "
+							+ userIdInRoomClient
+							+ " is moderator due to flag in MeetingMember record");
+					currentClient.setIsMod(true);
+					moderator_set = true;
+
+					// Update the Client List
+					sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+
+					List<Client> modRoomList = sessionManager.getCurrentModeratorByRoom(currentClient.getRoom_id());
+
+					// There is a need to send an extra Event here, cause at this moment 
+					// there could be already somebody in the Room waiting
+
+					//Sync message to everybody
+					sendMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
+				}
+				if (!found) {
+					// Check if current user is set to moderator
+					for (MeetingMember member : ment.getMeetingMembers()) {
+						// only persistent users can schedule a meeting
+						// user-id is only set for registered users
+						if (member.getUser() != null) {
+							log.debug("checking user " + member.getUser().getFirstname()
+									+ " for moderator role - ID : "
+									+ member.getUser().getUser_id());
+	
+							if (member.getUser().getUser_id().equals(userIdInRoomClient)) {
+								found = true;
+								log.debug("User " + userIdInRoomClient+ " is NOT moderator due to flag in MeetingMember record");
+								currentClient.setIsMod(false);
+								sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+								break;
+							}
+						}
+					}
+				}
+
+				if (!found) {
+					log.debug("User "
+							+ userIdInRoomClient
+							+ " could not be found as MeetingMember -> definitely no moderator");
+					currentClient.setIsMod(false);
+					sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+				} else {
+					// if current user is part of the member list, but moderator
+					// couldn't be retrieved : first come, first draw!
+					if (clientListRoom.size() == 1 && !moderator_set) {
+						log.debug("");
+						currentClient.setIsMod(true);
+
+						// Update the Client List
+						sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+
+						List<Client> modRoomList = sessionManager.getCurrentModeratorByRoom(currentClient.getRoom_id());
+
+						// There is a need to send an extra Event here, cause at
+						// this moment there could be
+						// already somebody in the Room waiting
+
+						//Sync message to everybody
+						sendMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
+						
+						sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+					}
+				}
+
+			}
+			
+			//Sync message to everybody
+			sendMessageToCurrentScope("addNewUser", currentClient, false);
+
+			//Status object for Shared Browsing
+			BrowserStatus browserStatus = (BrowserStatus)current.getScope().getAttribute("browserStatus");
+
+			if (browserStatus == null) {
+				browserStatus = new BrowserStatus();
+			}
+
+			// RoomStatus roomStatus = new RoomStatus();
+
+			// FIXME: Rework Client Object to DTOs
+			roomStatus.setClientList(clientListRoom);
+			roomStatus.setBrowserStatus(browserStatus);
+
+			return roomStatus;
+		} catch (Exception err) {
+			log.error("[setRoomValues]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * This method is invoked when the user has disconnected and reconnects to
+	 * the Gateway with the new scope
+	 * 
+	 * @param SID
+	 * @param userId
+	 * @param username
+	 * @param firstname
+	 * @param lastname
+	 * @param picture_uri
+	 * @return client being updated in case of success, null otherwise
+	 */
+	public Client setUsernameReconnect(String SID, Long userId, String username, String firstname, String lastname, String picture_uri) {
+		try {
+			log.debug("-----------  setUsernameReconnect");
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+
+			SessionVariablesUtil.setUserId(current.getClient(), userId);
+			currentClient.setPicture_uri(picture_uri);
+			currentClient.setUserObject(userId, username, firstname, lastname);
+
+			// Update Session Data
+			sessiondataDao.updateUserWithoutSession(SID, userId);
+
+			// only fill this value from User-Record
+			// cause invited users have no associated User, so
+			// you cannot set the firstname,lastname from the UserRecord
+			if (userId != null) {
+				User us = usersDao.get(userId);
+				
+				if (us != null) {
+					currentClient.setExternalUserId(us.getExternalUserId());
+					currentClient.setExternalUserType(us.getExternalUserType());
+					if (us.getPictureuri() != null) {
+						// set Picture-URI
+						currentClient.setPicture_uri(us.getPictureuri());
+					}
+				}
+			}
+			sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+			return currentClient;
+		} catch (Exception err) {
+			log.error("[setUsername]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * this is set initial directly after login/loading language
+	 * 
+	 * @param SID - id of the session
+	 * @param userId - id of the user being set
+	 * @param username - username of the user
+	 * @param firstname - firstname of the user
+	 * @param lastname - lastname of the user
+	 * @return RoomClient in case of everything is OK, null otherwise
+	 */
+	public Client setUsernameAndSession(String SID, Long userId, String username, String firstname, String lastname) {
+		try {
+			log.debug("-----------  setUsernameAndSession");
+			IConnection current = Red5.getConnectionLocal();
+			String streamid = current.getClient().getId();
+			Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+
+			currentClient.setUsername(username);
+			currentClient.setUser_id(userId);
+			SessionVariablesUtil.setUserId(current.getClient(), userId);
+			currentClient.setUserObject(userId, username, firstname, lastname);
+
+			// Update Session Data
+			log.debug("UDPATE SESSION " + SID + ", " + userId);
+			sessiondataDao.updateUserWithoutSession(SID, userId);
+
+			User user = usersDao.get(userId);
+
+			if (user != null) {
+				currentClient.setExternalUserId(user.getExternalUserId());
+				currentClient.setExternalUserType(user.getExternalUserType());
+			}
+
+			// only fill this value from User-Record
+			// cause invited users have non
+			// you cannot set the firstname,lastname from the UserRecord
+			User us = usersDao.get(userId);
+			if (us != null && us.getPictureuri() != null) {
+				// set Picture-URI
+				currentClient.setPicture_uri(us.getPictureuri());
+			}
+			sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+			return currentClient;
+		} catch (Exception err) {
+			log.error("[setUsername]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * used by the Screen-Sharing Servlet to trigger events
+	 * 
+	 * @param room_id
+	 * @param message
+	 * @return the list of room clients
+	 */
+	public HashMap<String, Client> sendMessageByRoomAndDomain(Long room_id, Object message) {
+		HashMap<String, Client> roomClientList = new HashMap<String, Client>();
+		try {
+
+			log.debug("sendMessageByRoomAndDomain " + room_id);
+
+			IScope globalScope = getContext().getGlobalScope();
+			IScope webAppKeyScope = globalScope.getScope(OpenmeetingsVariables.webAppRootKey);
+
+			log.debug("webAppKeyScope " + webAppKeyScope);
+
+			IScope scopeHibernate = webAppKeyScope.getScope(room_id.toString());
+
+			new MessageSender(scopeHibernate, "newMessageByRoomAndDomain", message) {
+				@Override
+				public boolean filter(IConnection conn) {
+					IClient client = conn.getClient();
+					return SessionVariablesUtil.isScreenClient(client) || SessionVariablesUtil.isAVClient(client);
+				}
+			}.start();
+		} catch (Exception err) {
+			log.error("[getClientListBYRoomAndDomain]", err);
+		}
+		return roomClientList;
+	}
+
+	public synchronized List<Client> getCurrentModeratorList() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			Long room_id = currentClient.getRoom_id();
+			return sessionManager.getCurrentModeratorByRoom(room_id);
+		} catch (Exception err) {
+			log.error("[getCurrentModerator]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * This Function is triggered from the Whiteboard
+	 * 
+	 * @param whiteboardObjParam - array of parameters being sended to whiteboard
+	 * @param whiteboardId - id of whiteboard parameters will be send to
+	 */
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public void sendVarsByWhiteboardId(ArrayList whiteboardObjParam, Long whiteboardId) {
+		//
+		try {
+
+			Map whiteboardObj = new HashMap();
+			int i = 0;
+			for (Iterator iter = whiteboardObjParam.iterator(); iter.hasNext();) {
+				Object obj = iter.next();
+				// log.debug("obj"+obj);
+				whiteboardObj.put(i, obj);
+				i++;
+			}
+
+			// Check if this User is the Mod:
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = this.sessionManager
+					.getClientByStreamId(current.getClient().getId(), null);
+
+			if (currentClient == null) {
+				return;
+			}
+
+			Long room_id = currentClient.getRoom_id();
+
+			// log.debug("***** sendVars: " + whiteboardObj);
+
+			// Store event in list
+			String action = whiteboardObj.get(2).toString();
+
+			if (action.equals("deleteMindMapNodes")) {
+
+				// Simulate Single Delete Events for z-Index
+				List actionObject = (List) whiteboardObj.get(3);
+
+				List<List> itemObjects = (List) actionObject.get(3);
+
+				Map whiteboardTempObj = new HashMap();
+				whiteboardTempObj.put(2, "delete");
+
+				for (List itemObject : itemObjects) {
+
+					List<Object> tempActionObject = new LinkedList<Object>();
+					tempActionObject.add("mindmapnode");
+					tempActionObject.add(itemObject.get(0)); // z-Index -8
+					tempActionObject.add(null); // simulate -7
+					tempActionObject.add(null); // simulate -6
+					tempActionObject.add(null); // simulate -5
+					tempActionObject.add(null); // simulate -4
+					tempActionObject.add(null); // simulate -3
+					tempActionObject.add(null); // simulate -2
+					tempActionObject.add(itemObject.get(1)); // Object-Name -1
+
+					whiteboardTempObj.put(3, tempActionObject);
+
+					whiteboardManagement.addWhiteBoardObjectById(
+							room_id, whiteboardTempObj, whiteboardId);
+
+				}
+
+			} else {
+
+				whiteboardManagement.addWhiteBoardObjectById(
+						room_id, whiteboardObj, whiteboardId);
+
+			}
+
+			Map<String, Object> sendObject = new HashMap<String, Object>();
+			sendObject.put("id", whiteboardId);
+			sendObject.put("param", whiteboardObjParam);
+
+			boolean showDrawStatus = getWhiteboardDrawStatus();
+
+			// Notify all Clients of that Scope (Room)
+			for (IConnection conn : current.getScope().getClientConnections()) {
+				if (conn != null) {
+					if (conn instanceof IServiceCapableConnection) {
+						IClient client = conn.getClient();
+						if (SessionVariablesUtil.isScreenClient(client)) {
+							// screen sharing clients do not receive events
+							continue;
+						} else if (SessionVariablesUtil.isAVClient(client)) {
+							// AVClients or potential AVClients do not receive events
+							continue;
+						} if (client.getId().equals(
+								current.getClient().getId())) {
+							// don't send back to same user
+							continue;
+						}
+						((IServiceCapableConnection) conn).invoke(
+							"sendVarsToWhiteboardById",
+								new Object[] { showDrawStatus ? currentClient : null, sendObject }, 
+									this);
+					}
+				}
+			}
+		} catch (Exception err) {
+			log.error("[sendVarsByWhiteboardId]", err);
+		}
+	}
+
+	public int sendVarsModeratorGeneral(Object vars) {
+		log.debug("*..*sendVars: " + vars);
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+			// Long room_id = currentClient.getRoom_id();
+
+			log.debug("***** id: " + currentClient.getStreamid());
+
+			boolean ismod = currentClient.getIsMod();
+
+			if (ismod) {
+				log.debug("CurrentScope :" + current.getScope().getName());
+				// Send to all Clients of the same Scope
+				sendMessageToCurrentScope("sendVarsToModeratorGeneral", vars, false);
+				return 1;
+			} else {
+				// log.debug("*..*you are not allowed to send: "+ismod);
+				return -1;
+			}
+		} catch (Exception err) {
+			log.error("[sendVarsModeratorGeneral]", err);
+		}
+		return -1;
+	}
+
+	public int sendMessage(Object newMessage) {
+		try {
+			
+			sendMessageToCurrentScope("sendVarsToMessage", newMessage, false);
+			
+		} catch (Exception err) {
+			log.error("[sendMessage]", err);
+		}
+		return 1;
+	}
+	
+	public int sendMessageAll(Object newMessage) {
+		try {
+			
+			sendMessageToCurrentScope("sendVarsToMessage", newMessage, true);
+			
+		} catch (Exception err) {
+			log.error("[sendMessage]", err);
+		}
+		return 1;
+	}
+
+	/**
+	 * send status for shared browsing to all members except self
+	 * @param newMessage
+	 * @return 1
+	 */
+	@SuppressWarnings({ "rawtypes" })
+	public synchronized int sendBrowserMessageToMembers(Object newMessage) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+
+			List newMessageList = (List) newMessage;
+
+			String action = newMessageList.get(0).toString();
+
+			BrowserStatus browserStatus = (BrowserStatus) current.getScope().getAttribute("browserStatus");
+
+			if (browserStatus == null) {
+				browserStatus = new BrowserStatus();
+			}
+
+			if (action.equals("initBrowser") || action.equals("newBrowserURL")) {
+				browserStatus.setBrowserInited(true);
+				browserStatus.setCurrentURL(newMessageList.get(1).toString());
+			} else if (action.equals("closeBrowserURL")) {
+				browserStatus.setBrowserInited(false);
+			}
+
+			current.getScope().setAttribute("browserStatus", browserStatus);
+			
+			sendMessageToCurrentScope("sendVarsToMessage", newMessage, false);
+
+		} catch (Exception err) {
+			log.error("[sendMessage]", err);
+		}
+		return 1;
+	}
+
+	/**
+	 * wrapper method
+	 * @param newMessage
+	 */
+	public void sendMessageToMembers(Object newMessage) {
+		//Sync to all users of current scope
+		sendMessageToCurrentScope("sendVarsToMessage", newMessage, false);
+	}
+	
+	/**
+	 * General sync mechanism for all messages that are send from within the 
+	 * scope of the current client, but:
+	 * <ul>
+	 * <li>optionally do not send to self (see param: sendSelf)</li>
+	 * <li>do not send to clients that are screen sharing clients</li>
+	 * <li>do not send to clients that are audio/video clients (or potentially ones)</li>
+	 * <li>do not send to connections where no RoomClient is registered</li>
+	 * </ul>
+	 *  
+	 * @param remoteMethodName The method to be called
+	 * @param newMessage parameters
+	 * @param sendSelf send to the current client as well
+	 */
+	public void sendMessageToCurrentScope(String remoteMethodName, Object newMessage, boolean sendSelf) {
+		sendMessageToCurrentScope(remoteMethodName, newMessage, sendSelf, false);
+	}
+	
+	/**
+	 * Only temporary for load test, with return argument for the client to have a result
+	 * 
+	 * @param remoteMethodName
+	 * @param newMessage
+	 * @param sendSelf
+	 * @return true
+	 */
+	@Deprecated
+	public boolean loadTestSyncMessage(String remoteMethodName, Object newMessage, boolean sendSelf) {
+		sendMessageToCurrentScope(remoteMethodName, newMessage, sendSelf, false);
+		return true;
+	}
+	
+	
+	/**
+	 * General sync mechanism for all messages that are send from within the 
+	 * scope of the current client, but:
+	 * <ul>
+	 * <li>optionally do not send to self (see param: sendSelf)</li>
+	 * <li>send to clients that are screen sharing clients based on parameter</li>
+	 * <li>do not send to clients that are audio/video clients (or potentially ones)</li>
+	 * <li>do not send to connections where no RoomClient is registered</li>
+	 * </ul>
+	 *  
+	 * @param remoteMethodName The method to be called
+	 * @param newMessage parameters
+	 * @param sendSelf send to the current client as well
+	 * @param sendScreen send to the current client as well
+	 */
+	public void sendMessageToCurrentScope(final String remoteMethodName, final Object newMessage, final boolean sendSelf, final boolean sendScreen) {
+		new MessageSender(remoteMethodName, newMessage) {
+			public boolean filter(IConnection conn) {
+				IClient client = conn.getClient();
+				return (!sendScreen && SessionVariablesUtil.isScreenClient(client))
+						|| SessionVariablesUtil.isAVClient(client)
+						|| (!sendSelf && client.getId().equals(current.getClient().getId()));
+			}
+		}.start();
+
+	}
+
+	public abstract class MessageSender extends Thread {
+		final IScope scope;
+		final IConnection current;
+		final String remoteMethodName;
+		final Object newMessage;
+		
+		public MessageSender(final String remoteMethodName, final Object newMessage) {
+			this((IScope)null, remoteMethodName, newMessage);
+		}
+		
+		public MessageSender(IScope _scope, String remoteMethodName, Object newMessage) {
+			this(Red5.getConnectionLocal(), _scope, remoteMethodName, newMessage);
+		}
+		
+		public MessageSender(IConnection current, String remoteMethodName, Object newMessage) {
+			this(current, null, remoteMethodName, newMessage);
+		}
+		
+		public MessageSender(IConnection current, IScope _scope, String remoteMethodName, Object newMessage) {
+			this.current = current;
+			scope = _scope == null ? current.getScope() : _scope;
+			this.remoteMethodName = remoteMethodName;
+			this.newMessage = newMessage;
+		}
+		
+		public abstract boolean filter(IConnection conn);
+		
+		@Override
+		public void run() {
+			try {
+				if (scope == null) {
+					log.debug(String.format("[MessageSender] -> 'Unable to send message to NULL scope' %s, %s", remoteMethodName, newMessage));
+				} else {
+					log.trace(String.format("[MessageSender] -> 'sending message' %s, %s", remoteMethodName, newMessage));
+					// Send to all Clients of that Scope(Room)
+					for (IConnection conn : scope.getClientConnections()) {
+						if (conn != null && conn instanceof IServiceCapableConnection) {
+							if (filter(conn)) {
+								continue;
+							}
+							((IServiceCapableConnection) conn).invoke(remoteMethodName, new Object[] { newMessage }, ScopeApplicationAdapter.this);
+						}
+					}
+					log.trace(String.format("[MessageSender] -> 'sending message DONE' %s", remoteMethodName));
+				}
+			} catch (Exception err) {
+				log.error(String.format("[MessageSender -> %s, %s]", remoteMethodName, newMessage), err);
+			}
+		}
+	}
+
+	/**
+	 * wrapper method
+	 * @param newMessage
+	 * @return 1 in case of success, -1 otherwise
+	 */
+	public int sendMessageWithClient(Object newMessage) {
+		try {
+			sendMessageWithClientWithSyncObject(newMessage, true);
+
+		} catch (Exception err) {
+			log.error("[sendMessageWithClient] ", err);
+			return -1;
+		}
+		return 1;
+	}
+	
+	/**
+	 * wrapper method
+	 * @param newMessage
+	 * @param sync
+	 * @return 1 in case of success, -1 otherwise
+	 */
+	public int sendMessageWithClientWithSyncObject(Object newMessage, boolean sync) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+
+			HashMap<String, Object> hsm = new HashMap<String, Object>();
+			hsm.put("client", currentClient);
+			hsm.put("message", newMessage);
+			
+			//Sync to all users of current scope
+			sendMessageToCurrentScope("sendVarsToMessageWithClient", hsm, sync);
+
+		} catch (Exception err) {
+			log.error("[sendMessageWithClient] ", err);
+			return -1;
+		}
+		return 1;
+	}
+
+	/**
+	 * Function is used to send the kick Trigger at the moment, 
+	 * it sends a general message to a specific clientId
+	 * 
+	 * @param newMessage
+	 * @param clientId
+	 * @return 1 in case of success, -1 otherwise
+	 */
+	public synchronized int sendMessageById(Object newMessage, String clientId, IScope scope) {
+		try {
+			log.debug("### sendMessageById ###" + clientId);
+
+			HashMap<String, Object> hsm = new HashMap<String, Object>();
+			hsm.put("message", newMessage);
+
+			// broadcast Message to specific user with id inside the same Scope
+			for (IConnection conn : scope.getClientConnections()) {
+				if (conn != null) {
+					if (conn instanceof IServiceCapableConnection) {
+						if (conn.getClient().getId().equals(clientId)) {
+							((IServiceCapableConnection) conn).invoke("sendVarsToMessageWithClient", new Object[] { hsm }, this);
+						}
+					}
+				}
+			}
+		} catch (Exception err) {
+			log.error("[sendMessageWithClient] ", err);
+			return -1;
+		}
+		return 1;
+	}
+
+	/**
+	 * Sends a message to a user in the same room by its clientId
+	 * 
+	 * @param newMessage
+	 * @param clientId
+	 * @return 1 in case of no exceptions, -1 otherwise
+	 */
+	public synchronized int sendMessageWithClientById(Object newMessage, String clientId) {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+
+			HashMap<String, Object> hsm = new HashMap<String, Object>();
+			hsm.put("client", currentClient);
+			hsm.put("message", newMessage);
+
+			// broadcast Message to specific user with id inside the same Scope
+			for (IConnection conn : current.getScope().getClientConnections()) {
+				if (conn.getClient().getId().equals(clientId)) {
+					((IServiceCapableConnection) conn).invoke("sendVarsToMessageWithClient", new Object[] { hsm }, this);
+				}
+			}
+		} catch (Exception err) {
+			log.error("[sendMessageWithClient] ", err);
+			return -1;
+		}
+		return 1;
+	}
+	
+	public synchronized void sendUploadCompletMessageByPublicSID(UploadCompleteMessage message, String publicSID) {
+		try {
+			//if the upload is locally, just proceed to the normal function
+			//Search for RoomClient on current server (serverId == null means it will look on the master for the RoomClient)
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+			
+			if (currentClient != null) {
+				sendMessageWithClientByPublicSID(message, publicSID);
+			} else {
+				throw new Exception("Could not Find RoomClient on List publicSID: "+ publicSID);
+			}
+			
+		} catch (Exception err) {
+			log.error("[sendUploadCompletMessageByPublicSID] ", err);
+		}
+	}
+	
+
+	public synchronized void sendMessageWithClientByPublicSID(Object message, String publicSID) {
+		try {
+			// ApplicationContext appCtx = getContext().getApplicationContext();
+			IScope globalScope = getContext().getGlobalScope();
+
+			IScope webAppKeyScope = globalScope.getScope(OpenmeetingsVariables.webAppRootKey);
+
+			// log.debug("webAppKeyScope "+webAppKeyScope);
+
+			// Get Room Id to send it to the correct Scope
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+			if (currentClient == null) {
+				throw new Exception("Could not Find RoomClient on List publicSID: " + publicSID);
+			}
+			// default Scope Name
+			String scopeName = "hibernate";
+			if (currentClient.getRoom_id() != null) {
+				scopeName = currentClient.getRoom_id().toString();
+			}
+
+			IScope scopeHibernate = webAppKeyScope.getScope(scopeName);
+
+			// log.debug("scopeHibernate "+scopeHibernate);
+
+			if (scopeHibernate != null) {
+				// Notify the clients of the same scope (room) with user_id
+
+				for (IConnection conn : webAppKeyScope.getScope(scopeName).getClientConnections()) {
+					IClient client = conn.getClient();
+					if (SessionVariablesUtil.isScreenClient(client)) {
+						// screen sharing clients do not receive events
+						continue;
+					} else if (SessionVariablesUtil.isAVClient(client)) {
+						// AVClients or potential AVClients do not receive events
+						continue;
+					}
+					
+					if (SessionVariablesUtil.getPublicSID(client).equals(publicSID)) {
+						((IServiceCapableConnection) conn).invoke("newMessageByRoomAndDomain", new Object[] { message }, this);
+					}
+				}
+			} else {
+				// Scope not yet started
+			}
+		} catch (Exception err) {
+			log.error("[sendMessageWithClient] ", err);
+		}
+	}
+
+	public synchronized void sendMessageWithClientByPublicSIDOrUser(Object message, String publicSID, Long user_id) {
+		try {
+			// Get Room Id to send it to the correct Scope
+			Client currentClient = sessionManager.getClientByPublicSID(publicSID, false, null);
+
+			if (currentClient == null) {
+				currentClient = sessionManager.getClientByUserId(user_id);
+			}
+
+			Set<IConnection> conset = null;
+
+			if (currentClient == null) {
+				// Must be from a previous session, search for user in current scope
+				IConnection current = Red5.getConnectionLocal();
+				// Notify all Clients of that Scope (Room)
+				conset = current.getScope().getClientConnections();
+			} else {
+				// default Scope Name
+				String scopeName = "hibernate";
+				if (currentClient.getRoom_id() != null) {
+					scopeName = currentClient.getRoom_id().toString();
+				}
+
+				IScope globalScope = getContext().getGlobalScope();
+				IScope webAppKeyScope = globalScope.getScope(OpenmeetingsVariables.webAppRootKey);
+				IScope scopeHibernate = webAppKeyScope.getScope(scopeName);
+
+				if (scopeHibernate != null) {
+					conset = scopeHibernate.getClientConnections();
+				}
+			}
+
+			// Notify the clients of the same scope (room) with user_id
+			for (IConnection conn : conset) {
+				if (conn != null) {
+					
+					IClient client = conn.getClient();
+					if (SessionVariablesUtil.isScreenClient(client)) {
+						// screen sharing clients do not receive events
+						continue;
+					} else if (SessionVariablesUtil.isAVClient(client)) {
+						// AVClients or potential AVClients do not receive events
+						continue;
+					}
+					
+					if (SessionVariablesUtil.getPublicSID(client).equals(publicSID)) {
+						// log.debug("IS EQUAL ");
+						((IServiceCapableConnection) conn).invoke("newMessageByRoomAndDomain", new Object[] { message }, this);
+						log.debug("sendMessageWithClientByPublicSID RPC:newMessageByRoomAndDomain" + message);
+					} else if (user_id != 0 && SessionVariablesUtil.getUserId(client).equals(user_id)) {
+						((IServiceCapableConnection) conn).invoke("newMessageByRoomAndDomain", new Object[] { message }, this);
+						log.debug("sendMessageWithClientByPublicSID RPC:newMessageByRoomAndDomain" + message);
+					}
+				}
+			}
+		} catch (Exception err) {
+			log.error("[sendMessageWithClient] ", err);
+		}
+	}
+
+	/**
+	 * @deprecated this method should be reworked to use a single SQL query in
+	 *             the cache to get any client in the current room that is
+	 *             recording instead of iterating through connections!
+	 * @return true in case there is recording session, false otherwise, null if any exception happend
+	 */
+	public Boolean getInterviewRecordingStatus() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+
+			for (IConnection conn : current.getScope().getClientConnections()) {
+				if (conn != null) {
+					Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+
+					if (rcl.getIsRecording() != null && rcl.getIsRecording()) {
+						return true;
+					}
+				}
+			}
+			return false;
+		} catch (Exception err) {
+			log.error("[getInterviewRecordingStatus]", err);
+		}
+
+		return null;
+	}
+
+	/**
+	 * @deprecated @see {@link ScopeApplicationAdapter#getInterviewRecordingStatus()}
+	 * @return - false if there were existing recording, true if recording was started successfully, null if any exception happens
+	 */
+	public Boolean startInterviewRecording() {
+		try {
+			log.debug("-----------  startInterviewRecording");
+			IConnection current = Red5.getConnectionLocal();
+
+			for (IConnection conn : current.getScope().getClientConnections()) {
+				if (conn != null) {
+					Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+
+					if (rcl != null && rcl.getIsRecording() != null && rcl.getIsRecording()) {
+						return false;
+					}
+				}
+			}
+			Client current_rcl = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+
+			// Also set the Recording Flag to Record all Participants that enter
+			// later
+			current_rcl.setIsRecording(true);
+			sessionManager.updateClientByStreamId(current.getClient().getId(), current_rcl, false, null);
+
+			Map<String, String> interviewStatus = new HashMap<String, String>();
+			interviewStatus.put("action", "start");
+
+			for (IConnection conn : current.getScope().getClientConnections()) {
+				if (conn != null) {
+					IClient client = conn.getClient();
+					if (SessionVariablesUtil.isScreenClient(client)) {
+						// screen sharing clients do not receive events
+						continue;
+					} else if (SessionVariablesUtil.isAVClient(client)) {
+						// AVClients or potential AVClients do not receive events
+						continue;
+					}
+
+					((IServiceCapableConnection) conn).invoke("interviewStatus", new Object[] { interviewStatus }, this);
+					log.debug("-- startInterviewRecording " + interviewStatus);
+				}
+			}
+			String recordingName = "Interview " + CalendarPatterns.getDateWithTimeByMiliSeconds(new Date());
+
+			flvRecorderService.recordMeetingStream(current, current_rcl, recordingName, "", true);
+
+			return true;
+		} catch (Exception err) {
+			log.debug("[startInterviewRecording]", err);
+		}
+		return null;
+	}
+
+	@SuppressWarnings({ "rawtypes" })
+	public Boolean sendRemoteCursorEvent(final String streamid, Map messageObj) {
+		new MessageSender("sendRemoteCursorEvent", messageObj) {
+			
+			@Override
+			public boolean filter(IConnection conn) {
+				IClient client = conn.getClient();
+				return SessionVariablesUtil.isScreenClient(client) && conn.getClient().getId().equals(streamid);
+			}
+		}.start();
+		return null;
+	}
+
+	private Long checkRecordingClient(IConnection conn) {
+		Long flvRecordingId = null;
+		if (conn != null) {
+			Client rcl = sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+			if (rcl != null && rcl.getIsRecording() != null && rcl.getIsRecording()) {
+				rcl.setIsRecording(false);
+				flvRecordingId = rcl.getFlvRecordingId();
+				rcl.setFlvRecordingId(null);
+
+				// Reset the Recording Flag to Record all
+				// Participants that enter later
+				sessionManager.updateClientByStreamId(conn.getClient().getId(), rcl, false, null);
+			}
+		}
+		return flvRecordingId;
+	}
+	
+	/**
+	 * Stop the recording of the streams and send event to connected users of scope
+	 * 
+	 * @return true if interview was found
+	 */
+	public Boolean stopInterviewRecording() {
+		IConnection current = Red5.getConnectionLocal();
+		Client currentClient = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+		return _stopInterviewRecording(currentClient, current.getScope());
+	}
+	
+	/**
+	 * Stop the recording of the streams and send event to connected users of scope
+	 * 
+	 * @return true if interview was found
+	 */
+	private Boolean _stopInterviewRecording(Client currentClient, IScope currentScope) {
+		try {
+			log.debug("-----------  stopInterviewRecording");
+			Long flvRecordingId = currentClient.getFlvRecordingId();
+
+			for (IConnection conn : currentScope.getClientConnections()) {
+				Long recordingId = checkRecordingClient(conn);
+				if (recordingId != null) {
+					flvRecordingId = recordingId;
+				}
+			}
+			if (flvRecordingId == null) {
+				log.debug("stopInterviewRecording:: unable to find recording client");
+				return false;
+			}
+
+			flvRecorderService.stopRecordAndSave(scope, currentClient, flvRecordingId);
+
+			Map<String, String> interviewStatus = new HashMap<String, String>();
+			interviewStatus.put("action", "stop");
+
+			sendMessageToCurrentScope("interviewStatus", interviewStatus, true);
+			sendMessageToCurrentScope("stopRecordingMessage", currentClient, true);
+			return true;
+
+		} catch (Exception err) {
+			log.debug("[stopInterviewRecording]", err);
+		}
+		return null;
+	}
+
+	/**
+	 * Get all ClientList Objects of that room and domain Used in
+	 * lz.applyForModeration.lzx
+	 * 
+	 * @return all ClientList Objects of that room
+	 */
+	public synchronized List<Client> getClientListScope() {
+		try {
+			IConnection current = Red5.getConnectionLocal();
+			Client currentClient = sessionManager.getClientByStreamId(current.getClient().getId(), null);
+
+			return sessionManager.getClientListByRoom(currentClient.getRoom_id());
+		} catch (Exception err) {
+			log.debug("[getClientListScope]", err);
+		}
+		return new ArrayList<Client>();
+	}
+
+	private boolean getWhiteboardDrawStatus() {
+		return configurationDao.getWhiteboardDrawStatus();
+	}
+	
+	public String getCryptKey() {
+		return configurationDao.getCryptKey();
+	}
+
+	public IScope getRoomScope(String room) {
+		try {
+
+			IScope globalScope = getContext().getGlobalScope();
+			IScope webAppKeyScope = globalScope.getScope(OpenmeetingsVariables.webAppRootKey);
+
+			String scopeName = "hibernate";
+			// If set then its a NON default Scope
+			if (room.length() != 0) {
+				scopeName = room;
+			}
+
+			IScope scopeHibernate = webAppKeyScope.getScope(scopeName);
+
+			return scopeHibernate;
+		} catch (Exception err) {
+			log.error("[getRoomScope]", err);
+		}
+		return null;
+	}
+
+    /*
+	 * SIP transport methods
+	 */
+
+	private List<Long> getVerifiedActiveRoomIds(Server s) {
+		List<Long> result = new ArrayList<Long>(sessionManager.getActiveRoomIdsByServer(s));
+		//verify
+		for (Iterator<Long> i = result.iterator(); i.hasNext();) {
+			Long id = i.next();
+			List<Client> rcs = sessionManager.getClientListByRoom(id);
+			if (rcs.size() == 0 || (rcs.size() == 1 && rcs.get(0).isSipTransport())) {
+				i.remove();
+			}
+		}
+		return result.isEmpty() ? result : roomDao.getSipRooms(result);
+	}
+	
+	public List<Long> getActiveRoomIds() {
+		List<Long> result = getVerifiedActiveRoomIds(null);
+		for (Server s : serverDao.getActiveServers()) {
+			result.addAll(getVerifiedActiveRoomIds(s));
+		}
+		return result.isEmpty() ? result : roomDao.getSipRooms(result);
+	}
+	
+	private String getSipTransportLastname(Long roomId) {
+		return getSipTransportLastname(roomId, roomManager.getSipConferenceMembersNumber(roomId));
+	}
+	
+	private String getSipTransportLastname(Long roomId, Integer c) {
+		return (c != null && c > 0) ? "(" + (c - 1) + ")" : "";
+	}
+	
+    public synchronized int updateSipTransport() {
+		log.debug("-----------  updateSipTransport");
+        IConnection current = Red5.getConnectionLocal();
+        String streamid = current.getClient().getId();
+        Client client = sessionManager.getClientByStreamId(streamid, null);
+        Long roomId = client.getRoom_id();
+        Integer count = roomManager.getSipConferenceMembersNumber(roomId); 
+        String newNumber = getSipTransportLastname(roomId, count);
+        log.debug("getSipConferenceMembersNumber: " + newNumber);
+        if (!newNumber.equals(client.getLastname())) {
+            client.setLastname(newNumber);
+            sessionManager.updateClientByStreamId(streamid, client, false, null);
+            log.debug("updateSipTransport: {}, {}, {}, {}, {}", new Object[]{client.getPublicSID(),
+                    client.getRoom_id(), client.getFirstname(), client.getLastname(), client.getAvsettings()});
+            sendMessageWithClient(new String[]{"personal",client.getFirstname(),client.getLastname()});
+        }
+        return count != null && count > 0 ? count - 1 : 0; 
+    }
+
+    /**
+     * Perform call to specified phone number and join to conference
+     * @param number to call
+     */
+	public synchronized void joinToConfCall(String number) {
+		IConnection current = Red5.getConnectionLocal();
+		String streamid = current.getClient().getId();
+		Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+		try {
+			String sipNumber = getSipNumber(currentClient.getRoom_id());
+			log.debug("asterisk -rx \"originate Local/" + number + "@rooms-out extension " + sipNumber + "@rooms-originate\"");
+			Runtime.getRuntime().exec(new String[] { "asterisk", "-rx", "originate Local/" + number + "@rooms-out extension " + sipNumber + "@rooms-originate" });
+		} catch (IOException e) {
+			log.error("Executing asterisk originate error: ", e);
+		}
+	}
+
+    public synchronized String getSipNumber(Long room_id) {
+        Room r = roomDao.get(room_id);
+        if(r != null && r.getConfno() != null) {
+            log.debug("getSipNumber: room_id: {}, sipNumber: {}", new Object[]{room_id, r.getConfno()});
+            return r.getConfno();
+        }
+        return null;
+    }
+
+	public void setSipTransport(Long room_id, String publicSID, String broadCastId) {
+		log.debug("-----------  setSipTransport");
+		IConnection current = Red5.getConnectionLocal();
+		IClient c = current.getClient();
+		String streamid = c.getId();
+		// Notify all clients of the same scope (room)
+		Client currentClient = sessionManager.getClientByStreamId(streamid, null);
+		currentClient.setSipTransport(true);
+		currentClient.setRoom_id(room_id);
+		currentClient.setRoomEnter(new Date());
+		currentClient.setFirstname("SIP Transport");
+		currentClient.setLastname(getSipTransportLastname(room_id));
+		currentClient.setBroadCastID(Long.parseLong(broadCastId));
+		currentClient.setIsBroadcasting(true);
+		currentClient.setPublicSID(publicSID);
+		currentClient.setVWidth(120);
+		currentClient.setVHeight(90);
+		currentClient.setPicture_uri("phone.png");
+		sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
+		SessionVariablesUtil.initClient(c, false, publicSID);
+
+		sendMessageToCurrentScope("addNewUser", currentClient, false);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/remote/util/SessionVariablesUtil.java b/src/main/java/org/apache/openmeetings/remote/util/SessionVariablesUtil.java
new file mode 100644
index 0000000..642bd08
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/remote/util/SessionVariablesUtil.java
@@ -0,0 +1,105 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.remote.util;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import org.red5.logging.Red5LoggerFactory;
+import org.red5.server.api.IClient;
+import org.slf4j.Logger;
+
+public class SessionVariablesUtil {
+	private static final Logger log = Red5LoggerFactory.getLogger(SessionVariablesUtil.class, webAppRootKey);
+
+	private enum SESSION_VARIABLES {
+		isAVClient, // if the client connection is a audio-video only connection
+		isScreenClient, // if the client connection is from a Java Web-Start application
+		PUBLIC_SID, // the public SID of the client
+		USER_ID, // the userId of the user that is using this connection (if there is any)
+	}
+
+	public static void initClient(IClient client, boolean isAVClient, String publicSID) {
+		client.setAttribute(SESSION_VARIABLES.isAVClient.toString(), isAVClient);
+		client.setAttribute(SESSION_VARIABLES.PUBLIC_SID.toString(), publicSID);
+	}
+
+	public static boolean isAVClient(IClient client) {
+		try {
+			if (client.getAttribute(SESSION_VARIABLES.isAVClient.toString()) == null) {
+				throw new Exception("Connection has no publicSID client: " + client);
+			}
+			return (Boolean) client.getAttribute(SESSION_VARIABLES.isAVClient.toString());
+		} catch (Exception err) {
+			log.error("[isAVClient]", err);
+		}
+		return false;
+	}
+
+	public static String getPublicSID(IClient client) {
+		try {
+			if (client.getAttribute(SESSION_VARIABLES.PUBLIC_SID.toString()) == null) {
+				throw new Exception("Connection has no publicSID client: " + client);
+			}
+			return (String) client.getAttribute(SESSION_VARIABLES.PUBLIC_SID.toString());
+		} catch (Exception err) {
+			log.error("[getPublicSID]", err);
+		}
+		return null;
+	}
+
+	public static void setIsScreenClient(IClient client) {
+		client.setAttribute(SESSION_VARIABLES.isScreenClient.toString(), true);
+	}
+
+	public static boolean isScreenClient(IClient client) {
+		try {
+			if (client.getAttribute(SESSION_VARIABLES.isScreenClient.toString()) == null) {
+				return false;
+			}
+			if ((Boolean) client.getAttribute(SESSION_VARIABLES.isScreenClient.toString())) {
+				return true;
+			}
+		} catch (Exception err) {
+			log.error("[isScreenClient]", err);
+		}
+		return false;
+	}
+
+	public static void setUserId(IClient client, Long userId) {
+		client.setAttribute(SESSION_VARIABLES.USER_ID.toString(), userId);
+	}
+
+	/**
+	 * if there is no user id set, it will return Long.MIN_VALUE
+	 * 
+	 * @param client
+	 * @return - user id set or Long.MIN_VALUE or null if any exception happens
+	 */
+	public static Long getUserId(IClient client) {
+		try {
+			if (client.getAttribute(SESSION_VARIABLES.USER_ID.toString()) == null) {
+				return Long.MIN_VALUE;
+			}
+			return (Long) client.getAttribute(SESSION_VARIABLES.USER_ID.toString());
+		} catch (Exception err) {
+			log.error("[getUserId]", err);
+		}
+		return null;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/rss/LoadAtomRssFeed.java b/src/main/java/org/apache/openmeetings/rss/LoadAtomRssFeed.java
new file mode 100644
index 0000000..17e8f5a
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/rss/LoadAtomRssFeed.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.rss;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class LoadAtomRssFeed {
+	private static final Logger log = Red5LoggerFactory.getLogger(LoadAtomRssFeed.class, webAppRootKey);
+
+	public static HttpURLConnection getFeedConnection(String _url) throws IOException {
+		log.debug("getFeedConnection:: " + _url);
+		
+		URL url = new URL(_url);
+
+		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+
+		conn.setDoOutput(true);
+		conn.setDoInput(true);
+		conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)");
+		conn.setRequestProperty("Referer", "http://openmeetings.apache.org/");
+		return conn;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/servlet/BaseHttpServlet.java b/src/main/java/org/apache/openmeetings/servlet/BaseHttpServlet.java
new file mode 100644
index 0000000..48d02b9
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/servlet/BaseHttpServlet.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.servlet;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletResponse;
+
+public abstract class BaseHttpServlet extends HttpServlet {
+	private static final long serialVersionUID = -2713422496723115524L;
+	
+	private BeanUtil beanUtil = new BeanUtil();
+
+	protected <T> T getBean(Class<T> beanClass) throws ServerNotInitializedException {
+		return beanUtil.getBean(beanClass, getServletContext());
+	}
+	
+	protected void handleNotBooted(HttpServletResponse response) throws IOException {
+		OutputStream out = response.getOutputStream();
+
+		String msg = "Server is not booted yet";
+
+		out.write(msg.getBytes());
+
+		out.flush();
+		out.close();
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/servlet/BeanUtil.java b/src/main/java/org/apache/openmeetings/servlet/BeanUtil.java
new file mode 100644
index 0000000..2bbfb42
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/servlet/BeanUtil.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.servlet;
+
+import javax.servlet.ServletContext;
+
+import org.apache.openmeetings.util.InitializationContainer;
+import org.springframework.web.context.support.WebApplicationContextUtils;
+
+public class BeanUtil {
+	public <T> T getBean(Class<T> beanClass, ServletContext ctx) throws ServerNotInitializedException {
+		if (InitializationContainer.initComplete) {
+			return WebApplicationContextUtils.getWebApplicationContext(ctx).getBean(beanClass);
+		} else {
+			throw new ServerNotInitializedException("Server not yet initialized, retry in couple of seconds");
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/servlet/ServerNotInitializedException.java b/src/main/java/org/apache/openmeetings/servlet/ServerNotInitializedException.java
new file mode 100644
index 0000000..9dc2151
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/servlet/ServerNotInitializedException.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.servlet;
+
+public class ServerNotInitializedException extends Exception {
+	private static final long serialVersionUID = 1L;
+	
+	public ServerNotInitializedException(String msg) {
+		super(msg);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/servlet/outputhandler/AbstractUploadController.java b/src/main/java/org/apache/openmeetings/servlet/outputhandler/AbstractUploadController.java
new file mode 100644
index 0000000..f858164
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/servlet/outputhandler/AbstractUploadController.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.servlet.outputhandler;
+
+import java.util.Set;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.util.AuthLevelUtil;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+
+public abstract class AbstractUploadController {
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			AbstractUploadController.class, OpenmeetingsVariables.webAppRootKey);
+	@Autowired
+	protected SessiondataDao sessiondataDao;
+	@Autowired
+	protected UserDao userDao;
+	@Autowired
+	protected ConfigurationDao configurationDao;
+	
+	protected class UploadInfo {
+		MultipartFile file;
+		Long userId;
+		String sid;
+		String publicSID;
+		String filename;
+	}
+	
+    protected UploadInfo validate(HttpServletRequest request, boolean admin) throws ServletException {
+    	UploadInfo info = new UploadInfo();
+		log.debug("Starting validate");
+		try {
+			String sid = request.getParameter("sid");
+			if (sid == null) {
+				throw new ServletException("SID Missing");
+			}
+			info.sid = sid;
+			log.debug("sid: " + sid);
+
+			Long userId = sessiondataDao.checkSession(sid);
+			Set<Right> rights = userDao.getRights(userId);
+			log.debug("userId = " + userId);
+			info.userId = userId;
+
+			if ((admin && !AuthLevelUtil.hasAdminLevel(rights)) || (!admin && rights.isEmpty())) {
+				throw new ServletException("Insufficient permissions " + rights);
+			}
+
+			String publicSID = request.getParameter("publicSID");
+			if (publicSID == null) {
+				// Always ask for Public SID
+				throw new ServletException("Missing publicSID");
+			}
+			log.debug("publicSID: " + publicSID);
+			info.publicSID= publicSID;
+
+			MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;
+			MultipartFile multipartFile = multipartRequest.getFile("Filedata");
+			//FIXME encoding HACK
+			info.filename = new String (multipartFile.getOriginalFilename().getBytes ("iso-8859-1"), "UTF-8");
+			long fileSize = multipartFile.getSize();
+			long maxSize = configurationDao.getMaxUploadSize();
+			log.debug("uploading " + fileSize + " bytes");
+			if (fileSize > maxSize) {
+				throw new ServletException("Maximum upload size: " + maxSize + " exceeded: " + fileSize);
+			}
+			info.file = multipartFile;
+		} catch (ServletException e) {
+			throw e;
+		} catch (Exception e) {
+			log.error("Exception during upload: ", e);
+			throw new ServletException(e);
+		}
+		return info;
+    }
+}
diff --git a/src/main/java/org/apache/openmeetings/servlet/outputhandler/DownloadHandler.java b/src/main/java/org/apache/openmeetings/servlet/outputhandler/DownloadHandler.java
new file mode 100644
index 0000000..f70bdd9
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/servlet/outputhandler/DownloadHandler.java
@@ -0,0 +1,315 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.servlet.outputhandler;
+
+import static org.apache.openmeetings.util.OmFileHelper.bigImagePrefix;
+import static org.apache.openmeetings.util.OmFileHelper.chatImagePrefix;
+import static org.apache.openmeetings.util.OmFileHelper.defaultProfileImageName;
+import static org.apache.openmeetings.util.OmFileHelper.profileImagePrefix;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.Set;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.servlet.BaseHttpServlet;
+import org.apache.openmeetings.servlet.ServerNotInitializedException;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class DownloadHandler extends BaseHttpServlet {
+	
+	private static final long serialVersionUID = 7243653203578587544L;
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			DownloadHandler.class, OpenmeetingsVariables.webAppRootKey);
+
+	private static final String defaultImageName = "deleted.jpg";
+	private static final String defaultProfileImageNameBig = profileImagePrefix + defaultProfileImageName;
+	private static final String defaultChatImageName = chatImagePrefix + defaultProfileImageName;
+	private static final String defaultSWFName = "deleted.swf";
+
+	private void logNonExistentFolder(File f) {
+		if (!f.exists()) {
+			boolean c = f.mkdir();
+			if (!c) {
+				log.error("cannot write to directory");
+			}
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest
+	 * , javax.servlet.http.HttpServletResponse)
+	 */
+	@Override
+	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+		try {
+			request.setCharacterEncoding("UTF-8");
+
+			log.debug("\nquery = " + request.getQueryString());
+			log.debug("\n\nfileName = " + request.getParameter("fileName"));
+			log.debug("\n\nparentPath = " + request.getParameter("parentPath"));
+
+			String queryString = request.getQueryString();
+			if (queryString == null) {
+				queryString = "";
+			}
+
+			String sid = request.getParameter("sid");
+
+			if (sid == null) {
+				sid = "default";
+			}
+			log.debug("sid: " + sid);
+
+			Long users_id = getBean(SessiondataDao.class).checkSession(sid);
+			Set<Right> rights = getBean(UserDao.class).getRights(users_id);
+
+			if (rights != null && !rights.isEmpty()) {
+				String room_id = request.getParameter("room_id");
+				if (room_id == null) {
+					room_id = "default";
+				}
+
+				String moduleName = request.getParameter("moduleName");
+				if (moduleName == null) {
+					moduleName = "nomodule";
+				}
+
+				String parentPath = request.getParameter("parentPath");
+				if (parentPath == null) {
+					parentPath = "nomodule";
+				}
+
+				String requestedFile = request.getParameter("fileName");
+				if (requestedFile == null) {
+					requestedFile = "";
+				}
+				
+				String fileExplorerItemIdParam = request.getParameter("fileExplorerItemId");
+				Long fileExplorerItemId = null;
+				if (fileExplorerItemIdParam != null) {
+					fileExplorerItemId = Long.parseLong(fileExplorerItemIdParam);
+				}
+				
+				
+
+				// make a complete name out of domain(organisation) + roomname
+				String roomName = room_id;
+				// trim whitespaces cause it is a directory name
+				roomName = StringUtils.deleteWhitespace(roomName);
+
+				// Get the current User-Directory
+
+				File working_dir;
+
+				// Add the Folder for the Room
+				if (moduleName.equals("lzRecorderApp")) {
+					working_dir = OmFileHelper.getStreamsHibernateDir();
+				} else if (moduleName.equals("videoconf1")) {
+					working_dir = OmFileHelper.getUploadRoomDir(roomName);
+					if (parentPath.length() != 0 && !parentPath.equals("/")) {
+						working_dir = new File(working_dir, parentPath);
+					}
+				} else if (moduleName.equals("userprofile")) {
+					working_dir = OmFileHelper.getUploadProfilesUserDir(users_id);
+					logNonExistentFolder(working_dir);
+				} else if (moduleName.equals("remoteuserprofile")) {
+					String remoteUser_id = request.getParameter("remoteUserid");
+					working_dir = OmFileHelper.getUploadProfilesUserDir(remoteUser_id == null ? "0" : remoteUser_id);
+					logNonExistentFolder(working_dir);
+				} else if (moduleName.equals("remoteuserprofilebig")) {
+					String remoteUser_id = request.getParameter("remoteUserid");
+					working_dir = OmFileHelper.getUploadProfilesUserDir(remoteUser_id == null ? "0" : remoteUser_id);
+					logNonExistentFolder(working_dir);
+					
+					requestedFile = getBigProfileUserName(working_dir);
+				} else if (moduleName.equals("chat")) {
+					String remoteUser_id = request.getParameter("remoteUserid");
+					working_dir = OmFileHelper.getUploadProfilesUserDir(remoteUser_id == null ? "0" : remoteUser_id);
+					logNonExistentFolder(working_dir);
+
+					requestedFile = getChatUserName(working_dir);
+				} else {
+					working_dir = OmFileHelper.getUploadRoomDir(roomName);
+				}
+
+				if (!moduleName.equals("nomodule")) {
+					log.debug("requestedFile: " + requestedFile + " current_dir: " + working_dir);
+
+					File full_path = new File(working_dir, requestedFile);
+
+					// If the File does not exist or is not readable show/load a
+					// place-holder picture
+
+					if (!full_path.exists() || !full_path.canRead()) {
+						if (!full_path.canRead()) {
+							log.debug("LOG DownloadHandler: The request file is not readable ");
+						} else {
+							log.debug("LOG DownloadHandler: The request file does not exist / has already been deleted");
+						}
+						log.debug("LOG ERROR requestedFile: " + requestedFile);
+						// replace the path with the default picture/document
+
+						if (requestedFile.endsWith(".jpg")) {
+							log.debug("LOG endsWith d.jpg");
+
+							log.debug("LOG moduleName: " + moduleName);
+
+							requestedFile = defaultImageName;
+							if (moduleName.equals("remoteuserprofile")) {
+								requestedFile = defaultProfileImageName;
+							} else if (moduleName.equals("remoteuserprofilebig")) {
+								requestedFile = defaultProfileImageNameBig;
+							} else if (moduleName.equals("userprofile")) {
+								requestedFile = defaultProfileImageName;
+							} else if (moduleName.equals("chat")) {
+								requestedFile = defaultChatImageName;
+							}
+						} else if (requestedFile.endsWith(".swf")) {
+							requestedFile = defaultSWFName;
+						} else {
+							requestedFile = defaultImageName;
+						}
+						full_path = new File(OmFileHelper.getDefaultDir(), requestedFile);
+					}
+
+					log.debug("full_path: " + full_path);
+
+					if (!full_path.exists() || !full_path.canRead()) {
+						if (!full_path.canRead()) {
+							log.debug("DownloadHandler: The request DEFAULT-file does not exist / has already been deleted");
+						} else {
+							log.debug("DownloadHandler: The request DEFAULT-file does not exist / has already been deleted");
+						}
+						// no file to handle abort processing
+						return;
+					}
+					// Requested file is outside OM webapp folder
+					File curDirFile = OmFileHelper.getOmHome();
+					if (!full_path.getCanonicalPath().startsWith(curDirFile.getCanonicalPath())) {
+						throw new Exception("Invalid file requested: f2.cp == "
+								+ full_path.getCanonicalPath() + "; curDir.cp == "
+								+ curDirFile.getCanonicalPath());
+					}
+
+					// Default type - Explorer, Chrome and others
+					int browserType = 0;
+
+					// Firefox and Opera browsers
+					if (request.getHeader("User-Agent") != null) {
+						if ((request.getHeader("User-Agent").contains("Firefox")) || (request.getHeader("User-Agent").contains("Opera"))) {
+							browserType = 1;
+						}
+					}
+
+					log.debug("Detected browser type:" + browserType);
+
+					response.reset();
+					response.resetBuffer();
+					OutputStream out = response.getOutputStream();
+
+					if (requestedFile.endsWith(".swf")) {
+						// trigger download to SWF => THIS is a workaround for
+						// Flash Player 10, FP 10 does not seem
+						// to accept SWF-Downloads with the Content-Disposition
+						// in the Header
+						response.setContentType("application/x-shockwave-flash");
+						response.setHeader("Content-Length", "" + full_path.length());
+					} else {
+						response.setContentType("APPLICATION/OCTET-STREAM");
+						
+						String fileNameResult = requestedFile;
+						if (fileExplorerItemId != null && fileExplorerItemId > 0) {
+							FileExplorerItem fileExplorerItem = getBean(FileExplorerItemDao.class).getFileExplorerItemsById(fileExplorerItemId);
+							if (fileExplorerItem != null) {
+								
+								fileNameResult = fileExplorerItem.getFileName().substring(0, fileExplorerItem.getFileName().length()-4)
+													+ fileNameResult.substring(fileNameResult.length()-4, fileNameResult.length());
+								
+							}
+						}
+						
+						if (browserType == 0) {
+							response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileNameResult, "UTF-8"));
+						} else {
+							response.setHeader("Content-Disposition", "attachment; filename*=UTF-8'en'"
+											+ URLEncoder.encode(fileNameResult, "UTF-8"));
+						}
+
+						response.setHeader("Content-Length", "" + full_path.length());
+					}
+
+					OmFileHelper.copyFile(full_path, out);
+					out.flush();
+					out.close();
+				}
+			} else {
+				log.error("ERROR DownloadHandler: not authorized FileDownload ");
+			}
+
+		} catch (ServerNotInitializedException e) {
+			return;
+		} catch (Exception er) {
+			log.error("Error downloading: ", er);
+		}
+	}
+
+	private String getChatUserName(File f) throws Exception {
+		if (f.exists() && f.isDirectory()) {
+			String filesString[] = f.list();
+			for (int i = 0; i < filesString.length; i++) {
+				String fileName = filesString[i];
+				if (fileName.startsWith(chatImagePrefix))
+					return fileName;
+			}
+		}
+		return "_no.jpg";
+	}
+
+	private String getBigProfileUserName(File f) throws Exception {
+		if (f.exists() && f.isDirectory()) {
+			String filesString[] = f.list();
+			for (int i = 0; i < filesString.length; i++) {
+				String fileName = filesString[i];
+				if (fileName.startsWith(bigImagePrefix))
+					return fileName;
+			}
+		}
+		return "_no.jpg";
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/servlet/outputhandler/ExportToImage.java b/src/main/java/org/apache/openmeetings/servlet/outputhandler/ExportToImage.java
new file mode 100644
index 0000000..3ca4de3
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/servlet/outputhandler/ExportToImage.java
@@ -0,0 +1,193 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.servlet.outputhandler;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.batik.dom.GenericDOMImplementation;
+import org.apache.batik.dom.svg.SVGDOMImplementation;
+import org.apache.batik.svggen.SVGGraphics2D;
+import org.apache.batik.transcoder.TranscoderInput;
+import org.apache.batik.transcoder.TranscoderOutput;
+import org.apache.batik.transcoder.image.JPEGTranscoder;
+import org.apache.openmeetings.batik.beans.PrintBean;
+import org.apache.openmeetings.data.record.WhiteboardMapToSVG;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.remote.PrintService;
+import org.apache.openmeetings.servlet.BaseHttpServlet;
+import org.apache.openmeetings.servlet.ServerNotInitializedException;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class ExportToImage extends BaseHttpServlet {
+	
+	private static final long serialVersionUID = -3535998254746084297L;
+	
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			ExportToImage.class, OpenmeetingsVariables.webAppRootKey);
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest
+	 * , javax.servlet.http.HttpServletResponse)
+	 */
+	@Override
+	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException,
+			IOException {
+
+		try {
+			String sid = request.getParameter("sid");
+			if (sid == null) {
+				sid = "default";
+			}
+			log.debug("sid: " + sid);
+
+			String hash = request.getParameter("hash");
+			if (hash == null) {
+				hash = "";
+			}
+			log.debug("hash: " + hash);
+
+			String fileName = request.getParameter("fileName");
+			if (fileName == null) {
+				fileName = "file_xyz";
+			}
+
+			String exportType = request.getParameter("exportType");
+			if (exportType == null) {
+				exportType = "svg";
+			}
+
+			Long users_id = getBean(SessiondataDao.class).checkSession(sid);
+			Set<Right> rights = getBean(UserDao.class).getRights(users_id);
+
+			log.debug("users_id: " + users_id);
+
+			if (rights != null && !rights.isEmpty() && hash != "") {
+
+				PrintBean pBean = PrintService.getPrintItemByHash(hash);
+
+				// Whiteboard Objects
+				@SuppressWarnings("rawtypes")
+				List whiteBoardMap = pBean.getMap();
+
+				// Get a DOMImplementation.
+				DOMImplementation domImpl = GenericDOMImplementation
+						.getDOMImplementation();
+
+				// Create an instance of org.w3c.dom.Document.
+				// String svgNS = "http://www.w3.org/2000/svg";
+				String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
+
+				Document document = domImpl.createDocument(svgNS, "svg", null);
+
+				// Get the root element (the 'svg' element).
+				Element svgRoot = document.getDocumentElement();
+
+				// Set the width and height attributes on the root 'svg'
+				// element.
+				svgRoot.setAttributeNS(null, "width", "" + pBean.getWidth());
+				svgRoot.setAttributeNS(null, "height", "" + pBean.getHeight());
+
+				log.debug("pBean.getWidth(),pBean.getHeight()"
+						+ pBean.getWidth() + "," + pBean.getHeight());
+
+				// Create an instance of the SVG Generator.
+				SVGGraphics2D svgGenerator = new SVGGraphics2D(document);
+
+				svgGenerator = WhiteboardMapToSVG.getInstance()
+						.convertMapToSVG(svgGenerator, whiteBoardMap);
+
+				// Finally, stream out SVG to the standard output using
+				// UTF-8 encoding.
+				boolean useCSS = true; // we want to use CSS style attributes
+
+				File uploadTempDir = OmFileHelper.getUploadTempDir();
+				log.debug("working_dir: " + uploadTempDir);
+				String reqFilePrefix = fileName + "_" + CalendarPatterns.getTimeForStreamId(new Date());
+				File svgFile = new File(uploadTempDir, reqFilePrefix + ".svg");
+				log.debug("exported svg file: " + svgFile.getCanonicalPath());
+				FileWriter out = new FileWriter(svgFile);
+				svgGenerator.stream(out, useCSS);
+				out.flush();
+				out.close();
+				File expFile = new File(uploadTempDir, reqFilePrefix + "." + exportType);
+				log.debug("exported file: " + expFile.getCanonicalPath());
+				if ("svg".equals(exportType)) {
+					outFile(response, expFile);
+				} else if ("jpg".equals(exportType)) {
+					JPEGTranscoder t = new JPEGTranscoder();
+			        t.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, 1f);
+			        
+			        OutputStream ostream = new FileOutputStream(expFile);
+			        TranscoderOutput output = new TranscoderOutput(new FileOutputStream(expFile));
+
+			        // Perform the transcoding.
+			        t.transcode(new TranscoderInput(svgFile.toURI().toString()), output);
+			        ostream.flush();
+			        ostream.close();
+			        
+					outFile(response, expFile);
+				} else if (exportType.equals("png")
+						|| exportType.equals("gif") || exportType.equals("tif")
+						|| exportType.equals("pdf")) {
+						//TODO not implemented yet
+				}
+			}
+		} catch (ServerNotInitializedException e) {
+			return;
+		} catch (Exception er) {
+			log.error("Error exporting to image ", er);
+		}
+	}
+	
+	private void outFile(HttpServletResponse response, File f) throws IOException {
+		response.reset();
+		response.resetBuffer();
+		OutputStream outStream = response.getOutputStream();
+		response.setContentType("APPLICATION/OCTET-STREAM");
+		response.setHeader("Content-Disposition", "attachment; filename=\"" + f.getName() + "\"");
+		response.setHeader("Content-Length", "" + f.length());
+
+		OmFileHelper.copyFile(f, outStream);
+		outStream.close();
+	}
+	
+}
diff --git a/src/main/java/org/apache/openmeetings/servlet/outputhandler/NetworkTestingController.java b/src/main/java/org/apache/openmeetings/servlet/outputhandler/NetworkTestingController.java
new file mode 100644
index 0000000..5131df6
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/servlet/outputhandler/NetworkTestingController.java
@@ -0,0 +1,119 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.servlet.outputhandler;
+
+import java.io.IOException;
+import java.util.Arrays;
+
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+@Controller
+public class NetworkTestingController {
+
+    enum TestType {
+        UNKNOWN,
+        PING,
+        JITTER,
+        DOWNLOAD_SPEED,
+        UPLOAD_SPEED
+    }
+
+    private static final int PING_PACKET_SIZE = 64;
+    private static final int JITTER_PACKET_SIZE = 1024;
+    private static final int DOWNLOAD_PACKET_SIZE = 1024*1024;
+
+    private final byte[] pingData;
+    private final byte[] jitterData;
+    private final byte[] downloadData;
+
+    public NetworkTestingController() {
+        pingData = new byte[PING_PACKET_SIZE];
+        jitterData = new byte[JITTER_PACKET_SIZE];
+        downloadData = new byte[DOWNLOAD_PACKET_SIZE];
+
+        Arrays.fill(pingData, (byte) '0');
+        Arrays.fill(jitterData, (byte) '0');
+        Arrays.fill(downloadData, (byte) '0');
+    }
+
+    @RequestMapping(value = "/networktest.upload", method = RequestMethod.GET)
+	public void serviceGet(HttpServletRequest request, HttpServletResponse response, HttpSession session)
+			throws ServletException, IOException {
+        String typeStr = request.getParameter("testType");
+        TestType testType = this.getTypeByString(typeStr);
+
+        // choose data to send
+        byte[] data = null;
+        switch (testType) {
+            case UNKNOWN:
+                return;
+            case PING:
+                data = pingData;
+                break;
+            case JITTER:
+                data = jitterData;
+                break;
+            case DOWNLOAD_SPEED:
+                data = downloadData;
+                break;
+			case UPLOAD_SPEED:
+				break;
+			default:
+				break;
+        }
+
+        // set needed headers
+        response.setHeader("Cache-Control", "no-cache");
+        response.setHeader("Content-Length", String.valueOf(data.length));
+
+        // send data
+        ServletOutputStream outStream = response.getOutputStream();
+        outStream.write(data);
+        outStream.flush();
+    }
+
+    @RequestMapping(value = "/networktest.upload", method = RequestMethod.POST)
+	public void servicePost(HttpServletRequest request, HttpServletResponse response, HttpSession session)
+			throws ServletException, IOException {
+    }
+
+
+    private TestType getTypeByString(String typeString) {
+        if ("ping".equals(typeString)) {
+            return TestType.PING;
+        } else if ("jitter".equals(typeString)) {
+            return TestType.JITTER;
+        } else if ("download".equals(typeString)) {
+            return TestType.DOWNLOAD_SPEED;
+        } else if ("upload".equals(typeString)) {
+            return TestType.UPLOAD_SPEED;
+        }
+
+        return TestType.UNKNOWN;
+    }
+
+}
diff --git a/src/main/java/org/apache/openmeetings/servlet/outputhandler/ScreenController.java b/src/main/java/org/apache/openmeetings/servlet/outputhandler/ScreenController.java
new file mode 100644
index 0000000..d238e5b
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/servlet/outputhandler/ScreenController.java
@@ -0,0 +1,260 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.servlet.outputhandler;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_ALLOW_REMOTE;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_FPS_SHOW;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_SCREENSHARING_QUALITY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Properties;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.codec.binary.Hex;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.context.Context;
+import org.apache.velocity.runtime.RuntimeConstants;
+import org.apache.velocity.runtime.log.Log4JLogChute;
+import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@Controller
+public class ScreenController {
+	private static final Logger log = Red5LoggerFactory.getLogger(ScreenController.class, webAppRootKey);
+
+	@Autowired
+	private ISessionManager sessionManager;
+	@Autowired
+	public SessiondataDao sessiondataDao;
+	@Autowired
+	public ConfigurationDao cfgDao;
+	@Autowired
+	public LabelDao labelDao;
+	@Autowired
+	public RoomDao roomDao;
+
+	private enum ConnectionType {
+		rtmp
+		, rtmps
+		, rtmpt
+	}
+	
+	private String getLabels(Long language_id, int ... ids) {
+		StringBuilder result = new StringBuilder();
+		boolean delim = false;
+		for (int id : ids) {
+			if (delim) {
+				result.append(';');
+			}
+			result.append(labelDao.getString((long)id, language_id));
+			delim = true;
+		}
+		return result.toString();
+	}
+	
+    @RequestMapping(value = "/screen.upload")
+	public void handleRequest(HttpServletRequest request, HttpServletResponse response) {
+		try {
+			String sid = request.getParameter("sid");
+			Long users_id = sessiondataDao.checkSession(sid);
+			String publicSID = request.getParameter("publicSID");
+			if (publicSID == null) {
+				throw new Exception("publicSID is empty: " + publicSID);
+			}
+			if (users_id == 0) {
+				//checkSession will return 0 in case of invalid session
+				throw new Exception("Request from invalid user " + users_id);
+			}
+
+			String domain = request.getParameter("domain");
+			if (domain == null) {
+				throw new Exception("domain is empty: " + domain);
+			}
+
+			String languageAsString = request.getParameter("languageAsString");
+			if (languageAsString == null) {
+				throw new Exception("languageAsString is empty: " + languageAsString);
+			}
+			Long language_id = Long.parseLong(languageAsString);
+
+			String rtmphostlocal = request.getParameter("rtmphostlocal");
+			if (rtmphostlocal == null) {
+				throw new Exception("rtmphostlocal is empty: " + rtmphostlocal);
+			}
+			
+			String baseURL = request.getParameter("baseurl");
+			if (baseURL == null) {
+				throw new Exception("baseurl is empty: " + baseURL);
+			}
+			log.debug("language_id :: " + language_id);
+			String label_sharer = "Sharer";
+
+			try {
+				label_sharer = getLabels(language_id
+					,  730,  731,  732,  733,  734
+					,  735,  737,  738,  739,  740
+					,  741,  742,  844,  869,  870
+					,  871,  872,  878, 1089, 1090
+					, 1091, 1092, 1093, 1465, 1466
+					, 1467, 1468, 1469, 1470, 1471
+					, 1472, 1473, 1474, 1475, 1476
+					, 1477, 1589, 1598, 1078);
+			} catch (Exception e) {
+				log.error("Error resolving Language labels : ", e);
+			}
+			log.debug("Creating JNLP Template for TCP solution");
+
+			log.debug("RTMP Sharer labels :: " + label_sharer);
+
+			ConnectionType conType = ConnectionType.valueOf(request.getParameter("connectionType"));
+
+			String port = request.getParameter("port");
+			if (port == null) {
+				throw new Exception("port is empty: ");
+			}
+			Client rc = sessionManager.getClientByPublicSID(publicSID, false, null);
+			if (rc == null) {
+				throw new Exception("Port is empty");
+			}
+			Long roomId = rc.getRoom_id();
+			if (roomId == null) {
+				throw new Exception("Client has no room " + rc);
+			}
+			Room room = roomDao.get(roomId);
+			boolean allowRecording = room.isAllowRecording() && rc.isAllowRecording() && (0 == sessionManager.getRecordingCount(roomId));
+			boolean allowPublishing = (0 == sessionManager.getPublishingCount(roomId));
+			
+			Context ctx = new VelocityContext();
+			ctx.put("codebase", baseURL + OmFileHelper.SCREENSHARING_DIR);
+			ctx.put("APP_NAME", cfgDao.getAppName());
+			ctx.put("protocol", conType.name());
+			ctx.put("host", rtmphostlocal);
+			ctx.put("port", port);
+			ctx.put("app", OpenmeetingsVariables.webAppRootKey + "/" + roomId);
+			ctx.put("userId", users_id);
+			ctx.put("publicSid", publicSID);
+			ctx.put("labels", label_sharer);
+			ctx.put("defaultQuality", cfgDao.getConfValue(CONFIG_SCREENSHARING_QUALITY, String.class, "1"));
+			ctx.put("defaultFps", cfgDao.getConfValue(CONFIG_SCREENSHARING_FPS, String.class, "10"));
+			ctx.put("showFps", cfgDao.getConfValue(CONFIG_SCREENSHARING_FPS_SHOW, Boolean.class, "true"));
+			ctx.put("allowRemote", cfgDao.getConfValue(CONFIG_SCREENSHARING_ALLOW_REMOTE, Boolean.class, "true"));
+			ctx.put("allowRecording", allowRecording);
+			ctx.put("allowPublishing", allowPublishing);
+			addKeystore(ctx);
+
+			String requestedFile = StringUtils.deleteWhitespace(domain + "_" + roomId) + ".jnlp";
+			response.setContentType("application/x-java-jnlp-file");
+			response.setCharacterEncoding("UTF-8");
+			response.setHeader("Content-Disposition", "Inline; filename=\"" + requestedFile + "\"");
+
+			VelocityEngine ve = new VelocityEngine();
+			ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath"); 
+			ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
+			ve.setProperty(Log4JLogChute.RUNTIME_LOG_LOG4J_LOGGER, Log4JLogChute.class.getName()); 
+			
+			ve.mergeTemplate(
+				"screenshare.vm"
+				, "UTF-8"
+				, ctx
+				, response.getWriter());
+		} catch (Exception er) {
+			log.error("[ScreenController]", er);
+		}
+	}
+
+	private void addKeystore(Context ctx) {
+		log.debug("RTMP Sharer Keystore :: start");
+		String keystore = "--dummy--", password = "--dummy--";
+		FileInputStream fis = null, ris = null;
+		try {
+			File conf = new File(OmFileHelper.getRootDir(), "conf");
+
+			File keyStore = new File(conf, "keystore.screen");
+			if (keyStore.exists()) {
+				Properties red5Props = new Properties();
+				ris = new FileInputStream(new File(conf, "red5.properties"));
+				red5Props.load(ris);
+				
+				byte keyBytes[] = new byte[(int)keyStore.length()];
+				fis = new FileInputStream(keyStore);
+				fis.read(keyBytes);
+				
+				keystore = Hex.encodeHexString(keyBytes);
+				password = red5Props.getProperty("rtmps.screen.keystorepass");
+				
+				/*
+				KeyStore ksIn = KeyStore.getInstance(KeyStore.getDefaultType());
+				ksIn.load(new FileInputStream(keyStore), red5Props.getProperty("rtmps.keystorepass").toCharArray());
+				ByteArrayInputStream bin = new ByteArrayInputStream()
+				
+				byte fileContent[] = new byte[(int)file.length()];
+				sb = addArgument(sb, Object arg)
+				ctx.put("$KEYSTORE", users_id);
+				/*
+				KeyStore ksOut = KeyStore.getInstance(KeyStore.getDefaultType());
+				for (Certificate cert : ksIn.getCertificateChain("red5")) {
+					PublicKey pub = cert.getPublicKey();
+					TrustedCertificateEntry tce = new TrustedCertificateEntry(cert);
+					tce.
+				}
+				*/
+			}
+		} catch (Exception e) {
+			//no op
+		} finally {
+			if (fis != null) {
+				try {
+					fis.close();
+				} catch (IOException e) {
+					// no op
+				}
+			}
+			if (ris != null) {
+				try {
+					ris.close();
+				} catch (IOException e) {
+					// no op
+				}
+			}
+		}
+		ctx.put("keystore", keystore);
+		ctx.put("password", password);
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/servlet/outputhandler/UploadController.java b/src/main/java/org/apache/openmeetings/servlet/outputhandler/UploadController.java
new file mode 100644
index 0000000..525d937
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/servlet/outputhandler/UploadController.java
@@ -0,0 +1,370 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.servlet.outputhandler;
+
+import static org.apache.openmeetings.util.OmFileHelper.bigImagePrefix;
+import static org.apache.openmeetings.util.OmFileHelper.chatImagePrefix;
+import static org.apache.openmeetings.util.OmFileHelper.profileImagePrefix;
+import static org.apache.openmeetings.util.OmFileHelper.thumbImagePrefix;
+
+import java.io.File;
+import java.io.InputStream;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.transaction.util.FileHelper;
+import org.apache.openmeetings.converter.GenerateImage;
+import org.apache.openmeetings.converter.GenerateThumbs;
+import org.apache.openmeetings.data.file.FileProcessor;
+import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.file.FileExplorerItem;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.documents.GeneratePDF;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.StoredFile;
+import org.apache.openmeetings.util.process.ConverterProcessResultList;
+import org.apache.openmeetings.util.process.UploadCompleteMessage;
+import org.apache.openmeetings.util.stringhandlers.StringComparer;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.multipart.MultipartFile;
+
+@Controller
+public class UploadController extends AbstractUploadController {
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			UploadController.class, OpenmeetingsVariables.webAppRootKey);
+	
+	@Autowired
+	private UserDao usersDao;
+	@Autowired
+	private ScopeApplicationAdapter scopeApplicationAdapter;
+	@Autowired
+	private GeneratePDF generatePDF;
+	@Autowired
+	private GenerateThumbs generateThumbs;
+	@Autowired
+	private GenerateImage generateImage;
+	@Autowired
+	private FileProcessor fileProcessor;
+	@Autowired
+	private FileExplorerItemDao fileExplorerItemDao;
+
+	private String filesString[] = null;
+	
+    @RequestMapping(value = "/file.upload", method = RequestMethod.POST)
+    public void handleFileUpload(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws ServletException {
+    	UploadInfo info = validate(request, false);
+    	try {
+			String room_idAsString = request.getParameter("room_id");
+			if (room_idAsString == null) {
+				throw new ServletException("Missing Room ID");
+			}
+	
+			Long room_id_to_Store = Long.parseLong(room_idAsString);
+	
+			String isOwnerAsString = request.getParameter("isOwner");
+			if (isOwnerAsString == null) {
+				throw new ServletException("Missing isOwnerAsString");
+			}
+			boolean isOwner = false;
+			if (isOwnerAsString.equals("1")) {
+				isOwner = true;
+			}
+	
+			String parentFolderIdAsString = request
+					.getParameter("parentFolderId");
+			if (parentFolderIdAsString == null) {
+				throw new ServletException("Missing parentFolderId ID");
+			}
+			Long parentFolderId = Long.parseLong(parentFolderIdAsString);
+	
+			MultipartFile multipartFile = info.file;
+			InputStream is = multipartFile.getInputStream();
+			log.debug("fileSystemName: " + info.filename);
+	
+			ConverterProcessResultList returnError = fileProcessor
+					.processFile(info.userId, room_id_to_Store, isOwner, is,
+							parentFolderId, info.filename, 0L, ""); // externalFilesId, externalType
+	
+			UploadCompleteMessage uploadCompleteMessage = new UploadCompleteMessage();
+	    	uploadCompleteMessage.setUserId(info.userId);
+	
+			// Flash cannot read the response of an upload
+			// httpServletResponse.getWriter().print(returnError);
+	    	uploadCompleteMessage.setMessage("library");
+	    	uploadCompleteMessage.setAction("newFile");
+	    	
+	    	setFileExplorerItem(uploadCompleteMessage,
+					fileExplorerItemDao.getFileExplorerItemsById(
+							returnError.getFileExplorerItemId()));
+			
+			uploadCompleteMessage.setHasError(returnError.hasError());
+			//we only send the complete log to the client if there is really something 
+			//to show because of an error
+			if (returnError.hasError()) {
+				uploadCompleteMessage.setError(returnError.getLogMessage());
+			}
+			uploadCompleteMessage.setFileName(returnError.getCompleteName());
+			
+			sendMessage(info, uploadCompleteMessage);
+		} catch (ServletException e) {
+			throw e;
+		} catch (Exception e) {
+			log.error("Exception during upload: ", e);
+			throw new ServletException(e);
+    	}
+    }
+    
+	public void setFileExplorerItem(UploadCompleteMessage msg, FileExplorerItem fileExplorerItem) {
+		if (fileExplorerItem.getIsImage() != null) {
+			msg.setIsImage(fileExplorerItem.getIsImage());
+		}
+		if (fileExplorerItem.getIsVideo() != null) {
+			msg.setIsVideo(fileExplorerItem.getIsVideo());
+		}
+		if (fileExplorerItem.getIsPresentation() != null) {
+			msg.setIsPresentation(fileExplorerItem.getIsPresentation());
+		}
+		msg.setFileSystemName(fileExplorerItem.getFileName());
+		msg.setFileHash(fileExplorerItem.getFileHash());
+	}
+    
+    @RequestMapping(value = "/remotelog.upload", method = RequestMethod.POST)
+    public void handleRemoteLog(HttpServletRequest request, HttpServletResponse response) throws ServletException {
+    	String message = request.getParameter("message");
+    	String sid = request.getParameter("sid");
+    	if (sid == null || message == null) return;
+    	Long userId = sessiondataDao.checkSession(sid);
+    	if (userId != null && userId != 0) {
+    		log.debug("[CLIENT MESSAGE] " + message);
+    	}
+    }
+    
+    @RequestMapping(value = "/upload.upload", method = RequestMethod.POST)
+    public void handleFormUpload(HttpServletRequest request, HttpServletResponse response) throws ServletException {
+		try {
+	    	UploadInfo info = validate(request, false);
+	    	
+			String room_id = request.getParameter("room_id");
+			if (room_id == null) {
+				room_id = "default";
+			}
+			String roomName = StringUtils.deleteWhitespace(room_id);
+	
+			String moduleName = request.getParameter("moduleName");
+			if (moduleName == null) {
+				moduleName = "nomodule";
+			}
+			if (moduleName.equals("nomodule")) {
+				log.debug("module name missed");
+				return;
+			}
+			boolean userProfile = moduleName.equals("userprofile");
+	
+			MultipartFile multipartFile = info.file;
+			InputStream is = multipartFile.getInputStream();
+			String fileSystemName = info.filename;
+			fileSystemName = StringUtils.deleteWhitespace(fileSystemName);
+	
+			UploadCompleteMessage uploadCompleteMessage = new UploadCompleteMessage();
+	    	uploadCompleteMessage.setUserId(info.userId);
+			
+			// Flash cannot read the response of an upload
+			// httpServletResponse.getWriter().print(returnError);
+			uploadFile(request, userProfile, info.userId, roomName, is, fileSystemName, uploadCompleteMessage);
+			sendMessage(info, uploadCompleteMessage);
+		} catch (ServletException e) {
+			throw e;
+		} catch (Exception e) {
+			log.error("Exception during upload: ", e);
+			throw new ServletException(e);
+		}
+    }
+
+    
+    private void sendMessage(UploadInfo info, UploadCompleteMessage uploadCompleteMessage) {
+		scopeApplicationAdapter.sendUploadCompletMessageByPublicSID(
+				uploadCompleteMessage, info.publicSID);
+    }
+    
+	private void uploadFile(HttpServletRequest request, boolean userProfile, Long userId, String roomName,
+			InputStream is, String fileSystemName, UploadCompleteMessage uploadCompleteMessage)
+			throws Exception {
+		ConverterProcessResultList returnError = new ConverterProcessResultList();
+
+		// Check variable to see if this file is a presentation
+		int dotidx = fileSystemName.lastIndexOf('.');
+		String newFileName = StringComparer.getInstance().compareForRealPaths(
+				fileSystemName.substring(0, dotidx));
+		String newFileExtDot = fileSystemName.substring(dotidx,
+				fileSystemName.length()).toLowerCase();
+		String newFileExt = newFileExtDot.substring(1);
+
+		// trim long names cause cannot output that
+		final int MAX_FILE_NAME_LENGTH = 30;
+		if (newFileName.length() >= MAX_FILE_NAME_LENGTH) {
+			newFileName = newFileName.substring(0, MAX_FILE_NAME_LENGTH);
+		}
+		StoredFile storedFile = new StoredFile(newFileName, newFileExt);
+
+		// check if this is a a file that can be converted by
+		// openoffice-service
+		boolean canBeConverted = storedFile.isConvertable();
+		boolean isPdf = storedFile.isPdf();
+		boolean isImage = storedFile.isImage();
+		boolean isAsIs = storedFile.isAsIs();
+
+		File workingDir = null;
+		// add outputfolders for profiles
+		if (userProfile) {
+			// User Profile Update
+			this.deleteUserProfileFilesStoreTemp(userId);
+			newFileName = "profile"; //set unified file name to avoid any problems with national characters
+			workingDir = OmFileHelper.getUploadProfilesUserDir(userId);
+		}
+		// if it is a presenation it will be copied to another
+		// place
+		if (isAsIs) {
+			// check if this is a room file or UserProfile
+			if (!userProfile) {
+				workingDir = OmFileHelper.getUploadRoomDir(roomName);
+			}
+		} else if (canBeConverted || isPdf || isImage) {
+			workingDir = OmFileHelper.getUploadTempProfilesUserDir(userId);
+		} else {
+			return;
+		}
+
+		File completeName = OmFileHelper.getNewFile(workingDir, newFileName, newFileExtDot);
+
+		log.debug("write file to : " + completeName);
+
+		FileHelper.copy(is, completeName);
+		is.close();
+
+		log.debug("canBeConverted: " + canBeConverted);
+		if (canBeConverted) {
+			// convert to pdf, thumbs, swf and xml-description
+			returnError = generatePDF.convertPDF(newFileName, roomName, true, completeName);
+		} else if (isPdf) {
+			
+			boolean isEncrypted = true; 
+			
+			log.debug("isEncrypted :: " + isEncrypted);
+
+			if (isEncrypted) {
+				// Do convert pdf to other pdf first
+				File f_old = completeName;
+
+				completeName = OmFileHelper.appendSuffix(completeName, "_N_E");
+				newFileName += "_N_E";
+
+				generateThumbs.decodePDF(f_old.getCanonicalPath(), completeName.getCanonicalPath());
+
+				if (f_old.exists()) {
+					f_old.delete();
+				}
+
+			}
+
+			// convert to thumbs, swf and xml-description
+			returnError = generatePDF.convertPDF(newFileName, roomName, false, completeName);
+
+			// returnError.put("decodePDF", returnError2);
+
+		} else if (isImage && !isAsIs) {
+
+			log.debug("##### isImage! userProfilePic: " + userProfile);
+
+			if (userProfile) {
+				// convert it to JPG
+				returnError = generateImage.convertImageUserProfile(completeName, userId, true);
+			} else {
+				// convert it to JPG
+				log.debug("##### convert it to JPG: " + userProfile);
+				returnError = generateImage.convertImage(
+					newFileName, newFileExtDot, roomName, newFileName, false);
+			}
+		} else if (isAsIs) {
+			if (userProfile) {
+				// User Profile Update
+				this.deleteUserProfileFiles(userId);
+				// is UserProfile Picture
+				returnError.addItem("processThumb1", generateThumbs
+						.generateThumb(chatImagePrefix, completeName, 40));
+				returnError.addItem("processThumb2", generateThumbs
+						.generateThumb(profileImagePrefix, completeName, 126));
+				returnError.addItem("processThumb3", generateThumbs
+						.generateThumb(bigImagePrefix, completeName, 240));
+
+				String pictureuri = completeName.getName();
+				User us = usersDao.get(userId);
+				us.setUpdatetime(new java.util.Date());
+				us.setPictureuri(pictureuri);
+				usersDao.update(us, userId);
+
+				//FIXME: After updating the picture url all other users should refresh
+			} else {
+				returnError.addItem("processThumb", generateThumbs
+						.generateThumb(thumbImagePrefix, completeName, 50));
+			}
+		}
+
+		uploadCompleteMessage.setMessage("library");
+		uploadCompleteMessage.setAction("newFile");
+		
+		uploadCompleteMessage.setHasError(returnError.hasError());
+		
+		//we only send the complete log to the client if there is really something 
+		//to show because of an error
+		if (returnError.hasError()) {
+			uploadCompleteMessage.setError(returnError.getLogMessage());
+		}
+		uploadCompleteMessage.setFileName(completeName.getName());
+		
+	}
+
+	private void deleteUserProfileFilesStoreTemp(Long users_id) throws Exception {
+		File f = OmFileHelper.getUploadProfilesUserDir(users_id);
+		if (f.exists() && f.isDirectory()) {
+			this.filesString = f.list();
+		}
+	}
+
+	private void deleteUserProfileFiles(Long users_id) throws Exception {
+		File working_imgdir = OmFileHelper.getUploadProfilesUserDir(users_id);
+
+		for (int i = 0; i < this.filesString.length; i++) {
+			String fileName = filesString[i];
+			File subf = new File(working_imgdir, fileName);
+			subf.delete();
+		}
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/session/ServerUtil.java b/src/main/java/org/apache/openmeetings/session/ServerUtil.java
new file mode 100644
index 0000000..05ad507
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/session/ServerUtil.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.session;
+
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Configures the current reference to the {@link Server} for this Tomcat/Web-Container.
+ * 
+ * It is a Spring Bean and configured as Singleton. There is only one instance of this 
+ * bean in the entire Web-Application.  
+ * 
+ * @author sebawagner
+ *
+ */
+public class ServerUtil {
+	protected static final Logger log = Red5LoggerFactory.getLogger(
+			ServerUtil.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private ServerDao serverDao;
+	
+	/**
+	 * Injected via Spring configuration
+	 * 
+	 * for cluster configuration, if only using one server (no cluster), serverId is null,
+	 * this is the current serverId of this Tomcat instance (null means no cluster is configured)
+	 */
+	private String serverId = null;
+	
+	/**
+	 * a reference of the current server in that Tomcat instance
+	 */
+	private Server currentServer;
+	
+	public String getServerId() {
+		return serverId;
+	}
+	
+	public void setServerId(String serverId) {
+		this.serverId = serverId;
+	}
+	
+	/**
+	 * 
+	 * @return the current server
+	 */
+	public Server getCurrentServer() {
+		if (serverId == null) {
+			return null;
+		}
+		if (currentServer != null && serverId.equals(currentServer.getId().toString())) {
+			return currentServer;
+		}
+		currentServer = serverDao.get(Long.parseLong(serverId));
+		if (currentServer == null) {
+			log.warn("You have configured a serverId that does not exist in your list of servers, serverId: "+serverId);
+		}
+		return currentServer;
+	}
+}
diff --git a/src/main/java/org/apache/openmeetings/session/SessionManager.java b/src/main/java/org/apache/openmeetings/session/SessionManager.java
new file mode 100644
index 0000000..3b4b0d8
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/session/SessionManager.java
@@ -0,0 +1,441 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.session;

+

+import java.math.BigInteger;

+import java.util.ArrayList;

+import java.util.Arrays;

+import java.util.Collection;

+import java.util.Date;

+import java.util.LinkedList;

+import java.util.List;

+import java.util.Map.Entry;

+import java.util.Random;

+

+import org.apache.openmeetings.db.dao.server.ISessionManager;

+import org.apache.openmeetings.db.dto.basic.SearchResult;

+import org.apache.openmeetings.db.dto.server.ClientSessionInfo;

+import org.apache.openmeetings.db.entity.room.Client;

+import org.apache.openmeetings.db.entity.server.Server;

+import org.apache.openmeetings.session.store.IClientPersistenceStore;

+import org.apache.openmeetings.util.OpenmeetingsVariables;

+import org.apache.openmeetings.util.crypt.ManageCryptStyle;

+import org.red5.logging.Red5LoggerFactory;

+import org.slf4j.Logger;

+import org.springframework.beans.factory.annotation.Autowired;

+

+/**

+ * Handle {@link Client} objects.

+ * 

+ * Use a kind of decorator pattern to inject the {@link Server} into every call.

+ * 

+ * @author sebawagner

+ * 

+ */

+public class SessionManager implements ISessionManager {

+	

+	protected static final Logger log = Red5LoggerFactory.getLogger(

+			SessionManager.class, OpenmeetingsVariables.webAppRootKey);

+	

+	@Autowired

+	private ServerUtil serverUtil;

+	

+	/**

+	 * Injected via Spring, needs a getter/setter because it can be configured

+	 * Autowired will not suit here as there are multiple implementations of the

+	 * {@link IClientPersistenceStore}

+	 */

+	private IClientPersistenceStore cache;

+	

+	public IClientPersistenceStore getCache() {

+		return cache;

+	}

+

+	public void setCache(IClientPersistenceStore cache) {

+		this.cache = cache;

+	}

+

+	private ISessionManager sessionManager = new ISessionManager() {

+		

+		public synchronized Client addClientListItem(String streamId,

+				String scopeName, Integer remotePort, String remoteAddress,

+				String swfUrl, boolean isAVClient, Server server) {

+			try {

+

+				// Store the Connection into a bean and add it to the HashMap

+				Client rcm = new Client();

+				rcm.setConnectedSince(new Date());

+				rcm.setStreamid(streamId);

+				rcm.setScope(scopeName);

+				long random = System.currentTimeMillis() + new BigInteger(256, new Random()).longValue();

+				

+				rcm.setPublicSID(ManageCryptStyle.getInstanceOfCrypt()

+						.createPassPhrase(String.valueOf(random).toString()));

+

+				rcm.setServer(server);

+				rcm.setUserport(remotePort);

+				rcm.setUserip(remoteAddress);

+				rcm.setSwfurl(swfUrl);

+				rcm.setIsMod(new Boolean(false));

+				rcm.setCanDraw(new Boolean(false));

+				rcm.setIsAVClient(isAVClient);

+

+				if (cache.containsKey(null, streamId)) {

+					log.error("Tried to add an existing Client " + streamId);

+					return null;

+				}

+

+				cache.put(rcm.getStreamid(), rcm);

+

+				return rcm;

+			} catch (Exception err) {

+				log.error("[addClientListItem]", err);

+			}

+			return null;

+		}

+

+		public synchronized Collection<Client> getClients() {

+			return cache.getClients();

+		}

+		

+		public synchronized Collection<Client> getClientsWithServer() {

+			return cache.getClientsWithServer();

+		}

+

+		public synchronized Client getClientByStreamId(String streamId, Server server) {

+			try {

+				if (!cache.containsKey(server, streamId)) {

+					log.debug("Tried to get a non existing Client " + streamId + " server " + server);

+					return null;

+				}

+				return cache.get(server, streamId);

+			} catch (Exception err) {

+				log.error("[getClientByStreamId]", err);

+			}

+			return null;

+		}

+

+		public Client getClientByPublicSID(String publicSID, boolean isAVClient, Server server) {

+			try {

+				for (Client rcl : cache.getClientsByPublicSID(server, publicSID)) {

+					if (rcl.getIsAVClient() != isAVClient) {

+						continue;

+					}

+					return rcl;

+				}

+			} catch (Exception err) {

+				log.error("[getClientByPublicSID]", err);

+			}

+			return null;

+		}

+		

+		public ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID, boolean isAVClient) {

+			try {

+				for (Entry<Long,List<Client>> entry : cache.getClientsByPublicSID(publicSID).entrySet()) {

+					for (Client rcl : entry.getValue()) {

+						if (rcl.getIsAVClient() != isAVClient) {

+							continue;

+						}

+						return new ClientSessionInfo(rcl, entry.getKey());

+					}

+				}

+			} catch (Exception err) {

+				log.error("[getClientByPublicSIDAnyServer]", err);

+			}

+			return null;

+		}

+

+		public synchronized Client getClientByUserId(Long userId) {

+			try {

+				for (Client rcl : cache.getClientsByUserId(null, userId)) {

+					

+					if (rcl.getIsScreenClient()) {

+						continue;

+					}

+					

+					if (rcl.getIsAVClient()) {

+						continue;

+					}

+					

+					return rcl;

+				}

+			} catch (Exception err) {

+				log.error("[getClientByUserId]", err);

+			}

+			return null;

+		}

+

+		public synchronized Boolean updateAVClientByStreamId(String streamId, Client rcm, Server server) {

+			try {

+				// get the corresponding user session object and update the settings

+				Client rclUsual = getClientByPublicSID(rcm.getPublicSID(), false, server);

+				if (rclUsual != null) {

+					rclUsual.setBroadCastID(rcm.getBroadCastID());

+					rclUsual.setAvsettings(rcm.getAvsettings());

+					rclUsual.setVHeight(rcm.getVHeight());

+					rclUsual.setVWidth(rcm.getVWidth());

+					rclUsual.setVX(rcm.getVX());

+					rclUsual.setVY(rcm.getVY());

+					Client rclSaved = cache.get(server, rclUsual.getStreamid());

+					if (rclSaved != null) {

+						cache.put(rclUsual.getStreamid(), rclUsual);

+					} else {

+						log.debug("Tried to update a non existing Client " + rclUsual.getStreamid());

+					}

+				}

+

+				updateClientByStreamId(streamId, rcm, false, server);

+			} catch (Exception err) {

+				log.error("[updateAVClientByStreamId]", err);

+			}

+			return null;

+		}

+

+		public synchronized Boolean updateClientByStreamId(String streamId,

+				Client rcm, boolean updateRoomCount, Server server) {

+			try {

+				

+				Client rclSaved = cache.get(server, streamId);

+				

+				if (rclSaved != null) {

+					cache.put(streamId, rcm);

+					return true;

+				} else {

+					log.debug("Tried to update a non existing Client " + streamId);

+					return false;

+				}

+			} catch (Exception err) {

+				log.error("[updateClientByStreamId]", err);

+			}

+			return null;

+		}

+

+		public synchronized Boolean removeClient(String streamId, Server server) {

+			try {

+				if (cache.containsKey(server,streamId)) {

+					cache.remove(server,streamId);

+					return true;

+				} else {

+					log.debug("Tried to remove a non existing Client " + streamId);

+					return false;

+				}

+			} catch (Exception err) {

+				log.error("[removeClient]", err);

+			}

+			return null;

+		}

+

+		public synchronized ArrayList<Client> getClientListByRoom(Long roomId) {

+			ArrayList<Client> roomClientList = new ArrayList<Client>();

+			try {

+

+				for (Client rcl : cache.getClientsByRoomId(roomId)) {

+

+					if (rcl.getIsScreenClient()) {

+						continue;

+					}

+					if (rcl.getIsAVClient()) {

+						continue;

+					}

+

+					// Only parse really those users out that are really a full session object

+					// and no pseudo session object like the audio/video or screen

+					// sharing connection

+					roomClientList.add(rcl);

+				}

+			} catch (Exception err) {

+				log.error("[getClientListByRoom]", err);

+			}

+			return roomClientList;

+		}

+		

+		public synchronized Collection<Client> getClientListByRoomAll(Long roomId) {

+			try {

+				return cache.getClientsByRoomId(roomId);

+			} catch (Exception err) {

+				log.error("[getClientListByRoomAll]", err);

+			}

+			return null;

+		}

+

+		public synchronized List<Client> getCurrentModeratorByRoom(Long room_id) {

+			List<Client> rclList = new LinkedList<Client>();

+			List<Client> currentClients = this.getClientListByRoom(room_id);

+			for (Client rcl : currentClients) {

+				if (rcl.getIsMod()) {

+					rclList.add(rcl);

+				}

+			}

+

+			return rclList;

+		}

+

+		// FIXME not sorted

+		public synchronized SearchResult<Client> getListByStartAndMax(

+				int start, int max, String orderby, boolean asc) {

+			SearchResult<Client> sResult = new SearchResult<Client>();

+			sResult.setObjectName(Client.class.getName());

+			sResult.setRecords(Long.valueOf(cache.size()).longValue());

+			sResult.setResult(cache.getClientsWithServer());

+			return sResult;

+		}

+

+		public long getRecordingCount(long roomId) {

+			List<Client> currentClients = this.getClientListByRoom(roomId);

+			int numberOfRecordingUsers = 0;

+			for (Client rcl : currentClients) {

+				if (rcl.isStartRecording()) {

+					numberOfRecordingUsers++;

+				}

+			}

+			return numberOfRecordingUsers;

+		}

+

+		public long getPublishingCount(long roomId) {

+			List<Client> currentClients = this.getClientListByRoom(roomId);

+			int numberOfPublishingUsers = 0;

+			for (Client rcl : currentClients) {

+				if (rcl.isStreamPublishStarted()) {

+					numberOfPublishingUsers++;

+				}

+			}

+			return numberOfPublishingUsers;

+		}

+		

+		public List<Long> getActiveRoomIdsByServer(Server server) {

+			return cache.getRoomsIdsByServer(server);

+		}

+		

+		

+		public String getSessionStatistics() {

+			return cache.getDebugInformation(Arrays.asList(IClientPersistenceStore.DEBUG_DETAILS.SIZE));

+		}

+

+		public void sessionStart() {

+			// TODO Auto-generated method stub

+			

+		}

+		

+	};

+	

+	public Client addClientListItem(String streamId, String scopeName,

+			Integer remotePort, String remoteAddress, String swfUrl,

+			boolean isAVClient, Server server) {

+		if (server == null) {

+			server = serverUtil.getCurrentServer();

+		}

+		return sessionManager.addClientListItem(streamId, scopeName,

+				remotePort, remoteAddress, swfUrl, isAVClient, server);

+	}

+

+	public Collection<Client> getClients() {

+		return sessionManager.getClients();

+	}

+	

+	public Collection<Client> getClientsWithServer() {

+		return sessionManager.getClientsWithServer();

+	}

+

+	public Client getClientByStreamId(String streamId, Server server) {

+		if (server == null) {

+			server = serverUtil.getCurrentServer();

+		}

+		return sessionManager.getClientByStreamId(streamId, server);

+	}

+

+	public Client getClientByPublicSID(String publicSID, boolean isAVClient,

+			Server server) {

+		if (server == null) {

+			server = serverUtil.getCurrentServer();

+		}

+		return sessionManager.getClientByPublicSID(publicSID, isAVClient,

+				server);

+	}

+

+	public ClientSessionInfo getClientByPublicSIDAnyServer(String publicSID,

+			boolean isAVClient) {

+		return sessionManager.getClientByPublicSIDAnyServer(publicSID,

+				isAVClient);

+	}

+

+	public Client getClientByUserId(Long userId) {

+		return sessionManager.getClientByUserId(userId);

+	}

+

+	public Boolean updateAVClientByStreamId(String streamId, Client rcm, Server server) {

+		if (server == null) {

+			server = serverUtil.getCurrentServer();

+		}

+		return sessionManager.updateAVClientByStreamId(streamId, rcm, server);

+	}

+

+	public Boolean updateClientByStreamId(String streamId, Client rcm,

+			boolean updateRoomCount, Server server) {

+		if (server == null) {

+			server = serverUtil.getCurrentServer();

+		}

+		return sessionManager.updateClientByStreamId(streamId, rcm,

+				updateRoomCount, server);

+	}

+

+	public Boolean removeClient(String streamId, Server server) {

+		if (server == null) {

+			server = serverUtil.getCurrentServer();

+		}

+		return sessionManager.removeClient(streamId, server);

+	}

+

+	public List<Client> getClientListByRoom(Long room_id) {

+		return sessionManager.getClientListByRoom(room_id);

+	}

+

+	public Collection<Client> getClientListByRoomAll(Long room_id) {

+		return sessionManager.getClientListByRoomAll(room_id);

+	}

+

+	public List<Client> getCurrentModeratorByRoom(Long room_id) {

+		return sessionManager.getCurrentModeratorByRoom(room_id);

+	}

+

+	public SearchResult<Client> getListByStartAndMax(int start, int max,

+			String orderby, boolean asc) {

+		return sessionManager.getListByStartAndMax(start, max, orderby, asc);

+	}

+

+	public long getRecordingCount(long roomId) {

+		return sessionManager.getRecordingCount(roomId);

+	}

+

+	public long getPublishingCount(long roomId) {

+		return sessionManager.getPublishingCount(roomId);

+	}

+

+	public List<Long> getActiveRoomIdsByServer(Server server) {

+		return sessionManager.getActiveRoomIdsByServer(server == null ? serverUtil.getCurrentServer() : server);

+	}

+

+	public String getSessionStatistics() {

+		return sessionManager.getSessionStatistics();

+	}

+

+	public void sessionStart() {

+		sessionManager.sessionStart();

+	}

+	

+}

diff --git a/src/main/java/org/apache/openmeetings/session/store/DatabaseStore.java b/src/main/java/org/apache/openmeetings/session/store/DatabaseStore.java
new file mode 100644
index 0000000..9529ebd
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/session/store/DatabaseStore.java
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.session.store;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.room.ClientDao;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class DatabaseStore implements IClientPersistenceStore {
+	
+	@Autowired
+	private ClientDao clientDao;
+	
+	public void clearCache() {
+		
+		//List<Server> serverList = serverDao.getActiveServers();
+		
+		//clientDao.cleanUpClientsWithoutReference();
+	}
+	
+	public void put(String streamId, Client rcl) {
+		if (rcl.getId() > 0) {
+			clientDao.update(rcl);
+		} else {
+			clientDao.add(rcl);
+		}
+	}
+
+	public boolean containsKey(Server server, String streamId) {
+		return clientDao.countClientsByServerAndStreamId(server, streamId) > 0;
+	}
+
+	public Client get(Server server, String streamId) {
+		return clientDao.getClientByServerAndStreamId(server, streamId);
+	}
+
+	public List<Client> getClientsByPublicSID(Server server, String publicSID) {
+		return clientDao.getClientsByPublicSIDAndServer(server, publicSID);
+	}
+
+	public Map<Long, List<Client>> getClientsByPublicSID(String publicSID) {
+		Map<Long, List<Client>> returnMap = new HashMap<Long, List<Client>>();
+		List<Client> clientList = clientDao.getClientsByPublicSID(publicSID);
+		for (Client cl : clientList) {
+			
+			if (cl.getServer() == null) {
+				List<Client> clList = returnMap.get(null);
+				if (clList == null) {
+					clList = new ArrayList<Client>();
+				}
+				clList.add(cl);
+				returnMap.put(null, clList);
+			} else {
+				List<Client> clList = returnMap.get(cl.getServer().getId());
+				if (clList == null) {
+					clList = new ArrayList<Client>();
+				}
+				clList.add(cl);
+				returnMap.put(cl.getServer().getId(), clList);
+			}
+		}
+		return returnMap;
+	}
+	
+	public Collection<Client> getClients() {
+		return clientDao.getClients();
+	}
+	
+	public Collection<Client> getClientsWithServer() {
+		return clientDao.getClientsWithServer();
+	}
+
+	public Collection<Client> getClientsByServer(Server server) {
+		return clientDao.getClientsByServer(server);
+	}
+
+	public List<Client> getClientsByUserId(Server server, Long userId) {
+		return clientDao.getClientsByUserId(server, userId);
+	}
+
+	public List<Client> getClientsByRoomId(Long roomId) {
+		return clientDao.getClientsByRoomId(roomId);
+	}
+
+	public void remove(Server server, String streamId) {
+		clientDao.removeClientByServerAndStreamId(server, streamId);
+	}
+
+	public int size() {
+		return clientDao.countClients();
+	}
+
+	public int sizeByServer(Server server) {
+		return clientDao.countClientsByServer(server);
+	}
+
+	public Collection<Client> values() {
+		return clientDao.getClients();
+	}
+
+	public String getDebugInformation(List<DEBUG_DETAILS> detailLevel) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	public List<Long> getRoomsIdsByServer(Server server) {
+		return clientDao.getRoomsIdsByServer(server);
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/session/store/HashMapStore.java b/src/main/java/org/apache/openmeetings/session/store/HashMapStore.java
new file mode 100644
index 0000000..4adf20d
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/session/store/HashMapStore.java
@@ -0,0 +1,188 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.session.store;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * Stores the session in the memory.
+ * Is NOT designed to be clustered across multiple servers.
+ * 
+ * <ul>
+ * <li>client by streamid</li>
+ * <li>client by publicSID</li>
+ * <li>client by userId</li>
+ * <li>clients by roomId</li>
+ * <li>roomIds by server</li>
+ * </ul>
+ * 
+ * @author sebawagner
+ * 
+ */
+public class HashMapStore implements IClientPersistenceStore {
+	protected static final Logger log = Red5LoggerFactory.getLogger(
+			HashMapStore.class, OpenmeetingsVariables.webAppRootKey);
+	
+	
+	private LinkedHashMap<String, Client> clientsByStreamId = new LinkedHashMap<String, Client>();
+
+	public void clearCache() {
+		clientsByStreamId = new LinkedHashMap<String, Client>();
+	}
+	
+	public void put(String streamId, Client rcl) {
+		clientsByStreamId.put(rcl.getStreamid(), rcl);
+	}
+
+	public boolean containsKey(Server server, String streamId) {
+		return clientsByStreamId.containsKey(streamId);
+	}
+
+	public Client get(Server server, String streamId) {
+		return clientsByStreamId.get(streamId);
+	}
+	
+	public List<Client> getClientsByPublicSID(Server server, String publicSID) {
+		List<Client> clientList = new ArrayList<Client>();
+		for (Client cl : clientsByStreamId.values()) {
+			if (cl.getPublicSID().equals(publicSID)) {
+				clientList.add(cl);
+			}
+		}
+		return clientList;
+	}
+	
+	public Map<Long,List<Client>> getClientsByPublicSID(String publicSID) {
+		Map<Long,List<Client>> clientMapList = new HashMap<Long,List<Client>>();
+		List<Client> clientList = new ArrayList<Client>();
+		for (Client cl : clientsByStreamId.values()) {
+			if (cl.getPublicSID().equals(publicSID)) {
+				clientList.add(cl);
+			}
+		}
+		clientMapList.put(null, clientList);
+		return clientMapList;
+	}
+	
+	public Collection<Client> getClients() {
+		return clientsByStreamId.values();
+	}
+	
+	public Collection<Client> getClientsWithServer() {
+		//there is no server object to be loaded, memory cache means
+		//there is no cluster enabled
+		return getClients();
+	}
+	
+	public Collection<Client> getClientsByServer(Server server) {
+		return clientsByStreamId.values();
+	}
+	
+	public List<Client> getClientsByUserId(Server server, Long userId) {
+		List<Client> clientList = new ArrayList<Client>();
+		for (Client cl : clientsByStreamId.values()) {
+			if (cl.getUser_id().equals(userId)) {
+				clientList.add(cl);
+			}
+		}
+		return clientList;
+	}
+	
+	public  List<Client> getClientsByRoomId(Long roomId) {
+		List<Client> clientList = new ArrayList<Client>();
+		for (Client cl : clientsByStreamId.values()) {
+			if (cl.getRoom_id() != null && cl.getRoom_id().equals(roomId)) {
+				clientList.add(cl);
+			}
+		}
+		return clientList;
+	}
+
+	public void remove(Server server, String streamId) {
+		clientsByStreamId.remove(streamId);
+	}
+
+	public int size() {
+		return clientsByStreamId.size();
+	}
+	
+	public int sizeByServer(Server server) {
+		return clientsByStreamId.size();
+	}
+
+	public Collection<Client> values() {
+		return clientsByStreamId.values();
+	}
+	
+	public int getTotalNumberOfSessions() {
+		return clientsByStreamId.size();
+	}
+	
+	
+	/**
+	 * Print some session statistics to the debug out
+	 * 
+	 * @param detailLevel
+	 */
+	public void printDebugInformation(List<DEBUG_DETAILS> detailLevel) {
+		log.debug("Session Statistics Start ################## ");
+		log.debug(getDebugInformation(detailLevel));
+		log.debug("Session Statistics End ################## ");
+	}
+
+	public String getDebugInformation(List<DEBUG_DETAILS> detailLevel) {
+
+		StringBuilder statistics = new StringBuilder();
+
+		if (detailLevel.contains(DEBUG_DETAILS.SIZE)) {
+			addNewLine(statistics, "Number of sessions Total "
+					+ getTotalNumberOfSessions());
+		}
+
+		return statistics.toString();
+	}
+
+	private void addNewLine(StringBuilder strBuilder, String message) {
+		strBuilder.append(message + "\n\r");
+	}
+
+	public List<Long> getRoomsIdsByServer(Server server) {
+		HashSet<Long> rooms = new HashSet<Long>();
+		for (Client cl : clientsByStreamId.values()) {
+			Long roomId = cl.getRoom_id();
+			if (roomId != null && roomId > 0 && !rooms.contains(roomId)) {
+				rooms.add(roomId);
+			}
+		}
+		return new ArrayList<Long>(rooms);
+	}
+
+}
diff --git a/src/main/java/org/apache/openmeetings/session/store/IClientPersistenceStore.java b/src/main/java/org/apache/openmeetings/session/store/IClientPersistenceStore.java
new file mode 100644
index 0000000..9aa7e36
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/session/store/IClientPersistenceStore.java
@@ -0,0 +1,142 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.session.store;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Server;
+
+public interface IClientPersistenceStore {
+
+	public enum DEBUG_DETAILS {
+		SIZE
+	}
+	
+	/**
+	 * called upon start of the session cache
+	 */
+	public abstract void clearCache();
+
+	/**
+	 * 
+	 * @param streamId
+	 * @param rcl
+	 */
+	public abstract void put(String streamId, Client rcl);
+	
+	/**
+	 * 
+	 * @param server
+	 * @param streamId
+	 * @return
+	 */
+	public boolean containsKey(Server server, String streamId);
+
+	/**
+	 * by server and publicSID
+	 * 
+	 * @param server
+	 * @param streamId
+	 * @return will return null if the client does not exist in the list
+	 */
+	public abstract Client get(Server server, String streamId);
+
+	/**
+	 * 
+	 * @param server
+	 * @param publicSID
+	 * @return will return an empty list if nothing available
+	 */
+	public abstract List<Client> getClientsByPublicSID(Server server,
+			String publicSID);
+
+	/**
+	 * Searches for the publicSID across all servers
+	 * 
+	 * @param publicSID
+	 * @return will return a map with the serverId as key and the RoomClients as list in the value
+	 */
+	public abstract Map<Long, List<Client>> getClientsByPublicSID(
+			String publicSID);
+
+	public abstract Collection<Client> getClients();
+	
+	/**
+	 * get all clients by a specific {@link Server}
+	 * 
+	 * @param server
+	 * @return will return an empty map if nothing available
+	 */
+	public abstract Collection<Client> getClientsByServer(Server server);
+
+	/**
+	 * 
+	 * @param server
+	 * @param userId
+	 * @return will return an empty list if nothing available
+	 */
+	public abstract Collection<Client> getClientsByUserId(Server server, Long userId);
+
+	/**
+	 * 
+	 * We ignore the server here, cause ONE room can only be on ONE server and often we don't know where.
+	 * 
+	 * @param roomId
+	 * @return will return an empty map if nothing available
+	 */
+	public abstract List<Client> getClientsByRoomId(Long roomId);
+
+	public abstract void remove(Server server, String streamId);
+
+	public abstract int size();
+
+	public abstract int sizeByServer(Server server);
+
+	public abstract Collection<Client> values();
+	
+	/**
+	 * Get some session statistics
+	 * 
+	 * @param detailLevel
+	 * @return
+	 */
+	public abstract String getDebugInformation(List<DEBUG_DETAILS> detailLevel);
+
+	/**
+	 * returns a list of roomIds (unique) that are currently active on the given server
+	 * In case the session is stored in the memory (no-cluster setup) it will always 
+	 * return simply all active roomIds
+	 * 
+	 * @param server
+	 * @return
+	 */
+	public abstract List<Long> getRoomsIdsByServer(Server server);
+
+	/**
+	 * if database cache + cluster is enabled, the server object will be loaded 
+	 * into the client
+	 * 
+	 * @return
+	 */
+	public abstract Collection<Client> getClientsWithServer();
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/apache/openmeetings/util/LinkHelper.java b/src/main/java/org/apache/openmeetings/util/LinkHelper.java
new file mode 100644
index 0000000..c58cb72
--- /dev/null
+++ b/src/main/java/org/apache/openmeetings/util/LinkHelper.java
@@ -0,0 +1,46 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.util;

+

+import static org.apache.openmeetings.web.user.rooms.RoomEnterBehavior.getRoomUrlFragment;

+

+import org.apache.openmeetings.db.entity.room.Invitation;

+import org.apache.openmeetings.db.entity.user.User.Type;

+

+public class LinkHelper {

+	

+	public static String getInvitationLink(String baseUrl, Invitation i) {

+		String link = baseUrl;

+		if (link == null) {

+			return null;

+		}

+		if (i.getRoom() != null) {

+			if (i.getInvitee().getType() == Type.contact) {

+				link += "?invitationHash=" + i.getHash();

+		

+				if (i.getInvitee().getLanguage_id() > 0) {

+					link += "&language=" + i.getInvitee().getLanguage_id().toString();

+				}

+			} else {

+				link = getRoomUrlFragment(i.getRoom().getRooms_id()).getLink(baseUrl);

+			}

+		}

+		return link;

+	}

+}

diff --git a/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml b/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
new file mode 100644
index 0000000..cf8a6af
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/META-INF/db2_persistence.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- persistence.xml schema -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
+	version="2.0">
+	<persistence-unit name="openmeetings" transaction-type="RESOURCE_LOCAL">
+		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+		<class>org.apache.openmeetings.db.entity.basic.Configuration</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorType</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorValue</class>
+		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
+		<class>org.apache.openmeetings.db.entity.basic.MailMessage</class>
+		<class>org.apache.openmeetings.db.entity.basic.Naviglobal</class>
+		<class>org.apache.openmeetings.db.entity.basic.Navimain</class>
+		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
+		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
+		<class>org.apache.openmeetings.db.entity.server.Server</class>
+		<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentCategory</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps</class>
+		<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
+		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation_Users</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecording</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingLog</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaData</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaDelta</class>
+		<class>org.apache.openmeetings.db.entity.room.Invitation</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLogType</class>
+		<class>org.apache.openmeetings.db.entity.room.PollType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswers</class>
+		<class>org.apache.openmeetings.db.entity.room.Client</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
+		<class>org.apache.openmeetings.db.entity.room.Room</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomOrganisation</class>
+		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
+		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
+		<class>org.apache.openmeetings.db.entity.user.Address</class>
+		<class>org.apache.openmeetings.db.entity.user.State</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>
+		<class>org.apache.openmeetings.db.entity.user.Salutation</class>
+		<class>org.apache.openmeetings.db.entity.user.UserContact</class>
+		<class>org.apache.openmeetings.db.entity.user.Userdata</class>
+		<class>org.apache.openmeetings.db.entity.user.User</class>
+		<class>org.apache.openmeetings.db.entity.file.FileExplorerItem</class>
+		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
+		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>
+		<exclude-unlisted-classes>false</exclude-unlisted-classes>
+		<properties>
+			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
+			<property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp2.BasicDataSource" />
+			<property name="openjpa.ConnectionProperties"
+				value="DriverClassName=com.ibm.db2.jcc.DB2Driver
+					, Url=jdbc:db2://localhost:50000/openmeet
+					, MaxActive=100
+					, MaxWait=10000
+					, TestOnBorrow=true
+					, poolPreparedStatements=true
+					, Username=db2admin
+					, Password=admin" />
+			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
+			<property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO" />
+			<property name="openjpa.DataCache" value="true" />
+			<property name="openjpa.QueryCache" value="true" />
+			<property name="openjpa.jdbc.DBDictionary" value="batchLimit=100" />
+			<property name="openjpa.jdbc.QuerySQLCache" value="false" />
+		</properties>
+	</persistence-unit>
+</persistence>
diff --git a/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml b/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
new file mode 100644
index 0000000..df6cc2e
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/META-INF/derby_persistence.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- persistence.xml schema -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
+	version="2.0">
+	<persistence-unit name="openmeetings" transaction-type="RESOURCE_LOCAL">
+		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+		<class>org.apache.openmeetings.db.entity.basic.Configuration</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorType</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorValue</class>
+		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
+		<class>org.apache.openmeetings.db.entity.basic.MailMessage</class>
+		<class>org.apache.openmeetings.db.entity.basic.Naviglobal</class>
+		<class>org.apache.openmeetings.db.entity.basic.Navimain</class>
+		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
+		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
+		<class>org.apache.openmeetings.db.entity.server.Server</class>
+		<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentCategory</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps</class>
+		<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
+		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation_Users</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecording</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingLog</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaData</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaDelta</class>
+		<class>org.apache.openmeetings.db.entity.room.Invitation</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLogType</class>
+		<class>org.apache.openmeetings.db.entity.room.PollType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswers</class>
+		<class>org.apache.openmeetings.db.entity.room.Client</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
+		<class>org.apache.openmeetings.db.entity.room.Room</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomOrganisation</class>
+		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
+		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
+		<class>org.apache.openmeetings.db.entity.user.Address</class>
+		<class>org.apache.openmeetings.db.entity.user.State</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>
+		<class>org.apache.openmeetings.db.entity.user.Salutation</class>
+		<class>org.apache.openmeetings.db.entity.user.UserContact</class>
+		<class>org.apache.openmeetings.db.entity.user.Userdata</class>
+		<class>org.apache.openmeetings.db.entity.user.User</class>
+		<class>org.apache.openmeetings.db.entity.file.FileExplorerItem</class>
+		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
+		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>
+		<exclude-unlisted-classes>false</exclude-unlisted-classes>
+		<properties>
+			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
+			<property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp2.BasicDataSource" />
+			<property name="openjpa.ConnectionProperties"
+				value="DriverClassName=org.apache.derby.jdbc.EmbeddedDriver,
+                                  Url=jdbc:derby:openmeetings;create=true, 
+                                  create=true,
+                                  MaxActive=100, 
+                                  MaxWait=10000, 
+                                  TestOnBorrow=true, 
+                                  Username=user, 
+                                  Password=secret" />
+			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
+			<property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO" />
+			<property name="openjpa.DataCache" value="true" />
+			<!-- QueryCache disabled due to changes outside of JPA doesn't take effect with caching -->
+			<property name="openjpa.QueryCache" value="false" />
+			<property name="openjpa.jdbc.DBDictionary" value="batchLimit=100" />
+			<property name="openjpa.jdbc.QuerySQLCache" value="false" />
+		</properties>
+	</persistence-unit>
+</persistence>
diff --git a/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml b/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
new file mode 100644
index 0000000..abc9e4e
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/META-INF/mssql_persistence.xml
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- persistence.xml schema -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0">
+	<persistence-unit name="openmeetings" transaction-type="RESOURCE_LOCAL">
+		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+		<class>org.apache.openmeetings.db.entity.basic.Configuration</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorType</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorValue</class>
+		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
+		<class>org.apache.openmeetings.db.entity.basic.MailMessage</class>
+		<class>org.apache.openmeetings.db.entity.basic.Naviglobal</class>
+		<class>org.apache.openmeetings.db.entity.basic.Navimain</class>
+		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
+		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
+		<class>org.apache.openmeetings.db.entity.server.Server</class>
+		<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentCategory</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps</class>
+		<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
+		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation_Users</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecording</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingLog</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaData</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaDelta</class>
+		<class>org.apache.openmeetings.db.entity.room.Invitation</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLogType</class>
+		<class>org.apache.openmeetings.db.entity.room.PollType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswers</class>
+		<class>org.apache.openmeetings.db.entity.room.Client</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
+		<class>org.apache.openmeetings.db.entity.room.Room</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomType</class>
+		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
+		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomOrganisation</class>
+		<class>org.apache.openmeetings.db.entity.user.Address</class>
+		<class>org.apache.openmeetings.db.entity.user.State</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>
+		<class>org.apache.openmeetings.db.entity.user.Salutation</class>
+		<class>org.apache.openmeetings.db.entity.user.UserContact</class>
+		<class>org.apache.openmeetings.db.entity.user.Userdata</class>
+		<class>org.apache.openmeetings.db.entity.user.User</class>
+		<class>org.apache.openmeetings.db.entity.file.FileExplorerItem</class>
+		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
+		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>
+		<exclude-unlisted-classes>false</exclude-unlisted-classes>
+		<properties>
+			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
+			<property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp2.BasicDataSource" />
+			<property name="openjpa.ConnectionProperties"
+				value="DriverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
+					, Url=jdbc:sqlserver://localhost:1433;databaseName=openmeetings
+					, Username=Username
+					, Password=Password" />
+			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
+			<property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO" />
+			<property name="openjpa.DataCache" value="true" />
+			<property name="openjpa.QueryCache" value="true" />
+			<property name="openjpa.jdbc.DBDictionary" value="batchLimit=100" />
+			<property name="openjpa.jdbc.QuerySQLCache" value="false" />
+		</properties>
+	</persistence-unit>
+</persistence>
diff --git a/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml b/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
new file mode 100644
index 0000000..8094550
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/META-INF/mysql_persistence.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- persistence.xml schema -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
+	version="2.0">
+	<persistence-unit name="openmeetings" transaction-type="RESOURCE_LOCAL">
+		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+		<class>org.apache.openmeetings.db.entity.basic.Configuration</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorType</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorValue</class>
+		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
+		<class>org.apache.openmeetings.db.entity.basic.MailMessage</class>
+		<class>org.apache.openmeetings.db.entity.basic.Naviglobal</class>
+		<class>org.apache.openmeetings.db.entity.basic.Navimain</class>
+		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
+		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
+		<class>org.apache.openmeetings.db.entity.server.Server</class>
+		<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentCategory</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps</class>
+		<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
+		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation_Users</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecording</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingLog</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaData</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaDelta</class>
+		<class>org.apache.openmeetings.db.entity.room.Invitation</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLogType</class>
+		<class>org.apache.openmeetings.db.entity.room.PollType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswers</class>
+		<class>org.apache.openmeetings.db.entity.room.Client</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
+		<class>org.apache.openmeetings.db.entity.room.Room</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomOrganisation</class>
+		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
+		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
+		<class>org.apache.openmeetings.db.entity.user.Address</class>
+		<class>org.apache.openmeetings.db.entity.user.State</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>
+		<class>org.apache.openmeetings.db.entity.user.Salutation</class>
+		<class>org.apache.openmeetings.db.entity.user.UserContact</class>
+		<class>org.apache.openmeetings.db.entity.user.Userdata</class>
+		<class>org.apache.openmeetings.db.entity.user.User</class>
+		<class>org.apache.openmeetings.db.entity.file.FileExplorerItem</class>
+		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
+		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>
+		<exclude-unlisted-classes>false</exclude-unlisted-classes>
+		<properties>
+			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
+			<property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp2.BasicDataSource" />
+			<property name="openjpa.ConnectionProperties"
+				value="DriverClassName=com.mysql.jdbc.Driver
+					, Url=jdbc:mysql://localhost:3306/openmeetings?autoReconnect=true&amp;useUnicode=true&amp;createDatabaseIfNotExist=true&amp;characterEncoding=utf-8&amp;connectionCollation=utf8_general_ci&amp;cachePrepStmts=true&amp;cacheCallableStatements=true&amp;cacheServerConfiguration=true&amp;useLocalSessionState=true&amp;elideSetAutoCommits=true&amp;alwaysSendSetIsolation=false&amp;enableQueryTimeouts=false&amp;prepStmtCacheSize=3000&amp;prepStmtCacheSqlLimit=1000
+					, MaxActive=100
+					, MaxWait=10000
+					, TestOnBorrow=true
+					, poolPreparedStatements=true
+					, Username=root
+					, Password=" />
+			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
+			<property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO" />
+			<property name="openjpa.DataCache" value="true" />
+			<property name="openjpa.QueryCache" value="true" />
+			<property name="openjpa.jdbc.DBDictionary" value="batchLimit=100" />
+			<property name="openjpa.jdbc.QuerySQLCache" value="false" />
+		</properties>
+	</persistence-unit>
+</persistence>
diff --git a/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml b/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
new file mode 100644
index 0000000..a21f9d7
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/META-INF/oracle_persistence.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- persistence.xml schema -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
+	version="2.0">
+	<persistence-unit name="openmeetings" transaction-type="RESOURCE_LOCAL">
+		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+		<class>org.apache.openmeetings.db.entity.basic.Configuration</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorType</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorValue</class>
+		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
+		<class>org.apache.openmeetings.db.entity.basic.MailMessage</class>
+		<class>org.apache.openmeetings.db.entity.basic.Naviglobal</class>
+		<class>org.apache.openmeetings.db.entity.basic.Navimain</class>
+		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
+		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
+		<class>org.apache.openmeetings.db.entity.server.Server</class>
+		<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentCategory</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps</class>
+		<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
+		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation_Users</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecording</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingLog</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaData</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaDelta</class>
+		<class>org.apache.openmeetings.db.entity.room.Invitation</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLogType</class>
+		<class>org.apache.openmeetings.db.entity.room.PollType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswers</class>
+		<class>org.apache.openmeetings.db.entity.room.Client</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
+		<class>org.apache.openmeetings.db.entity.room.Room</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomOrganisation</class>
+		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
+		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
+		<class>org.apache.openmeetings.db.entity.user.Address</class>
+		<class>org.apache.openmeetings.db.entity.user.State</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>
+		<class>org.apache.openmeetings.db.entity.user.Salutation</class>
+		<class>org.apache.openmeetings.db.entity.user.UserContact</class>
+		<class>org.apache.openmeetings.db.entity.user.Userdata</class>
+		<class>org.apache.openmeetings.db.entity.user.User</class>
+		<class>org.apache.openmeetings.db.entity.file.FileExplorerItem</class>
+		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
+		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>
+		<exclude-unlisted-classes>false</exclude-unlisted-classes>
+		<properties>
+			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
+			<property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp2.BasicDataSource" />
+			<property name="openjpa.ConnectionProperties"
+				value="DriverClassName=oracle.jdbc.driver.OracleDriver
+							, Url=jdbc:oracle:thin:@localhost:1521:openmeetings 
+							, create=true
+							, MaxActive=100 
+							, MaxWait=10000 
+							, TestOnBorrow=true 
+							, Username=SYSTEM 
+							, Password=admin" />
+			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
+			<property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO" />
+			<property name="openjpa.DataCache" value="true" />
+			<property name="openjpa.QueryCache" value="true" />
+			<property name="openjpa.jdbc.DBDictionary" value="oracle(UseTriggersForAutoAssign=true, MaxAutoAssignNameLength=28, BatchLimit=100)" />
+			<property name="openjpa.jdbc.QuerySQLCache" value="false" />
+		</properties>
+	</persistence-unit>
+</persistence>
diff --git a/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml b/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
new file mode 100644
index 0000000..122cace
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/META-INF/postgresql_persistence.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- persistence.xml schema -->
+<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
+	version="2.0">
+	<persistence-unit name="openmeetings" transaction-type="RESOURCE_LOCAL">
+		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
+		<class>org.apache.openmeetings.db.entity.basic.Configuration</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorType</class>
+		<class>org.apache.openmeetings.db.entity.basic.ErrorValue</class>
+		<class>org.apache.openmeetings.db.entity.server.LdapConfig</class>
+		<class>org.apache.openmeetings.db.entity.basic.MailMessage</class>
+		<class>org.apache.openmeetings.db.entity.basic.Naviglobal</class>
+		<class>org.apache.openmeetings.db.entity.basic.Navimain</class>
+		<class>org.apache.openmeetings.db.entity.server.Sessiondata</class>
+		<class>org.apache.openmeetings.db.entity.server.SOAPLogin</class>
+		<class>org.apache.openmeetings.db.entity.server.Server</class>
+		<class>org.apache.openmeetings.db.entity.calendar.Appointment</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentCategory</class>
+		<class>org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps</class>
+		<class>org.apache.openmeetings.db.entity.calendar.MeetingMember</class>
+		<class>org.apache.openmeetings.db.entity.basic.ChatMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation</class>
+		<class>org.apache.openmeetings.db.entity.user.Organisation_Users</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecording</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingLog</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaData</class>
+		<class>org.apache.openmeetings.db.entity.record.FlvRecordingMetaDelta</class>
+		<class>org.apache.openmeetings.db.entity.room.Invitation</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLog</class>
+		<class>org.apache.openmeetings.db.entity.log.ConferenceLogType</class>
+		<class>org.apache.openmeetings.db.entity.room.PollType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPoll</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomPollAnswers</class>
+		<class>org.apache.openmeetings.db.entity.room.Client</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomModerator</class>
+		<class>org.apache.openmeetings.db.entity.room.Room</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomType</class>
+		<class>org.apache.openmeetings.db.entity.room.RoomOrganisation</class>
+		<class>org.apache.openmeetings.db.entity.room.Whiteboard</class>
+		<class>org.apache.openmeetings.db.entity.room.WhiteboardItem</class>
+		<class>org.apache.openmeetings.db.entity.user.Address</class>
+		<class>org.apache.openmeetings.db.entity.user.State</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessage</class>
+		<class>org.apache.openmeetings.db.entity.user.PrivateMessageFolder</class>
+		<class>org.apache.openmeetings.db.entity.user.Salutation</class>
+		<class>org.apache.openmeetings.db.entity.user.UserContact</class>
+		<class>org.apache.openmeetings.db.entity.user.Userdata</class>
+		<class>org.apache.openmeetings.db.entity.user.User</class>
+		<class>org.apache.openmeetings.db.entity.file.FileExplorerItem</class>
+		<class>org.apache.openmeetings.db.entity.user.AsteriskSipUser</class>
+		<class>org.apache.openmeetings.db.entity.server.OAuthServer</class>
+		<exclude-unlisted-classes>false</exclude-unlisted-classes>
+		<properties>
+			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
+			<property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp2.BasicDataSource" />
+			<property name="openjpa.ConnectionProperties"
+				value="DriverClassName=org.postgresql.Driver
+					, Url=jdbc:postgresql://localhost:5432/openmeetings
+					, MaxActive=100
+					, MaxWait=10000
+					, TestOnBorrow=true
+					, poolPreparedStatements=true
+					, Username=postgres
+					, Password=1" />
+			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
+			<property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO" />
+			<property name="openjpa.DataCache" value="true" />
+			<property name="openjpa.QueryCache" value="true" />
+			<property name="openjpa.jdbc.QuerySQLCache" value="false" />
+		</properties>
+	</persistence-unit>
+</persistence>
diff --git a/src/main/webapp/WEB-INF/classes/logback-config.xml b/src/main/webapp/WEB-INF/classes/logback-config.xml
new file mode 100644
index 0000000..18a979f
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/logback-config.xml
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+	<contextName>${current_openmeetings_context_name}</contextName>
+
+	<jmxConfigurator contextName="${current_openmeetings_context_name}" />
+
+	<appender name="FLOG2" class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<File>log/${current_openmeetings_context_name}.log</File>
+		<Append>false</Append>
+		<Encoding>UTF-8</Encoding>
+		<BufferedIO>false</BufferedIO>
+		<ImmediateFlush>true</ImmediateFlush>
+		<layout class="ch.qos.logback.classic.PatternLayout">
+			<Pattern>
+				%5p %d{MM-dd HH:mm:ss.SSS } %c{15}:%L [%t] - %m%n
+			</Pattern>
+		</layout>
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+			<!-- daily rollover -->
+			<fileNamePattern>log\${current_openmeetings_context_name}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+				<!-- or whenever the file size reaches 100MB -->
+				<maxFileSize>50MB</maxFileSize>
+			</timeBasedFileNamingAndTriggeringPolicy>
+			<!-- keep 30 days' worth of history -->
+			<maxHistory>50</maxHistory>
+		</rollingPolicy>
+	</appender>
+	<appender name="CONSOLE2" class="ch.qos.logback.core.ConsoleAppender">
+		<layout class="ch.qos.logback.classic.PatternLayout">
+			<pattern>%5p %d{MM-dd HH:mm:ss.SSS } %F %r %L %c [%t] - %m%n</pattern>
+		</layout>
+	</appender>
+	<logger name="org.apache.axis2" level="ERROR" />
+	<logger name="com.mchange.v2" level="ERROR" />
+	<logger name="org.apache.axiom" level="ERROR" />
+	<logger name="org.apache.commons.httpclient" level="ERROR" />
+	<logger name="de.hunsicker.jalopy.io" level="ERROR" />
+	<logger name="org.apache.axis2.enterprise" level="ERROR" />
+	<logger name="httpclient.wire.header" level="ERROR" />
+	<logger name="org.apache.directory" level="INFO" />
+	<logger name="org.apache.mina.filter.ssl.SslFilter" level="ERROR" />
+	<logger name="org.apache.wicket" level="WARN" />
+	<root level="DEBUG">
+		<appender-ref ref="FLOG2" />
+		<appender-ref ref="CONSOLE2" />
+	</root>
+</configuration>
diff --git a/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml b/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
new file mode 100644
index 0000000..5a3e400
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
@@ -0,0 +1,311 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:tx="http://www.springframework.org/schema/tx"
+	xmlns:mvc="http://www.springframework.org/schema/mvc"
+	xmlns:context="http://www.springframework.org/schema/context"
+	xsi:schemaLocation="
+		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
+		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
+		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
+		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"
+		>
+	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
+		<property name="persistenceUnitName" value="openmeetings" />
+	</bean>
+	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
+		<property name="entityManagerFactory" ref="entityManagerFactory" />
+	</bean>
+
+	<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
+
+	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
+	<!-- Configures the @Controller programming model -->
+	<mvc:annotation-driven />
+
+	<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
+	<context:annotation-config />
+	<context:component-scan base-package="org.apache.openmeetings" />
+
+	<!-- New Class for the Streaming Handlers -->
+	<bean id="web.handler" class="org.apache.openmeetings.remote.red5.ScopeApplicationAdapter" />
+
+	<!-- Session configuration start -->
+
+	<bean id="openmeetings.SessionManager" class="org.apache.openmeetings.session.SessionManager">
+		<property name="cache">
+			<!-- Memory based session cache by default -->
+			<ref bean="openmeetings.HashMapStore" />
+			<!-- The following section should be used in clustering mode
+			<ref bean="openmeetings.DatabaseStore" />
+			-->
+		</property>
+	</bean>
+	<bean id="openmeetings.EmoticonsManager" class="org.apache.openmeetings.data.whiteboard.EmoticonsManager" />
+
+	<!-- Singletons for memory based cache -->
+	<bean id="openmeetings.HashMapStore" scope="singleton" class="org.apache.openmeetings.session.store.HashMapStore" />
+	<bean id="whiteBoardObjectListManagerById" scope="singleton" class="org.apache.openmeetings.data.whiteboard.WhiteBoardObjectListManagerById" />
+	<!-- WhiteBoardObjectSyncManager can stay in the memory, even on cluster! -->
+	<bean id="whiteBoardObjectSyncManager" scope="singleton" class="org.apache.openmeetings.data.whiteboard.WhiteBoardObjectSyncManager" />
+
+	<!-- Database cache -->
+	<bean id="openmeetings.DatabaseStore" class="org.apache.openmeetings.session.store.DatabaseStore" />
+
+	<bean id="openmeetings.ServerUtil" scope="singleton" class="org.apache.openmeetings.session.ServerUtil">
+		<!-- Need to be uncommented and set to the real ID if in cluster mode
+		<property name="serverId" value="1" />
+		-->
+	</bean>
+
+	<!-- Cluster related config start -->
+
+	<!-- Start of Services -->
+	<bean id="xmlcrm.service" class="org.apache.openmeetings.remote.MainService" />
+	<bean id="printservice.service" class="org.apache.openmeetings.remote.PrintService" />
+	<bean id="languageservice.service" class="org.apache.openmeetings.remote.LanguageService" />
+	<bean id="invitationservice.service" class="org.apache.openmeetings.remote.InvitationService" />
+	<bean id="whiteboardservice.service" class="org.apache.openmeetings.remote.WhiteBoardService" />
+	<bean id="userservice.service" class="org.apache.openmeetings.remote.UserService" />
+	<bean id="fileservice.service" class="org.apache.openmeetings.remote.ConferenceLibrary" />
+	<bean id="openmeetings.FileProcessor" class="org.apache.openmeetings.data.file.FileProcessor" />
+	<bean id="openmeetings.FlvExplorerConverter" class="org.apache.openmeetings.converter.FlvExplorerConverter" />
+	<bean id="errorservice.service" class="org.apache.openmeetings.remote.ErrorService" />
+	<bean id="conferenceservice.service" class="org.apache.openmeetings.remote.ConferenceService" />
+	<bean id="chatservice.service" class="org.apache.openmeetings.remote.ChatService" />
+	<bean id="flvrecorderservice.service" class="org.apache.openmeetings.remote.FLVRecorderService" />
+	<bean id="mobile.service" class="org.apache.openmeetings.remote.MobileService" />
+	<bean id="openmeetings.FlvRecorderConverterTask" class="org.apache.openmeetings.data.flvrecord.converter.FlvRecorderConverterTask" />
+	<bean id="openmeetings.FlvInterviewConverterTask" class="org.apache.openmeetings.data.flvrecord.converter.FlvInterviewConverterTask" />
+	<bean id="openmeetings.FlvInterviewConverter" class="org.apache.openmeetings.converter.FlvInterviewConverter" />
+	<bean id="openmeetings.FlvRecorderConverter" class="org.apache.openmeetings.converter.FlvRecorderConverter" />
+	<bean id="openmeetings.SlaveHTTPConnectionManager" class="org.apache.openmeetings.cluster.SlaveHTTPConnectionManager" />
+
+	<bean id="openmeetings.SessionClearJob" class="org.apache.openmeetings.quartz.scheduler.SessionClearJob" />
+	<bean id="sessionClearJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject">
+			<ref bean="openmeetings.SessionClearJob" />
+		</property>
+		<property name="targetMethod">
+			<value>doIt</value>
+		</property>
+		<property name="concurrent" value="false" />
+	</bean>
+	<bean id="triggerSessionClear" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail">
+			<!-- see the example of method invoking job above -->
+			<ref bean="sessionClearJob" />
+		</property>
+		<property name="startDelay">
+			<!-- 5 seconds -->
+			<value>5000</value>
+		</property>
+		<property name="repeatInterval">
+			<!-- repeat every 300 seconds == 5 minutes -->
+			<value>300000</value>
+		</property>
+	</bean>
+
+	<bean id="openmeetings.MeetingReminderJob" class="org.apache.openmeetings.quartz.scheduler.MeetingReminderJob" />
+	<bean id="meetingReminderClear" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject">
+			<ref bean="openmeetings.MeetingReminderJob" />
+		</property>
+		<property name="targetMethod">
+			<value>doIt</value>
+		</property>
+		<property name="concurrent" value="false" />
+	</bean>
+	<bean id="triggerMeetingReminder" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail">
+			<!-- see the example of method invoking job above -->
+			<ref bean="meetingReminderClear" />
+		</property>
+		<property name="startDelay">
+			<!-- 5 seconds -->
+			<value>5000</value>
+		</property>
+		<property name="repeatInterval">
+			<!-- repeat every 100 seconds -->
+			<value>100000</value>
+		</property>
+	</bean>
+	<bean id="testSetupCleanupJob" class="org.apache.openmeetings.quartz.scheduler.TestSetupCleanupJob" />
+	<bean id="testSetupCleanup" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject">
+			<ref bean="testSetupCleanupJob" />
+		</property>
+		<property name="targetMethod">
+			<value>doIt</value>
+		</property>
+		<property name="concurrent" value="false" />
+	</bean>
+	<bean id="triggerTestSetupCleanup" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail">
+			<ref bean="testSetupCleanup" />
+		</property>
+		<property name="startDelay">
+			<value>1800000</value> <!-- 30 minutes -->
+		</property>
+		<property name="repeatInterval">
+			<value>1800000</value> <!-- 30 minutes -->
+		</property>
+	</bean>
+
+	<!-- Mail related jobs -->
+	<bean id="mailHandler" class="org.apache.openmeetings.mail.MailHandler" />
+	<bean id="resetSendingMailStatus" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject">
+			<ref bean="mailHandler" />
+		</property>
+		<property name="targetMethod">
+			<value>resetSendingStatus</value>
+		</property>
+		<property name="concurrent" value="false" />
+	</bean>
+	<bean id="triggerResetSendingMailStatus" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail">
+			<ref bean="resetSendingMailStatus" />
+		</property>
+		<property name="startDelay">
+			<value>60000</value> <!-- 1 minute -->
+		</property>
+		<property name="repeatInterval">
+			<value>900000</value> <!-- 15 minutes -->
+		</property>
+	</bean>
+	<bean id="sendMails" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+		<property name="targetObject">
+			<ref bean="mailHandler" />
+		</property>
+		<property name="targetMethod">
+			<value>sendMails</value>
+		</property>
+		<property name="concurrent" value="false" />
+	</bean>
+	<bean id="triggerSendMails" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
+		<property name="jobDetail">
+			<ref bean="sendMails" />
+		</property>
+		<property name="startDelay">
+			<value>60000</value> <!-- 1 minute -->
+		</property>
+		<property name="repeatInterval">
+			<value>60000</value> <!-- 1 minute -->
+		</property>
+	</bean>
+	
+	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
+		<property name="triggers">
+			<list>
+				<ref bean="triggerSessionClear" />
+				<ref bean="triggerMeetingReminder" />
+				<ref bean="triggerTestSetupCleanup" />
+				<ref bean="triggerResetSendingMailStatus" />
+				<ref bean="triggerSendMails" />
+			</list>
+		</property>
+	</bean>
+	<!-- End of Services -->
+
+	<!-- Interface Transactional -->
+	<bean id="appointmentReminderTypDaoImpl" class="org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao" />
+	<bean id="appointmentCategoryDaoImpl" class="org.apache.openmeetings.db.dao.calendar.AppointmentCategoryDao" />
+	<bean id="roommanagement" class="org.apache.openmeetings.data.conference.RoomManager" />
+	<bean id="roomDao" class="org.apache.openmeetings.db.dao.room.RoomDao"/>
+	<bean id="sipDao" class="org.apache.openmeetings.db.dao.room.SipDao">
+	<!--  Should be uncommented and updated with real values for Asterisk
+		<constructor-arg><value>127.0.0.1</value></constructor-arg>
+		<constructor-arg><value>5038</value></constructor-arg>
+		<constructor-arg><value>openmeetings</value></constructor-arg>
+		<constructor-arg><value>12345</value></constructor-arg>
+	 -->
+	</bean>
+	<bean id="invitationDao" class="org.apache.openmeetings.db.dao.room.InvitationDao" />
+	<bean id="organisationDao" class="org.apache.openmeetings.db.dao.user.OrganisationDao" />
+	<bean id="organisationUserDao" class="org.apache.openmeetings.db.dao.user.OrganisationUserDao" />
+	<bean id="salutationmanagement" class="org.apache.openmeetings.db.dao.user.SalutationDao" />
+	<bean id="errorManagement" class="org.apache.openmeetings.db.dao.basic.ErrorDao" />
+	<bean id="navimanagement" class="org.apache.openmeetings.db.dao.basic.NavigationDao" />
+	<bean id="pollManagement" class="org.apache.openmeetings.db.dao.room.PollDao" />
+	<bean id="statemanagement" class="org.apache.openmeetings.db.dao.user.StateDao" />
+	<bean id="labelDao" class="org.apache.openmeetings.db.dao.label.LabelDao" />
+	<bean id="configurationDaoImpl" class="org.apache.openmeetings.db.dao.basic.ConfigurationDao" />
+	<bean id="appointmentDao" class="org.apache.openmeetings.db.dao.calendar.AppointmentDao" />
+	<bean id="appointmentLogic" class="org.apache.openmeetings.data.calendar.management.AppointmentLogic" />
+	<bean id="sessionManagement" class="org.apache.openmeetings.db.dao.server.SessiondataDao" />
+	<bean id="userManagement" class="org.apache.openmeetings.data.user.UserManager" />
+	<bean id="roomModeratorsDao" class="org.apache.openmeetings.db.dao.room.RoomModeratorsDao" />
+	<bean id="roomOrganisationDao" class="org.apache.openmeetings.db.dao.room.RoomOrganisationDao"/>
+	<bean id="roomTypeDao" class="org.apache.openmeetings.db.dao.room.RoomTypeDao" />
+	<bean id="conferenceLogDao" class="org.apache.openmeetings.db.dao.log.ConferenceLogDao" />
+	<bean id="conferenceLogTypeDao" class="org.apache.openmeetings.db.dao.log.ConferenceLogTypeDao" />
+	<bean id="emailManagement" class="org.apache.openmeetings.data.user.EmailManager" />
+	<bean id="fileExplorerItemDao" class="org.apache.openmeetings.db.dao.file.FileExplorerItemDao" />
+	<bean id="flvRecordingDao" class="org.apache.openmeetings.db.dao.record.FlvRecordingDao" />
+	<bean id="flvRecordingLogDao" class="org.apache.openmeetings.db.dao.record.FlvRecordingLogDao" />
+	<bean id="flvRecordingMetaDataDao" class="org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao" />
+	<bean id="flvRecordingMetaDeltaDao" class="org.apache.openmeetings.db.dao.record.FlvRecordingMetaDeltaDao" />
+	<bean id="ldapConfigDao" class="org.apache.openmeetings.db.dao.server.LdapConfigDao" />
+	<bean id="invitationManagement" class="org.apache.openmeetings.data.conference.InvitationManager" />
+	<bean id="meetingMemberDao" class="org.apache.openmeetings.db.dao.calendar.MeetingMemberDao" />
+	<bean id="privateMessageFolderDao" class="org.apache.openmeetings.db.dao.user.PrivateMessageFolderDao" />
+	<bean id="privateMessagesDao" class="org.apache.openmeetings.db.dao.user.PrivateMessagesDao" />
+	<bean id="soapLoginDao" class="org.apache.openmeetings.db.dao.server.SOAPLoginDao" />
+	<bean id="userContactsDao" class="org.apache.openmeetings.db.dao.user.UserContactsDao" />
+	<bean id="userDao" class="org.apache.openmeetings.db.dao.user.UserDao" />
+	<bean id="serverDao" class="org.apache.openmeetings.db.dao.server.ServerDao" />
+	<bean id="chatDao" class="org.apache.openmeetings.db.dao.basic.ChatDao" />
+	<bean id="clientDao" class="org.apache.openmeetings.db.dao.room.ClientDao" />
+	<bean id="mailMessageDao" class="org.apache.openmeetings.db.dao.basic.MailMessageDao" />
+	<bean id="oauth2Dao" class="org.apache.openmeetings.db.dao.server.OAuth2Dao" />
+
+	<!-- No Interface -->
+	<bean id="generateImage" class="org.apache.openmeetings.converter.GenerateImage" />
+	<bean id="generateThumbs" class="org.apache.openmeetings.converter.GenerateThumbs" />
+	<bean id="generatePDF" class="org.apache.openmeetings.documents.GeneratePDF" />
+	<bean id="smsHandler" class="org.apache.openmeetings.mail.SMSHandler" />
+	<bean id="importInitvalues" class="org.apache.openmeetings.installation.ImportInitvalues" />
+	<bean id="libraryWmlLoader" class="org.apache.openmeetings.documents.LibraryWmlLoader" />
+	<bean id="generateSWF" class="org.apache.openmeetings.converter.GenerateSWF" />
+	<bean id="fileUtils" class="org.apache.openmeetings.data.file.FileUtils" />
+	<bean id="ldapLoginManagement" class="org.apache.openmeetings.ldap.LdapLoginManagement" />
+	<bean id="timezoneUtil" class="org.apache.openmeetings.db.util.TimezoneUtil" />
+	<bean id="whiteboardManagement" class="org.apache.openmeetings.data.whiteboard.WhiteboardManager" />
+	<bean id="backupExport" class="org.apache.openmeetings.backup.BackupExport" />
+	<bean id="backupImport" class="org.apache.openmeetings.backup.BackupImport" />
+
+	<!-- Thread Executor -->
+	<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
+		<property name="corePoolSize" value="5" />
+		<property name="maxPoolSize" value="10" />
+		<property name="queueCapacity" value="25" />
+	</bean>
+
+	<!-- Axis2 Service Proxy's -->
+	<bean id="userWebService" class="org.apache.openmeetings.axis.services.UserWebService" />
+	<bean id="roomWebService" class="org.apache.openmeetings.axis.services.RoomWebService" />
+	<bean id="fileWebService" class="org.apache.openmeetings.axis.services.FileWebService" />
+	<bean id="calendarWebService" class="org.apache.openmeetings.axis.services.CalendarWebService" />
+	<bean id="jabberWebService" class="org.apache.openmeetings.axis.services.JabberWebService" />
+	<bean id="serverWebService" class="org.apache.openmeetings.axis.services.ServerWebService" />
+</beans>
diff --git a/src/main/webapp/WEB-INF/classes/rebel-remote.xml b/src/main/webapp/WEB-INF/classes/rebel-remote.xml
new file mode 100644
index 0000000..0dce654
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/rebel-remote.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<rebel-remote>
+	<id>Openmeetings</id>
+	<url>http://localhost:5080/openmeetings/</url>
+</rebel-remote>
diff --git a/src/main/webapp/WEB-INF/classes/rebel.xml b/src/main/webapp/WEB-INF/classes/rebel.xml
new file mode 100644
index 0000000..a9a5149
--- /dev/null
+++ b/src/main/webapp/WEB-INF/classes/rebel.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd">
+	<classpath>
+		<dir name="${project.root}/build/classes/eclipse"/>
+	</classpath>
+	<web>
+		<link target="/">
+			<dir name="${project.root}/main/webapp"/>
+		</link>
+	</web>
+</application>
diff --git a/src/main/webapp/WEB-INF/conf/axis2.xml b/src/main/webapp/WEB-INF/conf/axis2.xml
new file mode 100644
index 0000000..a6620f6
--- /dev/null
+++ b/src/main/webapp/WEB-INF/conf/axis2.xml
@@ -0,0 +1,531 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements. See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership. The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License. You may obtain a copy of the License at
+  ~
+  ~ http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied. See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+
+<axisconfig name="AxisJava2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

+	xsi:noNamespaceSchemaLocation="axis2.xsd">
+    <!-- ================================================= -->
+    <!-- Parameters -->
+    <!-- ================================================= -->
+    <parameter name="hotdeployment">true</parameter>
+    <parameter name="hotupdate">false</parameter>
+    <parameter name="enableMTOM">false</parameter>
+    <parameter name="enableSwA">false</parameter>
+
+    <!--Uncomment if you want to enable file caching for attachments -->
+    <!--parameter name="cacheAttachments">true</parameter>
+    <parameter name="attachmentDIR"></parameter>
+    <parameter name="sizeThreshold">4000</parameter-->
+
+    <parameter name="EnableChildFirstClassLoading">false</parameter>
+
+    <!--
+    The exposeServiceMetadata parameter decides whether the metadata (WSDL, schema, policy) of
+    the services deployed on Axis2 should be visible when ?wsdl, ?wsdl2, ?xsd, ?policy requests
+    are received.
+    This parameter can be defined in the axi2.xml file, in which case this will be applicable
+    globally, or in the services.xml files, in which case, it will be applicable to the
+    Service groups and/or services, depending on the level at which the parameter is declared.
+    This value of this parameter defaults to true.
+    -->
+    <parameter name="exposeServiceMetadata">true</parameter>
+
+
+    <!--Uncomment if you want to plugin your own attachments lifecycle implementation -->
+    <!--<attachmentsLifecycleManager class="org.apache.axiom.attachments.lifecycle.impl.LifecycleManagerImpl"/>-->
+
+
+    <!--Uncomment if you want to enable the reduction of the in-memory cache of WSDL definitions -->
+    <!--In some server environments, the available memory heap is limited and can fill up under load -->
+    <!--Since in-memory copies of WSDL definitions can be large, some steps can be taken-->
+    <!--to reduce the memory needed for the cached WSDL definitions. -->
+    <!--parameter name="reduceWSDLMemoryCache">true</parameter-->
+
+    <!--This will give out the timout of the configuration contexts, in milliseconds-->
+    <parameter name="ConfigContextTimeoutInterval">30000</parameter>
+
+    <!--During a fault, stack trace can be sent with the fault message. The following flag will control -->
+    <!--that behavior.-->
+    <parameter name="sendStacktraceDetailsWithFaults">false</parameter>
+
+    <!--If there aren't any information available to find out the fault reason, we set the message of the exception-->
+    <!--as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be -->
+    <!--wrapped by different levels. Due to this the initial exception message can be lost. If this flag-->
+    <!--is set, then Axis2 tries to get the first exception and set its message as the faultreason/Reason.-->
+    <parameter name="DrillDownToRootCauseForFaultReason">false</parameter>
+
+    <parameter name="userName">admin</parameter>
+    <parameter name="password">axis2</parameter>
+
+    <!--To override repository/services you need to uncomment following parameter and value SHOULD be absolute file path.-->
+    <!--ServicesDirectory only works on the following cases-->
+    <!---File based configurator and in that case the value should be a file URL (http:// not allowed)-->
+    <!---When creating URL Based configurator with URL file:// -->
+    <!--- War based configurator with expanded case , -->
+
+    <!--All the other scenarios it will be ignored.-->
+    <!--<parameter name="ServicesDirectory">service</parameter>-->
+    <!--To override repository/modules you need to uncomment following parameter and value SHOULD be absolute file path-->
+    <!--<parameter name="ModulesDirectory">modules</parameter>-->
+
+
+    <!--Following params will set the proper context paths for invocations. All the endpoints will have a commons context-->
+    <!--root which can configured using the following contextRoot parameter-->
+    <!--<parameter name="contextRoot">axis2</parameter>-->
+
+    <!--Our HTTP endpoints can handle both REST and SOAP. Following parameters can be used to distinguiush those endpoints-->
+    <!--In case of a servlet, if you change this you have to manually change the settings of your servlet container to map this -->
+    <!--context path to proper Axis2 servlets-->
+    <!--<parameter name="servicePath">services</parameter>-->
+    <!--<parameter name="restPath">rest</parameter>-->
+
+    <!-- Following parameter will completely disable REST handling in Axis2-->
+    <parameter name="disableREST" locked="false">false</parameter>
+
+    <!-- Following parameter will suppress generation of SOAP 1.2 bindings in auto-generated WSDL files -->
+    <parameter name="disableSOAP12" locked="true">false</parameter>
+
+    <!-- ================================================= -->
+    <!-- Deployers -->
+    <!-- ================================================= -->
+
+    <!--Service deployer , this will alow users to deploy AAR or exploded AAR as axis2 services-->
+    <deployer extension=".aar" directory="services" class="org.apache.axis2.deployment.ServiceDeployer">
+        <serviceBuilderExtension name ="jwsbuilderExt" class="org.apache.axis2.jaxws.framework.JAXWSServiceBuilderExtension"/>
+        <serviceBuilderExtension name ="wsdlbuilderExt" class="org.apache.axis2.deployment.WSDLServiceBuilderExtension"/>
+    </deployer>
+    
+    <!--POJO deployer , this will alow users to drop .class file and make that into a service-->
+    <deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>
+    <deployer extension=".jar" directory="servicejars"
+              class="org.apache.axis2.jaxws.framework.JAXWSDeployer"/>
+    <deployer extension=".jar" directory="transports"
+              class="org.apache.axis2.deployment.TransportDeployer"/>
+
+    <!--CORBA deployer , this will alow users to invoke remote CORBA services through Axis2-->
+    <!--<deployer extension=".xml" directory="corba" class="org.apache.axis2.corba.deployer.CorbaDeployer"/>-->
+
+    <!--<deployer extension=".jsa" directory="rmiservices" class="org.apache.axis2.rmi.deploy.RMIServiceDeployer"/>-->
+
+
+    <!-- Following parameter will set the host name for the epr-->
+    <!--<parameter name="hostname" locked="true">myhost.com</parameter>-->
+
+    <!-- If you have a front end host which exposes this webservice using a different public URL  -->
+    <!-- use this parameter to override autodetected url -->
+    <!--<parameter name="httpFrontendHostUrl">https://someotherhost/context</parameter>-->
+
+    <!--By default, JAXWS services are created by reading annotations. WSDL and schema are generated-->
+    <!--using a separate WSDL generator only when ?wsdl is called. Therefore, even if you engage-->
+    <!--policies etc.. to AxisService, it doesn't appear in the WSDL. By setting the following property-->
+    <!--to true, you can create the AxisService using the generated WSDL and remove the need for a-->
+    <!--WSDL generator. When ?wsdl is called, WSDL is generated in the normal way.-->
+    <parameter name="useGeneratedWSDLinJAXWS">false</parameter>
+
+    <!--    The way of adding listener to the system-->
+    <!--    <listener class="org.apache.axis2.ObserverIMPL">-->
+    <!--        <parameter name="RSS_URL">http://127.0.0.1/rss</parameter>-->
+    <!--    </listener>-->
+
+    <threadContextMigrators>
+        <threadContextMigrator listId="JAXWS-ThreadContextMigrator-List"
+                               class="org.apache.axis2.jaxws.addressing.migrator.EndpointContextMapMigrator"/>
+    </threadContextMigrators>
+
+    <!-- ================================================= -->
+    <!-- Message Receivers -->
+    <!-- ================================================= -->
+    <!--This is the default MessageReceiver for the system , if you want to have MessageReceivers for -->
+    <!--all the other MEP implement it and add the correct entry to here , so that you can refer from-->
+    <!--any operation -->
+    <!--Note : You can override this for a particular service by adding the same element with your requirement-->
+    <messageReceivers>        
+        <messageReceiver mep="http://www.w3.org/ns/wsdl/in-only"
+                         class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>
+        <messageReceiver mep="http://www.w3.org/ns/wsdl/in-out"
+                         class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
+    </messageReceivers>
+
+    <!-- ================================================= -->
+    <!-- Message Formatter -->
+    <!-- ================================================= -->
+    <!--Following content type to message formatter mapping can be used to implement support for different message -->
+    <!--format  serialization in Axis2. These message formats are expected to be resolved based on the content type. -->
+    <messageFormatters>
+        <messageFormatter contentType="application/x-www-form-urlencoded"
+                          class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/>
+        <messageFormatter contentType="multipart/form-data"
+                          class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/>
+        <messageFormatter contentType="application/xml"
+                          class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>
+        <messageFormatter contentType="text/xml"
+                          class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
+        <messageFormatter contentType="application/soap+xml"
+                          class="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
+    </messageFormatters>
+
+    <!-- ================================================= -->
+    <!-- Message Builders -->
+    <!-- ================================================= -->
+    <!--Following content type to builder mapping can be used to implement support for different message -->
+    <!--formats in Axis2. These message formats are expected to be resolved based on the content type. -->
+    <messageBuilders>
+        <messageBuilder contentType="application/xml"
+                        class="org.apache.axis2.builder.ApplicationXMLBuilder"/>
+        <messageBuilder contentType="application/x-www-form-urlencoded"
+                        class="org.apache.axis2.builder.XFormURLEncodedBuilder"/>
+        <messageBuilder contentType="multipart/form-data"
+                        class="org.apache.axis2.builder.MultipartFormDataBuilder"/>
+    </messageBuilders>
+
+    <!-- ================================================= -->
+    <!-- Transport Ins -->
+    <!-- ================================================= -->
+    <transportReceiver name="http"
+                       class="org.apache.axis2.transport.http.SimpleHTTPServer">
+        <parameter name="port">8080</parameter>
+        <!-- Here is the complete list of supported parameters (see example settings further below):
+            port: the port to listen on (default 6060)
+            hostname:  if non-null, url prefix used in reply-to endpoint references                                 (default null)
+            originServer:  value of http Server header in outgoing messages                                         (default "Simple-Server/1.1")
+            requestTimeout:  value in millis of time that requests can wait for data                                (default 20000)
+            requestTcpNoDelay:  true to maximize performance and minimize latency                                   (default true)
+                                false to minimize bandwidth consumption by combining segments
+            requestCoreThreadPoolSize:  number of threads available for request processing (unless queue fills up)  (default 25)
+            requestMaxThreadPoolSize:  number of threads available for request processing if queue fills up         (default 150)
+                                       note that default queue never fills up:  see HttpFactory
+            threadKeepAliveTime:  time to keep threads in excess of core size alive while inactive                  (default 180)
+                                  note that no such threads can exist with default unbounded request queue
+            threadKeepAliveTimeUnit:  TimeUnit of value in threadKeepAliveTime (default SECONDS)                    (default SECONDS)
+        -->
+        <!-- <parameter name="hostname">http://www.myApp.com/ws</parameter> -->
+        <!-- <parameter name="originServer">My-Server/1.1</parameter>           -->
+        <!-- <parameter name="requestTimeout">10000</parameter>                   -->
+        <!-- <parameter name="requestTcpNoDelay">false</parameter>                   -->
+        <!-- <parameter name="requestCoreThreadPoolSize">50</parameter>                      -->
+        <!-- <parameter name="requestMaxThreadPoolSize">100</parameter>                     -->
+        <!-- <parameter name="threadKeepAliveTime">240000</parameter>                  -->
+        <!-- <parameter name="threadKeepAliveTimeUnit">MILLISECONDS</parameter>            -->
+    </transportReceiver>
+
+    <!-- This is where you'd put custom transports.  See the transports project -->
+    <!-- for more.  http://ws.apache.org/commons/transport                      -->
+
+    <!-- ================================================= -->
+    <!-- Transport Outs -->
+    <!-- ================================================= -->
+
+    <transportSender name="local"
+                     class="org.apache.axis2.transport.local.LocalTransportSender"/>
+    <transportSender name="http"
+                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
+        <parameter name="PROTOCOL">HTTP/1.1</parameter>
+        <parameter name="Transfer-Encoding">chunked</parameter>
+
+        <!-- If following is set to 'true', optional action part of the Content-Type will not be added to the SOAP 1.2 messages -->
+        <!--  <parameter name="OmitSOAP12Action">true</parameter>  -->
+    </transportSender>
+
+    <transportSender name="https"
+                     class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
+        <parameter name="PROTOCOL">HTTP/1.1</parameter>
+        <parameter name="Transfer-Encoding">chunked</parameter>
+    </transportSender>
+
+    <!-- Please enable this if you need the java transport -->
+    <!-- <transportSender name="java"
+                     class="org.apache.axis2.transport.java.JavaTransportSender"/> -->
+
+    <!-- ================================================= -->
+    <!-- Global Modules  -->
+    <!-- ================================================= -->
+    <!-- Comment this to disable Addressing -->
+    <module ref="addressing"/>
+
+    <!--Configuring module , providing parameters for modules whether they refer or not-->
+    <!--<moduleConfig name="addressing">-->
+    <!--<parameter name="addressingPara">N/A</parameter>-->
+    <!--</moduleConfig>-->
+
+    <!-- ================================================= -->
+    <!-- Clustering  -->
+    <!-- ================================================= -->
+    <!--
+     To enable clustering for this node, set the value of "enable" attribute of the "clustering"
+     element to "true". The initialization of a node in the cluster is handled by the class
+     corresponding to the "class" attribute of the "clustering" element. It is also responsible for
+     getting this node to join the cluster.
+     -->
+    <clustering class="org.apache.axis2.clustering.tribes.TribesClusteringAgent" enable="false">
+
+        <!--
+           This parameter indicates whether the cluster has to be automatically initalized
+           when the AxisConfiguration is built. If set to "true" the initialization will not be
+           done at that stage, and some other party will have to explictly initialize the cluster.
+        -->
+        <parameter name="AvoidInitiation">true</parameter>
+
+        <!--
+           The membership scheme used in this setup. The only values supported at the moment are
+           "multicast" and "wka"
+
+           1. multicast - membership is automatically discovered using multicasting
+           2. wka - Well-Known Address based multicasting. Membership is discovered with the help
+                    of one or more nodes running at a Well-Known Address. New members joining a
+                    cluster will first connect to a well-known node, register with the well-known node
+                    and get the membership list from it. When new members join, one of the well-known
+                    nodes will notify the others in the group. When a member leaves the cluster or
+                    is deemed to have left the cluster, it will be detected by the Group Membership
+                    Service (GMS) using a TCP ping mechanism.
+        -->
+        <parameter name="membershipScheme">multicast</parameter>
+
+        <!--
+         The clustering domain/group. Nodes in the same group will belong to the same multicast
+         domain. There will not be interference between nodes in different groups.
+        -->
+        <parameter name="domain">wso2.carbon.domain</parameter>
+
+        <!--
+           When a Web service request is received, and processed, before the response is sent to the
+           client, should we update the states of all members in the cluster? If the value of
+           this parameter is set to "true", the response to the client will be sent only after
+           all the members have been updated. Obviously, this can be time consuming. In some cases,
+           such this overhead may not be acceptable, in which case the value of this parameter
+           should be set to "false"
+        -->
+        <parameter name="synchronizeAll">true</parameter>
+
+        <!--
+          The maximum number of times we need to retry to send a message to a particular node
+          before giving up and considering that node to be faulty
+        -->
+        <parameter name="maxRetries">10</parameter>
+
+        <!-- The multicast address to be used -->
+        <parameter name="mcastAddress">228.0.0.4</parameter>
+
+        <!-- The multicast port to be used -->
+        <parameter name="mcastPort">45564</parameter>
+
+        <!-- The frequency of sending membership multicast messages (in ms) -->
+        <parameter name="mcastFrequency">500</parameter>
+
+        <!-- The time interval within which if a member does not respond, the member will be
+         deemed to have left the group (in ms)
+         -->
+        <parameter name="memberDropTime">3000</parameter>
+
+        <!--
+           The IP address of the network interface to which the multicasting has to be bound to.
+           Multicasting would be done using this interface.
+        -->
+        <parameter name="mcastBindAddress">127.0.0.1</parameter>
+
+        <!-- The host name or IP address of this member -->
+        <parameter name="localMemberHost">127.0.0.1</parameter>
+
+        <!--
+        The TCP port used by this member. This is the port through which other nodes will
+        contact this member
+         -->
+        <parameter name="localMemberPort">4000</parameter>
+
+        <!--
+        Preserve message ordering. This will be done according to sender order.
+        -->
+        <parameter name="preserveMessageOrder">true</parameter>
+
+        <!--
+        Maintain atmost-once message processing semantics
+        -->
+        <parameter name="atmostOnceMessageSemantics">true</parameter>
+
+        <!--
+        Properties specific to this member
+        -->
+        <parameter name="properties">
+            <property name="backendServerURL" value="https://${hostName}:${httpsPort}/services/"/>
+            <property name="mgtConsoleURL" value="https://${hostName}:${httpsPort}/"/>
+        </parameter>
+
+        <!--
+           The list of static or well-known members. These entries will only be valid if the
+           "membershipScheme" above is set to "wka"
+        -->
+        <members>
+            <member>
+                <hostName>127.0.0.1</hostName>
+                <port>4000</port>
+            </member>
+            <member>
+                <hostName>127.0.0.1</hostName>
+                <port>4001</port>
+            </member>
+        </members>
+
+        <!--
+        Enable the groupManagement entry if you need to run this node as a cluster manager.
+        Multiple application domains with different GroupManagementAgent implementations
+        can be defined in this section.
+        -->
+        <groupManagement enable="false">
+            <applicationDomain name="apache.axis2.application.domain"
+                               description="Axis2 group"
+                               agent="org.apache.axis2.clustering.management.DefaultGroupManagementAgent"/>
+        </groupManagement>
+
+        <!--
+           This interface is responsible for handling management of a specific node in the cluster
+           The "enable" attribute indicates whether Node management has been enabled
+        -->
+        <nodeManager class="org.apache.axis2.clustering.management.DefaultNodeManager"
+                         enable="true"/>
+
+        <!--
+           This interface is responsible for handling state replication. The property changes in
+           the Axis2 context hierarchy in this node, are propagated to all other nodes in the cluster.
+
+           The "excludes" patterns can be used to specify the prefixes (e.g. local_*) or
+           suffixes (e.g. *_local) of the properties to be excluded from replication. The pattern
+           "*" indicates that all properties in a particular context should not be replicated.
+
+            The "enable" attribute indicates whether context replication has been enabled
+        -->
+        <stateManager class="org.apache.axis2.clustering.state.DefaultStateManager"
+                      enable="true">
+            <replication>
+                <defaults>
+                    <exclude name="local_*"/>
+                    <exclude name="LOCAL_*"/>
+                </defaults>
+                <context class="org.apache.axis2.context.ConfigurationContext">
+                    <exclude name="local_*"/>
+                </context>
+                <context class="org.apache.axis2.context.ServiceGroupContext">
+                    <exclude name="local_*"/>
+                </context>
+                <context class="org.apache.axis2.context.ServiceContext">
+                    <exclude name="local_*"/>
+                </context>
+            </replication>
+        </stateManager>
+    </clustering>
+
+    <!-- ================================================= -->
+    <!-- Phases  -->
+    <!-- ================================================= -->
+    <phaseOrder type="InFlow">
+        <!--  System predefined phases       -->
+        <phase name="Transport">
+            <handler name="RequestURIBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher">
+                <order phase="Transport"/>
+            </handler>
+            <handler name="SOAPActionBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher">
+                <order phase="Transport"/>
+            </handler>
+        </phase>
+        <phase name="Addressing">
+            <handler name="AddressingBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
+                <order phase="Addressing"/>
+            </handler>
+        </phase>
+        <phase name="Security"/>
+        <phase name="PreDispatch"/>
+        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
+            <handler name="RequestURIBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
+            <handler name="SOAPActionBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
+            <handler name="RequestURIOperationDispatcher"
+                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
+            <handler name="SOAPMessageBodyBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
+            <handler name="HTTPLocationBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
+            <handler name="GenericProviderDispatcher"
+                     class="org.apache.axis2.jaxws.dispatchers.GenericProviderDispatcher"/>
+            <handler name="MustUnderstandValidationDispatcher"
+                     class="org.apache.axis2.jaxws.dispatchers.MustUnderstandValidationDispatcher"/>
+        </phase>
+        <phase name="RMPhase"/>
+        <!--  System predefined phases       -->
+        <!--   After Postdispatch phase module author or service author can add any phase he want      -->
+        <phase name="OperationInPhase">
+            <handler name="MustUnderstandChecker"
+                     class="org.apache.axis2.jaxws.dispatchers.MustUnderstandChecker">
+                <order phase="OperationInPhase"/>
+            </handler>
+        </phase>
+        <phase name="soapmonitorPhase"/>
+    </phaseOrder>
+    <phaseOrder type="OutFlow">
+        <!--      user can add his own phases to this area  -->
+        <phase name="soapmonitorPhase"/>
+        <phase name="OperationOutPhase"/>
+        <!--system predefined phase-->
+        <!--these phase will run irrespective of the service-->
+        <phase name="RMPhase"/>
+        <phase name="PolicyDetermination"/>
+        <phase name="MessageOut"/>
+        <phase name="Security"/>
+    </phaseOrder>
+    <phaseOrder type="InFaultFlow">
+        <phase name="Addressing">
+            <handler name="AddressingBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.AddressingBasedDispatcher">
+                <order phase="Addressing"/>
+            </handler>
+        </phase>
+        <phase name="Security"/>
+        <phase name="PreDispatch"/>
+        <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase">
+            <handler name="RequestURIBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/>
+            <handler name="SOAPActionBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/>
+            <handler name="RequestURIOperationDispatcher"
+                     class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/>
+            <handler name="SOAPMessageBodyBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/>
+            <handler name="HTTPLocationBasedDispatcher"
+                     class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/>
+            <handler name="GenericProviderDispatcher"
+                     class="org.apache.axis2.jaxws.dispatchers.GenericProviderDispatcher"/>
+            <handler name="MustUnderstandValidationDispatcher"
+                     class="org.apache.axis2.jaxws.dispatchers.MustUnderstandValidationDispatcher"/>
+        </phase>
+        <phase name="RMPhase"/>
+        <!--      user can add his own phases to this area  -->
+        <phase name="OperationInFaultPhase"/>
+        <phase name="soapmonitorPhase"/>
+    </phaseOrder>
+    <phaseOrder type="OutFaultFlow">
+        <!--      user can add his own phases to this area  -->
+        <phase name="soapmonitorPhase"/>
+        <phase name="OperationOutFaultPhase"/>
+        <phase name="RMPhase"/>
+        <phase name="PolicyDetermination"/>
+        <phase name="MessageOut"/>
+        <phase name="Security"/>
+    </phaseOrder>
+</axisconfig>
+
diff --git a/src/main/webapp/WEB-INF/conf/axis2.xsd b/src/main/webapp/WEB-INF/conf/axis2.xsd
new file mode 100644
index 0000000..df95257
--- /dev/null
+++ b/src/main/webapp/WEB-INF/conf/axis2.xsd
@@ -0,0 +1,267 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

+  <xs:element name="axisconfig">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:choice maxOccurs="unbounded">

+          <xs:element ref="parameter"/>

+          <xs:element ref="deployer"/>

+        </xs:choice>

+        <xs:element ref="threadContextMigrators"/>

+        <xs:element ref="messageReceivers"/>

+        <xs:element ref="messageFormatters"/>

+        <xs:element ref="messageBuilders"/>

+        <xs:element ref="transportReceiver"/>

+        <xs:element maxOccurs="unbounded" ref="transportSender"/>

+        <xs:element ref="module"/>

+        <xs:element ref="clustering"/>

+        <xs:element maxOccurs="unbounded" ref="phaseOrder"/>

+      </xs:sequence>

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="deployer">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="serviceBuilderExtension"/>

+      </xs:sequence>

+      <xs:attribute name="class" use="required"/>

+      <xs:attribute name="directory" use="required" type="xs:NCName"/>

+      <xs:attribute name="extension" use="required" type="xs:NMTOKEN"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="serviceBuilderExtension">

+    <xs:complexType>

+      <xs:attribute name="class" use="required"/>

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="threadContextMigrators">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element ref="threadContextMigrator"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="threadContextMigrator">

+    <xs:complexType>

+      <xs:attribute name="class" use="required"/>

+      <xs:attribute name="listId" use="required"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="messageReceivers">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="messageReceiver"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="messageReceiver">

+    <xs:complexType>

+      <xs:attribute name="class" use="required"/>

+      <xs:attribute name="mep" use="required" type="xs:anyURI"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="messageFormatters">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="messageFormatter"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="messageFormatter">

+    <xs:complexType>

+      <xs:attribute name="class" use="required"/>

+      <xs:attribute name="contentType" use="required"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="messageBuilders">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="messageBuilder"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="messageBuilder">

+    <xs:complexType>

+      <xs:attribute name="class" use="required"/>

+      <xs:attribute name="contentType" use="required"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="transportReceiver">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element ref="parameter"/>

+      </xs:sequence>

+      <xs:attribute name="class" use="required"/>

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="transportSender">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="parameter"/>

+      </xs:sequence>

+      <xs:attribute name="class" use="required"/>

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="module">

+    <xs:complexType>

+      <xs:attribute name="ref" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="clustering">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="parameter"/>

+        <xs:element ref="members"/>

+        <xs:element ref="groupManagement"/>

+        <xs:element ref="nodeManager"/>

+        <xs:element ref="stateManager"/>

+      </xs:sequence>

+      <xs:attribute name="class" use="required"/>

+      <xs:attribute name="enable" use="required" type="xs:boolean"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="members">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="member"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="member">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element ref="hostName"/>

+        <xs:element ref="port"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="hostName" type="xs:NMTOKEN"/>

+  <xs:element name="port" type="xs:integer"/>

+  <xs:element name="groupManagement">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element ref="applicationDomain"/>

+      </xs:sequence>

+      <xs:attribute name="enable" use="required" type="xs:boolean"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="applicationDomain">

+    <xs:complexType>

+      <xs:attribute name="agent" use="required"/>

+      <xs:attribute name="description" use="required"/>

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="nodeManager">

+    <xs:complexType>

+      <xs:attribute name="class" use="required"/>

+      <xs:attribute name="enable" use="required" type="xs:boolean"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="stateManager">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element ref="replication"/>

+      </xs:sequence>

+      <xs:attribute name="class" use="required"/>

+      <xs:attribute name="enable" use="required" type="xs:boolean"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="replication">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element ref="defaults"/>

+        <xs:element maxOccurs="unbounded" ref="context"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="defaults">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="exclude"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="context">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element ref="exclude"/>

+      </xs:sequence>

+      <xs:attribute name="class" use="required"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="phaseOrder">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="phase"/>

+      </xs:sequence>

+      <xs:attribute name="type" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="phase">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="handler"/>

+      </xs:sequence>

+      <xs:attribute name="class"/>

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="handler">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element minOccurs="0" ref="order"/>

+      </xs:sequence>

+      <xs:attribute name="class" use="required"/>

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="order">

+    <xs:complexType>

+      <xs:attribute name="phase" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="parameter">

+    <xs:complexType mixed="true">

+      <xs:sequence>

+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="property"/>

+      </xs:sequence>

+      <xs:attribute name="locked" type="xs:boolean"/>

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="property">

+    <xs:complexType>

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+      <xs:attribute name="value" use="required"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="exclude">

+    <xs:complexType>

+      <xs:attribute name="name" use="required"/>

+    </xs:complexType>

+  </xs:element>

+</xs:schema>

diff --git a/src/main/webapp/WEB-INF/red5-web.properties b/src/main/webapp/WEB-INF/red5-web.properties
new file mode 100644
index 0000000..518301d
--- /dev/null
+++ b/src/main/webapp/WEB-INF/red5-web.properties
@@ -0,0 +1,17 @@
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#  
+#      http://www.apache.org/licenses/LICENSE-2.0
+#    	  
+#  Unless required by applicable law or agreed to in writing,
+#  software distributed under the License is distributed on an
+#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#  KIND, either express or implied.  See the License for the
+#  specific language governing permissions and limitations
+#  under the License.
+webapp.virtualHosts=*,localhost, 127.0.0.1
diff --git a/src/main/webapp/WEB-INF/red5-web.xml b/src/main/webapp/WEB-INF/red5-web.xml
new file mode 100644
index 0000000..b0ef211
--- /dev/null
+++ b/src/main/webapp/WEB-INF/red5-web.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+	
+	<bean id="placeholderConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
+	    <property name="location" value="/WEB-INF/red5-web.properties" />
+	</bean>
+	
+	<bean id="web.context" class="org.red5.server.Context" autowire="byType" />
+	
+	<bean id="web.scope" class="org.red5.server.scope.WebScope" init-method="register">
+		<property name="server" ref="red5.server" />
+		<property name="parent" ref="global.scope" />
+		<property name="context" ref="web.context" />
+		<property name="handler" ref="web.handler" />
+		<property name="contextPath" value="${webapp.contextPath}" />
+		<property name="virtualHosts" value="${webapp.virtualHosts}" />
+	</bean>
+
+	<import resource="classes/openmeetings-applicationContext.xml" />
+</beans>
diff --git a/src/main/webapp/WEB-INF/services/version.aar b/src/main/webapp/WEB-INF/services/version.aar
new file mode 100644
index 0000000..4408130
--- /dev/null
+++ b/src/main/webapp/WEB-INF/services/version.aar
Binary files differ
diff --git a/src/main/webapp/WEB-INF/spring-mvc-servlet.xml b/src/main/webapp/WEB-INF/spring-mvc-servlet.xml
new file mode 100644
index 0000000..e98ae5e
--- /dev/null
+++ b/src/main/webapp/WEB-INF/spring-mvc-servlet.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<beans	xmlns="http://www.springframework.org/schema/beans"
+		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" 
+/>
diff --git a/src/main/webapp/WEB-INF/velocity.properties b/src/main/webapp/WEB-INF/velocity.properties
new file mode 100644
index 0000000..a885347
--- /dev/null
+++ b/src/main/webapp/WEB-INF/velocity.properties
@@ -0,0 +1,41 @@
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#  
+#      http://www.apache.org/licenses/LICENSE-2.0
+#    	  
+#  Unless required by applicable law or agreed to in writing,
+#  software distributed under the License is distributed on an
+#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#  KIND, either express or implied.  See the License for the
+#  specific language governing permissions and limitations
+#  under the License.
+
+#
+# specify three resource loaders to use
+#
+resource.loader = file, class
+
+#
+# for the loader we call 'file', set the FileResourceLoader as the
+# class to use, turn off caching
+#
+file.resource.loader.description = Velocity File Resource Loader
+file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
+file.resource.loader.path = ./classes
+file.resource.loader.cache = false
+file.resource.loader.modificationCheckInterval = 0
+
+input.encoding=UTF-8
+output.encoding=UTF-8
+
+#
+#  for the loader we call 'class', use the ClasspathResourceLoader
+#
+class.resource.loader.description = Velocity Classpath Resource Loader
+class.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
+runtime.log.logsystem.log4j.logger = org.apache.velocity.runtime.log.Log4JLogChute
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..9d072e1
--- /dev/null
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
+    <context-param>
+        <param-name>globalScope</param-name>
+        <param-value>default</param-value>
+    </context-param>
+    
+    <!-- Custom logging like described in Paul Gregoire Patch: 
+    http://gregoire.org/2008/09/18/logging-work-around/
+    THIS WILL NOT WORK for us as we can hardly rewrite all logging statements of hibernate
+    
+    -->
+    <listener>
+        <listener-class>org.apache.openmeetings.util.OMContextListener</listener-class>
+    </listener>
+    
+    <filter>
+        <filter-name>LoggerContextFilter</filter-name>
+        <filter-class>org.red5.logging.LoggerContextFilter</filter-class>
+    </filter>
+    
+    <filter-mapping>
+        <filter-name>LoggerContextFilter</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping>   
+    
+	<filter>
+		<filter-name>OpenmeetingsApplication</filter-name>
+		<filter-class>org.apache.wicket.protocol.ws.javax.JavaxWebSocketFilter</filter-class>
+		<init-param>
+			<param-name>applicationClassName</param-name>
+			<param-value>org.apache.openmeetings.web.app.Application</param-value>
+		</init-param>
+		<init-param>
+			<param-name>configuration</param-name>
+			<param-value>@wicket.mode@</param-value>
+		</init-param>
+		<init-param>
+			<param-name>ignorePaths</param-name>
+			<param-value>conf,css,default,docs,images,js,persistence,public,screensharing,streams,upload,uploadtemp,services,networktest.,file.,remotelog.,screen.,DownloadHandler</param-value>
+		</init-param>
+	</filter>
+	<filter-mapping>
+		<filter-name>OpenmeetingsApplication</filter-name>
+		<url-pattern>/*</url-pattern>
+	</filter-mapping>
+	 
+    <context-param>
+        <param-name>contextConfigLocation</param-name>
+        <param-value>/WEB-INF/red5-*.xml</param-value>
+    </context-param>
+    <context-param>
+        <param-name>locatorFactorySelector</param-name>
+        <param-value>red5.xml</param-value>
+    </context-param>
+    <context-param>
+        <param-name>parentContextKey</param-name>
+        <param-value>default.context</param-value>
+    </context-param>
+    
+    <!-- remove the following servlet tags if you want to disable remoting for this application -->
+	<servlet>
+		<servlet-name>spring-mvc</servlet-name>
+		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+	</servlet>
+    <servlet>
+        <servlet-name>gateway</servlet-name>
+        <servlet-class>org.red5.server.net.servlet.AMFGatewayServlet</servlet-class>
+    </servlet>
+    <servlet>
+        <servlet-name>DownloadHandler</servlet-name>
+        <servlet-class>org.apache.openmeetings.servlet.outputhandler.DownloadHandler</servlet-class>
+    </servlet>
+    <servlet>
+        <servlet-name>ExportToImage</servlet-name>
+        <servlet-class>org.apache.openmeetings.servlet.outputhandler.ExportToImage</servlet-class>
+    </servlet>
+    <!-- Axis2 Settings -->
+    <servlet>
+        <servlet-name>AxisServlet</servlet-name>
+        <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+	
+	<servlet-mapping>
+		<servlet-name>spring-mvc</servlet-name>
+		<url-pattern>*.upload</url-pattern>
+	</servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>DownloadHandler</servlet-name>
+        <url-pattern>/DownloadHandler</url-pattern>
+    </servlet-mapping>
+    <servlet-mapping>
+        <servlet-name>ExportToImage</servlet-name>
+        <url-pattern>/ExportToImage</url-pattern>
+    </servlet-mapping>
+    <!-- Axis2 -->
+    <servlet-mapping>
+        <servlet-name>AxisServlet</servlet-name>
+        <url-pattern>/services/*</url-pattern>
+    </servlet-mapping>
+    <mime-mapping>
+        <extension>inc</extension>
+        <mime-type>text/plain</mime-type>
+    </mime-mapping>
+     
+    <security-constraint>
+        <web-resource-collection>
+            <web-resource-name>Forbidden</web-resource-name>
+            <url-pattern>/streams/*</url-pattern>
+        </web-resource-collection>
+        <web-resource-collection>
+            <web-resource-name>Forbidden</web-resource-name>
+            <url-pattern>/conf/*</url-pattern>
+        </web-resource-collection>
+        <web-resource-collection>
+            <web-resource-name>Forbidden</web-resource-name>
+            <url-pattern>/upload/*</url-pattern>
+        </web-resource-collection>
+        <web-resource-collection>
+            <web-resource-name>Forbidden</web-resource-name>
+            <url-pattern>/uploadtemp/*</url-pattern>
+        </web-resource-collection>
+        <auth-constraint/>
+    </security-constraint>
+    <login-config>
+        <auth-method>BASIC</auth-method>
+    </login-config>
+</web-app>
diff --git a/src/main/webapp/conf/om_ldap.cfg b/src/main/webapp/conf/om_ldap.cfg
new file mode 100644
index 0000000..ac3e4d7
--- /dev/null
+++ b/src/main/webapp/conf/om_ldap.cfg
@@ -0,0 +1,105 @@
+#

+# Licensed to the Apache Software Foundation (ASF) under one

+# or more contributor license agreements.  See the NOTICE file

+# distributed with this work for additional information

+# regarding copyright ownership.  The ASF licenses this file

+# to you under the Apache License, Version 2.0 (the

+# "License"); you may not use this file except in compliance

+# with the License.  You may obtain a copy of the License at

+# 

+#     http://www.apache.org/licenses/LICENSE-2.0

+#         

+# Unless required by applicable law or agreed to in writing,

+# software distributed under the License is distributed on an

+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+# KIND, either express or implied.  See the License for the

+# specific language governing permissions and limitations

+# under the License.

+# 

+#ConfigurationFile for LDAP Auth

+#ConfigKey 'ldap_config_path' must be set in DataBase Configration of OM and point to this file

+#o.becherer,14.01.2009

+

+#LDAP URL

+# This is the URL used to access your LDAP server.

+# if you want to use "ldaps://" links, please be aware that you need to import your CA certificate

+#  to a java keystore and add the -Djavax.net.ssl.keyStore, -Djavax.net.ssl.keyStorePassword,

+#  -Djavax.net.ssl.trustStore and -Djavax.net.ssl.trustStorePassword parameters to your 

+#  JAVA_OPT environment

+ldap_conn_host=dc2.medint.local

+ldap_conn_port=389

+ldap_conn_secure=false

+

+# Login distinguished name (DN) for Authentication on LDAP Server - keep empty if not required

+# Use full qualified LDAP DN

+ldap_admin_dn=CN=dummy,OU=Company,DC=medint,DC=local

+

+# Loginpass for Authentication on LDAP Server - keep empty if not required

+ldap_passwd=dummy07

+

+# base to search for userdata(of user, that wants to login)

+ldap_search_base=OU=Company,DC=medint,DC=local

+

+# Fieldnames (can differ between Ldap servers) 

+ldap_search_query=(uid=%s)

+

+# the scope of the search might be: OBJECT, ONELEVEL, SUBTREE

+ldap_search_scope=ONELEVEL

+

+# Ldap auth type(NONE, SEARCHANDBIND, SIMPLEBIND)

+#  When using SIMPLEBIND a simple bind is performed on the LDAP server to check user authentication

+#  When using NONE, the Ldap server is not used for authentication

+ldap_auth_type=SIMPLEBIND

+

+# userDN format, will be used to bind if ldap_auth_type=SIMPLEBIND

+# might be used to get provisionningDn in case ldap_auth_type=NONE

+ldap_userdn_format=uid=%s,OU=Company,DC=medint,DC=local

+

+# Ldap provisioning type(NONE, AUTOCREATE, AUTOUPDATE)

+ldap_provisionning=AUTOCREATE

+

+# Ldap deref mode (never, searching, finding, always)

+ldap_deref_mode=always

+

+#  Set this to 'true' if you want to use admin_dn to get user attributes

+#  If any other value is set, user_dn will be used

+ldap_use_admin_to_get_attrs=true

+

+# Ldap-password synchronization to OM DB

+#  Set this to 'true' if you want OM to synchronize the user Ldap-password to OM's internal DB

+#  If you want to disable the feature, set this to any other string.

+#  Defautl value is 'true'

+ldap_sync_password_to_om=true

+

+# Ldap group mode (NONE, ATTRIBUTE, QUERY)

+# NONE means group associations will be ignored

+# ATTRIBUTE means group associations will be taken from 'ldap_group_attr' attribute (M$ AD mode)

+# QUERY means group associations will be taken as a result of 'ldap_group_query' query

+ldap_group_mode=NONE

+

+ldap_group_query=(&(memberUid=%s)(objectClass=posixGroup))

+

+# Ldap user attributes mapping

+# Set the following internal OM user attributes to their corresponding Ldap-attribute

+ldap_user_attr_lastname=sn

+ldap_user_attr_firstname=givenName

+ldap_user_attr_mail=mail

+ldap_user_attr_street=streetAddress

+ldap_user_attr_additionalname=description

+ldap_user_attr_fax=facsimileTelephoneNumber

+ldap_user_attr_zip=postalCode

+ldap_user_attr_country=co

+ldap_user_attr_town=l

+ldap_user_attr_phone=telephoneNumber

+ldap_group_attr=memberOf

+

+# optional, only absolute URLs make sense

+#ldap_user_picture_uri=picture_uri

+

+# optional

+# the timezone has to match any timezone available in Java, otherwise the timezone defined in the value of 

+# the conf_key "default.timezone" in OpenMeetings "configurations" table

+#ldap_user_timezone=timezone

+

+# Ldap ignore upper/lower case, convert all input to lower case

+ldap_use_lower_case=false

diff --git a/src/main/webapp/css/admin-rtl.css b/src/main/webapp/css/admin-rtl.css
new file mode 100644
index 0000000..30eda1e
--- /dev/null
+++ b/src/main/webapp/css/admin-rtl.css
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+.adminForm label, .adminForm input, .adminForm select, .adminForm textarea {
+	float: right !important;
+}
diff --git a/src/main/webapp/css/admin.css b/src/main/webapp/css/admin.css
new file mode 100644
index 0000000..22dfe6c
--- /dev/null
+++ b/src/main/webapp/css/admin.css
@@ -0,0 +1,357 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+.adminPanel {
+	min-width: 1070px;
+}
+/* 
+    ################################
+    Column layout admin section
+    ################################
+ */
+.adminPanelColumnTable {
+	display: inline-block;
+	vertical-align: top;
+}
+
+table.adminListTable {
+	max-width: 518px;
+	min-width: 518px;
+}
+
+table.adminListTable tr:nth-child(odd), table.adminListTableSmall tr:nth-child(odd) {
+	opacity: .8;
+}
+
+table.adminListTable tr:hover, table.adminListTableSmall tr:hover {
+	/*SHOULD BE MANUALLY IN SYNC WITH THEME .ui-state-hover */
+	border: 1px solid #74b2e2;
+	background: #e4f1fb url(theme_om/images/ui-bg_glass_100_e4f1fb_1x400.png) 50% 50% repeat-x;
+	font-weight: normal;
+	color: #0070a3;
+}
+
+table.adminListTable th.two_column_layout_column1 {
+	width: 136px;
+}
+
+table.adminListTable th.two_column_layout_column2 {
+	width: 354px;
+}
+
+table.adminListTable td.two_column_layout_column1 {
+	width: 136px;
+}
+
+table.adminListTable td.two_column_layout_column2 {
+	width: 354px;
+}
+
+table.adminListTable td div.two_column_layout_divcolumn1 {
+	word-wrap: break-word;
+	width: 136px;
+}
+
+table.adminListTable td div.two_column_layout_divcolumn2 {
+	word-wrap: break-word;
+	width: 354px;
+}
+
+table.adminListTable th.three_column_layout_column1 {
+	width: 96px;
+}
+
+table.adminListTable th.three_column_layout_column2 {
+	width: 150px;
+}
+
+table.adminListTable th.three_column_layout_column3 {
+	width: 244px;
+}
+
+.rooms table.adminListTable th.three_column_layout_column1 {
+	width: 46px;
+}
+
+.rooms table.adminListTable th.three_column_layout_column2 {
+	width: 370px;
+}
+
+.rooms table.adminListTable th.three_column_layout_column3 {
+	width: 74px;
+}
+
+table.adminListTableSmall th.three_column_layout_column1 {
+	width: 50px;
+}
+
+table.adminListTableSmall th.three_column_layout_column2 {
+	width: 50px;
+}
+
+table.adminListTableSmall th.three_column_layout_column3 {
+	width: 218px;
+}
+table.adminListTableSmall th.three_column_layout_column4 {
+	width: 150px;
+}
+table.adminListTableSmall th.three_column_layout_column5 {
+	width: 50px;
+}
+
+table.adminListTable td.three_column_layout_column1 {
+	width: 96px;
+}
+
+table.adminListTable td.three_column_layout_column2 {
+	width: 150px;
+}
+
+table.adminListTable td.three_column_layout_column3 {
+	width: 244px;
+}
+
+table.adminListTableSmall td.three_column_layout_column1 {
+	width: 50px;
+}
+
+table.adminListTableSmall td.three_column_layout_column2 {
+	width: 50px;
+}
+
+table.adminListTableSmall td.three_column_layout_column3 {
+	width: 218px;
+}
+table.adminListTableSmall td.three_column_layout_column4 {
+	width: 150px;
+}
+table.adminListTableSmall td.three_column_layout_column5 {
+	width: 50px;
+}
+
+table.adminListTable td div.three_column_layout_divcolumn1 {
+	word-wrap: break-word;
+	width: 96px;
+}
+
+table.adminListTable td div.three_column_layout_divcolumn2 {
+	word-wrap: break-word;
+	width: 150px;
+}
+
+table.adminListTable td div.three_column_layout_divcolumn3 {
+	word-wrap: break-word;
+	width: 244px;
+}
+
+.rooms table.adminListTable td div.three_column_layout_divcolumn1 {
+	word-wrap: break-word;
+	width: 44px;
+}
+
+.rooms table.adminListTable td div.three_column_layout_divcolumn2 {
+	word-wrap: break-word;
+	width: 382px;
+}
+
+.rooms table.adminListTable td div.three_column_layout_divcolumn3 {
+	word-wrap: break-word;
+	width: 74px;
+}
+
+table.adminListTableSmall td div.three_column_layout_divcolumn1 {
+	width: 50px;
+}
+
+table.adminListTableSmall td div.three_column_layout_divcolumn2 {
+	width: 50px;
+}
+
+table.adminListTableSmall td div.three_column_layout_divcolumn3 {
+	width: 218px;
+}
+
+table.adminListTableSmall td div.three_column_layout_divcolumn4 {
+	width: 150px;
+}
+
+table.adminListTableSmall td div.three_column_layout_divcolumn5 {
+	width: 50px;
+}
+
+table.adminListTable th.four_column_layout_column1 {
+	width: 96px;
+}
+
+table.adminListTable th.four_column_layout_column2 {
+	width: 130px;
+}
+
+table.adminListTable th.four_column_layout_column3 {
+	width: 132px;
+}
+
+table.adminListTable th.four_column_layout_column4 {
+	width: 132px;
+}
+
+table.adminListTable td.four_column_layout_column1 {
+	width: 96px;
+}
+
+table.adminListTable td.four_column_layout_column2 {
+	width: 130px;
+}
+
+table.adminListTable td.four_column_layout_column3 {
+	width: 132px;
+}
+
+table.adminListTable td.four_column_layout_column4 {
+	width: 132px;
+}
+
+table.adminListTable td div.four_column_layout_divcolumn1 {
+	word-wrap: break-word;
+	width: 96px;
+}
+
+table.adminListTable td div.four_column_layout_divcolumn2 {
+	word-wrap: break-word;
+	width: 130px;
+}
+
+table.adminListTable td div.four_column_layout_divcolumn3 {
+	word-wrap: break-word;
+	width: 132px;
+}
+
+table.adminListTable td div.four_column_layout_divcolumn4 {
+	word-wrap: break-word;
+	width: 132px;
+}
+
+.adminPanelColumnForm {
+	display: inline-block;
+	vertical-align: top;
+	margin-top: 2px;
+}
+
+.adminPanelColumnForm div.scrollcontent {
+	vertical-align: top;
+	height: 500px;
+	overflow-y: scroll;
+}
+
+.adminForm {
+	
+}
+.adminForm .btn {
+	width: 280px;
+}
+.adminForm input {
+	display: block;
+	float: left;
+	font-size: 14px;
+	padding: 0px 0px;
+	border: solid 1px #aacfe4;
+	width: 280px;
+	height: 20px;
+	margin: 2px 2px;
+}
+.adminForm input[type=checkbox], .adminForm input[type=radio] {
+	width: auto;
+}
+.adminForm input.formcheckbox {
+	display: block;
+	float: left;
+	font-size: 14px;
+	padding: 0px 0px;
+	border: none;
+	width: 20px;
+	height: 20px;
+	margin: 2px 2px;
+}
+
+.adminForm fieldset {
+	margin-top: 4px;
+	padding: 4px;
+}
+
+.adminForm legend {
+	padding: 0.2em 0.5em;
+	margin: 0px 10px;
+	font-style: italic;
+	text-align: right;
+}
+
+.adminForm textarea {
+	display: block;
+	float: left;
+	font-size: 14px;
+	padding: 0px 0px;
+	border: solid 1px #aacfe4;
+	width: 280px;
+	height: 60px;
+	margin: 2px 2px;
+}
+
+.adminForm div.formelement {
+	display: block;
+	clear: both;
+	max-width: 490px;
+}
+
+.adminForm select {
+	float: left;
+	height: 20px;
+	font-size: 14px;
+	padding: 0px 0px;
+	border: solid 1px #aacfe4;
+	width: 282px;
+	margin: 2px 2px 2px;
+}
+
+.adminForm label {
+	display: block;
+	font-size: 14px;
+	font-weight: bold;
+	text-align: right;
+	width: 180px;
+	float: left;
+	margin: 4px 2px 2px;
+}
+
+.adminBackupForm div.formelement {
+    display: block;
+    clear: both;
+    max-width: 1240px;
+}
+.adminFormsFeedbackPanel {
+	position: fixed;
+	left:550px;
+	width: 480px;
+	bottom: 16px;
+	z-index:999;
+}
+.adminForm .newItem {
+	padding-left: 25px;
+	background-image: url(images/new.png);
+	background-repeat: no-repeat;
+	background-position: 5px;
+}
\ No newline at end of file
diff --git a/src/main/webapp/css/calendar.css b/src/main/webapp/css/calendar.css
new file mode 100644
index 0000000..dea7fba
--- /dev/null
+++ b/src/main/webapp/css/calendar.css
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+.appointmentPopUp td {
+	vertical-align: top;
+}
+
+.appointmentPopUp input[name="appointmentName"] {
+	width: 420px;
+}
+
+.appointmentPopUp input[name="password"] {
+	width: 420px;
+}
+
+.appointmentPopUp input[name="appointmentLocation"] {
+	width: 420px;
+}
+
+.appointmentPopUp textarea[name="appointmentDescription"] {
+	width: 424px;
+	height: 80px;
+}
+
+.appointmentPopUp select[name="remind"] {
+	width: 426px;
+}
+
+.appointmentPopUp select[name="room.roomtype"] {
+	width: 426px;
+}
+
+.appointmentPopUp select[name="room"] {
+	width: 426px;
+}
+
+.appointmentPopUp .formNewButton {
+	float: left;
+}
+
+.appointmentPopUp .attendeeContainer {
+	background-color: #FFFFFF;
+	border: solid 1px #aacfe4;
+	width: 424px;
+	height: 100px;
+	overflow-x: scroll;
+	float: left;
+}
+
+.appointmentPopUp .attendeeContainer table td:FIRST-CHILD div {
+	width: 130px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+}
+
+.appointmentPopUp .attendeeContainer table td:nth-child(2) div {
+	width: 260px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+}
+
+.appointmentPopUp .attendeeContainer table td:nth-child(3) div {
+	width: 20px;
+}
+.appointment.attendees {
+	width: 100%;
+}
+.appointment.attendees.select2-container-multi .select2-choices {
+	max-height: 100px;
+	overflow-y: auto;
+}
diff --git a/src/main/webapp/css/forms.css b/src/main/webapp/css/forms.css
new file mode 100644
index 0000000..0c2901e
--- /dev/null
+++ b/src/main/webapp/css/forms.css
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+div.formSaveBar {
+	width: 100%;
+	height: 22px;
+}
+ 
+div.formSaveButton input {
+	background: url(images/forms/disk.png) no-repeat;
+	float: left;
+	cursor: pointer;
+	width: 18px;
+	height: 18px;
+	border: none;
+	margin-left: 2px;
+	margin-top: 2px;
+}
+
+div.formNewButton input {
+	background: url(images/forms/plus_icon.png) no-repeat;
+	float: left;
+	cursor: pointer;
+	width: 18px;
+	height: 18px;
+	border: none;
+	margin-left: 2px;
+	margin-top: 2px;
+}
+
+div.formNewButton.disabled input {
+	background: url(images/forms/plus_icon_disabled.png) no-repeat;
+	float: left;
+	cursor: default;
+	width: 18px;
+	height: 18px;
+	border: none;
+	margin-left: 2px;
+	margin-top: 2px;
+}
+
+div.formRefreshButton input {
+	background: url(images/forms/arrow_refresh_small.png) no-repeat;
+	float: left;
+	cursor: pointer;
+	width: 18px;
+	height: 18px;
+	border: none;
+	margin-left: 2px;
+	margin-top: 2px;
+}
+
+div.formCancelButton div {
+	background: url(images/forms/cancel_icon.png) no-repeat;
+	display: inline-block;
+	float: left;
+	cursor: pointer;
+	width: 18px;
+	height: 18px;
+	border: none;
+	margin-left: 2px;
+	margin-top: 2px;
+}
\ No newline at end of file
diff --git a/src/main/webapp/css/history.css b/src/main/webapp/css/history.css
new file mode 100644
index 0000000..d78d4be
--- /dev/null
+++ b/src/main/webapp/css/history.css
@@ -0,0 +1,24 @@
+/*

+ *

+ *  Licensed to the Apache Software Foundation (ASF) under one or more

+ *  contributor license agreements.  See the NOTICE file distributed with

+ *  this work for additional information regarding copyright ownership.

+ *  The ASF licenses this file to You under the Apache License, Version 2.0

+ *  (the "License"); you may not use this file except in compliance with

+ *  the License.  You may obtain a copy of the License at

+ *

+ *      http://www.apache.org/licenses/LICENSE-2.0

+ *

+ *  Unless required by applicable law or agreed to in writing, software

+ *  distributed under the License is distributed on an "AS IS" BASIS,

+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ *  See the License for the specific language governing permissions and

+ *  limitations under the License.

+ *

+ */

+/* This CSS stylesheet defines styles used by required elements in a flex application page that supports browser history */

+

+#ie_historyFrame { width: 0px; height: 0px; display:none }

+#firefox_anchorDiv { width: 0px; height: 0px; display:none }

+#safari_formDiv { width: 0px; height: 0px; display:none }

+#safari_rememberDiv { width: 0px; height: 0px; display:none }

diff --git a/src/main/webapp/css/images/add.png b/src/main/webapp/css/images/add.png
new file mode 100644
index 0000000..6332fef
--- /dev/null
+++ b/src/main/webapp/css/images/add.png
Binary files differ
diff --git a/src/main/webapp/css/images/arrow_down.png b/src/main/webapp/css/images/arrow_down.png
new file mode 100644
index 0000000..e5b352b
--- /dev/null
+++ b/src/main/webapp/css/images/arrow_down.png
Binary files differ
diff --git a/src/main/webapp/css/images/arrow_right.png b/src/main/webapp/css/images/arrow_right.png
new file mode 100644
index 0000000..3ef0b77
--- /dev/null
+++ b/src/main/webapp/css/images/arrow_right.png
Binary files differ
diff --git a/src/main/webapp/css/images/basket_put.png b/src/main/webapp/css/images/basket_put.png
new file mode 100644
index 0000000..be62faa
--- /dev/null
+++ b/src/main/webapp/css/images/basket_put.png
Binary files differ
diff --git a/src/main/webapp/css/images/bullet_green.png b/src/main/webapp/css/images/bullet_green.png
new file mode 100644
index 0000000..058ad26
--- /dev/null
+++ b/src/main/webapp/css/images/bullet_green.png
Binary files differ
diff --git a/src/main/webapp/css/images/bullet_red.png b/src/main/webapp/css/images/bullet_red.png
new file mode 100644
index 0000000..0cd8031
--- /dev/null
+++ b/src/main/webapp/css/images/bullet_red.png
Binary files differ
diff --git a/src/main/webapp/css/images/cross.png b/src/main/webapp/css/images/cross.png
new file mode 100644
index 0000000..1514d51
--- /dev/null
+++ b/src/main/webapp/css/images/cross.png
Binary files differ
diff --git a/src/main/webapp/css/images/email_add.png b/src/main/webapp/css/images/email_add.png
new file mode 100644
index 0000000..6c93368
--- /dev/null
+++ b/src/main/webapp/css/images/email_add.png
Binary files differ
diff --git a/src/main/webapp/css/images/email_delete.png b/src/main/webapp/css/images/email_delete.png
new file mode 100644
index 0000000..a9932b1
--- /dev/null
+++ b/src/main/webapp/css/images/email_delete.png
Binary files differ
diff --git a/src/main/webapp/css/images/email_go.png b/src/main/webapp/css/images/email_go.png
new file mode 100644
index 0000000..4a6c5d3
--- /dev/null
+++ b/src/main/webapp/css/images/email_go.png
Binary files differ
diff --git a/src/main/webapp/css/images/film.png b/src/main/webapp/css/images/film.png
new file mode 100644
index 0000000..b0ce7bb
--- /dev/null
+++ b/src/main/webapp/css/images/film.png
Binary files differ
diff --git a/src/main/webapp/css/images/film_error.png b/src/main/webapp/css/images/film_error.png
new file mode 100644
index 0000000..88f3d69
--- /dev/null
+++ b/src/main/webapp/css/images/film_error.png
Binary files differ
diff --git a/src/main/webapp/css/images/film_processing.png b/src/main/webapp/css/images/film_processing.png
new file mode 100644
index 0000000..fb09a02
--- /dev/null
+++ b/src/main/webapp/css/images/film_processing.png
Binary files differ
diff --git a/src/main/webapp/css/images/folder.png b/src/main/webapp/css/images/folder.png
new file mode 100644
index 0000000..784e8fa
--- /dev/null
+++ b/src/main/webapp/css/images/folder.png
Binary files differ
diff --git a/src/main/webapp/css/images/folder_add.png b/src/main/webapp/css/images/folder_add.png
new file mode 100644
index 0000000..529fe8f
--- /dev/null
+++ b/src/main/webapp/css/images/folder_add.png
Binary files differ
diff --git a/src/main/webapp/css/images/forms/arrow_refresh_small.png b/src/main/webapp/css/images/forms/arrow_refresh_small.png
new file mode 100644
index 0000000..d3087df
--- /dev/null
+++ b/src/main/webapp/css/images/forms/arrow_refresh_small.png
Binary files differ
diff --git a/src/main/webapp/css/images/forms/cancel_icon.png b/src/main/webapp/css/images/forms/cancel_icon.png
new file mode 100644
index 0000000..2d26062
--- /dev/null
+++ b/src/main/webapp/css/images/forms/cancel_icon.png
Binary files differ
diff --git a/src/main/webapp/css/images/forms/disk.png b/src/main/webapp/css/images/forms/disk.png
new file mode 100644
index 0000000..99d532e
--- /dev/null
+++ b/src/main/webapp/css/images/forms/disk.png
Binary files differ
diff --git a/src/main/webapp/css/images/forms/plus_icon.png b/src/main/webapp/css/images/forms/plus_icon.png
new file mode 100644
index 0000000..acec291
--- /dev/null
+++ b/src/main/webapp/css/images/forms/plus_icon.png
Binary files differ
diff --git a/src/main/webapp/css/images/forms/plus_icon_disabled.png b/src/main/webapp/css/images/forms/plus_icon_disabled.png
new file mode 100644
index 0000000..cfb4776
--- /dev/null
+++ b/src/main/webapp/css/images/forms/plus_icon_disabled.png
Binary files differ
diff --git a/src/main/webapp/css/images/house_link.png b/src/main/webapp/css/images/house_link.png
new file mode 100644
index 0000000..be2c271
--- /dev/null
+++ b/src/main/webapp/css/images/house_link.png
Binary files differ
diff --git a/src/main/webapp/css/images/information.png b/src/main/webapp/css/images/information.png
new file mode 100644
index 0000000..12cd1ae
--- /dev/null
+++ b/src/main/webapp/css/images/information.png
Binary files differ
diff --git a/src/main/webapp/css/images/new.png b/src/main/webapp/css/images/new.png
new file mode 100644
index 0000000..6a9bf03
--- /dev/null
+++ b/src/main/webapp/css/images/new.png
Binary files differ
diff --git a/src/main/webapp/css/images/refresh.gif b/src/main/webapp/css/images/refresh.gif
new file mode 100644
index 0000000..7aff1a9
--- /dev/null
+++ b/src/main/webapp/css/images/refresh.gif
Binary files differ
diff --git a/src/main/webapp/css/images/script_error.png b/src/main/webapp/css/images/script_error.png
new file mode 100644
index 0000000..0491954
--- /dev/null
+++ b/src/main/webapp/css/images/script_error.png
Binary files differ
diff --git a/src/main/webapp/css/images/tick.png b/src/main/webapp/css/images/tick.png
new file mode 100644
index 0000000..a9925a0
--- /dev/null
+++ b/src/main/webapp/css/images/tick.png
Binary files differ
diff --git a/src/main/webapp/css/images/trash.png b/src/main/webapp/css/images/trash.png
new file mode 100644
index 0000000..b92592b
--- /dev/null
+++ b/src/main/webapp/css/images/trash.png
Binary files differ
diff --git a/src/main/webapp/css/images/user.png b/src/main/webapp/css/images/user.png
new file mode 100644
index 0000000..79f35cc
--- /dev/null
+++ b/src/main/webapp/css/images/user.png
Binary files differ
diff --git a/src/main/webapp/css/images/user_go.png b/src/main/webapp/css/images/user_go.png
new file mode 100644
index 0000000..0468cf0
--- /dev/null
+++ b/src/main/webapp/css/images/user_go.png
Binary files differ
diff --git a/src/main/webapp/css/images/world_link.png b/src/main/webapp/css/images/world_link.png
new file mode 100644
index 0000000..b8edc12
--- /dev/null
+++ b/src/main/webapp/css/images/world_link.png
Binary files differ
diff --git a/src/main/webapp/css/jquery.ui.menubar-rtl.css b/src/main/webapp/css/jquery.ui.menubar-rtl.css
new file mode 100644
index 0000000..4f19036
--- /dev/null
+++ b/src/main/webapp/css/jquery.ui.menubar-rtl.css
@@ -0,0 +1,30 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+.ui-menubar {

+	padding: 0px !important;

+}

+.ui-menubar-item {

+	float: right !important;

+}

+.ui-menubar .ui-button {

+	float: right !important;

+}

+.ui-menubar .ui-button .ui-button-text .ui-icon {

+	float: left !important;

+}

diff --git a/src/main/webapp/css/jquery.ui.menubar.css b/src/main/webapp/css/jquery.ui.menubar.css
new file mode 100644
index 0000000..03e04af
--- /dev/null
+++ b/src/main/webapp/css/jquery.ui.menubar.css
@@ -0,0 +1,35 @@
+/*

+ * jQuery UI Menubar @VERSION

+ *

+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)

+ * Dual licensed under the MIT or GPL Version 2 licenses.

+ * http://jquery.org/license

+ */

+.ui-menubar {

+	list-style: none;

+	margin: 0; padding-left: 0;

+}

+

+.ui-menubar-item {

+	float: left;

+}

+

+.ui-menubar .ui-button {

+	float: left;

+	font-weight: bold;

+	border-top-width: 0 !important;

+	border-bottom-width: 0 !important;

+	margin: 0;

+	outline: none;

+}

+.ui-menubar .ui-menubar-link {

+	border-right: 1px dashed transparent;

+	border-left: 1px dashed transparent;

+}

+

+.ui-menubar .ui-menu {

+	width: 200px;

+	position: absolute;

+	z-index: 9999;

+	font-weight: normal;

+}

diff --git a/src/main/webapp/css/theme-rtl.css b/src/main/webapp/css/theme-rtl.css
new file mode 100644
index 0000000..6e110b6
--- /dev/null
+++ b/src/main/webapp/css/theme-rtl.css
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+#header {
+	padding-left: initial !important;
+	padding-right: 150px;
+	background-position: right center;
+}
+#topLinks {
+	right: initial !important;
+	left: 10px;
+}
+
+#topLinks span {
+	border-right: none !important;
+	border-left: 1px solid black;
+}
+
+#topLinks span:last-child {
+	border-left: none;
+}
+#busy_indicator {
+	float: left !important;
+}
+#chatPanel {
+	right: initial !important;
+	left: 10px;
+}
+.ui-tabs .ui-tabs-nav li {
+	float: right !important;
+}
+.info-text {
+	background-position: right top !important;
+	padding-left: initial !important;
+	padding-right: 20px;
+}
+.start_step1, .start_step2, .start_step3, .start_step4 {
+	padding-left: initial !important;
+	padding-right: 30px;
+	background-position: right top !important;
+}
+.start_step2 {
+	margin-left: initial !important;
+	margin-right: 20px !important;
+}
+.start_step3 {
+	margin-left: initial !important;
+	margin-right: 40px !important;
+}
+.start_step4 {
+	margin-left: initial !important;
+	margin-right: 60px !important;
+}
+form .input {
+	float: right !important;
+}
+#searchUsersTable th, .fht-table th {
+	text-align: right !important;
+}
+.ui-dialog .ui-dialog-title {
+	float: right !important;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+	right: initial !important;
+	left: .3em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+	float: left !important;
+}
+
+/**** FIXME need to be moved to wicket-jquery-ui **************/
+span.css-emoticon {
+	transform: rotate(-90deg) !important;
+}
+.chat.dropdown-menu {
+	left: initial !important;
+    right: -50px !important;
+	float: right !important;
+}
diff --git a/src/main/webapp/css/theme.css b/src/main/webapp/css/theme.css
new file mode 100644
index 0000000..97641bc
--- /dev/null
+++ b/src/main/webapp/css/theme.css
@@ -0,0 +1,624 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+html, body {
+	height: 100%;
+	margin: 0;
+	font-family: Arial, Helvetica, sans-serif;
+}
+#header {
+	font-size: 28px;
+	line-height: 40px;
+	font-weight: bold;
+	background-image: url(../public/themes/basic-theme/general/logo.png);
+	background-repeat: no-repeat;
+	padding-left: 150px;
+}
+#topLinks {
+	position: absolute;
+	top: 10px;
+	right: 10px;
+}
+
+#topLinks span {
+	padding-right: 5px;
+	padding-left: 5px;
+	border-right: 1px solid black;
+	white-space: nowrap;
+}
+
+#topLinks span:last-child {
+	border-right: none;
+}
+
+#menu {
+	background-color: #AFCBFB;
+	margin-top: 10px;
+}
+.ui-menubar .ui-menu {
+	width: 250px;
+}
+.ui-menu .ui-menu-item a {
+	line-height: 1.2em !important;
+	padding-bottom: 5px !important;
+}
+.menuName {
+	font-weight: bold;
+}
+.menuDesc {
+	font-size: smaller;
+	line-height: 1em !important;
+}
+
+#busy_indicator {
+	display: none;
+	float: right;
+	margin-top: 5px;
+	z-index: 1000;
+	width: 200px;
+	font-weight: bold;
+	text-align: center;
+	font-size: 1em;
+	color: #FF0000;
+}
+
+#chatPanel {
+	position: fixed;
+	z-index: 2000;
+	bottom: 0px;
+	right: 10px;
+	width: 600px;
+}
+#chatPanel #chat {
+	height: 20px;
+}
+#chatPanel #chat #controlBlock #control {
+	text-align: center;
+}
+#chatPanel #chat #messageArea .date {
+    margin-right: 5px;
+    font-style: italic;
+    font-size: smaller;
+}
+#chatPanel #chat #messageArea .from {
+	margin-left: 5px;
+    margin-right: 5px;
+	font-weight: bold;
+}
+#messageArea {
+	height: 165px;
+	overflow-y: auto;
+}
+#chatMessage .wysiwyg-editor {
+	height: 70px;
+	max-height: 70px;
+}
+.clickable {
+	cursor: pointer;
+}
+.dragbox-content .tableWrapper {
+	width: auto;
+	height: 100px;
+}
+.dragbox-content .tableWrapper .adminListTable {
+	max-width: none;
+	min-width: 0;
+}
+.help.support h3 {
+	margin-bottom: 5px;
+}
+.tableWrapper, .tableWrapperSmall {
+	background-color: #FFFFFF;
+	border: solid 1px #aacfe4;
+	width: 536px;
+	height: 100px;
+	overflow-y: scroll;
+}
+.tableWrapper {
+	height: 500px;
+}
+
+.formelementradiobox {
+	margin-left: 100px;
+}
+
+.formelementradiobox input {
+	margin: 0px 0px;
+	border: none;
+	width: 20px;
+}
+
+.formelementradiobox label {
+	width: 260px;
+	margin: 0px
+}
+
+.addLanguagePanel {
+	display: block;
+}
+
+.addLanguagePanel select {
+	padding: 0px 0px;
+	border: solid 1px #aacfe4;
+	width: 140px;
+	font-size: 12px;
+	margin-left: 2px;
+}
+
+.pagedEntityListPanel {
+	margin-left: 2px;
+	display: inline-block;
+}
+
+.searchForm {
+	display: inline-block;
+	vertical-align: top;
+}
+
+.pagedEntityListPanel select, .adminForm .pagedEntityListPanel select {
+	padding: 0px 0px;
+	border: solid 1px #aacfe4;
+	width: 60px;
+	font-size: 12px;
+	display: inline;
+	float: none;
+}
+.searchForm input[type="text"], .adminForm .searchForm input[type="text"] {
+	width: 140px;
+	float: none;
+	display: inline-block;
+}
+.searchForm input[type="submit"], .adminForm .searchForm input[type="submit"] {
+	width: auto;
+	float: none;
+	display: inline-block;
+	border: 2px outset buttonface;
+	padding: 1px 6px;
+	font-size: 12px;
+}
+.pagedEntityListPanel input, .adminForm .pagedEntityListPanel input {
+	font-size: 14px;
+	padding: 0px 0px;
+	border: solid 1px #aacfe4;
+	width: 100px;
+	height: 20px;
+	margin: 2px 2px;
+	display: inline;
+	float: none;
+}
+
+.goto, .goto :link, .goto :hover {
+	font-size: 14px;
+	line-height: 14px;
+	text-decoration: none;
+	text-align: center;
+	vertical-align: middle;
+	min-width: 16px;
+}
+
+.goto.icon {
+    display: inline-block;
+    width: 16px;
+    height: 16px;
+    border: none;
+    margin: 0px;
+    padding: 0px;
+    zoom: 1.2;
+}
+
+.ui-dialog {
+	-moz-box-shadow: 3px 3px 4px #000;
+	-webkit-box-shadow: 3px 3px 4px #000;
+	/* For IE 8 */
+	-ms-filter:
+		"progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='#000000')";
+	/* For IE 5.5 - 7 */
+	filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135,
+		Color='#000000' );
+	box-shadow: 3px 3px 4px #000;
+}
+
+.sort-icon {
+	display: inline-block !important;
+	text-indent: 0px !important;
+}
+
+.start_step1, .start_step2, .start_step3, .start_step4  {
+	padding-left: 30px;
+	background-position: left top;
+	margin: 5px 0px 5px 0px; 
+	background-size: contain;
+	background-repeat: no-repeat;
+	display: inline-block;
+}
+.start_step1 {
+	background-image: url(../public/themes/basic-theme/dashboard/wizzard_button_1.png);
+}
+.start_step2 {
+	background-image: url(../public/themes/basic-theme/dashboard/wizzard_button_2.png);
+	margin-left: 20px;
+}
+.start_step3 {
+	background-image: url(../public/themes/basic-theme/dashboard/wizzard_button_3.png);
+	margin-left: 40px;
+}
+.start_step4 {
+	background-image: url(../public/themes/basic-theme/dashboard/wizzard_button_4.png);
+	margin-left: 60px;
+}
+.widget {
+	width: 100%;
+}
+.widget td {
+	min-width: 150px;
+}
+#contents .dragbox-content {
+	min-height: 300px;
+	max-height: 300px;
+}
+#feedcontainer {
+	overflow: auto;
+}
+#feeds.ui-accordion .ui-accordion-header {
+	margin-bottom: 2px;
+}
+.recording {
+	width: 100%;
+	display: inline-block;
+}
+.recording .files {
+	width: 250px;
+	border: 1px solid #ccc;
+}
+.trash-toolbar {
+	font-weight: bold;
+	line-height: 20px;
+	color: transparent;
+}
+.trash-toolbar-hover {
+	color: inherit;
+}
+.recording .files .trees {
+	min-height: 400px;
+	max-height: 600px;
+	overflow-x: hidden;
+	overflow-y: auto;
+}
+.recording .files .sizes table, .recording .files .info table {
+	width: 100%;
+}
+.recording .files .info input {
+	width: 100%;
+	padding-right: 5px;
+	padding-left: 5px;
+}
+.recording .video .player {
+	width: 100%;
+	display: inline-block;
+	box-shadow: 0 0 10px 1px rgba(74, 137, 151, 0.5);
+}
+.recording .video .player video {
+	width: 100%;
+}
+.align-left {
+	float: left;
+}
+.align-right {
+	float: right;
+}
+.clear {
+	clear: both;
+}
+.om-icon {
+	background-repeat: no-repeat !important;
+	background-position: 0 0 !important;
+	width: 18px;
+	height: 18px;
+	border: none;
+	margin-left: 2px;
+	margin-top: 2px;
+	display: inline-block !important;
+}
+.trees a.om-icon {
+	width: auto;
+}
+.trees a.om-icon span {
+	white-space: nowrap;
+	padding-right: 20px;
+	vertical-align: top;
+}
+.cross.om-icon {
+	background-image: url(images/cross.png);
+}
+.tick.om-icon {
+	background-image: url(images/tick.png);
+}
+.add.om-icon {
+	background-image: url(images/add.png);
+}
+.new-email.om-icon {
+	background-image: url(images/email_add.png);
+}
+.user.om-icon {
+	background: url(images/user.png);
+}
+.refresh.om-icon {
+	background: url(images/refresh.gif);
+}
+.trash.om-icon {
+	background: url(images/trash.png);
+}
+.folder-create.om-icon {
+	background: url(images/folder_add.png);
+}
+.recording.om-icon {
+	padding-left: 18px;
+	background-image: url(images/film.png);
+}
+.broken-recording.om-icon {
+	padding-left: 18px;
+	background-image: url(images/film_error.png);
+}
+.processing-recording.om-icon {
+	padding-left: 18px;
+	background-image: url(images/film_processing.png);
+}
+.my-recordings.om-icon {
+	padding-left: 18px;
+	background-image: url(images/house_link.png);
+}
+.public-recordings.om-icon {
+	padding-left: 18px;
+	background-image: url(images/world_link.png);
+}
+.tree-theme-windows span.tree-content {
+	display: flex !important;
+}
+.recording.item {
+	position: relative;
+	vertical-align: top;
+}
+.recording.item .name {
+	color: black;
+	display: block;
+	overflow: hidden;
+	width: 230px;
+}
+.recording.item .errors {
+	position: absolute;
+	right: 0px;
+	background-image: url(images/script_error.png);
+	width: 16px;
+	height: 16px;
+	background-repeat: no-repeat;
+	padding-right: 20px;
+}
+.recording.dialog.errors {
+	width: 600px;
+	height: 500px;
+	font-size: small;
+}
+.recording.dialog.errors .alert {
+	color: red;
+}
+.recording.dialog.errors .message {
+	display: block;
+	unicode-bidi: embed;
+	font-family: monospace;
+	white-space: pre;
+	margin: 0;
+}
+.online.om-icon {
+	background-image: url(images/bullet_green.png);
+}
+.offline.om-icon {
+	background-image: url(images/bullet_red.png);
+}
+.error {
+	color: red;
+}
+.message {
+	margin: 50px;
+	border: 1px solid black;
+	padding: 15px;
+	-webkit-border-radius: 8px;
+	border-radius: 8px;
+}
+.ui-progressbar div { 
+	text-align: center;
+	padding-top: 7px;
+	font-weight: bold;
+}
+table.messages {
+	width: 100%;
+	min-height: 500px;
+}
+table.messages td.side, table.messages td.main {
+	vertical-align: top;
+}
+table.messages td.side.left {
+	min-width: 150px;
+	overflow-x: hidden;
+}
+table.messages td.side.right {
+	min-width: 200px;
+	overflow-x: hidden;
+}
+table.messages td.main {
+	width: 100%;
+}
+.email {
+	padding-left: 25px;
+	background-repeat: no-repeat !important;
+	background-position: 5px 3px !important;
+	padding-top: 2px;
+	display: block;
+	text-align:left;
+}
+.email.new {
+	background-image: url(images/email_add.png);
+	font-weight: normal;
+}
+.email.new .ui-button-text, .email.newdir .ui-button-text {
+	padding: 0;
+}
+.email.inbox {
+	background-image: url(images/basket_put.png);
+}
+.email.sent {
+	background-image: url(images/email_go.png);
+}
+.email.trash {
+	background-image: url(images/email_delete.png);
+}
+.email.newdir {
+	background-image: url(images/folder_add.png);
+	font-weight: normal;
+}
+.email.folder {
+	background-image: url(images/folder.png);
+	font-weight: normal;
+	position: relative;
+}
+.email.folder .delete {
+	position:absolute;
+	right: 2px;
+	top: 2px;
+	background-image: url(images/cross.png);
+	font-weight: normal;
+	padding: 0;
+	display: inline-block;
+	background-position: 0;
+	width: 18px;
+	height: 18px;
+}
+.messages.column.label {
+	width: 20px;
+	min-height: inherit;
+}
+input[type="text"].messages.text, .messages.text.to {
+	width: 100%;
+	max-height: 100px;
+	overflow-y: auto;
+}
+textarea.messages.body {
+	width: 100%;
+	height: 300px;
+}
+select.messages.selector {
+	width: 220px;
+}
+.info-text {
+	background-image: url(images/information.png);
+	background-repeat: no-repeat;
+	background-position: left top;
+	cursor: default;
+	border: none;
+	padding-left: 20px;
+	font-style: italic;
+}
+.invisible-form-component {
+	position: absolute;
+	top: -9999px;
+	width: 1px;
+	height: 1px;
+}
+#messagesTable tr.unread {
+	font-weight: bold;
+}
+.fht-tbody {
+	background-color: white;
+}
+#searchUsersTable th, .fht-table th {
+	font-weight: bold !important;
+	text-align: left;
+}
+#ui-datepicker-div{
+    z-index: 100 !important;
+}
+.room-list {
+	border-collapse: collapse;
+}
+.room-row {
+	background-color: rgb(248, 248, 248);
+	border-bottom: 5px solid white;
+}
+.select2-results .select2-result .select2-result-label .user.external
+, .select2-results .select2-result .select2-result-label .user.internal
+, .select2-choices .select2-search-choice .user.external
+, .select2-choices .select2-search-choice .user.internal {
+	padding-left: 18px;
+	background-repeat: no-repeat;
+	background-position: 0px 2px;
+}
+.select2-results .select2-result .select2-result-label .user.external
+, .select2-choices .select2-search-choice .user.external {
+	background-image: url(images/user_go.png);
+}
+.select2-results .select2-result .select2-result-label .user.internal
+, .select2-choices .select2-search-choice .user.internal {
+	background-image: url(images/user.png);
+}
+.page.recording {
+	padding-top: 40px;
+}
+.page.recording .video, .page.recording .info {
+	display: inline-block;
+	float: left;
+	padding-left: 20px;
+}
+.page.recording .video {
+	min-width: 400px;
+}
+.rooms.title {
+	font-weight: bold;
+	padding: 10px;
+	padding-bottom: 0;
+}
+.rooms.desc {
+	margin: 10px;
+	max-width: 900px;
+}
+.user.info.panel legend {
+	font-style: italic;
+	text-align: right;
+}
+.user.info.panel fieldset table, .user.info.panel fieldset table textarea {
+	width: 100%;
+}
+form .input {
+	display: block;
+	float: left;
+	font-size: 14px;
+	padding: 0px 0px;
+	width: 280px;
+	margin: 2px 2px;
+}
+.date.time.picker {
+	font-size: 12px;
+	white-space: nowrap;
+}
+.profile .ui-button-text-only .ui-button-text {
+	font-size: 12px;
+	padding-right: 0.2em;
+	padding-left: 0.2em;
+}
+.invitees.select2-container-multi .select2-choices {
+	max-height: 80px;
+	overflow-y: auto;
+}
diff --git a/src/main/webapp/css/theme_om/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png b/src/main/webapp/css/theme_om/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png
new file mode 100644
index 0000000..6c6d80e
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-bg_flat_15_cd0a0a_40x100.png b/src/main/webapp/css/theme_om/images/ui-bg_flat_15_cd0a0a_40x100.png
new file mode 100644
index 0000000..ba05782
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-bg_flat_15_cd0a0a_40x100.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-bg_glass_100_e4f1fb_1x400.png b/src/main/webapp/css/theme_om/images/ui-bg_glass_100_e4f1fb_1x400.png
new file mode 100644
index 0000000..c9ecec2
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-bg_glass_100_e4f1fb_1x400.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-bg_glass_50_3baae3_1x400.png b/src/main/webapp/css/theme_om/images/ui-bg_glass_50_3baae3_1x400.png
new file mode 100644
index 0000000..e21e514
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-bg_glass_50_3baae3_1x400.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-bg_glass_80_d7ebf9_1x400.png b/src/main/webapp/css/theme_om/images/ui-bg_glass_80_d7ebf9_1x400.png
new file mode 100644
index 0000000..a81d8ec
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-bg_glass_80_d7ebf9_1x400.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png b/src/main/webapp/css/theme_om/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png
new file mode 100644
index 0000000..bbab178
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-bg_highlight-hard_70_000000_1x100.png b/src/main/webapp/css/theme_om/images/ui-bg_highlight-hard_70_000000_1x100.png
new file mode 100644
index 0000000..1deb7e3
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-bg_highlight-hard_70_000000_1x100.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-bg_highlight-soft_100_deedf7_1x100.png b/src/main/webapp/css/theme_om/images/ui-bg_highlight-soft_100_deedf7_1x100.png
new file mode 100644
index 0000000..e6ad4cb
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-bg_highlight-soft_100_deedf7_1x100.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-bg_highlight-soft_25_ffef8f_1x100.png b/src/main/webapp/css/theme_om/images/ui-bg_highlight-soft_25_ffef8f_1x100.png
new file mode 100644
index 0000000..3dd42eb
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-bg_highlight-soft_25_ffef8f_1x100.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-icons_2694e8_256x240.png b/src/main/webapp/css/theme_om/images/ui-icons_2694e8_256x240.png
new file mode 100644
index 0000000..2a3ae78
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-icons_2694e8_256x240.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-icons_2e83ff_256x240.png b/src/main/webapp/css/theme_om/images/ui-icons_2e83ff_256x240.png
new file mode 100644
index 0000000..f2bf838
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-icons_2e83ff_256x240.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-icons_3d80b3_256x240.png b/src/main/webapp/css/theme_om/images/ui-icons_3d80b3_256x240.png
new file mode 100644
index 0000000..ad8c68a
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-icons_3d80b3_256x240.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-icons_72a7cf_256x240.png b/src/main/webapp/css/theme_om/images/ui-icons_72a7cf_256x240.png
new file mode 100644
index 0000000..508f22a
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-icons_72a7cf_256x240.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/images/ui-icons_ffffff_256x240.png b/src/main/webapp/css/theme_om/images/ui-icons_ffffff_256x240.png
new file mode 100644
index 0000000..4d66f59
--- /dev/null
+++ b/src/main/webapp/css/theme_om/images/ui-icons_ffffff_256x240.png
Binary files differ
diff --git a/src/main/webapp/css/theme_om/jquery-ui-1.11.4.custom.css b/src/main/webapp/css/theme_om/jquery-ui-1.11.4.custom.css
new file mode 100644
index 0000000..f22e4e6
--- /dev/null
+++ b/src/main/webapp/css/theme_om/jquery-ui-1.11.4.custom.css
@@ -0,0 +1,1225 @@
+/*! jQuery UI - v1.11.4 - 2015-09-10
+* http://jqueryui.com
+* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2C%20Helvetica%2C%20sans-serif&fwDefault=normal&fsDefault=16px&cornerRadius=6px&bgColorHeader=%23deedf7&bgTextureHeader=highlight_soft&bgImgOpacityHeader=100&borderColorHeader=%23aed0ea&fcHeader=%23222222&iconColorHeader=%2372a7cf&bgColorContent=%23f2f5f7&bgTextureContent=highlight_hard&bgImgOpacityContent=100&borderColorContent=%23dddddd&fcContent=%23362b36&iconColorContent=%2372a7cf&bgColorDefault=%23d7ebf9&bgTextureDefault=glass&bgImgOpacityDefault=80&borderColorDefault=%23aed0ea&fcDefault=%232779aa&iconColorDefault=%233d80b3&bgColorHover=%23e4f1fb&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=%2374b2e2&fcHover=%230070a3&iconColorHover=%232694e8&bgColorActive=%233baae3&bgTextureActive=glass&bgImgOpacityActive=50&borderColorActive=%232694e8&fcActive=%23ffffff&iconColorActive=%23ffffff&bgColorHighlight=%23ffef8f&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=25&borderColorHighlight=%23f9dd34&fcHighlight=%23363636&iconColorHighlight=%232e83ff&bgColorError=%23cd0a0a&bgTextureError=flat&bgImgOpacityError=15&borderColorError=%23cd0a0a&fcError=%23ffffff&iconColorError=%23ffffff&bgColorOverlay=%23eeeeee&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=90&opacityOverlay=80&bgColorShadow=%23000000&bgTextureShadow=highlight_hard&bgImgOpacityShadow=70&opacityShadow=30&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+	display: none;
+}
+.ui-helper-hidden-accessible {
+	border: 0;
+	clip: rect(0 0 0 0);
+	height: 1px;
+	margin: -1px;
+	overflow: hidden;
+	padding: 0;
+	position: absolute;
+	width: 1px;
+}
+.ui-helper-reset {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	outline: 0;
+	line-height: 1.3;
+	text-decoration: none;
+	font-size: 100%;
+	list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+	content: "";
+	display: table;
+	border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+	clear: both;
+}
+.ui-helper-clearfix {
+	min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+	width: 100%;
+	height: 100%;
+	top: 0;
+	left: 0;
+	position: absolute;
+	opacity: 0;
+	filter:Alpha(Opacity=0); /* support: IE8 */
+}
+
+.ui-front {
+	z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+	cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	display: block;
+	text-indent: -99999px;
+	overflow: hidden;
+	background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+}
+.ui-draggable-handle {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-resizable {
+	position: relative;
+}
+.ui-resizable-handle {
+	position: absolute;
+	font-size: 0.1px;
+	display: block;
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-resizable-disabled .ui-resizable-handle,
+.ui-resizable-autohide .ui-resizable-handle {
+	display: none;
+}
+.ui-resizable-n {
+	cursor: n-resize;
+	height: 7px;
+	width: 100%;
+	top: -5px;
+	left: 0;
+}
+.ui-resizable-s {
+	cursor: s-resize;
+	height: 7px;
+	width: 100%;
+	bottom: -5px;
+	left: 0;
+}
+.ui-resizable-e {
+	cursor: e-resize;
+	width: 7px;
+	right: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-w {
+	cursor: w-resize;
+	width: 7px;
+	left: -5px;
+	top: 0;
+	height: 100%;
+}
+.ui-resizable-se {
+	cursor: se-resize;
+	width: 12px;
+	height: 12px;
+	right: 1px;
+	bottom: 1px;
+}
+.ui-resizable-sw {
+	cursor: sw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	bottom: -5px;
+}
+.ui-resizable-nw {
+	cursor: nw-resize;
+	width: 9px;
+	height: 9px;
+	left: -5px;
+	top: -5px;
+}
+.ui-resizable-ne {
+	cursor: ne-resize;
+	width: 9px;
+	height: 9px;
+	right: -5px;
+	top: -5px;
+}
+.ui-selectable {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-selectable-helper {
+	position: absolute;
+	z-index: 100;
+	border: 1px dotted black;
+}
+.ui-sortable-handle {
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-accordion .ui-accordion-header {
+	display: block;
+	cursor: pointer;
+	position: relative;
+	margin: 2px 0 0 0;
+	padding: .5em .5em .5em .7em;
+	min-height: 0; /* support: IE7 */
+	font-size: 100%;
+}
+.ui-accordion .ui-accordion-icons {
+	padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+	padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+	position: absolute;
+	left: .5em;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-accordion .ui-accordion-content {
+	padding: 1em 2.2em;
+	border-top: 0;
+	overflow: auto;
+}
+.ui-autocomplete {
+	position: absolute;
+	top: 0;
+	left: 0;
+	cursor: default;
+}
+.ui-button {
+	display: inline-block;
+	position: relative;
+	padding: 0;
+	line-height: normal;
+	margin-right: .1em;
+	cursor: pointer;
+	vertical-align: middle;
+	text-align: center;
+	overflow: visible; /* removes extra width in IE */
+}
+.ui-button,
+.ui-button:link,
+.ui-button:visited,
+.ui-button:hover,
+.ui-button:active {
+	text-decoration: none;
+}
+/* to make room for the icon, a width needs to be set here */
+.ui-button-icon-only {
+	width: 2.2em;
+}
+/* button elements seem to need a little more width */
+button.ui-button-icon-only {
+	width: 2.4em;
+}
+.ui-button-icons-only {
+	width: 3.4em;
+}
+button.ui-button-icons-only {
+	width: 3.7em;
+}
+
+/* button text element */
+.ui-button .ui-button-text {
+	display: block;
+	line-height: normal;
+}
+.ui-button-text-only .ui-button-text {
+	padding: .4em 1em;
+}
+.ui-button-icon-only .ui-button-text,
+.ui-button-icons-only .ui-button-text {
+	padding: .4em;
+	text-indent: -9999999px;
+}
+.ui-button-text-icon-primary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+	padding: .4em 1em .4em 2.1em;
+}
+.ui-button-text-icon-secondary .ui-button-text,
+.ui-button-text-icons .ui-button-text {
+	padding: .4em 2.1em .4em 1em;
+}
+.ui-button-text-icons .ui-button-text {
+	padding-left: 2.1em;
+	padding-right: 2.1em;
+}
+/* no icon support for input elements, provide padding by default */
+input.ui-button {
+	padding: .4em 1em;
+}
+
+/* button icon element(s) */
+.ui-button-icon-only .ui-icon,
+.ui-button-text-icon-primary .ui-icon,
+.ui-button-text-icon-secondary .ui-icon,
+.ui-button-text-icons .ui-icon,
+.ui-button-icons-only .ui-icon {
+	position: absolute;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-button-icon-only .ui-icon {
+	left: 50%;
+	margin-left: -8px;
+}
+.ui-button-text-icon-primary .ui-button-icon-primary,
+.ui-button-text-icons .ui-button-icon-primary,
+.ui-button-icons-only .ui-button-icon-primary {
+	left: .5em;
+}
+.ui-button-text-icon-secondary .ui-button-icon-secondary,
+.ui-button-text-icons .ui-button-icon-secondary,
+.ui-button-icons-only .ui-button-icon-secondary {
+	right: .5em;
+}
+
+/* button sets */
+.ui-buttonset {
+	margin-right: 7px;
+}
+.ui-buttonset .ui-button {
+	margin-left: 0;
+	margin-right: -.3em;
+}
+
+/* workarounds */
+/* reset extra padding in Firefox, see h5bp.com/l */
+input.ui-button::-moz-focus-inner,
+button.ui-button::-moz-focus-inner {
+	border: 0;
+	padding: 0;
+}
+.ui-datepicker {
+	width: 17em;
+	padding: .2em .2em 0;
+	display: none;
+}
+.ui-datepicker .ui-datepicker-header {
+	position: relative;
+	padding: .2em 0;
+}
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+	position: absolute;
+	top: 2px;
+	width: 1.8em;
+	height: 1.8em;
+}
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+	top: 1px;
+}
+.ui-datepicker .ui-datepicker-prev {
+	left: 2px;
+}
+.ui-datepicker .ui-datepicker-next {
+	right: 2px;
+}
+.ui-datepicker .ui-datepicker-prev-hover {
+	left: 1px;
+}
+.ui-datepicker .ui-datepicker-next-hover {
+	right: 1px;
+}
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+	display: block;
+	position: absolute;
+	left: 50%;
+	margin-left: -8px;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-datepicker .ui-datepicker-title {
+	margin: 0 2.3em;
+	line-height: 1.8em;
+	text-align: center;
+}
+.ui-datepicker .ui-datepicker-title select {
+	font-size: 1em;
+	margin: 1px 0;
+}
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+	width: 45%;
+}
+.ui-datepicker table {
+	width: 100%;
+	font-size: .9em;
+	border-collapse: collapse;
+	margin: 0 0 .4em;
+}
+.ui-datepicker th {
+	padding: .7em .3em;
+	text-align: center;
+	font-weight: bold;
+	border: 0;
+}
+.ui-datepicker td {
+	border: 0;
+	padding: 1px;
+}
+.ui-datepicker td span,
+.ui-datepicker td a {
+	display: block;
+	padding: .2em;
+	text-align: right;
+	text-decoration: none;
+}
+.ui-datepicker .ui-datepicker-buttonpane {
+	background-image: none;
+	margin: .7em 0 0 0;
+	padding: 0 .2em;
+	border-left: 0;
+	border-right: 0;
+	border-bottom: 0;
+}
+.ui-datepicker .ui-datepicker-buttonpane button {
+	float: right;
+	margin: .5em .2em .4em;
+	cursor: pointer;
+	padding: .2em .6em .3em .6em;
+	width: auto;
+	overflow: visible;
+}
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+	float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+	width: auto;
+}
+.ui-datepicker-multi .ui-datepicker-group {
+	float: left;
+}
+.ui-datepicker-multi .ui-datepicker-group table {
+	width: 95%;
+	margin: 0 auto .4em;
+}
+.ui-datepicker-multi-2 .ui-datepicker-group {
+	width: 50%;
+}
+.ui-datepicker-multi-3 .ui-datepicker-group {
+	width: 33.3%;
+}
+.ui-datepicker-multi-4 .ui-datepicker-group {
+	width: 25%;
+}
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+	border-left-width: 0;
+}
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+	clear: left;
+}
+.ui-datepicker-row-break {
+	clear: both;
+	width: 100%;
+	font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+	direction: rtl;
+}
+.ui-datepicker-rtl .ui-datepicker-prev {
+	right: 2px;
+	left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next {
+	left: 2px;
+	right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+	right: 1px;
+	left: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+	left: 1px;
+	right: auto;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+	clear: right;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+	float: left;
+}
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+	float: right;
+}
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+	border-right-width: 0;
+	border-left-width: 1px;
+}
+.ui-dialog {
+	overflow: hidden;
+	position: absolute;
+	top: 0;
+	left: 0;
+	padding: .2em;
+	outline: 0;
+}
+.ui-dialog .ui-dialog-titlebar {
+	padding: .4em 1em;
+	position: relative;
+}
+.ui-dialog .ui-dialog-title {
+	float: left;
+	margin: .1em 0;
+	white-space: nowrap;
+	width: 90%;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+.ui-dialog .ui-dialog-titlebar-close {
+	position: absolute;
+	right: .3em;
+	top: 50%;
+	width: 20px;
+	margin: -10px 0 0 0;
+	padding: 1px;
+	height: 20px;
+}
+.ui-dialog .ui-dialog-content {
+	position: relative;
+	border: 0;
+	padding: .5em 1em;
+	background: none;
+	overflow: auto;
+}
+.ui-dialog .ui-dialog-buttonpane {
+	text-align: left;
+	border-width: 1px 0 0 0;
+	background-image: none;
+	margin-top: .5em;
+	padding: .3em 1em .5em .4em;
+}
+.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
+	float: right;
+}
+.ui-dialog .ui-dialog-buttonpane button {
+	margin: .5em .4em .5em 0;
+	cursor: pointer;
+}
+.ui-dialog .ui-resizable-se {
+	width: 12px;
+	height: 12px;
+	right: -5px;
+	bottom: -5px;
+	background-position: 16px 16px;
+}
+.ui-draggable .ui-dialog-titlebar {
+	cursor: move;
+}
+.ui-menu {
+	list-style: none;
+	padding: 0;
+	margin: 0;
+	display: block;
+	outline: none;
+}
+.ui-menu .ui-menu {
+	position: absolute;
+}
+.ui-menu .ui-menu-item {
+	position: relative;
+	margin: 0;
+	padding: 3px 1em 3px .4em;
+	cursor: pointer;
+	min-height: 0; /* support: IE7 */
+	/* support: IE10, see #8844 */
+	list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
+}
+.ui-menu .ui-menu-divider {
+	margin: 5px 0;
+	height: 0;
+	font-size: 0;
+	line-height: 0;
+	border-width: 1px 0 0 0;
+}
+.ui-menu .ui-state-focus,
+.ui-menu .ui-state-active {
+	margin: -1px;
+}
+
+/* icon support */
+.ui-menu-icons {
+	position: relative;
+}
+.ui-menu-icons .ui-menu-item {
+	padding-left: 2em;
+}
+
+/* left-aligned */
+.ui-menu .ui-icon {
+	position: absolute;
+	top: 0;
+	bottom: 0;
+	left: .2em;
+	margin: auto 0;
+}
+
+/* right-aligned */
+.ui-menu .ui-menu-icon {
+	left: auto;
+	right: 0;
+}
+.ui-progressbar {
+	height: 2em;
+	text-align: left;
+	overflow: hidden;
+}
+.ui-progressbar .ui-progressbar-value {
+	margin: -1px;
+	height: 100%;
+}
+.ui-progressbar .ui-progressbar-overlay {
+	background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
+	height: 100%;
+	filter: alpha(opacity=25); /* support: IE8 */
+	opacity: 0.25;
+}
+.ui-progressbar-indeterminate .ui-progressbar-value {
+	background-image: none;
+}
+.ui-selectmenu-menu {
+	padding: 0;
+	margin: 0;
+	position: absolute;
+	top: 0;
+	left: 0;
+	display: none;
+}
+.ui-selectmenu-menu .ui-menu {
+	overflow: auto;
+	/* Support: IE7 */
+	overflow-x: hidden;
+	padding-bottom: 1px;
+}
+.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
+	font-size: 1em;
+	font-weight: bold;
+	line-height: 1.5;
+	padding: 2px 0.4em;
+	margin: 0.5em 0 0 0;
+	height: auto;
+	border: 0;
+}
+.ui-selectmenu-open {
+	display: block;
+}
+.ui-selectmenu-button {
+	display: inline-block;
+	overflow: hidden;
+	position: relative;
+	text-decoration: none;
+	cursor: pointer;
+}
+.ui-selectmenu-button span.ui-icon {
+	right: 0.5em;
+	left: auto;
+	margin-top: -8px;
+	position: absolute;
+	top: 50%;
+}
+.ui-selectmenu-button span.ui-selectmenu-text {
+	text-align: left;
+	padding: 0.4em 2.1em 0.4em 1em;
+	display: block;
+	line-height: 1.4;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+}
+.ui-slider {
+	position: relative;
+	text-align: left;
+}
+.ui-slider .ui-slider-handle {
+	position: absolute;
+	z-index: 2;
+	width: 1.2em;
+	height: 1.2em;
+	cursor: default;
+	-ms-touch-action: none;
+	touch-action: none;
+}
+.ui-slider .ui-slider-range {
+	position: absolute;
+	z-index: 1;
+	font-size: .7em;
+	display: block;
+	border: 0;
+	background-position: 0 0;
+}
+
+/* support: IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+	filter: inherit;
+}
+
+.ui-slider-horizontal {
+	height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+	top: -.3em;
+	margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+	top: 0;
+	height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+	left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+	right: 0;
+}
+
+.ui-slider-vertical {
+	width: .8em;
+	height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+	left: -.3em;
+	margin-left: 0;
+	margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+	left: 0;
+	width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+	bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+	top: 0;
+}
+.ui-spinner {
+	position: relative;
+	display: inline-block;
+	overflow: hidden;
+	padding: 0;
+	vertical-align: middle;
+}
+.ui-spinner-input {
+	border: none;
+	background: none;
+	color: inherit;
+	padding: 0;
+	margin: .2em 0;
+	vertical-align: middle;
+	margin-left: .4em;
+	margin-right: 22px;
+}
+.ui-spinner-button {
+	width: 16px;
+	height: 50%;
+	font-size: .5em;
+	padding: 0;
+	margin: 0;
+	text-align: center;
+	position: absolute;
+	cursor: default;
+	display: block;
+	overflow: hidden;
+	right: 0;
+}
+/* more specificity required here to override default borders */
+.ui-spinner a.ui-spinner-button {
+	border-top: none;
+	border-bottom: none;
+	border-right: none;
+}
+/* vertically center icon */
+.ui-spinner .ui-icon {
+	position: absolute;
+	margin-top: -8px;
+	top: 50%;
+	left: 0;
+}
+.ui-spinner-up {
+	top: 0;
+}
+.ui-spinner-down {
+	bottom: 0;
+}
+
+/* TR overrides */
+.ui-spinner .ui-icon-triangle-1-s {
+	/* need to fix icons sprite */
+	background-position: -65px -16px;
+}
+.ui-tabs {
+	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
+	padding: .2em;
+}
+.ui-tabs .ui-tabs-nav {
+	margin: 0;
+	padding: .2em .2em 0;
+}
+.ui-tabs .ui-tabs-nav li {
+	list-style: none;
+	float: left;
+	position: relative;
+	top: 0;
+	margin: 1px .2em 0 0;
+	border-bottom-width: 0;
+	padding: 0;
+	white-space: nowrap;
+}
+.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
+	float: left;
+	padding: .5em 1em;
+	text-decoration: none;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active {
+	margin-bottom: -1px;
+	padding-bottom: 1px;
+}
+.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
+.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
+	cursor: text;
+}
+.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
+	cursor: pointer;
+}
+.ui-tabs .ui-tabs-panel {
+	display: block;
+	border-width: 0;
+	padding: 1em 1.4em;
+	background: none;
+}
+.ui-tooltip {
+	padding: 8px;
+	position: absolute;
+	z-index: 9999;
+	max-width: 300px;
+	-webkit-box-shadow: 0 0 5px #aaa;
+	box-shadow: 0 0 5px #aaa;
+}
+body .ui-tooltip {
+	border-width: 2px;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size: 16px;
+}
+.ui-widget .ui-widget {
+	font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size: 1em;
+}
+.ui-widget-content {
+	border: 1px solid #dddddd;
+	background: #f2f5f7 url("images/ui-bg_highlight-hard_100_f2f5f7_1x100.png") 50% top repeat-x;
+	color: #362b36;
+}
+.ui-widget-content a {
+	color: #362b36;
+}
+.ui-widget-header {
+	border: 1px solid #aed0ea;
+	background: #deedf7 url("images/ui-bg_highlight-soft_100_deedf7_1x100.png") 50% 50% repeat-x;
+	color: #222222;
+	font-weight: bold;
+}
+.ui-widget-header a {
+	color: #222222;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+	border: 1px solid #aed0ea;
+	background: #d7ebf9 url("images/ui-bg_glass_80_d7ebf9_1x400.png") 50% 50% repeat-x;
+	font-weight: normal;
+	color: #2779aa;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+	color: #2779aa;
+	text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+	border: 1px solid #74b2e2;
+	background: #e4f1fb url("images/ui-bg_glass_100_e4f1fb_1x400.png") 50% 50% repeat-x;
+	font-weight: normal;
+	color: #0070a3;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
+	color: #0070a3;
+	text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+	border: 1px solid #2694e8;
+	background: #3baae3 url("images/ui-bg_glass_50_3baae3_1x400.png") 50% 50% repeat-x;
+	font-weight: normal;
+	color: #ffffff;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+	color: #ffffff;
+	text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+	border: 1px solid #f9dd34;
+	background: #ffef8f url("images/ui-bg_highlight-soft_25_ffef8f_1x100.png") 50% top repeat-x;
+	color: #363636;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+	color: #363636;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+	border: 1px solid #cd0a0a;
+	background: #cd0a0a url("images/ui-bg_flat_15_cd0a0a_40x100.png") 50% 50% repeat-x;
+	color: #ffffff;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+	color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+	color: #ffffff;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+	font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+	opacity: .7;
+	filter:Alpha(Opacity=70); /* support: IE8 */
+	font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+	opacity: .35;
+	filter:Alpha(Opacity=35); /* support: IE8 */
+	background-image: none;
+}
+.ui-state-disabled .ui-icon {
+	filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	width: 16px;
+	height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+	background-image: url("images/ui-icons_72a7cf_256x240.png");
+}
+.ui-widget-header .ui-icon {
+	background-image: url("images/ui-icons_72a7cf_256x240.png");
+}
+.ui-state-default .ui-icon {
+	background-image: url("images/ui-icons_3d80b3_256x240.png");
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+	background-image: url("images/ui-icons_2694e8_256x240.png");
+}
+.ui-state-active .ui-icon {
+	background-image: url("images/ui-icons_ffffff_256x240.png");
+}
+.ui-state-highlight .ui-icon {
+	background-image: url("images/ui-icons_2e83ff_256x240.png");
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+	background-image: url("images/ui-icons_ffffff_256x240.png");
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+	border-top-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+	border-top-right-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+	border-bottom-left-radius: 6px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+	border-bottom-right-radius: 6px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+	background: #eeeeee url("images/ui-bg_diagonals-thick_90_eeeeee_40x40.png") 50% 50% repeat;
+	opacity: .8;
+	filter: Alpha(Opacity=80); /* support: IE8 */
+}
+.ui-widget-shadow {
+	margin: -7px 0 0 -7px;
+	padding: 7px;
+	background: #000000 url("images/ui-bg_highlight-hard_70_000000_1x100.png") 50% top repeat-x;
+	opacity: .3;
+	filter: Alpha(Opacity=30); /* support: IE8 */
+	border-radius: 8px;
+}
diff --git a/src/main/webapp/css/theme_om/jquery-ui-1.11.4.custom.min.css b/src/main/webapp/css/theme_om/jquery-ui-1.11.4.custom.min.css
new file mode 100644
index 0000000..6ccdad9
--- /dev/null
+++ b/src/main/webapp/css/theme_om/jquery-ui-1.11.4.custom.min.css
@@ -0,0 +1,7 @@
+/*! jQuery UI - v1.11.4 - 2015-09-10
+* http://jqueryui.com
+* Includes: core.css, draggable.css, resizable.css, selectable.css, sortable.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, menu.css, progressbar.css, selectmenu.css, slider.css, spinner.css, tabs.css, tooltip.css, theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Arial%2C%20Helvetica%2C%20sans-serif&fwDefault=normal&fsDefault=16px&cornerRadius=6px&bgColorHeader=%23deedf7&bgTextureHeader=highlight_soft&bgImgOpacityHeader=100&borderColorHeader=%23aed0ea&fcHeader=%23222222&iconColorHeader=%2372a7cf&bgColorContent=%23f2f5f7&bgTextureContent=highlight_hard&bgImgOpacityContent=100&borderColorContent=%23dddddd&fcContent=%23362b36&iconColorContent=%2372a7cf&bgColorDefault=%23d7ebf9&bgTextureDefault=glass&bgImgOpacityDefault=80&borderColorDefault=%23aed0ea&fcDefault=%232779aa&iconColorDefault=%233d80b3&bgColorHover=%23e4f1fb&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=%2374b2e2&fcHover=%230070a3&iconColorHover=%232694e8&bgColorActive=%233baae3&bgTextureActive=glass&bgImgOpacityActive=50&borderColorActive=%232694e8&fcActive=%23ffffff&iconColorActive=%23ffffff&bgColorHighlight=%23ffef8f&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=25&borderColorHighlight=%23f9dd34&fcHighlight=%23363636&iconColorHighlight=%232e83ff&bgColorError=%23cd0a0a&bgTextureError=flat&bgImgOpacityError=15&borderColorError=%23cd0a0a&fcError=%23ffffff&iconColorError=%23ffffff&bgColorOverlay=%23eeeeee&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=90&opacityOverlay=80&bgColorShadow=%23000000&bgTextureShadow=highlight_hard&bgImgOpacityShadow=70&opacityShadow=30&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-draggable-handle{-ms-touch-action:none;touch-action:none}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;display:block;-ms-touch-action:none;touch-action:none}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable{-ms-touch-action:none;touch-action:none}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-sortable-handle{-ms-touch-action:none;touch-action:none}.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%}.ui-accordion .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible}.ui-button,.ui-button:link,.ui-button:visited,.ui-button:hover,.ui-button:active{text-decoration:none}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:normal}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}input.ui-button::-moz-focus-inner,button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:45%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-dialog{overflow:hidden;position:absolute;top:0;left:0;padding:.2em;outline:0}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:20px;margin:-10px 0 0 0;padding:1px;height:20px}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:none}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{position:relative;margin:0;padding:3px 1em 3px .4em;cursor:pointer;min-height:0;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-progressbar .ui-progressbar-overlay{background:url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");height:100%;filter:alpha(opacity=25);opacity:0.25}.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none}.ui-selectmenu-menu{padding:0;margin:0;position:absolute;top:0;left:0;display:none}.ui-selectmenu-menu .ui-menu{overflow:auto;overflow-x:hidden;padding-bottom:1px}.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup{font-size:1em;font-weight:bold;line-height:1.5;padding:2px 0.4em;margin:0.5em 0 0 0;height:auto;border:0}.ui-selectmenu-open{display:block}.ui-selectmenu-button{display:inline-block;overflow:hidden;position:relative;text-decoration:none;cursor:pointer}.ui-selectmenu-button span.ui-icon{right:0.5em;left:auto;margin-top:-8px;position:absolute;top:50%}.ui-selectmenu-button span.ui-selectmenu-text{text-align:left;padding:0.4em 2.1em 0.4em 1em;display:block;line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default;-ms-touch-action:none;touch-action:none}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle}.ui-spinner-input{border:none;background:none;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px}.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0}.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none}.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0}.ui-spinner-up{top:0}.ui-spinner-down{bottom:0}.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px}.ui-tabs{position:relative;padding:.2em}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text}.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa}body .ui-tooltip{border-width:2px}.ui-widget{font-family:Arial,Helvetica,sans-serif;font-size:16px}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Arial,Helvetica,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #ddd;background:#f2f5f7 url("images/ui-bg_highlight-hard_100_f2f5f7_1x100.png") 50% top repeat-x;color:#362b36}.ui-widget-content a{color:#362b36}.ui-widget-header{border:1px solid #aed0ea;background:#deedf7 url("images/ui-bg_highlight-soft_100_deedf7_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #aed0ea;background:#d7ebf9 url("images/ui-bg_glass_80_d7ebf9_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#2779aa}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#2779aa;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #74b2e2;background:#e4f1fb url("images/ui-bg_glass_100_e4f1fb_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#0070a3}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited,.ui-state-focus a,.ui-state-focus a:hover,.ui-state-focus a:link,.ui-state-focus a:visited{color:#0070a3;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #2694e8;background:#3baae3 url("images/ui-bg_glass_50_3baae3_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#fff}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#fff;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #f9dd34;background:#ffef8f url("images/ui-bg_highlight-soft_25_ffef8f_1x100.png") 50% top repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#cd0a0a url("images/ui-bg_flat_15_cd0a0a_40x100.png") 50% 50% repeat-x;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url("images/ui-icons_72a7cf_256x240.png")}.ui-widget-header .ui-icon{background-image:url("images/ui-icons_72a7cf_256x240.png")}.ui-state-default .ui-icon{background-image:url("images/ui-icons_3d80b3_256x240.png")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("images/ui-icons_2694e8_256x240.png")}.ui-state-active .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:6px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:6px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:6px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:6px}.ui-widget-overlay{background:#eee url("images/ui-bg_diagonals-thick_90_eeeeee_40x40.png") 50% 50% repeat;opacity:.8;filter:Alpha(Opacity=80)}.ui-widget-shadow{margin:-7px 0 0 -7px;padding:7px;background:#000 url("images/ui-bg_highlight-hard_70_000000_1x100.png") 50% top repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px}
\ No newline at end of file
diff --git a/src/main/webapp/default/_big_profile_pic.jpg b/src/main/webapp/default/_big_profile_pic.jpg
new file mode 100644
index 0000000..07a1286
--- /dev/null
+++ b/src/main/webapp/default/_big_profile_pic.jpg
Binary files differ
diff --git a/src/main/webapp/default/_chat_profile_pic.jpg b/src/main/webapp/default/_chat_profile_pic.jpg
new file mode 100644
index 0000000..15df4e5
--- /dev/null
+++ b/src/main/webapp/default/_chat_profile_pic.jpg
Binary files differ
diff --git a/src/main/webapp/default/_profile_phone.png b/src/main/webapp/default/_profile_phone.png
new file mode 100644
index 0000000..9ed6449
--- /dev/null
+++ b/src/main/webapp/default/_profile_phone.png
Binary files differ
diff --git a/src/main/webapp/default/_profile_profile_pic.jpg b/src/main/webapp/default/_profile_profile_pic.jpg
new file mode 100644
index 0000000..3b63f01
--- /dev/null
+++ b/src/main/webapp/default/_profile_profile_pic.jpg
Binary files differ
diff --git a/src/main/webapp/default/_thumb_deleted.jpg b/src/main/webapp/default/_thumb_deleted.jpg
new file mode 100644
index 0000000..18f0895
--- /dev/null
+++ b/src/main/webapp/default/_thumb_deleted.jpg
Binary files differ
diff --git a/src/main/webapp/default/deleted.jpg b/src/main/webapp/default/deleted.jpg
new file mode 100644
index 0000000..932c9bd
--- /dev/null
+++ b/src/main/webapp/default/deleted.jpg
Binary files differ
diff --git a/src/main/webapp/default/deleted.odp b/src/main/webapp/default/deleted.odp
new file mode 100644
index 0000000..892044c
--- /dev/null
+++ b/src/main/webapp/default/deleted.odp
Binary files differ
diff --git a/src/main/webapp/default/deleted.pdf b/src/main/webapp/default/deleted.pdf
new file mode 100644
index 0000000..85ef078
--- /dev/null
+++ b/src/main/webapp/default/deleted.pdf
Binary files differ
diff --git a/src/main/webapp/default/deleted.swf b/src/main/webapp/default/deleted.swf
new file mode 100644
index 0000000..061df24
--- /dev/null
+++ b/src/main/webapp/default/deleted.swf
Binary files differ
diff --git a/src/main/webapp/default/deleted.xcf b/src/main/webapp/default/deleted.xcf
new file mode 100644
index 0000000..67b2f85
--- /dev/null
+++ b/src/main/webapp/default/deleted.xcf
Binary files differ
diff --git a/src/main/webapp/default/profile_pic.jpg b/src/main/webapp/default/profile_pic.jpg
new file mode 100644
index 0000000..3b63f01
--- /dev/null
+++ b/src/main/webapp/default/profile_pic.jpg
Binary files differ
diff --git a/src/main/webapp/images/ajax-loader.gif b/src/main/webapp/images/ajax-loader.gif
new file mode 100644
index 0000000..69b652d
--- /dev/null
+++ b/src/main/webapp/images/ajax-loader.gif
Binary files differ
diff --git a/src/main/webapp/images/calendar.gif b/src/main/webapp/images/calendar.gif
new file mode 100644
index 0000000..d0abaa7
--- /dev/null
+++ b/src/main/webapp/images/calendar.gif
Binary files differ
diff --git a/src/main/webapp/images/delete.gif b/src/main/webapp/images/delete.gif
new file mode 100644
index 0000000..b6922ac
--- /dev/null
+++ b/src/main/webapp/images/delete.gif
Binary files differ
diff --git a/src/main/webapp/images/down.png b/src/main/webapp/images/down.png
new file mode 100644
index 0000000..f070ea6
--- /dev/null
+++ b/src/main/webapp/images/down.png
Binary files differ
diff --git a/src/main/webapp/images/edit.png b/src/main/webapp/images/edit.png
new file mode 100644
index 0000000..2e2a1c4
--- /dev/null
+++ b/src/main/webapp/images/edit.png
Binary files differ
diff --git a/src/main/webapp/images/refresh.gif b/src/main/webapp/images/refresh.gif
new file mode 100644
index 0000000..7aff1a9
--- /dev/null
+++ b/src/main/webapp/images/refresh.gif
Binary files differ
diff --git a/src/main/webapp/images/up.png b/src/main/webapp/images/up.png
new file mode 100644
index 0000000..5d10417
--- /dev/null
+++ b/src/main/webapp/images/up.png
Binary files differ
diff --git a/src/main/webapp/js/history.js b/src/main/webapp/js/history.js
new file mode 100644
index 0000000..f9bcd2b
--- /dev/null
+++ b/src/main/webapp/js/history.js
@@ -0,0 +1,703 @@
+/*

+ *

+ *  Licensed to the Apache Software Foundation (ASF) under one or more

+ *  contributor license agreements.  See the NOTICE file distributed with

+ *  this work for additional information regarding copyright ownership.

+ *  The ASF licenses this file to You under the Apache License, Version 2.0

+ *  (the "License"); you may not use this file except in compliance with

+ *  the License.  You may obtain a copy of the License at

+ *

+ *      http://www.apache.org/licenses/LICENSE-2.0

+ *

+ *  Unless required by applicable law or agreed to in writing, software

+ *  distributed under the License is distributed on an "AS IS" BASIS,

+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ *  See the License for the specific language governing permissions and

+ *  limitations under the License.

+ *

+ */

+BrowserHistoryUtils = {

+    addEvent: function(elm, evType, fn, useCapture) {

+        useCapture = useCapture || false;

+        if (elm.addEventListener) {

+            elm.addEventListener(evType, fn, useCapture);

+            return true;

+        } else if (elm.attachEvent) {

+            var r = elm.attachEvent('on' + evType, fn);

+            return r;

+        } else {

+            elm['on' + evType] = fn;

+        }

+    }

+}

+

+BrowserHistory = (function() {

+    // type of browser

+    var browser = {

+        ie: false,

+        ie8: false,

+        firefox: false,

+        safari: false,

+        opera: false,

+        version: -1

+    };

+

+    // Default app state URL to use when no fragment ID present

+    var defaultHash = '';

+

+    // Last-known app state URL

+    var currentHref = document.location.href;

+

+    // Initial URL (used only by IE)

+    var initialHref = document.location.href;

+

+    // Initial URL (used only by IE)

+    var initialHash = document.location.hash;

+

+    // History frame source URL prefix (used only by IE)

+    var historyFrameSourcePrefix = 'history/historyFrame.html?';

+

+    // History maintenance (used only by Safari)

+    var currentHistoryLength = -1;

+

+    // Flag to denote the existence of onhashchange

+    var browserHasHashChange = false;

+

+    var historyHash = [];

+

+    var initialState = createState(initialHref, initialHref + '#' + initialHash, initialHash);

+

+    var backStack = [];

+    var forwardStack = [];

+

+    var currentObjectId = null;

+

+    //UserAgent detection

+    var useragent = navigator.userAgent.toLowerCase();

+

+    if (useragent.indexOf("opera") != -1) {

+        browser.opera = true;

+    } else if (useragent.indexOf("msie") != -1) {

+        browser.ie = true;

+        browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4));

+        if (browser.version == 8) {

+            browser.ie = false;

+            browser.ie8 = true;

+        }

+    } else if (useragent.indexOf("safari") != -1) {

+        browser.safari = true;

+        browser.version = parseFloat(useragent.substring(useragent.indexOf('safari') + 7));

+    } else if (useragent.indexOf("gecko") != -1) {

+        browser.firefox = true;

+    }

+

+    if (browser.ie == true && browser.version == 7) {

+        window["_ie_firstload"] = false;

+    }

+

+    function hashChangeHandler() {

+        currentHref = document.location.href;

+        var flexAppUrl = getHash();

+        //ADR: to fix multiple

+        if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {

+            var pl = getPlayers();

+            for (var i = 0; i < pl.length; i++) {

+                pl[i].browserURLChange(flexAppUrl);

+            }

+        } else {

+            getPlayer().browserURLChange(flexAppUrl);

+        }

+    }

+

+    // Accessor functions for obtaining specific elements of the page.

+

+    function getHistoryFrame() {

+        return document.getElementById('ie_historyFrame');

+    }

+

+    function getFormElement() {

+        return document.getElementById('safari_formDiv');

+    }

+

+    function getRememberElement() {

+        return document.getElementById("safari_remember_field");

+    }

+

+    // Get the Flash player object for performing ExternalInterface callbacks.

+    // Updated for changes to SWFObject2.

+

+    function getPlayer(id) {

+        var i;

+

+        if (id && document.getElementById(id)) {

+            var r = document.getElementById(id);

+            if (typeof r.SetVariable != "undefined") {

+                return r;

+            } else {

+                var o = r.getElementsByTagName("object");

+                var e = r.getElementsByTagName("embed");

+                for (i = 0; i < o.length; i++) {

+                    if (typeof o[i].browserURLChange != "undefined")

+                        return o[i];

+                }

+                for (i = 0; i < e.length; i++) {

+                    if (typeof e[i].browserURLChange != "undefined")

+                        return e[i];

+                }

+            }

+        } else {

+            var o = document.getElementsByTagName("object");

+            var e = document.getElementsByTagName("embed");

+            for (i = 0; i < e.length; i++) {

+                if (typeof e[i].browserURLChange != "undefined") {

+                    return e[i];

+                }

+            }

+            for (i = 0; i < o.length; i++) {

+                if (typeof o[i].browserURLChange != "undefined") {

+                    return o[i];

+                }

+            }

+        }

+        return undefined;

+    }

+

+    function getPlayers() {

+        var i;

+        var players = [];

+        if (players.length == 0) {

+            var tmp = document.getElementsByTagName('object');

+            for (i = 0; i < tmp.length; i++) {

+                if (typeof tmp[i].browserURLChange != "undefined")

+                    players.push(tmp[i]);

+            }

+        }

+        if (players.length == 0 || players[0].object == null) {

+            var tmp = document.getElementsByTagName('embed');

+            for (i = 0; i < tmp.length; i++) {

+                if (typeof tmp[i].browserURLChange != "undefined")

+                    players.push(tmp[i]);

+            }

+        }

+        return players;

+    }

+

+    function getIframeHash() {

+        var doc = getHistoryFrame().contentWindow.document;

+        var hash = String(doc.location.search);

+        if (hash.length == 1 && hash.charAt(0) == "?") {

+            hash = "";

+        } else if (hash.length >= 2 && hash.charAt(0) == "?") {

+            hash = hash.substring(1);

+        }

+        return hash;

+    }

+

+    /* Get the current location hash excluding the '#' symbol. */

+

+    function getHash() {

+        // It would be nice if we could use document.location.hash here,

+        // but it's faulty sometimes.

+        var idx = document.location.href.indexOf('#');

+        return (idx >= 0) ? document.location.href.substr(idx + 1) : '';

+    }

+

+    /* Get the current location hash excluding the '#' symbol. */

+

+    function setHash(hash) {

+        // It would be nice if we could use document.location.hash here,

+        // but it's faulty sometimes.

+        if (hash == '') hash = '#'

+        document.location.hash = hash;

+    }

+

+    function createState(baseUrl, newUrl, flexAppUrl) {

+        return {

+            'baseUrl': baseUrl,

+            'newUrl': newUrl,

+            'flexAppUrl': flexAppUrl,

+            'title': null

+        };

+    }

+

+    /* Add a history entry to the browser.

+     *   baseUrl: the portion of the location prior to the '#'

+     *   newUrl: the entire new URL, including '#' and following fragment

+     *   flexAppUrl: the portion of the location following the '#' only

+     */

+

+    function addHistoryEntry(baseUrl, newUrl, flexAppUrl) {

+

+        //delete all the history entries

+        forwardStack = [];

+

+        if (browser.ie) {

+            //Check to see if we are being asked to do a navigate for the first

+            //history entry, and if so ignore, because it's coming from the creation

+            //of the history iframe

+            if (flexAppUrl == defaultHash && document.location.href == initialHref && window['_ie_firstload']) {

+                currentHref = initialHref;

+                return;

+            }

+            if ((!flexAppUrl || flexAppUrl == defaultHash) && window['_ie_firstload']) {

+                newUrl = baseUrl + '#' + defaultHash;

+                flexAppUrl = defaultHash;

+            } else {

+                // for IE, tell the history frame to go somewhere without a '#'

+                // in order to get this entry into the browser history.

+                getHistoryFrame().src = historyFrameSourcePrefix + flexAppUrl;

+            }

+            setHash(flexAppUrl);

+        } else {

+

+            //ADR

+            if (backStack.length == 0 && initialState.flexAppUrl == flexAppUrl) {

+                initialState = createState(baseUrl, newUrl, flexAppUrl);

+            } else if (backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) {

+                backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl);

+            }

+

+            if (browser.safari && !browserHasHashChange) {

+                // for Safari, submit a form whose action points to the desired URL

+                if (browser.version <= 419.3) {

+                    var file = window.location.pathname.toString();

+                    file = file.substring(file.lastIndexOf("/") + 1);

+                    getFormElement().innerHTML = '<form name="historyForm" action="' + file + '#' + flexAppUrl + '" method="GET"></form>';

+                    //get the current elements and add them to the form

+                    var qs = window.location.search.substring(1);

+                    var qs_arr = qs.split("&");

+                    for (var i = 0; i < qs_arr.length; i++) {

+                        var tmp = qs_arr[i].split("=");

+                        var elem = document.createElement("input");

+                        elem.type = "hidden";

+                        elem.name = tmp[0];

+                        elem.value = tmp[1];

+                        document.forms.historyForm.appendChild(elem);

+                    }

+                    document.forms.historyForm.submit();

+                } else {

+                    top.location.hash = flexAppUrl;

+                }

+                // We also have to maintain the history by hand for Safari

+                historyHash[history.length] = flexAppUrl;

+                _storeStates();

+            } else {

+                // Otherwise, just tell the browser to go there

+                setHash(flexAppUrl);

+            }

+        }

+        backStack.push(createState(baseUrl, newUrl, flexAppUrl));

+    }

+

+    function _storeStates() {

+        if (browser.safari) {

+            getRememberElement().value = historyHash.join(",");

+        }

+    }

+

+    function handleBackButton() {

+        //The "current" page is always at the top of the history stack.

+        var current = backStack.pop();

+        if (!current) {

+            return;

+        }

+        var last = backStack[backStack.length - 1];

+        if (!last && backStack.length == 0) {

+            last = initialState;

+        }

+        forwardStack.push(current);

+    }

+

+    function handleForwardButton() {

+        //summary: private method. Do not call this directly.

+

+        var last = forwardStack.pop();

+        if (!last) {

+            return;

+        }

+        backStack.push(last);

+    }

+

+    function handleArbitraryUrl() {

+        //delete all the history entries

+        forwardStack = [];

+    }

+

+    /* Called periodically to poll to see if we need to detect navigation that has occurred */

+

+    function checkForUrlChange() {

+

+        if (browser.ie) {

+            if (currentHref != document.location.href && currentHref + '#' != document.location.href) {

+                //This occurs when the user has navigated to a specific URL

+                //within the app, and didn't use browser back/forward

+                //IE seems to have a bug where it stops updating the URL it

+                //shows the end-user at this point, but programatically it

+                //appears to be correct.  Do a full app reload to get around

+                //this issue.

+                if (browser.version < 7) {

+                    currentHref = document.location.href;

+                    document.location.reload();

+                } else {

+                    if (getHash() != getIframeHash()) {

+                        // this.iframe.src = this.blankURL + hash;

+                        var sourceToSet = historyFrameSourcePrefix + getHash();

+                        getHistoryFrame().src = sourceToSet;

+                        currentHref = document.location.href;

+                    }

+                }

+            }

+        }

+

+        if (browser.safari && !browserHasHashChange) {

+            // For Safari, we have to check to see if history.length changed.

+            if (currentHistoryLength >= 0 && history.length != currentHistoryLength) {

+                //alert("did change: " + history.length + ", " + historyHash.length + "|" + historyHash[history.length] + "|>" + historyHash.join("|"));

+                var flexAppUrl = getHash();

+                if (browser.version < 528.16 /* Anything earlier than Safari 4.0 */ ) {

+                    // If it did change and we're running Safari 3.x or earlier, 

+                    // then we have to look the old state up in our hand-maintained 

+                    // array since document.location.hash won't have changed, 

+                    // then call back into BrowserManager.

+                    currentHistoryLength = history.length;

+                    flexAppUrl = historyHash[currentHistoryLength];

+                }

+

+                //ADR: to fix multiple

+                if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {

+                    var pl = getPlayers();

+                    for (var i = 0; i < pl.length; i++) {

+                        pl[i].browserURLChange(flexAppUrl);

+                    }

+                } else {

+                    getPlayer().browserURLChange(flexAppUrl);

+                }

+                _storeStates();

+            }

+        }

+        if (browser.firefox && !browserHasHashChange) {

+            if (currentHref != document.location.href) {

+                var bsl = backStack.length;

+

+                var urlActions = {

+                    back: false,

+                    forward: false,

+                    set: false

+                }

+

+                if ((window.location.hash == initialHash || window.location.href == initialHref) && (bsl == 1)) {

+                    urlActions.back = true;

+                    // FIXME: could this ever be a forward button?

+                    // we can't clear it because we still need to check for forwards. Ugg.

+                    // clearInterval(this.locationTimer);

+                    handleBackButton();

+                }

+

+                // first check to see if we could have gone forward. We always halt on

+                // a no-hash item.

+                if (forwardStack.length > 0) {

+                    if (forwardStack[forwardStack.length - 1].flexAppUrl == getHash()) {

+                        urlActions.forward = true;

+                        handleForwardButton();

+                    }

+                }

+

+                // ok, that didn't work, try someplace back in the history stack

+                if ((bsl >= 2) && (backStack[bsl - 2])) {

+                    if (backStack[bsl - 2].flexAppUrl == getHash()) {

+                        urlActions.back = true;

+                        handleBackButton();

+                    }

+                }

+

+                if (!urlActions.back && !urlActions.forward) {

+                    var foundInStacks = {

+                        back: -1,

+                        forward: -1

+                    }

+

+                    for (var i = 0; i < backStack.length; i++) {

+                        if (backStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {

+                            arbitraryUrl = true;

+                            foundInStacks.back = i;

+                        }

+                    }

+                    for (var i = 0; i < forwardStack.length; i++) {

+                        if (forwardStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {

+                            arbitraryUrl = true;

+                            foundInStacks.forward = i;

+                        }

+                    }

+                    handleArbitraryUrl();

+                }

+

+                // Firefox changed; do a callback into BrowserManager to tell it.

+                currentHref = document.location.href;

+                var flexAppUrl = getHash();

+                //ADR: to fix multiple

+                if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {

+                    var pl = getPlayers();

+                    for (var i = 0; i < pl.length; i++) {

+                        pl[i].browserURLChange(flexAppUrl);

+                    }

+                } else {

+                    getPlayer().browserURLChange(flexAppUrl);

+                }

+            }

+        }

+    }

+

+    var _initialize = function() {

+

+        browserHasHashChange = ("onhashchange" in document.body);

+

+        if (browser.ie) {

+            var scripts = document.getElementsByTagName('script');

+            for (var i = 0, s; s = scripts[i]; i++) {

+                if (s.src.indexOf("history.js") > -1) {

+                    var iframe_location = (new String(s.src)).replace("history.js", "historyFrame.html");

+                }

+            }

+            historyFrameSourcePrefix = iframe_location + "?";

+            var src = historyFrameSourcePrefix;

+

+            var iframe = document.createElement("iframe");

+            iframe.id = 'ie_historyFrame';

+            iframe.name = 'ie_historyFrame';

+            iframe.src = 'javascript:false;';

+

+            try {

+                document.body.appendChild(iframe);

+            } catch (e) {

+                setTimeout(function() {

+                    document.body.appendChild(iframe);

+                }, 0);

+            }

+        }

+

+        if (browser.safari && !browserHasHashChange) {

+            var rememberDiv = document.createElement("div");

+            rememberDiv.id = 'safari_rememberDiv';

+            document.body.appendChild(rememberDiv);

+            rememberDiv.innerHTML = '<input type="text" id="safari_remember_field" style="width: 500px;">';

+

+            var formDiv = document.createElement("div");

+            formDiv.id = 'safari_formDiv';

+            document.body.appendChild(formDiv);

+

+            var reloader_content = document.createElement('div');

+            reloader_content.id = 'safarireloader';

+            var scripts = document.getElementsByTagName('script');

+            for (var i = 0, s; s = scripts[i]; i++) {

+                if (s.src.indexOf("history.js") > -1) {

+                    html = (new String(s.src)).replace(".js", ".html");

+                }

+            }

+            reloader_content.innerHTML = '<iframe id="safarireloader-iframe" src="about:blank" frameborder="no" scrolling="no"></iframe>';

+            document.body.appendChild(reloader_content);

+            reloader_content.style.position = 'absolute';

+            reloader_content.style.left = reloader_content.style.top = '-9999px';

+            iframe = reloader_content.getElementsByTagName('iframe')[0];

+

+            if (document.getElementById("safari_remember_field").value != "") {

+                historyHash = document.getElementById("safari_remember_field").value.split(",");

+            }

+        }

+

+        if (browserHasHashChange)

+            document.body.onhashchange = hashChangeHandler;

+    }

+

+    return {

+        historyHash: historyHash,

+        backStack: function() {

+            return backStack;

+        },

+        forwardStack: function() {

+            return forwardStack

+        },

+        getPlayer: getPlayer,

+        initialize: function(src) {

+            _initialize(src);

+        },

+        setURL: function(url) {

+            document.location.href = url;

+        },

+        getURL: function() {

+            return document.location.href;

+        },

+        getTitle: function() {

+            return document.title;

+        },

+        setTitle: function(title) {

+            try {

+                backStack[backStack.length - 1].title = title;

+            } catch (e) {}

+            //if on safari, set the title to be the empty string. 

+            if (browser.safari) {

+                if (title == "") {

+                    try {

+                        var tmp = window.location.href.toString();

+                        title = tmp.substring((tmp.lastIndexOf("/") + 1), tmp.lastIndexOf("#"));

+                    } catch (e) {

+                        title = "";

+                    }

+                }

+            }

+            document.title = title;

+        },

+        setDefaultURL: function(def) {

+            defaultHash = def;

+            def = getHash();

+            //trailing ? is important else an extra frame gets added to the history

+            //when navigating back to the first page.  Alternatively could check

+            //in history frame navigation to compare # and ?.

+            if (browser.ie) {

+                window['_ie_firstload'] = true;

+                var sourceToSet = historyFrameSourcePrefix + def;

+                var func = function() {

+                    getHistoryFrame().src = sourceToSet;

+                    window.location.replace("#" + def);

+                    setInterval(checkForUrlChange, 50);

+                }

+                try {

+                    func();

+                } catch (e) {

+                    window.setTimeout(function() {

+                        func();

+                    }, 0);

+                }

+            }

+

+            if (browser.safari) {

+                currentHistoryLength = history.length;

+                if (historyHash.length == 0) {

+                    historyHash[currentHistoryLength] = def;

+                    var newloc = "#" + def;

+                    window.location.replace(newloc);

+                } else {

+                    //alert(historyHash[historyHash.length-1]);

+                }

+                setInterval(checkForUrlChange, 50);

+            }

+

+

+            if (browser.firefox || browser.opera) {

+                var reg = new RegExp("#" + def + "$");

+                if (window.location.toString().match(reg)) {} else {

+                    var newloc = "#" + def;

+                    window.location.replace(newloc);

+                }

+                setInterval(checkForUrlChange, 50);

+            }

+

+        },

+

+        /* Set the current browser URL; called from inside BrowserManager to propagate

+         * the application state out to the container.

+         */

+        setBrowserURL: function(flexAppUrl, objectId) {

+            if (browser.ie && typeof objectId != "undefined") {

+                currentObjectId = objectId;

+            }

+            //fromIframe = fromIframe || false;

+            //fromFlex = fromFlex || false;

+            //alert("setBrowserURL: " + flexAppUrl);

+            //flexAppUrl = (flexAppUrl == "") ? defaultHash : flexAppUrl ;

+

+            var pos = document.location.href.indexOf('#');

+            var baseUrl = pos != -1 ? document.location.href.substr(0, pos) : document.location.href;

+            var newUrl = baseUrl + '#' + flexAppUrl;

+

+            if (document.location.href != newUrl && document.location.href + '#' != newUrl) {

+                currentHref = newUrl;

+                addHistoryEntry(baseUrl, newUrl, flexAppUrl);

+                currentHistoryLength = history.length;

+            }

+        },

+

+        browserURLChange: function(flexAppUrl) {

+            var objectId = null;

+            if (browser.ie && currentObjectId != null) {

+                objectId = currentObjectId;

+            }

+

+            if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {

+                var pl = getPlayers();

+                for (var i = 0; i < pl.length; i++) {

+                    try {

+                        pl[i].browserURLChange(flexAppUrl);

+                    } catch (e) {}

+                }

+            } else {

+                try {

+                    getPlayer(objectId).browserURLChange(flexAppUrl);

+                } catch (e) {}

+            }

+

+            currentObjectId = null;

+        },

+        getUserAgent: function() {

+            return navigator.userAgent;

+        },

+        getPlatform: function() {

+            return navigator.platform;

+        }

+

+    }

+

+})();

+

+// Initialization

+

+// Automated unit testing and other diagnostics

+

+function setURL(url) {

+    document.location.href = url;

+}

+

+function backButton() {

+    history.back();

+}

+

+function forwardButton() {

+    history.forward();

+}

+

+function goForwardOrBackInHistory(step) {

+    history.go(step);

+}

+

+//BrowserHistoryUtils.addEvent(window, "load", function() { BrowserHistory.initialize(); });

+(function(i) {

+    var u = navigator.userAgent;

+    var e = /*@cc_on!@*/ false;

+    var st = setTimeout;

+    if (/webkit/i.test(u)) {

+        st(function() {

+            var dr = document.readyState;

+            if (dr == "loaded" || dr == "complete") {

+                i()

+            } else {

+                st(arguments.callee, 10);

+            }

+        }, 10);

+    } else if ((/mozilla/i.test(u) && !/(compati)/.test(u)) || (/opera/i.test(u))) {

+        document.addEventListener("DOMContentLoaded", i, false);

+    } else if (e) {

+        (function() {

+            var t = document.createElement('doc:rdy');

+            try {

+                t.doScroll('left');

+                i();

+                t = null;

+            } catch (e) {

+                st(arguments.callee, 0);

+            }

+        })();

+    } else {

+        window.onload = i;

+    }

+})(function() {

+    BrowserHistory.initialize();

+});
\ No newline at end of file
diff --git a/src/main/webapp/js/jquery.ui.menubar.js b/src/main/webapp/js/jquery.ui.menubar.js
new file mode 100644
index 0000000..f241e5e
--- /dev/null
+++ b/src/main/webapp/js/jquery.ui.menubar.js
@@ -0,0 +1,317 @@
+/*

+ * jQuery UI Menubar @VERSION

+ *

+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)

+ * Dual licensed under the MIT or GPL Version 2 licenses.

+ * http://jquery.org/license

+ *

+ * http://docs.jquery.com/UI/Menubar

+ *

+ * Depends:

+ *	jquery.ui.core.js

+ *	jquery.ui.widget.js

+ *	jquery.ui.position.js

+ *	jquery.ui.menu.js

+ */

+(function( $ ) {

+

+// TODO when mixing clicking menus and keyboard navigation, focus handling is broken

+// there has to be just one item that has tabindex

+$.widget( "ui.menubar", {

+	version: "@VERSION",

+	options: {

+		autoExpand: false,

+		buttons: false,

+		items: "li",

+		menuElement: "ul",

+		menuIcon: false,

+		position: {

+			my: "left top",

+			at: "left bottom"

+		}

+	},

+	_create: function() {

+		var that = this;

+		this.menuItems = this.element.children( this.options.items );

+		this.items = this.menuItems.children( "button, a" );

+

+		this.menuItems

+			.addClass( "ui-menubar-item" )

+			.attr( "role", "presentation" );

+		// let only the first item receive focus

+		this.items.slice(1).attr( "tabIndex", -1 );

+

+		this.element

+			.addClass( "ui-menubar ui-widget-header ui-helper-clearfix" )

+			.attr( "role", "menubar" );

+		this._focusable( this.items );

+		this._hoverable( this.items );

+		this.items.siblings( this.options.menuElement )

+			.menu({

+				position: {

+					within: this.options.position.within

+				},

+				select: function( event, ui ) {

+					ui.item.parents( "ul.ui-menu:last" ).hide();

+					that._close();

+					// TODO what is this targetting? there's probably a better way to access it

+					$(event.target).prev().focus();

+					that._trigger( "select", event, ui );

+				},

+				menus: that.options.menuElement

+			})

+			.hide()

+			.attr({

+				"aria-hidden": "true",

+				"aria-expanded": "false"

+			})

+			.bind( "keydown.menubar", function( event ) {

+				var menu = $( this );

+				if ( menu.is( ":hidden" ) ) {

+					return;

+				}

+				switch ( event.keyCode ) {

+				case $.ui.keyCode.LEFT:

+					that.previous( event );

+					event.preventDefault();

+					break;

+				case $.ui.keyCode.RIGHT:

+					that.next( event );

+					event.preventDefault();

+					break;

+				}

+			});

+		this.items.each(function() {

+			var input = $(this),

+				// TODO menu var is only used on two places, doesn't quite justify the .each

+				menu = input.next( that.options.menuElement );

+

+			// might be a non-menu button

+			if ( menu.length ) {

+				input.bind( "click.menubar focus.menubar mouseenter.menubar", function( event ) {

+					// ignore triggered focus event

+					if ( event.type === "focus" && !event.originalEvent ) {

+						return;

+					}

+					event.preventDefault();

+					// TODO can we simplify or extractthis check? especially the last two expressions

+					// there's a similar active[0] == menu[0] check in _open

+					if ( event.type === "click" && menu.is( ":visible" ) && that.active && that.active[0] === menu[0] ) {

+						that._close();

+						return;

+					}

+					if ( ( that.open && event.type === "mouseenter" ) || event.type === "click" || that.options.autoExpand ) {

+						if( that.options.autoExpand ) {

+							clearTimeout( that.closeTimer );

+						}

+

+						that._open( event, menu );

+					}

+				})

+				.bind( "keydown", function( event ) {

+					switch ( event.keyCode ) {

+					case $.ui.keyCode.SPACE:

+					case $.ui.keyCode.UP:

+					case $.ui.keyCode.DOWN:

+						that._open( event, $( this ).next() );

+						event.preventDefault();

+						break;

+					case $.ui.keyCode.LEFT:

+						that.previous( event );

+						event.preventDefault();

+						break;

+					case $.ui.keyCode.RIGHT:

+						that.next( event );

+						event.preventDefault();

+						break;

+					}

+				})

+				.attr( "aria-haspopup", "true" );

+

+				// TODO review if these options (menuIcon and buttons) are a good choice, maybe they can be merged

+				if ( that.options.menuIcon ) {

+					input.addClass( "ui-state-default" ).append( "<span class='ui-button-icon-secondary ui-icon ui-icon-triangle-1-s'></span>" );

+					input.removeClass( "ui-button-text-only" ).addClass( "ui-button-text-icon-secondary" );

+				}

+			}

+

+			input

+				.addClass( "ui-button ui-widget ui-button-text-only ui-menubar-link" )

+				.attr( "role", "menuitem" )

+				.wrapInner( "<span class='ui-button-text'></span>" );

+

+			if ( that.options.buttons ) {

+				input.removeClass( "ui-menubar-link" ).addClass( "ui-state-default" );

+			}

+		});

+		that._on( {

+			keydown: function( event ) {

+				if ( event.keyCode === $.ui.keyCode.ESCAPE && that.active && that.active.menu( "collapse", event ) !== true ) {

+					var active = that.active;

+					that.active.blur();

+					that._close( event );

+					active.prev().focus();

+				}

+			},

+			focusin: function( event ) {

+				clearTimeout( that.closeTimer );

+			},

+			focusout: function( event ) {

+				that.closeTimer = setTimeout( function() {

+					that._close( event );

+				}, 150);

+			},

+			"mouseleave .ui-menubar-item": function( event ) {

+				if ( that.options.autoExpand ) {

+					that.closeTimer = setTimeout( function() {

+						that._close( event );

+					}, 150);

+				}

+			},

+			"mouseenter .ui-menubar-item": function( event ) {

+				clearTimeout( that.closeTimer );

+			}

+		});

+

+		// Keep track of open submenus

+		this.openSubmenus = 0;

+	},

+

+	_destroy : function() {

+		this.menuItems

+			.removeClass( "ui-menubar-item" )

+			.removeAttr( "role" );

+

+		this.element

+			.removeClass( "ui-menubar ui-widget-header ui-helper-clearfix" )

+			.removeAttr( "role" )

+			.unbind( ".menubar" );

+

+		this.items

+			.unbind( ".menubar" )

+			.removeClass( "ui-button ui-widget ui-button-text-only ui-menubar-link ui-state-default" )

+			.removeAttr( "role" )

+			.removeAttr( "aria-haspopup" )

+			// TODO unwrap?

+			.children( "span.ui-button-text" ).each(function( i, e ) {

+				var item = $( this );

+				item.parent().html( item.html() );

+			})

+			.end()

+			.children( ".ui-icon" ).remove();

+

+		this.element.find( ":ui-menu" )

+			.menu( "destroy" )

+			.show()

+			.removeAttr( "aria-hidden" )

+			.removeAttr( "aria-expanded" )

+			.removeAttr( "tabindex" )

+			.unbind( ".menubar" );

+	},

+

+	_close: function() {

+		if ( !this.active || !this.active.length ) {

+			return;

+		}

+		this.active

+			.menu( "collapseAll" )

+			.hide()

+			.attr({

+				"aria-hidden": "true",

+				"aria-expanded": "false"

+			});

+		this.active

+			.prev()

+			.removeClass( "ui-state-active" )

+			.removeAttr( "tabIndex" );

+		this.active = null;

+		this.open = false;

+		this.openSubmenus = 0;

+	},

+

+	_open: function( event, menu ) {

+		// on a single-button menubar, ignore reopening the same menu

+		if ( this.active && this.active[0] === menu[0] ) {

+			return;

+		}

+		// TODO refactor, almost the same as _close above, but don't remove tabIndex

+		if ( this.active ) {

+			this.active

+				.menu( "collapseAll" )

+				.hide()

+				.attr({

+					"aria-hidden": "true",

+					"aria-expanded": "false"

+				});

+			this.active

+				.prev()

+				.removeClass( "ui-state-active" );

+		}

+		// set tabIndex -1 to have the button skipped on shift-tab when menu is open (it gets focus)

+		var button = menu.prev().addClass( "ui-state-active" ).attr( "tabIndex", -1 );

+		this.active = menu

+			.show()

+			.position( $.extend({

+				of: button

+			}, this.options.position ) )

+			.removeAttr( "aria-hidden" )

+			.attr( "aria-expanded", "true" )

+			.menu("focus", event, menu.children( ".ui-menu-item" ).first() )

+			// TODO need a comment here why both events are triggered

+			.focus()

+			.focusin();

+		this.open = true;

+	},

+

+	next: function( event ) {

+		if ( this.open && this.active.data( "menu" ).active.has( ".ui-menu" ).length ) {

+			// Track number of open submenus and prevent moving to next menubar item

+			this.openSubmenus++;

+			return;

+		}

+		this.openSubmenus = 0;

+		this._move( "next", "first", event );

+	},

+

+	previous: function( event ) {

+		if ( this.open && this.openSubmenus ) {

+			// Track number of open submenus and prevent moving to previous menubar item

+			this.openSubmenus--;

+			return;

+		}

+		this.openSubmenus = 0;

+		this._move( "prev", "last", event );

+	},

+

+	_move: function( direction, filter, event ) {

+		var next,

+			wrapItem;

+		if ( this.open ) {

+			next = this.active.closest( ".ui-menubar-item" )[ direction + "All" ]( this.options.items ).first().children( ".ui-menu" ).eq( 0 );

+			wrapItem = this.menuItems[ filter ]().children( ".ui-menu" ).eq( 0 );

+		} else {

+			if ( event ) {

+				next = $( event.target ).closest( ".ui-menubar-item" )[ direction + "All" ]( this.options.items ).children( ".ui-menubar-link" ).eq( 0 );

+				wrapItem = this.menuItems[ filter ]().children( ".ui-menubar-link" ).eq( 0 );

+			} else {

+				next = wrapItem = this.menuItems.children( "a" ).eq( 0 );

+			}

+		}

+

+		if ( next.length ) {

+			if ( this.open ) {

+				this._open( event, next );

+			} else {

+				next.removeAttr( "tabIndex")[0].focus();

+			}

+		} else {

+			if ( this.open ) {

+				this._open( event, wrapItem );

+			} else {

+				wrapItem.removeAttr( "tabIndex")[0].focus();

+			}

+		}

+	}

+});

+

+}( jQuery ));

diff --git a/src/main/webapp/js/openmeetings_functions.js b/src/main/webapp/js/openmeetings_functions.js
new file mode 100644
index 0000000..6330bf7
--- /dev/null
+++ b/src/main/webapp/js/openmeetings_functions.js
@@ -0,0 +1,64 @@
+/*

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+*/

+/*

+ * Functions to be included in the HTML wrapper,

+ * see the templates dir (*.vm) for the include statements

+ *  

+ */ 

+

+function getBrowserInfo() {

+	//alert(navigator.userAgent);

+	document.getElementById("lzapp").getBrowserInfoCallback(navigator.userAgent);

+}

+

+function getBrowserLang() {

+	//alert(navigator.userAgent);

+	document.getElementById("lzapp").getBrowserLangCallback(navigator.language);

+}

+

+function redirectToUrl(url) {

+	//alert(navigator.userAgent);

+	window.location = url;

+	

+	document.getElementById("lzapp").redirectToUrlCallback("ok");

+}

+

+function loadingComplete() {

+	document.getElementById("swfloading").style.display = 'none';

+	var lzApp = document.getElementById("lzappContainer");

+	lzApp.style.width = '100%';

+	lzApp.style.height = '100%';

+}

+

+function getTimeZoneOffsetMinutes() {

+	var rightNow = new Date(), std_time_offset = -rightNow.getTimezoneOffset();

+	for (var i = 0; i < 12; ++i) {

+		var d = new Date(rightNow.getFullYear(), i, 1, 0, 0, 0, 0), offset = -d.getTimezoneOffset();

+		if (offset < std_time_offset) {

+			std_time_offset = offset;

+			break;

+		}

+	}

+    return std_time_offset;

+}

+

+function getTimeZoneOffset() {

+    document.getElementById("lzapp").getTimeZoneOffsetCallback(getTimeZoneOffsetMinutes()/60);

+}

diff --git a/src/main/webapp/languages/countries.xml b/src/main/webapp/languages/countries.xml
new file mode 100644
index 0000000..5b3b393
--- /dev/null
+++ b/src/main/webapp/languages/countries.xml
@@ -0,0 +1,267 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!-- 
+	This list is complete and up-to-date as of 18 February 2007. 
+	from United Nations
+	United Nations Statistics Division- Standard Country and Area Codes Classifications (M49)
+	http://unstats.un.org/unsd/methods/m49/m49alpha.htm
+	
+	28.07.2007 add Taiwan, Republic of China country code 157, short ROC
+	 -->
+<countries xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="countries.xsd">
+	<country code="004" name="Afghanistan" short="AFG" />
+	<country code="248" short="ALA" name="Åland Islands" />
+	<country code="008" short="ALB" name="Albania" />
+	<country code="012" short="DZA" name="Algeria" />
+	<country code="016" short="ASM" name="American Samoa"/>
+	<country code="020" short="AND" name="Andorra"/>
+	<country code="024" short="AGO" name="Angola"/>
+	<country code="660" short="AIA" name="Anguilla"/>
+	<country code="028" short="ATG" name="Antigua and Barbuda"/>
+	<country code="032" short="ARG" name="Argentina"/>
+	<country code="051" short="ARM" name="Armenia"/>
+	<country code="533" short="ABW" name="Aruba"/>
+	<country code="036" short="AUS" name="Australia"/>
+	<country code="040" short="AUT" name="Austria"/>
+	<country code="031" short="AZE" name="Azerbaijan"/>
+	<country code="044" short="BHS" name="Bahamas"/>
+	<country code="048" short="BHR" name="Bahrain"/>
+	<country code="050" short="BGD" name="Bangladesh"/>
+	<country code="052" short="BRB" name="Barbados"/>
+	<country code="112" short="BLR" name="Belarus"/>
+	<country code="056" short="BEL" name="Belgium"/>
+	<country code="084" short="BLZ" name="Belize"/>
+	<country code="204" short="BEN" name="Benin"/>
+	<country code="060" short="BMU" name="Bermuda"/>
+	<country code="064" short="BTN" name="Bhutan"/>
+	<country code="068" short="BOL" name="Bolivia"/>
+	<country code="070" short="BIH" name="Bosnia and Herzegovina"/>
+	<country code="072" short="BWA" name="Botswana"/>
+	<country code="076" short="BRA" name="Brazil"/>
+	<country code="092" short="VGB" name="British Virgin Islands"/>
+	<country code="096" short="BRN" name="Brunei Darussalam"/>
+	<country code="100" short="BGR" name="Bulgaria"/>
+	<country code="854" short="BFA" name="Burkina Faso"/>
+	<country code="108" short="BDI" name="Burundi"/>
+	<country code="116" short="KHM" name="Cambodia"/>
+	<country code="120" short="CMR" name="Cameroon"/>
+	<country code="124" short="CAN" name="Canada"/>
+	<country code="132" short="CPV" name="Cape Verde"/>
+	<country code="136" short="CYM" name="Cayman Islands"/>
+	<country code="140" short="CAF" name="Central African Republic"/>
+	<country code="148" short="TCD" name="Chad"/>
+	<country code="830" short="" name="Channel Islands"/>
+	<country code="152" short="CHL" name="Chile"/>
+	<country code="156" short="CHN" name="China"/>
+	<country code="344" short="HKG" name="Hong Kong Special Administrative Region of China"/>
+	<country code="446" short="MAC" name="Macao Special Administrative Region of China"/>
+	<country code="170" short="COL" name="Colombia"/>
+	<country code="174" short="COM" name="Comoros"/>
+	<country code="178" short="COG" name="Congo"/>
+	<country code="184" short="COK" name="Cook Islands"/>
+	<country code="188" short="CRI" name="Costa Rica"/>
+	<country code="384" short="CIV" name="Côte d'Ivoire"/>
+	<country code="191" short="HRV" name="Croatia"/>
+	<country code="192" short="CUB" name="Cuba"/>
+	<country code="196" short="CYP" name="Cyprus"/>
+	<country code="203" short="CZE" name="Czech Republic"/>
+	<country code="408" short="PRK" name="Democratic People's Republic of Korea"/>
+	<country code="180" short="COD" name="Democratic Republic of the Congo"/>
+	<country code="208" short="DNK" name="Denmark"/>
+	<country code="262" short="DJI" name="Djibouti"/>
+	<country code="212" short="DMA" name="Dominica"/>
+	<country code="214" short="DOM" name="Dominican Republic"/>
+	<country code="218" short="ECU" name="Ecuador"/>
+	<country code="818" short="EGY" name="Egypt"/>
+	<country code="222" short="SLV" name="El Salvador"/>
+	<country code="226" short="GNQ" name="Equatorial Guinea"/>
+	<country code="232" short="ERI" name="Eritrea"/>
+	<country code="233" short="EST" name="Estonia"/>
+	<country code="231" short="ETH" name="Ethiopia"/>
+	<country code="234" short="FRO" name="Faeroe Islands"/>
+	<country code="238" short="FLK" name="Falkland Islands (Malvinas)"/>
+	<country code="242" short="FJI" name="Fiji"/>
+	<country code="246" short="FIN" name="Finland"/>
+	<country code="250" short="FRA" name="France"/>
+	<country code="254" short="GUF" name="French Guiana"/>
+	<country code="258" short="PYF" name="French Polynesia"/>
+	<country code="266" short="GAB" name="Gabon"/>
+	<country code="270" short="GMB" name="Gambia"/>
+	<country code="268" short="GEO" name="Georgia"/>
+	<country code="276" short="DEU" name="Germany"/>
+	<country code="288" short="GHA" name="Ghana"/>
+	<country code="292" short="GIB" name="Gibraltar"/>
+	<country code="300" short="GRC" name="Greece"/>
+	<country code="304" short="GRL" name="Greenland"/>
+	<country code="308" short="GRD" name="Grenada"/>
+	<country code="312" short="GLP" name="Guadeloupe"/>
+	<country code="316" short="GUM" name="Guam"/>
+	<country code="320" short="GTM" name="Guatemala"/>
+	<country code="831" short="CGY" name="Guernsey"/>
+	<country code="324" short="GIN" name="Guinea"/>
+	<country code="624" short="GNB" name="Guinea-Bissau"/>
+	<country code="328" short="GUY" name="Guyana"/>
+	<country code="332" short="HTI" name="Haiti"/>
+	<country code="336" short="VAT" name="Holy See"/>
+	<country code="340" short="HND" name="Honduras"/>
+	<country code="348" short="HUN" name="Hungary"/>
+	<country code="352" short="ISL" name="Iceland"/>
+	<country code="356" short="IND" name="India"/>
+	<country code="360" short="IDN" name="Indonesia"/>
+	<country code="364" short="IRN" name="Iran, Islamic Republic of"/>
+	<country code="368" short="IRQ" name="Iraq"/>
+	<country code="372" short="IRL" name="Ireland"/>
+	<country code="833" short="IMN" name="Isle of Man"/>
+	<country code="376" short="ISR" name="Israel"/>
+	<country code="380" short="ITA" name="Italy"/>
+	<country code="388" short="JAM" name="Jamaica"/>
+	<country code="392" short="JPN" name="Japan"/>
+	<country code="832" short="JEY" name="Jersey"/>
+	<country code="400" short="JOR" name="Jordan"/>
+	<country code="398" short="KAZ" name="Kazakhstan"/>
+	<country code="404" short="KEN" name="Kenya"/>
+	<country code="296" short="KIR" name="Kiribati"/>
+	<country code="414" short="KWT" name="Kuwait"/>
+	<country code="417" short="KGZ" name="Kyrgyzstan"/>
+	<country code="418" short="LAO" name="Lao People's Democratic Republic"/>
+	<country code="428" short="LVA" name="Latvia"/>
+	<country code="422" short="LBN" name="Lebanon"/>
+	<country code="426" short="LSO" name="Lesotho"/>
+	<country code="430" short="LBR" name="Liberia"/>
+	<country code="434" short="LBY" name="Libyan Arab Jamahiriya"/>
+	<country code="438" short="LIE" name="Liechtenstein"/>
+	<country code="440" short="LTU" name="Lithuania"/>
+	<country code="442" short="LUX" name="Luxembourg"/>
+	<country code="450" short="MDG" name="Madagascar"/>
+	<country code="454" short="MWI" name="Malawi"/>
+	<country code="458" short="MYS" name="Malaysia"/>
+	<country code="462" short="MDV" name="Maldives"/>
+	<country code="466" short="MLI" name="Mali"/>
+	<country code="470" short="MLT" name="Malta"/>
+	<country code="584" short="MHL" name="Marshall Islands"/>
+	<country code="474" short="MTQ" name="Martinique"/>
+	<country code="478" short="MRT" name="Mauritania"/>
+	<country code="480" short="MUS" name="Mauritius"/>
+	<country code="175" short="MYT" name="Mayotte"/>
+	<country code="484" short="MEX" name="Mexico"/>
+	<country code="583" short="FSM" name="Micronesia, Federated States of"/>
+	<country code="492" short="MCO" name="Monaco"/>
+	<country code="496" short="MNG" name="Mongolia"/>
+	<country code="499" short="MNE" name="Montenegro"/>
+	<country code="500" short="MSR" name="Montserrat"/>
+	<country code="504" short="MAR" name="Morocco"/>
+	<country code="508" short="MOZ" name="Mozambique"/>
+	<country code="104" short="MMR" name="Myanmar"/>
+	<country code="516" short="NAM" name="Namibia"/>
+	<country code="520" short="NRU" name="Nauru"/>
+	<country code="524" short="NPL" name="Nepal"/>
+	<country code="528" short="NLD" name="Netherlands"/>
+	<country code="530" short="ANT" name="Netherlands Antilles"/>
+	<country code="540" short="NCL" name="New Caledonia"/>
+	<country code="554" short="NZL" name="New Zealand"/>
+	<country code="558" short="NIC" name="Nicaragua"/>
+	<country code="562" short="NER" name="Niger"/>
+	<country code="566" short="NGA" name="Nigeria"/>
+	<country code="570" short="NIU" name="Niue"/>
+	<country code="574" short="NFK" name="Norfolk Island"/>
+	<country code="580" short="MNP" name="Northern Mariana Islands"/>
+	<country code="578" short="NOR" name="Norway"/>
+	<country code="275" short="PSE" name="Occupied Palestinian Territory"/>
+	<country code="512" short="OMN" name="Oman"/>
+	<country code="586" short="PAK" name="Pakistan"/>
+	<country code="585" short="PLW" name="Palau"/>
+	<country code="591" short="PAN" name="Panama"/>
+	<country code="598" short="PNG" name="Papua New Guinea"/>
+	<country code="600" short="PRY" name="Paraguay"/>
+	<country code="604" short="PER" name="Peru"/>
+	<country code="608" short="PHL" name="Philippines"/>
+	<country code="612" short="PCN" name="Pitcairn"/>
+	<country code="616" short="POL" name="Poland"/>
+	<country code="620" short="PRT" name="Portugal"/>
+	<country code="630" short="PRI" name="Puerto Rico"/>
+	<country code="634" short="QAT" name="Qatar"/>
+	<country code="410" short="KOR" name="Republic of Korea"/>
+	<country code="498" short="MDA" name="Republic of Moldova"/>
+	<country code="638" short="REU" name="Réunion"/>
+	<country code="642" short="ROU" name="Romania"/>
+	<country code="643" short="RUS" name="Russian Federation"/>
+	<country code="646" short="RWA" name="Rwanda"/>
+	<country code="654" short="SHN" name="Saint Helena"/>
+	<country code="659" short="KNA" name="Saint Kitts and Nevis"/>
+	<country code="662" short="LCA" name="Saint Lucia"/>
+	<country code="666" short="SPM" name="Saint Pierre and Miquelon"/>
+	<country code="670" short="VCT" name="Saint Vincent and the Grenadines"/>
+	<country code="882" short="WSM" name="Samoa"/>
+	<country code="674" short="SMR" name="San Marino"/>
+	<country code="678" short="STP" name="Sao Tome and Principe"/>
+	<country code="682" short="SAU" name="Saudi Arabia"/>
+	<country code="686" short="SEN" name="Senegal"/>
+	<country code="688" short="SRB" name="Serbia"/>
+	<country code="690" short="SYC" name="Seychelles"/>
+	<country code="694" short="SLE" name="Sierra Leone"/>
+	<country code="702" short="SGP" name="Singapore"/>
+	<country code="703" short="SVK" name="Slovakia"/>
+	<country code="705" short="SVN" name="Slovenia"/>
+	<country code="090" short="SLB" name="Solomon Islands"/>
+	<country code="706" short="SOM" name="Somalia"/>
+	<country code="710" short="ZAF" name="South Africa"/>
+	<country code="724" short="ESP" name="Spain"/>
+	<country code="144" short="LKA" name="Sri Lanka"/>
+	<country code="736" short="SDN" name="Sudan"/>
+	<country code="740" short="SUR" name="Suriname"/>
+	<country code="744" short="SJM" name="Svalbard and Jan Mayen Islands"/>
+	<country code="748" short="SWZ" name="Swaziland"/>
+	<country code="752" short="SWE" name="Sweden"/>
+	<country code="756" short="CHE" name="Switzerland"/>
+	<country code="760" short="SYR" name="Syrian Arab Republic"/>
+	<country code="157" short="ROC" name="Taiwan, Republic of China"/>
+	<country code="762" short="TJK" name="Tajikistan"/>
+	<country code="764" short="THA" name="Thailand"/>
+	<country code="807" short="MKD" name="The former Yugoslav Republic of Macedonia"/>
+	<country code="626" short="TLS" name="Timor-Leste"/>
+	<country code="768" short="TGO" name="Togo"/>
+	<country code="772" short="TKL" name="Tokelau"/>
+	<country code="776" short="TON" name="Tonga"/>
+	<country code="780" short="TTO" name="Trinidad and Tobago"/>
+	<country code="788" short="TUN" name="Tunisia"/>
+	<country code="792" short="TUR" name="Turkey"/>
+	<country code="795" short="TKM" name="Turkmenistan"/>
+	<country code="796" short="TCA" name="Turks and Caicos Islands"/>
+	<country code="798" short="TUV" name="Tuvalu"/>
+	<country code="800" short="UGA" name="Uganda"/>
+	<country code="804" short="UKR" name="Ukraine"/>
+	<country code="784" short="ARE" name="United Arab Emirates"/>
+	<country code="826" short="GBR" name="United Kingdom of Great Britain and Northern Ireland"/>
+	<country code="834" short="TZA" name="United Republic of Tanzania"/>
+	<country code="840" short="USA" name="United States of America"/>
+	<country code="850" short="VIR" name="United States Virgin Islands"/>
+	<country code="858" short="URY" name="Uruguay"/>
+	<country code="860" short="UZB" name="Uzbekistan"/>
+	<country code="548" short="VUT" name="Vanuatu"/>
+	<country code="862" short="VEN" name="Venezuela (Bolivarian Republic of)"/>
+	<country code="704" short="VNM" name="Viet Nam"/>
+	<country code="876" short="WLF" name="Wallis and Futuna Islands"/>
+	<country code="732" short="ESH" name="Western Sahara"/>
+	<country code="887" short="YEM" name="Yemen"/>
+	<country code="894" short="ZMB" name="Zambia"/>
+	<country code="716" short="ZWE" name="Zimbabwe"/>
+</countries>
diff --git a/src/main/webapp/languages/countries.xsd b/src/main/webapp/languages/countries.xsd
new file mode 100644
index 0000000..98b3017
--- /dev/null
+++ b/src/main/webapp/languages/countries.xsd
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

+  <xs:element name="countries">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="country"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="country">

+    <xs:complexType>

+      <xs:attribute name="code" use="required" type="xs:integer"/>

+      <xs:attribute name="name" use="required"/>

+      <xs:attribute name="short" use="required"/>

+    </xs:complexType>

+  </xs:element>

+</xs:schema>

diff --git a/src/main/webapp/languages/errorvalues.xml b/src/main/webapp/languages/errorvalues.xml
new file mode 100644
index 0000000..2db93d2
--- /dev/null
+++ b/src/main/webapp/languages/errorvalues.xml
@@ -0,0 +1,471 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<ROOT xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="errorvalues.xsd">
+    <row>
+      <field name="errorvalues_id">1</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">334</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">2</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">319</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">3</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">320</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">4</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">321</field>
+      <field name="errortype_id">2</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">5</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">324</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">6</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">330</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">7</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">331</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">8</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">332</field>
+      <field name="errortype_id">2</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">9</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">318</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">10</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">335</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">11</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">336</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">12</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">337</field>
+      <field name="errortype_id">2</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">13</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">103</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">14</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">338</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">15</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">105</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">16</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">107</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">17</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">106</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">18</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">236</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">19</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">339</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">20</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">340</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">21</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">341</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">22</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">342</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">23</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">343</field>
+      <field name="errortype_id">2</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">24</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">345</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">25</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">346</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">26</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">347</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">27</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">358</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">28</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">357</field>
+      <field name="errortype_id">2</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">29</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">358</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">30</field>
+      <field name="starttime">2007-12-06 19:01:07</field>
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">403</field>
+      <field name="errortype_id">2</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">31</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">533</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">32</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">534</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">33</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">535</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">34</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">538</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">35</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">276</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">36</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">664</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">37</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">665</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">38</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">663</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">39</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">666</field>
+      <field name="errortype_id">1</field>
+    </row>	
+    <row>
+      <field name="errorvalues_id">40</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">674</field>
+      <field name="errortype_id">2</field>
+    </row>  
+    <row>
+      <field name="errorvalues_id">41</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">673</field>
+      <field name="errortype_id">1</field>
+    </row>  	
+    <row>
+      <field name="errorvalues_id">42</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">787</field>
+      <field name="errortype_id">1</field>
+    </row>  
+    <row>
+      <field name="errorvalues_id">43</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">920</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">44</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1000</field>
+      <field name="errortype_id">1</field>
+    </row> 	
+    <row>
+      <field name="errorvalues_id">45</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1195</field>
+      <field name="errortype_id">1</field>
+    </row> 
+    <row>
+      <field name="errorvalues_id">46</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1226</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">47</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1227</field>
+      <field name="errortype_id">1</field>
+    </row>		
+    <row>
+      <field name="errorvalues_id">48</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1228</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">49</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1231</field>
+      <field name="errortype_id">1</field>
+    </row>	
+    <row>
+      <field name="errorvalues_id">50</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1271</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">51</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1309</field>
+      <field name="errortype_id">1</field>
+    </row>   	
+    <row>
+      <field name="errorvalues_id">52</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1310</field>
+      <field name="errortype_id">1</field>
+    </row> 	
+    <row>
+      <field name="errorvalues_id">53</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1416</field>
+      <field name="errortype_id">1</field>
+    </row> 	
+    <row>
+      <field name="errorvalues_id">54</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1431</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">55</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1540</field>
+      <field name="errortype_id">1</field>
+    </row>
+    <row>
+      <field name="errorvalues_id">56</field>
+      <field name="starttime" />
+      <field name="updatetime" />
+      <field name="deleted">false</field>
+      <field name="fieldvalues_id">1544</field>
+      <field name="errortype_id">1</field>
+    </row>
+</ROOT>
diff --git a/src/main/webapp/languages/errorvalues.xsd b/src/main/webapp/languages/errorvalues.xsd
new file mode 100644
index 0000000..66f06d1
--- /dev/null
+++ b/src/main/webapp/languages/errorvalues.xsd
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

+  <xs:element name="ROOT">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="row"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="row">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="field"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="field">

+    <xs:complexType mixed="true">

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+</xs:schema>

diff --git a/src/main/webapp/languages/languages.xml b/src/main/webapp/languages/languages.xml
new file mode 100644
index 0000000..88f7380
--- /dev/null
+++ b/src/main/webapp/languages/languages.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="languages.xsd">
+	<lang id="1" code="en">english</lang>
+	<lang id="2" code="de">deutsch</lang>
+	<lang id="3" code="de-StudIP">deutsch (studIP)</lang>
+	<lang id="4" code="fr">french</lang>
+	<lang id="5" code="it">italian</lang>
+	<lang id="6" code="pt">portugues</lang>
+	<lang id="7" code="pt-br">portugues brazil</lang>
+	<lang id="8" code="es">spanish</lang>
+	<lang id="9" code="ru">russian</lang>
+	<lang id="10" code="sv">swedish</lang>
+	<lang id="11" code="zh-CN">chinese simplified</lang>
+	<lang id="12" code="zh-TW">chinese traditional</lang>
+	<lang id="13" code="ko">korean</lang>
+	<lang id="14" code="ar">arabic</lang>
+	<lang id="15" code="ja">japanese</lang>
+	<lang id="16" code="id">indonesian</lang>
+	<lang id="17" code="hu">hungarian</lang>
+	<lang id="18" code="tr">turkish</lang>
+	<lang id="19" code="uk">ukrainian</lang>
+	<lang id="20" code="th">thai</lang>
+	<lang id="21" code="fa">persian</lang>
+	<lang id="22" code="cs">czech</lang>
+	<lang id="23" code="gl">galician</lang>
+	<lang id="24" code="fi">finnish</lang>
+	<lang id="25" code="pl">polish</lang>
+	<lang id="26" code="el">greek</lang>
+	<lang id="27" code="nl">dutch</lang>
+	<lang id="28" code="he">hebrew</lang>
+	<lang id="29" code="ca">catalan</lang>
+	<lang id="30" code="bg">bulgarian</lang>
+	<lang id="31" code="da">danish</lang>
+	<lang id="32" code="sk">slovak</lang>
+</language>
diff --git a/src/main/webapp/languages/timezones.xml b/src/main/webapp/languages/timezones.xml
new file mode 100644
index 0000000..76302fc
--- /dev/null
+++ b/src/main/webapp/languages/timezones.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<timezones xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="timezones.xsd">
+	<!-- 
+		This file is loaded during installation to the database table "om_timezones" of OpenMeetings. 
+		Changes at runtime to this file have no effect to OpenMeetings.
+	
+		Attributes:
+	
+		1) orderId
+		The orderId is just an indicator for the position in the drow down box inside 
+		OpenMeetings UI, there can be duplicates
+		However the order in the XML should be correct cause the Web-installer/CLI-Installer
+		will display the timezones exactly in the order of the XML.
+		
+		2) name
+		A common name in short
+		
+		3) label
+		Long name, displayed in UI
+		
+		4) iCal
+		this is the actual name, OpenMeetings will use to match again Java's timezones 
+		(http://docs.oracle.com/javase/6/docs/api/java/util/TimeZone.html)
+		
+		to get all available id that are available in your Java JRE see:
+		http://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/test/timezone/TestGetIds.java
+		
+		For updating the JRE runtime with different tz-file, see:		
+		http://www.oracle.com/technetwork/java/javase/timezones-137583.html
+	 -->
+    <timezone orderId="0" name="Etc/GMT+13" label="Samoa" iCal="Pacific/Apia" />
+	<timezone orderId="1" name="Etc/GMT+12 (New Zealand)" label="New Zealand" iCal="Pacific/Auckland" />
+    <timezone orderId="1" name="Etc/GMT+12" label="Kiribati (Gilbert Islands), Fiji, Russia (Kamchatka Krai)" iCal="Pacific/Fiji" />
+    <timezone orderId="2" name="Etc/GMT+11" label="Vladivostok, Kamchatka, Solomon Islands, New Caledonia" iCal="Asia/Vladivostok" />
+    <timezone orderId="3" name="Etc/GMT+10 (Australia/NSW)" label="Australia (NSW,Sydney,Tasmania), Yakutsk" iCal="Australia/Sydney" />
+    <timezone orderId="3" name="Etc/GMT+10 (Australia/Queensland)" label="Russia (Zabaykalsky Krai), Papua New Guinea, Australia (Queensland)" iCal="Australia/Queensland" />
+    <timezone orderId="3" name="Etc/GMT+10" label="Lord Howe Island - Australia GMT+10:30" iCal="Australia/Lord_Howe" />
+    <timezone orderId="4" name="Etc/GMT+9 (Japan)" label="Japan/Korea Standard Time, Irkutsk, East Timor" iCal="Asia/Tokyo" />
+    <timezone orderId="4" name="Etc/GMT+9 (Australia-North)" label="Australia (Nothern Territory,Darwin) GMT+9:30" iCal="Australia/Darwin" />
+    <timezone orderId="4" name="Etc/GMT+9 (Australia-South)" label="Australia (Southern Territory,Adelaide) GMT+9:30" iCal="Australia/Adelaide" />
+    <timezone orderId="5" name="Etc/GMT+8" label="China Standard Time, Krasnoyarsk, Philippines, Singapore" iCal="Asia/Singapore" />
+    <timezone orderId="6" name="Etc/GMT+7" label="Novosibirsk, Indochina Time, Thailand, Vietnam, Jakarta" iCal="Asia/Jakarta" />
+    <timezone orderId="7" name="Etc/GMT+6" label="Yekaterinburg, Almaty, Bangladesh" iCal="Asia/Yekaterinburg" />
+    <timezone orderId="8" name="IST" label="Indian Standard Time GMT+5.30" iCal="Asia/Kolkata" />
+    <timezone orderId="9" name="Etc/GMT+5" label="Uzbekistan, Pakistan, Maldives" iCal="Asia/Karachi" />
+    <timezone orderId="10" name="Asia/Kabul" label="Kabul GMT+4.30 " iCal="Asia/Kabul" />
+    <timezone orderId="11" name="Etc/GMT+4" label="Moscow, Saint Petersburg, Georgia, Armenia, Azerbaijan, United Arab Emirates" iCal="Europe/Moscow" />
+    <timezone orderId="12" name="Asia/Tehran" label="Tehran GMT+3.30" iCal="Asia/Tehran" />
+    <timezone orderId="13" name="Etc/GMT+3" label="Kaliningrad, Minsk, Iraq, Saudi Arabia" iCal="Europe/Kaliningrad" />
+    <timezone orderId="14" name="Etc/GMT+2" label="Finland, Lithuania, Belarus, Ukraine, Romania, Bulgaria" iCal="Europe/Helsinki" />
+    <timezone orderId="14" name="Etc/GMT+2" label="Libya, Egypt, South Africa, Zimbabwe" iCal="Africa/Cairo" />
+    <timezone orderId="15" name="Etc/GMT+1" label="France, Germany, Spain, Italy" iCal="Europe/Berlin" />
+    <timezone orderId="15" name="Etc/GMT+1 (North Africa)" label="Angola, Cameroon, Nigeria, Tunisia" iCal="Africa/Tunis" />
+    <timezone orderId="16" name="Etc/GMT" label="Iceland, United Kingdom, Ireland" iCal="Europe/London" />
+    <timezone orderId="16" name="Etc/GMT (North Africa)" label="Côte d'Ivoire, Faroe Islands, Ghana, Iceland, Senegal" iCal="Africa/Dakar" />
+    <timezone orderId="17" name="Etc/GMT-1" label="Azores, Cape Verde" iCal="Atlantic/Cape_Verde" />
+    <timezone orderId="18" name="Etc/GMT-2" label="Fernando de Noronha" iCal="America/Noronha" />
+    <timezone orderId="19" name="Etc/GMT-3 (Brazil)" label="Brazil (Brasília, Rio de Janeiro, São Paulo), most of Greenland, Uruguay" iCal="America/Sao_Paulo" />
+    <timezone orderId="19" name="Etc/GMT-3" label="Argentina, Paraguay" iCal="America/Buenos_Aires" />
+    <timezone orderId="19" name="Etc/GMT-3:30" label="Canada GMT+3:30" iCal="CNT" />
+    <timezone orderId="20" name="Etc/GMT-4" label="Nova Scotia, Dominican Republic, Puerto Rico, Santiago" iCal="America/Santiago" />
+    <timezone orderId="20" name="Etc/GMT-4:30" label="Venezuela GMT+4:30" iCal="America/Caracas" />
+    <timezone orderId="21" name="Etc/GMT-5 (New York)" label="Ottawa, Toronto, Montreal, Boston, New York" iCal="America/New_York" />
+    <timezone orderId="21" name="Etc/GMT-5" label="Colombia, Cuba, Ecuador, Haiti, Jamaica, Panama, Peru" iCal="America/Jamaica" />
+    <timezone orderId="22" name="Etc/GMT-5 (Panama)" label="Panama Port-au-Prince" iCal="America/Panama" />
+    <timezone orderId="23" name="Etc/GMT-6 (Chicago)" label="Chicago, Dallas" iCal="America/Chicago" />
+    <timezone orderId="24" name="Etc/GMT-6" label="Costa Rica , El Salvador, Guatemala, Honduras" iCal="America/El_Salvador" />
+    <timezone orderId="24" name="Etc/GMT-6 (Illinois)" label="Canada (Manitoba), United States (Illinois, most of Texas)" iCal="America/Chicago" />
+    <timezone orderId="25" name="Etc/GMT-7 (Phoenix)" label="Alberta, Colorado, Phoenix" iCal="America/Phoenix" />
+    <timezone orderId="26" name="Etc/GMT-7 (Colorado)" label="Canada (Alberta), Mexico (Chihuahua), USA (Colorado)" iCal="America/Denver" />
+    <timezone orderId="26" name="Etc/GMT-7" label="Canada (northeastern British Columbia), Mexico (Sonora), USA (Arizona)" iCal="America/Phoenix" />
+    <timezone orderId="27" name="Etc/GMT-8" label="Vancouver, Portland, Las Vegas, California" iCal="America/Los_Angeles" />
+    <timezone orderId="28" name="Etc/GMT-9" label="Anchorage, Fairbanks, Juneau" iCal="America/Juneau" />
+    <timezone orderId="28" name="Etc/GMT-9 (Alaska)" label="United States (most of Alaska)" iCal="US/Alaska" />
+    <timezone orderId="29" name="Etc/GMT-10" label="Hawaii" iCal="Pacific/Honolulu" />
+    <timezone orderId="30" name="Etc/GMT-11" label="Samoa" iCal="Pacific/Apia" />    
+</timezones>
diff --git a/src/main/webapp/languages/timezones.xsd b/src/main/webapp/languages/timezones.xsd
new file mode 100644
index 0000000..d693ab3
--- /dev/null
+++ b/src/main/webapp/languages/timezones.xsd
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

+  <xs:element name="timezones">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="timezone"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="timezone">

+    <xs:complexType>

+      <xs:attribute name="iCal" use="required"/>

+      <xs:attribute name="label" use="required"/>

+      <xs:attribute name="name" use="required"/>

+      <xs:attribute name="orderId" use="required" type="xs:integer"/>

+    </xs:complexType>

+  </xs:element>

+</xs:schema>

diff --git a/src/main/webapp/public/cliparts/ambulance.png b/src/main/webapp/public/cliparts/ambulance.png
new file mode 100644
index 0000000..c61cc33
--- /dev/null
+++ b/src/main/webapp/public/cliparts/ambulance.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/bow.png b/src/main/webapp/public/cliparts/bow.png
new file mode 100644
index 0000000..43cc3f5
--- /dev/null
+++ b/src/main/webapp/public/cliparts/bow.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/community.png b/src/main/webapp/public/cliparts/community.png
new file mode 100644
index 0000000..d56e169
--- /dev/null
+++ b/src/main/webapp/public/cliparts/community.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/help.png b/src/main/webapp/public/cliparts/help.png
new file mode 100644
index 0000000..6b7db6a
--- /dev/null
+++ b/src/main/webapp/public/cliparts/help.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/home.png b/src/main/webapp/public/cliparts/home.png
new file mode 100644
index 0000000..149583c
--- /dev/null
+++ b/src/main/webapp/public/cliparts/home.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/idea.png b/src/main/webapp/public/cliparts/idea.png
new file mode 100644
index 0000000..cc2a3c7
--- /dev/null
+++ b/src/main/webapp/public/cliparts/idea.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/swim.png b/src/main/webapp/public/cliparts/swim.png
new file mode 100644
index 0000000..fbb6f25
--- /dev/null
+++ b/src/main/webapp/public/cliparts/swim.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/thumb/ambulance.png b/src/main/webapp/public/cliparts/thumb/ambulance.png
new file mode 100644
index 0000000..c61cc33
--- /dev/null
+++ b/src/main/webapp/public/cliparts/thumb/ambulance.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/thumb/bow.png b/src/main/webapp/public/cliparts/thumb/bow.png
new file mode 100644
index 0000000..43cc3f5
--- /dev/null
+++ b/src/main/webapp/public/cliparts/thumb/bow.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/thumb/community.png b/src/main/webapp/public/cliparts/thumb/community.png
new file mode 100644
index 0000000..d56e169
--- /dev/null
+++ b/src/main/webapp/public/cliparts/thumb/community.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/thumb/help.png b/src/main/webapp/public/cliparts/thumb/help.png
new file mode 100644
index 0000000..6b7db6a
--- /dev/null
+++ b/src/main/webapp/public/cliparts/thumb/help.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/thumb/home.png b/src/main/webapp/public/cliparts/thumb/home.png
new file mode 100644
index 0000000..149583c
--- /dev/null
+++ b/src/main/webapp/public/cliparts/thumb/home.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/thumb/idea.png b/src/main/webapp/public/cliparts/thumb/idea.png
new file mode 100644
index 0000000..cc2a3c7
--- /dev/null
+++ b/src/main/webapp/public/cliparts/thumb/idea.png
Binary files differ
diff --git a/src/main/webapp/public/cliparts/thumb/swim.png b/src/main/webapp/public/cliparts/thumb/swim.png
new file mode 100644
index 0000000..fbb6f25
--- /dev/null
+++ b/src/main/webapp/public/cliparts/thumb/swim.png
Binary files differ
diff --git a/src/main/webapp/public/config.xml b/src/main/webapp/public/config.xml
new file mode 100644
index 0000000..8fcae54
--- /dev/null
+++ b/src/main/webapp/public/config.xml
@@ -0,0 +1,308 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<config 
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="config.xsd">
+
+<!-- URL/IP to use for the Server for RTMP and RTMPT traffic.
+    If this value is empty it will try to connect to the 
+    domain-name the OpenMeetings-Client has been loading from
+    
+    Can be either and IP or a domain name. 
+    For example: 
+    <rtmphostlocal>192.168.254.182</rtmphostlocal>
+    or
+    <rtmphostlocal>mysubdomain.streaming.to</rtmphostlocal>
+    -->
+<rtmphostlocal></rtmphostlocal>
+
+<!-- URL/IP to use for the Server for HTTP and HTTPS traffic.
+    If this value is empty it will use the rtmphostlocal 
+    variable (and in that way try to connect to the 
+    domain-name the OpenMeetings-Client has been loading from)
+    -->
+<httphostlocal></httphostlocal>
+
+<!--  
+Port to use for the Server
+To this port the default server lookup is done
+
+You can find all this configuration in your red5-Config in: $RED5_HOME/conf/red5.properties
+ -->
+<rtmpport>1935</rtmpport>
+
+<rtmpsslport>8443</rtmpsslport>
+<!--
+Wether it should try to connect to rtmps first or not
+Valid values: yes / no
+
+NOTE: The OSx and Linux Flash Player are NOT able to connect via rtmps
+The support for Windows is experimental
+ -->
+<useSSL>no</useSSL>
+
+<!-- 
+Port to use for the Server
+This port is used to connect to the http-servlet
+of the red5-servlet
+ -->
+<red5httpport>5080</red5httpport>
+
+<!--
+    The protocol to use for the http connections
+    for example upload/download of files 
+ -->
+<protocol>http</protocol>
+
+<!--
+    The setting for the NetConnection
+    default settings is "none"
+    set to value "best" if you are trying to use rtmp over native SSL
+    see: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/NetConnection.html#proxyType
+ -->
+<proxyType>none</proxyType>
+	
+<!--
+    Name of the Application
+    this is the Top-Icon Name of the Application
+ -->    
+<currentappname>Apache OpenMeetings</currentappname>    
+    
+<!-- 
+    URL to the Home of the Application
+    this is the URL which is used if you click on the Top-icon
+-->    
+<currentappnameurl>http://openmeetings.apache.org</currentappnameurl>        
+
+<!--
+    URL to Bugs/Support
+    this is the URL which is used if you click on *report a bug*
+ -->
+<currentappnamebugurl>https://issues.apache.org/jira/browse/OPENMEETINGS</currentappnamebugurl>   
+        
+<!--
+    Video-Settings
+    
+    Number that specifies the amount of sound required to activate the microphone 
+	Acceptable values from 0 to 100.	
+    this value is used in Audio_Streaming, at which the *activity-meter* will
+    send a notification for all connected hosts of a conference
+    the result of this notification is that you see the green-light highlighted if
+    a remote user is speaking
+ -->
+<loudnessAcitviation>0</loudnessAcitviation>  
+    
+<!--
+    OpenMeetings-Webapp Name
+    This is the name of the WebApp the Client will try to connect
+    in former versions (till 0.5 Beta7) the name was xmlcrm
+    the same param kann be find in the webapp in the Red5-Webapp
+    red5-web.properties
+    web.xml
+ -->
+<webAppRootKey>openmeetings</webAppRootKey>  
+
+<!--
+    We need this additional ROOT-Key as we have to deploy the application 
+    as Global Contex Root. 
+    
+    If the rtmpt issues is solved sothat several Webapps can use different RTMPT connection
+    we might change this value again to its origin / webapp-context
+
+ -->
+<httpRootKey>/openmeetings/</httpRootKey>  
+    
+<!--
+    Window-Effect Settings
+    showWindowEffect-values:
+    y = yes
+    n = no
+    showWindowEffectOpacity-values
+    between 0 and 1
+ -->
+<showWindowEffect>n</showWindowEffect> 
+
+<!--
+    Show the recorder buttons in the Conference Rooms
+    visible = yes
+    hidden = no
+ -->	
+<showRecording>hidden</showRecording>
+
+<!--
+    
+	To enable the modern whiteboard Panel you need to switch this to y
+    old menu bar is not active any more
+    
+<showmodernWhiteBoard>y</showmodernWhiteBoard>    
+ -->    
+	
+<!--
+	First day in the Week used by the Calendar
+	0 means Sunday
+	1 means Monday
+	this is the way how the calendar UI shows a week
+-->
+<firstdayinweek>0</firstdayinweek>	
+    
+    
+<!--
+    #############################################################################
+    Audio and Video Settings
+    Before you change settings here,
+    you should first Play and learn how the Settings work in the Documentation:
+    http://code.google.com/p/openmeetings/wiki/AudioVideoTestingApplication
+    #############################################################################
+ -->
+ 
+<!-- Camera Settings for codecType
+
+    codecType possible values:
+    h263
+    h264
+    If you want to use red5sip, set value to "h264"
+ -->
+<codecType>h263</codecType>
+ 
+<!-- Camera Settings for the FramesPerSecond
+    
+    fps:Number [optional] - The requested rate at which the camera should capture 
+    data, in frames per second. The default value is 15.
+ -->    
+<framesPerSecond>30</framesPerSecond>
+    
+    
+<!-- Camera Settings for the Bandwidth:
+    
+    bandwidth:Number [optional] - An integer that specifies the maximum amount 
+    of bandwidth that the current outgoing video feed can use, in bytes per second. 
+    To specify that Flash video can use as much bandwidth as needed to maintain 
+    the value of frameQuality, pass 0 for bandwidth. The default value is 16384.
+ -->
+<!-- These are the settings for the Quality-Modus *normal*
+    The Quality-Modus can be chosen in the Login-Box --> 
+<bandwidthNeededNormal>16384</bandwidthNeededNormal>    
+<!-- These are the settings for the Quality-Modus *best* -->    
+<bandwidthNeededBest>0</bandwidthNeededBest>
+    
+    
+<!-- Camera Settings for the Quality
+    
+    quality:Number [optional] - An integer that specifies the required level of 
+    picture quality, as determined by the amount of compression being applied to 
+    each video frame. Acceptable values range from 1 (lowest quality, maximum 
+    compression) to 100 (highest quality, no compression). To specify that picture 
+    quality can vary as needed to avoid exceeding bandwidth, pass 0 for quality. 
+    The default value is 0.
+ --> 
+<!-- These are the settings for the Quality-Modus *normal* -->  
+<camQualityNormal>85</camQualityNormal>     
+<!-- These are the settings for the Quality-Modus *best* -->       
+<camQualityBest>90</camQualityBest> 
+    
+    
+<!-- Microphone Settings for the Rate:
+    
+    rate:Number - 
+    The rate at which the microphone should capture sound, in kHz. 
+    Acceptable values are 5, 8, 11, 22, and 44. 
+    The default value is 8 kHz if your sound capture 
+    device supports this value. Otherwise, the default value 
+    is the next available capture level above 8 kHz that your sound 
+    capture device supports, usually 11 kHz.
+ -->
+<!-- Microphone Settings Quality-Modus -->
+<microphoneRateBest>22</microphoneRateBest>
+
+<!-- AEC configuration value
+Specifies the echo path length (in milliseconds). A longer echo path means better 
+echo cancellation but also introduces longer delays and requires more processing power. 
+The default value is 128; the only other possible value is 256.
+To disable AEC please specify 0.
+ -->
+<echoPath>128</echoPath>
+
+<!--
+    Set "true" or "false" to enable/disable microphone echo suppression
+ -->
+<echoSuppression>true</echoSuppression>
+
+<!--
+    The Size of the Whiteboard
+    The Whiteboard has scrollbars so you may increase the size without problems
+ -->
+<defaultWhiteboardWidth>2400</defaultWhiteboardWidth>  
+<defaultWhiteboardHeight>1200</defaultWhiteboardHeight>  
+
+<!-- Available Configurations -->
+
+<availableCameraResolutions>
+    <resolution type="4:3 (~6 KByte/sec)" width="40" height="30" isDefault="false" />
+    <resolution type="4:3 (~12 KByte/sec)" width="80" height="60" isDefault="false" />
+    <resolution type="4:3 (~20 KByte/sec)" width="120" height="90" isDefault="true" />
+    <resolution type="QQVGA 4:3 (~36 KByte/sec)" width="160" height="120" isDefault="false" />
+    <resolution type="4:3 (~40 KByte/sec)" width="240" height="180" isDefault="false" />
+    <resolution type="HVGA 4:3 (~56 KByte/sec)" width="320" height="240" isDefault="false" />
+    <resolution type="4:3  (~60 KByte/sec)" width="480" height="360" isDefault="false" />
+    <resolution type="4:3 (~68 KByte/sec)" width="640" height="480" isDefault="false" />
+    <resolution type="XGA 4:3" width="1024" height="768" isDefault="false" />
+    <resolution type="16:9" width="256" height="150" isDefault="false" />
+    <resolution type="WQVGA 9:5" width="432" height="240" isDefault="false" />
+    <resolution type="pseudo 16:9" width="480" height="234" isDefault="false" />
+    <resolution type="16:9" width="512" height="300" isDefault="false" />
+    <resolution type="nHD 16:9" width="640" height="360" isDefault="false" />
+    <resolution type="16:9" width="1024" height="600" isDefault="false" />
+</availableCameraResolutions>
+    
+ 
+<!-- Module Configuration -->
+<!-- #############################################
+    Moderator Modules
+ -->
+
+<moderatorModuleUser>userModerate</moderatorModuleUser>
+
+<moderatorModuleRoom>roomModerate</moderatorModuleRoom>
+
+
+<!-- #############################################
+    Conference Room
+    
+    Room Layout's: flexibleConferenceRoom,conferenceView
+ -->
+
+<conferenceRoomModule>flexibleConferenceRoom</conferenceRoomModule>
+
+<!-- #############################################
+    Event Room
+    
+    Room Layouts: flexibleRestrictedConferenceRoom,restrictedConferenceRoom
+ -->
+<restrictedRoomModule>restrictedConferenceRoom</restrictedRoomModule>
+
+<!-- #############################################
+    Interview Room
+    
+    Room Layouts: interviewConferenceRoom
+ -->
+<interviewRoomModule>interviewConferenceRoom</interviewRoomModule>
+        
+</config>
diff --git a/src/main/webapp/public/config.xsd b/src/main/webapp/public/config.xsd
new file mode 100644
index 0000000..777d7f5
--- /dev/null
+++ b/src/main/webapp/public/config.xsd
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

+  <xs:element name="config">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element ref="rtmphostlocal"/>

+        <xs:element ref="httphostlocal"/>

+        <xs:element ref="rtmpport"/>

+        <xs:element ref="rtmpsslport"/>

+        <xs:element ref="useSSL"/>

+        <xs:element ref="red5httpport"/>

+        <xs:element ref="protocol"/>

+        <xs:element ref="proxyType"/>

+        <xs:element ref="currentappname"/>

+        <xs:element ref="currentappnameurl"/>

+        <xs:element ref="currentappnamebugurl"/>

+        <xs:element ref="loudnessAcitviation"/>

+        <xs:element ref="webAppRootKey"/>

+        <xs:element ref="httpRootKey"/>

+        <xs:element ref="showWindowEffect"/>

+        <xs:element ref="showRecording"/>

+        <xs:element ref="firstdayinweek"/>

+	<xs:element ref="codecType"/>

+        <xs:element ref="framesPerSecond"/>

+        <xs:element ref="bandwidthNeededNormal"/>

+        <xs:element ref="bandwidthNeededBest"/>

+        <xs:element ref="camQualityNormal"/>

+        <xs:element ref="camQualityBest"/>

+        <xs:element ref="microphoneRateBest"/>

+        <xs:element ref="echoPath" />

+	<xs:element ref="echoSuppression" />

+        <xs:element ref="defaultWhiteboardWidth"/>

+        <xs:element ref="defaultWhiteboardHeight"/>

+        <xs:element ref="availableCameraResolutions"/>

+        <xs:element ref="moderatorModuleUser"/>

+        <xs:element ref="moderatorModuleRoom"/>

+        <xs:element ref="conferenceRoomModule"/>

+        <xs:element ref="restrictedRoomModule"/>

+        <xs:element ref="interviewRoomModule"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="rtmphostlocal">

+  	<xs:annotation>

+    	<xs:documentation>

+    		URL/IP to use for the Server for RTMP and RTMPT traffic.

+		    If this value is empty it will try to connect to the 

+		    domain-name the OpenMeetings-Client has been loading from

+		    

+		    Can be either and IP or a domain name. 

+		    For example: 

+		    192.168.254.182

+		    or

+		    mysubdomain.streaming.to

+    	</xs:documentation>

+    </xs:annotation>

+    <xs:complexType/>

+  </xs:element>

+  <xs:element name="httphostlocal">

+    <xs:annotation>

+    	<xs:documentation>

+    		URL/IP to use for the Server for HTTP and HTTPS traffic.

+		    If this value is empty it will use the rtmphostlocal 

+		    variable (and in that way try to connect to the 

+		    domain-name the OpenMeetings-Client has been loading from)

+    	</xs:documentation>

+    </xs:annotation>

+    <xs:complexType/>

+  </xs:element>

+  <xs:element name="rtmpport" type="xs:integer"/>

+  <xs:element name="rtmpTunnelport" type="xs:integer"/>

+  <xs:element name="rtmpsslport" type="xs:integer"/>

+  <xs:element name="useSSL" type="xs:NCName"/>

+  <xs:element name="red5httpport" type="xs:integer"/>

+  <xs:element name="protocol" type="xs:NCName"/>

+  <xs:element name="proxyType" type="xs:NCName"/>

+  <xs:element name="currentappname" type="xs:string"/>

+  <xs:element name="currentappnameurl" type="xs:anyURI"/>

+  <xs:element name="currentappnamebugurl" type="xs:anyURI"/>

+  <xs:element name="loudnessAcitviation" type="xs:integer"/>

+  <xs:element name="webAppRootKey" type="xs:NCName"/>

+  <xs:element name="httpRootKey" type="xs:string"/>

+  <xs:element name="showWindowEffect" type="xs:NCName"/>

+  <xs:element name="showRecording" type="xs:NCName"/>

+  <xs:element name="firstdayinweek" type="xs:integer"/>

+  <xs:element name="codecType" type="xs:string"/>

+  <xs:element name="framesPerSecond" type="xs:integer"/>

+  <xs:element name="bandwidthNeededNormal" type="xs:integer"/>

+  <xs:element name="bandwidthNeededBest" type="xs:integer"/>

+  <xs:element name="camQualityNormal" type="xs:integer"/>

+  <xs:element name="camQualityBest" type="xs:integer"/>

+  <xs:element name="microphoneRateBest" type="xs:integer"/>

+  <xs:element name="echoSuppression" type="xs:string"/>

+  <xs:element name="echoPath">

+    <xs:annotation>

+        <xs:documentation>

+            AEC configuration value - 

+			Specifies the echo path length (in milliseconds). A longer echo path means better 

+			echo cancellation but also introduces longer delays and requires more processing power. 

+			The default value is 128; the only other possible value is 256.

+        </xs:documentation>

+    </xs:annotation>

+    <xs:simpleType>

+        <xs:restriction base="xs:int">

+            <xs:enumeration value="128" />

+            <xs:enumeration value="256" />

+        </xs:restriction>

+    </xs:simpleType>

+  </xs:element>

+  <xs:element name="defaultWhiteboardWidth" type="xs:integer"/>

+  <xs:element name="defaultWhiteboardHeight" type="xs:integer"/>

+  <xs:element name="availableCameraResolutions">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="resolution"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="resolution">

+    <xs:complexType>

+      <xs:attribute name="height" use="required" type="xs:integer"/>

+      <xs:attribute name="isDefault" use="required" type="xs:boolean"/>

+      <xs:attribute name="type" use="required"/>

+      <xs:attribute name="width" use="required" type="xs:integer"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="moderatorModuleUser" type="xs:NCName"/>

+  <xs:element name="moderatorModuleRoom" type="xs:NCName"/>

+  <xs:element name="conferenceRoomModule" type="xs:NCName"/>

+  <xs:element name="restrictedRoomModule" type="xs:NCName"/>

+  <xs:element name="interviewRoomModule" type="xs:NCName"/>

+</xs:schema>

diff --git a/src/main/webapp/public/emoticons/emotes.xml b/src/main/webapp/public/emoticons/emotes.xml
new file mode 100644
index 0000000..5d12618
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emotes.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<linked-list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="emotes.xsd">
+  <linked-list>
+    <string>emoticon_evilgrin.png</string>
+    <string>&gt;:(</string>
+    <string>(\_/)</string>
+	<string>    </string>
+	<string>y</string>
+  </linked-list>
+  <linked-list>
+    <string>emoticon_grin.png</string>
+    <string>:D</string>
+	<string>    </string>
+	<string>y</string>
+  </linked-list>
+  <linked-list>
+    <string>emoticon_happy.png</string>
+    <string>8D</string>
+	<string>    </string>
+	<string>y</string>
+  </linked-list>
+  <linked-list>
+    <string>emoticon_smile.png</string>
+    <string>:)</string>
+    <string>(^_^)</string>
+	<string>    </string>
+	<string>y</string>
+  </linked-list>
+  <linked-list>
+    <string>emoticon_surprised.png</string>
+    <string>o_O</string>
+	<string>    </string>
+	<string>y</string>
+  </linked-list>
+  <linked-list>
+    <string>emoticon_tongue.png</string>
+    <string>:P</string>
+	<string>    </string>
+	<string>y</string>
+  </linked-list>
+  <linked-list>
+    <string>emoticon_unhappy.png</string>
+    <string>:(</string>
+	<string>    </string>
+	<string>y</string>
+  </linked-list>
+  <linked-list>
+    <string>emoticon_wink.png</string>
+    <string>;)</string>
+	<string>    </string>
+	<string>y</string>
+  </linked-list>
+</linked-list>
diff --git a/src/main/webapp/public/emoticons/emotes.xsd b/src/main/webapp/public/emoticons/emotes.xsd
new file mode 100644
index 0000000..fe10285
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emotes.xsd
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

+  <xs:element name="linked-list">

+    <xs:complexType>

+      <xs:sequence minOccurs="0">

+        <xs:element ref="linked-list" minOccurs="0" maxOccurs="unbounded"/>

+        <xs:element maxOccurs="unbounded" ref="string" minOccurs="0"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="string" type="xs:string"/>

+</xs:schema>

diff --git a/src/main/webapp/public/emoticons/emoticon_evilgrin.png b/src/main/webapp/public/emoticons/emoticon_evilgrin.png
new file mode 100644
index 0000000..817bd50
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emoticon_evilgrin.png
Binary files differ
diff --git a/src/main/webapp/public/emoticons/emoticon_grin.png b/src/main/webapp/public/emoticons/emoticon_grin.png
new file mode 100644
index 0000000..fc60c5e
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emoticon_grin.png
Binary files differ
diff --git a/src/main/webapp/public/emoticons/emoticon_happy.png b/src/main/webapp/public/emoticons/emoticon_happy.png
new file mode 100644
index 0000000..6b7336e
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emoticon_happy.png
Binary files differ
diff --git a/src/main/webapp/public/emoticons/emoticon_smile.png b/src/main/webapp/public/emoticons/emoticon_smile.png
new file mode 100644
index 0000000..ade4318
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emoticon_smile.png
Binary files differ
diff --git a/src/main/webapp/public/emoticons/emoticon_surprised.png b/src/main/webapp/public/emoticons/emoticon_surprised.png
new file mode 100644
index 0000000..4520cfc
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emoticon_surprised.png
Binary files differ
diff --git a/src/main/webapp/public/emoticons/emoticon_tongue.png b/src/main/webapp/public/emoticons/emoticon_tongue.png
new file mode 100644
index 0000000..ecafd2f
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emoticon_tongue.png
Binary files differ
diff --git a/src/main/webapp/public/emoticons/emoticon_unhappy.png b/src/main/webapp/public/emoticons/emoticon_unhappy.png
new file mode 100644
index 0000000..fd5d030
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emoticon_unhappy.png
Binary files differ
diff --git a/src/main/webapp/public/emoticons/emoticon_wink.png b/src/main/webapp/public/emoticons/emoticon_wink.png
new file mode 100644
index 0000000..a631949
--- /dev/null
+++ b/src/main/webapp/public/emoticons/emoticon_wink.png
Binary files differ
diff --git a/src/main/webapp/public/favicon.ico b/src/main/webapp/public/favicon.ico
new file mode 100644
index 0000000..f0c22ad
--- /dev/null
+++ b/src/main/webapp/public/favicon.ico
Binary files differ
diff --git a/src/main/webapp/public/theme.xml b/src/main/webapp/public/theme.xml
new file mode 100644
index 0000000..6a983a4
--- /dev/null
+++ b/src/main/webapp/public/theme.xml
@@ -0,0 +1,358 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

+    xsi:noNamespaceSchemaLocation="theme.xsd">

+

+	<!-- Colors -->

+

+	<color name="mainBackgroundColor" value="0xEEF0EB" 

+				description="main background color" />

+

+	<color name="basebgcolorizer" value="0xBDC0DB" 

+				description="Color for background" />

+				

+	<color name="baseMousecolorizer" value="0xBDC0DB" 

+				description="Color Mouseover color for list items" />

+	

+	<color name="baseMouseOvercolorizer" value="0xBDC0DB" 

+				description="Color Mouseover color for list items" />	

+	

+	<color name="styleMenuBarBaseColor" value="0x000088" 

+				description="menu bar background color" />				

+	

+	<color name="mainBorderColor" value="0xCCCCCC" 

+				description="main border color" />

+				

+	<color name="secondBorderColor" value="0xE0E0E0" 

+				description="main border color" />	

+		

+	<color name="menuBackgroundColor" value="0xEFEFEF" 

+				description="main border color" />

+				

+	<color name="menuTextColor" value="0x666666" 

+				description="color of text for menus" />

+	

+	<color name="menuTextDisabledColor" value="0xBBBBBB" 

+				description="color of text for menus" />		

+	

+	<!-- Icons -->

+	<resource name="logo_image" 

+				description="Logo to display on Main BG Navi" 

+				license="APL"

+				src="themes/basic-theme/general/logo.png" />

+	

+	<resource name="icon_facebook_rsc_png" 

+				description="Icon for facebook button in login" 

+				license="Unkown"

+				src="themes/basic-theme/auth/icon_facebook.png" />

+				

+	<resource name="warning_popup_icon_rsc" 

+				description="Toolbar Icon" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/general/error.png" />	

+				

+	<resource name="info_text_icon_rsc" 

+				description="Info Icon" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/general/information.png" />

+	

+	<!-- Save Toolbar (for example Admin section) -->

+	

+	<resource name="filesave_rsc" 

+				description="Save Icon" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/general/disk.png" />

+

+	<resource name="edit_add_rsc" 

+				description="Save Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/general/plus_icon.png" />

+

+	<resource name="reload_rsc" 

+				description="Save Icon" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/general/arrow_refresh_small.png" />

+	

+	<resource name="button_cancel_rsc" 

+				description="Save Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/general/cancel_icon.png" />

+

+	<resource name="add_rsc" 

+				description="Edit Add Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/general/add.png" />

+				

+	<resource name="date_icon_rsc" 

+				description="Edit Add Icon" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/general/calendar_view_week.png" />

+				

+	<!-- Sorted list -->

+	

+	<resource name="step_back_two_arrow" 

+				description="Step to first" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/general/resultset_first.png" />

+				

+	<resource name="step_fwd_two_arrow" 

+				description="Step to last" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/general/resultset_last.png" />

+						

+    <resource name="step_back_arrow" 

+    			description="Step one back" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/general/resultset_previous.png" />

+    

+    <resource name="step_fwd_arrow" 

+    			description="Step one next" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/general/resultset_next.png" />

+				

+    <resource name="sort_up_rsc" 

+    			description="Sort up" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/general/resultset_up.png" />

+    

+    <resource name="sort_down_rsc" 

+    			description="Sort down" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/general/resultset_down.png" />

+    

+    <!-- Chat toolbar -->

+    

+    <resource name="font_style" 

+    			description="Change font style button" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/general/style.png" />

+    

+    <resource name="font_bold" 

+    			description="Bold font style button" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/general/text_bold.png" />

+    

+    <resource name="font_italic" 

+    			description="Italic font style button" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/general/text_italic.png" />

+    

+    <resource name="font_underline" 

+    			description="Underline font style button" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/general/text_underline.png" />

+    

+    <resource name="font_color" 

+    			description="Change font color button" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/general/color_swatch.png" />

+    

+    <resource name="hyperlink" 

+    			description="Insert hyperlink button" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/general/world_link.png" />

+				

+	<!-- Whiteboard Toolbar -->

+	

+	<resource name="plain" 

+				description="Toolbar Icon" 

+				license="APL author sebawagner"

+				src="themes/basic-theme/whiteboard/delete_all.png" />

+	

+	<resource name="plainSlides" 

+				description="Toolbar Icon" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/whiteboard/page_delete.png" />

+	

+	<resource name="arrow_draw_panel_tool_cursor" 

+				description="Toolbar Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/whiteboard/arrow_cursor_tool.png" />

+

+	<resource name="saveobj" 

+				description="Toolbar Icon" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/general/disk.png" />

+

+	<resource name="revert" 

+				description="Toolbar Icon" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/whiteboard/arrow_rotate_anticlockwise.png" />

+

+	<resource name="next" 

+				description="Toolbar Icon" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/whiteboard/arrow_rotate_clockwise.png" />

+

+	<resource name="menupointer_rsc" 

+				description="Toolbar Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/whiteboard/menupointer.png" />

+				

+	<resource name="pointer_whiteboard_menu_rsc" 

+				description="Toolbar Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/whiteboard/pointerWhiteBoard_menu_rsc.png" />

+				

+	<resource name="letter" 

+				description="Toolbar Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/whiteboard/letter.png" />

+

+	<resource name="paint" 

+				description="Toolbar Icon" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/whiteboard/pencil.png" />

+	

+	<resource name="line_rsc" 

+				description="Toolbar Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/whiteboard/line.png" />	

+	

+	<resource name="uline_rsc" 

+				description="Toolbar Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/whiteboard/uline.png" />	

+		

+	<resource name="rectangle" 

+				description="Toolbar Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/whiteboard/rectangle.png" />	

+

+	<resource name="ellipse" 

+				description="Toolbar Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/whiteboard/ellipse.png" />	

+				

+	<resource name="drawarrowicon_rsc" 

+				description="Toolbar Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/whiteboard/drawarrowicon.png" />			

+		

+	<!-- whiteboard general -->		

+				

+	<resource name="bounding_box_delete_item_rsc" 

+				description="Toolbar Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/general/cancel_icon_small.png" />	

+	

+	<resource name="bounding_box_textedit_item_rsc" 

+				description="Toolbar Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/whiteboard/text_signature.png" />				

+					

+	<!-- document Tools -->	

+	

+	<resource name="doc_next" 

+				description="Toolbar Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/whiteboard/doc_next.png" />		

+				

+	<resource name="doc_pre" 

+				description="Toolbar Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/whiteboard/doc_pre.png" />		

+				

+	<resource name="doc_first" 

+				description="Toolbar Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/whiteboard/doc_first.png" />		

+				

+	<resource name="doc_last" 

+				description="Toolbar Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/whiteboard/doc_last.png" />		

+				

+	<!-- property panel -->	

+	<resource name="colorlinechoose_rsc" 

+				description="Property bar icon line color" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/whiteboard/pencil.png" />

+	

+	<resource name="colorfillchoose_rsc" 

+				description="Property bar icon fill color" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/whiteboard/paintcan.png" />

+	

+	<resource name="color_lock_rsc" 

+				description="Property bar icon color lock" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/whiteboard/lock.png" />

+	

+	<resource name="color_lock_open_rsc" 

+				description="Property bar icon color lock open" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/whiteboard/lock_open.png" />	

+				

+	<!-- Dashboard -->

+	

+	<resource name="icon_btn_dashboard_1" 

+				description="Info Guide Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/dashboard/wizzard_button_1.png" />

+				

+    <resource name="icon_btn_dashboard_2" 

+    			description="Info Guide Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/dashboard/wizzard_button_2.png" />

+				

+    <resource name="icon_btn_dashboard_3" 

+    			description="Info Guide Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/dashboard/wizzard_button_3.png" />

+				

+    <resource name="icon_btn_dashboard_4" 

+    			description="Info Guide Icon" 

+				license="APL Author sebawagner"

+				src="themes/basic-theme/dashboard/wizzard_button_4.png" />

+	

+	<resource name="icon_btn_rss_conference" 

+    			description="RSS Tab Icon" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/dashboard/feed.png" />

+	

+	<resource name="icon_btn_chat_dashboard" 

+				description="Chat Tab Icon" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/dashboard/comments.png" />

+	

+    <resource name="icon_btn_rooms_conference" 

+				description="Conference Room Tab Icon" 

+				license="APL author sebawagner"

+				src="themes/basic-theme/dashboard/conference_icon_normal.png" />	

+				

+	<!-- Conference room -->	

+	<resource name="users_tab_btn" 

+				description="Conference Room Tab User" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/conference/group.png" />

+		

+	<resource name="files_tab_btn" 

+				description="Conference Room Tab Files" 

+				license="FamFam Icon Set"

+				src="themes/basic-theme/conference/folder_explore.png" />

+	

+	<resource name="exit_btn_rsc" 

+				description="Conference Room Tab Icon" 

+				license="APL author sebawagner"

+				src="themes/basic-theme/conference/exit_button.png" />			

+	

+</theme>
\ No newline at end of file
diff --git a/src/main/webapp/public/theme.xsd b/src/main/webapp/public/theme.xsd
new file mode 100644
index 0000000..c7a1885
--- /dev/null
+++ b/src/main/webapp/public/theme.xsd
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

+  <xs:element name="theme">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="color"/>

+        <xs:element maxOccurs="unbounded" ref="resource"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="color">

+    <xs:complexType>

+      <xs:attribute name="description" use="required"/>

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+      <xs:attribute name="value" use="required" type="xs:NMTOKEN"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="resource">

+    <xs:complexType>

+      <xs:attribute name="description" use="required"/>

+      <xs:attribute name="license" use="required"/>

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+      <xs:attribute name="src" use="required"/>

+    </xs:complexType>

+  </xs:element>

+</xs:schema>

diff --git a/src/main/webapp/public/themes/basic-theme/auth/icon_facebook.png b/src/main/webapp/public/themes/basic-theme/auth/icon_facebook.png
new file mode 100644
index 0000000..a0f667c
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/auth/icon_facebook.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/conference/exit_button.fla b/src/main/webapp/public/themes/basic-theme/conference/exit_button.fla
new file mode 100644
index 0000000..808954f
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/conference/exit_button.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/conference/exit_button.png b/src/main/webapp/public/themes/basic-theme/conference/exit_button.png
new file mode 100644
index 0000000..7234c99
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/conference/exit_button.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/conference/folder_explore.png b/src/main/webapp/public/themes/basic-theme/conference/folder_explore.png
new file mode 100644
index 0000000..0ba9391
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/conference/folder_explore.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/conference/group.png b/src/main/webapp/public/themes/basic-theme/conference/group.png
new file mode 100644
index 0000000..7fb4e1f
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/conference/group.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/comments.png b/src/main/webapp/public/themes/basic-theme/dashboard/comments.png
new file mode 100644
index 0000000..39433cf
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/comments.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/conference_icon_normal.fla b/src/main/webapp/public/themes/basic-theme/dashboard/conference_icon_normal.fla
new file mode 100644
index 0000000..1f013f2
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/conference_icon_normal.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/conference_icon_normal.png b/src/main/webapp/public/themes/basic-theme/dashboard/conference_icon_normal.png
new file mode 100644
index 0000000..44d450d
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/conference_icon_normal.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/feed.png b/src/main/webapp/public/themes/basic-theme/dashboard/feed.png
new file mode 100644
index 0000000..315c4f4
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/feed.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_1.fla b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_1.fla
new file mode 100644
index 0000000..a97ff6b
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_1.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_1.png b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_1.png
new file mode 100644
index 0000000..fa3a7e2
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_1.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_2.fla b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_2.fla
new file mode 100644
index 0000000..9aa80f1
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_2.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_2.png b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_2.png
new file mode 100644
index 0000000..75eb60e
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_2.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_3.fla b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_3.fla
new file mode 100644
index 0000000..e005420
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_3.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_3.png b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_3.png
new file mode 100644
index 0000000..cc68320
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_3.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_4.fla b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_4.fla
new file mode 100644
index 0000000..8088a64
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_4.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_4.png b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_4.png
new file mode 100644
index 0000000..228b85c
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/dashboard/wizzard_button_4.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/add.png b/src/main/webapp/public/themes/basic-theme/general/add.png
new file mode 100644
index 0000000..6332fef
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/add.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/arrow_refresh_small.png b/src/main/webapp/public/themes/basic-theme/general/arrow_refresh_small.png
new file mode 100644
index 0000000..d3087df
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/arrow_refresh_small.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/calendar_view_week.png b/src/main/webapp/public/themes/basic-theme/general/calendar_view_week.png
new file mode 100644
index 0000000..8fe695f
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/calendar_view_week.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/cancel_icon.fla b/src/main/webapp/public/themes/basic-theme/general/cancel_icon.fla
new file mode 100644
index 0000000..ecc498d
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/cancel_icon.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/cancel_icon.png b/src/main/webapp/public/themes/basic-theme/general/cancel_icon.png
new file mode 100644
index 0000000..2d26062
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/cancel_icon.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/cancel_icon_small.fla b/src/main/webapp/public/themes/basic-theme/general/cancel_icon_small.fla
new file mode 100644
index 0000000..0bd3258
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/cancel_icon_small.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/cancel_icon_small.png b/src/main/webapp/public/themes/basic-theme/general/cancel_icon_small.png
new file mode 100644
index 0000000..267e6c2
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/cancel_icon_small.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/color_swatch.png b/src/main/webapp/public/themes/basic-theme/general/color_swatch.png
new file mode 100644
index 0000000..6e6e852
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/color_swatch.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/disk.png b/src/main/webapp/public/themes/basic-theme/general/disk.png
new file mode 100644
index 0000000..99d532e
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/disk.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/error.png b/src/main/webapp/public/themes/basic-theme/general/error.png
new file mode 100644
index 0000000..628cf2d
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/error.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/information.png b/src/main/webapp/public/themes/basic-theme/general/information.png
new file mode 100644
index 0000000..12cd1ae
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/information.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/logo.png b/src/main/webapp/public/themes/basic-theme/general/logo.png
new file mode 100644
index 0000000..1d7a3bc
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/logo.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/plus_icon.fla b/src/main/webapp/public/themes/basic-theme/general/plus_icon.fla
new file mode 100644
index 0000000..9ac11ed
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/plus_icon.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/plus_icon.png b/src/main/webapp/public/themes/basic-theme/general/plus_icon.png
new file mode 100644
index 0000000..acec291
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/plus_icon.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/resultset_down.png b/src/main/webapp/public/themes/basic-theme/general/resultset_down.png
new file mode 100644
index 0000000..0469642
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/resultset_down.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/resultset_first.png b/src/main/webapp/public/themes/basic-theme/general/resultset_first.png
new file mode 100644
index 0000000..b03eaf8
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/resultset_first.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/resultset_last.png b/src/main/webapp/public/themes/basic-theme/general/resultset_last.png
new file mode 100644
index 0000000..8ec8947
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/resultset_last.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/resultset_next.png b/src/main/webapp/public/themes/basic-theme/general/resultset_next.png
new file mode 100644
index 0000000..e252606
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/resultset_next.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/resultset_previous.png b/src/main/webapp/public/themes/basic-theme/general/resultset_previous.png
new file mode 100644
index 0000000..18f9cc1
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/resultset_previous.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/resultset_up.png b/src/main/webapp/public/themes/basic-theme/general/resultset_up.png
new file mode 100644
index 0000000..f121481
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/resultset_up.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/style.png b/src/main/webapp/public/themes/basic-theme/general/style.png
new file mode 100644
index 0000000..81e41de
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/style.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/text_bold.png b/src/main/webapp/public/themes/basic-theme/general/text_bold.png
new file mode 100644
index 0000000..889ae80
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/text_bold.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/text_italic.png b/src/main/webapp/public/themes/basic-theme/general/text_italic.png
new file mode 100644
index 0000000..8482ac8
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/text_italic.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/text_underline.png b/src/main/webapp/public/themes/basic-theme/general/text_underline.png
new file mode 100644
index 0000000..90d0df2
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/text_underline.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/general/world_link.png b/src/main/webapp/public/themes/basic-theme/general/world_link.png
new file mode 100644
index 0000000..b8edc12
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/general/world_link.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/arrow_cursor_tool.png b/src/main/webapp/public/themes/basic-theme/whiteboard/arrow_cursor_tool.png
new file mode 100644
index 0000000..a9f3169
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/arrow_cursor_tool.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/arrow_rotate_anticlockwise.png b/src/main/webapp/public/themes/basic-theme/whiteboard/arrow_rotate_anticlockwise.png
new file mode 100644
index 0000000..46c75aa
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/arrow_rotate_anticlockwise.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/arrow_rotate_clockwise.png b/src/main/webapp/public/themes/basic-theme/whiteboard/arrow_rotate_clockwise.png
new file mode 100644
index 0000000..aa65210
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/arrow_rotate_clockwise.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/cancel.png b/src/main/webapp/public/themes/basic-theme/whiteboard/cancel.png
new file mode 100644
index 0000000..c149c2b
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/cancel.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/delete_all.fla b/src/main/webapp/public/themes/basic-theme/whiteboard/delete_all.fla
new file mode 100644
index 0000000..bafe7e3
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/delete_all.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/delete_all.png b/src/main/webapp/public/themes/basic-theme/whiteboard/delete_all.png
new file mode 100644
index 0000000..3e42c07
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/delete_all.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/doc_first.fla b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_first.fla
new file mode 100644
index 0000000..80b49ec
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_first.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/doc_first.png b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_first.png
new file mode 100644
index 0000000..c1e5ac9
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_first.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/doc_last.fla b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_last.fla
new file mode 100644
index 0000000..e44d536
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_last.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/doc_last.png b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_last.png
new file mode 100644
index 0000000..1ef3056
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_last.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/doc_next.fla b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_next.fla
new file mode 100644
index 0000000..f9ea5cb
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_next.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/doc_next.png b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_next.png
new file mode 100644
index 0000000..6cede29
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_next.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/doc_pre.fla b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_pre.fla
new file mode 100644
index 0000000..7050168
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_pre.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/doc_pre.png b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_pre.png
new file mode 100644
index 0000000..f974ec6
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/doc_pre.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/drawarrowicon.png b/src/main/webapp/public/themes/basic-theme/whiteboard/drawarrowicon.png
new file mode 100644
index 0000000..0e73cb5
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/drawarrowicon.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/ellipse.fla b/src/main/webapp/public/themes/basic-theme/whiteboard/ellipse.fla
new file mode 100644
index 0000000..e437461
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/ellipse.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/ellipse.png b/src/main/webapp/public/themes/basic-theme/whiteboard/ellipse.png
new file mode 100644
index 0000000..9cc51f3
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/ellipse.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/letter.fla b/src/main/webapp/public/themes/basic-theme/whiteboard/letter.fla
new file mode 100644
index 0000000..f1aba8e
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/letter.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/letter.png b/src/main/webapp/public/themes/basic-theme/whiteboard/letter.png
new file mode 100644
index 0000000..eb036ef
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/letter.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/line.png b/src/main/webapp/public/themes/basic-theme/whiteboard/line.png
new file mode 100644
index 0000000..10b420a
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/line.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/lock.png b/src/main/webapp/public/themes/basic-theme/whiteboard/lock.png
new file mode 100644
index 0000000..2ebc4f6
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/lock.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/lock_open.png b/src/main/webapp/public/themes/basic-theme/whiteboard/lock_open.png
new file mode 100644
index 0000000..a471765
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/lock_open.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/menupointer.png b/src/main/webapp/public/themes/basic-theme/whiteboard/menupointer.png
new file mode 100644
index 0000000..98031f6
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/menupointer.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/page_delete.png b/src/main/webapp/public/themes/basic-theme/whiteboard/page_delete.png
new file mode 100644
index 0000000..3141467
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/page_delete.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/paintcan.png b/src/main/webapp/public/themes/basic-theme/whiteboard/paintcan.png
new file mode 100644
index 0000000..f82a886
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/paintcan.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/pencil.png b/src/main/webapp/public/themes/basic-theme/whiteboard/pencil.png
new file mode 100644
index 0000000..0bfecd5
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/pencil.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/pointerWhiteBoard_menu_rsc.fla b/src/main/webapp/public/themes/basic-theme/whiteboard/pointerWhiteBoard_menu_rsc.fla
new file mode 100644
index 0000000..ecd9bfc
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/pointerWhiteBoard_menu_rsc.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/pointerWhiteBoard_menu_rsc.png b/src/main/webapp/public/themes/basic-theme/whiteboard/pointerWhiteBoard_menu_rsc.png
new file mode 100644
index 0000000..3a3ee30
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/pointerWhiteBoard_menu_rsc.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/rectangle.fla b/src/main/webapp/public/themes/basic-theme/whiteboard/rectangle.fla
new file mode 100644
index 0000000..f9038d1
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/rectangle.fla
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/rectangle.png b/src/main/webapp/public/themes/basic-theme/whiteboard/rectangle.png
new file mode 100644
index 0000000..db799f4
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/rectangle.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/text_signature.png b/src/main/webapp/public/themes/basic-theme/whiteboard/text_signature.png
new file mode 100644
index 0000000..c72fd80
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/text_signature.png
Binary files differ
diff --git a/src/main/webapp/public/themes/basic-theme/whiteboard/uline.png b/src/main/webapp/public/themes/basic-theme/whiteboard/uline.png
new file mode 100644
index 0000000..32914f0
--- /dev/null
+++ b/src/main/webapp/public/themes/basic-theme/whiteboard/uline.png
Binary files differ
diff --git a/src/main/webapp/screensharing/icon.jpg b/src/main/webapp/screensharing/icon.jpg
new file mode 100644
index 0000000..a9f29e4
--- /dev/null
+++ b/src/main/webapp/screensharing/icon.jpg
Binary files differ
diff --git a/src/main/webapp/screensharing/splashicon.jpg b/src/main/webapp/screensharing/splashicon.jpg
new file mode 100644
index 0000000..a9f29e4
--- /dev/null
+++ b/src/main/webapp/screensharing/splashicon.jpg
Binary files differ
diff --git a/src/main/webapp/streams/hibernate/default_interview_image.fla b/src/main/webapp/streams/hibernate/default_interview_image.fla
new file mode 100644
index 0000000..31398dc
--- /dev/null
+++ b/src/main/webapp/streams/hibernate/default_interview_image.fla
Binary files differ
diff --git a/src/main/webapp/streams/hibernate/default_interview_image.jpg b/src/main/webapp/streams/hibernate/default_interview_image.jpg
new file mode 100644
index 0000000..4b0f26b
--- /dev/null
+++ b/src/main/webapp/streams/hibernate/default_interview_image.jpg
Binary files differ
diff --git a/src/main/webapp/streams/hibernate/default_interview_image.png b/src/main/webapp/streams/hibernate/default_interview_image.png
new file mode 100644
index 0000000..e87d640
--- /dev/null
+++ b/src/main/webapp/streams/hibernate/default_interview_image.png
Binary files differ
diff --git a/src/main/webapp/streams/hibernate/one_second.wav b/src/main/webapp/streams/hibernate/one_second.wav
new file mode 100644
index 0000000..24d262a
--- /dev/null
+++ b/src/main/webapp/streams/hibernate/one_second.wav
Binary files differ
diff --git a/src/main/webapp/upload/library.xml b/src/main/webapp/upload/library.xml
new file mode 100644
index 0000000..794be23
--- /dev/null
+++ b/src/main/webapp/upload/library.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<presentation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+    xsi:noNamespaceSchemaLocation="library.xsd"><originalDocument lastmod="1185461814000" size="240233">Tutorat.pdf</originalDocument><swfDocument lastmod="1185461814000" size="240233">Tutorat.swf</swfDocument><thumbs><thumb lastmod="1185461813000" size="3998">_thumb_pages-000.jpg</thumb><thumb lastmod="1185461813000" size="3855">_thumb_pages-001.jpg</thumb><thumb lastmod="1185461813000" size="4306">_thumb_pages-002.jpg</thumb><thumb lastmod="1185461813000" size="3747">_thumb_pages-003.jpg</thumb><thumb lastmod="1185461813000" size="3162">_thumb_pages-004.jpg</thumb><thumb lastmod="1185461813000" size="3232">_thumb_pages-005.jpg</thumb><thumb lastmod="1185461813000" size="2981">_thumb_pages-006.jpg</thumb><thumb lastmod="1185461813000" size="3126">_thumb_pages-007.jpg</thumb><thumb lastmod="1185461813000" size="4457">_thumb_pages-008.jpg</thumb><thumb lastmod="1185461813000" size="4264">_thumb_pages-009.jpg</thumb><thumb lastmod="1185461813000" size="4263">_thumb_pages-010.jpg</thumb><thumb lastmod="1185461813000" size="3770">_thumb_pages-011.jpg</thumb><thumb lastmod="1185461813000" size="3354">_thumb_pages-012.jpg</thumb><thumb lastmod="1185461813000" size="3006">_thumb_pages-013.jpg</thumb><thumb lastmod="1185461813000" size="3972">_thumb_pages-014.jpg</thumb><thumb lastmod="1185461813000" size="4353">_thumb_pages-015.jpg</thumb><thumb lastmod="1185461813000" size="4184">_thumb_pages-016.jpg</thumb><thumb lastmod="1185461813000" size="4021">_thumb_pages-017.jpg</thumb><thumb lastmod="1185461813000" size="3225">_thumb_pages-018.jpg</thumb><thumb lastmod="1185461813000" size="3847">_thumb_pages-019.jpg</thumb><thumb lastmod="1185461813000" size="3046">_thumb_pages-020.jpg</thumb><thumb lastmod="1185461813000" size="2633">_thumb_pages-021.jpg</thumb><thumb lastmod="1185461813000" size="4001">_thumb_pages-022.jpg</thumb><thumb lastmod="1185461813000" size="4243">_thumb_pages-023.jpg</thumb></thumbs></presentation>
diff --git a/src/main/webapp/upload/library.xsd b/src/main/webapp/upload/library.xsd
new file mode 100644
index 0000000..71f2b7d
--- /dev/null
+++ b/src/main/webapp/upload/library.xsd
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

+  <xs:element name="presentation">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element ref="originalDocument"/>

+        <xs:element ref="swfDocument"/>

+        <xs:element ref="thumbs"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="originalDocument">

+    <xs:complexType>

+      <xs:simpleContent>

+        <xs:extension base="xs:NCName">

+          <xs:attribute name="lastmod" use="required" type="xs:integer"/>

+          <xs:attribute name="size" use="required" type="xs:integer"/>

+        </xs:extension>

+      </xs:simpleContent>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="swfDocument">

+    <xs:complexType>

+      <xs:simpleContent>

+        <xs:extension base="xs:NCName">

+          <xs:attribute name="lastmod" use="required" type="xs:integer"/>

+          <xs:attribute name="size" use="required" type="xs:integer"/>

+        </xs:extension>

+      </xs:simpleContent>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="thumbs">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="thumb"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="thumb">

+    <xs:complexType>

+      <xs:simpleContent>

+        <xs:extension base="xs:NCName">

+          <xs:attribute name="lastmod" use="required" type="xs:integer"/>

+          <xs:attribute name="size" use="required" type="xs:integer"/>

+        </xs:extension>

+      </xs:simpleContent>

+    </xs:complexType>

+  </xs:element>

+</xs:schema>

diff --git a/src/screenshare.vm b/src/screenshare.vm
new file mode 100644
index 0000000..470daa8
--- /dev/null
+++ b/src/screenshare.vm
@@ -0,0 +1,55 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<jnlp spec='1.0+' codebase='$codebase'>
+	<information> 
+		<title>Screen Sharing Application</title>
+		<vendor>$APP_NAME</vendor> 
+		<homepage>http://openmeetings.apache.org/</homepage>
+		<icon href="icon.jpg" />
+		<icon kind="splash" href="splashicon.jpg" />
+		<description>ScreenViewer Client Application</description>
+		<description kind="short">A File to grab a screen and send it to a Server</description>
+		<offline-allowed/>
+	</information>
+	<security>
+		<all-permissions/>
+	</security>
+	<resources>
+		<j2se version='1.7+'/>
+		$dependencies
+	</resources>
+	<application-desc main-class='org.apache.openmeetings.screen.webstart.CoreScreenShare'>
+		<argument>$protocol</argument>
+		<argument>$host</argument>
+		<argument>$port</argument>
+		<argument>$app</argument>
+		<argument>$userId</argument>
+		<argument>$publicSid</argument>
+		<argument>$labels</argument>
+		<argument>$defaultQuality</argument>
+		<argument>$defaultFps</argument>
+		<argument>$showFps</argument>
+		<argument>$allowRemote</argument>
+		<argument>$allowRecording</argument>
+		<argument>$allowPublishing</argument>
+		<argument>$keystore</argument>
+		<argument>$password</argument>
+	</application-desc>
+</jnlp>
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/down.png b/src/screenshare/java/org/apache/openmeetings/screen/down.png
new file mode 100644
index 0000000..d10b8c6
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/down.png
Binary files differ
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/next.png b/src/screenshare/java/org/apache/openmeetings/screen/next.png
new file mode 100644
index 0000000..e252606
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/next.png
Binary files differ
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/play.png b/src/screenshare/java/org/apache/openmeetings/screen/play.png
new file mode 100644
index 0000000..6d13683
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/play.png
Binary files differ
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/previous.png b/src/screenshare/java/org/apache/openmeetings/screen/previous.png
new file mode 100644
index 0000000..18f9cc1
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/previous.png
Binary files differ
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/stop.png b/src/screenshare/java/org/apache/openmeetings/screen/stop.png
new file mode 100644
index 0000000..8389bf3
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/stop.png
Binary files differ
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/up.png b/src/screenshare/java/org/apache/openmeetings/screen/up.png
new file mode 100644
index 0000000..c03ab0a
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/up.png
Binary files differ
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/AudioTone.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/AudioTone.java
new file mode 100644
index 0000000..0953b66
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/AudioTone.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import javax.sound.sampled.AudioFormat;
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.LineUnavailableException;
+import javax.sound.sampled.SourceDataLine;
+
+public class AudioTone {
+	public static final float SAMPLE_RATE = 44100F;
+
+	public static void play() {
+		byte[] buf = new byte[1];
+		
+		SourceDataLine sdl = null;
+		try {
+		AudioFormat af = new AudioFormat(SAMPLE_RATE, 8, 1, true, false);
+		sdl = AudioSystem.getSourceDataLine(af);
+		sdl = AudioSystem.getSourceDataLine(af);
+		sdl.open(af);
+		sdl.start();
+		for (int i = 0; i < (int)SAMPLE_RATE; ++i) {
+			double angle = i / (SAMPLE_RATE / 440) * 2.0 * Math.PI;
+			buf[0] = (byte) (Math.sin(angle) * 128);
+			sdl.write(buf, 0, 1);
+		}
+		} catch (LineUnavailableException e) {
+			//no-op
+		} finally {
+			if (sdl != null) {
+				sdl.drain();
+				sdl.stop();
+				sdl.close();
+			}
+		}
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/BaseScreenEncoder.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/BaseScreenEncoder.java
new file mode 100644
index 0000000..2b9495b
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/BaseScreenEncoder.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.RenderingHints;
+import java.awt.image.BufferedImage;
+
+public abstract class BaseScreenEncoder implements IScreenEncoder {
+
+	public static BufferedImage resize(BufferedImage _img, Rectangle size) {
+		BufferedImage img = _img;
+		if (img.getWidth() != size.width || img.getHeight() != size.height) {
+			img = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_RGB);
+			
+			Graphics2D graphics2D = img.createGraphics();
+			graphics2D.setRenderingHint(
+				RenderingHints.KEY_INTERPOLATION,
+				RenderingHints.VALUE_INTERPOLATION_BICUBIC);
+			graphics2D.drawImage(_img, 0, 0, size.width, size.height, null);
+			graphics2D.dispose();
+		}
+		return img;
+	}
+	
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/CaptureScreen.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/CaptureScreen.java
new file mode 100644
index 0000000..ac7836b
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/CaptureScreen.java
@@ -0,0 +1,307 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.screen.webstart;

+

+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.FPS;

+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.spinnerHeight;

+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.spinnerWidth;

+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.spinnerX;

+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.spinnerY;

+import static org.quartz.SimpleScheduleBuilder.simpleSchedule;

+import static org.quartz.impl.StdSchedulerFactory.PROP_SCHED_SKIP_UPDATE_CHECK;

+import static org.slf4j.LoggerFactory.getLogger;

+

+import java.awt.AWTException;

+import java.awt.Rectangle;

+import java.awt.Robot;

+import java.io.IOException;

+import java.util.Properties;

+import java.util.concurrent.ArrayBlockingQueue;

+import java.util.concurrent.atomic.AtomicBoolean;

+import java.util.concurrent.atomic.AtomicInteger;

+

+import org.quartz.DisallowConcurrentExecution;

+import org.quartz.Job;

+import org.quartz.JobBuilder;

+import org.quartz.JobDataMap;

+import org.quartz.JobDetail;

+import org.quartz.JobExecutionContext;

+import org.quartz.JobExecutionException;

+import org.quartz.JobKey;

+import org.quartz.Scheduler;

+import org.quartz.SchedulerException;

+import org.quartz.SchedulerFactory;

+import org.quartz.Trigger;

+import org.quartz.TriggerBuilder;

+import org.quartz.impl.StdSchedulerFactory;

+import org.red5.server.api.Red5;

+import org.red5.server.net.rtmp.event.VideoData;

+import org.red5.server.stream.message.RTMPMessage;

+import org.slf4j.Logger;

+

+class CaptureScreen extends Thread {

+	private static final Logger log = getLogger(CaptureScreen.class);

+	private final static String QUARTZ_GROUP_NAME = "ScreenShare";

+	private final static String QUARTZ_CURSOR_TRIGGER_NAME = "CursorTrigger";

+	private final static String QUARTZ_CURSOR_JOB_NAME = "CursorJob";

+	private CoreScreenShare core;

+	private int timeBetweenFrames;

+	private volatile AtomicInteger timestamp = new AtomicInteger(0);

+	private volatile AtomicBoolean sendFrameGuard = new AtomicBoolean(false);

+	private long timeCaptureStarted = 0;

+	private volatile boolean active = true;

+	private IScreenEncoder se;

+	private IScreenShare client;

+	private ArrayBlockingQueue<VideoData> frames = new ArrayBlockingQueue<VideoData>(2);

+	private String host = null;

+	private String app = null;

+	private int port = -1;

+	private int streamId;

+	private boolean startPublish = false;

+	private Scheduler scheduler;

+

+	public CaptureScreen(CoreScreenShare coreScreenShare, IScreenShare client, String host, String app, int port) {

+		core = coreScreenShare;

+		this.client = client;

+		this.host = host;

+		this.app = app;

+		this.port = port;

+		final Properties p = new Properties();

+		p.put(PROP_SCHED_SKIP_UPDATE_CHECK, "true");

+		p.put("org.quartz.threadPool.threadCount", "10");

+		try {

+			SchedulerFactory sf = new StdSchedulerFactory(p);

+			scheduler = sf.getScheduler();

+		} catch (SchedulerException e) {

+			log.error("Unexpected error while creating scheduler", e);

+		}

+	}

+

+	public void release() {

+		try {

+			if (scheduler != null) {

+				scheduler.shutdown(true);

+				scheduler = null;

+			}

+		} catch (Exception e) {

+			log.error("Unexpected error while shutting down scheduler", e);

+		}

+		active = false;

+		timestamp = new AtomicInteger(0);

+		timeCaptureStarted = 0;

+	}

+

+	public void run() {

+		try {

+			while (active && !core.isReadyToRecord()) {

+				Thread.sleep(60);

+			}

+

+			timeBetweenFrames = 1000 / FPS;

+			se = new ScreenV1Encoder(3 * FPS); //send keyframe every 3 seconds

+			timeCaptureStarted = System.currentTimeMillis();

+

+			JobDetail encodeJob = JobBuilder.newJob(EncodeJob.class).withIdentity("EncodeJob", QUARTZ_GROUP_NAME).build();

+			encodeJob.getJobDataMap().put(EncodeJob.CAPTURE_KEY, this);

+			Trigger encodeTrigger = TriggerBuilder.newTrigger()

+					.withIdentity("EncodeTrigger", QUARTZ_GROUP_NAME)

+					.withSchedule(simpleSchedule().withIntervalInMilliseconds(timeBetweenFrames).repeatForever())

+					.build();

+			JobDetail sendJob = JobBuilder.newJob(SendJob.class).withIdentity("SendJob", QUARTZ_GROUP_NAME).build();

+			Trigger sendTrigger = TriggerBuilder.newTrigger()

+					.withIdentity("SendTrigger", QUARTZ_GROUP_NAME)

+					.withSchedule(simpleSchedule().withIntervalInMilliseconds(timeBetweenFrames).repeatForever())

+					.build();

+			sendJob.getJobDataMap().put(SendJob.CAPTURE_KEY, this);

+

+			scheduler.scheduleJob(encodeJob, encodeTrigger);

+			scheduler.scheduleJob(sendJob, sendTrigger);

+			scheduler.start();

+		} catch (Exception e) {

+			log.error("Error while running: ", e);

+		}

+	}

+	

+	/*

+	private void pushAudio(byte[] audio, long ts) {

+		if (startPublish) {

+			buffer.put((byte) 6);

+			buffer.put(audio);

+			buffer.flip();

+	

+			// I can stream audio

+			//packets successfully using linear PCM at 11025Hz. For those packets I

+			//push one byte (0x06) which specifies the format of audio data in a

+			//ByteBuffer, and then real audio data:

+			RTMPMessage rtmpMsg = RTMPMessage.build(new AudioData(buffer), (int) ts);

+			client.publishStreamData(streamId, rtmpMsg);

+		}

+	}

+	*/

+	

+	@DisallowConcurrentExecution

+	public static class EncodeJob implements Job {

+		private static final String CAPTURE_KEY = "capture";

+		Robot robot;

+		Rectangle screen = new Rectangle(spinnerX, spinnerY, spinnerWidth, spinnerHeight);

+		int[][] image = null;

+		

+		public EncodeJob() {

+			try {

+				robot = new Robot();

+			} catch (AWTException e) {

+				log.error("encode: Unexpected Error while creating robot", e);

+			}

+		}

+		

+		@Override

+		public void execute(JobExecutionContext context) throws JobExecutionException {

+			JobDataMap data = context.getJobDetail().getJobDataMap();

+			CaptureScreen capture = (CaptureScreen)data.get(CAPTURE_KEY);

+			

+			long start = 0;

+			if (log.isTraceEnabled()) {

+				start = System.currentTimeMillis();

+			}

+			image = ScreenV1Encoder.getImage(screen, robot);

+			if (log.isTraceEnabled()) {

+				log.trace(String.format("encode: Image was captured in %s ms, size %sk", System.currentTimeMillis() - start, 4 * image.length * image[0].length / 1024));

+				start = System.currentTimeMillis();

+			}

+			try {

+				VideoData vData = capture.se.encode(image);

+				if (log.isTraceEnabled()) {

+					long now = System.currentTimeMillis();

+					log.trace(String.format("encode: Image was encoded in %s ms, timestamp is %s", now - start, now - capture.timeCaptureStarted));

+				}

+				capture.frames.offer(vData);

+				capture.se.createUnalteredFrame();

+			} catch (Exception e) {

+				log.error("Error while encoding: ", e);

+			}

+		}

+	}

+	

+	public static class SendJob implements Job {

+		private static final String CAPTURE_KEY = "capture";

+		public SendJob() {}

+		

+		@Override

+		public void execute(JobExecutionContext context) throws JobExecutionException {

+			JobDataMap data = context.getJobDetail().getJobDataMap();

+			CaptureScreen capture = (CaptureScreen)data.get(CAPTURE_KEY);

+			capture.sendFrameGuard.set(true);

+			if (log.isTraceEnabled()) {

+				long real = System.currentTimeMillis() - capture.timeCaptureStarted;

+				log.trace(String.format("send: Enter method, timestamp: %s, real: %s, diff: %s", capture.timestamp, real, real - capture.timestamp.get()));

+			}

+			VideoData f = capture.frames.poll();

+			if (log.isTraceEnabled()) {

+				log.trace(String.format("send: Getting %s image", f == null ? "DUMMY" : "CAPTURED"));

+			}

+			f = f == null ? capture.se.getUnalteredFrame() : f;

+			if (f != null) {

+				try {

+					capture.pushVideo(f, capture.timestamp.get());

+					if (log.isTraceEnabled()) {

+						long real = System.currentTimeMillis() - capture.timeCaptureStarted;

+						log.trace(String.format("send: Sending video %sk, timestamp: %s, real: %s, diff: %s", f.getData().capacity() / 1024, capture.timestamp, real, real - capture.timestamp.get()));

+					}

+					capture.timestamp.addAndGet(capture.timeBetweenFrames);

+					if (log.isTraceEnabled()) {

+						log.trace(String.format("send: new timestamp: %s", capture.timestamp));

+					}

+				} catch (IOException e) {

+					log.error("Error while sending: ", e);

+				}

+			} else if (log.isTraceEnabled()) {

+				log.trace(String.format("send: nothing to send"));

+			}

+			capture.sendFrameGuard.set(false);

+		}

+	}

+	

+	@DisallowConcurrentExecution

+	public static class CursorJob implements Job {

+		private static final String CAPTURE_KEY = "capture";

+		

+		public CursorJob() {}

+		

+		@Override

+		public void execute(JobExecutionContext context) throws JobExecutionException {

+			JobDataMap data = context.getJobDetail().getJobDataMap();

+			CaptureScreen capture = (CaptureScreen)data.get(CAPTURE_KEY);

+			if (!capture.sendFrameGuard.get()) {

+				capture.core.sendCursorStatus();

+			}

+		}

+	}

+	

+	private void pushVideo(VideoData data, int ts) throws IOException {

+		if (startPublish) {

+			if (Red5.getConnectionLocal() == null) {

+				Red5.setConnectionLocal(client.getConnection());

+			}

+			RTMPMessage rtmpMsg = RTMPMessage.build(data, ts);

+			client.publishStreamData(streamId, rtmpMsg);

+		}

+	}

+

+	public String getHost() {

+		return host;

+	}

+

+	public String getApp() {

+		return app;

+	}

+

+	public int getPort() {

+		return port;

+	}

+

+	public int getStreamId() {

+		return streamId;

+	}

+

+	public void setStreamId(int streamId) {

+		this.streamId = streamId;

+	}

+

+	public void setStartPublish(boolean startPublish) {

+		this.startPublish = startPublish;

+	}

+

+	public void setSendCursor(boolean sendCursor) {

+		try {

+			if (sendCursor) {

+				JobDetail cursorJob = JobBuilder.newJob(CursorJob.class).withIdentity(QUARTZ_CURSOR_JOB_NAME, QUARTZ_GROUP_NAME).build();

+				Trigger cursorTrigger = TriggerBuilder.newTrigger()

+						.withIdentity(QUARTZ_CURSOR_TRIGGER_NAME, QUARTZ_GROUP_NAME)

+						.withSchedule(simpleSchedule().withIntervalInMilliseconds(1000 / Math.min(5, FPS)).repeatForever())

+						.build();

+				cursorJob.getJobDataMap().put(CursorJob.CAPTURE_KEY, this);

+				scheduler.scheduleJob(cursorJob, cursorTrigger);

+			} else {

+				scheduler.deleteJob(JobKey.jobKey(QUARTZ_CURSOR_JOB_NAME, QUARTZ_GROUP_NAME));

+			}

+		} catch (SchedulerException e) {

+			log.error("Unexpected Error schedule/unschedule cursor job", e);

+		}

+	}

+}

diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java
new file mode 100644
index 0000000..42e5ad4
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java
@@ -0,0 +1,779 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import static java.awt.Toolkit.getDefaultToolkit;
+import static java.awt.datatransfer.DataFlavor.stringFlavor;
+import static java.lang.Boolean.TRUE;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.resizeX;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.resizeY;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.spinnerHeight;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.spinnerWidth;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.spinnerX;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.spinnerY;
+import static org.slf4j.LoggerFactory.getLogger;
+
+import java.awt.MouseInfo;
+import java.awt.Point;
+import java.awt.Robot;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.codec.binary.Hex;
+import org.apache.openmeetings.screen.webstart.gui.ScreenSharerFrame;
+import org.red5.client.net.rtmp.INetStreamEventHandler;
+import org.red5.io.utils.ObjectMap;
+import org.red5.server.api.Red5;
+import org.red5.server.api.event.IEvent;
+import org.red5.server.api.service.IPendingServiceCall;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.red5.server.net.ICommand;
+import org.red5.server.net.rtmp.Channel;
+import org.red5.server.net.rtmp.RTMPConnection;
+import org.red5.server.net.rtmp.event.Notify;
+import org.red5.server.net.rtmp.message.Header;
+import org.red5.server.net.rtmp.status.StatusCodes;
+import org.slf4j.Logger;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
+
+public class CoreScreenShare implements IPendingServiceCallback, INetStreamEventHandler {
+	private static final Logger log = getLogger(CoreScreenShare.class);
+
+	enum Protocol {
+		rtmp, rtmpt, rtmpe, rtmps
+	}
+	private IScreenShare instance = null;
+	private IScreenShare controlInstance = null;
+	private Protocol protocol;
+	private String host;
+	private String app;
+	private int port;
+	
+	public String publishName;
+	private CaptureScreen capture = null;
+	private RTMPClientPublish publishClient = null;
+
+	private ScreenSharerFrame frame;
+
+	public int defaultQuality = 1;
+	public int defaultFPS = 10;
+	public boolean showFPS = true;
+	public boolean allowRemote = true;
+
+	public Long userId = null;
+	private boolean allowRecording = true;
+	private boolean allowPublishing = true;
+
+	private boolean startStreaming = false;
+	private boolean startRecording = false;
+	private boolean startPublishing = false;
+	public float Ampl_factor = 1f;
+	public boolean isConnected = false;
+	private boolean readyToRecord = false;
+	private boolean audioNotify = false;
+	private boolean remoteEnabled = true;
+
+	public Map<Integer, Boolean> currentPressedKeys = new HashMap<Integer, Boolean>();
+
+	private CaptureScreen getCapture() {
+		if (capture == null) {
+			capture = new CaptureScreen(this, instance, host, app, port);
+		}
+		return capture;
+	}
+	// ------------------------------------------------------------------------
+	//
+	// Main
+	//
+	// ------------------------------------------------------------------------
+
+	public CoreScreenShare(String[] args) {
+		try {
+			System.setProperty("org.terracotta.quartz.skipUpdateCheck", "true");
+			for (String arg : args) {
+				log.debug("arg: " + arg);
+			}
+			String[] textArray = null;
+			if (args.length > 12) {
+				protocol = Protocol.valueOf(args[0]);
+				host = args[1];
+				port = Integer.parseInt(args[2]);
+				app = args[3];
+				userId = Long.parseLong(args[4]);
+				publishName = args[5];
+				String labelTexts = args[6];
+				defaultQuality = Integer.parseInt(args[7]);
+				defaultFPS = Integer.parseInt(args[8]);
+				showFPS = bool(args[9]);
+				allowRemote = bool(args[10]);
+				remoteEnabled = allowRemote;
+				allowRecording = bool(args[11]);
+				allowPublishing = bool(args[12]);
+
+				if (labelTexts.length() > 0) {
+					textArray = labelTexts.split(";");
+
+					log.debug("labelTexts :: " + labelTexts);
+
+					log.debug("textArray Length " + textArray.length);
+
+					for (int i = 0; i < textArray.length; i++) {
+						log.debug(i + " :: " + textArray[i]);
+					}
+				}
+				switch (protocol) {
+					case rtmp:
+						instance = new RTMPScreenShare(this);
+						controlInstance = new RTMPScreenShare(this);
+						break;
+					case rtmpt:
+						instance = new RTMPTScreenShare(this);
+						controlInstance = new RTMPTScreenShare(this);
+						break;
+					case rtmps:
+						RTMPSScreenShare client = new RTMPSScreenShare(this);
+						client.setKeystoreBytes(Hex.decodeHex(args[13].toCharArray()));
+						client.setKeyStorePassword(args[14]);
+						instance = client;
+						RTMPSScreenShare controlClient = new RTMPSScreenShare(this);
+						controlClient.setKeystoreBytes(Hex.decodeHex(args[13].toCharArray()));
+						controlClient.setKeyStorePassword(args[14]);
+						controlInstance = controlClient;
+						break;
+					case rtmpe:
+					default:
+						throw new Exception("Unsupported protocol");
+				}
+				instance.setServiceProvider(this);
+				controlInstance.setServiceProvider(this);
+				log.debug(String.format("host: %s, app: %s, port: %s, publish: %s", host, port, app, publishName));
+			} else {
+				System.exit(0);
+			}
+
+			createWindow(textArray);
+		} catch (Exception err) {
+			log.error("", err);
+		}
+	}
+
+	public static void main(String[] args) {
+		new CoreScreenShare(args);
+	}
+	
+	// ------------------------------------------------------------------------
+	//
+	// GUI
+	//
+	// ------------------------------------------------------------------------
+	public void createWindow(String[] textArray) {
+		try {
+			frame = new ScreenSharerFrame(this, textArray);
+			frame.setVisible(true);
+			frame.setRecordingTabEnabled(allowRecording);
+			frame.setPublishingTabEnabled(allowPublishing);
+			log.debug("initialized");
+		} catch (Exception err) {
+			log.error("createWindow Exception: ", err);
+		}
+	}
+
+	public void sendCursorStatus() {
+		try {
+			Point mouseP = MouseInfo.getPointerInfo().getLocation();
+
+			float scaleFactor = (1.0f * resizeX) / spinnerWidth;
+
+			// Real size: Real mouse position = Resize : X
+			int x = (int)(Ampl_factor * (mouseP.getX() - spinnerX) * scaleFactor);
+			int y = (int)(Ampl_factor * (mouseP.getY() - spinnerY) * scaleFactor);
+
+			Map<String, Object> cursorPosition = new HashMap<String, Object>();
+			cursorPosition.put("publicSID", publishName);
+			cursorPosition.put("cursor_x", x);
+			cursorPosition.put("cursor_y", y);
+
+			if (controlInstance.getConnection() != null) {
+				if (Red5.getConnectionLocal() == null) {
+					Red5.setConnectionLocal(controlInstance.getConnection());
+				}
+				controlInstance.invoke("setNewCursorPosition", new Object[] { cursorPosition }, this);
+			}
+		} catch (NullPointerException npe) {
+			//noop
+		} catch (Exception err) {
+			frame.setStatus("Exception: " + err);
+			log.error("[sendCursorStatus]", err);
+		}
+	}
+
+	public void setConnectionAsSharingClient() {
+		log.debug("########## setConnectionAsSharingClient");
+		try {
+			if (Red5.getConnectionLocal() == null) {
+				Red5.setConnectionLocal(controlInstance.getConnection());
+			}
+			Map<String, Object> map = new HashMap<String, Object>();
+			map.put("screenX", spinnerX);
+			map.put("screenY", spinnerY);
+
+			int scaledWidth = (int)(Ampl_factor * resizeX);
+			int scaledHeight = (int)(Ampl_factor * resizeY);
+
+			map.put("screenWidth", scaledWidth);
+			map.put("screenHeight", scaledHeight);
+
+			map.put("startRecording", startRecording);
+			map.put("startStreaming", startStreaming);
+			map.put("startPublishing", startPublishing);
+			map.put("publishingHost", frame.getPublishHost());
+			map.put("publishingApp", frame.getPublishApp());
+			map.put("publishingId", frame.getPublishId());
+			if (Red5.getConnectionLocal() == null) {
+				Red5.setConnectionLocal(controlInstance.getConnection());
+			}
+			controlInstance.invoke("setConnectionAsSharingClient", new Object[] { map }, this);
+		} catch (Exception err) {
+			frame.setStatus("Error: " + err.getLocalizedMessage());
+			log.error("[setConnectionAsSharingClient]", err);
+		}
+	}
+
+	public void streamingStart() {
+		startStreaming = true;
+		captureScreenStart();
+	}
+	
+	public void recordingStart() {
+		startRecording= true;
+		captureScreenStart();
+	}
+	
+	public void publishingStart() {
+		startPublishing = true;
+		captureScreenStart();
+	}
+	
+	private void connect(String parentSid, boolean control) {
+		Map<String, Object> map = instance.makeDefaultConnectionParams(host, port, app);
+		map.put("screenClient", true);
+		map.put("userId", userId);
+		map.put("parentSid", parentSid);
+		(control ? controlInstance : instance).connect(host, port, map, this);
+	}
+	
+	private void captureScreenStart() {
+		try {
+			log.debug("captureScreenStart");
+			
+			if (!isConnected) {
+				connect(publishName, false);
+			} else {
+				setConnectionAsSharingClient();
+			}
+		} catch (Exception err) {
+			log.error("captureScreenStart Exception: ", err);
+			frame.setStatus("Exception: " + err);
+		}
+	}
+
+	public void streamingStop() {
+		startStreaming = false;
+		captureScreenStop("stopStreaming");
+	}
+	
+	public void recordingStop() {
+		startRecording = false;
+		captureScreenStop("stopRecording");
+	}
+	
+	public void publishingStop() {
+		startPublishing = false;
+		captureScreenStop("stopPublishing");
+	}
+	
+	private void captureScreenStop(String action) {
+		try {
+			log.debug("INVOKE screenSharerAction" );
+
+			Map<String, Object> map = new HashMap<String, Object>();
+			map.put(action, true);
+
+			if (Red5.getConnectionLocal() == null) {
+				Red5.setConnectionLocal(controlInstance.getConnection());
+			}
+			controlInstance.invoke("screenSharerAction", new Object[] { map }, this);
+		} catch (Exception err) {
+			log.error("captureScreenStop Exception: ", err);
+			frame.setStatus("Exception: " + err);
+		}
+	}
+
+	public void stopStreaming() {
+		frame.setSharingStatus(false, !startPublishing && !startRecording && !startStreaming);
+		startStreaming = false;
+	}
+	
+	public void stopRecording() {
+		frame.setRecordingStatus(false, !startPublishing && !startRecording && !startStreaming);
+		startRecording = false;
+	}
+	
+	public void stopPublishing() {
+		frame.setPublishingStatus(false, !startPublishing && !startRecording && !startStreaming);
+		startPublishing = false;
+		if (publishClient != null) {
+			publishClient.disconnect();
+			publishClient = null;
+		}
+	}
+	
+	synchronized public boolean isReadyToRecord() {
+		return readyToRecord;
+	}
+	
+	synchronized private void setReadyToRecord(boolean readyToRecord) {
+		this.readyToRecord = readyToRecord;
+	}
+	
+	protected void onCommand(RTMPConnection conn, Channel channel, Header source, ICommand command) {
+		if (!(command instanceof Notify)) {
+			return;
+		}
+		Notify invoke = (Notify)command;
+		if (invoke.getType() == IEvent.Type.STREAM_DATA) {
+			return;
+		}
+		
+		String method = invoke.getCall().getServiceMethodName();
+		if ("stopStream".equals(method)) {
+			stopStream();
+		} else if ("sendRemoteCursorEvent".equals(method)) {
+			sendRemoteCursorEvent(invoke.getCall().getArguments()[0]);
+		} else if ("screenSharerAction".equals(method)) {
+			Object[] args = invoke.getCall().getArguments();
+			if (args != null && args.length > 0) {
+				@SuppressWarnings("unchecked")
+				Map<String, Object> params = (Map<String, Object>)args[0];
+				if (bool(params.get("stopPublishing"))) {
+					stopPublishing();
+				}
+				if (params.containsKey("error")) {
+					frame.setStatus("" + params.get("error"));
+				}
+			}
+		}
+	}
+
+	public void stopStream() {
+		try {
+			log.debug("ScreenShare stopStream");
+
+			stopStreaming();
+			stopRecording();
+			stopPublishing();
+			isConnected = false;
+
+			instance.disconnect();
+			controlInstance.disconnect();
+			setReadyToRecord(false);
+			getCapture().setStartPublish(false);
+			getCapture().release();
+			capture = null;
+		} catch (Exception e) {
+			log.error("ScreenShare stopStream exception " + e);
+		}
+
+	}
+
+	public void onStreamEvent(Notify notify) {
+		log.debug( "onStreamEvent " + notify );
+
+		@SuppressWarnings("rawtypes")
+		ObjectMap map = (ObjectMap) notify.getCall().getArguments()[0];
+		String code = (String) map.get("code");
+
+		if (StatusCodes.NS_PUBLISH_START.equals(code)) {
+			log.debug( "onStreamEvent Publish start" );
+			getCapture().setStartPublish(true);
+			setReadyToRecord(true);
+		}
+	}
+
+	private boolean bool(Object b) {
+		return TRUE.equals(Boolean.valueOf("" + b));
+	}
+	
+	private int getInt(Map<String, Object> returnMap, String key) {
+		return Integer.valueOf(returnMap.get(key).toString()).intValue();
+	}
+	
+	private float getFloat(Map<String, Object> returnMap, String key) {
+		return Float.valueOf(returnMap.get(key).toString()).floatValue();
+	}
+	
+	private Point getCoordinates(Map<String, Object> returnMap) {
+		float scaleFactorX = spinnerWidth / (Ampl_factor * resizeX);
+		float scaleFactorY = spinnerHeight / (Ampl_factor * resizeY);
+
+		int x = Math.round(scaleFactorX * getFloat(returnMap, "x") + spinnerX);
+		int y = Math.round(scaleFactorY * getFloat(returnMap, "y") + spinnerY);
+		return new Point(x, y);
+	}
+	
+	public void sendRemoteCursorEvent(Object obj) {
+		try {
+			if (!remoteEnabled) {
+				return;
+			}
+			log.trace("#### sendRemoteCursorEvent ");
+			log.trace("Result Map Type "+obj.getClass().getName());
+
+			@SuppressWarnings("unchecked")
+			Map<String, Object> returnMap = (Map<String, Object>)obj;
+
+			String action = "" + returnMap.get("action");
+
+			if (action.equals("onmouseup")) {
+				Robot robot = new Robot();
+				
+				Point p = getCoordinates(returnMap);
+				robot.mouseMove(p.x, p.y);
+				robot.mouseRelease(InputEvent.BUTTON1_MASK);
+			} else if (action.equals("onmousedown")) {
+				Robot robot = new Robot();
+
+				Point p = getCoordinates(returnMap);
+				robot.mouseMove(p.x, p.y);
+				robot.mousePress(InputEvent.BUTTON1_MASK);
+			} else if (action.equals("mousePos")) {
+				Robot robot = new Robot();
+
+				Point p = getCoordinates(returnMap);
+				robot.mouseMove(p.x, p.y);
+			} else if (action.equals("onkeydown")) {
+				Robot robot = new Robot();
+
+				int key = getInt(returnMap, "k");
+
+				// logger.debug("key onkeydown -1 "+key);
+				boolean doAction = true;
+
+				if (key == 221) {
+					key = 61;
+				} else if (key == -1) {
+					String charValue = returnMap.get("c").toString();
+
+					// key = KeyEvent.VK_ADD;
+					doAction = false;
+
+					for (Integer storedKey : currentPressedKeys.keySet()) {
+						robot.keyRelease(storedKey);
+					}
+
+					currentPressedKeys = new HashMap<Integer, Boolean>();
+
+					pressSpecialSign(charValue, robot);
+				} else if (key == 188) {
+					key = 44;
+				} else if (key == 189) {
+					key = 109;
+				} else if (key == 190) {
+					key = 46;
+				} else if (key == 191) {
+					key = 47;
+				} else if (key == 13) {
+					key = KeyEvent.VK_ENTER;
+				}
+
+				if (doAction) {
+					currentPressedKeys.put(key, true);
+
+					robot.keyPress(key);
+				}
+			} else if (action.equals("onkeyup")) {
+				Robot robot = new Robot();
+
+				int key = getInt(returnMap, "k");
+
+				boolean doAction = true;
+
+				if (key == 221) {
+					key = 61;
+				} else if (key == -1) {
+					doAction = false;
+				} else if (key == 188) {
+					key = 44;
+				} else if (key == 189) {
+					key = 109;
+				} else if (key == 190) {
+					key = 46;
+				} else if (key == 191) {
+					key = 47;
+				} else if (key == 13) {
+					key = KeyEvent.VK_ENTER;
+				}
+
+				// logger.debug("key onkeyup 2- "+key);
+
+				if (doAction) {
+					if (currentPressedKeys.containsKey(key)) {
+						currentPressedKeys.remove(key);
+
+						robot.keyRelease(key);
+					}
+				}
+			} else if (action.equals("paste")) {
+				Robot robot = new Robot();
+
+				String paste = returnMap.get("paste").toString();
+
+				pressSpecialSign(paste, robot);
+			} else if (action.equals("copy")) {
+				Robot robot = new Robot();
+
+				String paste = this.getHighlightedText(robot);
+
+				Map<Integer, String> map = new HashMap<Integer, String>();
+				map.put(0, "copiedText");
+				map.put(1, paste);
+
+				String clientId = returnMap.get("clientId").toString();
+
+				controlInstance.invoke("sendMessageWithClientById", new Object[]{map, clientId}, this);
+			} else if (action.equals("show")) {
+				String paste = getClipboardText();
+
+				Map<Integer, String> map = new HashMap<Integer, String>();
+				map.put(0, "copiedText");
+				map.put(1, paste);
+
+				String clientId = returnMap.get("clientId").toString();
+
+				controlInstance.invoke("sendMessageWithClientById", new Object[]{map, clientId}, this);
+			}
+		} catch (Exception err) {
+			log.error("[sendRemoteCursorEvent]", err);
+		}
+	}
+
+	public String getClipboardText() {
+		try {
+			// get the system clipboard
+			Clipboard systemClipboard = getDefaultToolkit().getSystemClipboard();
+
+			// get the contents on the clipboard in a
+			// transferable object
+			Transferable clipboardContents = systemClipboard.getContents(null);
+
+			// check if clipboard is empty
+			if (clipboardContents == null) {
+				// Clipboard is empty!!!
+				return ("");
+
+				// see if DataFlavor of
+				// DataFlavor.stringFlavor is supported
+			} else if (clipboardContents.isDataFlavorSupported(stringFlavor)) {
+				// return text content
+				String returnText = (String) clipboardContents.getTransferData(stringFlavor);
+
+				return returnText;
+			}
+
+			return "";
+		} catch (Exception e) {
+			log.error("Unexpected exception while getting clipboard text", e);
+		}
+		return "";
+	}
+
+	private void pressSequence(Robot robot, long delay, int... codes) throws InterruptedException {
+		for (int code : codes) {
+			robot.keyPress(code);
+			Thread.sleep(delay);
+		}
+	}
+	
+	private String getHighlightedText(Robot robot) {
+		try {
+			if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") >= 0) {
+				// pressing STRG+C == copy
+				pressSequence(robot, 200, KeyEvent.VK_CONTROL, KeyEvent.VK_C, KeyEvent.VK_C, KeyEvent.VK_CONTROL);
+			} else {
+				// Macintosh simulate Copy
+				pressSequence(robot, 200, 157, 67, 67, 157);
+			}
+			return getClipboardText();
+		} catch (Exception e) {
+			log.error("Unexpected exception while getting highlighted text", e);
+		}
+		return "";
+	}
+
+	private void pressSpecialSign(String charValue, Robot robot) {
+		Clipboard clippy = getDefaultToolkit().getSystemClipboard();
+		try {
+			Transferable transferableText = new StringSelection(charValue);
+			clippy.setContents(transferableText, null);
+
+			if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") >= 0) {
+				// pressing STRG+V == insert-mode
+				pressSequence(robot, 100, KeyEvent.VK_CONTROL, KeyEvent.VK_V, KeyEvent.VK_V, KeyEvent.VK_CONTROL);
+			} else {
+				// Macintosh simulate Insert
+				pressSequence(robot, 100, 157, 86, 86, 157);
+			}
+		} catch (Exception e) {
+			log.error("Unexpected exception while pressSpecialSign", e);
+		}
+	}
+
+	public void resultReceived(IPendingServiceCall call) {
+		try {
+
+			log.trace("service call result: " + call);
+
+			String method = call == null ? null : call.getServiceMethodName();
+			Object o = call == null ? null : call.getResult();
+			log.trace("call ### get Method Name " + method);
+			if ("connect".equals(method)) {
+				if (o instanceof Map) {
+					@SuppressWarnings("unchecked")
+					Map<String, Object> map = (Map<String, Object>) o;
+					Object code = map.get("code");
+					if ("NetConnection.Connect.Rejected".equals(code) || "NetConnection.Connect.Failed".equals(code)) {
+						frame.setStatus(String.format("Error: %s %s", code, map.get("description")));
+						return;
+					}
+				}
+				if (!isConnected) {
+					instance.invoke("getPublicSID", null, this);
+				} else {
+					setConnectionAsSharingClient();
+				}
+				isConnected = true;
+			} else if ("getPublicSID".equals(method)) {
+				connect((String)o, true);
+			} else if ("setConnectionAsSharingClient".equals(method)) {
+				@SuppressWarnings("unchecked")
+				Map<String, Object> returnMap = (Map<String, Object>) o;
+
+				if (o == null || !bool(returnMap.get("alreadyPublished"))) {
+					log.trace("Stream not yet started - do it ");
+
+					instance.createStream(this);
+				} else {
+					log.trace("The Stream was already started ");
+				}
+				if (returnMap != null) {
+					Object modus = returnMap.get("modus");
+					if ("startStreaming".equals(modus)) {
+						frame.setSharingStatus(true, false);
+					}
+					if ("startRecording".equals(modus)) {
+						frame.setRecordingStatus(true, false);
+					}
+					if ("startPublishing".equals(modus)) {
+						frame.setPublishingStatus(true, false);
+						publishClient = new RTMPClientPublish(
+							this
+							, frame.getPublishHost()
+							, frame.getPublishApp()
+							, frame.getPublishId());
+						publishClient.connect();
+					}
+				} else {
+					throw new Exception("Could not aquire modus for event setConnectionAsSharingClient");
+				}
+
+			} else if ("createStream".equals(method)) {
+				if (startRecording || startStreaming) {
+					if (call.getResult() != null) {
+						getCapture().setStreamId((Integer)call.getResult());
+					}
+					log.debug("createPublishStream result stream id: {}; name: {}", getCapture().getStreamId(), publishName);
+					instance.publish(getCapture().getStreamId(), publishName, "live", this);
+	
+					log.debug("setup capture thread spinnerWidth = {}; spinnerHeight = {};", spinnerWidth, spinnerHeight);
+	
+					if (!getCapture().isAlive()) {
+						getCapture().setSendCursor(startStreaming);
+						getCapture().start();
+					}
+				}
+			} else if ("screenSharerAction".equals(method)) {
+				if (log.isTraceEnabled()) {
+					log.trace("Result Map Type " + (o == null ? null : o.getClass().getName()));
+				}
+
+				@SuppressWarnings("unchecked")
+				Map<String, Object> returnMap = (Map<String, Object>)o;
+				Object result = returnMap.get("result");
+				if ("stopAll".equals(result)) {
+					log.trace("Stopping to stream, there is neither a Desktop Sharing nor Recording anymore");
+					stopStream();
+				} else if ("stopSharingOnly".equals(result)) {
+					stopStreaming();
+				} else if ("stopRecordingOnly".equals(result)) {
+					stopRecording();
+				} else if ("stopPublishingOnly".equals(result)) {
+					stopPublishing();
+				}
+			} else if ("setNewCursorPosition".equals(method)) {
+				// Do not do anything
+			} else {
+				log.debug("Unknown method " + method);
+			}
+
+		} catch (Exception err) {
+			log.error("[resultReceived]", err);
+		}
+	}
+
+	public boolean isAudioNotify() {
+		return audioNotify;
+	}
+
+	public void setAudioNotify(boolean audioNotify) {
+		this.audioNotify = audioNotify;
+	}
+
+	public boolean isRemoteEnabled() {
+		return remoteEnabled;
+	}
+
+	public void setRemoteEnabled(boolean remoteEnabled) {
+		this.remoteEnabled = remoteEnabled;
+	}
+	
+	public void setDeadlockGuard(RTMPConnection conn) {
+		ThreadPoolTaskScheduler deadlockGuard = new ThreadPoolTaskScheduler();
+		deadlockGuard.setPoolSize(16);
+		deadlockGuard.setDaemon(false);
+		deadlockGuard.setWaitForTasksToCompleteOnShutdown(true);
+		deadlockGuard.setThreadNamePrefix("DeadlockGuardScheduler-");
+		deadlockGuard.afterPropertiesSet();
+		conn.setDeadlockGuardScheduler(deadlockGuard);
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/IScreenEncoder.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/IScreenEncoder.java
new file mode 100644
index 0000000..69acef3
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/IScreenEncoder.java
@@ -0,0 +1,33 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.screen.webstart;

+

+import java.io.IOException;

+

+import org.red5.server.net.rtmp.event.VideoData;

+

+public interface IScreenEncoder {

+	void createUnalteredFrame() throws IOException;

+	

+	VideoData getUnalteredFrame();

+

+	VideoData encode(int[][] img) throws IOException;

+	

+	void reset();

+}

diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/IScreenShare.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/IScreenShare.java
new file mode 100644
index 0000000..8242a8a
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/IScreenShare.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import java.util.Map;
+
+import org.red5.client.net.rtmp.ClientExceptionHandler;
+import org.red5.client.net.rtmp.INetStreamEventHandler;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.red5.server.messaging.IMessage;
+import org.red5.server.net.rtmp.RTMPConnection;
+
+public interface IScreenShare extends ClientExceptionHandler {
+	RTMPConnection getConnection();
+	void invoke(String method, Object[] params, IPendingServiceCallback callback);
+	Map<String, Object> makeDefaultConnectionParams(String server, int port, String application);
+	void connect(String server, int port, Map<String, Object> connectionParams, IPendingServiceCallback connectCallback);
+	void setServiceProvider(Object serviceProvider);
+	void disconnect();
+	void createStream(IPendingServiceCallback callback);
+	void publish(int streamId, String name, String mode, INetStreamEventHandler handler);
+	void publishStreamData(int streamId, IMessage message);
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPClientPublish.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPClientPublish.java
new file mode 100644
index 0000000..987f22a
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPClientPublish.java
@@ -0,0 +1,100 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.screen.webstart;

+

+import org.red5.client.net.rtmp.INetStreamEventHandler;

+import org.red5.client.net.rtmp.RTMPClient;

+import org.red5.server.api.service.IPendingServiceCall;

+import org.red5.server.api.service.IPendingServiceCallback;

+import org.red5.server.net.ICommand;

+import org.red5.server.net.rtmp.Channel;

+import org.red5.server.net.rtmp.RTMPConnection;

+import org.red5.server.net.rtmp.event.Notify;

+import org.red5.server.net.rtmp.message.Header;

+import org.slf4j.Logger;

+import org.slf4j.LoggerFactory;

+

+class RTMPClientPublish extends RTMPClient implements IPendingServiceCallback, INetStreamEventHandler, IScreenShare {

+	private static final Logger logger = LoggerFactory.getLogger(RTMPClientPublish.class);

+	private final CaptureScreen publishScreen;

+	private String id;

+	private CoreScreenShare core;

+	

+	public void setCore(CoreScreenShare core) {

+		this.core = core;

+	}

+	

+	RTMPClientPublish(CoreScreenShare core, String host, String app, String id) {

+		this.id = id;

+		this.core = core;

+		publishScreen = new CaptureScreen(core, this, host, app, 1935);

+	}

+

+	public void connect() {

+		super.connect(publishScreen.getHost(), 1935, publishScreen.getApp(), this);

+	}

+	

+	@Override

+	public void handleException(Throwable throwable) {

+		logger.error("ERROR", throwable);

+	}

+

+	@Override

+	public void connectionOpened(RTMPConnection conn) {

+		super.connectionOpened(conn);

+		createStream(this);

+	}

+	

+	@Override

+	public void connectionClosed(RTMPConnection conn) {

+		super.connectionClosed(conn);

+		connectionClosed();

+	}

+	

+	private void connectionClosed() {

+		publishScreen.setStartPublish(false);

+		publishScreen.release();

+		core.publishingStop();

+	}

+	

+	@Override

+	protected void onCommand(RTMPConnection conn, Channel channel, Header source, ICommand command) {

+		super.onCommand(conn, channel, source, command);

+	}

+	

+	public void resultReceived(IPendingServiceCall call) {

+		String method = call == null ? null : call.getServiceMethodName();

+		logger.trace("call ### get Method Name " + method);

+		if ("connect".equals(method)) {

+			//setConnectionAsSharingClient(); //FIXME

+		} else if ("createStream".equals(method)) {

+			if (call.getResult() != null) {

+				publishScreen.setStreamId((Integer)call.getResult());

+				publish(publishScreen.getStreamId(), id, "live", this);

+				publishScreen.setStartPublish(true);

+				publishScreen.start();

+			} else {

+				connectionClosed();

+			}

+		}

+	}

+

+	public void onStreamEvent(Notify notify) {

+	}

+}
\ No newline at end of file
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPSScreenShare.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPSScreenShare.java
new file mode 100644
index 0000000..fa3ce07
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPSScreenShare.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import org.red5.client.net.rtmps.RTMPSClient;
+import org.red5.server.api.service.IPendingServiceCallback;
+import org.red5.server.net.ICommand;
+import org.red5.server.net.rtmp.Channel;
+import org.red5.server.net.rtmp.RTMPConnection;
+import org.red5.server.net.rtmp.message.Header;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RTMPSScreenShare extends RTMPSClient implements IScreenShare {
+	private static final Logger logger = LoggerFactory.getLogger(RTMPSScreenShare.class);
+
+	private final CoreScreenShare core;
+
+	public RTMPSScreenShare(CoreScreenShare core) {
+		this.core = core;
+	};
+
+	@Override
+	public void connect(String server, int port, String application, IPendingServiceCallback connectCallback) {
+		try { //FIXME need to be removed
+			super.connect(server, port, application, connectCallback);
+		} catch (NullPointerException npe) {
+			//no op, since RTMPSClient throws NPE
+		}
+	}
+	
+	// ------------------------------------------------------------------------
+	//
+	// Override
+	//
+	// ------------------------------------------------------------------------
+	@Override
+	public void connectionOpened(RTMPConnection conn) {
+		logger.debug("connection opened");
+		super.connectionOpened(conn);
+		core.setDeadlockGuard(conn);
+	}
+
+	@Override
+	public void connectionClosed(RTMPConnection conn) {
+		logger.debug("connection closed");
+		super.connectionClosed(conn);
+		if (core.isAudioNotify()) {
+			AudioTone.play();
+		}
+		core.stopStream();
+	}
+
+	@Override
+	protected void onCommand(RTMPConnection conn, Channel channel, Header source, ICommand command) {
+		super.onCommand(conn, channel, source, command);
+		core.onCommand(conn, channel, source, command);
+	}
+
+	@Override
+	public void handleException(Throwable throwable) {
+		logger.error("{}", new Object[] { throwable.getCause() });
+		System.out.println(throwable.getCause());
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPScreenShare.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPScreenShare.java
new file mode 100644
index 0000000..c4841f0
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPScreenShare.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import org.red5.client.net.rtmp.RTMPClient;
+import org.red5.server.net.ICommand;
+import org.red5.server.net.rtmp.Channel;
+import org.red5.server.net.rtmp.RTMPConnection;
+import org.red5.server.net.rtmp.message.Header;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RTMPScreenShare extends RTMPClient implements IScreenShare {
+	private static final Logger logger = LoggerFactory.getLogger(RTMPScreenShare.class);
+
+	private final CoreScreenShare core;
+
+	public RTMPScreenShare(CoreScreenShare core) {
+		this.core = core;
+	}
+
+	// ------------------------------------------------------------------------
+	//
+	// Override
+	//
+	// ------------------------------------------------------------------------
+	@Override
+	public void connectionOpened(RTMPConnection conn) {
+		logger.debug("connection opened");
+		super.connectionOpened(conn);
+		core.setDeadlockGuard(conn);
+	}
+
+	@Override
+	public void connectionClosed(RTMPConnection conn) {
+		logger.debug("connection closed");
+		super.connectionClosed(conn);
+		if (core.isAudioNotify()) {
+			AudioTone.play();
+		}
+		core.stopStream();
+	}
+
+	@Override
+	protected void onCommand(RTMPConnection conn, Channel channel, Header source, ICommand command) {
+		super.onCommand(conn, channel, source, command);
+		core.onCommand(conn, channel, source, command);
+	}
+
+	@Override
+	public void handleException(Throwable throwable) {
+		logger.error("{}", new Object[] { throwable.getCause() });
+		System.out.println(throwable.getCause());
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPTScreenShare.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPTScreenShare.java
new file mode 100644
index 0000000..450676d
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/RTMPTScreenShare.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart;
+
+import org.red5.client.net.rtmpt.RTMPTClient;
+import org.red5.server.net.ICommand;
+import org.red5.server.net.rtmp.Channel;
+import org.red5.server.net.rtmp.RTMPConnection;
+import org.red5.server.net.rtmp.message.Header;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RTMPTScreenShare extends RTMPTClient implements IScreenShare {
+	private static final Logger logger = LoggerFactory.getLogger(RTMPTScreenShare.class);
+
+	private final CoreScreenShare core;
+
+	public RTMPTScreenShare(CoreScreenShare core) {
+		this.core = core;
+	};
+
+	// ------------------------------------------------------------------------
+	//
+	// Override
+	//
+	// ------------------------------------------------------------------------
+	@Override
+	public void connectionOpened(RTMPConnection conn) {
+		logger.debug("connection opened");
+		super.connectionOpened(conn);
+		core.setDeadlockGuard(conn);
+	}
+
+	@Override
+	public void connectionClosed(RTMPConnection conn) {
+		logger.debug("connection closed");
+		super.connectionClosed(conn);
+		if (core.isAudioNotify()) {
+			AudioTone.play();
+		}
+		core.stopStream();
+	}
+
+	@Override
+	protected void onCommand(RTMPConnection conn, Channel channel, Header source, ICommand command) {
+		super.onCommand(conn, channel, source, command);
+		core.onCommand(conn, channel, source, command);
+	}
+
+	@Override
+	public void handleException(Throwable throwable) {
+		logger.error("{}", new Object[] { throwable.getCause() });
+		System.out.println(throwable.getCause());
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/ScreenV1Encoder.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/ScreenV1Encoder.java
new file mode 100644
index 0000000..e55eee7
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/ScreenV1Encoder.java
@@ -0,0 +1,198 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.screen.webstart;

+

+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.resizeX;

+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.resizeY;

+import static org.red5.io.IoConstants.FLAG_CODEC_SCREEN;

+import static org.red5.io.IoConstants.FLAG_FRAMETYPE_INTERFRAME;

+import static org.red5.io.IoConstants.FLAG_FRAMETYPE_KEYFRAME;

+

+import java.awt.Rectangle;

+import java.awt.Robot;

+import java.awt.image.BufferedImage;

+import java.io.ByteArrayOutputStream;

+import java.io.IOException;

+import java.io.OutputStream;

+import java.util.zip.Deflater;

+

+import org.apache.mina.core.buffer.IoBuffer;

+import org.red5.server.net.rtmp.event.VideoData;

+

+public class ScreenV1Encoder extends BaseScreenEncoder {

+	private int[][] last = null;

+	private static int KEY_FRAME_INDEX = 25;

+	private static int DEFAULT_BLOCK_SIZE = 32;

+	private static int DEFAULT_SCREEN_WIDTH = 1920;

+	private static int DEFAULT_SCREEN_HEIGHT = 1080;

+	private int keyFrameIndex;

+	private int frameCount = 0;

+	private int blockSize;

+	private ByteArrayOutputStream ba = new ByteArrayOutputStream(50 + 3 * DEFAULT_SCREEN_WIDTH * DEFAULT_SCREEN_HEIGHT);

+	private byte[] areaBuf = null;

+	private Deflater d = new Deflater(Deflater.DEFAULT_COMPRESSION);

+	private byte[] zipBuf = null;

+	private VideoData unalteredFrame = null;

+	

+	public ScreenV1Encoder() {

+		this(KEY_FRAME_INDEX, DEFAULT_BLOCK_SIZE);

+	}

+	

+	public ScreenV1Encoder(int keyFrameIndex) {

+		this(keyFrameIndex, DEFAULT_BLOCK_SIZE);

+	}

+	

+	//will create square blocks

+	public ScreenV1Encoder(int keyFrameIndex, int blockSize) {

+		this.keyFrameIndex = keyFrameIndex;

+		if (blockSize < 16 || blockSize > 256 || blockSize % 16 != 0) {

+			throw new RuntimeException("Invalid block size passed: " + blockSize + " should be: 'from 16 to 256 in multiples of 16'");

+		}

+		this.blockSize = blockSize;

+

+		areaBuf = new byte[3 * blockSize * blockSize];

+		zipBuf = new byte[3 * blockSize * blockSize];

+	}

+

+	private VideoData getData(byte[] data) {

+		IoBuffer buf = IoBuffer.allocate(data.length);

+		buf.clear();

+		buf.put(data);

+		buf.flip();

+		return new VideoData(buf);

+	}

+	

+	public void createUnalteredFrame() throws IOException {

+		if (last == null) {

+			return;

+		}

+		if (unalteredFrame == null) {

+			ByteArrayOutputStream ba = new ByteArrayOutputStream(200);

+			

+			Rectangle _area = new Rectangle(resizeX, resizeY);

+			//header

+			ba.write(getTag(FLAG_FRAMETYPE_INTERFRAME, FLAG_CODEC_SCREEN));

+			writeShort(ba, _area.width + ((blockSize / 16 - 1) << 12));

+			writeShort(ba, _area.height + ((blockSize / 16 - 1) << 12));

+			Rectangle area = getNextBlock(_area, null);

+			while (area.width > 0 && area.height > 0) {

+				writeShort(ba, 0);

+				area = getNextBlock(_area, area);

+			}

+			unalteredFrame = getData(ba.toByteArray());

+		}

+	}

+	

+	public VideoData getUnalteredFrame() {

+		if (unalteredFrame != null && (frameCount % keyFrameIndex) != 0) {

+			frameCount++;

+		}

+		return unalteredFrame;

+	}

+	

+	public synchronized VideoData encode(int[][] img) throws IOException {

+		ba.reset();

+		Rectangle imgArea = new Rectangle(img.length, img[0].length);

+		Rectangle area = getNextBlock(imgArea, null);

+		boolean isKeyFrame = (frameCount++ % keyFrameIndex) == 0 || last == null;

+		

+		//header

+		ba.write(getTag(isKeyFrame ? FLAG_FRAMETYPE_KEYFRAME : FLAG_FRAMETYPE_INTERFRAME, FLAG_CODEC_SCREEN));

+		writeShort(ba, imgArea.width + ((blockSize / 16 - 1) << 12));

+		writeShort(ba, imgArea.height + ((blockSize / 16 - 1) << 12));

+		

+		while (area.width > 0 && area.height > 0) {

+			writeBytesIfChanged(ba, isKeyFrame, img, area);

+			area = getNextBlock(imgArea, area);

+		}

+		last = img;

+		return getData(ba.toByteArray());

+	}

+	

+	public void reset() {

+		last = null;

+		unalteredFrame = null;

+	}

+	

+	private Rectangle getNextBlock(Rectangle img, Rectangle _prev) {

+		Rectangle prev;

+		if (_prev == null) {

+			prev = new Rectangle(0, Math.max(0, img.height - blockSize), blockSize, blockSize);

+		} else {

+			prev = new Rectangle(_prev);

+			if (prev.x + prev.width == img.getWidth()) {

+				if (prev.y == 0) return new Rectangle(); //the end of the image

+				//next row

+				prev.x = 0; //reset position

+				prev.width = blockSize; //reset width

+				prev.height = (prev.y > blockSize ? blockSize : prev.y);

+				prev.y -= prev.height;

+			} else {

+				prev.x += blockSize;

+			}

+		}

+		return img.intersection(prev); 

+	}

+

+	private void writeBytesIfChanged(ByteArrayOutputStream ba, boolean isKeyFrame, int[][] img, Rectangle area) throws IOException {

+		boolean changed = isKeyFrame;

+		int count = 0;

+		for (int y = area.y + area.height - 1; y >= area.y; --y) {

+			for (int x = area.x; x < area.x + area.width; ++x) {

+				int pixel = img[x][y];

+				if (!changed && (last == null || pixel != last[x][y])) {

+					changed = true;

+				}

+				areaBuf[count++] = (byte)(pixel & 0xFF);			// Blue component

+				areaBuf[count++] = (byte)((pixel >> 8) & 0xFF);		// Green component

+				areaBuf[count++] = (byte)((pixel >> 16) & 0xFF);	// Red component

+			}

+		}

+		if (changed) {

+			d.reset();

+			d.setInput(areaBuf, 0, count);

+			d.finish();

+			int written = d.deflate(zipBuf);

+			writeShort(ba, written);

+			ba.write(zipBuf, 0, written);

+		} else {

+			writeShort(ba, 0);

+		}

+	}

+

+	public int getTag(final int frame, final int codec) {

+		return ((frame & 0x0F) << 4) + ((codec & 0x0F) << 0);

+	}

+	

+	private void writeShort(OutputStream os, final int n) throws IOException {

+		os.write((n >> 8) & 0xFF);

+		os.write((n >> 0) & 0xFF);

+	}

+	

+	public static int[][] getImage(Rectangle screen, Robot robot) {

+		int[][] buffer = new int[resizeX][resizeY];

+		BufferedImage image = resize(robot.createScreenCapture(screen), new Rectangle(resizeX, resizeY));

+		for (int x = 0; x < image.getWidth(); ++x) {

+			for (int y = 0; y < image.getHeight(); ++y) {

+				buffer[x][y] = image.getRGB(x, y);

+			}

+		}

+		return buffer;

+	}

+}

diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/BlankArea.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/BlankArea.java
new file mode 100644
index 0000000..c8f85e0
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/BlankArea.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import javax.swing.*;
+import java.awt.Dimension;
+import java.awt.Color;
+
+public class BlankArea extends MouseListenerable {
+	private static final long serialVersionUID = 1L;
+	private Dimension minSize = new Dimension(100, 50);
+
+    public BlankArea(Color color) {
+        setBackground(color);
+        setOpaque(false);
+		setHorizontalAlignment(SwingConstants.LEFT);
+		setVerticalAlignment(SwingConstants.TOP);
+		setHorizontalTextPosition(0);
+		setVerticalTextPosition(0);
+        setBorder(BorderFactory.createLineBorder(Color.black));
+        setMinimumSize(minSize);
+        setPreferredSize(minSize);
+    }
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/MouseListenerable.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/MouseListenerable.java
new file mode 100644
index 0000000..5e30200
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/MouseListenerable.java
@@ -0,0 +1,32 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.screen.webstart.gui;

+

+import java.awt.event.MouseAdapter;

+

+import javax.swing.JLabel;

+

+public class MouseListenerable extends JLabel {

+	private static final long serialVersionUID = 1L;

+

+	public void addListener(MouseAdapter listner) {

+		addMouseListener(listner);

+		addMouseMotionListener(listner);

+	}

+}
\ No newline at end of file
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/NumberSpinner.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/NumberSpinner.java
new file mode 100644
index 0000000..7b682f4
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/NumberSpinner.java
@@ -0,0 +1,34 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.screen.webstart.gui;

+

+import javax.swing.JSpinner;

+import javax.swing.SpinnerNumberModel;

+

+public class NumberSpinner extends JSpinner {

+	private static final long serialVersionUID = 1L;

+

+	public NumberSpinner(int value, int min, int max, int step) {

+		super(new SpinnerNumberModel(value, min, max, step));

+	}

+	

+	public Integer getValue() {

+		return (Integer)super.getValue();

+	}

+}

diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenDimensions.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenDimensions.java
new file mode 100644
index 0000000..e35173f
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenDimensions.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import java.awt.Dimension;
+import java.awt.Toolkit;
+
+public class ScreenDimensions {
+	public static final int ROUND_VALUE = 16;
+	/**
+	 * image recalcing value's from the virtual Screen drawer
+	 */
+	public static int width = 200;
+	public static int height = 0;
+
+	/**
+	 * Values calced by the original Screen
+	 */
+
+	public static double ratio = 0;
+
+	public static int widthMax = 0;
+	public static int heightMax = 0;
+
+	/**
+	 * Values set by the virtualScreen
+	 */
+	public static int spinnerWidth = 0;
+	public static int spinnerHeight = 0;
+	public static int spinnerX = 0;
+	public static int spinnerY = 0;
+	
+	public static ScreenQuality quality = ScreenQuality.Medium;
+	public static int FPS = 10;
+	
+	public static int resizeX = 640;
+	public static int resizeY = 480;
+	
+	static {
+		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+		ratio = screenSize.getHeight() / screenSize.getWidth();
+		widthMax = (int)screenSize.getWidth();
+		heightMax = (int)screenSize.getHeight();
+		height = (int)(width * ratio);
+		spinnerX = 0;
+		spinnerY = 0;
+		spinnerWidth = widthMax;
+		spinnerHeight = heightMax;
+		resizeX = 640;
+		resizeY = 400;
+	}
+	
+	public enum ScreenQuality {
+		VeryHigh
+		, High
+		, Medium
+		, Low
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenHeightMouseListener.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenHeightMouseListener.java
new file mode 100644
index 0000000..1426b2c
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenHeightMouseListener.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.event.MouseEvent;
+
+import javax.swing.event.MouseInputAdapter;
+
+public class ScreenHeightMouseListener extends MouseInputAdapter  {
+	private ScreenSharerFrame frame;
+	private double y = 0;
+
+	public ScreenHeightMouseListener(ScreenSharerFrame frame) {
+		this.frame = frame;
+	}
+	
+	public void mouseEntered(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
+	}
+
+	public void mouseExited(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+	}
+
+	public void mousePressed(MouseEvent e) {
+		frame.setShowWarning(false);
+		y = e.getY();
+	}
+
+	public void mouseReleased(MouseEvent e) {
+		frame.setShowWarning(true);
+	}
+
+	public void mouseDragged(MouseEvent e) {
+		if (!((Component)e.getSource()).isEnabled()) {
+			return;
+		}
+		double newY = e.getY();
+
+		int newHeight = ScreenDimensions.spinnerHeight - (int)(y - newY);
+		int newSpinnerY = ScreenDimensions.spinnerY + newHeight;
+
+		if (newSpinnerY >= 0 && newSpinnerY <= ScreenDimensions.heightMax) {
+			frame.setDoUpdateBounds(false);
+			frame.setSpinnerHeight(newHeight);
+			frame.setDoUpdateBounds(true);
+			frame.updateVScreenBounds();
+			frame.calcRescaleFactors();
+		}
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenKeyListener.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenKeyListener.java
new file mode 100644
index 0000000..603162a
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenKeyListener.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ScreenKeyListener implements KeyListener {
+	private static final Logger logger = LoggerFactory.getLogger(ScreenKeyListener.class);
+
+	public void keyPressed(KeyEvent kEvent) {
+		logger.debug("keyPressed :Code: " + kEvent.getKeyCode());
+	}
+
+	public void keyReleased(KeyEvent kEvent) {
+		logger.debug("keyReleased :Code: " + kEvent.getKeyCode());
+	}
+
+	public void keyTyped(KeyEvent arg0) {
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenMouseListener.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenMouseListener.java
new file mode 100644
index 0000000..791abe7
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenMouseListener.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.event.MouseEvent;
+
+import javax.swing.event.MouseInputAdapter;
+
+public class ScreenMouseListener extends MouseInputAdapter {
+	private ScreenSharerFrame frame;
+	private int x = 0;
+	private int y = 0;
+
+	public ScreenMouseListener(ScreenSharerFrame frame) {
+		this.frame = frame;
+	}
+
+	public void mouseEntered(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+	}
+
+	public void mouseExited(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+	}
+
+	public void mousePressed(MouseEvent e) {
+		frame.setShowWarning(false);
+		this.x = e.getX();
+		this.y = e.getY();
+	}
+
+	public void mouseReleased(MouseEvent e) {
+		frame.setShowWarning(true);
+	}
+
+	public void mouseDragged(MouseEvent e) {
+		if (!((Component)e.getSource()).isEnabled()) {
+			return;
+		}
+		int newX = e.getX();
+		int newY = e.getY();
+
+		int newXPosition = ScreenDimensions.spinnerX - (this.x - newX);
+		int newYPosition = ScreenDimensions.spinnerY - (this.y - newY);
+		if (newXPosition >= 0) {
+			frame.setSpinnerX(newXPosition);
+		}
+		if (newYPosition >= 0) {
+			frame.setSpinnerY(newYPosition);
+		}
+
+		frame.calcRescaleFactors();
+	}
+
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenSharerFrame.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenSharerFrame.java
new file mode 100644
index 0000000..8c5a1e4
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenSharerFrame.java
@@ -0,0 +1,855 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.ROUND_VALUE;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.resizeX;
+import static org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.resizeY;
+import static org.slf4j.LoggerFactory.getLogger;
+
+import java.awt.AWTException;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Image;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.SystemColor;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+import java.io.IOException;
+
+import javax.swing.BorderFactory;
+import javax.swing.GroupLayout;
+import javax.swing.GroupLayout.Alignment;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.JTextField;
+import javax.swing.SwingConstants;
+import javax.swing.border.EmptyBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+
+import org.apache.openmeetings.screen.webstart.CoreScreenShare;
+import org.apache.openmeetings.screen.webstart.gui.ScreenDimensions.ScreenQuality;
+import org.slf4j.Logger;
+
+public class ScreenSharerFrame extends JFrame {
+	private static final long serialVersionUID = 1L;
+	private static final Logger logger = getLogger(ScreenSharerFrame.class);
+	
+	private JPanel contentPane;
+	private JPanel panelScreen = new DisabledPanel();
+	private JPanel panelRecording = new DisabledPanel();
+	private JPanel panelPublish = new DisabledPanel();
+	private JLabel lblStatus = new JLabel();
+	private int vScreenX = 20;
+	private int vScreenY = 20;
+	private VerticalSlider upSlider = new VerticalSlider();
+	private VerticalSlider downSlider = new VerticalSlider();
+	private HorizontalSlider leftSlider = new HorizontalSlider();
+	private HorizontalSlider rightSlider = new HorizontalSlider();
+	private BlankArea virtualScreen = new BlankArea(new Color(255, 255, 255, 100));
+	private JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
+	private boolean doUpdateBounds = true;
+	private boolean showWarning = true;
+	private JButton btnStartStopSharing;
+	private JButton btnStartStopRecording;
+	private JButton btnStartStopPublish;
+	private NumberSpinner spinnerX;
+	private NumberSpinner spinnerY;
+	private NumberSpinner spinnerWidth;
+	private NumberSpinner spinnerHeight;
+	private JComboBox<KeyValue<ScreenQuality>> comboQuality;
+	private JComboBox<KeyValue<Integer>> comboFPS;
+	private JTextField textPublishHost;
+	private JTextField textPublishApp;
+	private JTextField textPublishId;
+	private JLabel lblPublishURL;
+	private boolean sharingStarted = false;
+	private boolean recordingStarted = false;
+	private boolean publishStarted = false;
+	private boolean recordingActionRequested = false;
+	private boolean publishingActionRequested = false;
+	private boolean sharingActionRequested = false;
+	private ImageIcon startIcon;
+	private ImageIcon stopIcon;
+	private String startSharingLabel;
+	private String stopSharingLabel;
+	private String startRecordingLabel;
+	private String stopRecordingLabel;
+	private String startPublishLabel;
+	private String stopPublishLabel;
+	private String reduceWidthLabel;
+	private String reduceHeightLabel;
+	private String reduceXLabel;
+	private String reduceYLabel;
+	private String recordingTipLabel;
+	private String publishingTipLabel;
+	private JCheckBox audioNotify;
+	
+	private class PublishTextField extends JTextField {
+		private static final long serialVersionUID = 1L;
+
+		PublishTextField() {
+			getDocument().addDocumentListener(
+				new DocumentListener() {
+					public void changedUpdate(DocumentEvent e) {
+						updatePublishURL();
+					}
+
+					public void removeUpdate(DocumentEvent e) {
+						updatePublishURL();
+					}
+
+					public void insertUpdate(DocumentEvent e) {
+						updatePublishURL();
+					}
+				});
+
+			setColumns(10);
+		}
+	}
+	
+	private static class KeyValue<T> {
+		private String key;
+		private T value;
+		
+		public KeyValue(String key, T value) {
+			this.key = key;
+			this.value = value;
+		}
+	 
+		@SuppressWarnings("unused")
+		public String getKey() { return key; }
+		public T getValue() { return value; }
+	 
+		@Override
+		public String toString() { return key; }
+	 
+		@Override
+		public boolean equals(Object obj) {
+			if (obj instanceof KeyValue) {
+				@SuppressWarnings("unchecked")
+				KeyValue<T> kv = (KeyValue<T>) obj;
+				return (kv.value.equals(this.value));
+			}
+			return false;
+		}
+	 
+		@Override
+		public int hashCode() {
+			int hash = 7;
+			hash = 97 * hash + (this.value != null ? this.value.hashCode() : 0);
+			return hash;
+		}
+	}
+	
+	//this implementation will not allow to Enable Panel in runtime
+	private static class DisabledPanel extends JPanel {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		public void setEnabled(boolean enabled) {
+			for (Component c : getComponents()) {
+				c.setEnabled(enabled);
+			}
+			super.setEnabled(enabled);
+		}
+	}
+	
+	private static class VerticalSlider extends MouseListenerable {
+		private static final long serialVersionUID = 1L;
+
+		public VerticalSlider() {
+			ImageIcon iUp = new ImageIcon(ScreenSharerFrame.class.getResource("/org/apache/openmeetings/screen/up.png"));
+			ImageIcon iDown = new ImageIcon(ScreenSharerFrame.class.getResource("/org/apache/openmeetings/screen/down.png"));
+			setSize(16, 32);
+			JLabel jUp = new JLabel(iUp);
+			jUp.setBounds(0, 0, 16, 16);
+			add(jUp);
+			JLabel jDown = new JLabel(iDown);
+			jDown.setBounds(0, 16, 16, 16);
+			add(jDown);
+		}
+	}
+	
+	private static class HorizontalSlider extends MouseListenerable {
+		private static final long serialVersionUID = 1L;
+
+		public HorizontalSlider() {
+			ImageIcon iLeft = new ImageIcon(ScreenSharerFrame.class.getResource("/org/apache/openmeetings/screen/previous.png"));
+			ImageIcon iRight = new ImageIcon(ScreenSharerFrame.class.getResource("/org/apache/openmeetings/screen/next.png"));
+			setSize(32, 16);
+			JLabel jLeft = new JLabel(iLeft);
+			jLeft.setBounds(0, 0, 16, 16);
+			add(jLeft);
+			JLabel jRight = new JLabel(iRight);
+			jRight.setBounds(16, 0, 16, 16);
+			add(jRight);
+		}
+	}
+	
+	private String getTextLabel(String[] textLabels, int idx) {
+		return textLabels != null && idx < textLabels.length ? textLabels[idx] : "#STAB#";
+	}
+	
+	/**
+	 * Create the frame.
+	 * @throws AWTException 
+	 * @throws IOException 
+	 */
+	public ScreenSharerFrame(final CoreScreenShare core, String[] textLabels) throws AWTException {
+		setTitle(getTextLabel(textLabels, 0)); //#id 730
+		setBackground(Color.WHITE);
+		setResizable(false);
+		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
+		addWindowListener(new WindowAdapter() {
+			@Override
+			public void windowClosing(WindowEvent e) {
+				core.stopStream();
+				ScreenSharerFrame.this.setVisible(false);
+				System.exit(0);
+			}
+		});
+		setBounds(30, 30, 500, 505);
+		contentPane = new JPanel();
+		contentPane.setBackground(Color.WHITE);
+		contentPane.setBorder(new EmptyBorder(5, 0, 5, 5));
+		setContentPane(contentPane);
+		
+		JLabel lblStartSharing = new JLabel(getTextLabel(textLabels, 1)); //#id 731
+		
+		startSharingLabel = getTextLabel(textLabels, 2); //#id 732
+		stopSharingLabel = getTextLabel(textLabels, 3); //#id 733
+		startRecordingLabel = getTextLabel(textLabels, 15); //#id 871
+		stopRecordingLabel = getTextLabel(textLabels, 16); //#id 872
+		startPublishLabel = getTextLabel(textLabels, 24); //#id 1466
+		stopPublishLabel = getTextLabel(textLabels, 25); //#id 1467
+		reduceWidthLabel = getTextLabel(textLabels, 29); //#id 1471
+		reduceHeightLabel = getTextLabel(textLabels, 30); //#id 1472
+		reduceXLabel = getTextLabel(textLabels, 31); //#id 1473
+		reduceYLabel = getTextLabel(textLabels, 32); //#id 1474
+		recordingTipLabel = getTextLabel(textLabels, 35); //#id 1477
+		publishingTipLabel = getTextLabel(textLabels, 34); //#id 1476
+		startIcon = new ImageIcon(ScreenSharerFrame.class.getResource("/org/apache/openmeetings/screen/play.png"));
+		stopIcon = new ImageIcon(ScreenSharerFrame.class.getResource("/org/apache/openmeetings/screen/stop.png"));
+		btnStartStopSharing = new JButton(startSharingLabel);
+		btnStartStopSharing.setToolTipText(startSharingLabel);
+		btnStartStopSharing.setIcon(startIcon);
+		btnStartStopSharing.setSize(200, 32);
+		btnStartStopSharing.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				if (sharingStarted) {
+					if (!sharingActionRequested) {
+						sharingActionRequested = true;
+						core.streamingStop();
+					} else {
+						logger.warn("Sharing action is already requested");
+					}
+				} else {
+					if (!sharingActionRequested) {
+						sharingActionRequested = true;
+						core.streamingStart();
+					} else {
+						logger.warn("Sharing action is already requested");
+					}
+				}
+			}
+		});
+		
+		JLabel lblSelectArea = new JLabel(getTextLabel(textLabels, 4)); //#id 734
+		JPanel panelStatus = new JPanel();
+		audioNotify = new JCheckBox(getTextLabel(textLabels, 36)); //#id 1589
+		audioNotify.setBackground(Color.WHITE);
+		audioNotify.setSelected(core.isAudioNotify());
+		audioNotify.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				core.setAudioNotify(audioNotify.isSelected());
+			}
+		});
+		
+		GroupLayout gl_contentPane = new GroupLayout(contentPane);
+		gl_contentPane.setHorizontalGroup(
+			gl_contentPane.createParallelGroup(Alignment.LEADING)
+				.addGroup(gl_contentPane.createSequentialGroup()
+					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
+						.addGroup(gl_contentPane.createSequentialGroup()
+							.addGap(7)
+							.addComponent(lblStartSharing)
+							.addGap(15)
+							.addComponent(audioNotify))
+						.addGroup(gl_contentPane.createSequentialGroup()
+							.addGap(21)
+							.addComponent(btnStartStopSharing, 200, 200, 200)
+							.addGap(52)
+							)
+						.addGroup(gl_contentPane.createSequentialGroup()
+							.addGap(7)
+							.addComponent(lblSelectArea, GroupLayout.PREFERRED_SIZE, 470, GroupLayout.PREFERRED_SIZE))
+						.addGroup(gl_contentPane.createSequentialGroup()
+							.addContainerGap()
+							.addComponent(panelScreen, GroupLayout.PREFERRED_SIZE, 472, GroupLayout.PREFERRED_SIZE))
+						.addGroup(gl_contentPane.createSequentialGroup()
+							.addContainerGap()
+							.addComponent(tabbedPane, GroupLayout.PREFERRED_SIZE, 472, GroupLayout.PREFERRED_SIZE))
+						.addGroup(gl_contentPane.createSequentialGroup()
+							.addComponent(panelStatus, 494, 494, 494)))
+					.addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+		);
+		gl_contentPane.setVerticalGroup(
+			gl_contentPane.createParallelGroup(Alignment.LEADING)
+				.addGroup(gl_contentPane.createSequentialGroup()
+					.addGap(7)
+					.addComponent(lblStartSharing)
+					.addGap(4)
+					.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
+						.addComponent(btnStartStopSharing, 32, 32, 32).addComponent(audioNotify, 32, 32, 32)
+						)
+					.addGap(4)
+					.addComponent(lblSelectArea)
+					.addGap(4)
+					.addComponent(panelScreen, 210, 210, 210)
+					.addGap(4)
+					.addComponent(tabbedPane, 150, 150, 150)
+					.addGap(5)
+					.addComponent(panelStatus, 20, 20, 20)
+					)
+		);
+		panelScreen.setLayout(null);
+		panelScreen.setBackground(Color.WHITE);
+		
+		int width = ScreenDimensions.width;
+		int height = ScreenDimensions.height;
+		
+		//Sliders
+		upSlider.addListener(new ScreenYMouseListener(this));
+		upSlider.setToolTipText(getTextLabel(textLabels, 6)); //#id 737
+		panelScreen.add(upSlider);
+		downSlider.addListener(new ScreenHeightMouseListener(this));
+		downSlider.setToolTipText(getTextLabel(textLabels, 6)); //#id 737
+		panelScreen.add(downSlider);
+		
+		leftSlider.addListener(new ScreenXMouseListener(this));
+		leftSlider.setToolTipText(getTextLabel(textLabels, 5)); //#id 735
+		panelScreen.add(leftSlider);
+		rightSlider.addListener(new ScreenWidthMouseListener(this));
+		rightSlider.setToolTipText(getTextLabel(textLabels, 5)); //#id 735
+		panelScreen.add(rightSlider);
+		
+		//Virtual Screen
+		virtualScreen.addListener(new ScreenMouseListener(this));
+		virtualScreen.setBounds(vScreenX, vScreenY, width, height);
+		panelScreen.add(virtualScreen);
+
+		ImageIcon imgBgScreen = new ImageIcon(
+			new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()))
+				.getScaledInstance(width, height, Image.SCALE_SMOOTH));
+		JLabel bgScreen = new JLabel(imgBgScreen);
+		bgScreen.setBounds(vScreenX, vScreenY, width, height);
+		panelScreen.add(bgScreen);
+		
+		//Spinner Width
+		JLabel vscreenWidthLabel = new JLabel();
+		vscreenWidthLabel.setText(getTextLabel(textLabels, 9)); //#id 740
+		vscreenWidthLabel.setBounds(250, 20, 150, 24);
+		panelScreen.add(vscreenWidthLabel);
+
+		spinnerWidth = new NumberSpinner(ScreenDimensions.spinnerWidth, 0, ScreenDimensions.widthMax, 1);
+		spinnerWidth.setBounds(400, 20, 60, 24);
+		spinnerWidth.addChangeListener( new ChangeListener(){
+			public void stateChanged(ChangeEvent arg0) {
+				calcNewValueWidthSpin();
+			}
+		});
+		panelScreen.add(spinnerWidth);
+
+		//Spinner Height
+		JLabel labelHeight = new JLabel();
+		labelHeight.setText(getTextLabel(textLabels, 10)); //#id 741
+		labelHeight.setBounds(250, 50, 150, 24);
+		panelScreen.add(labelHeight);
+
+		spinnerHeight = new NumberSpinner(ScreenDimensions.spinnerHeight, 0, ScreenDimensions.heightMax, 1);
+		spinnerHeight.setBounds(400, 50, 60, 24);
+		spinnerHeight.addChangeListener( new ChangeListener(){
+			public void stateChanged(ChangeEvent arg0) {
+				calcNewValueHeightSpin();
+			}
+		});
+		panelScreen.add(spinnerHeight);
+
+		//Spinner X
+		JLabel labelX = new JLabel();
+		labelX.setText(getTextLabel(textLabels, 7)); //#id 738
+		labelX.setBounds(250, 80, 150, 24);
+		panelScreen.add(labelX);
+
+		spinnerX = new NumberSpinner(ScreenDimensions.spinnerX, 0, ScreenDimensions.widthMax, 1);
+		spinnerX.setBounds(400, 80, 60, 24);
+		spinnerX.addChangeListener( new ChangeListener(){
+			public void stateChanged(ChangeEvent arg0) {
+				calcNewValueXSpin();
+			}
+		});
+		panelScreen.add(spinnerX);
+
+		//Spinner Y
+		JLabel labelY = new JLabel();
+		labelY.setText(getTextLabel(textLabels, 8)); //#id 739
+		labelY.setBounds(250, 110, 150, 24);
+		panelScreen.add(labelY);
+
+		spinnerY = new NumberSpinner(ScreenDimensions.spinnerY, 0, ScreenDimensions.heightMax, 1);
+		spinnerY.setBounds(400, 110, 60, 24);
+		spinnerY.addChangeListener( new ChangeListener(){
+			public void stateChanged(ChangeEvent arg0) {
+				calcNewValueYSpin();
+			}
+		});
+		panelScreen.add(spinnerY);
+		
+		//Quality
+		JLabel labelQuality = new JLabel();
+		labelQuality.setText(getTextLabel(textLabels, 18)); //#id 1089
+		labelQuality.setBounds(250, 140, 200, 24);
+		panelScreen.add(labelQuality);
+		
+		comboQuality = new JComboBox<KeyValue<ScreenQuality>>();
+		comboQuality.addItem(new KeyValue<ScreenQuality>(getTextLabel(textLabels, 19), ScreenQuality.VeryHigh)); //#id 1090
+		comboQuality.addItem(new KeyValue<ScreenQuality>(getTextLabel(textLabels, 20), ScreenQuality.High)); //#id 1091
+		comboQuality.addItem(new KeyValue<ScreenQuality>(getTextLabel(textLabels, 21), ScreenQuality.Medium)); //#id 1092
+		comboQuality.addItem(new KeyValue<ScreenQuality>(getTextLabel(textLabels, 22), ScreenQuality.Low)); //#id 1093
+		comboQuality.setBounds(250, 170, 130, 24);
+		comboQuality.addActionListener(new ActionListener() {
+			@SuppressWarnings("unchecked")
+			public void actionPerformed(ActionEvent e) {
+		        ScreenDimensions.quality = ((KeyValue<ScreenQuality>)comboQuality.getSelectedItem()).getValue();
+		        calcRescaleFactors();
+			}
+		}); 
+		comboQuality.setSelectedIndex(core.defaultQuality);
+		panelScreen.add(comboQuality);
+		comboFPS = new JComboBox<KeyValue<Integer>>();
+		comboFPS.addItem(new KeyValue<Integer>("2 FPS", 2));
+		comboFPS.addItem(new KeyValue<Integer>("5 FPS", 5));
+		comboFPS.addItem(new KeyValue<Integer>("10 FPS", 10));
+		comboFPS.addItem(new KeyValue<Integer>("15 FPS", 15));
+		comboFPS.addItem(new KeyValue<Integer>("20 FPS", 20));
+		comboFPS.addItem(new KeyValue<Integer>("25 FPS", 25));
+		comboFPS.addItem(new KeyValue<Integer>("30 FPS", 30));
+		comboFPS.addActionListener(new ActionListener() {
+			@SuppressWarnings("unchecked")
+			public void actionPerformed(ActionEvent e) {
+		        ScreenDimensions.FPS = ((KeyValue<Integer>)comboFPS.getSelectedItem()).getValue();
+		        calcRescaleFactors();
+			}
+		});
+		boolean fpsSelected = false;
+		for (int i = 0; i < comboFPS.getItemCount(); ++i) {
+			KeyValue<Integer> v = comboFPS.getItemAt(i);
+			if (core.defaultFPS == v.value) {
+				comboFPS.setSelectedIndex(i);
+				fpsSelected = true;
+				break;
+			}
+		}
+		if (!fpsSelected) {
+			comboFPS.addItem(new KeyValue<Integer>(core.defaultFPS + " FPS", core.defaultFPS));
+			comboFPS.setSelectedIndex(comboFPS.getItemCount() - 1);
+		}
+		comboFPS.setBounds(390, 170, 70, 24);
+		comboFPS.setVisible(core.showFPS);
+		panelScreen.add(comboFPS);
+		
+		panelRecording.setBackground(Color.WHITE);
+		tabbedPane.addTab(getTextLabel(textLabels, 13), null, panelRecording, null); //#id 869
+		tabbedPane.setEnabledAt(0, true);
+		panelRecording.setLayout(null);
+		panelRecording.setEnabled(false);
+		
+		JLabel lblRecordingDesc = new JLabel("<html>" + getTextLabel(textLabels, 14) + "</html>"); //#id 870
+		lblRecordingDesc.setVerticalAlignment(SwingConstants.TOP);
+		lblRecordingDesc.setBounds(10, 10, 447, 60);
+		panelRecording.add(lblRecordingDesc);
+		
+		btnStartStopRecording = new JButton(getTextLabel(textLabels, 15)); //#id 871
+		btnStartStopRecording.setToolTipText(getTextLabel(textLabels, 15)); //#id 871
+		btnStartStopRecording.setIcon(startIcon);
+		btnStartStopRecording.setBounds(10, 82, 200, 32);
+		btnStartStopRecording.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				if (recordingStarted) {
+					if (!recordingActionRequested) {
+						recordingActionRequested = true;
+						core.recordingStop();
+					} else {
+						logger.warn("Recording action is already requested");
+					}
+				} else {
+					if (!recordingActionRequested) {
+						recordingActionRequested = true;
+						core.recordingStart();
+					} else {
+						logger.warn("Recording action is already requested");
+					}
+				}
+			}
+		});
+		panelRecording.add(btnStartStopRecording);
+		
+		panelPublish.setBackground(Color.WHITE);
+		tabbedPane.addTab(getTextLabel(textLabels, 23), null, panelPublish, null); //#id 1465
+		tabbedPane.setEnabledAt(1, true);
+		panelPublish.setEnabled(false);
+		panelPublish.setLayout(null);
+		
+		JLabel lblPublishDesc = new JLabel(getTextLabel(textLabels, 33)); //#id 1475
+		lblPublishDesc.setVerticalAlignment(SwingConstants.TOP);
+		lblPublishDesc.setBounds(10, 5, 450, 20);
+		panelPublish.add(lblPublishDesc);
+		
+		JLabel lblPublishHost = new JLabel(getTextLabel(textLabels, 26)); //#id 1468
+		lblPublishHost.setVerticalAlignment(SwingConstants.TOP);
+		lblPublishHost.setBounds(10, 27, 140, 20);
+		panelPublish.add(lblPublishHost);
+		
+		JLabel lblPublishApp = new JLabel(getTextLabel(textLabels, 27)); //#id 1469
+		lblPublishApp.setVerticalAlignment(SwingConstants.TOP);
+		lblPublishApp.setBounds(160, 27, 140, 20);
+		panelPublish.add(lblPublishApp);
+		
+		JLabel lblPublishId = new JLabel(getTextLabel(textLabels, 28)); //#id 1470
+		lblPublishId.setVerticalAlignment(SwingConstants.TOP);
+		lblPublishId.setBounds(310, 27, 140, 20);
+		panelPublish.add(lblPublishId);
+		
+		textPublishHost = new PublishTextField();
+		textPublishHost.setBounds(10, 45, 140, 20);
+		panelPublish.add(textPublishHost);
+		
+		textPublishApp = new PublishTextField();
+		textPublishApp.setBounds(160, 45, 140, 20);
+		panelPublish.add(textPublishApp);
+		
+		textPublishId = new PublishTextField();
+		textPublishId.setBounds(310, 45, 140, 20);
+		panelPublish.add(textPublishId);
+		
+		lblPublishURL = new JLabel("");
+		lblPublishURL.setBounds(10, 69, 447, 14);
+		panelPublish.add(lblPublishURL);
+		
+		btnStartStopPublish = new JButton(getTextLabel(textLabels, 24)); //#id 1466
+		btnStartStopPublish.setToolTipText(getTextLabel(textLabels, 24)); //#id 1466
+		btnStartStopPublish.setIcon(startIcon);
+		btnStartStopPublish.setBounds(10, 86, 200, 32);
+		btnStartStopPublish.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent arg0) {
+				if (publishStarted) {
+					if (!publishingActionRequested) {
+						publishingActionRequested = true;
+						core.publishingStop();
+					} else {
+						logger.warn("Publishing action is already requested");
+					}
+				} else {
+					if (!publishingActionRequested) {
+						publishingActionRequested = true;
+						core.publishingStart();
+					} else {
+						logger.warn("Publishing action is already requested");
+					}
+				}
+			}
+		});
+		panelPublish.add(btnStartStopPublish);
+		
+		JPanel panelSecurity = new JPanel();
+		panelSecurity.setLayout(null);
+		panelSecurity.setBackground(Color.WHITE);
+		tabbedPane.addTab(getTextLabel(textLabels, 37), null, panelSecurity, null); //#id 1598
+		
+		final JCheckBox remoteEnabled = new JCheckBox(getTextLabel(textLabels, 38)); //#id 1078
+		remoteEnabled.setBackground(Color.WHITE);
+		remoteEnabled.setSelected(core.isRemoteEnabled());
+		remoteEnabled.setBounds(10, 10, 450, 24);
+		remoteEnabled.setEnabled(core.allowRemote);
+		remoteEnabled.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				core.setRemoteEnabled(remoteEnabled.isSelected());
+			}
+		});
+		panelSecurity.add(remoteEnabled);
+		
+		panelStatus.setBackground(SystemColor.control);
+		panelStatus.setLayout(null);
+		lblStatus.setHorizontalAlignment(SwingConstants.LEFT);
+		lblStatus.setBounds(0, 0, 494, 20);
+		lblStatus.setBorder(BorderFactory.createCompoundBorder(
+				BorderFactory.createLineBorder(Color.LIGHT_GRAY),
+				BorderFactory.createEmptyBorder(0, 5, 0, 0)));
+		panelStatus.add(lblStatus);
+		
+		contentPane.setLayout(gl_contentPane);
+		
+		// Background Image
+		//We have no logo, that is why we need no background, sebawagner 29.04.2012
+	}
+
+	public void setSharingStatus(boolean status, boolean unlockScreen) {
+		panelScreen.setEnabled(unlockScreen);
+		if (status != sharingStarted) {
+			sharingActionRequested = false;
+		}
+		logger.debug("sharingActionRequested=" + sharingActionRequested);
+		sharingStarted = status;
+		btnStartStopSharing.setIcon(status ? stopIcon : startIcon);
+		btnStartStopSharing.setText(status ? stopSharingLabel : startSharingLabel);
+		btnStartStopSharing.setToolTipText(status ? stopSharingLabel : startSharingLabel);
+	}
+	
+	public void setRecordingStatus(boolean status, boolean unlockScreen) {
+		panelScreen.setEnabled(unlockScreen);
+		if (status != recordingStarted) {
+			recordingActionRequested = false;
+		}
+		logger.debug("recordingActionRequested=" + recordingActionRequested);
+		recordingStarted = status;
+		btnStartStopRecording.setIcon(status ? stopIcon : startIcon);
+		btnStartStopRecording.setText(status ? stopRecordingLabel : startRecordingLabel);
+		btnStartStopRecording.setToolTipText(status ? stopRecordingLabel : startRecordingLabel);
+	}
+	
+	public void setPublishingStatus(boolean status, boolean unlockScreen) {
+		panelScreen.setEnabled(unlockScreen);
+		if (status != publishStarted) {
+			publishingActionRequested = false;
+		}
+		publishStarted = status;
+		btnStartStopPublish.setIcon(status ? stopIcon : startIcon);
+		btnStartStopPublish.setText(status ? stopPublishLabel : startPublishLabel);
+		btnStartStopPublish.setToolTipText(status ? stopPublishLabel : startPublishLabel);
+	}
+	
+	public void setRecordingTabEnabled(boolean enabled) {
+		panelRecording.setEnabled(enabled);
+		tabbedPane.setEnabledAt(0, enabled);
+		tabbedPane.setToolTipTextAt(0, enabled ? null : recordingTipLabel);
+	}
+	
+	public void setPublishingTabEnabled(boolean enabled) {
+		panelPublish.setEnabled(enabled);
+		tabbedPane.setEnabledAt(1, enabled);
+		tabbedPane.setToolTipTextAt(1, enabled ? null : publishingTipLabel);
+	}
+	
+	public String getPublishHost() {
+		return textPublishHost.getText();
+	}
+	
+	public String getPublishApp() {
+		return textPublishApp.getText();
+	}
+	
+	public String getPublishId() {
+		return textPublishId.getText();
+	}
+	
+	private void updatePublishURL() {
+		lblPublishURL.setText("rtmp://" + textPublishHost.getText() + ":1935/"
+				+ textPublishApp.getText() + "/" + textPublishId.getText());
+	}
+	
+	public void setShowWarning(boolean showWarning) {
+		this.showWarning = showWarning;
+	}
+	
+	public void setDoUpdateBounds(boolean doUpdateBounds) {
+		this.doUpdateBounds = doUpdateBounds;
+	}
+	
+	public void setStatus(String status) {
+		lblStatus.setText(status);
+	}
+
+	public void setSpinnerX(int val) {
+		spinnerX.setValue(val);
+	}
+
+	public void setSpinnerY(int val) {
+		spinnerY.setValue(val);
+	}
+
+	public void setSpinnerWidth(int val) {
+		spinnerWidth.setValue(val);
+	}
+
+	public void setSpinnerHeight(int val) {
+		spinnerHeight.setValue(val);
+	}
+
+	void calcNewValueXSpin() {
+		if (doUpdateBounds) {
+			int newX = spinnerX.getValue();
+			if (ScreenDimensions.spinnerWidth + newX > ScreenDimensions.widthMax) {
+				newX = ScreenDimensions.widthMax - ScreenDimensions.spinnerWidth;
+				spinnerX.setValue(newX);
+				if (showWarning) {
+					setStatus(reduceWidthLabel);
+				}
+			} else {
+				ScreenDimensions.spinnerX = newX;
+				updateVScreenBounds();
+			}
+		} else {
+			ScreenDimensions.spinnerX = spinnerX.getValue();
+		}
+
+		calcRescaleFactors();
+	}
+
+	void calcNewValueYSpin() {
+		if (doUpdateBounds) {
+			int newY = spinnerY.getValue();
+			if (ScreenDimensions.spinnerHeight + newY > ScreenDimensions.heightMax) {
+				newY = ScreenDimensions.heightMax - ScreenDimensions.spinnerHeight;
+				spinnerY.setValue(newY);
+				if (showWarning) {
+					setStatus(reduceHeightLabel);
+				}
+			} else {
+				ScreenDimensions.spinnerY = newY;
+				updateVScreenBounds();
+			}
+		} else {
+			ScreenDimensions.spinnerY = spinnerY.getValue();
+		}
+
+		calcRescaleFactors();
+	}
+
+	void calcNewValueWidthSpin() {
+		if (doUpdateBounds) {
+			int newWidth = spinnerWidth.getValue();
+			if (ScreenDimensions.spinnerX + newWidth > ScreenDimensions.widthMax) {
+				newWidth = ScreenDimensions.widthMax - ScreenDimensions.spinnerX;
+				spinnerWidth.setValue(newWidth);
+				if (showWarning) {
+					setStatus(reduceXLabel);
+				}
+			} else {
+				ScreenDimensions.spinnerWidth = newWidth;
+				updateVScreenBounds();
+			}
+		} else {
+			ScreenDimensions.spinnerWidth = spinnerWidth.getValue();
+		}
+
+		calcRescaleFactors();
+	}
+
+	void calcNewValueHeightSpin() {
+		if (doUpdateBounds) {
+			int newHeight = spinnerHeight.getValue();
+			if (ScreenDimensions.spinnerY + newHeight > ScreenDimensions.heightMax) {
+				newHeight = ScreenDimensions.heightMax - ScreenDimensions.spinnerY;
+				spinnerHeight.setValue(newHeight);
+				if (showWarning) {
+					setStatus(reduceYLabel);
+				}
+			} else {
+				ScreenDimensions.spinnerHeight = newHeight;
+				updateVScreenBounds();
+			}
+		} else {
+			ScreenDimensions.spinnerHeight = spinnerHeight.getValue();
+		}
+
+		calcRescaleFactors();
+	}
+
+	/**
+	 * Needs to be always invoked after every re-scaling
+	 */
+	void calcRescaleFactors() {
+		logger.trace("calcRescaleFactors -- ");
+		resizeX = spinnerWidth.getValue();
+		resizeY = spinnerHeight.getValue();
+		switch (ScreenDimensions.quality) {
+			case Low:
+				resizeX = (int)(2.0 * ScreenDimensions.resizeX / 8);
+				resizeY = (int)(2.0 * ScreenDimensions.resizeY / 8);
+				break;
+			case Medium:
+				resizeX = (int)(4.0 * ScreenDimensions.resizeX / 8);
+				resizeY = (int)(4.0 * ScreenDimensions.resizeY / 8);
+				break;
+			case High:
+				resizeX = (int)(6.0 * ScreenDimensions.resizeX / 8);
+				resizeY = (int)(6.0 * ScreenDimensions.resizeY / 8);
+				break;
+			case VeryHigh:
+			default:
+				break;
+		}
+		int dX = resizeX % ROUND_VALUE;
+		int dY = resizeY % ROUND_VALUE;
+		resizeX += dX == 0 ? 0 : ROUND_VALUE - dX;
+		resizeY += dY == 0 ? 0 : ROUND_VALUE - dY;
+		logger.trace("resize: X:" + resizeX + " Y: " + resizeY);
+		updateVScreenBounds();
+	}
+
+	private void setVScreenBounds(int x, int y, int width, int height) {
+		leftSlider.setBounds(x + vScreenX - 16, y + vScreenY - 8 + (height / 2), 32, 16);
+		rightSlider.setBounds(x + vScreenX + width - 16, y + vScreenY - 8 + (height / 2), 32, 16);
+		upSlider.setBounds(x + vScreenX + (width / 2) - 8, y + vScreenY - 16, 16, 32);
+		downSlider.setBounds(x + vScreenX + (width / 2) - 8, y + vScreenY - 16 + height, 16, 32);
+		
+		virtualScreen.setText(ScreenDimensions.spinnerWidth + ":" + ScreenDimensions.spinnerHeight);
+		virtualScreen.setBounds(x + vScreenX, y + vScreenY, width, height);
+	}
+	
+	/**
+	 * update the bounds of the vScreen
+	 * by using the vars from the Spinners
+	 *
+	 */
+	void updateVScreenBounds() {
+		double ratio = ((double)ScreenDimensions.width) / ScreenDimensions.widthMax;
+		int newWidth = (int)(ScreenDimensions.spinnerWidth * ratio);
+		int newX = (int)(ScreenDimensions.spinnerX * ratio);
+
+		int newHeight = (int)(ScreenDimensions.spinnerHeight * ratio);
+		int newY = (int)(ScreenDimensions.spinnerY * ratio);
+
+		setVScreenBounds(newX, newY, newWidth, newHeight);
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenWidthMouseListener.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenWidthMouseListener.java
new file mode 100644
index 0000000..c893b31
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenWidthMouseListener.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.event.MouseEvent;
+
+import javax.swing.event.MouseInputAdapter;
+
+public class ScreenWidthMouseListener extends MouseInputAdapter {
+	private ScreenSharerFrame frame;
+	private double x = 0;
+
+	public ScreenWidthMouseListener(ScreenSharerFrame frame) {
+		this.frame = frame;
+	}
+
+	public void mouseEntered(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
+	}
+
+	public void mouseExited(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+	}
+
+	public void mousePressed(MouseEvent e) {
+		frame.setShowWarning(false);
+		this.x = e.getX();
+	}
+
+	public void mouseReleased(MouseEvent e) {
+		frame.setShowWarning(true);
+	}
+
+	public void mouseDragged(MouseEvent e) {
+		if (!((Component)e.getSource()).isEnabled()) {
+			return;
+		}
+		double newX = e.getX();
+
+		int newWidth = ScreenDimensions.spinnerWidth - (int)(x - newX);
+		int newSpinnerX = ScreenDimensions.spinnerX + newWidth;
+
+		if (0 <= newSpinnerX && newSpinnerX <= ScreenDimensions.widthMax) {
+			frame.setDoUpdateBounds(false);
+			frame.setSpinnerWidth(newWidth);
+			frame.setDoUpdateBounds(true);
+			frame.updateVScreenBounds();
+			frame.calcRescaleFactors();
+		}
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenXMouseListener.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenXMouseListener.java
new file mode 100644
index 0000000..dc41e96
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenXMouseListener.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.event.MouseEvent;
+
+import javax.swing.event.MouseInputAdapter;
+
+public class ScreenXMouseListener extends MouseInputAdapter {
+	private ScreenSharerFrame frame;
+	private double x = 0;
+
+	public ScreenXMouseListener(ScreenSharerFrame frame) {
+		this.frame = frame;
+	}
+
+	public void mouseEntered(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.W_RESIZE_CURSOR));
+	}
+
+	public void mouseExited(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+	}
+
+	public void mousePressed(MouseEvent e) {
+		frame.setShowWarning(false);
+		this.x = e.getX();
+	}
+
+	public void mouseReleased(MouseEvent e) {
+		frame.setShowWarning(true);
+	}
+
+	public void mouseDragged(MouseEvent e) {
+		if (!((Component)e.getSource()).isEnabled()) {
+			return;
+		}
+		double newX = e.getX();
+		int delta = (int) (x - newX);
+		int newXPosition = ScreenDimensions.spinnerX - delta;
+		int newWidth = ScreenDimensions.spinnerWidth + delta;
+
+		if (newXPosition >= 0 && newWidth >= 0) {
+			frame.setDoUpdateBounds(false);
+			frame.setSpinnerX(newXPosition);
+			frame.setSpinnerWidth(newWidth);
+			frame.setDoUpdateBounds(true);
+			frame.updateVScreenBounds();
+			frame.calcRescaleFactors();
+		}
+	}
+}
diff --git a/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenYMouseListener.java b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenYMouseListener.java
new file mode 100644
index 0000000..69de62e
--- /dev/null
+++ b/src/screenshare/java/org/apache/openmeetings/screen/webstart/gui/ScreenYMouseListener.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.screen.webstart.gui;
+
+import java.awt.Component;
+import java.awt.Cursor;
+import java.awt.event.MouseEvent;
+
+import javax.swing.event.MouseInputAdapter;
+
+public class ScreenYMouseListener extends MouseInputAdapter {
+	private ScreenSharerFrame frame;
+	private double y = 0;
+
+	public ScreenYMouseListener(ScreenSharerFrame frame) {
+		this.frame = frame;
+	}
+
+	public void mouseEntered(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.N_RESIZE_CURSOR));
+	}
+
+	public void mouseExited(MouseEvent e) {
+		frame.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+	}
+
+	public void mousePressed(MouseEvent e) {
+		frame.setShowWarning(false);
+		this.y = e.getY();
+	}
+
+	public void mouseReleased(MouseEvent e) {
+		frame.setShowWarning(true);
+	}
+
+	public void mouseDragged(MouseEvent e) {
+		if (!((Component)e.getSource()).isEnabled()) {
+			return;
+		}
+		double newY = e.getY();
+
+		int delta = (int) (y - newY);
+		int newYPosition = ScreenDimensions.spinnerY - delta;
+		int newHeight = ScreenDimensions.spinnerHeight + delta;
+
+		if (newYPosition >= 0 && newHeight >= 0) {
+			frame.setDoUpdateBounds(false);
+			frame.setSpinnerY(newYPosition);
+			frame.setSpinnerHeight(newHeight);
+			frame.setDoUpdateBounds(true);
+			frame.updateVScreenBounds();
+			frame.calcRescaleFactors();
+		}
+	}
+}
diff --git a/src/screenshare/resources/logback.xml b/src/screenshare/resources/logback.xml
new file mode 100644
index 0000000..44bfdf4
--- /dev/null
+++ b/src/screenshare/resources/logback.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+
+<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:noNamespaceSchemaLocation="logback.xsd">
+	<contextName>${current_openmeetings_context_name}</contextName>
+
+	<jmxConfigurator contextName="${current_openmeetings_context_name}" />
+
+	<appender name="FLOG2" class="ch.qos.logback.core.FileAppender">
+		<File>screensharing.log</File>
+		<Append>false</Append>
+		<Encoding>UTF-8</Encoding>
+		<BufferedIO>false</BufferedIO>
+		<ImmediateFlush>true</ImmediateFlush>
+		<layout class="ch.qos.logback.classic.PatternLayout">
+			<pattern>%5p %d{MM-dd HH:mm:ss.SSS } %L %c{10} [%t] - %m%n</pattern>
+		</layout>
+	</appender>
+	<appender name="CONSOLE2" class="ch.qos.logback.core.ConsoleAppender">
+		<layout class="ch.qos.logback.classic.PatternLayout">
+			<pattern>%5p %d{MM-dd HH:mm:ss.SSS } %L %c{10} [%t] - %m%n</pattern>
+		</layout>
+	</appender>
+	<logger name="org.apache.openmeetings" level="DEBUG"/>
+	<logger name="org.red5.server.net.rtmp.codec.RTMPProtocolDecoder" level="OFF"/>
+	<root level="INFO">
+		<appender-ref ref="FLOG2" />
+		<appender-ref ref="CONSOLE2" />
+	</root>
+</configuration>
diff --git a/src/screenshare/resources/logback.xsd b/src/screenshare/resources/logback.xsd
new file mode 100644
index 0000000..7e75655
--- /dev/null
+++ b/src/screenshare/resources/logback.xsd
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

+  <xs:element name="configuration">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element ref="contextName"/>

+        <xs:element ref="jmxConfigurator"/>

+        <xs:element maxOccurs="unbounded" ref="appender"/>

+        <xs:element maxOccurs="unbounded" ref="logger"/>

+        <xs:element ref="root"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="contextName" type="xs:string"/>

+  <xs:element name="jmxConfigurator">

+    <xs:complexType>

+      <xs:attribute name="contextName" use="required"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="appender">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:sequence minOccurs="0">

+          <xs:element ref="File"/>

+          <xs:element ref="Append"/>

+          <xs:element ref="Encoding"/>

+          <xs:element ref="BufferedIO"/>

+          <xs:element ref="ImmediateFlush"/>

+        </xs:sequence>

+        <xs:element ref="layout"/>

+      </xs:sequence>

+      <xs:attribute name="class" use="required"/>

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="File" type="xs:string"/>

+  <xs:element name="Append" type="xs:boolean"/>

+  <xs:element name="Encoding" type="xs:NCName"/>

+  <xs:element name="BufferedIO" type="xs:boolean"/>

+  <xs:element name="ImmediateFlush" type="xs:boolean"/>

+  <xs:element name="layout">

+    <xs:complexType>

+      <xs:choice>

+        <xs:element ref="Pattern"/>

+        <xs:element ref="pattern"/>

+      </xs:choice>

+      <xs:attribute name="class" use="required"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="Pattern" type="xs:string"/>

+  <xs:element name="pattern" type="xs:string"/>

+  <xs:element name="logger">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" minOccurs="0" ref="appender-ref"/>

+        <xs:element maxOccurs="1" minOccurs="0" ref="level"/>

+      </xs:sequence>

+      <xs:attribute name="name" use="required" type="xs:NCName"/>

+      <xs:attribute name="level" type="LoggerLevels" use="optional"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="root">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="appender-ref"/>

+      </xs:sequence>

+      <xs:attribute name="level" type="LoggerLevels" use="optional"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="appender-ref">

+    <xs:complexType>

+      <xs:attribute name="ref" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:complexType name="level">

+    <xs:sequence>

+      <xs:element ref="level"/>

+    </xs:sequence>

+  </xs:complexType>

+  <xs:element name="level">

+    <xs:complexType>

+      <xs:attribute name="value" use="required" type="xs:NCName"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:simpleType name="LoggerLevels">

+    <xs:restriction base="xs:string">

+      <xs:pattern value="off|OFF|all|ALL|inherited|INHERITED|null|NULL|error|ERROR|warn|WARN|info|INFO|debug|DEBUG|trace|TRACE"/>

+    </xs:restriction>

+  </xs:simpleType>

+</xs:schema>

diff --git a/src/screenshare/resources/quartz.properties b/src/screenshare/resources/quartz.properties
new file mode 100644
index 0000000..6762b90
--- /dev/null
+++ b/src/screenshare/resources/quartz.properties
@@ -0,0 +1,13 @@
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+org.quartz.scheduler.instanceName=ScreenSharingScheduler
+org.quartz.threadPool.threadCount=30
\ No newline at end of file
diff --git a/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java b/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java
new file mode 100644
index 0000000..8adbd3e
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/AbstractJUnitDefaults.java
@@ -0,0 +1,187 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test;
+
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Date;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomType;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.installation.ImportInitvalues;
+import org.apache.openmeetings.installation.InstallationConfig;
+import org.junit.Before;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public abstract class AbstractJUnitDefaults extends AbstractSpringTest {
+	private static final Logger log = Red5LoggerFactory.getLogger(AbstractJUnitDefaults.class);
+	
+	protected static final String username = "swagner";
+	protected static final String userpass = "qweqwe";
+	private static final String orgname = "smoketest";
+	private static final String timeZone = "Europe/Berlin";
+	private static final String useremail = "junit@openmeetings.apache.org";
+	
+	@Autowired
+	private AppointmentDao appointmentDao;
+	@Autowired
+	private AppointmentReminderTypDao reminderTypeDao;
+	@Autowired
+	private RoomTypeDao roomTypeDao;
+	@Autowired
+	private UserDao userDao;
+	@Autowired
+	private ImportInitvalues importInitvalues;
+	@Autowired
+	private ConfigurationDao configurationDao;
+	
+	private List<AppointmentReminderTyps> remindTypes;
+	private List<RoomType> roomTypes;
+
+	@Before
+	public void setUp() throws Exception {
+		super.setUp();
+		configurationDao.getCryptKey();
+        if (userDao.count() < 1) {
+            makeDefaultScheme();
+            log.info("Default scheme created successfully");
+        } else {
+            log.info("Default scheme already created");
+        }
+        remindTypes = reminderTypeDao.getAppointmentReminderTypList(1L);
+        roomTypes = roomTypeDao.getAll(1L);
+    }
+
+	public Appointment createAppointment() {
+		Date appointmentstart = new Date();
+		Date appointmentend = new Date();
+		appointmentend.setTime(appointmentstart.getTime() + 3600);
+		return createAppointment(appointmentstart, appointmentend);
+	}
+	
+	public Appointment getAppointment(Date start, Date end) {
+		assertNotNull("Can't access to appointment dao implimentation", appointmentDao);
+
+		// add new appointment
+		Appointment ap = new Appointment();
+
+		ap.setTitle("appointmentName");
+		ap.setLocation("appointmentLocation");
+
+		ap.setStart(start);
+		ap.setEnd(end);
+		ap.setDescription("appointmentDescription");
+		ap.setInserted(new Date());
+		ap.setDeleted(false);
+		ap.setIsDaily(false);
+		ap.setIsWeekly(false);
+		ap.setIsMonthly(false);
+		ap.setIsYearly(false);
+		ap.setPasswordProtected(false);
+
+		ap.setOwner(userDao.get(1L));
+		ap.setConnectedEvent(false);
+
+		if (ap.getRemind() == null && !remindTypes.isEmpty()) {
+			ap.setRemind(remindTypes.get(0));
+		}
+		
+		Room r = new Room();
+		if (!roomTypes.isEmpty()) {
+			r.setRoomtype(roomTypes.get(0));
+		}
+		r.setAppointment(true);
+		ap.setRoom(r);
+		return ap;
+	}
+
+	public Appointment createAppointment(Date start, Date end) {
+		assertNotNull("Can't access to appointment dao implimentation", appointmentDao);
+
+		// add new appointment
+		Appointment ap = new Appointment();
+
+		ap.setTitle("appointmentName");
+		ap.setLocation("appointmentLocation");
+
+		ap.setStart(start);
+		ap.setEnd(end);
+		ap.setDescription("appointmentDescription");
+		ap.setInserted(new Date());
+		ap.setDeleted(false);
+		ap.setIsDaily(false);
+		ap.setIsWeekly(false);
+		ap.setIsMonthly(false);
+		ap.setIsYearly(false);
+		ap.setPasswordProtected(false);
+
+		ap.setOwner(userDao.get(1L));
+		ap.setConnectedEvent(false);
+		ap = appointmentDao.update(ap, null, false);
+		assertNotNull("Cann't add appointment", ap.getId());
+		return ap;
+	}
+
+	public User getUser(int rnd) throws Exception {
+		User u = new User();
+		// add user
+		u.setFirstname("firstname" + rnd);
+		u.setLastname("lastname" + rnd);
+		u.setLogin("login" + rnd);
+		u.updatePassword(configurationDao, "pass" + rnd);
+		u.setLanguage_id(1L);
+		return u;
+	}
+
+	public User createUser(int rnd) throws Exception {
+		User u = getUser(rnd);
+		u = userDao.update(u, null);
+		assertNotNull("Can't add user", u);
+		return u;
+	}
+
+	private void makeDefaultScheme() throws Exception {
+		InstallationConfig cfg = new InstallationConfig();
+		cfg.username = username;
+		cfg.password = userpass;
+		cfg.email = useremail;
+		cfg.group = orgname;
+		cfg.ical_timeZone = timeZone;
+		importInitvalues.loadAll(cfg, false);
+	}
+
+	public User createUserContact(int rnd, Long ownerId) {
+		User user = userDao.getContact("email" + rnd, "firstname" + rnd, "lastname" + rnd, ownerId);
+		user = userDao.update(user, ownerId);
+		assertNotNull("Can't add user contact", user);
+		return user;
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/AbstractSpringTest.java b/src/test/java/org/apache/openmeetings/test/AbstractSpringTest.java
new file mode 100644
index 0000000..db0a5dc
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/AbstractSpringTest.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test;
+
+import static org.junit.Assert.fail;
+
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestExecutionListeners;
+import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@TestExecutionListeners({})
+@ContextConfiguration(locations={"classpath:openmeetings-applicationContext.xml"}, inheritLocations = true)
+public abstract class AbstractSpringTest extends AbstractJUnit4SpringContextTests {
+
+	@Before
+	public void setUp() throws Exception {
+		setOmHome();
+		LabelDao.initLanguageMap();
+		if (LabelDao.languages.isEmpty()) {
+			fail("Failed to set languages");
+		}
+	}
+	
+	protected void setOmHome() {
+		String webappsDir = System.getProperty("om.home", ".");
+		OmFileHelper.setOmHome(webappsDir);
+		if (!OmFileHelper.getOmHome().exists() || !OmFileHelper.getOmHome().isDirectory()) {
+			fail("Invalid directory is specified as OM HOME: " + webappsDir);
+		}
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/AbstractWicketTester.java b/src/test/java/org/apache/openmeetings/test/AbstractWicketTester.java
new file mode 100644
index 0000000..913007a
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/AbstractWicketTester.java
@@ -0,0 +1,54 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.test;

+

+import static org.apache.openmeetings.web.app.Application.getWicketTester;

+import static org.junit.Assert.assertNotNull;

+import static org.junit.Assert.assertTrue;

+

+import org.apache.openmeetings.db.entity.user.User.Type;

+import org.apache.openmeetings.web.app.WebSession;

+import org.apache.wicket.util.tester.WicketTester;

+import org.junit.After;

+

+public class AbstractWicketTester extends AbstractJUnitDefaults {

+

+	protected WicketTester tester;

+	 	

+	@Override

+	public void setUp() throws Exception {

+		super.setUp();

+        tester = getWicketTester();

+        assertNotNull("Web session should not be null", WebSession.get());

+	}

+

+	public void login(String login, String password) {

+		if (login != null && password != null) {

+			WebSession.get().signIn(login, password, Type.user, null);

+		} else {

+			WebSession.get().signIn(username, userpass, Type.user, null);

+		}

+		assertTrue("Web session is not signed in for user: " + (login != null ? login : username), WebSession.get().isSignedIn());

+	}

+	

+	@After

+	public void tearDown() {

+		tester.destroy();

+	}

+}

diff --git a/src/test/java/org/apache/openmeetings/test/EditorPaneLinkDetector.java b/src/test/java/org/apache/openmeetings/test/EditorPaneLinkDetector.java
new file mode 100644
index 0000000..b0f6dc8
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/EditorPaneLinkDetector.java
@@ -0,0 +1,310 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test;
+
+/**
+ * David Bismut, david.bismut@gmail.com
+ * Intern, SETLabs, Infosys Technologies Ltd. May 2004 - Jul 2004
+ * Ecole des Mines de Nantes, France
+ */
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseMotionAdapter;
+import java.io.IOException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.accessibility.AccessibleHypertext;
+import javax.swing.JEditorPane;
+import javax.swing.text.AttributeSet;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.Element;
+import javax.swing.text.html.HTML;
+import javax.swing.text.html.HTMLDocument;
+import javax.swing.text.html.HTMLEditorKit;
+import javax.swing.text.html.StyleSheet;
+import javax.swing.text.html.parser.ParserDelegator;
+
+/**
+ * A "HTML" JEditorPane embedded with a special HTMLDocument that detects urls
+ * and displays them as hyperlinks. When CTRL is pressed, the urls are
+ * clickable.
+ * 
+ * @author David Bismut
+ *  
+ */
+public class EditorPaneLinkDetector extends JEditorPane {
+	private static final long serialVersionUID = 2811878994346374017L;
+
+	/**
+	 * Creates a <code>EditorPaneLinkDetector</code>.
+	 */
+	public EditorPaneLinkDetector() {
+
+		HTMLEditorKit htmlkit = new HTMLEditorKit();
+
+		StyleSheet styles = htmlkit.getStyleSheet();
+		StyleSheet ss = new StyleSheet();
+
+		ss.addStyleSheet(styles);
+
+		ss.addRule("body {font-family:arial;font-size:12pt}");
+		ss.addRule("p {font-family:arial;margin:2}");
+
+		HTMLDocument doc = new HTMLDocLinkDetector(ss);
+
+		setEditorKit(htmlkit);
+
+		setDocument(doc);
+
+		addMouseMotionListener(new MouseMotionAdapter() {
+			public void mouseMoved(MouseEvent e) {
+
+				AccessibleJTextComponent context = (AccessibleJTextComponent) getAccessibleContext()
+						.getAccessibleEditableText();
+
+				AccessibleHypertext accText = (AccessibleHypertext) context
+						.getAccessibleText();
+
+				int index = accText.getIndexAtPoint(e.getPoint());
+
+				int linkIndex = accText.getLinkIndex(index);
+				if (linkIndex == -1) {
+					setToolTipText(null);
+					return;
+				}
+
+				String linkDesc = accText.getLink(linkIndex)
+						.getAccessibleActionDescription(0);
+
+				String toolTipText = "<html><body style='margin: 3'>"
+						+ linkDesc
+						+ "<br><b>CTRL + click to follow link</b></body></html>";
+				setToolTipText(toolTipText);
+			}
+		});
+
+		addKeyListener(new KeyAdapter() {
+			public void keyPressed(KeyEvent e) {
+				
+				if (e.getKeyCode() == KeyEvent.VK_CONTROL) {
+					if (isEditable())
+						setEditable(false);
+				} else {
+					if (!isEditable())
+						setEditable(true);
+				}
+
+			}
+
+			public void keyReleased(KeyEvent e) {
+				
+				if (e.getKeyCode() == KeyEvent.VK_CONTROL) {
+					setEditable(true);
+				}
+
+			}
+		});
+	}
+
+	protected class HTMLDocLinkDetector extends HTMLDocument {
+
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1226244167782160437L;
+
+		public HTMLDocLinkDetector(StyleSheet ss) {
+			super(ss);
+			
+			setAsynchronousLoadPriority(4);
+			setTokenThreshold(100);
+			setParser(new ParserDelegator());
+		}
+
+		/**
+		 * Returns true if the Element contains a HTML.Tag.A attribute, false
+		 * otherwise.
+		 * 
+		 * @param e
+		 *            the Element to be checkd
+		 * @return
+		 */
+		protected boolean isLink(Element e) {
+			
+			return (e.getAttributes().getAttribute(HTML.Tag.A) != null);
+
+		}
+
+		/**
+		 * This method corrects or creates a url contained in an Element as an
+		 * hyperlink.
+		 * 
+		 * @param e
+		 *            the Element to be computed
+		 * @throws BadLocationException
+		 */
+		protected void computeLinks(Element e) throws BadLocationException {
+			
+			int caretPos = getCaretPosition();
+			try {
+				if (isLink(e))
+					correctLink(e);
+				else
+					createLink(e);
+			} catch (IOException ex) {
+				ex.printStackTrace();
+			}
+			setCaretPosition(Math.min(caretPos, getLength()));
+		}
+
+		/**
+		 * The method corrects the url inside an Element, that is supposed to be
+		 * an element containing a link only. This function is typically called
+		 * when the url is beeing edited. What the function does is to remove
+		 * the html tags, so the url is actually edited in plain text and not as
+		 * an hyperlink.
+		 * 
+		 * @param e
+		 *            the Element that contains the url
+		 * @throws BadLocationException
+		 * @throws IOException
+		 */
+		protected void correctLink(Element e) throws BadLocationException,
+				IOException {
+			
+			int length = e.getEndOffset() - e.getStartOffset();
+
+			boolean endOfDoc = e.getEndOffset() == getLength() + 1;
+
+			// to avoid catching the final '\n' of the document.
+			if (endOfDoc)
+				length--;
+
+			String text = getText(e.getStartOffset(), length);
+
+			setOuterHTML(e, text);
+
+			// insert final spaces ignored by the html
+			Matcher spaceMatcher = Pattern.compile("(\\s+)$").matcher(text);
+
+			if (spaceMatcher.find()) {
+				String endingSpaces = spaceMatcher.group(1);
+				insertString(Math.min(getLength(), e.getEndOffset()),
+						endingSpaces, null);
+			}
+		}
+
+		/**
+		 * The method check if the element contains a url in plain text, and if
+		 * so, it creates the html tag HTML.Tag.A to have the url displayed as
+		 * an hyperlink.
+		 * 
+		 * @param e
+		 *            element that contains the url
+		 * @throws BadLocationException
+		 * @throws IOException
+		 */
+		protected void createLink(Element e) throws BadLocationException,
+				IOException {
+			
+			int caretPos = getCaretPosition();
+
+			int startOffset = e.getStartOffset();
+			int length = e.getEndOffset() - e.getStartOffset();
+
+			boolean endOfDoc = e.getEndOffset() == getLength() + 1;
+			// to avoid catching the final '\n' of the document.
+			if (endOfDoc)
+				length--;
+
+			String text = getText(startOffset, length);
+
+			Matcher matcher = Pattern.compile(
+					"(?i)(\\b(http://|https://|www.|ftp://|file:/|mailto:)\\S+)(\\s+)")
+					.matcher(text);
+
+			if (matcher.find()) {
+				String url = matcher.group(1);
+				//String prefix = matcher.group(2);
+				String endingSpaces = matcher.group(3);
+
+				// to ignore characters after the caret
+				int validPos = startOffset + matcher.start(3) + 1;
+				if (validPos > caretPos)
+					return;
+
+				Matcher dotEndMatcher = Pattern.compile("([\\W&&[^/]]+)$")
+						.matcher(url);
+
+				//Ending non alpha characters like [.,?%] shouldn't be included
+				// in the url.
+				String endingDots = "";
+				if (dotEndMatcher.find()) {
+					endingDots = dotEndMatcher.group(1);
+					url = dotEndMatcher.replaceFirst("");
+				}
+
+				text = matcher.replaceFirst("<a href='" + url + "'>" + url
+						+ "</a>" + endingDots + endingSpaces);
+
+				setOuterHTML(e, text);
+
+				// insert initial spaces ignored by the html
+				Matcher spaceMatcher = Pattern.compile("^(\\s+)").matcher(text);
+
+				if (spaceMatcher.find()) {
+					String initialSpaces = spaceMatcher.group(1);
+					insertString(startOffset, initialSpaces, null);
+				}
+
+				// insert final spaces ignored by the html
+				spaceMatcher = Pattern.compile("(\\s+)$").matcher(text);
+
+				if (spaceMatcher.find()) {
+					String extraSpaces = spaceMatcher.group(1);
+					int endoffset = e.getEndOffset();
+					if (extraSpaces.charAt(extraSpaces.length() - 1) == '\n') {
+						extraSpaces = extraSpaces.substring(0, extraSpaces
+								.length() - 1);
+						endoffset--;
+					}
+					insertString(Math.min(getLength(), endoffset), extraSpaces,
+							null);
+				}
+			}
+		}
+
+		public void remove(int offs, int len) throws BadLocationException {
+
+			super.remove(offs, len);
+			Element e = getCharacterElement(offs - len);
+			computeLinks(e);
+		}
+
+		public void insertString(int offs, String str, AttributeSet a)
+				throws BadLocationException {
+
+			super.insertString(offs, str, a);
+			Element e = getCharacterElement(offs);
+			computeLinks(e);
+		}
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/TestConnection.java b/src/test/java/org/apache/openmeetings/test/TestConnection.java
new file mode 100644
index 0000000..4bf09be
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/TestConnection.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test;
+
+import org.junit.Test;
+
+public class TestConnection {
+
+	@Test
+	public void testNoop() {
+		
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/asf/AsfCopyRightReplace.java b/src/test/java/org/apache/openmeetings/test/asf/AsfCopyRightReplace.java
new file mode 100644
index 0000000..1a78150
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/asf/AsfCopyRightReplace.java
@@ -0,0 +1,210 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.asf;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FilenameFilter;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.StringWriter;
+
+public class AsfCopyRightReplace {
+
+	String asf_copyright = "/*\n"
+			+ " * Licensed to the Apache Software Foundation (ASF) under one\n"
+			+ " * or more contributor license agreements.  See the NOTICE file\n"
+			+ " * distributed with this work for additional information\n"
+			+ " * regarding copyright ownership.  The ASF licenses this file\n"
+			+ " * to you under the Apache License, Version 2.0 (the\n"
+			+ " * \"License\") +  you may not use this file except in compliance\n"
+			+ " * with the License.  You may obtain a copy of the License at\n"
+			+ " *\n"
+			+ " *   http://www.apache.org/licenses/LICENSE-2.0\n"
+			+ " *\n"
+			+ " * Unless required by applicable law or agreed to in writing,\n"
+			+ " * software distributed under the License is distributed on an\n"
+			+ " * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n"
+			+ " * KIND, either express or implied.  See the License for the\n"
+			+ " * specific language governing permissions and limitations\n"
+			+ " * under the License.\n" + " */\n";
+
+	String asf_xml_copyright = "<!--\n"
+			+ "  Licensed to the Apache Software Foundation (ASF) under one\n"
+			+ "  or more contributor license agreements.  See the NOTICE file\n"
+			+ "  distributed with this work for additional information\n"
+			+ "  regarding copyright ownership.  The ASF licenses this file\n"
+			+ "  to you under the Apache License, Version 2.0 (the\n"
+			+ "  \"License\"); you may not use this file except in compliance\n"
+			+ "  with the License.  You may obtain a copy of the License at\n"
+			+ "  \n" + "      http://www.apache.org/licenses/LICENSE-2.0\n"
+			+ "    	  \n"
+			+ "  Unless required by applicable law or agreed to in writing,\n"
+			+ "  software distributed under the License is distributed on an\n"
+			+ "  \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n"
+			+ "  KIND, either express or implied.  See the License for the\n"
+			+ "  specific language governing permissions and limitations\n"
+			+ "  under the License.\n" + "  \n" + "-->\n";
+	
+	String asf_vm_copyright = "#\n"
+			+ "# Licensed to the Apache Software Foundation (ASF) under one\n"
+			+ "# or more contributor license agreements.  See the NOTICE file\n"
+			+ "# distributed with this work for additional information\n"
+			+ "# regarding copyright ownership.  The ASF licenses this file\n"
+			+ "# to you under the Apache License, Version 2.0 (the\n"
+			+ "# \"License\") +  you may not use this file except in compliance\n"
+			+ "# with the License.  You may obtain a copy of the License at\n"
+			+ "#\n"
+			+ "#   http://www.apache.org/licenses/LICENSE-2.0\n"
+			+ "#\n"
+			+ "# Unless required by applicable law or agreed to in writing,\n"
+			+ "# software distributed under the License is distributed on an\n"
+			+ "# \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n"
+			+ "# KIND, either express or implied.  See the License for the\n"
+			+ "# specific language governing permissions and limitations\n"
+			+ "# under the License.\n" + "#/\n";
+
+	public static void main(String... args) {
+		new AsfCopyRightReplace();
+	}
+
+	public AsfCopyRightReplace() {
+		scanFolder(new File("./src/main"));
+	}
+
+	private void scanFolder(File folder) {
+
+		for (File javaFile : folder.listFiles(new FilenameFilter() {
+			public boolean accept(File b, String name) {
+				return name.endsWith(".java") || name.endsWith(".vm");
+			}
+		})) {
+			scanAndWriteJavaFile(javaFile);
+		}
+
+		for (File javaFile : folder.listFiles(new FilenameFilter() {
+			public boolean accept(File b, String name) {
+				return name.endsWith(".xml") || name.endsWith(".lzx");
+			}
+		})) {
+			scanAndWriteXMLFile(javaFile);
+		}
+
+		for (File folderFile : folder.listFiles(new FilenameFilter() {
+			public boolean accept(File b, String name) {
+				File f = new File(b, name);
+				return f.isDirectory();
+			}
+		})) {
+			scanFolder(folderFile);
+		}
+	}
+
+	private void scanAndWriteXMLFile(File javaFile) {
+		try {
+			System.out.println("Processing " + javaFile.getCanonicalPath());
+
+			BufferedReader is = new BufferedReader(new InputStreamReader(
+					new FileInputStream(javaFile), "UTF-8"));
+
+			String line;
+			String firstline = "";
+			StringWriter strWriter = new StringWriter();
+			int i = 0;
+
+			while ((line = is.readLine()) != null) {
+				if (i == 0) {
+					firstline = line;
+					
+					if (firstline.startsWith("<canvas")) {
+						strWriter.append(asf_xml_copyright);
+					} else if (firstline.startsWith("<library")) {
+						strWriter.append(asf_xml_copyright);
+					}
+							
+					
+				} else if (i == 1) {
+					if (firstline.startsWith("<?xml ")
+							&& !line.startsWith("<!--")) {
+						strWriter.append(asf_xml_copyright);
+					} else if (firstline.startsWith("<?xml ")
+							&& !line.startsWith("<library")) {
+						strWriter.append(asf_xml_copyright);
+					} else if (firstline.startsWith("<?xml ")
+							&& !line.startsWith("<canvas")) {
+						strWriter.append(asf_xml_copyright);
+					}
+				}
+				strWriter.append(line + "\n");
+				i++;
+			}
+			is.close();
+
+			OutputStreamWriter out = new OutputStreamWriter(
+					new FileOutputStream(javaFile.getCanonicalPath()), "UTF-8");
+
+			out.write(strWriter.toString());
+			out.flush();
+			out.close();
+
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+	}
+
+	private void scanAndWriteJavaFile(File javaFile) {
+		try {
+			System.out.println("Processing " + javaFile.getCanonicalPath());
+
+			BufferedReader is = new BufferedReader(new InputStreamReader(
+					new FileInputStream(javaFile), "UTF-8"));
+
+			String line;
+			StringWriter strWriter = new StringWriter();
+			int i = 0;
+
+			while ((line = is.readLine()) != null) {
+				if (i == 0) {
+					if (line.startsWith("package ")) {
+						strWriter.append(asf_copyright);
+					} else if (line.startsWith("## OpenMeetings") 
+							&& javaFile.getName().endsWith(".vm")) {
+						strWriter.append(asf_vm_copyright);
+					}
+				}
+				strWriter.append(line + "\n");
+				i++;
+			}
+			is.close();
+			
+			OutputStreamWriter out = new OutputStreamWriter(
+					new FileOutputStream(javaFile.getCanonicalPath()), "UTF-8");
+
+			out.write(strWriter.toString());
+			out.flush();
+			out.close();
+
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/backup/TestOldBackups.java b/src/test/java/org/apache/openmeetings/test/backup/TestOldBackups.java
new file mode 100644
index 0000000..5d8cb54
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/backup/TestOldBackups.java
@@ -0,0 +1,116 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.test.backup;

+

+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;

+import static org.junit.Assert.assertTrue;

+import static org.junit.Assert.fail;

+

+import java.io.File;

+import java.io.FileInputStream;

+import java.io.IOException;

+import java.io.InputStream;

+

+import org.apache.openmeetings.backup.BackupImport;

+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;

+import org.apache.openmeetings.db.dao.calendar.MeetingMemberDao;

+import org.apache.openmeetings.db.dao.room.RoomDao;

+import org.apache.openmeetings.db.dao.room.RoomOrganisationDao;

+import org.apache.openmeetings.db.dao.user.OrganisationDao;

+import org.apache.openmeetings.db.dao.user.UserDao;

+import org.apache.openmeetings.test.AbstractJUnitDefaults;

+import org.junit.Test;

+import org.red5.logging.Red5LoggerFactory;

+import org.slf4j.Logger;

+import org.springframework.beans.factory.annotation.Autowired;

+

+public class TestOldBackups extends AbstractJUnitDefaults {

+	private static final Logger log = Red5LoggerFactory.getLogger(TestOldBackups.class, webAppRootKey);

+	

+	@Autowired

+	private BackupImport backupController;

+	@Autowired

+	private OrganisationDao organisationDao;

+	@Autowired

+	private UserDao usersDao;

+	@Autowired

+	private RoomDao roomDao;

+	@Autowired

+	private AppointmentDao appointmentDao;

+	@Autowired

+	private MeetingMemberDao meetingMemberDao;

+	@Autowired

+	private RoomOrganisationDao roomOrganisationDao;

+

+	@Test

+	public void importOldVersions() {

+		String backupsDir = System.getProperty("backups.dir", ".");

+		File backupsHome = new File(backupsDir);

+		

+		if (!backupsHome.exists() || !backupsHome.isDirectory()) {

+			fail("Invalid directory is specified for backup files: " + backupsDir);

+		}

+		long orgCount = 0;

+		long userCount = 0;

+		long roomCount = 0;

+		long roomOrgCount = 0;

+		long apptCount = 0;

+		long meetingMembersCount = 0;

+		for (File backup : backupsHome.listFiles()) {

+			String name = backup.getName();

+			log.debug("Import of backup file : '" + name + "' is started ...");

+			InputStream is = null;

+			try {

+				is = new FileInputStream(backup);

+				backupController.performImport(is);

+				long newOrgCount = organisationDao.count();

+				long newUserCount = usersDao.count();

+				long newRoomCount = roomDao.count();

+				long newRoomOrgCount = roomOrganisationDao.get().size();

+				long newApptCount = appointmentDao.getAppointments().size();

+				log.debug("Now DB contains '" + newApptCount + "' appointments");

+				long newMeetingMembersCount = meetingMemberDao.getMeetingMembers().size();

+				assertTrue("Zero organizations were imported from " + name, newOrgCount > orgCount);

+				assertTrue("Zero users were imported from " + name, newUserCount > userCount);

+				assertTrue("Zero rooms were imported from " + name, newRoomCount > roomCount);

+				assertTrue("Zero room organizations were imported from " + name, newRoomOrgCount > roomOrgCount);

+				assertTrue("Zero appointments were imported from " + name + ", apptCount = " + apptCount, newApptCount > apptCount);

+				assertTrue("Zero meeting members were imported from " + name, newMeetingMembersCount > meetingMembersCount);

+				

+				orgCount = newOrgCount;

+				userCount = newUserCount;

+				roomCount = newRoomCount;

+				roomOrgCount = newRoomOrgCount;

+				apptCount = newApptCount;

+				meetingMembersCount = newMeetingMembersCount;

+			} catch (Exception e) {

+				throw new RuntimeException("Unexpected exception while importing backup: " + name, e);

+			} finally {

+				if (is != null) {

+					try {

+						is.close();

+					} catch (IOException e) {

+						throw new RuntimeException("Error while closing ldap config file", e);

+					}

+				}

+			}

+			log.debug("... Done.");

+		}

+	}

+}

diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestAppointmentAddAppointment.java b/src/test/java/org/apache/openmeetings/test/calendar/TestAppointmentAddAppointment.java
new file mode 100644
index 0000000..615b784
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestAppointmentAddAppointment.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.junit.Assert.assertTrue;
+
+import java.util.Calendar;
+
+import org.apache.openmeetings.data.calendar.management.AppointmentLogic;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.test.AbstractWicketTester;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+public class TestAppointmentAddAppointment extends AbstractWicketTester {
+	private static final Logger log = Red5LoggerFactory.getLogger(TestAppointmentAddAppointment.class, webAppRootKey);
+
+	@Autowired
+	private AppointmentLogic appointmentLogic;
+	@Autowired
+	private AppointmentDao appointmentDao;
+
+	@Test
+	public void saveAppointment() throws Exception {
+		log.debug("- 1 MeetingReminderJob.execute");
+		log.warn("- 2 MeetingReminderJob.execute");
+
+		Calendar start = Calendar.getInstance();
+		start.setTimeInMillis(start.getTimeInMillis() + 600000);
+
+		Calendar end = Calendar.getInstance();
+		end.setTimeInMillis(start.getTimeInMillis() + 600000);
+
+		String appointmentName = "Test 01";
+		String appointmentDescription = "Descr";
+		Long users_id = 1L;
+		String appointmentLocation = "office";
+		Boolean isMonthly = false;
+		Boolean isDaily = false;
+		Long categoryId = 1L;
+		Boolean isWeekly = false;
+		Long remind = 3L;
+		Boolean isYearly = false;
+		String[] mmClient = new String[1];
+		for (int i = 0; i < 1; i++) {
+			mmClient[0] = createClientObj("firstname" + i, "lastname" + i,
+					"first" + i + ".last" + i + "@webbase-design.de", "Etc/GMT+1");
+		}
+		Long language_id = 1L;
+		Long roomType = 1L;
+
+		Appointment a = appointmentLogic.getAppointment(appointmentName,
+				appointmentLocation, appointmentDescription,
+				start, end, isDaily, isWeekly,
+				isMonthly, isYearly, categoryId, remind, mmClient,
+				roomType, language_id, false, "", -1, users_id);
+		a = appointmentDao.update(a, users_id);
+		
+		Thread.sleep(3000);
+		
+		appointmentLogic.doScheduledMeetingReminder();
+		
+		Thread.sleep(3000);
+		
+		assertTrue("Saved appointment should have valid id: " + a.getId(), a.getId() != null && a.getId() > 0);
+	}
+
+	private String createClientObj(String firstname, String lastname, String email, String jNameTimeZone) {
+		StringBuilder sb = new StringBuilder();
+		sb.append(",") //memberId
+			.append(firstname).append(",")
+			.append(lastname).append(",")
+			.append(email).append(",")
+			.append(",") //userId
+			.append(jNameTimeZone);
+		return sb.toString();
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestAppointmentSchedulerTask.java b/src/test/java/org/apache/openmeetings/test/calendar/TestAppointmentSchedulerTask.java
new file mode 100644
index 0000000..226cb5d
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestAppointmentSchedulerTask.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+import static org.junit.Assert.assertTrue;
+
+import org.apache.openmeetings.data.calendar.management.AppointmentLogic;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestAppointmentSchedulerTask extends AbstractJUnitDefaults {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(TestAppointmentSchedulerTask.class, OpenmeetingsVariables.webAppRootKey);
+	
+	@Autowired
+	private AppointmentLogic appointmentLogic;
+	
+	@Test
+	public void doIt() {
+		log.debug("- 1 MeetingReminderJob.execute");
+		log.warn("- 2 MeetingReminderJob.execute");
+		try {
+			appointmentLogic.doScheduledMeetingReminder();
+			
+			assertTrue(true);
+		} catch (Exception err){
+			log.error("execute",err);
+		}
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureAppointment.java b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureAppointment.java
new file mode 100644
index 0000000..ea529fa
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureAppointment.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+
+public class TestDatabaseStructureAppointment extends AbstractJUnitDefaults {
+
+	private static final Logger log = Logger.getLogger(TestDatabaseStructureAppointment.class);
+	@Autowired
+	private AppointmentDao appointmentDao;
+
+	@Test
+	public void testAddingGroup(){
+
+		try {
+			
+				Calendar cal = Calendar.getInstance();
+				cal.set(2008, 9, 2);
+				cal.get(Calendar.DAY_OF_MONTH);
+				cal.getTime();
+				
+				SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd" );
+				Date date = format.parse( "2008-17-08" );
+				Date date2 = format.parse( "2008-18-08" );
+		
+				List<Appointment> listAppoints =	appointmentDao.getAppointmentsByRange(1L, date, date2);
+			//List<Appointment> listAppoints = AppointmentDaoImpl.getInstance().searchAppointmentsByName("%");
+			//AppointmentDaoImpl.getInstance().getNextAppointmentById(1L);
+			//AppointmentDaoImpl.getInstance().addAppointment("mezo",1L, "Pforzheim", "zweiter", Calendar.getInstance().getTime() , 
+				//date, null, true, null, null, 1L,1L);
+			//AppointmentDaoImpl.getInstance().addAppointment("testap", "erster Test",Calendar.getInstance().getTime() , 
+					///Calendar.getInstance().getTime(), true, false, false, false, new Long(1), 1L);
+			log.debug("Anzahl: "+listAppoints.size());
+			
+			
+			for (Appointment appoints : listAppoints) {
+				log.debug("Termin: "+appoints.getTitle()+" startDate: "+appoints.getStart()+ " endDate: "+appoints.getEnd());
+				log.debug("MeetingMembers: "+appoints.getMeetingMembers().size());
+			}
+			
+			for (Iterator<Appointment> iter = listAppoints.iterator();iter.hasNext();) {
+				log.debug(""+iter.next());
+			}
+			
+			//AppointmentDaoImpl.getInstance().updateAppointment(1L,"neu", "erster Test",Calendar.getInstance().getTime() , 
+					//Calendar.getInstance().getTime(), true, false, false, false, new Long(1));
+			//log.debug("AppointmentReminderTypDaoImpl: "+appointmentReminderTypDaoImpl.getAppointmentReminderTypById(1L));
+		} catch (Exception err) {
+
+			log.error("[testAddingGroup]",err);
+
+		}
+
+		
+
+		
+
+	}
+
+
+
+}
+
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureAppointmentReminderTyp.java b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureAppointmentReminderTyp.java
new file mode 100644
index 0000000..95a5a0f
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureAppointmentReminderTyp.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+//import groovy.sql.Sql;
+
+import java.util.Calendar;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;
+import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestDatabaseStructureAppointmentReminderTyp extends AbstractJUnitDefaults {
+
+	private static final Logger log = Logger
+			.getLogger(TestDatabaseStructureAppointmentReminderTyp.class);
+
+	@Autowired
+	private AppointmentReminderTypDao appointmentReminderTypDaoImpl;
+
+	@Test
+	public void testAddingGroup() {
+
+		try {
+
+			Calendar cal = Calendar.getInstance();
+			cal.set(2008, 9, 2);
+			cal.get(Calendar.DAY_OF_MONTH);
+			cal.getTime();
+
+			appointmentReminderTypDaoImpl.addAppointmentReminderTyps(1L,
+					"test 5 min", -1);
+			List<AppointmentReminderTyps> listAppoints = appointmentReminderTypDaoImpl
+					.getAppointmentReminderTypList(1);
+
+			log.debug("Anzahl: " + listAppoints.size());
+
+			for (AppointmentReminderTyps appoints : listAppoints) {
+				// log.debug("Termin: "+appoints.getAppointmentName()+" startDate: "+appoints.getAppointmentStarttime()+
+				// " endDate: "+appoints.getAppointmentEndtime());
+				log.debug("AppointmentReminderTyps: " + appoints.getName());
+			}
+
+			// for (Iterator<Appointment> iter =
+			// listAppoints.iterator();iter.hasNext();) {
+			// log.debug(iter.next());
+			// }
+
+		} catch (Exception err) {
+
+			log.error("[testAddingGroup]", err);
+
+		}
+
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureCategory.java b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureCategory.java
new file mode 100644
index 0000000..40ec53e
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureCategory.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.db.dao.calendar.AppointmentCategoryDao;
+import org.apache.openmeetings.db.entity.calendar.AppointmentCategory;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestDatabaseStructureCategory extends AbstractJUnitDefaults {
+
+	@Autowired
+	private AppointmentCategoryDao appointmentCategoryDaoImpl;
+
+	private static final Logger log = Logger
+			.getLogger(TestDatabaseStructureCategory.class);
+
+	@Test
+	public void testAddingGroup() {
+
+		try {
+
+			// appointmentCategoryDaoImpl.addAppointmentCategory(2L, "neu2",
+			// "test");
+			// appointmentCategoryDaoImpl.addAppointmentCategory("dritte");
+			// appointmentCategoryDaoImpl.updateAppointmentCategory(2L, "alt");
+
+			List<AppointmentCategory> appointmentCategory = appointmentCategoryDaoImpl
+					.getAppointmentCategoryList();
+			log.debug("Anzahl: " + appointmentCategory.size());
+
+			for (int x = 0; x < appointmentCategory.size(); x++) {
+				log.debug("id: " + appointmentCategory.get(x).getCategoryId());
+
+			}
+
+		} catch (Exception err) {
+
+			log.error("[testAddingGroup]", err);
+
+		}
+
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java
new file mode 100644
index 0000000..63a0128
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetAppointmentByRange.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Random;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestDatabaseStructureGetAppointmentByRange extends AbstractJUnitDefaults {
+	private static final Logger log = Logger.getLogger(TestDatabaseStructureGetAppointmentByRange.class);
+	@Autowired
+	private AppointmentDao appointmentDao;
+
+	@Test
+	public void test() {
+		log.debug("Test started");
+		Long userId = 1L;
+		
+		Random rnd = new Random();
+		Calendar now = Calendar.getInstance();
+		Calendar rangeStart = Calendar.getInstance();
+		rangeStart.setTime(now.getTime());
+		rangeStart.add(Calendar.DATE, -1);
+		Calendar rangeEnd = Calendar.getInstance();
+		rangeEnd.add(Calendar.DATE, 1);
+		rangeEnd.setTime(now.getTime());
+		
+		Calendar a1End = Calendar.getInstance();
+		a1End.setTime(now.getTime());
+		a1End.add(Calendar.HOUR_OF_DAY, 1);
+		Appointment a1 = getAppointment(now.getTime(), a1End.getTime());
+		a1.setTitle("AppointmentByRange_a1");
+
+		Appointment a2 = getAppointment(now.getTime(), a1End.getTime());
+		a2.setTitle("AppointmentByRange_a2");
+		a2.setMeetingMembers(new ArrayList<MeetingMember>());
+		MeetingMember mm1 = new MeetingMember();
+		mm1.setUser(createUserContact(rnd.nextInt(), userId));
+		mm1.setAppointment(a2);
+		a2.getMeetingMembers().add(mm1);
+		
+		Appointment a3 = getAppointment(now.getTime(), a1End.getTime());
+		a3.setTitle("AppointmentByRange_a3");
+		a3.setMeetingMembers(new ArrayList<MeetingMember>());
+		MeetingMember mm2 = new MeetingMember();
+		mm2.setUser(createUserContact(rnd.nextInt(), userId));
+		mm2.setAppointment(a3);
+		a3.getMeetingMembers().add(mm2);
+		MeetingMember mm3 = new MeetingMember();
+		mm3.setUser(createUserContact(rnd.nextInt(), userId));
+		mm3.setAppointment(a3);
+		a3.getMeetingMembers().add(mm3);
+		
+		a1 = appointmentDao.update(a1, userId);
+		a2 = appointmentDao.update(a2, userId);
+		a3 = appointmentDao.update(a3, userId);
+		
+		int a1found = 0, a2found = 0, a3found = 0;
+		for (Appointment a : appointmentDao.getAppointmentsByRange(userId, rangeStart.getTime(), rangeEnd.getTime())) {
+			int mmCount = a.getMeetingMembers() == null ? 0 : a.getMeetingMembers().size();
+			if (a.getId().equals(a1.getId())) {
+				assertEquals("Inapropriate MeetingMembers count", 0, mmCount);
+				a1found++;
+			}
+			if (a.getId().equals(a2.getId())) {
+				assertEquals("Inapropriate MeetingMembers count", 1, mmCount);
+				a2found++;
+			}
+			if (a.getId().equals(a3.getId())) {
+				assertEquals("Inapropriate MeetingMembers count", 2, mmCount);
+				a3found++;
+			}
+		}
+		assertEquals("Inappropriate count of appointments without members found", 1, a1found);
+		assertEquals("Inappropriate count of appointments with 1 member found", 1, a2found);
+		assertEquals("Inappropriate count of appointments with 2 members found", 1, a3found);
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetUserStart.java b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetUserStart.java
new file mode 100644
index 0000000..764d597
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureGetUserStart.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestDatabaseStructureGetUserStart extends AbstractJUnitDefaults {
+	private static final Logger log = Logger.getLogger(TestDatabaseStructureGetUserStart.class);
+	@Autowired
+	private UserDao usersDao;
+	
+	@Test
+	public void testAddingGroup() {
+		try {
+			usersDao.get(new Long(1));
+		} catch (Exception err) {
+			log.error("[testAddingGroup]", err);
+		}
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureMeetingMember.java b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureMeetingMember.java
new file mode 100644
index 0000000..22133ab
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureMeetingMember.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+
+
+public class TestDatabaseStructureMeetingMember extends AbstractJUnitDefaults {
+
+	@Test
+	public void testUpdateMeetingMember(){
+		//FIXME need to be refactored !!!!
+		
+		//MeetingMemberDaoImpl.getInstance().addMeetingMember("Adddd", "dir", "1", "2", 1L, 1L, "test");	
+		//MeetingMemberDaoImpl.getInstance().addMeetingMember(firstname, lastname, memberStatus, appointmentStatus, appointmentId, userid, email)
+		
+		
+		//MeetingMemberDaoImpl.getInstance().getMeetingMemberById(1L);
+		//MeetingMemberDaoImpl.getInstance().deleteMeetingMember(2L);
+		
+		//meetingMemberDao.updateMeetingMember(1l,"bbbbbb", "dir", "1", "2", 1L, 1L, "test", ""); 
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureUsersSearch.java b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureUsersSearch.java
new file mode 100644
index 0000000..fc9c285
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestDatabaseStructureUsersSearch.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.data.user.UserManager;
+import org.apache.openmeetings.db.dto.basic.SearchResult;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+public class TestDatabaseStructureUsersSearch extends AbstractJUnitDefaults {
+    @Autowired
+    private UserManager userManager;
+
+	private static final Logger log = Logger.getLogger(TestDatabaseStructureUsersSearch.class);
+
+	@Test
+	public void testAddingGroup(){
+
+		try {
+			
+			 SearchResult<User> users = userManager.getAllUserByRange("first", 0, 10, "orderby", true);
+			 log.debug("[result]" + users.getResult().size());
+			 log.debug("[records]"+ users.getRecords());
+			 
+			 //GroupMemberDaoImpl.getInstance().addGroupMember("Ad", "dir", Calendar.getInstance().getTime(), "1", "2", "interpol155", 1L, 1L);	
+			//GroupMemberDaoImpl.getInstance().addGroupMember(firstname, lastname, age, memberStatus, appointmentStatus, password, adresses_id, appointmentId);
+			
+			//GroupMemberDaoImpl.getInstance().getGroupMemberById(1L);
+			//GroupMemberDaoImpl.getInstance().deleteGroupMember(2L);
+			//GroupMemberDaoImpl.getInstance().updateGroupMember(1L, "Eugen", "Schwert", Calendar.getInstance().getTime(), "1", "2", "interpol155", 1L, 1L);
+		} catch (Exception err) {
+
+			log.error("[testAddingGroup]",err);
+
+		}
+
+		
+
+		
+
+	}
+
+
+
+}
+
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestGetAppointment.java b/src/test/java/org/apache/openmeetings/test/calendar/TestGetAppointment.java
new file mode 100644
index 0000000..263adfe
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestGetAppointment.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Calendar;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestGetAppointment extends AbstractJUnitDefaults {
+	private static final Logger log = Logger.getLogger(TestGetAppointment.class);
+
+	@Autowired
+	private AppointmentDao appointmentDao;
+	
+	@Test
+	public void getAppoinment() {
+		log.debug("getAppoinment enter");
+		Long userId = 1L;
+		
+		Calendar now = Calendar.getInstance();
+		Calendar a1End = Calendar.getInstance();
+		a1End.setTime(now.getTime());
+		a1End.add(Calendar.HOUR_OF_DAY, 1);
+		Appointment a1 = getAppointment(now.getTime(), a1End.getTime());
+		a1.setTitle("GetAppointment");
+		
+		a1 = appointmentDao.update(a1, userId);
+		
+		Appointment a = appointmentDao.get(a1.getId());
+		assertNotNull("Failed to get Appointment By id", a);
+		assertEquals("Inapropriate MeetingMembers count", 0, a.getMeetingMembers() == null ? 0 : a.getMeetingMembers().size());
+	}
+	
+}
diff --git a/src/test/java/org/apache/openmeetings/test/calendar/TestSendIcalMessage.java b/src/test/java/org/apache/openmeetings/test/calendar/TestSendIcalMessage.java
new file mode 100644
index 0000000..6042df7
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/calendar/TestSendIcalMessage.java
@@ -0,0 +1,306 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.calendar;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.net.SocketException;
+import java.net.URI;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.Properties;
+import java.util.Vector;
+
+import javax.activation.DataHandler;
+import javax.mail.BodyPart;
+import javax.mail.Message;
+import javax.mail.Multipart;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+
+import net.fortuna.ical4j.data.CalendarOutputter;
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.TimeZone;
+import net.fortuna.ical4j.model.TimeZoneRegistry;
+import net.fortuna.ical4j.model.TimeZoneRegistryFactory;
+import net.fortuna.ical4j.model.ValidationException;
+import net.fortuna.ical4j.model.component.VEvent;
+import net.fortuna.ical4j.model.component.VTimeZone;
+import net.fortuna.ical4j.model.parameter.Cn;
+import net.fortuna.ical4j.model.parameter.Role;
+import net.fortuna.ical4j.model.property.Attendee;
+import net.fortuna.ical4j.model.property.CalScale;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.model.property.Organizer;
+import net.fortuna.ical4j.model.property.ProdId;
+import net.fortuna.ical4j.model.property.Uid;
+import net.fortuna.ical4j.model.property.Version;
+import net.fortuna.ical4j.util.UidGenerator;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.mail.ByteArrayDataSource;
+import org.apache.openmeetings.util.mail.IcalHandler;
+import org.apache.openmeetings.util.mail.SmtpAuthenticator;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestSendIcalMessage extends AbstractJUnitDefaults {
+
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			TestAppointmentSchedulerTask.class,
+			OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private ConfigurationDao configurationDao;
+
+	private byte[] iCalMimeBody;
+
+	String subject = "test iCal";
+	String recipients = "seba.wagner@gmail.com";
+	String htmlBody = "test";
+
+	
+	public void simpleInvitionIcalLink() {
+		// Create a TimeZone
+		TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance()
+				.createRegistry();
+		TimeZone timezone = registry.getTimeZone("America/Mexico_City");
+		VTimeZone tz = timezone.getVTimeZone();
+
+		// Start Date is on: April 1, 2008, 9:00 am
+		java.util.Calendar startDate = new GregorianCalendar();
+		startDate.setTimeZone(timezone);
+		startDate.set(java.util.Calendar.MONTH, java.util.Calendar.APRIL);
+		startDate.set(java.util.Calendar.DAY_OF_MONTH, 1);
+		startDate.set(java.util.Calendar.YEAR, 2008);
+		startDate.set(java.util.Calendar.HOUR_OF_DAY, 9);
+		startDate.set(java.util.Calendar.MINUTE, 0);
+		startDate.set(java.util.Calendar.SECOND, 0);
+
+		// End Date is on: April 1, 2008, 13:00
+		java.util.Calendar endDate = new GregorianCalendar();
+		endDate.setTimeZone(timezone);
+		endDate.set(java.util.Calendar.MONTH, java.util.Calendar.APRIL);
+		endDate.set(java.util.Calendar.DAY_OF_MONTH, 1);
+		endDate.set(java.util.Calendar.YEAR, 2008);
+		endDate.set(java.util.Calendar.HOUR_OF_DAY, 13);
+		endDate.set(java.util.Calendar.MINUTE, 0);
+		endDate.set(java.util.Calendar.SECOND, 0);
+
+		// Create the event
+		String eventName = "Progress Meeting";
+		DateTime start = new DateTime(startDate.getTime());
+		DateTime end = new DateTime(endDate.getTime());
+		VEvent meeting = new VEvent(start, end, eventName);
+
+		// add timezone info..
+		meeting.getProperties().add(tz.getTimeZoneId());
+
+		// generate unique identifier..
+		UidGenerator ug;
+		try {
+			ug = new UidGenerator("uidGen");
+
+			Uid uid = ug.generateUid();
+			meeting.getProperties().add(uid);
+		} catch (SocketException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+
+		// add attendees..
+		Attendee dev1 = new Attendee(URI.create("mailto:dev1@mycompany.com"));
+		dev1.getParameters().add(Role.REQ_PARTICIPANT);
+		dev1.getParameters().add(new Cn("Developer 1"));
+		meeting.getProperties().add(dev1);
+
+		Attendee dev2 = new Attendee(URI.create("mailto:dev2@mycompany.com"));
+		dev2.getParameters().add(Role.OPT_PARTICIPANT);
+		dev2.getParameters().add(new Cn("Developer 2"));
+		meeting.getProperties().add(dev2);
+
+		// Create a calendar
+		net.fortuna.ical4j.model.Calendar icsCalendar = new net.fortuna.ical4j.model.Calendar();
+		icsCalendar.getProperties().add(
+				new ProdId("-//Events Calendar//iCal4j 1.0//EN"));
+		icsCalendar.getProperties().add(CalScale.GREGORIAN);
+		icsCalendar.getProperties().add(Version.VERSION_2_0);
+
+		// Add the event and print
+		icsCalendar.getComponents().add(meeting);
+		
+		Organizer orger = new Organizer(URI.create("seba.wagner@gmail.com"));
+		orger.getParameters().add(new Cn("Sebastian Wagner"));
+		meeting.getProperties().add(orger);
+		
+		icsCalendar.getProperties().add(Method.REQUEST);
+		
+		System.out.println(icsCalendar);
+		
+		
+		
+
+		ByteArrayOutputStream bout = new ByteArrayOutputStream();
+		CalendarOutputter outputter = new CalendarOutputter();
+		try {
+			outputter.output(icsCalendar, bout);
+			iCalMimeBody = bout.toByteArray();
+			
+			sendIcalMessage();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (ValidationException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+		
+
+	}
+
+	
+	@Test
+	public void sendInvitionIcalLink() {
+		try {
+
+			String email = "hans@webbase-design.de";
+			String username = "shans";
+			boolean invitor = false;
+
+			Calendar start = Calendar.getInstance();
+
+			Calendar end = Calendar.getInstance();
+
+			IcalHandler handler = new IcalHandler(
+					IcalHandler.ICAL_METHOD_REQUEST);
+
+			// Transforming Meeting Members
+
+			HashMap<String, String> attendeeList = handler.getAttendeeData(
+					email, username, invitor);
+
+			HashMap<String, String> organizerAttendee = handler
+					.getAttendeeData(recipients, "seba-test", true);
+
+			Vector<HashMap<String, String>> atts = new Vector<HashMap<String, String>>();
+			atts.add(attendeeList);
+
+			// Create ICal Message
+			String meetingId = handler.addNewMeeting(start.getTime(), end.getTime(), "test event",
+					atts, "localhost:5080/link_openmeetings",
+					organizerAttendee, "", TimeZone.getDefault());
+
+			log.debug("meetingId " + meetingId);
+
+			iCalMimeBody = handler.getIcalAsByteArray();
+
+			sendIcalMessage();
+
+			// return MailHandler.sendMail(email, subject, template);
+
+		} catch (Exception err) {
+			log.error("sendInvitionIcalLink", err);
+		}
+	}
+
+	private void sendIcalMessage() throws Exception {
+
+		log.debug("sendIcalMessage");
+
+		// Evaluating Configuration Data
+		String smtpServer = configurationDao.getConfValue("smtp_server", String.class, "");
+		String smtpPort = configurationDao.getConfValue("smtp_port", String.class, "");
+		String from = configurationDao.getConfValue("system_email_addr", String.class, "");
+		String emailUsername = configurationDao.getConfValue("email_username", String.class, "");
+		String emailUserpass = configurationDao.getConfValue("email_userpass", String.class, "");
+
+		Properties props = System.getProperties();
+
+		props.put("mail.smtp.host", smtpServer);
+		props.put("mail.smtp.port", smtpPort);
+
+		boolean isTls = (1 == configurationDao.getConfValue("mail.smtp.starttls.enable", Integer.class, "0"));
+		if (isTls) {
+			props.put("mail.smtp.starttls.enable", "true");
+		}
+
+		// Check for Authentification
+		Session session = null;
+		if (emailUsername != null && emailUsername.length() > 0
+				&& emailUserpass != null && emailUserpass.length() > 0) {
+			// use SMTP Authentication
+			props.put("mail.smtp.auth", "true");
+			session = Session.getDefaultInstance(props, new SmtpAuthenticator(
+					emailUsername, emailUserpass));
+		} else {
+			// not use SMTP Authentication
+			session = Session.getDefaultInstance(props, null);
+		}
+
+		// Building MimeMessage
+		MimeMessage mimeMessage = new MimeMessage(session);
+		mimeMessage.setSubject(subject);
+		mimeMessage.setFrom(new InternetAddress(from));
+		mimeMessage.addRecipients(Message.RecipientType.TO,
+				InternetAddress.parse(recipients, false));
+
+		// -- Create a new message --
+		BodyPart msg = new MimeBodyPart();
+		msg.setDataHandler(new DataHandler(new ByteArrayDataSource(htmlBody,
+				"text/html; charset=\"utf-8\"")));
+
+		Multipart multipart = new MimeMultipart();
+
+		BodyPart iCalAttachment = new MimeBodyPart();
+		iCalAttachment.setDataHandler(new DataHandler(
+				new javax.mail.util.ByteArrayDataSource(
+						new ByteArrayInputStream(iCalMimeBody),
+						"text/calendar;method=REQUEST;charset=\"UTF-8\"")));
+		iCalAttachment.setFileName("invite.ics");
+
+		multipart.addBodyPart(iCalAttachment);
+		multipart.addBodyPart(msg);
+
+		mimeMessage.setSentDate(new Date());
+		mimeMessage.setContent(multipart);
+
+		// -- Set some other header information --
+		// mimeMessage.setHeader("X-Mailer", "XML-Mail");
+		// mimeMessage.setSentDate(new Date());
+
+		// Transport trans = session.getTransport("smtp");
+		Transport.send(mimeMessage);
+
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/chat/TestChatLinking.java b/src/test/java/org/apache/openmeetings/test/chat/TestChatLinking.java
new file mode 100644
index 0000000..3ff1c4c
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/chat/TestChatLinking.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.chat;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import junit.framework.TestCase;
+
+import org.junit.Test;
+
+public class TestChatLinking extends TestCase {
+	
+	@Test
+	public void testChatParser(){
+		try {
+			
+			String text = "hasn http://www.google.de peter hasn http://www.google.de ";
+			
+			System.out.println(link(text));
+			
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+	}
+	
+	
+	private String link(String input) {
+		try {
+			
+			String tReturn = "";
+			
+			String parts[] = input.split(" ");
+			
+			for (int t=0;t<parts.length;t++) {
+				
+				String text = parts[t];
+	
+				//System.out.println("Part 1 "+text);
+				
+				Matcher matcher = Pattern.compile("(^|[ \t\r\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-]))").matcher(text);
+
+				if (matcher.find()) {
+					text = matcher.replaceFirst("<u><FONT color=\"#0000CC\"><a href='" + text + "'>" + text
+							+ "</a></FONT></u>");
+
+				}
+				
+				//System.out.println("Part 2 "+text);
+				
+				if (t != 0) {
+					tReturn += " ";
+				}
+				
+				tReturn += text;
+			
+			}
+			
+			return tReturn;
+			
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return "";
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/config/TestConfig.java b/src/test/java/org/apache/openmeetings/test/config/TestConfig.java
new file mode 100644
index 0000000..26187e5
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/config/TestConfig.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.config;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.entity.basic.Configuration;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.apache.openmeetings.test.calendar.TestAppointmentAddAppointment;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestConfig extends AbstractJUnitDefaults {
+
+	private static final Logger log = LoggerFactory.getLogger(TestAppointmentAddAppointment.class);
+
+	@Autowired
+	private ConfigurationDao configurationDao;
+
+	@Test
+	public void getConfigKey() {
+		System.err.println("THIS");
+
+		Configuration smtp_server = configurationDao.get("smtp_server").get(0);
+
+		System.err.println("smtp_server " + smtp_server.getUser());
+
+		assertNull(smtp_server.getUser());
+	}
+
+	@Test
+	public void getConfigs() {
+
+		try {
+			List<Configuration> list = configurationDao.get(4, 6);
+
+			for (Configuration conf : list) {
+				System.err.println("conf.getConf_key() " + conf.getConf_key());
+				System.err.println("conf.getUser() " + conf.getUser());
+				if (conf.getUser() != null) {
+					System.err.println("conf.getUsers() " + conf.getUser().getLogin());
+				}
+			}
+
+			assertEquals(list.size(), 6);
+
+		} catch (Exception err) {
+			log.error("[startConversion]", err);
+		}
+
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/derby/PrepareSystemFiles.java b/src/test/java/org/apache/openmeetings/test/derby/PrepareSystemFiles.java
new file mode 100644
index 0000000..035c93c
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/derby/PrepareSystemFiles.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.derby;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.File;
+
+import org.apache.openmeetings.cli.ConnectionProperties.DbType;
+import org.apache.openmeetings.cli.ConnectionPropertiesPatcher;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * This file is called from command line to patch the derby configuration 
+ * during the automated run of Selenium
+ * 
+ * @author swagner
+ *
+ */
+public class PrepareSystemFiles {
+	private static final Logger log = Red5LoggerFactory.getLogger(PrepareSystemFiles.class, webAppRootKey);
+	
+	public static void main(String... args) {
+		try {
+			OmFileHelper.setOmHome(args[0]);
+			
+			String databaseHomeDirectory = args[1];
+			
+			String persistanceFileToPatch = args[2];
+			
+			File conf = new File(persistanceFileToPatch);
+			
+			if (conf.exists()) {
+				conf.delete();
+			}
+			
+			ConnectionPropertiesPatcher.patch(DbType.derby.name()
+					, "localhost"
+					, "1527"
+					, databaseHomeDirectory + "openmeetings"
+					, "user"
+					, "secret"
+					);
+		} catch (Exception err) {
+			log.error("Error", err);
+		}
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/derby/StartDerbyNetworkService.java b/src/test/java/org/apache/openmeetings/test/derby/StartDerbyNetworkService.java
new file mode 100644
index 0000000..5bd4030
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/derby/StartDerbyNetworkService.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.derby;
+
+import org.apache.derby.drda.NetworkServerControl;
+
+public class StartDerbyNetworkService {
+
+	protected NetworkServerControl server;
+}
diff --git a/src/test/java/org/apache/openmeetings/test/domain/TestAddGroup.java b/src/test/java/org/apache/openmeetings/test/domain/TestAddGroup.java
new file mode 100644
index 0000000..41bcce5
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/domain/TestAddGroup.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.domain;
+
+import static org.junit.Assert.assertNotNull;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestAddGroup extends AbstractJUnitDefaults {
+	@Autowired
+	private OrganisationDao orgDao;
+	@Autowired
+	private UserDao usersDao;
+
+	private static final Logger log = Logger.getLogger(TestAddGroup.class);
+
+	@Test
+	public void testAddingGroup() {
+		Organisation o = new Organisation();
+		o.setName("default");
+		o = orgDao.update(o, null);
+		assertNotNull("Id of organisation created should not be null", o.getOrganisation_id());
+
+		User us = usersDao.get(1L);
+		assertNotNull("User should exist", us);
+		
+		assertNotNull("Organisation User list should exist", us.getOrganisation_users());
+		us.getOrganisation_users().add(new Organisation_Users(o));
+		us = usersDao.update(us, null);
+
+		log.error(us.getLastname());
+		log.error(us.getAdresses().getTown());
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/domain/TestUserGroupAggregation.java b/src/test/java/org/apache/openmeetings/test/domain/TestUserGroupAggregation.java
new file mode 100644
index 0000000..bbe5528
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/domain/TestUserGroupAggregation.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.domain;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestUserGroupAggregation extends AbstractJUnitDefaults {
+	private static final Logger log = Logger.getLogger(TestUserGroupAggregation.class);
+
+	@Autowired
+	private UserDao userDao;
+
+	@Test
+	public void testitNow() {
+		User u = userDao.get(1L);
+
+		assertNotNull("Organisation list for default user must not be null", u.getOrganisation_users());
+		assertTrue("Default user must belong to at least one organisation", u.getOrganisation_users().size() > 0);
+
+		for (Organisation_Users orgUserObj : u.getOrganisation_users()) {
+			log.error("testitNow: organisation Id: '" + orgUserObj.getOrganisation().getOrganisation_id() + "'; name: '" + orgUserObj.getOrganisation().getName() + "'");
+		}
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/emotes/TestChatParsing.java b/src/test/java/org/apache/openmeetings/test/emotes/TestChatParsing.java
new file mode 100644
index 0000000..0d5ad9e
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/emotes/TestChatParsing.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.emotes;
+
+import java.util.LinkedList;
+
+import junit.framework.TestCase;
+
+import org.junit.Test;
+
+public class TestChatParsing extends TestCase {
+	
+	public static LinkedList<LinkedList<String>> emotfilesList = new LinkedList<LinkedList<String>>();
+	
+	@Test
+	public void testChatParser(){
+		try {
+			//FIXME
+			String filePath = "/Users/sebastianwagner/Documents/workspace/xmlcrm/webapp/xmlcrm/public/";
+			
+			this.loadEmot(filePath);
+			
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+	}
+	
+	public void loadEmot(String filePath){
+		try {
+//			String fileName = filePath + File.separatorChar + "emoticons" + File.separatorChar + "emotes.xml";
+//			XStream xStream = new XStream(new XppDriver());
+//			xStream.setMode(XStream.NO_REFERENCES);
+//			BufferedReader reader = new BufferedReader(new FileReader(fileName));
+//		    String xmlString = "";
+//		    while (reader.ready()) {
+//		    	xmlString += reader.readLine();
+//		    }
+//		    Application.setEmotfilesList((LinkedList<LinkedList<String>>) xStream.fromXML(xmlString));
+//		    ChatString.getInstance().replaceAllRegExp();
+//		    String messageText = "Hi :) how are you? whats going on B) today (T_T) ? with you ?";
+//		    //messageText = ":) Hi :) how :( are :) you :( today >:O going on? :)";
+//		    //messageText = "Hi :) how :( are :) you :( today :) ";
+//		    //messageText = "Hi :) how";
+//		    ChatString.getInstance().parseChatString(messageText);
+		    
+		    System.out.println("loadEmot completed");
+		} catch (Exception err) {
+			System.out.println("[loadEmot]"+err);
+			err.printStackTrace();
+		}
+	}	
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/emotes/TestConvertGifs.java b/src/test/java/org/apache/openmeetings/test/emotes/TestConvertGifs.java
new file mode 100644
index 0000000..d9221e2
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/emotes/TestConvertGifs.java
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.emotes;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.PrintWriter;
+import java.util.LinkedList;
+
+import junit.framework.TestCase;
+
+import org.apache.log4j.Logger;
+import org.junit.Test;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.XppDriver;
+
+public class TestConvertGifs extends TestCase {
+	
+	private static final Logger log = Logger.getLogger(TestConvertGifs.class);
+
+	@Test
+	public void testConvertDir(){
+		try {
+			//FIXME
+			String basePath = "/Users/sebastianwagner/Documents/workspace/xmlcrm/webapp/xmlcrm/public/emoticons/";
+			
+			System.out.println("basePath "+basePath);
+			File baseDir = new File(basePath);
+			
+			System.out.println("basePath "+baseDir.exists());
+			
+			String batfilePath = "mybat.bat";
+			String batString = "";
+			
+			String[] allfiles = baseDir.list();			
+			if(allfiles!=null){
+				for(int i=0; i<allfiles.length; i++){
+					File file = new File(basePath+File.separatorChar+allfiles[i]);
+					String fileName = file.getName();
+					System.out.println("file "+file.getName());
+					String fileNamePure = fileName.substring(0, fileName.length()-4);
+					
+					batString += "gif2swf -r 30 -o "+fileNamePure+".swf "+fileName+" \r\n";
+				}
+			}
+			
+			PrintWriter pw = new PrintWriter(new FileWriter(basePath+batfilePath));
+		    pw.println(batString);
+		    pw.flush();
+		    pw.close();
+		    
+			System.out.println("batString "+batString);
+			
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+	}
+	
+	@Test
+	public void testXMLDir(){
+		try {
+			//FIXME
+			String basePath = "/Users/sebastianwagner/Documents/workspace/xmlcrm/webapp/xmlcrm/upload/emoticons/";
+			
+			System.out.println("basePath "+basePath);
+			File baseDir = new File(basePath);
+			
+			System.out.println("basePath "+baseDir.exists());
+			
+			String batfilePath = "emotes.xml";
+			String batString = "";
+			
+			String[] allfiles = baseDir.list();	
+			LinkedList<LinkedList<String>> filesList = new LinkedList<LinkedList<String>>();
+			if(allfiles!=null){
+				for(int i=0; i<allfiles.length; i++){
+					File file = new File(basePath+File.separatorChar+allfiles[i]);
+					LinkedList<String> singleFile = new LinkedList<String>();
+					String fileName = file.getName();
+					System.out.println("file "+file.getName());
+					String fileNamePure = fileName.substring(0, fileName.length()-4);
+					singleFile.add(fileNamePure+".swf");
+					singleFile.add(":)");
+					singleFile.add("(^_^)");
+					filesList.add(singleFile);
+				}
+			}
+			
+			XStream xStream = new XStream(new XppDriver());
+			xStream.setMode(XStream.NO_REFERENCES);
+			String xmlString = xStream.toXML(filesList);
+
+			log.error(xmlString);
+			
+			PrintWriter pw = new PrintWriter(new FileWriter(basePath+batfilePath));
+		    pw.println(xmlString);
+		    pw.flush();
+		    pw.close();
+		    
+			System.out.println("batString "+batString);
+			
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/gui/TestGui.java b/src/test/java/org/apache/openmeetings/test/gui/TestGui.java
new file mode 100644
index 0000000..f6b64bf
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/gui/TestGui.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.gui;
+
+import org.junit.Test;
+
+import junit.framework.TestCase;
+
+
+public class TestGui  extends TestCase {
+
+	@Test
+	public void testNoop() {
+		
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/invitiation/TestInvitation.java b/src/test/java/org/apache/openmeetings/test/invitiation/TestInvitation.java
new file mode 100644
index 0000000..cfb7967
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/invitiation/TestInvitation.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.invitiation;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.apache.axis2.AxisFault;
+import org.apache.openmeetings.axis.services.UserWebService;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.remote.InvitationService;
+import org.apache.openmeetings.remote.MainService;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestInvitation extends AbstractJUnitDefaults {
+	@Autowired
+	private InvitationService invitationService;
+	@Autowired
+	private MainService mService;
+	@Autowired
+	private UserWebService userWebService;
+	@Autowired
+	private UserDao userDao;
+	
+	@Test
+	public void testSendInvitationLink() throws AxisFault {
+		Sessiondata sessionData = mService.getsessiondata();
+		
+		Long uid = userWebService.loginUser(sessionData.getSession_id(), username, userpass);
+		User us = userDao.get(uid);
+		
+		String date = new SimpleDateFormat("dd.MM.yyyy").format(new Date());
+		invitationService.sendInvitationHash(sessionData.getSession_id(), "Testname", "Testlastname", "message", "sebawagner@apache.org", 
+				"subject", 1L, "", false, "", 1, date, "12:00", date, "14:00", 1L, us.getTimeZoneId(), true);
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/jai/TestInterpolation.java b/src/test/java/org/apache/openmeetings/test/jai/TestInterpolation.java
new file mode 100644
index 0000000..925b4a4
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/jai/TestInterpolation.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.jai;
+
+import junit.framework.TestCase;
+
+import org.apache.log4j.Logger;
+import org.junit.Test;
+
+public class TestInterpolation extends TestCase {
+	
+	private static final Logger log = Logger.getLogger(TestInterpolation.class);
+	
+	@Test
+	public void testInterpolate() {
+		try {
+			
+//			GeomPoint p1 = new Point(-60,-100);
+//			GeomPoint p2 = new Point(20, 50);
+//
+//			//double[] samples = {-100,-50};
+//			
+//			GeomPoint gPoint = GeomPoint.interpolate(p1, p2, new Float(0.5));
+//			
+//			log.debug("Interpolated: "+gPoint);
+//			
+//			
+//			GeomPoint p3 = new GeomPoint();
+//			p3.setLocation(-2,4);
+//			//p3.setLocation(3,4);
+//			p3.normalize(10);
+//			//GeomPoint
+//			
+//			
+//			p3.setLocation(2,-4);
+//			//p3.setLocation(3,4);
+//			p3.normalize(10);
+//			
+		} catch (Exception er) {
+			log.error("ERROR ", er);
+			System.out.println("Error exporting: " + er);
+			er.printStackTrace();
+		}
+	}
+
+	
+}
diff --git a/src/test/java/org/apache/openmeetings/test/jai/TestSVGTextExporterArrow.java b/src/test/java/org/apache/openmeetings/test/jai/TestSVGTextExporterArrow.java
new file mode 100644
index 0000000..e91ee7b
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/jai/TestSVGTextExporterArrow.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.jai;
+
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+
+import junit.framework.TestCase;
+
+import org.apache.batik.dom.GenericDOMImplementation;
+import org.apache.batik.dom.svg.SVGDOMImplementation;
+import org.apache.batik.svggen.SVGGraphics2D;
+import org.apache.log4j.Logger;
+import org.junit.Test;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class TestSVGTextExporterArrow extends TestCase {
+	
+	private static final Logger log = Logger.getLogger(TestSVGTextExporterArrow.class);
+	
+	@Test
+	public void testGetDiagramList() {
+		try {
+			
+			
+	        // Get a DOMImplementation.
+	        DOMImplementation domImpl =
+	            GenericDOMImplementation.getDOMImplementation();
+
+	        // Create an instance of org.w3c.dom.Document.
+	        //String svgNS = "http://www.w3.org/2000/svg";
+	        String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
+
+	        Document document = domImpl.createDocument(svgNS, "svg", null);
+	        
+	        // Get the root element (the 'svg' element).
+	        Element svgRoot = document.getDocumentElement();
+
+	        
+	        // Set the width and height attributes on the root 'svg' element.
+	        svgRoot.setAttributeNS(null, "width", "2400");
+	        svgRoot.setAttributeNS(null, "height", "1600");
+	        
+
+	        // Create an instance of the SVG Generator.
+	        SVGGraphics2D svgGenerator = new SVGGraphics2D(document);
+
+//	        SVGGraphics2D svgGenerator8 = new SVGGraphics2D(svgGenerator);
+//	        //SVGGraphics2D svgGenerator2 = new SVGGraphics2D(document);
+//	        
+//	        //NOTE: Font.ITALIC+Font.BOLD = Font AND Bold !
+//	        exportToImageTest.paintTextByWidthHeight(svgGenerator8, 500, 300, 100, 200, "Process", Font.BOLD+Font.ITALIC, 28,
+//	        		new Color(255,0,0));
+//	        
+//	        SVGGraphics2D svgGenerator11 = new SVGGraphics2D(svgGenerator);
+//	        
+//	        exportToImageTest.paintTextByWidthHeight(svgGenerator11, 100, 300, 100, 200, "Process", Font.BOLD+Font.ITALIC, 111,
+//	        		new Color(255,0,0));
+//	        
+//	        SVGGraphics2D svgGenerator9 = new SVGGraphics2D(svgGenerator);
+	      //NOTE: Font.ITALIC+Font.BOLD = Font AND Bold !
+//	        exportToImageTest._paintTextByWidthHeight(svgGenerator9, 500, 300, 100, 200, "Hans", Font.BOLD, 28,
+//	        		new Color(255,0,0));
+	    
+	    
+	        // Finally, stream out SVG to the standard output using
+	        // UTF-8 encoding.
+	        boolean useCSS = true; // we want to use CSS style attributes
+	        //Writer out = new OutputStreamWriter(System.out, "UTF-8");
+	        
+	        //OutputStream out = httpServletResponse.getOutputStream();
+			//httpServletResponse.setContentType("APPLICATION/OCTET-STREAM");
+			//httpServletResponse.setHeader("Content-Disposition","attachment; filename=\"" + requestedFile + "\"");
+	        Writer out = new OutputStreamWriter(System.out, "UTF-8");
+
+	        //StringWriter out = new StringWriter();
+	        
+	        svgGenerator.stream(out, useCSS);
+		} catch (Exception er) {
+			log.error("ERROR ", er);
+			System.out.println("Error exporting: " + er);
+			er.printStackTrace();
+		}
+	}
+	
+	
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/library/TestFileParser.java b/src/test/java/org/apache/openmeetings/test/library/TestFileParser.java
new file mode 100644
index 0000000..1b5a976
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/library/TestFileParser.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.library;
+
+import org.apache.log4j.Logger;
+import org.apache.openmeetings.documents.LibraryWmlLoader;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+public class TestFileParser extends AbstractJUnitDefaults {
+	
+	private static final Logger log = Logger.getLogger(TestFileParser.class);
+	@Autowired
+	private LibraryWmlLoader libraryWmlLoader;
+	
+	@Test
+	public void testLoadWmlFile(){
+		
+		try {
+			
+			libraryWmlLoader.loadWmlFile("filename1");
+			
+		} catch (Exception err) {
+			
+			log.error("TestLoadWmlFile",err);
+			
+		}
+		
+	}
+	
+}
diff --git a/src/test/java/org/apache/openmeetings/test/navi/TestNavi.java b/src/test/java/org/apache/openmeetings/test/navi/TestNavi.java
new file mode 100644
index 0000000..7abf9f2
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/navi/TestNavi.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.navi;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.NavigationDao;
+import org.apache.openmeetings.db.entity.basic.Naviglobal;
+import org.apache.openmeetings.db.entity.basic.Navimain;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestNavi extends AbstractJUnitDefaults {
+	
+	@Autowired
+	private NavigationDao navimanagement;
+	
+	@Test
+	public void testGetNavi(){
+		
+        List<Naviglobal> ll = navimanagement.getMainMenu(true, 1L);
+
+        assertTrue("GlobalNavi size should be greater than zero: " + ll.size(), ll.size() > 0);
+        System.out.println("NaviGlobal size: " + ll.size());
+
+        for (Naviglobal navigl : ll) {
+        	assertNotNull("Naviglobal retrieved should not be null", navigl);
+            System.out.println("Naviglobal label: " + navigl.getLevel_id());
+
+        	assertNotNull("Naviglobal retrieved should have Navimain entries", navigl.getMainnavi());
+            for (Navimain navim : navigl.getMainnavi()) {
+            	assertNotNull("Navimain retrieved should not be null", navim);
+                System.out.println("-->" + navim.getFieldvalues_id());
+            }
+        }
+		
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/poll/TestClientListManager.java b/src/test/java/org/apache/openmeetings/test/poll/TestClientListManager.java
new file mode 100644
index 0000000..fbc6653
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/poll/TestClientListManager.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.poll;
+
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Random;
+
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestClientListManager extends AbstractJUnitDefaults {
+	@Autowired
+	private ISessionManager sessionManager;
+	
+	@Test
+	public void addClientListItem() {
+		Random rnd = new Random();
+		assertNotNull("RoomClientId created is null",
+				sessionManager.addClientListItem(rnd.nextLong() + "ABCDE"
+						+ rnd.nextLong(), "scopeName", 66666, "remoteAddress",
+						"swfUrl", false, null));
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/poll/TestPollManagement.java b/src/test/java/org/apache/openmeetings/test/poll/TestPollManagement.java
new file mode 100644
index 0000000..88a8e21
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/poll/TestPollManagement.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.poll;
+
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.entity.room.PollType;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import static org.junit.Assert.*;
+
+public class TestPollManagement extends AbstractJUnitDefaults {
+	@Autowired
+	private PollDao pollManager;
+	
+	@Test
+	public void addPollType() {
+		long maxId = 1;
+		for (PollType pt : pollManager.getPollTypes()) {
+			maxId = Math.max(maxId, pt.getPollTypesId());
+		}
+		assertNotNull("Poll created is null", pollManager.addPollType(26L, false));
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/rdc/KeyCodesTest.java b/src/test/java/org/apache/openmeetings/test/rdc/KeyCodesTest.java
new file mode 100644
index 0000000..a84cbee
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/rdc/KeyCodesTest.java
@@ -0,0 +1,154 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.rdc;
+
+import java.awt.*;
+import java.awt.event.*;
+
+class WindowClosingAdapter extends WindowAdapter {
+	public void windowClosing(WindowEvent event) {
+		event.getWindow().setVisible(false);
+		event.getWindow().dispose();
+		System.exit(0);
+	}
+}
+
+public class KeyCodesTest extends Frame implements KeyListener {
+	private static final long serialVersionUID = -1706968644784929402L;
+	String msg1 = "";
+	String msg2 = "";
+
+	public static void main(String[] args) {
+		new KeyCodesTest();
+	}
+
+	public KeyCodesTest() {
+		super("TestKeyCodes");
+		addKeyListener(this);
+		addWindowListener(new WindowClosingAdapter());
+		setBackground(Color.lightGray);
+		setSize(300, 200);
+		setLocation(200, 100);
+		setVisible(true);
+	}
+
+	public void paint(Graphics g) {
+		if (msg1.length() > 0) {
+			draw3DRect(g, 20, 50, 250, 30);
+			g.setColor(Color.black);
+			g.drawString(msg1, 30, 70);
+		}
+		if (msg2.length() > 0) {
+			draw3DRect(g, 20, 100, 250, 30);
+			g.setColor(Color.black);
+			g.drawString(msg2, 30, 120);
+		}
+	}
+
+	void draw3DRect(Graphics g, int x, int y, int width, int height) {
+		g.setColor(Color.darkGray);
+		g.drawLine(x, y, x, y + height);
+		g.drawLine(x, y, x + width, y);
+		g.setColor(Color.white);
+		g.drawLine(x + width, y + height, x, y + height);
+		g.drawLine(x + width, y + height, x + width, y);
+	}
+
+	public void keyPressed(KeyEvent event) {
+		msg1 = "";
+		System.out.println("keyPressed CODE1 "+event.getKeyCode());
+		
+		Integer myCode = event.getKeyCode();
+		
+		System.out.println("keyPressed CODE2 "+myCode);
+		
+		System.out.println("keyPressed CHAR3 "+event.getKeyChar());
+		
+		System.out.println("keyPressed CHAR4 "+KeyEvent.getKeyText(event.getKeyCode()));
+		
+		System.out.println("keyPressed CHAR5 "+KeyEvent.getKeyText(myCode));
+		
+		System.out.println("keyPressed isActionKey "+event.isActionKey());
+		System.out.println("keyPressed isAltDown "+event.isAltDown());
+		System.out.println("keyPressed isAltGraphDown "+event.isAltGraphDown());
+		System.out.println("keyPressed isConsumed "+event.isConsumed());
+		System.out.println("keyPressed isControlDown "+event.isControlDown());
+		System.out.println("keyPressed isMetaDown "+event.isMetaDown());
+		System.out.println("keyPressed isShiftDown "+event.isShiftDown());
+
+		System.out.println("keyPressed paramString "+event.paramString());
+		
+		if (event.getKeyChar() == KeyEvent.CHAR_UNDEFINED) {
+			int key = event.getKeyCode();
+			// Funktionstaste abfragen
+			if (key == KeyEvent.VK_F1) {
+				msg1 = "F1";
+			} else if (key == KeyEvent.VK_F2) {
+				msg1 = "F2";
+			} else if (key == KeyEvent.VK_F3) {
+				msg1 = "F3";
+			}
+			// Modifier abfragen
+			if (msg1.length() > 0) {
+				if (event.isAltDown()) {
+					msg1 = "ALT + " + msg1;
+				}
+				if (event.isControlDown()) {
+					msg1 = "STRG + " + msg1;
+				}
+				if (event.isShiftDown()) {
+					msg1 = "UMSCHALT + " + msg1;
+				}
+			}
+		}
+		repaint();
+	}
+
+	public void keyReleased(KeyEvent event) {
+		msg1 = "";
+		repaint();
+	}
+
+	public void keyTyped(KeyEvent event) {
+		char key = event.getKeyChar();
+		
+//		System.out.println("keyTyped CODE1 "+event.getKeyCode());
+//		
+//		Integer myCode = event.getKeyCode();
+//		
+//		System.out.println("keyTyped CODE2 "+myCode);
+//		
+//		System.out.println("keyTyped CHAR3 "+event.getKeyChar());
+//		
+//		System.out.println("keyTyped CHAR4 "+event.getKeyText(event.getKeyCode()));
+//		
+//		System.out.println("keyTyped CHAR5 "+event.getKeyText(myCode));
+		
+		if (key == KeyEvent.VK_BACK_SPACE) {
+			if (msg2.length() > 0) {
+				msg2 = msg2.substring(0, msg2.length() - 1);
+			}
+		} else if (key >= KeyEvent.VK_SPACE) {
+			if (msg2.length() < 40) {
+				msg2 += event.getKeyChar();
+			}
+		}
+		repaint();
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/rdc/ReadKeyCodesTest.java b/src/test/java/org/apache/openmeetings/test/rdc/ReadKeyCodesTest.java
new file mode 100644
index 0000000..97c2573
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/rdc/ReadKeyCodesTest.java
@@ -0,0 +1,115 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.rdc;
+
+import java.awt.*;
+import java.awt.event.*;
+
+public class ReadKeyCodesTest extends Frame implements KeyListener {
+	private static final long serialVersionUID = -1722917067803656922L;
+	String msg1 = "";
+	String msg2 = "";
+
+	public static void main(String[] args) {
+		new ReadKeyCodesTest();
+	}
+
+	public ReadKeyCodesTest() {
+		super("TestKeyCodes");
+		addKeyListener(this);
+		addWindowListener(new WindowClosingAdapter());
+		setBackground(Color.lightGray);
+		setSize(300, 200);
+		setLocation(200, 100);
+		setVisible(true);
+	}
+
+	public void paint(Graphics g) {
+		if (msg1.length() > 0) {
+			draw3DRect(g, 20, 50, 250, 30);
+			g.setColor(Color.black);
+			g.drawString(msg1, 30, 70);
+		}
+		if (msg2.length() > 0) {
+			draw3DRect(g, 20, 100, 250, 30);
+			g.setColor(Color.black);
+			g.drawString(msg2, 30, 120);
+		}
+	}
+
+	void draw3DRect(Graphics g, int x, int y, int width, int height) {
+		g.setColor(Color.darkGray);
+		g.drawLine(x, y, x, y + height);
+		g.drawLine(x, y, x + width, y);
+		g.setColor(Color.white);
+		g.drawLine(x + width, y + height, x, y + height);
+		g.drawLine(x + width, y + height, x + width, y);
+	}
+
+	public void keyPressed(KeyEvent event) {
+		msg1 = "";
+		System.out.println("keyPressed "+event.getKeyCode());
+		if (event.getKeyChar() == KeyEvent.CHAR_UNDEFINED) {
+			int key = event.getKeyCode();
+			// Funktionstaste abfragen
+			if (key == KeyEvent.VK_F1) {
+				msg1 = "F1";
+			} else if (key == KeyEvent.VK_F2) {
+				msg1 = "F2";
+			} else if (key == KeyEvent.VK_F3) {
+				msg1 = "F3";
+			}
+			// Modifier abfragen
+			if (msg1.length() > 0) {
+				if (event.isAltDown()) {
+					msg1 = "ALT + " + msg1;
+				}
+				if (event.isControlDown()) {
+					msg1 = "STRG + " + msg1;
+				}
+				if (event.isShiftDown()) {
+					msg1 = "UMSCHALT + " + msg1;
+				}
+			}
+		}
+		repaint();
+	}
+
+	public void keyReleased(KeyEvent event) {
+		msg1 = "";
+		repaint();
+	}
+
+	public void keyTyped(KeyEvent event) {
+		char key = event.getKeyChar();
+		
+		System.out.println("keyTyped "+event.getKeyCode());
+		
+		if (key == KeyEvent.VK_BACK_SPACE) {
+			if (msg2.length() > 0) {
+				msg2 = msg2.substring(0, msg2.length() - 1);
+			}
+		} else if (key >= KeyEvent.VK_SPACE) {
+			if (msg2.length() < 40) {
+				msg2 += event.getKeyChar();
+			}
+		}
+		repaint();
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/rdc/TestKeyCodesNumber.java b/src/test/java/org/apache/openmeetings/test/rdc/TestKeyCodesNumber.java
new file mode 100644
index 0000000..f1d6559
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/rdc/TestKeyCodesNumber.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.rdc;
+
+import java.awt.event.KeyEvent;
+
+import junit.framework.TestCase;
+
+import org.apache.log4j.Logger;
+import org.junit.Test;
+
+public class TestKeyCodesNumber extends TestCase {
+
+	private static final Logger log = Logger.getLogger(TestKeyCodesNumber.class);
+
+	@Test
+	public void testKeyCodes() {
+		try {
+
+			for (int i = 1; i < 600; i++) {
+
+				String charText = KeyEvent.getKeyText(i);
+
+				log.debug("ERROR " + i + " " + charText);
+
+			}
+
+		} catch (Exception err) {
+			log.error("[testKeyCodes]", err);
+		}
+
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/rdc/TestReadKeyCodesNumber.java b/src/test/java/org/apache/openmeetings/test/rdc/TestReadKeyCodesNumber.java
new file mode 100644
index 0000000..5a9fc17
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/rdc/TestReadKeyCodesNumber.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.rdc;
+
+import junit.framework.TestCase;
+
+import org.apache.log4j.Logger;
+import org.junit.Test;
+
+public class TestReadKeyCodesNumber extends TestCase {
+
+	private static final Logger log = Logger
+			.getLogger(TestReadKeyCodesNumber.class);
+
+	@Test
+	public void testTestKeyCodesNumber() {
+		try {
+
+			this.testKeyCodes();
+
+		} catch (Exception er) {
+			log.debug("ERROR ", er);
+		}
+	}
+
+	@Test
+	public void testKeyCodes() {
+		try {
+
+		} catch (Exception err) {
+			log.error("[testKeyCodes]", err);
+		}
+
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/rtmp/LoadTestRtmpClient.java b/src/test/java/org/apache/openmeetings/test/rtmp/LoadTestRtmpClient.java
new file mode 100644
index 0000000..394bd59
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/rtmp/LoadTestRtmpClient.java
@@ -0,0 +1,170 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.test.rtmp;

+

+import java.util.Date;

+import java.util.HashMap;

+import java.util.Map;

+import java.util.Map.Entry;

+

+import org.red5.client.net.rtmp.ClientExceptionHandler;

+import org.red5.client.net.rtmp.INetStreamEventHandler;

+import org.red5.client.net.rtmp.RTMPClient;

+import org.red5.server.api.service.IPendingServiceCall;

+import org.red5.server.api.service.IPendingServiceCallback;

+import org.red5.server.net.rtmp.event.Notify;

+

+public class LoadTestRtmpClient extends RTMPClient implements IPendingServiceCallback, INetStreamEventHandler, ClientExceptionHandler {

+

+	private class CallObject {

+		Date started;

+		Date ended;

+

+		public CallObject(Date started) {

+			super();

+			this.started = started;

+		}

+

+		public Date getStarted() {

+			return started;

+		}

+

+		public Date getEnded() {

+			return ended;

+		}

+

+		public void setEnded(Date ended) {

+			this.ended = ended;

+		}

+	}

+	

+	private int counterCalls = 0; // a call is always 2 steps

+	private Map<Integer, CallObject> calls = new HashMap<Integer, CallObject>();

+	private boolean isConnected = false;

+	private final int instanceId;

+

+	public LoadTestRtmpClient(int instanceId) {

+		this.instanceId = instanceId;

+	}

+	

+	public boolean performCall() {

+

+		// System.err.println("performCall " + isConnected);

+

+		if (!isConnected) {

+			return false;

+		}

+		

+		if (counterCalls % 2 == 0) {

+

+			if (counterCalls > 10) {

+

+				return true;

+

+			}

+

+			System.err.println("Rest o do new call " + counterCalls);

+			counterCalls++;

+

+			Map<String, Integer> map = new HashMap<String, Integer>();

+			map.put("instanceId", instanceId);

+			map.put("count", counterCalls);

+			calls.put(counterCalls, new CallObject(new Date()));

+			invoke("loadTestSyncMessage", new Object[] {"syncMessageToCurrentScopeResult", map, true }, this);

+

+		} else {

+			System.err.println("Call running " + counterCalls);

+		}

+		

+		

+		

+		return false;

+	}

+	

+	public double getAverageTime() {

+		long overallTime = 0L;

+

+		for (Entry<Integer, CallObject> tCallObjectEntry : calls.entrySet()) {

+

+			long deltaTime = tCallObjectEntry.getValue().getEnded().getTime()

+					- tCallObjectEntry.getValue().getStarted().getTime();

+

+			// System.err.println("Key " + tCallObjectEntry.getKey()

+			// + "deltaTime " + deltaTime);

+

+			overallTime += deltaTime;

+

+		}

+

+		double averageTime = Long.valueOf(overallTime).doubleValue()

+				/ Integer.valueOf(calls.size()).doubleValue();

+

+		return averageTime;

+	}

+	

+	public void resultReceived(IPendingServiceCall call) {

+		String method = call == null ? null : call.getServiceMethodName();

+		System.err.println("method "+method);

+		if (method == null) {

+			return;

+		}

+		if ("connect".equals(method)) {

+			isConnected = true;

+		}

+

+		if ("loadTestSyncMessage".equals(method)) {

+

+			CallObject tCallObject = calls.get(counterCalls);

+			if (tCallObject == null) {

+

+				for (Entry<Integer, CallObject> tCallObjectEntry : calls.entrySet()) {

+

+					System.err.println("Key " + tCallObjectEntry.getKey()

+							+ "tCallObjectEntry "

+							+ tCallObjectEntry.getValue().getStarted());

+

+				}

+

+				throw new RuntimeException(

+						"tCallObject is null currentCountReturn "

+								+ counterCalls + " list size "

+								+ calls.size());

+			}

+			tCallObject.setEnded(new Date());

+			calls.put(counterCalls, tCallObject);

+

+			System.err.println("Call received " + counterCalls

+					+ " instanceId: " + instanceId);

+

+			counterCalls++;

+		}

+

+	}

+

+

+	public void onStreamEvent(Notify notify) {

+		// TODO Auto-generated method stub

+		

+	}

+

+	public int getNumberOfCalls() {

+		return calls.size();

+	}

+	

+}

diff --git a/src/test/java/org/apache/openmeetings/test/rtmp/SimulateLoad.java b/src/test/java/org/apache/openmeetings/test/rtmp/SimulateLoad.java
new file mode 100644
index 0000000..392f76c
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/rtmp/SimulateLoad.java
@@ -0,0 +1,93 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.test.rtmp;

+

+import org.slf4j.Logger;

+import org.slf4j.LoggerFactory;

+

+public class SimulateLoad extends Thread {

+

+	private static final Logger log = LoggerFactory

+			.getLogger(SimulateLoad.class);

+

+	private LoadTestRtmpClient loadTestRtmpClient;

+	private boolean testRunning = true;

+

+	public double getAverageTime() {

+		return loadTestRtmpClient.getAverageTime();

+	}

+

+	public boolean isTestRunning() {

+		return testRunning;

+	}

+

+	public static void main(String... args) {

+		try {

+			if (args.length != 4) {

+				new RuntimeException(

+						"4 args needed, host, port, context, instanceId");

+			}

+			for (String arg : args) {

+				System.err.println("arg: " + arg);

+			}

+			SimulateLoad simulateLoad = new SimulateLoad(args[0], Integer

+					.valueOf(args[1]).intValue(), args[2], Integer.valueOf(

+					args[3]).intValue());

+			simulateLoad.start();

+			System.err.println("started ");

+

+		} catch (Exception er) {

+			er.printStackTrace();

+			log.error("Error", er);

+		}

+	}

+

+	public SimulateLoad(String host, int port, String applicationContext,

+			int instanceId) {

+		super();

+

+		loadTestRtmpClient = new LoadTestRtmpClient(instanceId);

+		loadTestRtmpClient.connect(host, port, applicationContext,

+				loadTestRtmpClient);

+	}

+

+	public void run() {

+		try {

+

+			System.err.println("######### start client");

+

+			while (testRunning) {

+				testRunning = !loadTestRtmpClient.performCall();

+				try {

+					Thread.sleep(200);

+				} catch (InterruptedException e) {

+					e.printStackTrace();

+				}

+			}

+

+		} catch (Exception e) {

+			e.printStackTrace();

+		}

+	}

+

+	public int getNumberOfCalls() {

+		return loadTestRtmpClient.getNumberOfCalls();

+	}

+

+}

diff --git a/src/test/java/org/apache/openmeetings/test/rtmp/SimulateLoadTest.java b/src/test/java/org/apache/openmeetings/test/rtmp/SimulateLoadTest.java
new file mode 100644
index 0000000..54b1e9d
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/rtmp/SimulateLoadTest.java
@@ -0,0 +1,107 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.rtmp;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Test;
+
+public class SimulateLoadTest {
+
+	private int numberOfClients = 25;
+	private List<SimulateLoad> simulateLoadList = new ArrayList<SimulateLoad>();
+
+	private String host = "192.168.1.7";
+	private final int port = 1935;
+	private final String applicationContext = "openmeetings/1";
+
+	public SimulateLoadTest(String host, int numberOfClients) {
+		this.host = host;
+		this.numberOfClients = numberOfClients;
+	}
+
+	public static void main(String... args) {
+		if (args.length != 2) {
+			return;
+		}
+		SimulateLoadTest simulateLoadTest = new SimulateLoadTest(args[0],
+				Integer.valueOf(args[1]).intValue());
+		simulateLoadTest.test();
+	}
+
+
+	@Test
+	public void test() {
+		try {
+			for (int i = 0; i < numberOfClients; i++) {
+				SimulateLoad simulateLoad = new SimulateLoad(host, port,
+						applicationContext, i);
+				simulateLoadList.add(simulateLoad);
+				Thread.sleep(100);
+			}
+
+			System.err.println("Clients initialized");
+
+			for (SimulateLoad simulateLoad : simulateLoadList) {
+				simulateLoad.start();
+				Thread.sleep(50);
+			}
+
+			System.err.println("Clients started");
+
+			boolean running = true;
+			while (running) {
+				boolean doRunStill = false;
+				for (SimulateLoad simulateLoad : simulateLoadList) {
+					if (simulateLoad.isTestRunning()) {
+						doRunStill = true;
+						break;
+					}
+				}
+				running = doRunStill;
+				try {
+					Thread.sleep(200);
+				} catch (InterruptedException e) {
+					e.printStackTrace();
+				}
+			}
+
+			double overallTime = 0;
+
+			for (SimulateLoad simulateLoad : simulateLoadList) {
+				overallTime += simulateLoad.getAverageTime();
+				System.err.println("Number of calls: "
+						+ simulateLoad.getNumberOfCalls() + "overallTime: "
+						+ overallTime + " averageTime"
+						+ simulateLoad.getAverageTime());
+			}
+
+			double deltaAllClients = overallTime
+					/ Integer.valueOf(simulateLoadList.size()).doubleValue();
+
+			System.err.println("Average time per call: " + deltaAllClients);
+
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/selenium/AbstractTestDefaults.java b/src/test/java/org/apache/openmeetings/test/selenium/AbstractTestDefaults.java
new file mode 100644
index 0000000..62806f0
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/selenium/AbstractTestDefaults.java
@@ -0,0 +1,232 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.selenium;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.test.AbstractSpringTest;
+import org.junit.After;
+import org.junit.Before;
+import org.openqa.selenium.Keys;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import org.openqa.selenium.firefox.FirefoxProfile;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public abstract class AbstractTestDefaults extends AbstractSpringTest {
+	
+	@Autowired
+	private LabelDao fieldLanguagesValuesDao;
+
+	public WebDriver driver = null;
+	
+	private String BASE_URL = "http://localhost:5080/openmeetings";
+	private String username = "swagner";
+	private String userpass = "qweqwe";
+	private String orgname = "seleniumtest";
+	private String email = "selenium@openmeetings.apache.org";
+	private String locale = "en-us";
+
+
+	public String getBASE_URL() {
+		return BASE_URL;
+	}
+
+	public String getUsername() {
+		return username;
+	}
+
+	public String getUserpass() {
+		return userpass;
+	}
+
+	public String getOrgname() {
+		return orgname;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+	
+	public Long getLanguageId() {
+		return 1L;
+	}
+	
+	public String getLocale() {
+		return locale;
+	}
+
+	// setting this to false can be handy if you run the test from inside
+	// Eclipse, the browser will not shut down after the test so you can start
+	// to diagnose the test issue
+	public boolean doTearDownAfterTest = false;
+	
+	public String getString(long id) {
+		return fieldLanguagesValuesDao.getString(id, getLanguageId());
+	}
+
+	/**
+	 * Make method overwrite possible to have custom behavior in tests
+	 * 
+	 * @return
+	 */
+	public boolean getDoTearDownAfterTest() {
+		return doTearDownAfterTest;
+	}
+
+	@Before
+	public void setUp() throws Exception {
+		super.setUp();
+		FirefoxProfile profile = new FirefoxProfile();
+		profile.setPreference("intl.accept_languages", getLocale());
+		driver = new FirefoxDriver(profile);
+	}
+
+	/**
+	 * This test is a basic test to verify the default loader mechanism works
+	 * it is not intend to be a part of any sub test
+	 * 
+	 * @throws Exception
+	 */
+	//@Test
+	public void smokeTest() throws Exception {
+		try {
+			driver.get(getBASE_URL());
+
+			testIsInstalledAndDoInstallation();
+
+			SeleniumUtils.inputText(driver, "login", getUsername());
+			SeleniumUtils.inputText(driver, "pass", getUserpass());
+
+			WebElement signInButton = SeleniumUtils.findElement(driver,
+					"//button[span[contains(text(), 'Sign in')]]", true, true);
+			signInButton.click();
+
+			SeleniumUtils.elementExists(driver,
+					"//h3[contains(text(), 'Help and support')]", true);
+		} catch (Exception e) {
+			SeleniumUtils.makeScreenShot(this.getClass().getSimpleName(), e,
+					driver);
+			throw e;
+		}
+	}
+
+	/**
+	 * Throws exception in case that test fails, so it is important to not catch 
+	 * that exception but really let the test fail!
+	 * 
+	 * @throws Exception
+	 */
+	protected void testIsInstalledAndDoInstallation() throws Exception {
+
+		WebElement wicketExtensionsWizardHeaderTitle = SeleniumUtils
+				.findElement(driver, "wicketExtensionsWizardHeaderTitle", false, true);
+		if (wicketExtensionsWizardHeaderTitle == null) {
+			return;
+		}
+		if (wicketExtensionsWizardHeaderTitle.getText()
+				.contains("Installation")) {
+			System.out.println("Do Installation");
+			doInstallation();
+		}
+
+	}
+
+	private void doInstallation() throws Exception {
+		Thread.sleep(3000L);
+
+		List<WebElement> buttons_next = SeleniumUtils.findElements(driver,
+				"buttons:next", true);
+
+		buttons_next.get(1).sendKeys(Keys.RETURN);
+
+		Thread.sleep(1000L);
+
+		SeleniumUtils.inputText(driver, "view:cfg.username", getUsername());
+		SeleniumUtils.inputText(driver, "view:cfg.password", getUserpass());
+		SeleniumUtils.inputText(driver, "view:cfg.email", getEmail());
+		SeleniumUtils.inputText(driver, "view:cfg.group", getOrgname());
+
+		buttons_next = SeleniumUtils.findElements(driver, "buttons:next", true);
+
+		buttons_next.get(1).sendKeys(Keys.RETURN);
+
+		Thread.sleep(1000L);
+
+		buttons_next = SeleniumUtils.findElements(driver, "buttons:next", true);
+
+		buttons_next.get(1).sendKeys(Keys.RETURN);
+
+		Thread.sleep(1000L);
+
+		buttons_next = SeleniumUtils.findElements(driver, "buttons:next", true);
+
+		buttons_next.get(1).sendKeys(Keys.RETURN);
+
+		Thread.sleep(1000L);
+
+		buttons_next = SeleniumUtils.findElements(driver, "buttons:next", true);
+
+		buttons_next.get(1).sendKeys(Keys.RETURN);
+
+		Thread.sleep(2000L);
+
+		List<WebElement> elements = SeleniumUtils.findElements(driver,
+				"buttons:finish", true);
+
+		elements.get(1).sendKeys(Keys.RETURN);
+
+		long maxMilliSecondsWait = 120000;
+
+		while (maxMilliSecondsWait > 0) {
+
+			// check if installation is complete by searching for the link on
+			// the success page
+			WebElement enterApplicationLink = SeleniumUtils.findElement(driver,
+					"//a[contains(@href,'install')]", false, true);
+
+			if (enterApplicationLink == null) {
+				System.out
+						.println("Installation running - wait 3 more seconds and check again");
+
+				Thread.sleep(3000L);
+				maxMilliSecondsWait -= 3000;
+			} else {
+				maxMilliSecondsWait = 0;
+
+				enterApplicationLink.click();
+
+				return;
+			}
+		}
+
+		throw new Exception("Timeout during installation");
+	}
+
+	@After
+	public void tearDown() throws Exception {
+		if (getDoTearDownAfterTest()) {
+			driver.close();
+			driver.quit();
+		}
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java b/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
new file mode 100644
index 0000000..b525125
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/selenium/SeleniumUtils.java
@@ -0,0 +1,224 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.selenium;
+
+import java.io.File;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.commons.io.FileUtils;
+import org.openqa.selenium.By;
+import org.openqa.selenium.OutputType;
+import org.openqa.selenium.TakesScreenshot;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+
+public class SeleniumUtils {
+	// we need to retry some actions because our web site is dynamic
+	static int numberOfRetries = 10;
+
+	// we need to sleep to make sure Ajax could complete whatever it does
+	static long defaultSleepInterval = 1000;
+
+	public static void inputText(WebDriver driver, String search,
+			String inputText) throws Exception {
+		WebElement element = SeleniumUtils.findElement(driver, search, true, true);
+
+		//clear text before adding input
+		element.clear();
+		
+		// Would make send to check if this element is really an input text
+		element.sendKeys(inputText);
+	}
+
+	public static void click(WebDriver driver, String search) throws Exception {
+		WebElement element = SeleniumUtils.findElement(driver, search, true, true);
+		element.click();
+	}
+	
+	/**
+	 * 
+	 * @param driver
+	 * @param search
+	 * @param throwException
+	 *            under some circumstance you do't want to exit the test here
+	 * @return
+	 * @throws Exception
+	 */
+	public static List<WebElement> findElements(WebDriver driver, String search,
+			boolean throwException) throws Exception {
+		for (int i = 0; i < numberOfRetries; i++) {
+			List<WebElement> elements = _findElement(driver, search);
+			if (elements != null) {
+				return elements;
+			}
+
+			Thread.sleep(defaultSleepInterval);
+		}
+
+		if (throwException) {
+			throw new Exception("Could not find element with specified path "
+					+ search);
+		}
+
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param driver
+	 * @param search
+	 * @param throwException
+	 *            under some circumstance you do't want to exit the test here
+	 * @param onlyReturnVisisbleElement TODO
+	 * @return
+	 * @throws Exception
+	 */
+	public static WebElement findElement(WebDriver driver, String search,
+			boolean throwException, boolean onlyReturnVisisbleElement) throws Exception {
+		for (int i = 0; i < numberOfRetries; i++) {
+			List<WebElement> elements = _findElement(driver, search);
+			if (elements != null) {
+				
+				if (!onlyReturnVisisbleElement) {
+					return elements.get(0);
+				}
+				
+				for (WebElement element : elements) {
+					if (element.isDisplayed()) {
+						return element;
+					}
+				}
+				
+			}
+
+			Thread.sleep(defaultSleepInterval);
+		}
+
+		if (throwException) {
+			throw new Exception("Could not find element with specified path "
+					+ search);
+		}
+
+		return null;
+	}
+
+	private static By[] _getSearchArray(String search) {
+		//If xpath we have to use it, if xpath is used with By.className(...) there will be an exception
+		if (search.startsWith("//")) {
+			return new By[] { By.xpath(search) };
+		} else {
+			return new By[] { By.id(search), By.name(search), By.className(search),
+					By.tagName(search), By.xpath(search) };
+		}
+	}
+
+	private static List<WebElement> _findElement(WebDriver driver, String search) {
+		for (By by : _getSearchArray(search)) {
+			try {
+				List<WebElement> elements = driver.findElements(by);
+				if (elements != null && elements.size() > 0) {
+					return elements;
+				}
+			} catch (Exception e) {
+				// Do not show any warnings
+			}
+		}
+		return null;
+	}
+
+	public static void elementExists(WebDriver driver, String search,
+			boolean shouldExist) throws Exception {
+		Thread.sleep(defaultSleepInterval);
+
+		boolean doesExist = !shouldExist;
+
+		for (int i = 0; i < numberOfRetries; i++) {
+			doesExist = checkExists(driver, search);
+			if (doesExist == shouldExist) {
+				break;
+			}
+
+			Thread.sleep(defaultSleepInterval);
+		}
+
+		if (doesExist != shouldExist) {
+			if (shouldExist) {
+				throw new Exception("Element could not be found: " + search);
+			} else {
+				throw new Exception("Unexpected Element was found: " + search);
+			}
+		}
+	}
+
+	private static boolean checkExists(WebDriver driver, String search) {
+		for (By by : _getSearchArray(search)) {
+			try {
+				List<WebElement> element = driver.findElements(by);
+				if (element.size() > 0) {
+					return true;
+				}
+			} catch (Exception e) {
+				// Do not show any warnings
+			}
+		}
+		return false;
+	}
+
+	public static void makeScreenShot(String testName, Exception e,
+			WebDriver driver) {
+		try {
+			DateFormat df = new SimpleDateFormat("MM-dd-yyyy_HH-mm-ss");
+			String fileName = e.getMessage().replace(" ", "_");
+			fileName = fileName.replaceAll("(\r\n|\n)", "");
+			fileName = fileName.replaceAll("/", "");
+
+			if (fileName.length() > 100) {
+				fileName = fileName.substring(0, 100);
+			}
+
+			fileName = fileName + "_" + df.format(new Date()) + ".png";
+			File screenShotFile = ((TakesScreenshot) driver)
+					.getScreenshotAs(OutputType.FILE);
+
+			String path = "." + File.separatorChar + "build"
+					+ File.separatorChar + "screenshots" + File.separatorChar
+					+ testName;
+
+			File screenshotFolder = new File(path);
+			if (!screenshotFolder.exists()) {
+				screenshotFolder.mkdirs();
+			}
+
+			System.out.println("screenshot copy from: "
+					+ screenShotFile.getAbsolutePath());
+			System.out.println("Length Filename: " + fileName.length()
+					+ " - Writing screenshot to: " + path + File.separatorChar
+					+ fileName);
+
+			FileUtils.moveFile(screenShotFile, new File(path
+					+ File.separatorChar + fileName));
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+
+	}
+}
\ No newline at end of file
diff --git a/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java b/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
new file mode 100644
index 0000000..0a0a5d5
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/selenium/TestSignUp.java
@@ -0,0 +1,135 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.selenium;
+
+import java.util.Date;
+
+import org.junit.Test;
+import org.openqa.selenium.Alert;
+import org.openqa.selenium.WebElement;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+
+public class TestSignUp extends AbstractTestDefaults {
+	
+	String pass = "pass";
+	
+	@Override
+	public boolean getDoTearDownAfterTest() {
+		return false;
+	}
+
+	@Test
+	public void testSignUp() throws Exception {
+		
+		try {
+			driver.get(getBASE_URL());
+			
+			String currentRandomCounter = "" + ((new Date().getTime())/1000);
+			String userName = "seba" + currentRandomCounter;
+			String email = "hans." + currentRandomCounter + "@openmeetings.apache.org";
+			
+			super.testIsInstalledAndDoInstallation();
+			
+			WebElement signUpButton = SeleniumUtils.findElement(driver,
+					"//button[span[contains(text(), '" + getString(123) + "')]]", true, true);
+			signUpButton.click();
+			
+			// ##################################
+			// Test validation message for passwords to be identical
+			// ##################################
+			doSignUp("Hans","Muster", userName, "pw", "pw2", email);
+			
+			//Find Error label-id 232 "Please enter two identical passwords"
+			SeleniumUtils.findElement(driver, "//span[@class='feedbackPanelERROR'][contains(text(), '" + getString(232) + "')]", true, true);
+			
+			
+			// ##################################
+			// Sign up with user and sign in
+			// ##################################
+			doSignUp("Hans","Muster", userName, pass, pass, email);
+			
+			
+			//Check for popup with success message and email to check
+			//Labelid 674
+			SeleniumUtils.findElement(driver, "//span[contains(text(), '" + getString(674) + "')]", true, true);
+			
+			//click button to close popup
+			WebElement signUpSucessPopUpOkButton = SeleniumUtils.findElement(driver,
+					"//button[span[contains(text(), '" + DialogButtons.OK.toString() + "')]]", true, true);
+			signUpSucessPopUpOkButton.click();
+			
+			//Login with user
+			SeleniumUtils.inputText(driver, "login", userName);
+			SeleniumUtils.inputText(driver, "pass", pass);
+	
+			//click labelid 112 "Sign In"
+			WebElement signInButton = SeleniumUtils.findElement(driver,
+					"//button[span[contains(text(), '" + getString(112) + "')]]", true, true);
+			signInButton.click();
+	
+			// check for some text in dashbaord, labelid 281, "Help and support"
+			SeleniumUtils.elementExists(driver,
+					"//h3[contains(text(), '" + getString(281) + "')]", true);
+			
+			//sign out
+			WebElement signOutLink = SeleniumUtils.findElement(driver,
+					"//a[contains(text(), '" + getString(310) + "')]", true, true);
+			signOutLink.click();
+			
+			Alert alert = driver.switchTo().alert();
+			alert.accept();
+			
+			// ##################################
+			// Sign up with same user and email and check duplicate messages
+			// ##################################
+			
+			signUpButton = SeleniumUtils.findElement(driver,
+					"//button[span[contains(text(), '" + getString(123) + "')]]", true, true);
+			signUpButton.click();
+			
+			doSignUp("Hans","Muster", userName, pass, pass, email);
+			
+			//Find Error label-id 105, The username is already used
+			SeleniumUtils.findElement(driver, "//span[@class='feedbackPanelERROR'][contains(text(), '" + getString(105) + "')]", true, true);
+			
+			//Find Error label-id 1000, This email is already used by another user.
+			SeleniumUtils.findElement(driver, "//span[@class='feedbackPanelERROR'][contains(text(), '" + getString(1000) + "')]", true, true);
+		} catch (Exception e) {
+			SeleniumUtils.makeScreenShot(this.getClass().getSimpleName(), e,
+					driver);
+			throw e;
+		}	
+	}
+	
+	private void doSignUp(String firstName, String lastName, String login, String password,
+					String confirmPassword, String email) throws Exception {
+		
+		SeleniumUtils.inputText(driver, "firstName", firstName);
+		SeleniumUtils.inputText(driver, "lastName", lastName);
+		SeleniumUtils.inputText(driver, "//input[@name='login']", login);
+		SeleniumUtils.inputText(driver, "password", password);
+		SeleniumUtils.inputText(driver, "confirmPassword", confirmPassword);
+		SeleniumUtils.inputText(driver, "email", email);
+		
+		WebElement submitButton = SeleniumUtils.findElement(driver,
+				"//button[span[contains(text(), 'Register')]]", true, true);
+		submitButton.click();
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/session/TestDbSession.java b/src/test/java/org/apache/openmeetings/test/session/TestDbSession.java
new file mode 100644
index 0000000..7045307
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/session/TestDbSession.java
@@ -0,0 +1,198 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.session;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.ClientDao;
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestDbSession extends AbstractJUnitDefaults {
+
+	protected static final Logger log = Red5LoggerFactory.getLogger(
+			TestDbSession.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private ServerDao serverDao;
+
+	@Autowired
+	private ClientDao clientDao;
+
+	@Test
+	public void testDbSessionFunctions() {
+
+		clientDao.cleanAllClients();
+		
+		List<Server> serverList = serverDao.getActiveServers();
+
+		Server server = null;
+		if (serverList.size() > 0) {
+			server = serverList.get(0);
+		} else {
+			server = new Server();
+			server.setName("Test Server");
+			server.setActive(true);
+			serverDao.update(server, null);
+		}
+
+		Client cl1 = new Client();
+		cl1.setStreamid("1");
+		cl1.setServer(null);
+		cl1.setUser_id(1L);
+		cl1.setRoom_id(1L);
+		cl1.setPublicSID("public1");
+		clientDao.add(cl1);
+
+		Client cl2 = new Client();
+		cl2.setStreamid("2");
+		cl2.setServer(null);
+		cl2.setRoom_id(1L);
+		cl2.setUser_id(2L);
+		cl2.setPublicSID("public2");
+		clientDao.add(cl2);
+
+		Client cl3 = new Client();
+		cl3.setStreamid("3");
+		cl3.setServer(server);
+		cl3.setRoom_id(3L);
+		cl3.setUser_id(3L);
+		cl3.setPublicSID("public3");
+		clientDao.add(cl3);
+		
+		Client clTest = clientDao.getClientByServerAndStreamId(null, "1");
+
+		log.debug("cl1 " + cl1);
+		log.debug("clTest " + clTest);
+
+		assertEquals(clTest.getId(), cl1.getId());
+
+		Client clTest3 = clientDao.getClientByServerAndStreamId(server, "3");
+
+		log.debug("cl3 " + cl3);
+		log.debug("clTest3 " + clTest3);
+
+		assertEquals(clTest3.getId(), cl3.getId());
+
+		Client clTest_NOT_3 = clientDao.getClientByServerAndStreamId(null, "3");
+
+		log.debug("clTest_NOT_3 " + clTest_NOT_3);
+		assertEquals(null, clTest_NOT_3);
+		
+		long numberOfClients1 = clientDao.countClientsByServerAndStreamId(null, "1");
+		assertEquals(1, numberOfClients1);
+		
+		long numberOfClients3 = clientDao.countClientsByServerAndStreamId(server, "3");
+		assertEquals(1, numberOfClients3);
+		
+		long numberOfClients4 = clientDao.countClientsByServerAndStreamId(null, "3");
+		assertEquals(0, numberOfClients4);
+		
+		List<Client> clTest_Pub_1_list = clientDao.getClientsByPublicSIDAndServer(null, "public1");
+		assertEquals(cl1.getId(), clTest_Pub_1_list.get(0).getId());
+		
+		List<Client> clTest_Pub_3_list = clientDao.getClientsByPublicSIDAndServer(server, "public3");
+		assertEquals(cl3.getId(), clTest_Pub_3_list.get(0).getId());
+		
+		List<Client> clTest_Fail_list = clientDao.getClientsByPublicSIDAndServer(null, "public3");
+		assertEquals(0, clTest_Fail_list.size());
+		
+		List<Client> clTest_PubAll_1_list = clientDao.getClientsByPublicSID("public1");
+		assertEquals(cl1.getId(), clTest_PubAll_1_list.get(0).getId());
+		
+		List<Client> clTest_PubAll_3_list = clientDao.getClientsByPublicSID("public3");
+		assertEquals(cl3.getId(), clTest_PubAll_3_list.get(0).getId());
+		
+		List<Client> clTest_FailAll_list = clientDao.getClientsByPublicSID("public4");
+		assertEquals(0, clTest_FailAll_list.size());
+		
+		List<Client> clientsByServerNull = clientDao.getClientsByServer(null);
+		assertEquals(2, clientsByServerNull.size());
+		
+		List<Client> clientsByServer = clientDao.getClientsByServer(server);
+		assertEquals(1, clientsByServer.size());
+		
+		List<Client> clientsAll = clientDao.getClients();
+		assertEquals(3, clientsAll.size());
+		
+		//by userid
+		List<Client> clTest_User_1_list = clientDao.getClientsByUserId(null, 1L);
+		assertEquals(cl1.getId(), clTest_User_1_list.get(0).getId());
+		
+		List<Client> clTest_User_3_list = clientDao.getClientsByUserId(server, 3L);
+		assertEquals(cl3.getId(), clTest_User_3_list.get(0).getId());
+		
+		List<Client> clTest_UserFail_list = clientDao.getClientsByUserId(null, 3L);
+		assertEquals(0, clTest_UserFail_list.size());
+		
+		//by roomid
+		List<Client> clTest_Room_1_list = clientDao.getClientsByRoomId(1L);
+		assertEquals(2, clTest_Room_1_list.size());
+		
+		List<Client> clTest_Room_3_list = clientDao.getClientsByRoomId(3L);
+		assertEquals(cl3.getId(), clTest_Room_3_list.get(0).getId());
+		
+		List<Client> clTest_RoomFail_list = clientDao.getClientsByRoomId(2L);
+		assertEquals(0, clTest_RoomFail_list.size());
+		
+		//count all
+		int countAll = clientDao.countClients();
+		assertEquals(3, countAll);
+		
+		//count by server
+		int clTest_Count_1_list = clientDao.countClientsByServer(null);
+		assertEquals(2, clTest_Count_1_list);
+		
+		int clTest_Count_3_list = clientDao.countClientsByServer(server);
+		assertEquals(1, clTest_Count_3_list);
+		
+		//remove by id
+		clientDao.delete(cl1);
+		
+		int clTest_Count_Delete_list = clientDao.countClientsByServer(null);
+		assertEquals(1, clTest_Count_Delete_list);
+		
+		//remove by server and streamid
+		clientDao.removeClientByServerAndStreamId(null, "2");
+		
+		clTest_Count_Delete_list = clientDao.countClientsByServer(null);
+		assertEquals(0, clTest_Count_Delete_list);
+		
+		clientDao.removeClientByServerAndStreamId(server, "3");
+		
+		clTest_Count_Delete_list = clientDao.countClientsByServer(server);
+		assertEquals(0, clTest_Count_Delete_list);
+		
+		//delete all
+		clientDao.cleanAllClients();
+
+		countAll = clientDao.countClients();
+		assertEquals(0, countAll);
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/session/TestDbSessionGetRoomIds.java b/src/test/java/org/apache/openmeetings/test/session/TestDbSessionGetRoomIds.java
new file mode 100644
index 0000000..0d92e73
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/session/TestDbSessionGetRoomIds.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.session;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.ClientDao;
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestDbSessionGetRoomIds extends AbstractJUnitDefaults {
+
+	protected static final Logger log = Red5LoggerFactory.getLogger(
+			TestDbSessionGetRoomIds.class, OpenmeetingsVariables.webAppRootKey);
+
+	@Autowired
+	private ServerDao serverDao;
+
+	@Autowired
+	private ClientDao clientDao;
+
+	@Test
+	public void testDbSessionFunctions() {
+
+		clientDao.cleanAllClients();
+		
+		List<Server> serverList = serverDao.getActiveServers();
+
+		Server server = null;
+		if (serverList.size() > 0) {
+			server = serverList.get(0);
+		} else {
+			server = new Server();
+			server.setName("Test Server");
+			server.setActive(true);
+			serverDao.update(server, null);
+		}
+
+		Client cl1 = new Client();
+		cl1.setStreamid("1");
+		cl1.setServer(server);
+		cl1.setUser_id(1L);
+		cl1.setRoom_id(1L);
+		cl1.setPublicSID("public1");
+		clientDao.add(cl1);
+
+		Client cl2 = new Client();
+		cl2.setStreamid("2");
+		cl2.setServer(server);
+		cl2.setRoom_id(1L);
+		cl2.setUser_id(2L);
+		cl2.setPublicSID("public2");
+		clientDao.add(cl2);
+
+		Client cl3 = new Client();
+		cl3.setStreamid("3");
+		cl3.setServer(server);
+		cl3.setRoom_id(3L);
+		cl3.setUser_id(3L);
+		cl3.setPublicSID("public3");
+		clientDao.add(cl3);
+		
+		List<Long> roomids = clientDao.getRoomsIdsByServer(server);
+
+		assertEquals(2, roomids.size());
+		
+		//delete all
+		clientDao.cleanAllClients();
+
+		int countAll = clientDao.countClients();
+		assertEquals(0, countAll);
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java b/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java
new file mode 100644
index 0000000..45e17ef
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/session/TestHashMapSession.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.session;
+
+import static org.junit.Assert.assertEquals;
+
+import java.math.BigInteger;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.Random;
+
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.session.store.HashMapStore;
+import org.apache.openmeetings.session.store.IClientPersistenceStore;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.junit.Test;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestHashMapSession extends AbstractJUnitDefaults {
+	
+	protected static final Logger log = Red5LoggerFactory.getLogger(
+			TestHashMapSession.class, OpenmeetingsVariables.webAppRootKey);
+	
+	@Autowired
+	private HashMapStore cache;
+	
+	@Test
+	public void testHashMapSession() {
+		
+		//make sure the cache is empty before starting the test
+		cache.clearCache();
+		
+		for (int i=0;i<20;i++) {
+			
+			String streamId = ""+i;
+			
+			Client rcm = new Client();
+			rcm.setConnectedSince(new Date());
+			rcm.setStreamid(streamId);
+			rcm.setScope("scopeName");
+			long random = System.currentTimeMillis() + new BigInteger(256, new Random()).longValue();
+			
+			rcm.setPublicSID(ManageCryptStyle.getInstanceOfCrypt()
+					.createPassPhrase(String.valueOf(random).toString()));
+
+			rcm.setUserport(0);
+			rcm.setUserip("remoteAddress");
+			rcm.setSwfurl("swfUrl");
+			rcm.setIsMod(new Boolean(false));
+			rcm.setCanDraw(new Boolean(false));
+			rcm.setIsAVClient(false);
+
+			if (cache.containsKey(null, streamId)) {
+				log.error("Tried to add an existing Client " + streamId);
+				break;
+			}
+
+			cache.put(rcm.getStreamid(), rcm);
+			
+			cache.remove(null, streamId);
+		
+		}
+		
+		String logString = cache.getDebugInformation(Arrays.asList(IClientPersistenceStore.DEBUG_DETAILS.SIZE));
+		
+		
+		log.debug("######## \n\r "+ logString + " \n\r ########");
+		
+		assertEquals(0, cache.size());
+		
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/smoke/TestSmokeBasic.java b/src/test/java/org/apache/openmeetings/test/smoke/TestSmokeBasic.java
new file mode 100644
index 0000000..6a70378
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/smoke/TestSmokeBasic.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.smoke;
+
+import static org.junit.Assert.assertNotNull;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestSmokeBasic extends AbstractJUnitDefaults {
+	@Autowired
+	private UserDao userDao;
+	
+	@Test
+	public void createErrorValueAndTest() {
+        assertNotNull(userDao.get(1L));
+	}	
+}
diff --git a/src/test/java/org/apache/openmeetings/test/user/TestMailSending.java b/src/test/java/org/apache/openmeetings/test/user/TestMailSending.java
new file mode 100644
index 0000000..ef1a003
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/user/TestMailSending.java
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.user;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.Properties;
+
+import javax.activation.DataHandler;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeMessage;
+import javax.mail.util.ByteArrayDataSource;
+
+import org.apache.openmeetings.util.mail.SmtpAuthenticator;
+import org.junit.Test;
+
+import com.sun.mail.util.MailSSLSocketFactory;
+
+/**
+ * 
+ * @author swagner
+ *
+ */
+public class TestMailSending {
+	
+	//Example GMail email server data
+	private String smtpServer = "smtp.gmail.com";
+	private String smtpPort = "25";
+	private String from = "test@apache.org";
+	private String mailAuthUser = "test@gmail.com";
+	private String mailAuthPass = "*******";
+	private boolean mailTls = true;
+
+	/**
+	 * @Test
+	 * 
+	 * It does not make a lot of send to test this in every test suite, it is more for manual testing.
+	 * Handy to check your server and the JavaMail setting properties
+	 * 
+	 */
+	@Test
+	public void doTestSendEmail() {
+		try{
+			
+			Transport.send(getMimeMessage());
+			
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+		assertTrue(true);
+	}
+	
+	private MimeMessage getMimeMessage() throws Exception {
+		// Building MimeMessage
+		MimeMessage msg = getBasicMimeMessage();
+		msg.setSubject("getSubject()");
+		msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse("seba.wagner@gmail.com", false));
+		
+		return appendBody(msg);
+	}
+	
+	private MimeMessage appendBody(MimeMessage msg) throws MessagingException, IOException {
+		// -- Set the subject and body text --
+		msg.setDataHandler(new DataHandler(new ByteArrayDataSource("getBody", "text/html; charset=\"utf-8\"")));
+
+		// -- Set some other header information --
+		msg.setHeader("X-Mailer", "XML-Mail");
+		msg.setSentDate(new Date());
+		
+		return msg;
+	}
+	
+	private MimeMessage getBasicMimeMessage() throws Exception {
+		System.out.println("getBasicMimeMessage");
+		Properties props = new Properties(System.getProperties());
+
+		props.put("mail.smtp.connectiontimeout", 30000); //default timeout is 30 seconds, javaMail default is "infinite"
+		props.put("mail.smtp.timeout", 30000); //default timeout is 30 seconds, javaMail default is "infinite"
+		
+		props.put("mail.smtp.host", smtpServer);
+		props.put("mail.smtp.port", smtpPort);
+		
+		if (mailTls) {
+			props.put("mail.smtp.starttls.enable", "true");
+			MailSSLSocketFactory sf = new MailSSLSocketFactory();
+		    sf.setTrustAllHosts(true);
+		    props.put("mail.smtp.ssl.socketFactory", sf);
+		}
+
+		// Check for Authentication
+		Session session = null;
+		if (mailAuthUser != null && mailAuthUser.length() > 0
+				&& mailAuthPass != null && mailAuthPass.length() > 0) {
+			// use SMTP Authentication
+			props.put("mail.smtp.auth", "true");
+			session = Session.getInstance(props, new SmtpAuthenticator(mailAuthUser, mailAuthPass));
+		} else {
+			// not use SMTP Authentication
+			session = Session.getInstance(props, null);
+		}
+
+		// Building MimeMessage
+		MimeMessage msg = new MimeMessage(session);
+		msg.setFrom(new InternetAddress(from));
+		return msg;
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/user/TestStateToLower.java b/src/test/java/org/apache/openmeetings/test/user/TestStateToLower.java
new file mode 100644
index 0000000..290387f
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/user/TestStateToLower.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.user;
+
+import static org.junit.Assert.assertTrue;
+
+import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestStateToLower extends AbstractJUnitDefaults {
+	
+	@Autowired
+	private StateDao stateDao;
+	
+	@Test
+	public void doTestQuery() {
+		
+		State state_alabania = stateDao.getStateByName("Albania");
+		
+		State state_alabania_lower = stateDao.getStateByName("albaNia");
+		
+		assertTrue(state_alabania != null);
+		assertTrue(state_alabania_lower != null);
+		assertTrue(state_alabania.getState_id().equals(3L));
+		assertTrue(state_alabania_lower.getState_id().equals(3L));
+		assertTrue(state_alabania.getState_id().equals(state_alabania_lower.getState_id()));
+		
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java b/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java
new file mode 100644
index 0000000..06a6675
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/user/TestUserContact.java
@@ -0,0 +1,106 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.test.user;

+

+import static org.apache.openmeetings.web.app.WebSession.getUserId;

+import static org.junit.Assert.assertFalse;

+import static org.junit.Assert.assertNotNull;

+import static org.junit.Assert.assertNull;

+import static org.junit.Assert.assertTrue;

+

+import java.util.List;

+import java.util.Random;

+

+import org.apache.openmeetings.db.dao.user.OrganisationDao;

+import org.apache.openmeetings.db.dao.user.UserDao;

+import org.apache.openmeetings.db.entity.user.Organisation_Users;

+import org.apache.openmeetings.db.entity.user.User;

+import org.apache.openmeetings.test.AbstractWicketTester;

+import org.junit.Test;

+import org.springframework.beans.factory.annotation.Autowired;

+

+public class TestUserContact extends AbstractWicketTester {

+	@Autowired

+	private UserDao userDao;

+	@Autowired

+	private OrganisationDao orgDao;

+	Random random = new Random();

+	

+	@Test

+	public void testGetUser() throws Exception {

+		assertNull("Null should be returned in case User does not exist", userDao.get(Long.MAX_VALUE));

+	}

+	

+	@Test

+	public void createUserWithOrganisation() throws Exception {

+		int rnd = random.nextInt();

+		User u = getUser(rnd);

+		u.getOrganisation_users().add(new Organisation_Users(orgDao.get(1L)));

+		u = userDao.update(u, null);

+		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getUser_id(), "pass" + rnd));

+		

+		User u1 = userDao.get(u.getUser_id());

+		assertNotNull("Just created user should not be null", u1);

+		assertNotNull("Just created user should have non null org-users", u1.getOrganisation_users());

+		assertFalse("Just created user should have not empty org-users", u1.getOrganisation_users().isEmpty());

+	}

+	

+	@Test

+	public void createUser() throws Exception {

+		int rnd = random.nextInt();

+		User u = createUser(rnd);

+		assertTrue("Password should be set as expected", userDao.verifyPassword(u.getUser_id(), "pass" + rnd));

+	}

+	

+	@Test

+	public void addContactByOwner() throws Exception {

+		login(null, null);

+		

+		List<User> users = userDao.getAllUsers();

+		assertNotNull("User list should not be null ", users);

+		assertFalse("User list should not be empty ", users.isEmpty());

+		

+		User contact = createUserContact(random.nextInt(), getUserId());

+		String email = contact.getAdresses().getEmail();

+		List<User> l = userDao.get(email, false, 0, 9999);

+		// check that contact is visible for admin

+		assertNotNull("Contact list should not be null for admin ", l);

+		assertFalse("Contact list should not be empty for admin ", l.isEmpty());

+		

+		// check that contact is visible for owner

+		l = userDao.get(email, 0, 9999, null, true, getUserId());

+		assertTrue("Contact list should not be empty for owner ", !l.isEmpty());		

+		//delete contact

+		userDao.delete(contact, getUserId());

+		l = userDao.get(email, false, 0, 9999);

+		assertTrue("Contact list should be empty after deletion", l.isEmpty());

+

+		User u = createUser(random.nextInt());

+		User u1 = createUser(random.nextInt());

+		contact = createUserContact(random.nextInt(), u.getUser_id());

+		email = contact.getAdresses().getEmail();

+		// check that contact is not visible for user that is not owner of this contact

+		l = userDao.get(email, 0, 9999, null, true, u1.getUser_id());

+		assertTrue("Contact list should be empty for another user", l.isEmpty());

+		//delete contact

+		userDao.delete(contact, u.getUser_id());

+		l = userDao.get(email, false, 0, 9999);

+		assertTrue("Contact list should be empty after deletion", l.isEmpty());

+	}

+}

diff --git a/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java b/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java
new file mode 100644
index 0000000..396356d
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/user/TestUserCount.java
@@ -0,0 +1,61 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.test.user;

+

+import static org.apache.openmeetings.web.app.WebSession.getUserId;

+import static org.junit.Assert.assertTrue;

+

+import java.util.Random;

+

+import org.apache.openmeetings.db.dao.user.UserDao;

+import org.apache.openmeetings.db.entity.user.User;

+import org.apache.openmeetings.test.AbstractWicketTester;

+import org.junit.Test;

+import org.springframework.beans.factory.annotation.Autowired;

+

+public class TestUserCount extends AbstractWicketTester {

+	@Autowired

+	private UserDao userDao;

+	Random random = new Random();

+

+	@Test

+	public void testCountSearchUsres() throws Exception {

+		User u = createUser(random.nextInt());

+		assertTrue("Account of search users should be one", userDao.count(u.getFirstname()) == 1);

+	}

+

+	@Test

+	public void testCountFilteredUsres() throws Exception {

+		User u = createUser(random.nextInt());

+		User contact = createUserContact(random.nextInt(), u.getUser_id());

+		assertTrue("Account of filtered user should be one", userDao.count(contact.getFirstname(), true, u.getUser_id()) == 1);

+	}

+

+	@Test

+	public void testCountUnfilteredUsres() throws Exception {

+		User u = createUser(random.nextInt());

+		createUserContact(random.nextInt(), u.getUser_id());

+		assertTrue("Account of unfiltered should be more then one", userDao.count("firstname", false, getUserId()) > 1);

+	}

+		

+	@Test

+	public void testCountAllUsres() throws Exception {

+		assertTrue("Account of users should be positive", userDao.count() > 0);

+	}

+}

diff --git a/src/test/java/org/apache/openmeetings/test/user/TestUserOrganisation.java b/src/test/java/org/apache/openmeetings/test/user/TestUserOrganisation.java
new file mode 100644
index 0000000..3aa13d8
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/user/TestUserOrganisation.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.user;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.OrganisationUserDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestUserOrganisation extends AbstractJUnitDefaults {
+	@Autowired
+	private OrganisationUserDao orgUserDao;
+	@Autowired
+	private OrganisationDao orgDao;
+	@Autowired
+	private UserDao usersDao;
+	public static final String ORG_NAME = "Test Org";
+	
+	private User getValidUser() {
+		for (User u : usersDao.getAllBackupUsers()) {
+			if (!u.getDeleted() && u.getOrganisation_users().size() > 0) {
+				return u;
+			}
+		}
+		fail("Unable to find valid user");
+		return null;  //unreachable
+	}
+	
+	@Test
+	public void getUsersByOrganisationId() {
+		User u = getValidUser();
+		Long orgId = u.getOrganisation_users().get(0).getOrganisation().getOrganisation_id();
+		List<Organisation_Users> ul = orgUserDao.get(orgId, 0, 9999);
+		assertTrue("Default Organisation should contain at least 1 user: " + ul.size(), ul.size() > 0);
+		
+		Organisation_Users ou = orgUserDao.getByOrganizationAndUser(orgId, u.getUser_id());
+		assertNotNull("Unable to found [organisation, user] pair - [" + orgId + "," + u.getUser_id() + "]", ou);
+	}
+	
+	@Test
+	public void addOrganisation() {
+		Organisation o = new Organisation();
+		o.setName(ORG_NAME);
+		Long orgId = orgDao.update(o, null).getOrganisation_id(); //inserted by not checked
+		assertNotNull("New Organisation have valid id", orgId);
+		
+		List<Organisation_Users> ul = orgUserDao.get(orgId, 0, 9999);
+		assertTrue("New Organisation should contain NO users: " + ul.size(), ul.size() == 0);
+	}
+}
diff --git a/src/test/java/org/apache/openmeetings/test/userdata/TestAuth.java b/src/test/java/org/apache/openmeetings/test/userdata/TestAuth.java
new file mode 100644
index 0000000..3ffc241
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/userdata/TestAuth.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.userdata;
+
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.remote.MainService;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestAuth extends AbstractJUnitDefaults {
+	@Autowired
+	private MainService mService;
+
+	@Test
+	public void testTestAuth() {
+		Sessiondata sessionData = mService.getsessiondata();
+
+		System.out.println("sessionData: " + sessionData.getSession_id());
+
+		String tTemp = ManageCryptStyle.getInstanceOfCrypt().createPassPhrase("test");
+
+		System.out.println("tTemp: " + tTemp);
+
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/userdata/TestLogin.java b/src/test/java/org/apache/openmeetings/test/userdata/TestLogin.java
new file mode 100644
index 0000000..3087c29
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/userdata/TestLogin.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.userdata;
+
+import static org.junit.Assert.assertNotNull;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.apache.openmeetings.util.OmException;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestLogin extends AbstractJUnitDefaults {
+	
+	@Autowired
+	private UserDao userDao;
+
+	@Test
+	public void testTestLogin() throws OmException {
+		User us = userDao.login(username, userpass);
+		
+		assertNotNull("User is unable to login", us);
+		
+		//mService.getLanguageById(1);
+		
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/userdata/TestMD5.java b/src/test/java/org/apache/openmeetings/test/userdata/TestMD5.java
new file mode 100644
index 0000000..141ee3f
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/userdata/TestMD5.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.userdata;
+
+import junit.framework.TestCase;
+
+import org.junit.Test;
+
+public class TestMD5 extends TestCase {
+	
+	@Test
+	public void testTestMD5(){
+		
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/web/LoginUI.java b/src/test/java/org/apache/openmeetings/test/web/LoginUI.java
new file mode 100644
index 0000000..51324cf
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/web/LoginUI.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.web;
+
+import org.apache.openmeetings.test.AbstractWicketTester;
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.openmeetings.web.pages.auth.SignInPage;
+import org.apache.wicket.util.tester.FormTester;
+
+public class LoginUI extends AbstractWicketTester {
+
+        //@Test Needs to much memory to start this test, and there is nothing useful here inside other then some basic
+        //proof of concept (basically the concept failed)
+	public void testLoginUi() {
+		
+		tester.startPage(MainPage.class);
+		
+		tester.assertRenderedPage(SignInPage.class);
+		
+		FormTester formTester = tester.newFormTester("signin:signin");
+		formTester.setValue("login", username);
+		formTester.setValue("pass", userpass);
+		
+		//How to reference specific buttons in Wicket jQuery UI ?!
+		
+		formTester.submit();
+		
+		System.err.println("getLastRenderedPage: "+ tester.getLastRenderedPage().getMarkup().toString());
+		
+		//will fail
+		//tester.assertComponent("dashboard", DashboardPanel.class);
+		
+	}
+	
+}
+
diff --git a/src/test/java/org/apache/openmeetings/test/xsd/GenerateConfigXsd.java b/src/test/java/org/apache/openmeetings/test/xsd/GenerateConfigXsd.java
new file mode 100644
index 0000000..253b155
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/xsd/GenerateConfigXsd.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.xsd;
+
+import java.io.File;
+
+import com.thaiopensource.relaxng.translate.Driver;
+
+public class GenerateConfigXsd {
+	
+	public static void main(String... args) {
+		new GenerateConfigXsd();
+	}
+	
+	public GenerateConfigXsd() {
+		try {
+			
+			String[] args = { 
+				"src/main/webapp"+File.separatorChar+"openmeetings"+File.separatorChar+"public"+File.separatorChar+"config.xml",
+				"src/main/webapp"+File.separatorChar+"openmeetings"+File.separatorChar+"public"+File.separatorChar+"config.xsd"
+			};
+			
+			Driver.main(args);
+			
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+	}
+
+}
diff --git a/src/test/java/org/apache/openmeetings/test/xsd/GenerateWebsiteXsd.java b/src/test/java/org/apache/openmeetings/test/xsd/GenerateWebsiteXsd.java
new file mode 100644
index 0000000..e73d6b6
--- /dev/null
+++ b/src/test/java/org/apache/openmeetings/test/xsd/GenerateWebsiteXsd.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.test.xsd;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.ArrayList;
+import java.util.List;
+
+import com.thaiopensource.relaxng.translate.Driver;
+
+public class GenerateWebsiteXsd {
+
+	private static String WEBSITE_ROOT_DIR = "xdocs";
+
+	public static void main(String... args) {
+		new GenerateWebsiteXsd();
+	}
+
+	public GenerateWebsiteXsd() {
+		try {
+
+			File curentDir = new File(WEBSITE_ROOT_DIR);
+
+			System.err.println(curentDir.getAbsolutePath());
+
+			// Get all XML Files of this Folder
+			FilenameFilter ff = new FilenameFilter() {
+				public boolean accept(File b, String name) {
+					File f = new File(b, name);
+					return f.getName().contains(".xml");
+				}
+			};
+
+			String[] allfiles = curentDir.list(ff);
+
+			System.err.println("allfiles LENGTH " + allfiles.length);
+
+			List<String> allfilesPlusXSD = new ArrayList<String>();
+
+			for (String fileName : allfiles) {
+				allfilesPlusXSD.add(WEBSITE_ROOT_DIR + File.separatorChar
+						+ fileName);
+			}
+
+			allfilesPlusXSD.add(WEBSITE_ROOT_DIR + File.separatorChar
+					+ "website.xsd");
+
+			for (String fileName : allfilesPlusXSD) {
+				System.err.println(fileName);
+			}
+
+			Driver.main(allfilesPlusXSD.toArray(new String[0]));
+
+		} catch (Exception err) {
+			err.printStackTrace();
+		}
+	}
+
+}
diff --git a/src/util/java/org/apache/openmeetings/util/AuthLevelUtil.java b/src/util/java/org/apache/openmeetings/util/AuthLevelUtil.java
new file mode 100644
index 0000000..1601290
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/AuthLevelUtil.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.util.Set;
+
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class AuthLevelUtil {
+	private static final Logger log = Red5LoggerFactory.getLogger(AuthLevelUtil.class, webAppRootKey);
+	
+	private static boolean check(Set<Right> rights, Right level) {
+		boolean result = rights.contains(level);
+		log.debug(String.format("Level %s :: %s", level, result ? "[GRANTED]" : "[DENIED]"));
+		return result;
+	}
+	
+	public static boolean hasUserLevel(Set<Right> rights) {
+		return check(rights, Right.Room);
+	}
+
+	public static boolean hasModLevel(User u, Long orgId) {
+		boolean result = hasAdminLevel(u.getRights());
+		if (!result && orgId != null) {
+			for (Organisation_Users ou : u.getOrganisation_users()) {
+				if (orgId.equals(ou.getOrganisation().getOrganisation_id())) {
+					if (Boolean.TRUE.equals(ou.getIsModerator())) {
+						result = true;
+					}
+					break;
+				}
+			}
+		}
+		return result;
+	}
+
+	public static boolean hasAdminLevel(Set<Right> rights) {
+		return check(rights, Right.Admin);
+	}
+
+	public static boolean hasWebServiceLevel(Set<Right> rights) {
+		return check(rights, Right.Soap);
+	}
+
+	public static boolean hasLoginLevel(Set<Right> rights) {
+		return check(rights, Right.Login);
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/CalendarHelper.java b/src/util/java/org/apache/openmeetings/util/CalendarHelper.java
new file mode 100644
index 0000000..68c344a
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/CalendarHelper.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import java.util.Date;
+
+import org.threeten.bp.Instant;
+import org.threeten.bp.LocalDate;
+import org.threeten.bp.LocalDateTime;
+import org.threeten.bp.ZoneId;
+import org.threeten.bp.ZonedDateTime;
+
+public class CalendarHelper {
+	public static ZoneId getZoneId(String tzId) {
+		return ZoneId.of(tzId, ZoneId.SHORT_IDS);
+	}
+	
+	public static Date getDate(LocalDate d, String tzId) {
+		return getDate(d.atStartOfDay(), tzId);
+	}
+
+	public static Date getDate(LocalDateTime d, String tzId) {
+		return new Date(d.atZone(getZoneId(tzId)).toInstant().toEpochMilli());
+	}
+
+	public static ZonedDateTime getZoneDateTime(Date d, String tzId) {
+		if (d == null) {
+			d = new Date();
+		}
+		return Instant.ofEpochMilli(d.getTime()).atZone(getZoneId(tzId));
+	}
+	
+	public static LocalDate getDate(Date d, String tzId) {
+		if (d == null) {
+			d = new Date();
+		}
+		return getZoneDateTime(d, tzId).toLocalDate();
+	}
+	
+	public static LocalDateTime getDateTime(Date d, String tzId) {
+		if (d == null) {
+			d = new Date();
+		}
+		return getZoneDateTime(d, tzId).toLocalDateTime();
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/CalendarPatterns.java b/src/util/java/org/apache/openmeetings/util/CalendarPatterns.java
new file mode 100644
index 0000000..4986c3a
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/CalendarPatterns.java
@@ -0,0 +1,213 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.TimeZone;
+
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * @author Sebastian Wagner 27.08.2005 - 19:24:25
+ *
+ */
+public class CalendarPatterns {
+	private static final Logger log = Red5LoggerFactory.getLogger(CalendarPatterns.class, webAppRootKey);
+
+	public static ThreadLocal<SimpleDateFormat> dateFormat__ddMMyyyyHHmmss = new ThreadLocal<SimpleDateFormat>() {
+		protected SimpleDateFormat initialValue() {
+			return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
+		};
+	};
+	public static ThreadLocal<SimpleDateFormat> dateFormat__ddMMyyyy = new ThreadLocal<SimpleDateFormat>() {
+		protected SimpleDateFormat initialValue() {
+			return new SimpleDateFormat("dd.MM.yyyy");
+		};
+	};
+	public static ThreadLocal<SimpleDateFormat> dateFormat__ddMMyyyyBySeparator = new ThreadLocal<SimpleDateFormat>() {
+		protected SimpleDateFormat initialValue() {
+			return new SimpleDateFormat("dd-MM-yyyy");
+		};
+	};
+	public static ThreadLocal<SimpleDateFormat> dateFormat__yyyyMMddHHmmss = new ThreadLocal<SimpleDateFormat>() {
+		protected SimpleDateFormat initialValue() {
+			return new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
+		};
+	};
+
+	public static String getDateByMiliSeconds(Date t) {
+		return dateFormat__yyyyMMddHHmmss.get().format(t);
+	}
+
+	public static String getDateWithTimeByMiliSeconds(Date t) {
+		return t == null ? null : dateFormat__yyyyMMddHHmmss.get().format(t);
+	}
+
+	public static String getDateWithTimeByMiliSecondsWithZone(Date t) {
+		if (t == null) {
+			return null;
+		}
+		SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss z (Z)");
+		Date dateOld = new Date();
+		long timeAdv = t.getTime();
+		dateOld.setTime(timeAdv);
+		String result = sdf.format(dateOld);
+		return result;
+	}
+
+	public static String getExportDate(Date t) {
+		if (t == null) {
+			return "";
+		}
+		return "" + t.getTime();
+	}
+
+	public static Date parseImportDate(String dateString) {
+		try {
+
+			Date resultDate = null;
+
+			resultDate = validDate(dateFormat__ddMMyyyyHHmmss.get(), dateString);
+
+			if (resultDate != null) {
+				return resultDate;
+			}
+
+			resultDate = validDate(dateFormat__ddMMyyyy.get(), dateString);
+
+			if (resultDate != null) {
+				return resultDate;
+			}
+
+			resultDate = validDate(dateString);
+
+			if (dateString != null) {
+				return resultDate;
+			}
+
+			throw new Exception("Could not parse date string " + dateString);
+		} catch (Exception e) {
+			log.error("parseDate", e);
+		}
+		return null;
+	}
+
+	private static Date validDate(String testdate) {
+		try {
+
+			Long t = Long.valueOf(testdate);
+
+			if (t != null) {
+				return new Date(t);
+			}
+
+		} catch (Exception err) {
+		}
+		return null;
+	}
+
+	private static Date validDate(SimpleDateFormat sdf, String testdate) {
+		Date resultDate = null;
+		try {
+			resultDate = sdf.parse(testdate);
+		}
+
+		// if the format of the string provided doesn't match the format we
+		// declared in SimpleDateFormat() we will get an exception
+
+		catch (java.text.ParseException e) {
+			return null;
+		}
+
+		if (!sdf.format(resultDate).equals(testdate)) {
+			return null;
+		}
+
+		return resultDate;
+
+	}
+
+	public static String getDateWithTimeByMiliSecondsAndTimeZone(Date t,
+			TimeZone timezone) {
+		if (t == null) {
+			return null;
+		}
+		SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss z (Z)");
+		sdf.setTimeZone(timezone);
+		Date dateOld = new Date();
+		long timeAdv = t.getTime();
+		dateOld.setTime(timeAdv);
+		String result = sdf.format(dateOld);
+		return result;
+	}
+
+	public static String getTimeForStreamId(Date t) {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
+		Date dateOld = new Date();
+		long timeAdv = t.getTime();
+		dateOld.setTime(timeAdv);
+		String result = sdf.format(dateOld);
+		return result;
+	}
+
+	public static Date parseDate(String dateString) {
+		try {
+			return dateFormat__ddMMyyyy.get().parse(dateString);
+		} catch (Exception e) {
+			log.error("parseDate", e);
+		}
+		return null;
+	}
+
+	public static Date parseDateBySeparator(String dateString) {
+		try {
+			return dateFormat__ddMMyyyyBySeparator.get().parse(dateString);
+		} catch (Exception e) {
+			log.error("parseDate", e);
+		}
+		return null;
+	}
+
+	public static Date parseDateWithHour(String dateString) {
+		try {
+			if (dateString == null || dateString.length() == 0
+					|| dateString.equals("null")) {
+				return null;
+			}
+			return dateFormat__ddMMyyyyHHmmss.get().parse(dateString);
+		} catch (Exception e) {
+			log.error("parseDate", e);
+		}
+		return null;
+	}
+
+	public static String getYear(Date t) {
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
+		Date dateOld = new Date();
+		long timeAdv = t.getTime();
+		dateOld.setTime(timeAdv);
+		String result = sdf.format(dateOld);
+		return result;
+	}
+
+}
diff --git a/src/util/java/org/apache/openmeetings/util/DaoHelper.java b/src/util/java/org/apache/openmeetings/util/DaoHelper.java
new file mode 100644
index 0000000..14e2f33
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/DaoHelper.java
@@ -0,0 +1,107 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.util;

+

+import org.apache.commons.lang3.StringUtils;

+import org.apache.wicket.util.string.Strings;

+

+public class DaoHelper {

+

+	public static String getSearchQuery(String table, String alias, String search, boolean filterDeleted, boolean count, String sort, String... fields) {

+		return getSearchQuery(table, alias, search, false, filterDeleted, count, sort, fields);

+	}

+	public static String getSearchQuery(String table, String alias, String search, boolean distinct, boolean filterDeleted, boolean count, String sort, String... fields) {

+		return getSearchQuery(table, alias, null, search, distinct, filterDeleted, count, null, sort, fields);

+	}

+	

+	public static String getSearchQuery(String table, String alias, String join, String search, boolean filterDeleted, boolean count, String additionalWhere, String sort, String... fields) {

+		return getSearchQuery(table, alias, join, search, false, filterDeleted, count, additionalWhere, sort, fields);

+	}

+	

+	public static String getSearchQuery(String table, String alias, String join, String search, boolean distinct, boolean filterDeleted, boolean count, String additionalWhere, String sort, String... fields) {

+		StringBuilder sb = new StringBuilder("SELECT ");

+		if (count) {

+			sb.append("COUNT(");

+		}

+		if (distinct) {

+			sb.append("DISTINCT ");

+		}

+		sb.append(alias);

+		if (count) {

+			sb.append(")");

+		}

+		sb.append(" FROM ").append(table).append(" ").append(alias);

+		if (!Strings.isEmpty(join)) {

+			sb.append(" ").append(join);

+		}

+		sb.append(" WHERE 1 = 1 ");

+		if (filterDeleted) {

+			sb.append("AND ").append(alias).append(".deleted = false ");

+		}

+		StringBuilder where = getWhereClause(search, alias, fields);

+		if (!Strings.isEmpty(where)) {

+			sb.append("AND ").append(where);

+		}

+		if (!Strings.isEmpty(additionalWhere)) {

+			sb.append("AND ").append(additionalWhere);

+		}

+		if (!Strings.isEmpty(sort)) {

+			sb.append(" ORDER BY ").append(alias).append(".").append(sort);

+		}

+		return sb.toString();

+	}

+	

+	public static StringBuilder getWhereClause(String search, String alias, String... fields) {

+		StringBuilder sb = new StringBuilder();

+		getWhereClause(sb, search, alias, fields);

+		return sb;

+	}

+	

+	public static void getWhereClause(StringBuilder sb, String search, String alias, String... fields) {

+		if (search != null) {

+			boolean notEmpty = false;

+			String[] searchItems = search.replace("\'", "").replace("\"", "").split(" ");

+			for (int i = 0; i < searchItems.length; ++i) {

+				if (searchItems[i].isEmpty()) {

+					continue;

+				}

+				if (i == 0) {

+					notEmpty = true;

+					sb.append(" (");

+				} else {

+					sb.append(" OR ");

+				}

+				StringBuilder placeholder = new StringBuilder();

+				placeholder.append("%").append(StringUtils.lowerCase(searchItems[i])).append("%");

+	

+				sb.append("(");

+				for (int j = 0; j < fields.length; ++j) {

+					if (j != 0) {

+						sb.append(" OR ");

+					}

+					sb.append("lower(").append(alias).append(".").append(fields[j]).append(") LIKE '").append(placeholder).append("' ");

+				}

+				sb.append(")");

+			}

+			if (notEmpty) {

+				sb.append(") ");

+			}

+		}

+	}

+}

diff --git a/src/util/java/org/apache/openmeetings/util/ImportHelper.java b/src/util/java/org/apache/openmeetings/util/ImportHelper.java
new file mode 100644
index 0000000..53a33e7
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/ImportHelper.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * 
+ * Get some of the default values for the upload
+ * 
+ * @author solomax, swagner
+ * 
+ */
+public class ImportHelper {
+	/**
+	 * returns a list of all timezones as a {@link Map}
+	 * 
+	 * @param tzList
+	 * @return
+	 */
+	public static Map<String, String> getAllTimeZones(String ... tzList) {
+		Map<String, String> result = new LinkedHashMap<String, String>();
+
+		for (String omTimeZone : tzList) {
+			result.put(omTimeZone, omTimeZone);
+		}
+
+		return result;
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/InitializationContainer.java b/src/util/java/org/apache/openmeetings/util/InitializationContainer.java
new file mode 100644
index 0000000..e47b53f
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/InitializationContainer.java
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+public class InitializationContainer {
+	public static boolean initComplete = false;
+}
diff --git a/src/util/java/org/apache/openmeetings/util/Logger.java b/src/util/java/org/apache/openmeetings/util/Logger.java
new file mode 100644
index 0000000..76a8d32
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/Logger.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import org.red5.logging.Red5LoggerFactory;
+
+public class Logger {
+    private org.slf4j.Logger log;
+
+    public Logger() {
+        StackTraceElement ste = Thread.currentThread().getStackTrace()[1];
+        log = Red5LoggerFactory.getLogger(ste.getClass(),
+        		OpenmeetingsVariables.webAppRootKey);
+    }
+    
+    private String getMethodMessage() {
+        StackTraceElement ste = Thread.currentThread().getStackTrace()[2];
+        return "In the method " + ste.getMethodName();
+    }
+
+    public void debug(String s, Object o) {
+        log.debug(s, o);
+    }
+
+    public void debug(Object o) {
+        log.debug(getMethodMessage(), o);
+    }
+
+    public void error(Object o) {
+        log.error(getMethodMessage(), o);
+    }
+}
diff --git a/src/util/java/org/apache/openmeetings/util/OMContextListener.java b/src/util/java/org/apache/openmeetings/util/OMContextListener.java
new file mode 100644
index 0000000..72c03df
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/OMContextListener.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import javax.servlet.ServletContextEvent;
+
+import org.red5.logging.ContextLoggingListener;
+
+public class OMContextListener extends ContextLoggingListener {
+	
+	public void contextDestroyed(ServletContextEvent event) {
+		super.contextDestroyed(event);
+	}
+
+	public void contextInitialized(ServletContextEvent event) {
+		OpenmeetingsVariables.webAppRootKey = pathToName(event);
+		OpenmeetingsVariables.webAppRootPath = "/" + OpenmeetingsVariables.webAppRootKey;
+		System.setProperty("current_openmeetings_context_name", OpenmeetingsVariables.webAppRootKey);
+		System.setProperty("webapp.contextPath", OpenmeetingsVariables.webAppRootPath);
+		System.setProperty("logback.configurationFile", "logback-config.xml");
+		super.contextInitialized(event);
+	}
+
+	private String pathToName(ServletContextEvent event) {
+		String contextName = event.getServletContext().getContextPath().replaceAll("/", "");
+		if ("".equals(contextName)) {
+			contextName = "root";
+		}
+		return contextName;
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/OmException.java b/src/util/java/org/apache/openmeetings/util/OmException.java
new file mode 100644
index 0000000..6e12d09
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/OmException.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+public class OmException extends Exception {
+	private static final long serialVersionUID = 1L;
+	private Long code;
+	
+	public OmException(String msg) {
+		super(msg);
+	}
+	
+	public OmException(Long code) {
+		this.code = code;
+	}
+
+	public OmException(Throwable cause) {
+		super(cause);
+	}
+
+	public Long getCode() {
+		return code;
+	}
+
+	public void setCode(Long code) {
+		this.code = code;
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/OmFileHelper.java b/src/util/java/org/apache/openmeetings/util/OmFileHelper.java
new file mode 100644
index 0000000..1303f92
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/OmFileHelper.java
@@ -0,0 +1,350 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.util;

+

+import java.io.File;

+import java.io.FileInputStream;

+import java.io.IOException;

+import java.io.InputStream;

+import java.io.OutputStream;

+import java.text.DecimalFormat;

+

+import org.apache.commons.transaction.util.FileHelper;

+import org.apache.openmeetings.cli.ConnectionProperties.DbType;

+import org.red5.logging.Red5LoggerFactory;

+import org.slf4j.Logger;

+

+public class OmFileHelper {

+	private static final Logger log = Red5LoggerFactory.getLogger(OmFileHelper.class, OpenmeetingsVariables.webAppRootKey);

+

+	/**

+	 * This variable needs to point to the openmeetings webapp directory

+	 */

+	private static File OM_HOME = null;

+	private static final String UPLOAD_DIR = "upload";

+	private static final String UPLOAD_TEMP_DIR = "uploadtemp";

+	private static final String FILES_DIR = "files";

+	private static final String PUBLIC_DIR = "public";

+	private static final String CLIPARTS_DIR = "cliparts";

+	private static final String WEB_INF_DIR = "WEB-INF";

+	private static final String PROFILES_DIR = "profiles";

+	private static final String STREAMS_DIR = "streams";

+	private static final String EMOTIONS_DIR = "emoticons";

+	private static final String LANGUAGES_DIR = "languages";

+	private static final String IMPORT_DIR = "import";

+	private static final String HIBERNATE_DIR = "hibernate";

+	private static final String CONF_DIR = "conf";

+	private static final String BACKUP_DIR = "backup";

+	private static final String DEFAULT_DIR = "default";

+	private static final String WML_DIR = "stored";

+	

+	private static final String INSTALL_FILE = "install.xml";

+	

+	public static final String SCREENSHARING_DIR = "screensharing";

+	

+	public static final String PERSISTENCE_NAME = "classes/META-INF/persistence.xml";

+	public static final String DB_PERSISTENCE_NAME = "classes/META-INF/%s_persistence.xml";

+	public static final String profilesPrefix = "profile_";

+	public static final String nameOfLanguageFile = "languages.xml";

+	public static final String nameOfCountriesFile = "countries.xml";

+	public static final String nameOfTimeZoneFile = "timezones.xml";

+	public static final String nameOfErrorFile = "errorvalues.xml";

+	public static final String libraryFileName = "library.xml";

+	public static final String defaultProfileImageName = "profile_pic.jpg";

+	public static final String profileFileName = "profile";

+	public static final String profileImagePrefix = "_profile_";

+	public static final String chatImagePrefix = "_chat_";

+	public static final String bigImagePrefix = "_big_";

+	public static final String thumbImagePrefix = "_thumb_";

+	public static final String dashboardFile = "dashboard.xml";

+	public static final String MP4_EXTENSION = ".mp4";

+	public static final String OGG_EXTENSION = ".ogg";

+	public static final String JPG_EXTENTION = ".jpg";

+

+	public static void setOmHome(File omHome) {

+		OmFileHelper.OM_HOME = omHome;

+	}

+	

+	public static void setOmHome(String omHome) {

+		OmFileHelper.OM_HOME = new File(omHome);

+	}

+	

+	public static File getRootDir() {

+		//FIXME hack !!!!

+		return getOmHome().getParentFile().getParentFile();

+	}

+	

+	public static File getOmHome() {

+		return OmFileHelper.OM_HOME;

+	}

+	

+	private static File getDir(File parent, String name) {

+		File f = new File(parent, name);

+		if (!f.exists()) {

+			f.mkdir();

+		}

+		return f;

+	}

+	

+	public static File getUploadDir() {

+		return new File(OmFileHelper.OM_HOME, UPLOAD_DIR);

+	}

+	

+	public static File getUploadFilesDir() {

+		return getDir(getUploadDir(), FILES_DIR);

+	}

+	

+	public static File getUploadProfilesDir() {

+		return getDir(getUploadDir(), PROFILES_DIR);

+	}

+	

+	public static File getUploadProfilesUserDir(Long userId) {

+		return getDir(getUploadProfilesDir(), profilesPrefix + userId);

+	}

+	

+	public static File getUploadProfilesUserDir(String users_id) {

+		return getDir(getUploadProfilesDir(), profilesPrefix + users_id);

+	}

+	

+	public static File getDefaultProfilePicture() {

+		return new File(getDefaultDir(), profileImagePrefix + defaultProfileImageName);

+	}

+	

+	public static File getUserProfilePicture(Long userId, String uri) {

+		File img = new File(getUploadProfilesUserDir(userId), profileImagePrefix + uri);

+		if (!img.exists()) {

+			img = getDefaultProfilePicture();

+		}

+		return img;

+	}

+	

+	public static File getUserDashboard(Long userId) {

+		return new File(getUploadProfilesUserDir(userId), dashboardFile);

+	}

+	

+	public static File getUploadImportDir() {

+		return getDir(getUploadDir(), IMPORT_DIR);

+	}

+	

+	public static File getUploadBackupDir() {

+		return getDir(getUploadDir(), BACKUP_DIR);

+	}

+	

+	public static File getUploadRoomDir(String roomName) {

+		return getDir(getUploadDir(), roomName);

+	}

+	

+	public static File getUploadWmlDir() {

+		return getDir(getUploadDir(), WML_DIR);

+	}

+	

+	public static File getUploadTempDir() {

+		return new File(OmFileHelper.OM_HOME, UPLOAD_TEMP_DIR);

+	}

+	

+	public static File getUploadTempFilesDir() {

+		return getDir(getUploadTempDir(), FILES_DIR);

+	}

+	

+	public static File getUploadTempProfilesDir() {

+		return getDir(getUploadTempDir(), PROFILES_DIR);

+	}

+	

+	public static File getUploadTempProfilesUserDir(Long users_id) {

+		return getDir(getUploadTempProfilesDir(), OmFileHelper.profilesPrefix + users_id);

+	}

+	

+	public static File getUploadTempRoomDir(String roomName) {

+		return getDir(getUploadTempDir(), roomName);

+	}

+	

+	public static File getStreamsDir() {

+		return new File(OmFileHelper.OM_HOME, STREAMS_DIR);

+	}

+	

+	public static File getStreamsHibernateDir() {

+		return getDir(getStreamsDir(), HIBERNATE_DIR);

+	}

+	

+	public static File getRecording(String name) {

+		return new File(getDir(getStreamsDir(), HIBERNATE_DIR), name);

+	}

+	

+	public static boolean isRecordingExists(String name) {

+		try {

+			File f = new File(getDir(getStreamsDir(), HIBERNATE_DIR), name);

+			return f.exists() && f.isFile();

+		} catch (Exception e) {

+			//no-op

+		}

+		return false;

+	}

+	

+	public static File getMp4Recording(String name) {

+		return getRecording(name + MP4_EXTENSION);

+	}

+	

+	public static File getOggRecording(String name) {

+		return getRecording(name + OGG_EXTENSION);

+	}

+	

+	public static File getStreamsSubDir(Long id) {

+		return getDir(getStreamsDir(), id.toString());

+	}

+	

+	public static File getStreamsSubDir(String name) {

+		return getDir(getStreamsDir(), name);

+	}

+	

+	public static File getRecordingMetaData(Long roomId, String name) {

+		return new File(getStreamsSubDir(roomId), name + ".flv");

+	}

+	

+	public static File getLanguagesDir() {

+		return new File(OmFileHelper.OM_HOME, LANGUAGES_DIR);

+	}

+	

+	public static File getPublicDir() {

+		return new File(OmFileHelper.OM_HOME, PUBLIC_DIR);

+	}

+	

+	public static File getPublicClipartsDir() {

+		return new File(getPublicDir(), CLIPARTS_DIR);

+	}

+	

+	public static File getPublicEmotionsDir() {

+		return new File(getPublicDir(), EMOTIONS_DIR);

+	}

+	

+	public static File getWebinfDir() {

+		return new File(OmFileHelper.OM_HOME, WEB_INF_DIR);

+	}

+	

+	public static File getPersistence() {

+		return getPersistence((DbType)null);

+	}

+	

+	public static File getPersistence(String dbType) {

+		return getPersistence(DbType.valueOf(dbType));

+	}

+	

+	public static File getPersistence(DbType dbType) {

+		return new File(OmFileHelper.getWebinfDir(), dbType == null ? PERSISTENCE_NAME : String.format(DB_PERSISTENCE_NAME, dbType));

+	}

+	

+	public static File getConfDir() {

+		return new File(OmFileHelper.OM_HOME, CONF_DIR);

+	}

+	

+	public static File getInstallFile() {

+		return new File(getConfDir(), INSTALL_FILE);

+	}

+	

+	public static File getScreenSharingDir() {

+		return new File(OmFileHelper.OM_HOME, SCREENSHARING_DIR);

+	}

+

+	public static File getDefaultDir() {

+		return new File(OmFileHelper.OM_HOME, DEFAULT_DIR);

+	}

+	

+	public static File appendSuffix(File original, String suffix) {

+		File parent = original.getParentFile();

+		String name = original.getName();

+		String ext = "";

+		int idx = name.lastIndexOf('.');

+		if (idx > -1) {

+			name = name.substring(0, idx);

+			ext = name.substring(idx);

+		}

+		return new File(parent, name + suffix + ext);

+	}

+	

+	//FIXME need to be generalized

+	public static File getNewFile(File dir, String name, String ext) throws IOException {

+		File f = new File(dir, name + ext);

+		int recursiveNumber = 0;

+		while (f.exists()) {

+			f = new File(dir, name + "_" + (recursiveNumber++) + ext);

+		}

+		f.createNewFile();

+		return f;

+	}

+	

+	public static File getNewDir(File dir, String name) throws IOException {

+		File f = new File(dir, name);

+		String baseName = f.getCanonicalPath();

+

+		int recursiveNumber = 0;

+		while (f.exists()) {

+			f = new File(baseName + "_" + (recursiveNumber++));

+		}

+		f.mkdir();

+		return f;

+	}

+	

+	public static String getHumanSize(File dir) {

+		return getHumanSize(getSize(dir));

+	}

+	

+	public static String getHumanSize(long size) {

+		if(size <= 0) return "0";

+		final String[] units = new String[] { "B", "KB", "MB", "GB", "TB" };

+		int digitGroups = (int) (Math.log10(size)/Math.log10(1024));

+		return new DecimalFormat("#,##0.#").format(size/Math.pow(1024, digitGroups)) + " " + units[digitGroups];

+	}

+

+	public static long getSize(File dir) {

+		long size = 0;

+		if (dir.isFile()) {

+			size = dir.length();

+		} else {

+			File[] subFiles = dir.listFiles();

+	

+			for (File file : subFiles) {

+				if (file.isFile()) {

+					size += file.length();

+				} else {

+					size += getSize(file);

+				}

+	

+			}

+		}

+		return size;

+	}

+

+	public static void copyFile(String sourceFile, String targetFile) throws IOException {

+		FileHelper.copy(new File(sourceFile), new File(targetFile));

+	}

+	

+	public static void copyFile(File f1, OutputStream out) throws IOException {

+		InputStream in = null;

+		try {

+			in = new FileInputStream(f1);

+			FileHelper.copy(in, out);

+			log.debug("File copied.");

+		} catch (Exception e) {

+			log.error("[copyfile(File, File)]", e);

+		} finally {

+			if (in != null) {

+				in.close();

+			}

+		}

+	}

+}

diff --git a/src/util/java/org/apache/openmeetings/util/OpenmeetingsVariables.java b/src/util/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
new file mode 100644
index 0000000..44cac2a
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/OpenmeetingsVariables.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+public class OpenmeetingsVariables {
+	public static final String CONFIG_CRYPT_KEY = "crypt_ClassName";
+	public static final String CONFIG_DASHBOARD_SHOW_MYROOMS_KEY = "dashboard.show.myrooms";
+	public static final String CONFIG_DASHBOARD_SHOW_RSS_KEY = "dashboard.show.rssfeed";
+	public static final String CONFIG_DEFAULT_LANG_KEY = "default_lang_id";
+	public static final String CONFIG_FRONTEND_REGISTER_KEY = "allow_frontend_register";
+	public static final String CONFIG_SOAP_REGISTER_KEY = "allow.soap.register";
+	public static final String CONFIG_OAUTH_REGISTER_KEY = "allow.oauth.register";
+	public static final String CONFIG_LOGIN_MIN_LENGTH_KEY = "user.login.minimum.length";
+	public static final String CONFIG_MAX_UPLOAD_SIZE_KEY = "max_upload_size";
+	public static final String CONFIG_PASS_MIN_LENGTH_KEY = "user.pass.minimum.length";
+	public static final String CONFIG_RSS_FEED1_KEY = "rss_feed1";
+	public static final String CONFIG_RSS_FEED2_KEY = "rss_feed2";
+	public static final String CONFIG_IGNORE_BAD_SSL = "oauth2.ignore_bad_ssl";
+	public static final String CONFIG_DEFAULT_LANDING_ZONE = "default.landing.zone";
+	public static final String CONFIG_DEFAULT_LDAP_ID = "ldap_default_id";
+	public static final String CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY = "redirect.url.for.external.users";
+	public static final String CONFIG_APPOINTMENT_REMINDER_MINUTES = "number.minutes.reminder.send";
+	public static final String CONFIG_APPLICATION_BASE_URL = "application.base.url";
+	public static final String CONFIG_SCREENSHARING_QUALITY = "default.quality.screensharing";
+	public static final String CONFIG_SCREENSHARING_FPS = "default.fps.screensharing";
+	public static final String CONFIG_SCREENSHARING_FPS_SHOW = "screensharing.fps.show";
+	public static final String CONFIG_SCREENSHARING_ALLOW_REMOTE = "screensharing.allow.remote";
+	public static final String CONFIG_CALENDAR_FIRST_DAY = "calendar.firstday";
+	public static final String CONFIG_DEFAULT_GROUP_ID = "default_group_id";
+
+	public static int DEFAULT_MINUTES_REMINDER_SEND = 15;
+	public static String DEFAULT_BASE_URL = "http://localhost:5080/openmeetings/";
+	
+	public static final String WEB_DATE_PATTERN = "dd.MM.yyyy HH:mm:ss"; //FIXME need to be made locale based
+	public static String webAppRootKey = null;
+	public static String webAppRootPath = null;
+	public static String configKeyCryptClassName = null;
+	public static final int USER_LOGIN_MINIMUM_LENGTH = 4;
+	public static final int USER_PASSWORD_MINIMUM_LENGTH = 4;
+	public static Boolean whiteboardDrawStatus = null;
+}
diff --git a/src/util/java/org/apache/openmeetings/util/StoredFile.java b/src/util/java/org/apache/openmeetings/util/StoredFile.java
new file mode 100644
index 0000000..a945283
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/StoredFile.java
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+public class StoredFile {
+    private static final Set<String> convertExtensions = new HashSet<String>(
+            Arrays.asList(new String[] { "ppt", "odp", "odt", "sxw", "wpd",
+                    "doc", "rtf", "txt", "ods", "sxc", "xls", "sxi", "pptx",
+                    "docx", "xlsx" }));
+
+    private static final Set<String> pdfExtensions = new HashSet<String>(
+            Arrays.asList(new String[] { "pdf", "ps" }));
+
+    private static final Set<String> imageExtensions = new HashSet<String>(
+            Arrays.asList(new String[] { "png", "gif", "svg", "dpx", "exr",
+                    "pcd", // PhotoCD
+                    "pcds", // PhotoCD
+                    "psd", // Adobe Photoshop
+                    "tiff", // Tagged Image File Format
+                    "ttf", // TrueType font
+                    "xcf", // GIMP image
+                    "wpg", // Word Perfect Graphics
+                    "bmp", "ico", // Microsoft Icon
+                    "tga", // Truevision Targa
+                    "jpg", "jpeg" }));
+
+    private static final Set<String> chartExtensions = new HashSet<String>(
+            Arrays.asList(new String[] { "xchart" }));
+
+    private static final Set<String> videoExtensions = new HashSet<String>(
+            Arrays.asList(new String[] { "avi", "mov", "flv", "mp4" }));
+
+    private static final Set<String> asIsExtensions = new HashSet<String>(
+            Arrays.asList(new String[] { "jpg", "xchart" }));
+
+    private final String name;
+	private final String ext;
+
+    public StoredFile(String fullname) {
+    	int idx = fullname.lastIndexOf('.');
+    	name = idx < 0 ? fullname : fullname.substring(0, idx);
+    	ext = idx < 0 ? "" : fullname.substring(idx + 1).toLowerCase();
+    }
+    
+    public StoredFile(String name, String ext) {
+        this.name = name;
+        this.ext = ext != null ? ext.toLowerCase() : "";
+    }
+    
+    public static String[] getExtensions(){
+    	
+    	Set<String> extensions = new HashSet<String>();
+    	extensions.addAll(convertExtensions);
+    	extensions.addAll(pdfExtensions);
+    	extensions.addAll(imageExtensions);
+    	extensions.addAll(chartExtensions);
+    	extensions.addAll(videoExtensions);
+    	extensions.addAll(asIsExtensions);
+    	
+    	Object[] returnObj = extensions.toArray();
+    	
+    	String[] returnStr = new String[returnObj.length];
+    	
+    	int i=0;
+    	for (Object obj : returnObj) {
+    		returnStr[i] = obj.toString();
+    		i++;
+    	}
+    	
+    	return returnStr;
+    }
+
+    public boolean isConvertable() {
+        return convertExtensions.contains(ext);
+    }
+
+    public boolean isPresentation() {
+        return isConvertable() || isPdf();
+    }
+
+    public boolean isPdf() {
+        return pdfExtensions.contains(ext);
+    }
+
+    public boolean isImage() {
+        return imageExtensions.contains(ext);
+    }
+
+    public boolean isVideo() {
+        return videoExtensions.contains(ext);
+    }
+
+    public boolean isChart() {
+        return chartExtensions.contains(ext);
+    }
+
+    public boolean isAsIs() {
+        return asIsExtensions.contains(ext);
+    }
+
+    public String getName() {
+		return name;
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/Version.java b/src/util/java/org/apache/openmeetings/util/Version.java
new file mode 100644
index 0000000..f568020
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/Version.java
@@ -0,0 +1,98 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.util;

+

+import java.io.IOException;

+import java.net.MalformedURLException;

+import java.net.URL;

+import java.util.jar.Attributes;

+import java.util.jar.Manifest;

+

+import org.red5.logging.Red5LoggerFactory;

+import org.slf4j.Logger;

+

+public class Version {

+	private static final Logger log = Red5LoggerFactory.getLogger(Version.class, OpenmeetingsVariables.webAppRootKey);

+	private static final int startedStringLength = 48;

+	private static String version = null;

+	private static String revision = null;

+	private static String buildDate = null;

+	

+	private static Attributes getAttributes() throws MalformedURLException, IOException {

+		String jarUrl = Version.class.getResource(Version.class.getSimpleName() + ".class").toString();

+		return new Manifest(new URL(jarUrl.substring(0, jarUrl.indexOf('!')) + "!/META-INF/MANIFEST.MF").openStream()).getMainAttributes();

+	}

+	

+	public static String getVersion() {

+		if (version == null) {

+			try {

+				version = getAttributes().getValue("Product-Version");

+			} catch (Exception e) {

+				e.printStackTrace();

+			}

+		}

+		return version;

+	}

+	

+	public static String getRevision() {

+		if (revision == null) {

+			try {

+				revision = getAttributes().getValue("Svn-Revision");

+			} catch (Exception e) {

+				e.printStackTrace();

+			}

+		}

+		return revision;

+	}

+	

+	public static String getBuildDate() {

+		if (buildDate == null) {

+			try {

+				buildDate = getAttributes().getValue("Built-On");

+			} catch (Exception e) {

+				e.printStackTrace();

+			}

+		}

+		return buildDate;

+	}

+

+	private static void getLine(StringBuilder sb, String text, char fill) {

+		sb.append("\t#");

+		int l = text.length();

+		int headLength = (startedStringLength - l) / 2;

+		for (int i = 0; i < headLength; ++i) {

+			sb.append(fill);

+		}

+		sb.append(text);

+		for (int i = 0; i < (startedStringLength - l - headLength); ++i) {

+			sb.append(fill);

+		}

+		sb.append("#\n");

+	}

+	

+	public static void logOMStarted() {

+		StringBuilder sb = new StringBuilder("\n");

+		getLine(sb, "", '#');

+		getLine(sb, "Openmeetings is up", ' ');

+		getLine(sb, getVersion() + " " + getRevision() + " " + getBuildDate(), ' ');

+		getLine(sb, "and ready to use", ' ');

+		getLine(sb, "", '#');

+		log.debug(sb.toString());

+	}

+}

diff --git a/src/util/java/org/apache/openmeetings/util/XmlExport.java b/src/util/java/org/apache/openmeetings/util/XmlExport.java
new file mode 100644
index 0000000..c627def
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/XmlExport.java
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.dom4j.io.OutputFormat;
+import org.dom4j.io.XMLWriter;
+
+/**
+ * 
+ * @author sebastianwagner
+ * 
+ */
+public class XmlExport {
+	public static final String FILE_COMMENT = ""
+			+ "\n"
+			+ "  Licensed to the Apache Software Foundation (ASF) under one\n"
+			+ "  or more contributor license agreements.  See the NOTICE file\n"
+			+ "  distributed with this work for additional information\n"
+			+ "  regarding copyright ownership.  The ASF licenses this file\n"
+			+ "  to you under the Apache License, Version 2.0 (the\n"
+			+ "  \"License\"); you may not use this file except in compliance\n"
+			+ "  with the License.  You may obtain a copy of the License at\n"
+			+ "\n"
+			+ "      http://www.apache.org/licenses/LICENSE-2.0\n"
+			+ "\n"
+			+ "  Unless required by applicable law or agreed to in writing,\n"
+			+ "  software distributed under the License is distributed on an\n"
+			+ "  \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n"
+			+ "  KIND, either express or implied.  See the License for the\n"
+			+ "  specific language governing permissions and limitations\n"
+			+ "  under the License.\n"
+			+ "\n"
+			+ "\n"
+			+ "\n"
+			+ "###############################################\n"
+			+ "This File is auto-generated by the LanguageEditor \n"
+			+ "to add new Languages or modify/customize it use the LanguageEditor \n"
+			+ "see http://openmeetings.apache.org/LanguageEditor.html for Details \n"
+			+ "###############################################\n";
+
+	public static Document createDocument() {
+		Document document = DocumentHelper.createDocument();
+		document.setXMLEncoding("UTF-8");
+		document.addComment(XmlExport.FILE_COMMENT);
+		return document;
+	}
+	
+	public static Element createRoot(Document document) {
+		document.addDocType("properties", null, "http://java.sun.com/dtd/properties.dtd");
+		Element root = document.addElement("properties");
+		return root;
+	}
+	
+	public static Element createRoot(Document document, String _root) {
+		Element root = document.addElement(_root);
+		return root;
+	}
+	
+	public static void toXml(Writer out, Document doc) throws Exception {
+		OutputFormat outformat = OutputFormat.createPrettyPrint();
+		outformat.setEncoding("UTF-8");
+		XMLWriter writer = new XMLWriter(out, outformat);
+		writer.write(doc);
+		writer.flush();
+        out.flush();
+        out.close();
+	}
+	
+	public static void toXml(File f, Document doc) throws Exception {
+		toXml(new FileOutputStream(f), doc);
+	}
+	
+	public static void toXml(OutputStream out, Document doc) throws Exception {
+		toXml(new OutputStreamWriter(out, "UTF8"), doc);
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/crypt/ICryptString.java b/src/util/java/org/apache/openmeetings/util/crypt/ICryptString.java
new file mode 100644
index 0000000..8ca8799
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/crypt/ICryptString.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.crypt;
+
+/**
+ * interface for Encryption-Class
+ * see: http://openmeetings.apache.org/CustomCryptMechanism.html
+ * 
+ * @author sebastianwagner
+ *
+ */
+
+public interface ICryptString {
+	
+	/**
+	 * create a pass phrase
+	 * 
+	 * @param userGivenPass
+	 * @return
+	 */
+	public String createPassPhrase(String userGivenPass);
+	
+	/**
+	 * verify a password
+	 * 
+	 * @param passGiven
+	 * @param passwdFromDb
+	 * @return
+	 */
+	public Boolean verifyPassword(String passGiven, String passwdFromDb);
+
+}
diff --git a/src/util/java/org/apache/openmeetings/util/crypt/MD5.java b/src/util/java/org/apache/openmeetings/util/crypt/MD5.java
new file mode 100644
index 0000000..cac6c64
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/crypt/MD5.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.crypt;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+import org.apache.commons.codec.binary.Hex;
+
+public class MD5 {
+	public static String do_checksum(String data) throws NoSuchAlgorithmException {
+		MessageDigest md5 = MessageDigest.getInstance("MD5");
+
+		md5.update(data.getBytes(), 0, data.length());
+
+		return Hex.encodeHexString(md5.digest());
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/crypt/MD5Crypt.java b/src/util/java/org/apache/openmeetings/util/crypt/MD5Crypt.java
new file mode 100644
index 0000000..354a8a2
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/crypt/MD5Crypt.java
@@ -0,0 +1,380 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.crypt;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/*
+
+ Based on the work of Jonathan Abbey
+ Adopted for Director by Thomas Aeby, 2004
+
+ MD5Crypt.java
+
+ Created: 3 November 1999
+ Release: $Name:  $
+ Version: $Revision: 1.1 $
+ Last Mod Date: $Date: 2004/02/04 08:10:35 $
+ Java Code By: Jonathan Abbey, jonabbey@arlut.utexas.edu
+ Original C Version:
+ ----------------------------------------------------------------------------
+ "THE BEER-WARE LICENSE" (Revision 42):
+ <phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
+ can do whatever you want with this stuff. If we meet some day, and you think
+ this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
+ ----------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------
+
+ Ganymede Directory Management System
+
+ Copyright (C) 1996, 1997, 1998, 1999  The University of Texas at Austin.
+
+ Contact information
+
+ Author Email: ganymede_author@arlut.utexas.edu
+ Email mailing list: ganymede@arlut.utexas.edu
+
+ US Mail:
+
+ Computer Science Division
+ Applied Research Laboratories
+ The University of Texas at Austin
+ PO Box 8029, Austin TX 78713-8029
+
+ Telephone: (512) 835-3200
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ */
+
+/*------------------------------------------------------------------------------
+ class
+ MD5Crypt
+
+ ------------------------------------------------------------------------------*/
+
+/**
+ * <p>
+ * This class defines a method,
+ * {@link MD5Crypt#crypt(java.lang.String, java.lang.String) crypt()}, which
+ * takes a password and a salt string and generates an
+ * OpenBSD/FreeBSD/Linux-compatible md5-encoded password entry.
+ * </p>
+ * 
+ * <p>
+ * Created: 3 November 1999
+ * </p>
+ * <p>
+ * Release: $Name: $
+ * </p>
+ * <p>
+ * Version: $Revision: 1.1 $
+ * </p>
+ * <p>
+ * Last Mod Date: $Date: 2004/02/04 08:10:35 $
+ * </p>
+ * <p>
+ * Java Code By: Jonathan Abbey, jonabbey@arlut.utexas.edu
+ * </p>
+ * <p>
+ * Original C Version:
+ * 
+ * <pre>
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
+ * can do whatever you want with this stuff. If we meet some day, and you think
+ * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
+ * ----------------------------------------------------------------------------
+ * </pre>
+ * 
+ * </p>
+ */
+
+public final class MD5Crypt {
+
+	/**
+	 * 
+	 * Command line test rig.
+	 * 
+	 * @throws NoSuchAlgorithmException
+	 * 
+	 */
+
+	static public void main(String argv[]) throws NoSuchAlgorithmException {
+		if ((argv.length < 1) || (argv.length > 2)) {
+			System.err.println("Usage: MD5Crypt password salt");
+			System.exit(1);
+		}
+
+		if (argv.length == 2) {
+			System.err.println(MD5Crypt.crypt(argv[0], argv[1]));
+		} else {
+			System.err.println(MD5Crypt.crypt(argv[0]));
+		}
+
+		System.exit(0);
+	}
+
+	static private final String SALTCHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
+
+	static private final String itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+
+	static private final String to64(long v, int size) {
+		StringBuffer result = new StringBuffer();
+
+		while (--size >= 0) {
+			result.append(itoa64.charAt((int) (v & 0x3f)));
+			v >>>= 6;
+		}
+
+		return result.toString();
+	}
+
+	static private final void clearbits(byte bits[]) {
+		for (int i = 0; i < bits.length; i++) {
+			bits[i] = 0;
+		}
+	}
+
+	/**
+	 * convert an encoded unsigned byte value into a int with the unsigned
+	 * value.
+	 */
+
+	@SuppressWarnings("cast")
+	static private final int bytes2u(byte inp) {
+		return ((int) inp) & 0xff;
+	}
+
+	/**
+	 * <p>
+	 * This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
+	 * md5-encoded password hash from a plaintext password and a salt.
+	 * </p>
+	 * 
+	 * <p>
+	 * The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed
+	 * mess&gt;
+	 * </p>
+	 * 
+	 * @param password
+	 *            Plaintext password
+	 * 
+	 * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
+	 * @throws NoSuchAlgorithmException
+	 */
+
+	static public final String crypt(String password)
+			throws NoSuchAlgorithmException {
+		StringBuffer salt = new StringBuffer();
+		java.util.Random randgen = new java.util.Random();
+
+		/* -- */
+
+		while (salt.length() < 8) {
+			int index = (int) (randgen.nextFloat() * SALTCHARS.length());
+			salt.append(SALTCHARS.substring(index, index + 1));
+		}
+
+		return MD5Crypt.crypt(password, salt.toString());
+	}
+
+	/**
+	 * <p>
+	 * This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
+	 * md5-encoded password hash from a plaintext password and a salt.
+	 * </p>
+	 * 
+	 * <p>
+	 * The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed
+	 * mess&gt;
+	 * </p>
+	 * 
+	 * @param password
+	 *            Plaintext password
+	 * @param salt
+	 *            A short string to use to randomize md5. May start with $1$,
+	 *            which will be ignored. It is explicitly permitted to pass a
+	 *            pre-existing MD5Crypt'ed password entry as the salt. crypt()
+	 *            will strip the salt chars out properly.
+	 * 
+	 * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
+	 * @throws NoSuchAlgorithmException
+	 */
+
+	static public final String crypt(String password, String salt)
+			throws NoSuchAlgorithmException {
+		/*
+		 * This string is magic for this algorithm. Having it this way, we can
+		 * get get better later on
+		 */
+
+		String magic = "$1$";
+		byte finalState[];
+		MessageDigest ctx, ctx1;
+		long l;
+
+		/* -- */
+
+		/* Refine the Salt first */
+
+		/* If it starts with the magic string, then skip that */
+
+		if (salt.startsWith(magic)) {
+			salt = salt.substring(magic.length());
+		}
+
+		/* It stops at the first '$', max 8 chars */
+
+		if (salt.indexOf('$') != -1) {
+			salt = salt.substring(0, salt.indexOf('$'));
+		}
+
+		if (salt.length() > 8) {
+			salt = salt.substring(0, 8);
+		}
+
+		ctx = MessageDigest.getInstance("MD5");
+
+		ctx.update(password.getBytes()); // The password first, since that is
+											// what is most unknown
+		ctx.update(magic.getBytes()); // Then our magic string
+		ctx.update(salt.getBytes()); // Then the raw salt
+
+		/* Then just as many characters of the MD5(pw,salt,pw) */
+
+		ctx1 = MessageDigest.getInstance("MD5");
+		ctx1.update(password.getBytes());
+		ctx1.update(salt.getBytes());
+		ctx1.update(password.getBytes());
+		finalState = ctx1.digest();
+
+		for (int pl = password.length(); pl > 0; pl -= 16) {
+			for (int i = 0; i < (pl > 16 ? 16 : pl); i++)
+				ctx.update(finalState[i]);
+		}
+
+		/*
+		 * the original code claimed that finalState was being cleared to keep
+		 * dangerous bits out of memory, but doing this is also required in
+		 * order to get the right output.
+		 */
+
+		clearbits(finalState);
+
+		/* Then something really weird... */
+
+		for (int i = password.length(); i != 0; i >>>= 1) {
+			if ((i & 1) != 0) {
+				ctx.update(finalState[0]);
+			} else {
+				ctx.update(password.getBytes()[0]);
+			}
+		}
+
+		finalState = ctx.digest();
+
+		/*
+		 * and now, just to make sure things don't run too fast On a 60 Mhz
+		 * Pentium this takes 34 msec, so you would need 30 seconds to build a
+		 * 1000 entry dictionary...
+		 * 
+		 * (The above timings from the C version)
+		 */
+
+		for (int i = 0; i < 1000; i++) {
+			ctx1 = MessageDigest.getInstance("MD5");
+
+			if ((i & 1) != 0) {
+				ctx1.update(password.getBytes());
+			} else {
+				for (int c = 0; c < 16; c++)
+					ctx1.update(finalState[c]);
+			}
+
+			if ((i % 3) != 0) {
+				ctx1.update(salt.getBytes());
+			}
+
+			if ((i % 7) != 0) {
+				ctx1.update(password.getBytes());
+			}
+
+			if ((i & 1) != 0) {
+				for (int c = 0; c < 16; c++)
+					ctx1.update(finalState[c]);
+			} else {
+				ctx1.update(password.getBytes());
+			}
+
+			finalState = ctx1.digest();
+		}
+
+		/* Now make the output string */
+
+		StringBuffer result = new StringBuffer();
+
+		result.append(magic);
+		result.append(salt);
+		result.append("$");
+
+		l = (bytes2u(finalState[0]) << 16) | (bytes2u(finalState[6]) << 8)
+				| bytes2u(finalState[12]);
+		result.append(to64(l, 4));
+
+		l = (bytes2u(finalState[1]) << 16) | (bytes2u(finalState[7]) << 8)
+				| bytes2u(finalState[13]);
+		result.append(to64(l, 4));
+
+		l = (bytes2u(finalState[2]) << 16) | (bytes2u(finalState[8]) << 8)
+				| bytes2u(finalState[14]);
+		result.append(to64(l, 4));
+
+		l = (bytes2u(finalState[3]) << 16) | (bytes2u(finalState[9]) << 8)
+				| bytes2u(finalState[15]);
+		result.append(to64(l, 4));
+
+		l = (bytes2u(finalState[4]) << 16) | (bytes2u(finalState[10]) << 8)
+				| bytes2u(finalState[5]);
+		result.append(to64(l, 4));
+
+		l = bytes2u(finalState[11]);
+		result.append(to64(l, 2));
+
+		/* Don't leave anything around in vm they could use. */
+		clearbits(finalState);
+
+		return result.toString();
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/crypt/MD5CryptImplementation.java b/src/util/java/org/apache/openmeetings/util/crypt/MD5CryptImplementation.java
new file mode 100644
index 0000000..dffaa52
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/crypt/MD5CryptImplementation.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.crypt;
+
+import java.security.NoSuchAlgorithmException;
+
+public class MD5CryptImplementation implements ICryptString {
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.apache.openmeetings.utils.crypt.ICryptString#createPassPhrase(java.lang.String)
+	 */
+	@Override
+	public String createPassPhrase(String userGivenPass) {
+		String passPhrase = null;
+		try {
+			passPhrase = MD5Crypt.crypt(userGivenPass);
+		} catch (NoSuchAlgorithmException e) {
+			e.printStackTrace();
+		} 
+		return passPhrase;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.apache.openmeetings.utils.crypt.ICryptString#verifyPassword(java.lang.String, java.lang.String)
+	 */
+	@Override
+	public Boolean verifyPassword(String passGiven, String passwdFromDb) {
+		boolean validPassword = false;
+		String salt = passwdFromDb.split("\\$")[2];
+	
+		try {
+			validPassword = passwdFromDb.equals(MD5Crypt.crypt(passGiven, salt));
+		} catch (NoSuchAlgorithmException e) {
+			e.printStackTrace();
+		}
+		return validPassword;
+	}
+
+}
diff --git a/src/util/java/org/apache/openmeetings/util/crypt/MD5Implementation.java b/src/util/java/org/apache/openmeetings/util/crypt/MD5Implementation.java
new file mode 100644
index 0000000..fc0146b
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/crypt/MD5Implementation.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.crypt;
+
+import java.security.NoSuchAlgorithmException;
+
+public class MD5Implementation implements ICryptString {
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.apache.openmeetings.utils.crypt.ICryptString#createPassPhrase(java.lang.String)
+	 */
+	@Override
+	public String createPassPhrase(String userGivenPass) {
+		String passPhrase = null;
+		try {
+			passPhrase = MD5.do_checksum(userGivenPass);
+		} catch (NoSuchAlgorithmException e) {
+			e.printStackTrace();
+		}
+		return passPhrase;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.apache.openmeetings.utils.crypt.ICryptString#verifyPassword(java.lang.String, java.lang.String)
+	 */
+	@Override
+	public Boolean verifyPassword(String passGiven, String passwdFromDb) {
+		return (passwdFromDb.equals(createPassPhrase(passGiven)));
+	}
+	
+}
diff --git a/src/util/java/org/apache/openmeetings/util/crypt/ManageCryptStyle.java b/src/util/java/org/apache/openmeetings/util/crypt/ManageCryptStyle.java
new file mode 100644
index 0000000..a03b623
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/crypt/ManageCryptStyle.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.crypt;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.configKeyCryptClassName;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class ManageCryptStyle {
+	private static final Logger log = Red5LoggerFactory.getLogger(ManageCryptStyle.class, webAppRootKey);
+
+	public static ICryptString getInstanceOfCrypt() {
+		try {
+			log.debug("getInstanceOfCrypt:: configKeyCryptClassName: " + configKeyCryptClassName);
+
+			return configKeyCryptClassName == null ? null : (ICryptString) Class.forName(configKeyCryptClassName).newInstance();
+		} catch (Exception err) {
+			log.error("[getInstanceOfCrypt]", err);
+		}
+		return null;
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/geom/ArrowStyle.java b/src/util/java/org/apache/openmeetings/util/geom/ArrowStyle.java
new file mode 100644
index 0000000..5fa3164
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/geom/ArrowStyle.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.geom;
+
+public class ArrowStyle {
+
+	public double headWidth=-1; //Relative width of arrow head
+
+	/**
+	 * 
+	 * Not used in drawArrowHead because the length is 
+	 * determined by the points passed in
+	 * 
+	 */
+	public double headLength=10; //Pixel Length of arrow head
+			
+	
+	public double shaftThickness=2;
+	public float shaftPosition=0;
+	
+	/**
+	 *  Not used in drawArrow, only drawArrowHead
+	 * 	This let's you curve the line at the base of the arrow
+	 */
+	public double shaftControlPosition=.5;
+	/**
+	 * Not used in drawArrow, only drawArrowHead
+	 * This let's you curve the line at the base of the arrow
+	 */
+	public double shaftControlSize=.5;
+	
+	
+	public double edgeControlPosition=.5;
+	public double edgeControlSize=.5;
+	
+	
+	public ArrowStyle(double edgeControlPosition, double edgeControlSize,
+			double headLength, double headWidth, double shaftControlPosition,
+			double shaftControlSize, float shaftPosition, double shaftThickness) {
+		super();
+		this.edgeControlPosition = edgeControlPosition;
+		this.edgeControlSize = edgeControlSize;
+		this.headLength = headLength;
+		this.headWidth = headWidth;
+		this.shaftControlPosition = shaftControlPosition;
+		this.shaftControlSize = shaftControlSize;
+		this.shaftPosition = shaftPosition;
+		this.shaftThickness = shaftThickness;
+	}
+	
+	
+}
diff --git a/src/util/java/org/apache/openmeetings/util/geom/GeomPoint.java b/src/util/java/org/apache/openmeetings/util/geom/GeomPoint.java
new file mode 100644
index 0000000..e666ab2
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/geom/GeomPoint.java
@@ -0,0 +1,211 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.geom;
+
+import java.awt.Point;
+
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * 
+ * Java Implementation of the Actionscript Class flash.geom.Point
+ * 
+ * @author swagner
+ *
+ */
+
+public class GeomPoint extends Point {
+	private static final long serialVersionUID = 5729830653403076829L;
+	@SuppressWarnings("unused")
+	private static final Logger log = Red5LoggerFactory.getLogger(GeomPoint.class, OpenmeetingsVariables.webAppRootKey);
+
+	public GeomPoint add(GeomPoint p) {
+		GeomPoint gPoint = new GeomPoint();
+		gPoint.setLocation(this.getX() + p.getX(),this.getY() + p.getY());
+		return gPoint;
+	}
+	
+	public GeomPoint subtract(GeomPoint p) {
+		GeomPoint gPoint = new GeomPoint();
+		gPoint.setLocation(this.getX() - p.getX(),this.getY() - p.getY());
+		return gPoint;
+	}
+	
+	public GeomPoint clone() {
+		GeomPoint p = new GeomPoint();
+		p.setLocation(this.getX(), this.getY());
+		return p;
+	}
+	
+	public static GeomPoint interpolate(GeomPoint p1, GeomPoint p2, float f) {
+		
+		if (f == 0) {
+			GeomPoint p = new GeomPoint();
+			p.setLocation(p2.getX(), p2.getY());
+			return p;
+		} else if (f == 1) {
+			GeomPoint p = new GeomPoint();
+			p.setLocation(p1.getX(), p1.getY());
+			return p;
+		}
+		
+		double returnValueP1 = linearInterpolation(p1.getX(),p2.getX(),f);
+		double returnValueP2 = linearInterpolation(p1.getY(),p2.getY(),f);
+		
+		GeomPoint p = new GeomPoint();
+		p.setLocation(returnValueP1, returnValueP2);
+		return p;
+	}
+	
+	public double length() {
+		return Math.sqrt( this.getX()*this.getX() + this.getY()*this.getY() );
+	}
+	
+	public String toString() {
+		return getClass().getName() + "[x=" + this.getX() + ",y=" + this.getY() + "]";
+    }
+	
+	public void normalize(double newLength) {
+		
+		//Function for Line y = mx + 0 
+		//given points 0,0 and this.getX(),this.getY();
+		//		0 = m*0 + c
+		//		m = -c;
+		//		
+		//		this.getY() = m*this.getX();
+
+		double m;
+		if (this.getX() == 0) {
+			//log.debug("Case 1");
+			if (this.getY() < 0) {
+				this.setLocation(0, newLength * -1);
+			} else {
+				this.setLocation(0, newLength);
+			}
+			return;
+			//m = this.getY();
+		} else {
+			m = this.getY() / this.getX();
+			//log.debug("Case 2");
+		}
+		
+		//log.debug("m :"+m +" newLength "+newLength);
+		
+		//Circle (x-x0)^2 + (y-y0)^2 = r^2
+		//		anyY = m * anyX;
+		//		newLength * newLength = anyY * anyY + anyX * anyX;
+		//		
+		//		newLength * newLength = (m * anyX) * (m * anyX) + anyX * anyX;
+		//		
+		//		newLength * newLength = m * m * anyX * anyX + anyX * anyX;
+		//		newLength * newLength = ( m*m + 1 ) * anyX * anyX;
+		//		
+		//		newLength * newLength / ( m*m + 1 ) = anyX * anyX;
+		
+		double anyX = Math.sqrt( ( newLength * newLength ) / ( m*m + 1 ) );
+		double anyY = m * anyX;
+		
+		//log.debug("anyX :"+anyX + " anyY: " + anyY);
+		
+		//translate to Flash point of origin
+		if (this.getX() < 0) {
+			anyX *= -1;
+			anyY *= -1;
+		}
+		
+		//log.debug("anyX :"+anyX + " anyY: " + anyY);
+		this.setLocation(anyX, anyY);
+		
+	}
+	
+	/**
+	 * Interpolate one number
+	 * @param a
+	 * @param b
+	 * @param t
+	 * @return
+	 */
+	public static double linearInterpolation(double a, double b, float t) {
+		return a + t * (b - a);
+	}
+	
+
+	public static GeomPoint getLineIntersection ( GeomPoint a1,GeomPoint a2,
+			GeomPoint b1,GeomPoint b2) {
+		
+		//log.debug("b1: "+b1);
+		//log.debug("b2: "+b2);
+		
+		double x,y,m1,m2;
+	
+		if ((a2.getX()-a1.getX()) == 0) {
+			
+			//log.debug("k1 ^ 0");
+			
+			double k2 = (b2.getY()-b1.getY()) / (b2.getX()-b1.getX());
+			//log.debug("k2: "+k2);
+			//log.debug("b1.getY(): "+b1.getY());
+			//log.debug("b2.getY(): "+b2.getY());
+			// an infinite directional constant means the line is vertical
+			// so the intersection must be at the x coordinate of the line
+			x = a1.getX();
+            m2 = b1.getY() - k2 * b1.getX();
+            //log.debug("m2: "+m2);
+            y = k2 * x + m2;
+            //log.debug("y: "+y);
+			
+		} else if((b2.getX()-b1.getX()) == 0) {
+			
+			//log.debug("k2 ^^ 0");
+			
+			double k1 = (a2.getY()-a1.getY()) / (a2.getX()-a1.getX());
+			// same as above for line 2
+			m1 = a1.getY() - k1 * a1.getX();
+			x = b1.getX();
+			y = k1 * x + m1;
+			
+		} else {
+		
+			//calculate directional constants
+			double k1 = (a2.getY()-a1.getY()) / (a2.getX()-a1.getX());
+			double k2 = (b2.getY()-b1.getY()) / (b2.getX()-b1.getX());
+			
+			// if the directional constants are equal, the lines are parallel,
+			// meaning there is no intersection point.
+			if( k1 == k2 ) return null;
+		
+			//log.debug("neither");
+//			log.debug("k1: "+k1);
+//			log.debug("k2: "+k2);
+			
+			m1 = a1.getY() - k1 * a1.getX();
+			m2 = b1.getY() - k2 * b1.getX();				
+			x = (m1-m2) / (k2-k1);
+			y = k1 * x + m1;
+		}
+		
+		
+		GeomPoint gPoint = new GeomPoint();
+		gPoint.setLocation(x, y);
+		
+		return gPoint;
+	}	
+}
diff --git a/src/util/java/org/apache/openmeetings/util/mail/ByteArrayDataSource.java b/src/util/java/org/apache/openmeetings/util/mail/ByteArrayDataSource.java
new file mode 100644
index 0000000..ed5b55a
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/mail/ByteArrayDataSource.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.mail;
+
+import java.io.*;
+import javax.activation.*;
+
+public class ByteArrayDataSource implements DataSource {
+	private byte[] data; // data
+
+	private String type; // content-type
+
+	/* Create a DataSource from an input stream */
+	public ByteArrayDataSource(InputStream is, String type) {
+		this.type = type;
+		try {
+			ByteArrayOutputStream os = new ByteArrayOutputStream();
+			int ch;
+
+			while ((ch = is.read()) != -1)
+				os.write(ch);
+			data = os.toByteArray();
+			os.close();
+		} catch (IOException ioex) {
+		}
+	}
+
+	/* Create a DataSource from a byte array */
+	public ByteArrayDataSource(byte[] data, String type) {
+		this.data = data;
+		this.type = type;
+	}
+
+	/* Create a DataSource from a String */
+	public ByteArrayDataSource(String data, String type) {
+		try {
+			// Assumption that the string contains only ASCII
+			// characters! Otherwise just pass a charset into this
+			// constructor and use it in getBytes()
+			this.data = data.getBytes("utf-8");
+		} catch (UnsupportedEncodingException uex) {
+		}
+		this.type = type;
+	}
+
+	public InputStream getInputStream() throws IOException {
+		if (data == null)
+			throw new IOException("no data");
+		return new ByteArrayInputStream(data);
+	}
+
+	public OutputStream getOutputStream() throws IOException {
+		throw new IOException("cannot do this");
+	}
+
+	public String getContentType() {
+		return type;
+	}
+
+	public String getName() {
+		return "dummy";
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/mail/IcalHandler.java b/src/util/java/org/apache/openmeetings/util/mail/IcalHandler.java
new file mode 100644
index 0000000..71eada2
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/mail/IcalHandler.java
@@ -0,0 +1,239 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.mail;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.ByteArrayOutputStream;
+import java.io.FileOutputStream;
+import java.net.URI;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Vector;
+
+import net.fortuna.ical4j.data.CalendarOutputter;
+import net.fortuna.ical4j.model.DateTime;
+import net.fortuna.ical4j.model.TimeZone;
+import net.fortuna.ical4j.model.TimeZoneRegistry;
+import net.fortuna.ical4j.model.TimeZoneRegistryFactory;
+import net.fortuna.ical4j.model.component.VEvent;
+import net.fortuna.ical4j.model.parameter.Cn;
+import net.fortuna.ical4j.model.parameter.Role;
+import net.fortuna.ical4j.model.property.Attendee;
+import net.fortuna.ical4j.model.property.CalScale;
+import net.fortuna.ical4j.model.property.Description;
+import net.fortuna.ical4j.model.property.Location;
+import net.fortuna.ical4j.model.property.Method;
+import net.fortuna.ical4j.model.property.Organizer;
+import net.fortuna.ical4j.model.property.ProdId;
+import net.fortuna.ical4j.model.property.Sequence;
+import net.fortuna.ical4j.model.property.Transp;
+import net.fortuna.ical4j.model.property.Uid;
+import net.fortuna.ical4j.model.property.Version;
+import net.fortuna.ical4j.util.UidGenerator;
+
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * 
+ * @author o.becherer, seba.wagner
+ * 
+ */
+public class IcalHandler {
+	private static final Logger log = Red5LoggerFactory.getLogger(IcalHandler.class, webAppRootKey);
+
+	/** ICal instance */
+	private final net.fortuna.ical4j.model.Calendar icsCalendar;
+
+	/** TimeZone */
+	// private TimeZone timeZone;
+	// private TimeZoneRegistry timeRegistry;
+
+	/** Creation of a new Event */
+	public final static Method ICAL_METHOD_REQUEST = Method.REQUEST;
+	public final static Method ICAL_METHOD_CANCEL = Method.CANCEL;
+	public final static Method ICAL_METHOD_REFRESH = Method.REFRESH;
+
+	/**
+	 * Constructor with DefaultTimeZone
+	 * 
+	 * @param method
+	 *            (@see IcalHandler Constants)
+	 * @throws Exception
+	 */
+	public IcalHandler(Method method) {
+		log.debug("Icalhandler method type : " + method);
+		
+		System.setProperty("net.fortuna.ical4j.timezone.update.enabled", "false");
+		
+		icsCalendar = new net.fortuna.ical4j.model.Calendar();
+
+		icsCalendar.getProperties().add(new ProdId("-//Events Calendar//iCal4j 1.0//EN"));
+		icsCalendar.getProperties().add(Version.VERSION_2_0);
+		icsCalendar.getProperties().add(CalScale.GREGORIAN);
+		
+		icsCalendar.getProperties().add(method);
+	}
+
+	/**
+	 * 
+	 * @param startDate
+	 *            use standard TimeZone!!
+	 * @param endDate
+	 *            use standard time zone!!
+	 * @param name
+	 *            meeting name
+	 * @param attendees
+	 *            List of attendees (use getAttendeeData to retrieve valid
+	 *            records)
+	 * @param description
+	 *            containing the meeting description
+	 * @param uid
+	 *            (maybe null)
+	 * @return UID of Meeting
+	 */
+	// ---------------------------------------------------------------------------------------
+	public String addNewMeeting(Date startDate,
+			Date endDate, String name,
+			Vector<HashMap<String, String>> attendees, String description,
+			HashMap<String, String> organizer, String uid, java.util.TimeZone normalTimeZone)
+			throws Exception {
+
+		TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry();
+		
+		TimeZone timeZone = registry.getTimeZone(normalTimeZone.getID());
+
+		DateTime start = new DateTime(startDate);
+		start.setTimeZone(timeZone);
+		DateTime end = new DateTime(endDate);
+		end.setTimeZone(timeZone);
+		
+		VEvent meeting = new VEvent(start, end, name);
+
+		meeting.getProperties().add(new Description(description));
+		meeting.getProperties().add(new Sequence(0));
+		meeting.getProperties().add(new Location(""));
+		meeting.getProperties().add(Transp.OPAQUE);
+
+		// generate unique identifier (if not submitted)
+		Uid ui = null;
+		if (uid == null || uid.length() < 1) {
+			ui = new UidGenerator("uidGen").generateUid();
+			log.debug("Generating Meeting UID : " + ui.getValue());
+		} else {
+			ui = new Uid(uid);
+			log.debug("Using Meeting UID : " + ui.getValue());
+		}
+
+		meeting.getProperties().add(ui);
+
+		for (int i = 0; i < attendees.size(); i++) {
+			HashMap<String, String> oneAtt = attendees.get(i);
+
+			Attendee uno = new Attendee(URI.create(oneAtt.get("uri")));
+
+			String chair = oneAtt.get("chair");
+
+			if (chair.equals("0"))
+				uno.getParameters().add(Role.REQ_PARTICIPANT);
+			else
+				uno.getParameters().add(Role.CHAIR);
+
+			uno.getParameters().add(new Cn(oneAtt.get("cn")));
+			meeting.getProperties().add(uno);
+		}
+
+		Organizer orger = new Organizer(URI.create(organizer.get("uri")));
+		orger.getParameters().add(new Cn(organizer.get("cn")));
+
+		meeting.getProperties().add(orger);
+
+		icsCalendar.getComponents().add(timeZone.getVTimeZone());
+		icsCalendar.getComponents().add(meeting);
+
+		return ui.getValue();
+
+	}
+
+	// ---------------------------------------------------------------------------------------
+
+	/**
+	 * Use this function to build a valid record for the AttendeeList for
+	 * addMeetings Generate a Attendee
+	 */
+	// ------------------------------------------------------------------------------------------
+	public HashMap<String, String> getAttendeeData(String emailAdress,
+			String displayName, Boolean chair) {
+
+		HashMap<String, String> oneRecord = new HashMap<String, String>();
+		oneRecord.put("uri", "mailto:" + emailAdress);
+		oneRecord.put("cn", displayName);
+		oneRecord.put("chair", chair ? "1" : "0");
+
+		return oneRecord;
+
+	}
+
+	// ------------------------------------------------------------------------------------------
+
+	/**
+	 * Write iCal to File
+	 */
+	// ------------------------------------------------------------------------------------------
+	public void writeDataToFile(String filerPath) throws Exception {
+
+		if (!filerPath.endsWith(".ics")) {
+			filerPath = filerPath + ".ics";
+		}
+
+		FileOutputStream fout = new FileOutputStream(filerPath);
+
+		CalendarOutputter outputter = new CalendarOutputter();
+		outputter.output(icsCalendar, fout);
+		fout.close();
+	}
+
+	// ------------------------------------------------------------------------------------------
+
+	/**
+	 * Get IcalBody as ByteArray
+	 */
+	// ------------------------------------------------------------------------------------------
+	public byte[] getIcalAsByteArray() throws Exception {
+
+		ByteArrayOutputStream bout = new ByteArrayOutputStream();
+		CalendarOutputter outputter = new CalendarOutputter();
+		outputter.output(icsCalendar, bout);
+		return bout.toByteArray();
+
+	}
+
+	// ------------------------------------------------------------------------------------------
+
+	/**
+	 * Retrieving Data as String
+	 */
+	// ------------------------------------------------------------------------------------------
+	public String getICalDataAsString() {
+		return icsCalendar.toString();
+	}
+	// ------------------------------------------------------------------------------------------
+
+}
diff --git a/src/util/java/org/apache/openmeetings/util/mail/MailUtil.java b/src/util/java/org/apache/openmeetings/util/mail/MailUtil.java
new file mode 100644
index 0000000..f54fe9d
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/mail/MailUtil.java
@@ -0,0 +1,32 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.util.mail;

+

+import java.util.regex.Pattern;

+

+public class MailUtil {

+	

+	private static final Pattern rfc2822 = Pattern.compile(

+	        "^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"

+	);

+	

+	public static boolean matches(String email) {

+		return rfc2822.matcher(email).matches();

+	}

+}

diff --git a/src/util/java/org/apache/openmeetings/util/mail/SmtpAuthenticator.java b/src/util/java/org/apache/openmeetings/util/mail/SmtpAuthenticator.java
new file mode 100644
index 0000000..7047f74
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/mail/SmtpAuthenticator.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.mail;
+
+import javax.mail.Authenticator;
+import javax.mail.PasswordAuthentication;
+
+/**
+ * 
+ * @author swagner
+ * 
+ */
+public class SmtpAuthenticator extends Authenticator {
+
+	private final String username;
+	private final String password;
+
+	public SmtpAuthenticator(String emailUsername, String emailUserpass) {
+		this.username = emailUsername;
+		this.password = emailUserpass;
+	}
+
+	@Override
+	public PasswordAuthentication getPasswordAuthentication() {
+
+		return new PasswordAuthentication(username, password);
+	}
+
+}
diff --git a/src/util/java/org/apache/openmeetings/util/process/ConverterProcessResult.java b/src/util/java/org/apache/openmeetings/util/process/ConverterProcessResult.java
new file mode 100644
index 0000000..80efe4c
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/process/ConverterProcessResult.java
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.process;
+
+/**
+ * Object created by each conversion step, each conversion step that invokes and
+ * external tool like ImageMagick is one single ConverterProcessMessage
+ * 
+ * if exitValue equals "-1" then there was an issue.
+ * 
+ * @author sebawagner
+ *
+ */
+public class ConverterProcessResult {
+	private String process;
+	private String command;
+	private String exception;
+	private String error;
+	private String exitValue;
+	private String out;
+
+	public ConverterProcessResult() {
+		this(null, null, null);
+	}
+
+	public ConverterProcessResult(String error) {
+		this(null, error, null);
+	}
+
+	public ConverterProcessResult(String process, String error, Exception ex) {
+		setProcess(process);
+		setException(ex == null ? null : ex.toString());
+		setError(error);
+		setExitValue("-1");
+	}
+
+	public String getOut() {
+		return out;
+	}
+
+	public void setOut(String out) {
+		this.out = out;
+	}
+
+	public String getCommand() {
+		return command;
+	}
+
+	public void setCommand(String command) {
+		this.command = command;
+	}
+
+	public String getProcess() {
+		return process;
+	}
+
+	public void setProcess(String process) {
+		this.process = process;
+	}
+
+	public String getException() {
+		return exception;
+	}
+
+	public void setException(String exception) {
+		this.exception = exception;
+	}
+
+	public String getError() {
+		return error;
+	}
+
+	public void setError(String error) {
+		this.error = error;
+	}
+
+	public String getExitValue() {
+		return exitValue;
+	}
+
+	public void setExitValue(String exitValue) {
+		this.exitValue = exitValue;
+	}
+
+	public String buildLogMessage() {
+		return new StringBuilder()
+			.append("process: ").append(process).append("\r\n")
+			.append("command: ").append(command).append("\r\n")
+			.append("exception: ").append(exception).append("\r\n")
+			.append("error: ").append(error).append("\r\n")
+			.append("exitValue: ").append(exitValue).append("\r\n")
+			.append("out: ").append(out).append("\r\n").toString();
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java b/src/util/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java
new file mode 100644
index 0000000..d943d5b
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/process/ConverterProcessResultList.java
@@ -0,0 +1,143 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.process;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.red5.logging.Red5LoggerFactory.getLogger;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.slf4j.Logger;
+
+/**
+ * 
+ * Collects all results of conversion jobs
+ * 
+ * @author sebawagner
+ * 
+ */
+public class ConverterProcessResultList {
+	private static final Logger log = getLogger(ConverterProcessResultList.class, webAppRootKey);
+
+	private Map<String, ConverterProcessResult> jobslist = new HashMap<String, ConverterProcessResult>();
+
+	private Long fileExplorerItemId;
+	private String completeName;
+
+	public Long getFileExplorerItemId() {
+		return fileExplorerItemId;
+	}
+
+	public void setFileExplorerItemId(Long fileExplorerItemId) {
+		this.fileExplorerItemId = fileExplorerItemId;
+	}
+
+	public String getCompleteName() {
+		return completeName;
+	}
+
+	public void setCompleteName(String completeName) {
+		this.completeName = completeName;
+	}
+
+	public ConverterProcessResult addItem(String name,
+			ConverterProcessResult processResult) {
+		if (jobslist.containsKey(name)) {
+			log.error("Duplicate key in jobslist");
+			return null;
+		}
+		return jobslist.put(name, processResult);
+	}
+
+	/**
+	 * returns true if there was an job with exitValue "-1"
+	 * 
+	 * @return
+	 */
+	public boolean hasError() {
+		for (Entry<String, ConverterProcessResult> entry : jobslist.entrySet()) {
+			if (entry.getValue().getExitValue().equals("-1")) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+	/**
+	 * converts all job results into a human readable format
+	 * 
+	 * @return
+	 */
+	public String getLogMessage() {
+		StringBuilder logMessage = new StringBuilder();
+		for (Entry<String, ConverterProcessResult> entry : jobslist.entrySet()) {
+			logMessage.append("key: ");
+			logMessage.append(entry.getKey());
+			logMessage.append("\r\n");
+			logMessage.append(entry.getValue().buildLogMessage());
+		}
+		return logMessage.toString();
+	}
+
+	/**
+	 * Axis need Objects or array of objects, Map won't work
+	 * 
+	 * @return
+	 */
+	public FileImportError[] convertToFileImportErrors() {
+		FileImportError[] fileImportErrors = new FileImportError[jobslist
+				.size()];
+
+		int i = 0;
+		// Axis need Objects or array of objects, Map won't work
+		for (Iterator<String> iter = jobslist.keySet().iterator(); iter
+				.hasNext();) {
+
+			ConverterProcessResult returnAttribute = jobslist.get(iter
+					.next());
+
+			fileImportErrors[i] = new FileImportError();
+			fileImportErrors[i]
+					.setCommand((returnAttribute.getCommand() != null) ? returnAttribute
+							.getCommand().toString() : "");
+			fileImportErrors[i]
+					.setError((returnAttribute.getError() != null) ? returnAttribute
+							.getError().toString() : "");
+			fileImportErrors[i]
+					.setExitValue((returnAttribute.getExitValue() != null) ? Integer
+							.valueOf(returnAttribute.getExitValue().toString())
+							.intValue() : 0);
+			fileImportErrors[i]
+					.setProcess((returnAttribute.getProcess() != null) ? returnAttribute
+							.getProcess().toString() : "");
+
+			i++;
+		}
+		
+		return fileImportErrors;
+	}
+
+	public int size() {
+		return jobslist.size();
+	}
+
+}
diff --git a/src/util/java/org/apache/openmeetings/util/process/FileImportError.java b/src/util/java/org/apache/openmeetings/util/process/FileImportError.java
new file mode 100644
index 0000000..116bdc8
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/process/FileImportError.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.process;
+
+public class FileImportError {
+	
+	private int exitValue = 0;
+	private String error = "";
+	private String process = "";
+	private String command = "";
+	
+	public int getExitValue() {
+		return exitValue;
+	}
+	public void setExitValue(int exitValue) {
+		this.exitValue = exitValue;
+	}
+	public String getError() {
+		return error;
+	}
+	public void setError(String error) {
+		this.error = error;
+	}
+	public String getProcess() {
+		return process;
+	}
+	public void setProcess(String process) {
+		this.process = process;
+	}
+	public String getCommand() {
+		return command;
+	}
+	public void setCommand(String command) {
+		this.command = command;
+	}
+
+}
diff --git a/src/util/java/org/apache/openmeetings/util/process/ProcessHelper.java b/src/util/java/org/apache/openmeetings/util/process/ProcessHelper.java
new file mode 100644
index 0000000..3f39d72
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/process/ProcessHelper.java
@@ -0,0 +1,194 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.util.process;

+

+import java.io.BufferedReader;

+import java.io.IOException;

+import java.io.InputStream;

+import java.io.InputStreamReader;

+import java.io.UnsupportedEncodingException;

+import java.util.HashMap;

+import java.util.Map;

+import java.util.concurrent.TimeoutException;

+

+import org.apache.openmeetings.util.OpenmeetingsVariables;

+import org.red5.logging.Red5LoggerFactory;

+import org.slf4j.Logger;

+

+public class ProcessHelper {

+	public static final Logger log = Red5LoggerFactory.getLogger(ProcessHelper.class, OpenmeetingsVariables.webAppRootKey);

+

+	private static class Worker extends Thread {

+		private final Process process;

+		private Integer exitCode;

+	

+		private Worker(Process process) {

+			this.process = process;

+		}

+	

+		@Override

+		public void run() {

+			try {

+				exitCode = process.waitFor();

+			} catch (InterruptedException ignore) {

+				return;

+			}

+		}

+	}

+

+	private static class StreamWatcher extends Thread {

+		public StringBuilder output;

+		private final InputStream is;

+		private final BufferedReader br;

+	

+		private StreamWatcher(Process process, boolean isError) throws UnsupportedEncodingException {

+			output = new StringBuilder();

+			is = isError ? process.getErrorStream() : process.getInputStream();

+			br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

+		}

+	

+		@Override

+		public void run() {

+			try {

+				String line = br.readLine();

+				while (line != null) {

+					output.append(line).append('\n');

+					line = br.readLine();

+				}

+			} catch (IOException ioexception) {

+				return;

+			}

+		}

+	}

+

+	public static ConverterProcessResult executeScriptWindows(String process, String[] argv) {

+		try {

+			String[] cmd = new String[argv.length + 2];

+			cmd[0] = "cmd.exe";

+			cmd[1] = "/C";

+			System.arraycopy(argv, 0, cmd, 2, argv.length);

+			Map<String, String> env = new HashMap<String, String>();

+			return executeScript(process, cmd, env);

+		} catch (Exception t) {

+			log.error("executeScriptWindows", t);

+			return new ConverterProcessResult(process, t.getMessage(), t);

+		}

+	}

+	

+	private static String getCommand(String[] argv) {

+		StringBuffer tString = new StringBuffer();

+		for (int i = 0; i < argv.length; i++) {

+			tString.append(argv[i]).append(" ");

+		}

+		return tString.toString();

+	}

+	

+	private static void debugCommandStart(String desc, String[] argv) {

+		if (log.isDebugEnabled()) {

+			log.debug("START " + desc + " ################# ");

+			log.debug(getCommand(argv));

+		}

+	}

+	

+	private static void debugCommandEnd(String desc) {

+		if (log.isDebugEnabled()) {

+			log.debug("END " + desc + " ################# ");

+		}

+	}

+	

+	public static ConverterProcessResult executeScript(String process, String[] argv) {

+		Map<String, String> env = new HashMap<String, String>();

+		return executeScript(process, argv, env);

+	}

+	

+	public static ConverterProcessResult executeScript(String process, String[] argv, Map<? extends String, ? extends String> env) {

+		ConverterProcessResult returnMap = new ConverterProcessResult();

+		returnMap.setProcess(process);

+		debugCommandStart(process, argv);

+	

+		try {

+			returnMap.setCommand(getCommand(argv));

+			returnMap.setOut("");

+	

+			// By using the process Builder we have access to modify the

+			// environment variables

+			// that is handy to set variables to run it inside eclipse

+			ProcessBuilder pb = new ProcessBuilder(argv);

+			pb.environment().putAll(env);

+	

+			Process proc = pb.start();

+	

+			// 20-minute timeout for command execution

+			// FFMPEG conversion of Recordings may take a real long time until

+			// its finished

+			long timeout = 60000 * 20;

+	

+			StreamWatcher errorWatcher = new StreamWatcher(proc, true);

+			Worker worker = new Worker(proc);

+			StreamWatcher inputWatcher = new StreamWatcher(proc, false);

+			errorWatcher.start();

+			inputWatcher.start();

+			worker.start();

+			

+			try {

+				worker.join(timeout);

+				if (worker.exitCode != null) {

+					returnMap.setExitValue("" + worker.exitCode);

+					log.debug("exitVal: " + worker.exitCode);

+					returnMap.setError(errorWatcher.output.toString());

+				} else {

+					returnMap.setException("timeOut");

+					returnMap.setError(errorWatcher.output.toString());

+					returnMap.setExitValue("-1");

+	

+					throw new TimeoutException();

+				}

+			} catch (InterruptedException ex) {

+				worker.interrupt();

+				errorWatcher.interrupt();

+				inputWatcher.interrupt();

+				Thread.currentThread().interrupt();

+	

+				returnMap.setError(ex.getMessage());

+				returnMap.setExitValue("-1");

+	

+				throw ex;

+			} finally {

+				proc.destroy();

+			}

+			

+		} catch (TimeoutException e) {

+			// Timeout exception is processed above

+			log.error("executeScript",e);

+			returnMap.setError(e.getMessage());

+			returnMap.setException(e.toString());

+			returnMap.setExitValue("-1");

+		} catch (Throwable t) {

+			// Any other exception is shown in debug window

+			log.error("executeScript",t);

+			returnMap.setError(t.getMessage());

+			returnMap.setException(t.toString());

+			returnMap.setExitValue("-1");

+		}

+		

+		debugCommandEnd(process);

+		return returnMap;

+	}

+

+}

diff --git a/src/util/java/org/apache/openmeetings/util/process/UploadCompleteMessage.java b/src/util/java/org/apache/openmeetings/util/process/UploadCompleteMessage.java
new file mode 100644
index 0000000..4eed547
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/process/UploadCompleteMessage.java
@@ -0,0 +1,161 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.process;
+
+/**
+ * Helper bean that is send to client(s) once the servlet has completed the
+ * upload
+ * 
+ * @author sebawagner
+ * 
+ */
+public class UploadCompleteMessage {
+	private Long userId;
+	private String message;
+	private String action;
+	private String error;
+	private boolean hasError = false;
+	private String fileName;
+
+	// Properties from the file explorerItem
+	private String fileSystemName;
+	private Boolean isPresentation = false;
+	private Boolean isImage = false;
+	private Boolean isVideo = false;
+	private String fileHash;
+
+	public UploadCompleteMessage() {
+	}
+
+	public UploadCompleteMessage(Long userId, String message, String action,
+			String error, String fileName) {
+		super();
+		this.userId = userId;
+		this.message = message;
+		this.action = action;
+		this.error = error;
+		this.fileName = fileName;
+	}
+
+	public UploadCompleteMessage(Long userId, String message, String action,
+			String error, boolean hasError, String fileName,
+			String fileSystemName, boolean isPresentation, boolean isImage,
+			boolean isVideo, String fileHash) {
+		super();
+		this.userId = userId;
+		this.message = message;
+		this.action = action;
+		this.error = error;
+		this.hasError = hasError;
+		this.fileName = fileName;
+		this.fileSystemName = fileSystemName;
+		this.isPresentation = isPresentation;
+		this.isImage = isImage;
+		this.isVideo = isVideo;
+		this.fileHash = fileHash;
+	}
+
+	public Long getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Long userId) {
+		this.userId = userId;
+	}
+
+	public String getMessage() {
+		return message;
+	}
+
+	public void setMessage(String message) {
+		this.message = message;
+	}
+
+	public String getAction() {
+		return action;
+	}
+
+	public void setAction(String action) {
+		this.action = action;
+	}
+
+	public String getError() {
+		return error;
+	}
+
+	public void setError(String error) {
+		this.error = error;
+	}
+
+	public String getFileName() {
+		return fileName;
+	}
+
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+
+	public boolean isHasError() {
+		return hasError;
+	}
+
+	public void setHasError(boolean hasError) {
+		this.hasError = hasError;
+	}
+
+	public String getFileSystemName() {
+		return fileSystemName;
+	}
+
+	public void setFileSystemName(String fileSystemName) {
+		this.fileSystemName = fileSystemName;
+	}
+
+	public Boolean getIsPresentation() {
+		return isPresentation;
+	}
+
+	public void setIsPresentation(Boolean isPresentation) {
+		this.isPresentation = isPresentation;
+	}
+
+	public Boolean getIsImage() {
+		return isImage;
+	}
+
+	public void setIsImage(Boolean isImage) {
+		this.isImage = isImage;
+	}
+
+	public Boolean getIsVideo() {
+		return isVideo;
+	}
+
+	public void setIsVideo(Boolean isVideo) {
+		this.isVideo = isVideo;
+	}
+
+	public String getFileHash() {
+		return fileHash;
+	}
+
+	public void setFileHash(String fileHash) {
+		this.fileHash = fileHash;
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/stringhandlers/ChatString.java b/src/util/java/org/apache/openmeetings/util/stringhandlers/ChatString.java
new file mode 100644
index 0000000..13a4be0
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/stringhandlers/ChatString.java
@@ -0,0 +1,238 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.stringhandlers;
+
+import java.text.CharacterIterator;
+import java.text.StringCharacterIterator;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.openmeetings.util.OpenmeetingsVariables;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class ChatString {
+	private static final Logger log = Red5LoggerFactory.getLogger(
+			ChatString.class, OpenmeetingsVariables.webAppRootKey);
+
+	private static String htmlToText(String source) {
+		String result = source;
+		result = Strings.replaceAll(result, "<", "&lt;").toString();
+		result = Strings.replaceAll(result, ">", "&gt;").toString();
+		return result;
+	}
+	
+	public static LinkedList<String[]> parseChatString(String message, LinkedList<LinkedList<String>> emotFiles, boolean allowHTML) {
+		try {
+			LinkedList<String[]> list = new LinkedList<String[]>();
+
+			// log.debug("this.link(message) "+this.link(message));
+
+			if (!allowHTML)
+				message = htmlToText(message);
+			
+			String[] messageStr = { "text", message };
+			list.add(messageStr);
+
+			for (LinkedList<String> emot : emotFiles) {
+				// log.error("CHECK EMOT: "+ emot.get(0) + emot.get(1) +
+				// emot.size());
+				list = splitStr(list, emot.get(0), emot.get(1),
+						emot.get(emot.size() - 2));
+
+				if (emot.size() > 4) {
+					// log.error("CHECK EMOT ASIAN: "+ emot.get(0) + emot.get(2)
+					// + emot.size());
+					list = splitStr(list, emot.get(0), emot.get(2),
+							emot.get(emot.size() - 2));
+				}
+			}
+
+			// log.debug("#########  ");
+			// for (Iterator<String[]> iter = list.iterator();iter.hasNext();){
+			// String[] stringArray = iter.next();
+			// //stringArray[1] = this.link(stringArray[1]);
+			// log.debug(stringArray[0]+"||"+stringArray[1]);
+			// }
+
+			return list;
+
+		} catch (Exception err) {
+			log.error("[parseChatString]", err);
+		}
+		return null;
+	}
+
+	private static LinkedList<String[]> splitStr(LinkedList<String[]> list,
+			String image, String regexp, String spaces) {
+
+		LinkedList<String[]> newList = new LinkedList<String[]>();
+
+		for (Iterator<String[]> iter = list.iterator(); iter.hasNext();) {
+
+			String[] messageObj = iter.next();
+			String messageTye = messageObj[0];
+
+			if (messageTye.equals("text")) {
+				String messageStr = messageObj[1];
+
+				String[] newStr = messageStr.split(regexp);
+
+				for (int k = 0; k < newStr.length; k++) {
+					String[] textA = { "text", newStr[k] };
+					newList.add(textA);
+					if (k + 1 != newStr.length) {
+						String[] imageA = { "image", image, spaces,
+								regexp.replace("\\", "") };
+						newList.add(imageA);
+					}
+				}
+			} else {
+
+				newList.add(messageObj);
+			}
+
+		}
+
+		return newList;
+	}
+
+	public static LinkedList<LinkedList<String>> replaceAllRegExp(LinkedList<LinkedList<String>> emotFiles) {
+		LinkedList<LinkedList<String>> emotfilesListNew = new LinkedList<LinkedList<String>>();
+		try {
+			for (LinkedList<String> emot : emotFiles) {
+				// log.error("FILE: "+emot.get(0));
+				String westernMeaning = checkforRegex(emot.get(1));
+				emot.set(1, westernMeaning);
+				// log.error("westernMeaning "+westernMeaning);
+				if (emot.size() > 2) {
+					String asianMeaning = checkforRegex(emot.get(2));
+					emot.set(2, asianMeaning);
+					// log.error("westernMeaning "+asianMeaning);
+				}
+				emotfilesListNew.add(emot);
+			}
+		} catch (Exception err) {
+			log.error("[replaceAllRegExp]", err);
+		}
+		return emotfilesListNew;
+	}
+
+	/**
+	 * Replace characters having special meaning in regular expressions
+	 * 
+	 */
+	private static String checkforRegex(String aRegexFragment) {
+		final StringBuilder result = new StringBuilder();
+
+		final StringCharacterIterator iterator = new StringCharacterIterator(
+				aRegexFragment);
+		char character = iterator.current();
+		while (character != CharacterIterator.DONE) {
+			/*
+			 * All literals need to have backslashes doubled.
+			 */
+			if (character == '.') {
+				result.append("\\.");
+			} else if (character == '\\') {
+				result.append("\\\\");
+			} else if (character == '?') {
+				result.append("\\?");
+			} else if (character == '*') {
+				result.append("\\*");
+			} else if (character == '+') {
+				result.append("\\+");
+			} else if (character == '&') {
+				result.append("\\&");
+			} else if (character == ':') {
+				result.append("\\:");
+			} else if (character == '{') {
+				result.append("\\{");
+			} else if (character == '}') {
+				result.append("\\}");
+			} else if (character == '[') {
+				result.append("\\[");
+			} else if (character == ']') {
+				result.append("\\]");
+			} else if (character == '(') {
+				result.append("\\(");
+			} else if (character == ')') {
+				result.append("\\)");
+			} else if (character == '^') {
+				result.append("\\^");
+			} else if (character == '$') {
+				result.append("\\$");
+			} else if (character == '|') {
+				result.append("\\|");
+			} else {
+				// the char is not a special one
+				// add it to the result as is
+				result.append(character);
+			}
+			character = iterator.next();
+		}
+		return result.toString();
+	}
+
+	public static String link(String input) {
+		try {
+
+			String tReturn = "";
+
+			String parts[] = input.split(" ");
+
+			for (int t = 0; t < parts.length; t++) {
+
+				String text = parts[t];
+
+				// System.out.println("Part 1 "+text);
+
+				Matcher matcher = Pattern
+						.compile(
+								"(^|[ \t\r\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-]))")
+						.matcher(text);
+
+				if (matcher.find()) {
+					text = matcher
+							.replaceFirst("<u><FONT color=\"#0000CC\"><a href='"
+									+ text + "'>" + text + "</a></FONT></u>");
+
+				}
+
+				// System.out.println("Part 2 "+text);
+
+				if (t != 0) {
+					tReturn += " ";
+				}
+
+				tReturn += text;
+
+			}
+
+			return tReturn;
+
+		} catch (Exception e) {
+			log.error("[link]", e);
+		}
+		return "";
+	}
+}
diff --git a/src/util/java/org/apache/openmeetings/util/stringhandlers/StringComparer.java b/src/util/java/org/apache/openmeetings/util/stringhandlers/StringComparer.java
new file mode 100644
index 0000000..8d8817f
--- /dev/null
+++ b/src/util/java/org/apache/openmeetings/util/stringhandlers/StringComparer.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.util.stringhandlers;
+
+public class StringComparer {
+	
+	private static StringComparer instance = null;
+	
+	private StringComparer() {}
+	
+	public static synchronized StringComparer getInstance(){
+		if (instance == null){
+			instance = new StringComparer();
+		}
+		return instance;
+	}
+	
+	public String compareForRealPaths(String inputString) throws Exception{
+
+		String t = "";
+		for (int i=0;i<inputString.length();i++){
+			char c = inputString.charAt(i);
+			if (compareChars(c)) {
+				t += c;
+			} else {
+				t += "_";
+			}
+			
+		}		
+		return t;
+	}
+	
+	private boolean compareChars(char inputChar){		
+		return Character.isLetterOrDigit(inputChar);
+	}
+
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/AdminBaseForm.java b/src/web/java/org/apache/openmeetings/web/admin/AdminBaseForm.java
new file mode 100644
index 0000000..2377990
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/AdminBaseForm.java
@@ -0,0 +1,167 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.admin;

+

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.markup.html.form.Form;

+import org.apache.wicket.model.IModel;

+

+/**

+ * provides basic functionality to insert, update, remove, refresh record in

+ * admin section

+ * 

+ * @author swagner

+ * 

+ * @param <T>

+ */

+public abstract class AdminBaseForm<T> extends Form<T> {

+	private static final long serialVersionUID = 1L;

+	private AdminSavePanel<T> savePanel;

+

+	public AdminBaseForm(String id, IModel<T> object) {

+		super(id, object);

+		

+		savePanel = new AdminSavePanel<T>("buttons", this) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {

+				AdminBaseForm.this.onSaveSubmit(target, form);

+			}

+

+			@Override

+			protected void onSaveError(AjaxRequestTarget target, Form<?> form) {

+				AdminBaseForm.this.onSaveError(target, form);

+			}

+

+			@Override

+			protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {

+				AdminBaseForm.this.onNewSubmit(target, form);

+			}

+

+			@Override

+			protected void onNewError(AjaxRequestTarget target, Form<?> form) {

+				AdminBaseForm.this.onNewError(target, form);

+			}

+

+			@Override

+			protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {

+				AdminBaseForm.this.onRefreshSubmit(target, form);

+			}

+

+			@Override

+			protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {

+				AdminBaseForm.this.onRefreshError(target, form);

+			}

+

+			@Override

+			protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {

+				AdminBaseForm.this.onDeleteSubmit(target, form);

+			}

+

+			@Override

+			protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {

+				AdminBaseForm.this.onDeleteError(target, form);

+			}

+			

+		};

+		add(savePanel);

+

+

+	}

+

+	/**

+	 * @see AdminBaseForm#hideNewRecord()

+	 */

+	public void hideNewRecord() {

+		savePanel.hideNewRecord();

+	}

+	

+	/**

+	 * @see AdminBaseForm#showNewRecord()

+	 */

+	public void showNewRecord() {

+		savePanel.showNewRecord();

+	}

+

+	/**

+	 * invoked when user press save button

+	 * 

+	 * @param target

+	 * @param form

+	 */

+	protected abstract void onSaveSubmit(AjaxRequestTarget target, Form<?> form);

+	

+	/**

+	 * invoked when save has error

+	 * 

+	 * @param target

+	 * @param form

+	 */

+	protected abstract void onSaveError(AjaxRequestTarget target, Form<?> form);

+	

+	/**

+	 * invoked when new button is pressed

+	 * 

+	 * @param target

+	 * @param form

+	 */

+	protected abstract void onNewSubmit(AjaxRequestTarget target, Form<?> form);

+	

+	/**

+	 * invoked if new has error

+	 * 

+	 * @param target

+	 * @param form

+	 */

+	protected abstract void onNewError(AjaxRequestTarget target, Form<?> form);

+	

+	/**

+	 * invoked when refresh button is pressed

+	 * 

+	 * @param target

+	 * @param form

+	 */

+	protected abstract void onRefreshSubmit(AjaxRequestTarget target, Form<?> form);

+	

+	/**

+	 * invoked when refresh has error

+	 * 

+	 * @param target

+	 * @param form

+	 */

+	protected abstract void onRefreshError(AjaxRequestTarget target, Form<?> form);

+	

+	/**

+	 * invoked when delete button is pressed

+	 * 

+	 * @param target

+	 * @param form

+	 */

+	protected abstract void onDeleteSubmit(AjaxRequestTarget target, Form<?> form);

+	

+	/**

+	 * invoked when delete has error

+	 * 

+	 * @param target

+	 * @param form

+	 */

+	protected abstract void onDeleteError(AjaxRequestTarget target, Form<?> form);

+	

+}

diff --git a/src/web/java/org/apache/openmeetings/web/admin/AdminPanel.java b/src/web/java/org/apache/openmeetings/web/admin/AdminPanel.java
new file mode 100644
index 0000000..145491d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/AdminPanel.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin;
+
+import org.apache.openmeetings.web.common.BasePanel;
+import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+
+@AuthorizeInstantiation("Admin")
+public abstract class AdminPanel extends BasePanel {
+	private static final long serialVersionUID = 1L;
+
+	public AdminPanel(String id) {
+		super(id);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.html b/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.html
new file mode 100644
index 0000000..8538edf
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.html
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:extend>
+		<div class="formNewButton">
+			<input type="submit" value="" wicket:id="ajax-new-button" wicket:message="title:155" />
+		</div>
+		<div class="formCancelButton">
+			<div wicket:id="ajax-cancel-button" wicket:message="title:157"></div>
+		</div>
+		<span wicket:id="newRecord"></span>
+	</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.java b/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.java
new file mode 100644
index 0000000..71c41ea
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
+import org.apache.openmeetings.web.common.FormSaveRefreshPanel;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.Model;
+
+public abstract class AdminSavePanel<T> extends FormSaveRefreshPanel<T> {
+	private static final long serialVersionUID = 1L;
+	private Label newRecord;
+	private final Form<T> form;
+	
+	public AdminSavePanel(String id, final Form<T> form) {
+		super(id, form);
+		this.form = form;
+		
+		newRecord = new Label("newRecord", Model.of(Application.getString(344L)));
+		add(newRecord.setVisible(false).setOutputMarkupId(true));
+		
+		// add a new button that can be used to submit the form via ajax
+		add(new AjaxButton("ajax-new-button", form) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so that it is hidden
+				target.add(feedback);
+				newRecord.setVisible(true);
+				target.add(newRecord);
+				onNewSubmit(target, form);
+			}
+
+			@Override
+			protected void onError(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so errors are shown
+				target.add(feedback);
+				onNewError(target, form);
+			}
+		});
+	}
+	
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
+		// add a cancel button that can be used to submit the form via ajax
+		add(new ConfirmableAjaxBorder("ajax-cancel-button", getString("80"), getString("833"), form) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onError(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so errors are shown
+				target.add(feedback);
+				hideNewRecord();
+				onDeleteError(target, form);
+			}
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so that it is hidden
+				target.add(feedback);
+				hideNewRecord();
+				onDeleteSubmit(target, form);
+			}
+		});
+	}
+	
+	/**
+	 * Hide the new record text
+	 */
+	public void hideNewRecord() {
+		newRecord.setVisible(false);
+	}
+	
+	/**
+	 * Hide the new record text
+	 */
+	public void showNewRecord() {
+		newRecord.setVisible(true);
+	}
+
+	protected abstract void onNewSubmit(AjaxRequestTarget target, Form<?> form);
+	protected abstract void onNewError(AjaxRequestTarget target, Form<?> form);
+
+	protected abstract void onDeleteSubmit(AjaxRequestTarget target, Form<?> form);
+	protected abstract void onDeleteError(AjaxRequestTarget target, Form<?> form);
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/AdminUserChoiceProvider.java b/src/web/java/org/apache/openmeetings/web/admin/AdminUserChoiceProvider.java
new file mode 100644
index 0000000..01c695a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/AdminUserChoiceProvider.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.wicketstuff.select2.Response;
+import org.wicketstuff.select2.TextChoiceProvider;
+
+public abstract class AdminUserChoiceProvider extends TextChoiceProvider<User> {
+	private static final long serialVersionUID = 1L;
+	protected static int PAGE_SIZE = 20;
+
+	@Override
+	protected Object getId(User choice) {
+		return choice.getUser_id();
+	}
+
+	@Override
+	public void query(String term, int page, Response<User> response) {
+		response.addAll(getBean(UserDao.class).get(term, true, page * PAGE_SIZE, PAGE_SIZE));
+		response.setHasMore(PAGE_SIZE == response.getResults().size());
+	}
+
+	@Override
+	public Collection<User> toChoices(Collection<String> _ids) {
+		List<Long> ids = new ArrayList<Long>();
+		for (String id : _ids) {
+			ids.add(Long.valueOf(id));
+		}
+		return new ArrayList<User>(getBean(UserDao.class).get(ids));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/SearchableDataView.java b/src/web/java/org/apache/openmeetings/web/admin/SearchableDataView.java
new file mode 100644
index 0000000..8bc5450
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/SearchableDataView.java
@@ -0,0 +1,45 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.admin;

+

+import org.apache.openmeetings.db.entity.IDataProviderEntity;

+import org.apache.openmeetings.web.data.SearchableDataProvider;

+import org.apache.wicket.markup.repeater.data.DataView;

+

+/**

+ * Provides {@link SearchableDataProvider}

+ * 

+ * @author swagner

+ * 

+ * @param <T>

+ */

+public abstract class SearchableDataView<T extends IDataProviderEntity> extends DataView<T> {

+	private static final long serialVersionUID = 1L;

+	private SearchableDataProvider<T> dp;

+	

+	public SearchableDataView(String id, SearchableDataProvider<T> dp) {

+		super(id, dp);

+		this.dp = dp;

+	}

+	

+	@Override

+	public SearchableDataProvider<T> getDataProvider() {

+		return dp;

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html b/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html
new file mode 100644
index 0000000..cc32fd3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div wicket:id="feedback"></div>
+		<form wicket:id="backupUpload" class="adminForm adminBackupForm">
+			<fieldset class="ui-widget-content">
+				<legend class="ui-widget-header"><wicket:message key="1066" /></legend>
+				<div class="formelement">
+				    <div class="info-text"><wicket:message key="1065" /></div>
+	            </div>
+	            <div class="formelement">
+                   <label><wicket:message key="1537" /></label> <input type="checkbox" wicket:id="includeFilesInBackup" />
+	            </div>
+	            <div class="formelement">
+	               <span wicket:id="progress"></span>
+	               <div wicket:id="dprogress"></div>
+	            </div>
+	            <div class="formelement">
+		            <!-- Perform Download -->
+					<div wicket:id="download" class="btn"><wicket:message key="1066"/></div>
+					<!-- Perform Upload -->
+					<div class="fileupload fileupload-new" data-provides="fileupload" style="margin: 0; display: inline-block;">
+						<span class="btn btn-file ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"><span 
+							class="ui-button-text"><wicket:message key="1536"/></span><input class="uploadFileField" wicket:id="fileInput" type="file"/></span>
+					</div>
+	            </div>
+	            <div class="formelement">
+		            <!-- Max upload size -->
+		            <wicket:message key="1491" /> <span wicket:id="MaxUploadSize" /><span>MB</span>
+	            </div>
+	            <div class="formelement">
+		            <!-- Backup CLI import information -->
+	               <div class="info-text" wicket:id="cmdLineDesc"></div>
+	            </div>
+	        </fieldset>
+		</form>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java b/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
new file mode 100644
index 0000000..a30b711
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/backup/BackupPanel.java
@@ -0,0 +1,247 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.admin.backup;

+

+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;

+import static org.apache.openmeetings.web.app.Application.getBean;

+

+import java.io.File;

+import java.text.DecimalFormat;

+import java.util.Date;

+

+import org.apache.openmeetings.backup.BackupExport;

+import org.apache.openmeetings.backup.BackupImport;

+import org.apache.openmeetings.backup.ProgressHolder;

+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;

+import org.apache.openmeetings.util.CalendarPatterns;

+import org.apache.openmeetings.util.OmFileHelper;

+import org.apache.openmeetings.web.admin.AdminPanel;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.openmeetings.web.util.AjaxDownload;

+import org.apache.openmeetings.web.util.BootstrapFileUploadBehavior;

+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;

+import org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadProgressBar;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.html.form.CheckBox;

+import org.apache.wicket.markup.html.form.Form;

+import org.apache.wicket.markup.html.form.upload.FileUpload;

+import org.apache.wicket.markup.html.form.upload.FileUploadField;

+import org.apache.wicket.model.Model;

+import org.apache.wicket.util.lang.Bytes;

+import org.apache.wicket.util.resource.FileResourceStream;

+import org.apache.wicket.util.time.Duration;

+import org.red5.logging.Red5LoggerFactory;

+import org.slf4j.Logger;

+

+import com.googlecode.wicket.jquery.core.Options;

+import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;

+import com.googlecode.wicket.jquery.ui.widget.progressbar.ProgressBar;

+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;

+/**

+ * Panel component to manage Backup Import/Export

+ * 

+ * @author swagner

+ * 

+ */

+public class BackupPanel extends AdminPanel {

+	private static final Logger log = Red5LoggerFactory.getLogger(BackupPanel.class, webAppRootKey);

+

+	private static final long serialVersionUID = -1L;

+

+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));

+

+	/**

+	 * Form to handle upload files

+	 * 

+	 * @author swagner

+	 * 

+	 */

+	private class BackupForm extends Form<Void> {

+		private static final long serialVersionUID = 1L;

+		private final FileUploadField fileUploadField;

+		private final Model<Boolean> includeFilesInBackup = Model.of(true);

+		private final AbstractAjaxTimerBehavior timer;

+		private final ProgressBar progressBar;

+		private File backupFile;

+		private Throwable th = null;

+		private boolean started = false;

+		private ProgressHolder progressHolder;

+

+		public BackupForm(String id) {

+			super(id);

+

+			// set this form to multipart mode (allways needed for uploads!)

+			setMultiPart(true);

+

+			// set max upload size in form as info text

+			Long maxBytes = getBean(ConfigurationDao.class).getMaxUploadSize();

+			double megaBytes = maxBytes.doubleValue() / 1024 / 1024;

+			DecimalFormat formatter = new DecimalFormat("#,###.00");

+			add(new Label("MaxUploadSize", formatter.format(megaBytes)));

+

+			// Add one file input field

+			fileUploadField = new FileUploadField("fileInput");

+

+			add(new CheckBox("includeFilesInBackup", includeFilesInBackup));

+

+			// Set maximum size controlled by configuration

+			setMaxSize(Bytes.bytes(maxBytes));

+

+			// Add a component to download a file without page refresh

+			final AjaxDownload download = new AjaxDownload();

+			add(download);

+			// add an download button

+			add(new AjaxButton("download", this) {

+				private static final long serialVersionUID = 1L;

+

+				@Override

+				protected void onSubmit(AjaxRequestTarget target, Form<?> form) {

+					File workingDir = OmFileHelper.getUploadBackupDir();

+					String dateString = "backup_" + CalendarPatterns.getTimeForStreamId(new Date());

+					File backupDir = new File(workingDir, dateString);

+					backupFile = new File(backupDir, dateString + ".zip");

+					th = null;

+					started = true;

+					progressHolder = new ProgressHolder();

+

+					timer.restart(target);

+					new Thread(new BackupProcess(getBean(BackupExport.class), backupDir, includeFilesInBackup.getObject(), progressHolder)

+						, "Openmeetings - " + dateString).start();

+

+					// repaint the feedback panel so that it is hidden

+					target.add(feedback, progressBar.setVisible(true));

+				}

+

+				@Override

+				protected void onError(AjaxRequestTarget target, Form<?> form) {

+					// repaint the feedback panel so errors are shown

+					target.add(feedback);

+				}

+			});

+			add(timer = new AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {

+				private static final long serialVersionUID = 1L;

+

+				@Override

+				protected void onTimer(AjaxRequestTarget target) {

+					if (!started) {

+						timer.stop(target);

+						return;

+					}

+					if (th != null) {

+						timer.stop(target);

+						//TODO change text, localize

+						progressBar.setVisible(false);

+						feedback.error(th.getMessage());

+						target.add(feedback);

+					} else {

+						progressBar.setModelObject(progressHolder.getProgress());

+						progressBar.refresh(target);

+						//TODO add current step result as info

+					}

+				}

+			});

+			add((progressBar = new ProgressBar("dprogress", new Model<Integer>(0)) {

+				private static final long serialVersionUID = 1L;

+

+				@Override

+				protected void onComplete(AjaxRequestTarget target) {

+					timer.stop(target);

+					target.add(progressBar.setVisible(false));

+					

+					download.setFileName(backupFile.getName());

+					download.setResourceStream(new FileResourceStream(backupFile));

+					download.initiate(target);

+				}

+			}).setVisible(false).setOutputMarkupPlaceholderTag(true));

+			add(fileUploadField.add(new AjaxFormSubmitBehavior(this, "change") {

+				private static final long serialVersionUID = 1L;

+

+				@Override

+				protected void onSubmit(AjaxRequestTarget target) {

+					FileUpload upload = fileUploadField.getFileUpload();

+					try {

+						if (upload == null || upload.getInputStream() == null) {

+							feedback.error("File is empty");

+							target.add(feedback);

+							return;

+						}

+						getBean(BackupImport.class).performImport(upload.getInputStream());

+					} catch (Exception e) {

+						log.error("Exception on panel backup upload ", e);

+						feedback.error(e);

+					}

+					// repaint the feedback panel so that it is hidden

+					target.add(feedback);

+				}

+

+				@Override

+				protected void onError(AjaxRequestTarget target) {

+					// repaint the feedback panel so errors are shown

+					target.add(feedback);

+				}

+			}));

+			add(new Label("cmdLineDesc", Application.getString(1505)).setEscapeModelStrings(false));

+		}

+

+		@Override

+		protected void onDetach() {

+			includeFilesInBackup.detach();

+			super.onDetach();

+		}

+		

+		private class BackupProcess implements Runnable {

+			private BackupExport backup;

+			private File backupDir;

+			private boolean includeFiles;

+			private ProgressHolder progressHolder;

+			

+			public BackupProcess(BackupExport backup, File backupDir, boolean includeFiles, ProgressHolder progressHolder) {

+				this.backup = backup;

+				this.backupDir = backupDir;

+				this.includeFiles = includeFiles;

+				this.progressHolder = progressHolder;

+				th = null;

+			}

+			

+			public void run() {

+				try {

+					backup.performExport(backupFile, backupDir, includeFiles, progressHolder);

+				} catch (Exception e) {

+					log.error("Exception on panel backup download ", e);

+					th = e;

+				}

+			}

+		}

+	}

+

+	public BackupPanel(String id) {

+		super(id);

+

+		add(feedback);

+

+		BackupForm backupForm = new BackupForm("backupUpload");

+

+		backupForm.add(new UploadProgressBar("progress", backupForm, backupForm.fileUploadField));

+

+		add(backupForm);

+		add(BootstrapFileUploadBehavior.INSTANCE);

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigForm.java b/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigForm.java
new file mode 100644
index 0000000..d69e346
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigForm.java
@@ -0,0 +1,141 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.admin.configurations;

+

+import static org.apache.openmeetings.util.OpenmeetingsVariables.WEB_DATE_PATTERN;

+import static org.apache.openmeetings.web.app.Application.getBean;

+import static org.apache.wicket.datetime.markup.html.basic.DateLabel.forDatePattern;

+

+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;

+import org.apache.openmeetings.db.entity.basic.Configuration;

+import org.apache.openmeetings.web.admin.AdminBaseForm;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.openmeetings.web.app.WebSession;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.html.form.Form;

+import org.apache.wicket.markup.html.form.RequiredTextField;

+import org.apache.wicket.markup.html.form.TextArea;

+import org.apache.wicket.markup.html.form.TextField;

+import org.apache.wicket.model.CompoundPropertyModel;

+import org.apache.wicket.model.Model;

+import org.apache.wicket.util.time.Duration;

+import org.apache.wicket.validation.IValidatable;

+import org.apache.wicket.validation.IValidator;

+

+/**

+ * Handle {@link Configuration} items as list and form

+ * 

+ * @author swagner

+ * 

+ */

+public class ConfigForm extends AdminBaseForm<Configuration> {

+	private static final long serialVersionUID = 1L;

+	private final WebMarkupContainer listContainer;

+

+	private void refresh(AjaxRequestTarget target) {

+		target.add(this);

+		target.appendJavaScript("omConfigPanelInit();");

+	}

+	

+	public ConfigForm(String id, WebMarkupContainer listContainer, Configuration configuration) {

+		super(id, new CompoundPropertyModel<Configuration>(configuration));

+		setOutputMarkupId(true);

+		this.listContainer = listContainer;

+		add(new RequiredTextField<String>("conf_key").setLabel(Model.of(Application.getString(267))).add(new IValidator<String>(){

+			private static final long serialVersionUID = 1L;

+

+			public void validate(IValidatable<String> validatable) {

+				Configuration c = getBean(ConfigurationDao.class).forceGet(validatable.getValue());

+				if (c != null && !c.isDeleted() && !c.getConfiguration_id().equals(ConfigForm.this.getModelObject().getConfiguration_id())) {

+					error(Application.getString(1544L));

+				}

+			}

+		}));

+		add(new TextField<String>("conf_value").setLabel(Model.of(Application.getString(271))));

+		add(forDatePattern("updatetime", WEB_DATE_PATTERN));

+		add(new Label("user.login"));

+		add(new TextArea<String>("comment"));

+		

+		// attach an ajax validation behavior to all form component's keydown

+		// event and throttle it down to once per second

+		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));

+	}

+	

+	@Override

+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {

+		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);

+		Configuration c = cfgDao.forceGet(getModelObject().getConf_key());

+		if (c != null && c.isDeleted() && !c.getConfiguration_id().equals(getModelObject().getConfiguration_id())) {

+			getModelObject().setConfiguration_id(c.getConfiguration_id());

+		}

+		setModelObject(getBean(ConfigurationDao.class).update(getModelObject(), WebSession.getUserId()));

+		hideNewRecord();

+		target.add(listContainer);

+		refresh(target);

+	}

+

+	@Override

+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {

+		this.setModelObject(new Configuration());

+		refresh(target);

+	}

+	

+	@Override

+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {

+		Configuration conf = getModelObject();

+		if (conf.getConfiguration_id() != null) {

+			conf = getBean(ConfigurationDao.class).get(conf.getConfiguration_id());

+		} else {

+			conf = new Configuration();

+		}

+		setModelObject(conf);

+		refresh(target);

+	}

+	

+	@Override

+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {

+		getBean(ConfigurationDao.class).delete(getModelObject(), WebSession.getUserId());

+		setModelObject(new Configuration());

+		target.add(listContainer);

+		refresh(target);

+	}

+

+	@Override

+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.html b/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.html
new file mode 100644
index 0000000..dc1674b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.html
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+       <script type="text/javascript">
+           function omConfigPanelInit() {
+               var documentHeight = $(document).height();
+               $('#adminForm').height(documentHeight-114);
+               $('#adminTable').height(documentHeight-144);
+           }
+       </script>
+    </wicket:head>
+	<wicket:panel>	
+		<div class="adminPanel">
+			<div class="adminPanelColumnTable">
+				<span wicket:id="navigator">[dataview navigator]</span>
+				<table class="adminListTable">
+					<thead>
+						<tr>
+							<th class="three_column_layout_column1 ui-widget-header"><span wicket:id="orderById"></span><wicket:message key="264" /></th>
+							<th class="three_column_layout_column2 ui-widget-header"><span wicket:id="orderByKey"></span><wicket:message key="265" /></th>
+							<th class="three_column_layout_column3 ui-widget-header"><span wicket:id="orderByValue"></span><wicket:message key="598" /></th>
+						</tr>	
+					</thead>
+				</table>
+				<div class="tableWrapper" id="adminTable">
+					<table class="adminListTable">
+						<tbody wicket:id="listContainer" >	
+				    		<tr wicket:id="configList">
+								<td class="three_column_layout_column1"><div class="three_column_layout_divcolumn1"><span wicket:id="configuration_id"></span></div></td>
+								<td class="three_column_layout_column2"><div class="three_column_layout_divcolumn2"><span wicket:id="conf_key"></span></div></td>
+								<td class="three_column_layout_column3"><div class="three_column_layout_divcolumn3"><span wicket:id="conf_value"></span></div></td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="adminPanelColumnForm">
+				<form wicket:id="form" class="adminForm">
+					<div wicket:id="buttons"></div>
+					<div class="scrollcontent" id="adminForm">
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="266" /></legend>
+							<div class="formelement">
+							    <label><wicket:message key="267" /></label><input type="text" wicket:id="conf_key"/>
+				            </div>
+				            <div class="formelement">
+                                   <label><wicket:message key="271" /></label><input type="text" wicket:id="conf_value"/>
+				            </div>
+                               <div class="formelement">
+                                   <label><wicket:message key="268" /></label><span wicket:id="updatetime"/>
+				            </div>
+                               <div class="formelement">
+                                   <label><wicket:message key="269" /></label><span wicket:id="user.login"/>
+				            </div>
+                               <div class="formelement">
+                                   <label><wicket:message key="270" /></label><textarea wicket:id="comment"/>
+				            </div>
+						</fieldset>
+					</div>
+				</form>
+			</div>
+		</div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.java b/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.java
new file mode 100644
index 0000000..ad96c32
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/configurations/ConfigsPanel.java
@@ -0,0 +1,102 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.admin.configurations;

+

+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;

+import org.apache.openmeetings.db.entity.basic.Configuration;

+import org.apache.openmeetings.web.admin.AdminPanel;

+import org.apache.openmeetings.web.admin.SearchableDataView;

+import org.apache.openmeetings.web.common.PagedEntityListPanel;

+import org.apache.openmeetings.web.data.DataViewContainer;

+import org.apache.openmeetings.web.data.OmOrderByBorder;

+import org.apache.openmeetings.web.data.SearchableDataProvider;

+import org.apache.wicket.AttributeModifier;

+import org.apache.wicket.ajax.AjaxEventBehavior;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.repeater.Item;

+

+/**

+ * add/update/delete {@link Configuration}

+ * 

+ * @author swagner

+ * 

+ */

+public class ConfigsPanel extends AdminPanel {

+	private static final long serialVersionUID = 1L;

+	private ConfigForm form;

+	private final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");

+	

+	@Override

+	public void onMenuPanelLoad(IPartialPageRequestHandler target) {

+		super.onMenuPanelLoad(target);

+		target.appendJavaScript("omConfigPanelInit();");

+	}

+

+	public ConfigsPanel(String id) {

+		super(id);

+		

+		SearchableDataView<Configuration> dataView = new SearchableDataView<Configuration>("configList"

+			, new SearchableDataProvider<Configuration>(ConfigurationDao.class)) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void populateItem(final Item<Configuration> item) {

+				final Configuration c = item.getModelObject();

+				item.add(new Label("configuration_id", c.getConfiguration_id()));

+				item.add(new Label("conf_key", c.getConf_key()));

+				item.add(new Label("conf_value", c.getConf_value()));

+				item.add(new AjaxEventBehavior("click") {

+					private static final long serialVersionUID = 1L;

+

+					protected void onEvent(AjaxRequestTarget target) {

+						form.hideNewRecord();

+						form.setModelObject(c);

+						target.add(form, listContainer);

+						target.appendJavaScript("omConfigPanelInit();");

+					}

+				});

+				item.add(AttributeModifier.replace("class", "clickable ui-widget-content"

+						+ (c.getConfiguration_id().equals(form.getModelObject().getConfiguration_id()) ? " ui-state-default" : "")));

+			}

+		};

+		add(listContainer.add(dataView).setOutputMarkupId(true));

+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void onEvent(AjaxRequestTarget target) {

+				target.add(listContainer);

+			}

+		};

+		DataViewContainer<Configuration> container = new DataViewContainer<Configuration>(listContainer, dataView, navigator);

+		container.addLink(new OmOrderByBorder<Configuration>("orderById", "configuration_id", container))

+			.addLink(new OmOrderByBorder<Configuration>("orderByKey", "conf_key", container))

+			.addLink(new OmOrderByBorder<Configuration>("orderByValue", "conf_value", container));

+		add(container.getLinks());

+		add(navigator);

+		

+		form = new ConfigForm("form", listContainer, new Configuration());

+		form.showNewRecord();

+        add(form);

+		

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.html b/src/web/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.html
new file mode 100644
index 0000000..66ed5ee
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.html
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>	
+	<div class="adminPanel">
+		<div class="adminPanelColumnTable">
+			<span wicket:id="navigator">[dataview navigator]</span>
+			<table class="adminListTable">
+				<thead>
+					<tr>
+						<th class="ui-widget-header"><wicket:message key="599" /></th>
+						<th class="ui-widget-header"><wicket:message key="600" /></th>
+						<th class="ui-widget-header"><wicket:message key="601" /></th>
+						<th class="ui-widget-header"><wicket:message key="602" /></th>
+						<th class="ui-widget-header"><wicket:message key="603" /></th>
+						<th class="ui-widget-header"><wicket:message key="1501" /></th>
+					</tr>
+				</thead>
+				<tbody wicket:id="container" >
+					<tr wicket:id="clientList">
+						<td wicket:id="id"></td>
+						<td wicket:id="login"></td>
+						<td wicket:id="since"></td>
+						<td wicket:id="scope"></td>
+						<td><a wicket:id="kick"><wicket:message key="603" /></a></td>
+						<td wicket:id="server"></td>
+					</tr>
+				</tbody>
+				<tbody wicket:id="containerWeb" >
+					<tr wicket:id="clientListWeb">
+						<td wicket:id="id"></td>
+						<td wicket:id="login"></td>
+						<td wicket:id="since"></td>
+						<td wicket:id="scope"></td>
+						<td><a wicket:id="kick"><wicket:message key="603" /></a></td>
+						<td>&nbsp;</td>
+					</tr>
+				</tbody>
+			</table>
+		</div>
+		<div class="adminPanelColumnForm">
+			<table wicket:id="details" style="width: 450px;">
+				<tr wicket:id="line"><td wicket:id="name"></td><td wicket:id="value"></td></tr>
+			</table>
+		</div>
+	</div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java b/src/web/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
new file mode 100644
index 0000000..2730cac
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
@@ -0,0 +1,218 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.connection;
+
+import static java.lang.Boolean.TRUE;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getSid;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.server.ISessionManager;
+import org.apache.openmeetings.db.dao.user.IUserService;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.remote.UserService;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebClient;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.markup.repeater.RepeatingView;
+
+public class ConnectionsPanel extends AdminPanel {
+	private static final long serialVersionUID = 1L;
+
+	public ConnectionsPanel(String id) {
+		super(id);
+	
+		SearchableDataProvider<Client> sdp = new SearchableDataProvider<Client>(null) {
+			private static final long serialVersionUID = 1L;
+
+			//FIXME add search
+			
+			@Override
+			public Iterator<? extends Client> iterator(long first, long count) {
+				//FIXME add grouping by public SID
+				List<Client> l = new ArrayList<Client>(getBean(ISessionManager.class).getClientsWithServer());
+				return l.subList((int)Math.max(0, first), (int)Math.min(first + count, l.size())).iterator();
+			}
+			
+			@Override
+			public long size() {
+				return getBean(ISessionManager.class).getClients().size();
+			}
+		};
+		
+		SearchableDataProvider<WebClient> sdpWeb = new SearchableDataProvider<WebClient>(null) {
+			private static final long serialVersionUID = 1L;
+			
+			@Override
+			public Iterator<? extends WebClient> iterator(long first, long count) {
+				List<WebClient> l = new ArrayList<WebClient>(Application.getClients());
+				return l.subList((int)Math.max(0, first), (int)Math.min(first + count, l.size())).iterator();
+			}
+			
+			@Override
+			public long size() {
+				return Application.getClientsSize();
+			}
+		};
+		final WebMarkupContainer container = new WebMarkupContainer("container");
+		final WebMarkupContainer details = new WebMarkupContainer("details");
+		SearchableDataView<Client> dataView = new SearchableDataView<Client>("clientList", sdp) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final Item<Client> item) {
+				Client c = item.getModelObject();
+				item.add(new Label("id", c.getStreamid()));
+				item.add(new Label("login", c.getUsername()));
+				item.add(new Label("since", c.getConnectedSince()));
+				item.add(new Label("scope", c.getScope()));
+				item.add(new Label("server", c.getServer() == null ? "no cluster" : c.getServer().getAddress())); //FIXME localization
+				item.add(new ConfirmableAjaxBorder("kick", getString("603"), getString("605")) {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+						Client c = item.getModelObject();
+						getBean(IUserService.class).kickUserByStreamId(getSid(), c.getStreamid()
+								, c.getServer() == null ? 0 : c.getServer().getId());
+						target.add(container, details.setVisible(false));
+					}
+				}.setEnabled(!TRUE.equals(c.getIsScreenClient()) && !TRUE.equals(c.getIsAVClient())));
+				item.add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						Field[] ff = Client.class.getDeclaredFields();
+						RepeatingView lines = new RepeatingView("line");
+						Client c = item.getModelObject();
+						for (Field f : ff) {
+							int mod = f.getModifiers();
+							if (Modifier.isStatic(mod) || Modifier.isTransient(mod)) {
+								continue;
+							}
+							WebMarkupContainer line = new WebMarkupContainer(lines.newChildId());
+							line.add(new Label("name", f.getName()));
+							String val = "";
+							try {
+								f.setAccessible(true);
+								val = "" + f.get(c);
+							} catch (Exception e) {
+								//noop
+							}
+							line.add(new Label("value", val));
+							lines.add(line);
+						}
+						details.addOrReplace(lines);
+						target.add(details.setVisible(true));
+					}
+				});
+				item.add(AttributeModifier.append("class", "clickable ui-widget-content"));
+			}
+		};
+		add(container.add(dataView).setOutputMarkupId(true));
+		
+		final WebMarkupContainer containerWeb = new WebMarkupContainer("containerWeb");
+		SearchableDataView<WebClient> dataViewWeb = new SearchableDataView<WebClient>("clientListWeb", sdpWeb) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final Item<WebClient> item) {
+				WebClient c = item.getModelObject();
+				item.add(new Label("id", c.getUserId()));
+				item.add(new Label("login", getBean(UserService.class).getUserById(getSid(), c.getUserId()).getLogin()));
+				item.add(new Label("since", c.getConnectedSince()));
+				item.add(new Label("scope", "hibernate"));
+				item.add(new ConfirmableAjaxBorder("kick", getString("603"), getString("605")) {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+						WebClient c = item.getModelObject();
+						getBean(IUserService.class).kickUserBySessionId(getSid(), c.getUserId()
+								, c.getSessionId());
+						target.add(containerWeb, details.setVisible(false));
+					}
+				}.setEnabled(!c.getSessionId().equals(WebSession.get().getId())));
+				item.add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						Field[] ff = WebClient.class.getDeclaredFields();
+						RepeatingView lines = new RepeatingView("line");
+						WebClient c = item.getModelObject();
+						for (Field f : ff) {
+							int mod = f.getModifiers();
+							if (Modifier.isStatic(mod) || Modifier.isTransient(mod)) {
+								continue;
+							}
+							WebMarkupContainer line = new WebMarkupContainer(lines.newChildId());
+							line.add(new Label("name", f.getName()));
+							String val = "";
+							try {
+								f.setAccessible(true);
+								val = "" + f.get(c);
+							} catch (Exception e) {
+							}
+							line.add(new Label("value", val));
+							lines.add(line);
+						}
+						details.addOrReplace(lines);
+						target.add(details.setVisible(true));
+					}
+				});
+				item.add(AttributeModifier.append("class", "clickable ui-widget-content"));
+			}
+		};
+		add(containerWeb.add(dataViewWeb).setOutputMarkupId(true), details.setVisible(false).setOutputMarkupPlaceholderTag(true));
+		
+		add(new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(container);
+			}
+		});
+	}
+
+	@Override
+	public void onMenuPanelLoad(IPartialPageRequestHandler target) {
+		super.onMenuPanelLoad(target);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/groups/GroupForm.java b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupForm.java
new file mode 100644
index 0000000..83be7da
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupForm.java
@@ -0,0 +1,169 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.admin.groups;

+

+import static org.apache.openmeetings.web.app.Application.getBean;

+import static org.apache.openmeetings.web.app.WebSession.getUserId;

+

+import org.apache.openmeetings.db.dao.user.OrganisationDao;

+import org.apache.openmeetings.db.dao.user.OrganisationUserDao;

+import org.apache.openmeetings.db.entity.user.Organisation;

+import org.apache.openmeetings.db.entity.user.Organisation_Users;

+import org.apache.openmeetings.db.entity.user.User;

+import org.apache.openmeetings.web.admin.AdminBaseForm;

+import org.apache.openmeetings.web.admin.AdminUserChoiceProvider;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;

+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+import org.apache.wicket.markup.html.form.Form;

+import org.apache.wicket.markup.html.form.RequiredTextField;

+import org.apache.wicket.model.CompoundPropertyModel;

+import org.apache.wicket.model.Model;

+import org.apache.wicket.util.time.Duration;

+import org.wicketstuff.select2.Select2Choice;

+

+public class GroupForm extends AdminBaseForm<Organisation> {

+	private static final long serialVersionUID = 1L;

+	private GroupUsersPanel usersPanel;

+	private WebMarkupContainer groupList;

+	private Select2Choice<User> userToadd = null;

+	

+	static String formatUser(User choice) {

+		return String.format("%s [%s %s]", choice.getLogin(), choice.getFirstname(), choice.getLastname());

+	}

+	

+	public GroupForm(String id, WebMarkupContainer groupList, Organisation organisation) {

+		super(id, new CompoundPropertyModel<Organisation>(organisation));

+		this.groupList = groupList;

+		setOutputMarkupId(true);

+		

+		add(new RequiredTextField<String>("name").setLabel(Model.of(Application.getString(165))));

+		usersPanel = new GroupUsersPanel("users", getOrgId());

+		add(usersPanel);

+

+		add(userToadd = new Select2Choice<User>("user2add", Model.of((User)null), new AdminUserChoiceProvider() {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected String getDisplayText(User choice) {

+				return formatUser(choice);

+			}

+		}));

+		userToadd.add(new AjaxFormComponentUpdatingBehavior("change") {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void onUpdate(AjaxRequestTarget target) {

+				Organisation o = GroupForm.this.getModelObject();

+				User u = userToadd.getModelObject();

+				boolean found = false;

+				if (o.getOrganisation_id() != null) {

+					found = null != getBean(OrganisationUserDao.class).getByOrganizationAndUser(o.getOrganisation_id(), u.getUser_id());

+				}

+				if (!found && u != null) {

+					for (Organisation_Users ou : usersPanel.getUsers2add()) {

+						if (ou.getUser().getUser_id().equals(u.getUser_id())) {

+							found = true;

+							break;

+						}

+					}

+					if (!found) {

+						Organisation_Users ou = new Organisation_Users(o);

+						ou.setUser(u);

+						usersPanel.getUsers2add().add(ou);

+

+						userToadd.setModelObject(null);

+						target.add(usersPanel, userToadd);

+					}

+				}

+			}

+		});

+		// attach an ajax validation behavior to all form component's keydown

+		// event and throttle it down to once per second

+		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));

+	}

+	

+	public void updateView(AjaxRequestTarget target) {

+		userToadd.setModelObject(null);

+		usersPanel.update(getOrgId());

+		target.add(this, groupList);

+		target.appendJavaScript("groupsInit();");

+	}

+

+	private long getOrgId() {

+		return getModelObject().getOrganisation_id() != null ? getModelObject().getOrganisation_id() : 0;

+	}

+	

+	@Override

+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> f) {

+		setModelObject(new Organisation());

+		updateView(target);

+	}

+	

+	@Override

+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {

+		Organisation org = getModelObject();

+		if (org.getOrganisation_id() != null) {

+			org = getBean(OrganisationDao.class).get(org.getOrganisation_id());

+		} else {

+			org = new Organisation();

+		}

+		setModelObject(org);

+		updateView(target);

+	}

+	

+	@Override

+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {

+		getBean(OrganisationDao.class).delete(getModelObject(), getUserId());

+		setModelObject(new Organisation());

+		updateView(target);

+	}

+	

+	@Override

+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {

+		Organisation o = getModelObject();

+		o = getBean(OrganisationDao.class).update(o, getUserId());

+		setModelObject(o);

+		getBean(OrganisationUserDao.class).update(usersPanel.getUsers2add(), getUserId());

+		hideNewRecord();

+		updateView(target);

+	}

+

+	@Override

+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html
new file mode 100644
index 0000000..42d988d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+	<wicket:panel>

+		<div class="usergroupspanel">

+			<span wicket:id="navigator">[dataview navigator]</span>

+			<table class="adminListTable" style="min-width: 440px; max-width: 440px" >

+                <tr>

+                    <th class="ui-widget-header" style="width: 34px; max-width: 34px; overflow: hidden;" wicket:message="title:98"><wicket:message key="98" /></th>

+                    <th class="ui-widget-header" style="width: 360px"><wicket:message key="177" /></th>

+                    <th class="ui-widget-header" style="width: 34px"><wicket:message key="275" /></th>

+                </tr>   

+            </table>

+            <div class="tableWrapper" style="width: 460px; height: 460px;">

+                <table class="adminListTable" style="min-width: 440px; max-width: 440px">  

+                    <tbody>   

+                        <tr wicket:id="userList" class="ui-widget-content">

+                            <td style="width: 34px"><input type="checkbox" wicket:id="isModerator"/></td>

+                            <td style="width: 360px"><div style="width: 360px"><span wicket:id="label"></span></div></td>

+                            <td style="width: 34px"><div style="width: 34px"><div class="formCancelButton" wicket:id="deleteUserBtn" wicket:message="title:274"></div></div></td>

+                        </tr>

+                    </tbody>

+                </table>

+            </div>

+		</div>

+	</wicket:panel>

+</html>

diff --git a/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java
new file mode 100644
index 0000000..f3058c4
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java
@@ -0,0 +1,141 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.admin.groups;

+

+import static org.apache.openmeetings.web.app.Application.getBean;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.apache.openmeetings.db.dao.user.OrganisationUserDao;

+import org.apache.openmeetings.db.entity.user.Organisation_Users;

+import org.apache.openmeetings.db.entity.user.User;

+import org.apache.openmeetings.web.admin.SearchableDataView;

+import org.apache.openmeetings.web.app.WebSession;

+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;

+import org.apache.openmeetings.web.common.PagedEntityListPanel;

+import org.apache.openmeetings.web.data.SearchableDataProvider;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;

+import org.apache.wicket.behavior.AttributeAppender;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.html.form.CheckBox;

+import org.apache.wicket.markup.html.form.Form;

+import org.apache.wicket.markup.html.panel.Panel;

+import org.apache.wicket.markup.repeater.Item;

+

+public class GroupUsersPanel extends Panel {

+	private static final long serialVersionUID = 1L;

+	private long organisationId;

+	private List<Organisation_Users> users2add = new ArrayList<Organisation_Users>();

+	

+	public GroupUsersPanel(String id, long orgId) {

+		super(id);

+		this.organisationId = orgId;

+		setOutputMarkupId(true);

+		

+		SearchableDataView<Organisation_Users> dataView = new SearchableDataView<Organisation_Users>("userList", new OrgUserDataProvider()) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void populateItem(Item<Organisation_Users> item) {

+				final Organisation_Users orgUser = item.getModelObject();

+				User u = orgUser.getUser();

+				item.add(new CheckBox("isModerator").add(new OnChangeAjaxBehavior() {

+					private static final long serialVersionUID = 1L;

+

+					@Override

+					protected void onUpdate(AjaxRequestTarget target) {

+						if (orgUser.getOrganisation_users_id() != null) {

+							getBean(OrganisationUserDao.class).update(orgUser, WebSession.getUserId());

+						}

+					}

+				}));

+				Label label = new Label("label", u == null ? "" : GroupForm.formatUser(u));

+				if (orgUser.getOrganisation_users_id() == null) {

+					label.add(AttributeAppender.append("class", "newItem"));

+				}

+				item.add(label);

+				item.add(new ConfirmableAjaxBorder("deleteUserBtn", getString("80"), getString("833")) {

+					private static final long serialVersionUID = 1L;

+

+					@Override

+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {

+						if (orgUser.getOrganisation_users_id() == null) {

+							for (int i = 0; i < users2add.size(); ++i) {

+								//FIXME ineffective

+								if (users2add.get(i).getUser().getUser_id().equals(orgUser.getUser().getUser_id())) {

+									users2add.remove(i);

+									break;

+								}

+							}

+						} else {

+							getBean(OrganisationUserDao.class).delete(orgUser, WebSession.getUserId());

+						}

+						target.add(GroupUsersPanel.this);

+					}

+				});

+			}

+		};

+		add(dataView).setOutputMarkupId(true);

+		add(new PagedEntityListPanel("navigator", dataView) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void onEvent(AjaxRequestTarget target) {

+				target.add(GroupUsersPanel.this);

+			}

+		});

+	}

+	

+	void update(long orgId) {

+		organisationId = orgId;

+		users2add.clear();

+	}

+	

+	List<Organisation_Users> getUsers2add() {

+		return users2add;

+	}

+	

+	private class OrgUserDataProvider extends SearchableDataProvider<Organisation_Users> {

+		private static final long serialVersionUID = 1L;

+

+		OrgUserDataProvider() {

+			super(OrganisationUserDao.class);

+		}

+		

+		protected OrganisationUserDao getDao() {

+			return (OrganisationUserDao)super.getDao();

+		}

+		

+		public long size() {

+			return users2add.size() + (search == null ? getDao().count(organisationId) : getDao().count(organisationId, search));

+		}

+		

+		public java.util.Iterator<? extends Organisation_Users> iterator(long first, long count) {

+			List<Organisation_Users> list = new ArrayList<Organisation_Users>();

+			list.addAll(users2add);

+			list.addAll(search == null && getSort() == null

+					? getDao().get(organisationId, (int)first, (int)count)

+					: getDao().get(organisationId, search, (int)first, (int)count, getSortStr()));

+			

+			return list.iterator();

+		}

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html
new file mode 100644
index 0000000..08b0504
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.html
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+		<script type="text/javascript">
+			function groupsInit() {
+				var documentHeight = $(document).height();
+                $('#adminForm').height(documentHeight-114);
+                $('#adminTable').height(documentHeight-144);
+			};
+		</script>
+	</wicket:head>
+	<wicket:panel>
+		<div class="adminPanel">
+			<div class="adminPanelColumnTable">
+				<span wicket:id="navigator">[dataview navigator]</span>
+				<table class="adminListTable">
+					<tr>
+						<th class="two_column_layout_column1 ui-widget-header"><span wicket:id="orderById"></span><wicket:message key="164" /></th>
+						<th class="two_column_layout_column2 ui-widget-header"><span wicket:id="orderByName"></span><wicket:message key="165" /></th>
+					</tr>	
+				</table>
+				<div class="tableWrapper" id="adminTable">
+					<table class="adminListTable">	
+						<tbody wicket:id="listContainer">	
+				    		<tr wicket:id="groupList">
+								<td class="two_column_layout_column1"><div class="two_column_layout_divcolumn1"><span wicket:id="organisation_id"></span></div></td>
+								<td class="two_column_layout_column2"><div class="two_column_layout_divcolumn2"><span wicket:id="name"></span></div></td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="adminPanelColumnForm">
+				<form wicket:id="form" class="adminForm">
+					<div wicket:id="buttons"></div>
+					<div class="scrollcontent" id="adminForm">
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="170" /></legend>
+							<div class="formelement">
+								<label><wicket:message key="171" /></label><input type="text" wicket:id="name" />
+							</div>
+							<div class="formelement">
+								<label style="font-weight: bold;"><wicket:message key="178" /></label><input type="hidden" wicket:id="user2add" class="input"/>
+							</div>
+							<div class="formelement">
+								<div wicket:id="users"></div>
+							</div>
+						</fieldset>
+					</div>
+				</form>
+			</div>
+		</div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.java b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.java
new file mode 100644
index 0000000..91dd411
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/groups/GroupsPanel.java
@@ -0,0 +1,104 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.admin.groups;

+

+import org.apache.openmeetings.db.dao.user.OrganisationDao;

+import org.apache.openmeetings.db.entity.user.Organisation;

+import org.apache.openmeetings.db.entity.user.Organisation_Users;

+import org.apache.openmeetings.web.admin.AdminPanel;

+import org.apache.openmeetings.web.admin.SearchableDataView;

+import org.apache.openmeetings.web.common.PagedEntityListPanel;

+import org.apache.openmeetings.web.data.DataViewContainer;

+import org.apache.openmeetings.web.data.OmOrderByBorder;

+import org.apache.openmeetings.web.data.SearchableDataProvider;

+import org.apache.wicket.AttributeModifier;

+import org.apache.wicket.ajax.AjaxEventBehavior;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.repeater.Item;

+

+/**

+ * Modify/ CRUD operations for {@link Organisation} and

+ * {@link Organisation_Users}

+ * 

+ * @author swagner

+ * 

+ */

+public class GroupsPanel extends AdminPanel {

+	private static final long serialVersionUID = 1L;

+	private GroupForm form;

+	

+	@Override

+	public void onMenuPanelLoad(IPartialPageRequestHandler target) {

+		super.onMenuPanelLoad(target);

+		target.appendJavaScript("groupsInit();");

+	}

+

+	public GroupsPanel(String id) {

+		super(id);

+		final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");

+        

+		//Adding the Group Form

+		form = new GroupForm("form", listContainer, new Organisation());

+        add(form);

+

+        //List view

+        SearchableDataView<Organisation> dataView = new SearchableDataView<Organisation>("groupList", new SearchableDataProvider<Organisation>(OrganisationDao.class)) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void populateItem(Item<Organisation> item) {

+				final Organisation o = item.getModelObject();

+				item.add(new Label("organisation_id", "" + o.getOrganisation_id()));

+				item.add(new Label("name", "" + o.getName()));

+				item.add(new AjaxEventBehavior("click") {

+					private static final long serialVersionUID = 1L;

+

+					protected void onEvent(AjaxRequestTarget target) {

+						form.hideNewRecord();

+						form.setModelObject(o);

+						form.updateView(target);

+						target.add(listContainer);

+						target.appendJavaScript("groupsInit();");

+					}

+				});

+				item.add(AttributeModifier.append("class", "clickable ui-widget-content"

+						+ (o.getOrganisation_id().equals(form.getModelObject().getOrganisation_id()) ? " ui-state-active" : "")));

+			}

+		};

+

+		//Paging

+		add(listContainer.add(dataView).setOutputMarkupId(true));

+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void onEvent(AjaxRequestTarget target) {

+				target.add(listContainer);

+			}

+		};

+		DataViewContainer<Organisation> container = new DataViewContainer<Organisation>(listContainer, dataView, navigator);

+		container.addLink(new OmOrderByBorder<Organisation>("orderById", "organisation_id", container))

+			.addLink(new OmOrderByBorder<Organisation>("orderByName", "name", container));

+		add(container.getLinks());

+		add(navigator);

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/admin/labels/AddLanguageForm.java b/src/web/java/org/apache/openmeetings/web/admin/labels/AddLanguageForm.java
new file mode 100644
index 0000000..a60da44
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/labels/AddLanguageForm.java
@@ -0,0 +1,93 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.admin.labels;

+

+import java.util.IllformedLocaleException;

+import java.util.Locale;

+import java.util.Map;

+

+import org.apache.openmeetings.db.dao.label.LabelDao;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.markup.html.form.Form;

+import org.apache.wicket.markup.html.form.RequiredTextField;

+import org.apache.wicket.model.Model;

+import org.apache.wicket.model.PropertyModel;

+import org.apache.wicket.validation.IValidatable;

+import org.apache.wicket.validation.IValidator;

+import org.apache.wicket.validation.ValidationError;

+

+import com.googlecode.wicket.jquery.core.Options;

+import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;

+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;

+/**

+ * 

+ * @author solomax, swagner

+ * 

+ */

+public class AddLanguageForm extends Form<Void> {

+	private static final long serialVersionUID = 1L;

+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));

+	private String newLanguageISO;

+	

+	public AddLanguageForm(String id, final LangPanel langPanel) {

+		super(id);

+		add(feedback);

+		add(new RequiredTextField<String>("iso", new PropertyModel<String>(this, "newLanguageISO")).add(new IValidator<String>() {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			public void validate(IValidatable<String> s) {

+				try {

+					new Locale.Builder().setLanguageTag(s.getValue());

+				} catch (IllformedLocaleException e) {

+					s.error(new ValidationError("Invalid code, please use ")); //FIXME TODO add proper key

+					return;

+				}

+				Locale l = Locale.forLanguageTag(s.getValue());

+				for (Map.Entry<Long, Locale> e : LabelDao.languages.entrySet()) {

+					if (e.getValue().equals(l)) {

+						s.error(new ValidationError("This code already added")); //FIXME TODO add proper key

+						break;

+					}

+				}

+			}

+		}));

+		add(new AjaxButton("add", Model.of(Application.getString(366L)), this) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void onError(AjaxRequestTarget target, Form<?> form) {

+				target.add(feedback);

+			}

+			

+			@Override

+			public void onSubmit(AjaxRequestTarget target, Form<?> form) {

+				try {

+					LabelDao.add(Locale.forLanguageTag(newLanguageISO));

+					langPanel.getLangForm().updateLanguages(target);

+					target.appendJavaScript("$('#addLanguage').dialog('close');");

+				} catch (Exception e) {

+					error("Failed to add, " + e.getMessage()); //FIXME TODO add proper key

+					target.add(feedback);

+				}

+			}

+		});

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/admin/labels/LabelsForm.java b/src/web/java/org/apache/openmeetings/web/admin/labels/LabelsForm.java
new file mode 100644
index 0000000..65e655a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/labels/LabelsForm.java
@@ -0,0 +1,112 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.admin.labels;

+

+import static org.apache.openmeetings.web.app.Application.getBean;

+

+import org.apache.openmeetings.db.dao.label.LabelDao;

+import org.apache.openmeetings.db.entity.label.StringLabel;

+import org.apache.openmeetings.web.admin.AdminBaseForm;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.markup.html.form.Form;

+import org.apache.wicket.markup.html.form.RequiredTextField;

+import org.apache.wicket.markup.html.form.TextArea;

+import org.apache.wicket.model.CompoundPropertyModel;

+

+

+/**

+ * Add/edit/delete {@link StringLabel}

+ * 

+ * @author solomax, swagner

+ * 

+ */

+public class LabelsForm extends AdminBaseForm<StringLabel> {

+	private static final long serialVersionUID = 1L;

+	private LangPanel panel;

+	private String key, value;

+

+	public LabelsForm(String id, LangPanel panel, StringLabel label) {

+		super(id, new CompoundPropertyModel<StringLabel>(label));

+		this.panel = panel;

+		key = label.getKey();

+		value = label.getValue();

+		

+		add(new RequiredTextField<String>("key"));

+		add(new TextArea<String>("value"));

+	}

+

+	@Override

+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> f) {

+		key = null;

+		value = null;

+		setModelObject(new StringLabel(key, value));

+		target.add(this);

+		target.appendJavaScript("labelsInit();");

+	}

+

+	@Override

+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {

+		this.setModelObject(new StringLabel(key, value));

+		target.add(this);

+		target.appendJavaScript("labelsInit();");

+	}

+

+	@Override

+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {

+		try {

+			getBean(LabelDao.class).update(panel.language.getValue(), getModelObject());

+		} catch (Exception e) {

+			error("Unexpected error while saving label:" + e.getMessage()); //TODO localize

+		}

+		hideNewRecord();

+		target.add(panel.listContainer);

+		target.appendJavaScript("labelsInit();");

+	}

+

+	@Override

+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {

+		try {

+			getBean(LabelDao.class).delete(panel.language.getValue(), getModelObject());

+		} catch (Exception e) {

+			error("Unexpected error while deleting label:" + e.getMessage()); //TODO localize

+		}

+		target.add(panel.listContainer);

+		target.appendJavaScript("labelsInit();");

+	}

+

+	@Override

+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/admin/labels/LangForm.java b/src/web/java/org/apache/openmeetings/web/admin/labels/LangForm.java
new file mode 100644
index 0000000..c64ab4e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/labels/LangForm.java
@@ -0,0 +1,118 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.admin.labels;

+

+import java.util.AbstractMap;

+import java.util.ArrayList;

+import java.util.List;

+import java.util.Locale;

+import java.util.Map;

+

+import org.apache.openmeetings.db.dao.label.LabelDao;

+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;

+import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+import org.apache.wicket.markup.html.form.ChoiceRenderer;

+import org.apache.wicket.markup.html.form.DropDownChoice;

+import org.apache.wicket.markup.html.form.Form;

+import org.apache.wicket.model.PropertyModel;

+import org.apache.wicket.util.time.Duration;

+

+/**

+ * Modify the language selection, add/delete language

+ * 

+ * @author solomax, swagner

+ * 

+ */

+public class LangForm extends Form<Void> {

+	private static final long serialVersionUID = 1L;

+	private DropDownChoice<Map.Entry<Long, Locale>> languages;

+

+	private List<Map.Entry<Long, Locale>> getLanguages() {

+		List<Map.Entry<Long, Locale>> list = new ArrayList<Map.Entry<Long, Locale>>();

+		for (Map.Entry<Long, Locale> e : LabelDao.languages.entrySet()) {

+			list.add(new AbstractMap.SimpleEntry<Long,Locale>(e.getKey(), e.getValue()));

+		}

+		return list;

+	}

+	

+	public void updateLanguages(AjaxRequestTarget target) {

+		languages.setChoices(getLanguages());

+		target.add(languages);

+	}

+

+	/**

+	 * Render Main

+	 * 

+	 * @param id

+	 * @param listContainer

+	 * @param language

+	 * @param langPanel

+	 */

+	public LangForm(String id, final WebMarkupContainer listContainer, final LangPanel langPanel) {

+		super(id);

+		setOutputMarkupId(true);

+

+		languages = new DropDownChoice<Map.Entry<Long, Locale>>("language"

+				, new PropertyModel<Map.Entry<Long, Locale>>(langPanel, "language")

+				, getLanguages()

+				, new ChoiceRenderer<Map.Entry<Long, Locale>>() {

+					private static final long serialVersionUID = 1L;

+

+					@Override

+					public Object getDisplayValue(Map.Entry<Long, Locale> object) {

+						return object.getValue().getDisplayName();

+					}

+

+					@Override

+					public String getIdValue(Map.Entry<Long, Locale> object, int index) {

+						return "" + object.getKey();

+					}

+				});

+				

+		languages.add(new OnChangeAjaxBehavior() {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void onUpdate(AjaxRequestTarget target) {

+				target.add(listContainer);

+			}

+		});

+		add(languages);

+

+		add(new ConfirmableAjaxBorder("deleteLangBtn", getString("80"), getString("833")) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {

+				LabelDao.delete(langPanel.language.getValue());

+				List<Map.Entry<Long, Locale>> langs = getLanguages();

+				langPanel.language = langs.isEmpty() ? null : langs.get(0);

+				languages.setChoices(langs);

+				target.add(languages, listContainer);

+			}

+		});

+

+		// attach an ajax validation behavior to all form component's keydown

+		// event and throttle it down to once per second

+		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/admin/labels/LangPanel.html b/src/web/java/org/apache/openmeetings/web/admin/labels/LangPanel.html
new file mode 100644
index 0000000..f5417dd
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/labels/LangPanel.html
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div wicket:id="feedback"></div>
+		<script type="text/javascript">
+			function labelsInit() {
+				$('#addLanguage').dialog({
+					closeOnEscape: true
+					, autoOpen: false
+					, resizable: false
+				});
+				var documentHeight = $(document).height();
+                $('#adminForm').height(documentHeight - 114);
+                $('#adminTable').height(documentHeight - 172);
+			};
+		</script>
+		<div class="adminPanel">
+			<div class="adminPanelColumnTable">
+				<form wicket:id="langForm" class="addLanguagePanel">
+					<table>
+						<tr>
+							<td>
+								<div class="formNewButton" wicket:message="title:362" 
+									onclick="$('#addLanguage :text').val(''); $('#addLanguage').dialog('open');"><input type="button" title=""/></div>
+							</td>
+							<td>
+								<div wicket:id="deleteLangBtn" class="formCancelButton" wicket:message="title:363"></div>
+							</td>
+							<td>
+								<select wicket:id="language"></select>
+							</td>
+							<td>
+								<span wicket:id="export" class="btn"><wicket:message key="360"/></span>
+							</td>
+							<td>
+								<div class="fileupload fileupload-new" data-provides="fileupload" style="margin: 0;">
+									<span class="btn btn-file ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"><span class="ui-button-text"><wicket:message key="387"/></span><input type="file" accept="text/xml" wicket:id="fileInput"/></span>
+								</div>
+								<span wicket:id="progress">[progressbar]</span>
+							</td>
+						</tr>
+					</table>
+				</form>
+				<span wicket:id="navigator">[dataview navigator]</span>
+				<table class="adminListTable">
+					<thead>
+						<tr>
+							<th class="two_column_layout_column1 ui-widget-header"><span wicket:id="orderByName"></span><wicket:message key="351" /></th>
+							<th class="two_column_layout_column2 ui-widget-header"><span wicket:id="orderByValue"></span><wicket:message key="352" /></th>
+						</tr>
+					</thead>	
+				</table>
+				<div class="tableWrapper" id="adminTable">
+					<table class="adminListTable">
+						<tbody wicket:id="listContainer" >
+				    		<tr wicket:id="langList">
+								<td class="two_column_layout_column1"><div class="three_column_layout_divcolumn2"><span wicket:id="name"></span></div></td>
+								<td class="two_column_layout_column2"><div class="three_column_layout_divcolumn3"><span wicket:id="value"></span></div></td>
+							</tr>
+						</tbody>	
+					</table>
+				</div>
+			</div>
+			<div class="adminPanelColumnForm">
+				<form wicket:id="form" class="adminForm">
+					<div wicket:id="buttons"></div>
+					<div class="scrollcontent" id="adminForm">
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="353" /></legend>
+	                         <div class="formelement">
+	                             <label><wicket:message key="354" /></label><input type="text" wicket:id="key"/>
+							</div>
+	                        <div class="formelement">
+	                             <label><wicket:message key="355" /></label><textarea wicket:id="value"></textarea>
+	                        </div> 
+						</fieldset>
+					</div>
+				</form>
+			</div>
+		</div>
+		<div id="addLanguage" wicket:message="title:364" style="display: none;">
+			<form wicket:id="addLangForm">
+				<div wicket:id="feedback"></div>
+				<table>
+					<tr>
+						<td><wicket:message key="1422" /></td>
+						<td><input type="text" wicket:id="iso"/></td>
+					</tr>
+					<tr>
+						<td align="right" colspan="2"><input type="submit" wicket:id="add"/></td>
+					</tr>
+				</table>
+			</form>
+		</div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/labels/LangPanel.java b/src/web/java/org/apache/openmeetings/web/admin/labels/LangPanel.java
new file mode 100644
index 0000000..2e39cc9
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/labels/LangPanel.java
@@ -0,0 +1,231 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.labels;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.AbstractMap;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.entity.label.StringLabel;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.openmeetings.web.util.AjaxDownload;
+import org.apache.openmeetings.web.util.BootstrapFileUploadBehavior;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadProgressBar;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.upload.FileUpload;
+import org.apache.wicket.markup.html.form.upload.FileUploadField;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.util.resource.AbstractResourceStream;
+import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+/**
+ * Language Editor, add/insert/update {@link Fieldlanguagesvalues} and
+ * add/delete {@link FieldLanguage} contains several Forms and one list
+ * 
+ * @author solomax, swagner
+ * 
+ */
+public class LangPanel extends AdminPanel {
+	private static final Logger log = Red5LoggerFactory.getLogger(LangPanel.class, webAppRootKey);
+	private static final long serialVersionUID = 1L;
+
+	final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");;
+	private LangForm langForm;
+	Map.Entry<Long, Locale> language;
+	private FileUploadField fileUploadField;
+	// Create feedback panels
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+	
+	@Override
+	public void onMenuPanelLoad(IPartialPageRequestHandler target) {
+		super.onMenuPanelLoad(target);
+		target.appendJavaScript("labelsInit();");
+	}
+
+	public LangPanel(String id) {
+		super(id);
+
+		// Create feedback panels
+		add(feedback.setOutputMarkupId(true));
+		language = new AbstractMap.SimpleEntry<Long, Locale>(1L, Locale.ENGLISH);
+
+		final LabelsForm form = new LabelsForm("form", this, new StringLabel(null, null));
+		form.showNewRecord();
+		add(form);
+
+		final SearchableDataView<StringLabel> dataView = new SearchableDataView<StringLabel>(
+				"langList"
+				, new SearchableDataProvider<StringLabel>(LabelDao.class) {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected LabelDao getDao() {
+						return (LabelDao)super.getDao();
+					}
+					
+					@Override
+					public long size() {
+						return getDao().count(language.getValue(), search);
+					}
+					
+					public Iterator<? extends StringLabel> iterator(long first, long count) {
+						return getDao().get(language.getValue(), search, (int)first, (int)count, getSort()).iterator();
+					}
+				}) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final Item<StringLabel> item) {
+				final StringLabel fv = item.getModelObject();
+				item.add(new Label("name", fv.getKey()));
+				item.add(new Label("value", fv.getValue()));
+				item.add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					protected void onEvent(AjaxRequestTarget target) {
+						form.setModelObject(fv);
+						form.hideNewRecord();
+						target.add(form, listContainer);
+						target.appendJavaScript("labelsInit();");
+					}
+				});
+				item.add(AttributeModifier.append("class", "clickable ui-widget-content" + (fv.getKey().equals(form.getModelObject().getKey()) ? " ui-state-active" : "")));
+			}
+		};
+
+		add(listContainer.add(dataView).setOutputMarkupId(true));
+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				dataView.modelChanging();
+				target.add(listContainer);
+			}
+		};
+		DataViewContainer<StringLabel> container = new DataViewContainer<StringLabel>(listContainer, dataView, navigator);
+		container
+			.addLink(new OmOrderByBorder<StringLabel>("orderByName", "key", container))
+			.addLink(new OmOrderByBorder<StringLabel>("orderByValue", "value", container));
+		add(container.getLinks());
+		add(navigator);
+		langForm = new LangForm("langForm", listContainer, this);
+		fileUploadField = new FileUploadField("fileInput");
+		langForm.add(fileUploadField);
+		langForm.add(new UploadProgressBar("progress", langForm, fileUploadField));
+		fileUploadField.add(new AjaxFormSubmitBehavior(langForm, "change") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target) {
+				FileUpload download = fileUploadField.getFileUpload();
+				try {
+					if (download == null || download.getInputStream() == null) {
+						feedback.error("File is empty");
+						return;
+					}
+					LabelDao.upload(language.getValue(), download.getInputStream());
+				} catch (Exception e) {
+					log.error("Exception on panel language editor import ", e);
+					feedback.error(e);
+				}
+
+				// repaint the feedback panel so that it is hidden
+				target.add(listContainer, feedback);
+			}
+		});
+
+		// Add a component to download a file without page refresh
+		final AjaxDownload download = new AjaxDownload();
+		langForm.add(download);
+
+		langForm.add(new AjaxButton("export"){
+			private static final long serialVersionUID = 1L;
+
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				final String name = LabelDao.getLabelFileName(language.getValue());
+				download.setFileName(name);
+				download.setResourceStream(new AbstractResourceStream() {
+					private static final long serialVersionUID = 1L;
+					private transient InputStream is;
+					
+					public InputStream getInputStream() throws ResourceStreamNotFoundException {
+						try {
+							is = Application.class.getResourceAsStream(name);
+							return is;
+						} catch (Exception e) {
+							throw new ResourceStreamNotFoundException(e);
+						}
+					}
+					
+					public void close() throws IOException {
+						if (is != null) {
+							is.close();
+							is = null;
+						}
+					}
+				});
+				download.initiate(target);
+
+				// repaint the feedback panel so that it is hidden
+				target.add(feedback);
+			}
+			
+			@Override
+			protected void onError(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so errors are shown
+				target.add(feedback);
+			}
+			
+		});
+		
+		add(langForm);
+		add(new AddLanguageForm("addLangForm", this));
+		add(BootstrapFileUploadBehavior.INSTANCE);
+	}
+
+	public LangForm getLangForm() {
+		return langForm;
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java b/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java
new file mode 100644
index 0000000..4c6eea8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapForm.java
@@ -0,0 +1,135 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.admin.ldaps;

+

+import static org.apache.openmeetings.util.OpenmeetingsVariables.WEB_DATE_PATTERN;

+import static org.apache.wicket.datetime.markup.html.basic.DateLabel.forDatePattern;

+

+import org.apache.openmeetings.db.dao.server.LdapConfigDao;

+import org.apache.openmeetings.db.entity.server.LdapConfig;

+import org.apache.openmeetings.web.admin.AdminBaseForm;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.openmeetings.web.app.WebSession;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.html.form.CheckBox;

+import org.apache.wicket.markup.html.form.Form;

+import org.apache.wicket.markup.html.form.RequiredTextField;

+import org.apache.wicket.markup.html.form.TextArea;

+import org.apache.wicket.markup.html.form.TextField;

+import org.apache.wicket.model.CompoundPropertyModel;

+import org.apache.wicket.model.Model;

+import org.apache.wicket.util.time.Duration;

+

+/**

+ * Form components to insert/update/delete {@link LdapConfig}

+ * 

+ * @author swagner

+ * 

+ */

+public class LdapForm extends AdminBaseForm<LdapConfig> {

+	private static final long serialVersionUID = 1L;

+	private final WebMarkupContainer listContainer;

+

+	public LdapForm(String id, WebMarkupContainer listContainer,

+			final LdapConfig ldapConfig) {

+		super(id, new CompoundPropertyModel<LdapConfig>(ldapConfig));

+		setOutputMarkupId(true);

+		this.listContainer = listContainer;

+		

+		add(new RequiredTextField<String>("name").setLabel(Model.of(Application.getString(1108))));

+		add(new CheckBox("isActive"));

+		add(forDatePattern("inserted", WEB_DATE_PATTERN));

+		add(new Label("insertedby.login"));

+		add(forDatePattern("updated", WEB_DATE_PATTERN));

+		add(new Label("updatedby.login"));

+		add(new RequiredTextField<String>("configFileName").setLabel(Model.of(Application.getString(1115))));

+		add(new CheckBox("addDomainToUserName"));

+		add(new TextField<String>("domain"));

+		add(new TextArea<String>("comment"));

+

+		// attach an ajax validation behavior to all form component's keydown

+		// event and throttle it down to once per second

+		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));

+	}

+

+	@Override

+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {

+		Application.getBean(LdapConfigDao.class).update(getModelObject(), WebSession.getUserId());

+		LdapConfig ldapConfig = Application.getBean(LdapConfigDao.class).get(getModelObject().getLdapConfigId());

+		this.setModelObject(ldapConfig);

+		hideNewRecord();

+		target.add(this);

+		target.add(listContainer);

+		target.appendJavaScript("omLdapPanelInit();");

+	}

+

+	@Override

+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {

+		this.setModelObject(new LdapConfig());

+		target.add(this);

+		target.appendJavaScript("omLdapPanelInit();");

+	}

+

+	@Override

+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {

+		LdapConfig ldapConfig = this.getModelObject();

+		if (ldapConfig.getLdapConfigId() <= 0) {

+			ldapConfig = Application.getBean(LdapConfigDao.class).get(

+					ldapConfig.getLdapConfigId());

+		} else {

+			ldapConfig = new LdapConfig();

+		}

+		this.setModelObject(ldapConfig);

+		target.add(this);

+		target.appendJavaScript("omLdapPanelInit();");

+	}

+

+	@Override

+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {

+		Application.getBean(LdapConfigDao.class).delete(

+				this.getModelObject(), WebSession.getUserId());

+		this.setModelObject(new LdapConfig());

+		target.add(listContainer);

+		target.add(this);

+		target.appendJavaScript("omLdapPanelInit();");

+	}

+

+	@Override

+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.html b/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.html
new file mode 100644
index 0000000..0b769b7
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.html
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+       <script type="text/javascript">
+           function omLdapPanelInit() {
+               var documentHeight = $(document).height();
+               $('#adminForm').height(documentHeight-114);
+               $('#adminTable').height(documentHeight-144);
+           }
+       </script>
+    </wicket:head>
+	<wicket:panel>
+		<div class="adminPanel">
+			<div class="adminPanelColumnTable">
+				<span wicket:id="navigator">[dataview navigator]</span>
+				<table class="adminListTable">
+					<thead>
+						<tr>
+							<th class="three_column_layout_column1 ui-widget-header"><span wicket:id="orderById"></span><wicket:message key="1104" /></th>
+							<th class="three_column_layout_column2 ui-widget-header"><span wicket:id="orderByName"></span><wicket:message key="1105" /></th>
+							<th class="three_column_layout_column3 ui-widget-header"><span wicket:id="orderByFile"></span><wicket:message key="1106" /></th>
+						</tr>
+					</thead>
+				</table>
+				<div class="tableWrapper" id="adminTable">
+					<table class="adminListTable">
+						<tbody wicket:id="listContainer">
+				    		<tr wicket:id="ldapList">
+								<td class="three_column_layout_column1"><div class="three_column_layout_divcolumn1"><span wicket:id="ldapConfigId"></span></div></td>
+								<td class="three_column_layout_column2"><div class="three_column_layout_divcolumn2"><span wicket:id="name"></span></div></td>
+								<td class="three_column_layout_column3"><div class="three_column_layout_divcolumn3"><span wicket:id="configFileName"></span></div></td>
+							</tr>
+						</tbody>			
+					</table>
+				</div>
+			</div>
+			<div class="adminPanelColumnForm">
+				<form wicket:id="form" class="adminForm">
+					<div wicket:id="buttons"></div>
+					<div class="scrollcontent" id="adminForm">
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="1107" /></legend>
+							<div class="formelement">
+	                            <label><wicket:message key="1108" /></label><input type="text" wicket:id="name"/>
+				            </div>
+				            <div class="formelement">
+	                            <label><wicket:message key="1109" /></label><input type="checkbox" class="formcheckbox" wicket:id="isActive"/>
+				            </div>
+				            <div class="formelement">
+	                            <label><wicket:message key="1110" /></label><span wicket:id="inserted"/>
+	                        </div>
+				            <div class="formelement">
+	                            <label><wicket:message key="1111" /></label><span wicket:id="insertedby.login"/>
+				            </div>
+				            <div class="formelement">
+	                            <label><wicket:message key="1112" /></label><span wicket:id="updated"/>
+				            </div>
+				            <div class="formelement">
+	                            <label><wicket:message key="1113" /></label><span wicket:id="updatedby.login"/>
+				            </div>
+				            <div class="formelement">
+				                <div class="info-text"><wicket:message key="1114" /></div>
+	                            <br/>
+				                <label><wicket:message key="1115" /></label><input type="text" wicket:id="configFileName"/>
+				            </div>
+				            <div class="formelement">
+				                <div class="info-text"><wicket:message key="1116" /></div>
+	                            <br/>
+				                <label><wicket:message key="1117" /></label><input type="checkbox" class="formcheckbox" wicket:id="addDomainToUserName"/>
+				            </div>
+	                        <div class="formelement">
+	                            <label><wicket:message key="1118" /></label><input type="text" wicket:id="domain"/>
+				            </div>
+	                        <div class="formelement">
+	                            <label><wicket:message key="270" /></label><textarea wicket:id="comment"/>
+				            </div>
+				        </fieldset>
+				    </div>
+				</form>
+			</div>
+		</div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.java b/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.java
new file mode 100644
index 0000000..df9c9e9
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/ldaps/LdapsPanel.java
@@ -0,0 +1,101 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.admin.ldaps;

+

+import org.apache.openmeetings.db.dao.server.LdapConfigDao;

+import org.apache.openmeetings.db.entity.server.LdapConfig;

+import org.apache.openmeetings.web.admin.AdminPanel;

+import org.apache.openmeetings.web.admin.SearchableDataView;

+import org.apache.openmeetings.web.common.PagedEntityListPanel;

+import org.apache.openmeetings.web.data.DataViewContainer;

+import org.apache.openmeetings.web.data.OmOrderByBorder;

+import org.apache.openmeetings.web.data.SearchableDataProvider;

+import org.apache.wicket.AttributeModifier;

+import org.apache.wicket.ajax.AjaxEventBehavior;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.repeater.Item;

+

+/**

+ * {@link AdminPanel} to list and modify {@link LdapConfig}

+ * 

+ * @author swagner

+ * 

+ */

+public class LdapsPanel extends AdminPanel {

+	private static final long serialVersionUID = 1L;

+	final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");

+	private LdapForm form;

+	

+	@Override

+	public void onMenuPanelLoad(IPartialPageRequestHandler target) {

+		super.onMenuPanelLoad(target);

+		target.appendJavaScript("omLdapPanelInit();");

+	}

+

+	public LdapsPanel(String id) {

+		super(id);

+		SearchableDataView<LdapConfig> dataView = new SearchableDataView<LdapConfig>("ldapList"

+			, new SearchableDataProvider<LdapConfig>(LdapConfigDao.class)) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void populateItem(final Item<LdapConfig> item) {

+				final LdapConfig lc = item.getModelObject();

+				item.add(new Label("ldapConfigId", "" + lc.getLdapConfigId()));

+				item.add(new Label("name", "" + lc.getName()));

+				item.add(new Label("configFileName", "" + lc.getConfigFileName()));

+				item.add(new AjaxEventBehavior("click") {

+					private static final long serialVersionUID = 1L;

+

+					protected void onEvent(AjaxRequestTarget target) {

+						form.setModelObject(lc);

+						form.hideNewRecord();

+						target.add(form, listContainer);

+						target.appendJavaScript("omLdapPanelInit();");

+					}

+				});

+				item.add(AttributeModifier.replace("class", "clickable ui-widget-content"

+						+ (lc.getLdapConfigId() == form.getModelObject().getLdapConfigId() ? " ui-state-active" : "")));

+			}

+		};

+		add(listContainer.add(dataView).setOutputMarkupId(true));

+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {

+			private static final long serialVersionUID = -1L;

+

+			@Override

+			protected void onEvent(AjaxRequestTarget target) {

+				target.add(listContainer);

+			}

+		};

+		DataViewContainer<LdapConfig> container = new DataViewContainer<LdapConfig>(listContainer, dataView, navigator);

+		container.addLink(new OmOrderByBorder<LdapConfig>("orderById", "ldapConfigId", container))

+			.addLink(new OmOrderByBorder<LdapConfig>("orderByName", "name", container))

+			.addLink(new OmOrderByBorder<LdapConfig>("orderByFile", "configFileName", container));

+		add(container.getLinks());

+		add(navigator);

+		

+		form = new LdapForm("form", listContainer, new LdapConfig());

+		form.showNewRecord();

+        add(form);

+		

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java b/src/web/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java
new file mode 100644
index 0000000..d2e361e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/oauth/OAuthForm.java
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.oauth;
+
+import java.util.Arrays;
+
+import org.apache.openmeetings.db.dao.server.OAuth2Dao;
+import org.apache.openmeetings.db.entity.server.OAuthServer;
+import org.apache.openmeetings.db.entity.server.OAuthServer.RequestMethod;
+import org.apache.openmeetings.web.admin.AdminBaseForm;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.pages.auth.SignInPage;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.time.Duration;
+
+public class OAuthForm extends AdminBaseForm<OAuthServer> {
+	private static final long serialVersionUID = 1L;
+	private WebMarkupContainer listContainer;
+	private TextField<String> redirectUriText;
+
+	public OAuthForm(String id, WebMarkupContainer listContainer, OAuthServer server) {
+		super(id, new CompoundPropertyModel<OAuthServer>(server));
+		this.listContainer = listContainer;
+		setOutputMarkupId(true);
+		
+		add(new CheckBox("isEnabled"));
+		add(new RequiredTextField<String>("name").setLabel(Model.of(Application.getString(1573))));
+		add(new TextField<String>("iconUrl").setLabel(Model.of(Application.getString(1575))));
+		add(new RequiredTextField<String>("clientId").setLabel(Model.of(Application.getString(1576))));
+		add(new RequiredTextField<String>("clientSecret").setLabel(Model.of(Application.getString(1577))));
+		add(redirectUriText = (TextField<String>) new TextField<String>("redirectUri", Model.of("")).setLabel(Model.of(Application.getString(1587))));
+		add(new RequiredTextField<String>("requestKeyUrl").setLabel(Model.of(Application.getString(1578))));
+		add(new RequiredTextField<String>("requestTokenUrl").setLabel(Model.of(Application.getString(1579))));
+		add(new RequiredTextField<String>("requestTokenAttributes").setLabel(Model.of(Application.getString(1586))));
+		add(new RequiredTextField<String>("requestInfoUrl").setLabel(Model.of(Application.getString(1580))));
+		add(new DropDownChoice<RequestMethod>("requestTokenMethod", Arrays.asList(RequestMethod.values()), new ChoiceRenderer<RequestMethod>("name", "name")));
+		add(new RequiredTextField<String>("loginParamName").setLabel(Model.of(Application.getString(1582))));
+		add(new RequiredTextField<String>("emailParamName").setLabel(Model.of(Application.getString(1583))));
+		add(new TextField<String>("firstnameParamName").setLabel(Model.of(Application.getString(1584))));
+		add(new TextField<String>("lastnameParamName").setLabel(Model.of(Application.getString(1585))));
+		
+		// attach an ajax validation behavior to all form component's keydown
+		// event and throttle it down to once per second
+		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));
+	}
+	
+	@Override
+	protected void onModelChanged() {
+		super.onModelChanged();
+		redirectUriText.setModelObject(SignInPage.getRedirectUri(getModelObject(), this));
+	}
+
+	@Override
+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+		OAuth2Dao oAuth2Dao = Application.getBean(OAuth2Dao.class);
+		oAuth2Dao.update(getModelObject(), WebSession.getUserId());
+		OAuthServer oauthServer = oAuth2Dao.get(getModelObject().getId());
+		this.setModelObject(oauthServer);
+		hideNewRecord();
+		target.add(this);
+		target.add(listContainer);
+		target.appendJavaScript("oauthPanelInit();");
+	}
+
+	@Override
+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {
+		this.setModelObject(new OAuthServer());
+		target.add(this);
+		target.appendJavaScript("oauthPanelInit();");
+	}
+
+	@Override
+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+		OAuthServer server = this.getModelObject();
+		if (server.getId() <= 0) {
+			server = Application.getBean(OAuth2Dao.class).get(getModelObject().getId());
+		} else {
+			server = new OAuthServer();
+		}
+		this.setModelObject(server);
+		target.add(this);
+		target.appendJavaScript("oauthPanelInit();");
+	}
+
+	@Override
+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {
+		Application.getBean(OAuth2Dao.class).delete(getModelObject(), WebSession.getUserId());
+		this.setModelObject(new OAuthServer());
+		target.add(listContainer);
+		target.add(this);
+		target.appendJavaScript("oauthPanelInit();");
+	}
+
+	@Override
+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+		
+	}
+	
+	@Override
+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+		
+	}	
+	
+	@Override
+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {
+		// TODO Auto-generated method stub
+		
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/oauth/OAuthPanel.html b/src/web/java/org/apache/openmeetings/web/admin/oauth/OAuthPanel.html
new file mode 100644
index 0000000..4183829
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/oauth/OAuthPanel.html
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+       <script type="text/javascript">
+           function oauthPanelInit() {
+               var documentHeight = $(document).height();
+               $('#adminForm').height(documentHeight-114);
+               $('#adminTable').height(documentHeight-144);
+           }
+       </script>
+    </wicket:head>
+	<wicket:panel>
+		<div class="adminPanel">
+			<div class="adminPanelColumnTable">
+				<span wicket:id="navigator">[dataview navigator]</span>
+				<table class="adminListTable">
+					<thead>
+						<tr>
+							<th class="two_column_layout_column1 ui-widget-header"><span wicket:id="orderById"></span><wicket:message key="1104" /></th>
+							<th class="two_column_layout_column2 ui-widget-header"><span wicket:id="orderByName"></span><wicket:message key="1105" /></th>
+						</tr>
+					</thead>
+				</table>
+				<div class="tableWrapper" id="adminTable">
+					<table class="adminListTable">
+						<tbody wicket:id="listContainer">
+				    		<tr wicket:id="oauthServersList">
+								<td class="two_column_layout_column1"><div class="two_column_layout_divcolumn1"><span wicket:id="oauthServerId"></span></div></td>
+								<td class="two_column_layout_column2"><div class="two_column_layout_divcolumn2"><span wicket:id="name"></span></div></td>
+							</tr>
+						</tbody>			
+					</table>
+				</div>
+			</div>
+			<div class="adminPanelColumnForm">
+				<form wicket:id="form" class="adminForm">
+					<div wicket:id="buttons"></div>
+					<div class="scrollcontent" id="adminForm">
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="1581" /></legend>
+							<div class="formelement">
+								<label><wicket:message key="1574" /></label><input type="checkbox" class="formcheckbox" wicket:id="isEnabled"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1573" /></label><input type="text" wicket:id="name"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1575" /></label><input type="text" wicket:id="iconUrl"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1576" /></label><input type="text" wicket:id="clientId"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1577" /></label><input type="text" wicket:id="clientSecret"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1587" /></label><input type="text" readonly="readonly" wicket:id="redirectUri"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1578" /></label><input type="text" wicket:id="requestKeyUrl"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1579" /></label><input type="text" wicket:id="requestTokenUrl"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1586" /></label><input type="text" wicket:id="requestTokenAttributes"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1580" /></label><input type="text" wicket:id="requestInfoUrl"/>
+							</div>
+							<div class="formelement">
+								<label>Request method</label><select wicket:id="requestTokenMethod"></select>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1582" /></label><input type="text" wicket:id="loginParamName"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1583" /></label><input type="text" wicket:id="emailParamName"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1584" /></label><input type="text" wicket:id="firstnameParamName"/>
+							</div>
+							<div class="formelement">
+								<label><wicket:message key="1585" /></label><input type="text" wicket:id="lastnameParamName"/>
+							</div>
+						</fieldset>
+					</div>
+				</form>
+			</div>
+		</div>
+	</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/admin/oauth/OAuthPanel.java b/src/web/java/org/apache/openmeetings/web/admin/oauth/OAuthPanel.java
new file mode 100644
index 0000000..8fd922a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/oauth/OAuthPanel.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.oauth;
+
+import org.apache.openmeetings.db.dao.server.OAuth2Dao;
+import org.apache.openmeetings.db.entity.server.OAuthServer;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+
+public class OAuthPanel extends AdminPanel {
+	private static final long serialVersionUID = -1L;
+	final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
+	private OAuthForm form;
+
+	public OAuthPanel(String id) {
+		super(id);
+		SearchableDataView<OAuthServer> dataView = new SearchableDataView<OAuthServer>("oauthServersList",
+				new SearchableDataProvider<OAuthServer>(OAuth2Dao.class)) {
+
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(Item<OAuthServer> item) {
+				final OAuthServer server = item.getModelObject();
+				item.add(new Label("oauthServerId", String.valueOf(server.getId())));
+				item.add(new Label("name", server.getName()));
+				item.add(new AjaxEventBehavior("click") {
+
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						form.setModelObject(server);
+						form.hideNewRecord();
+						target.add(form, listContainer);
+						target.appendJavaScript("oauthPanelInit();");
+					}
+				});
+				item.add(AttributeModifier.replace("class", "clickable ui-widget-content"
+						+ (server.getId().equals(form.getModelObject().getId()) ? " ui-state-active" : "")));
+			}
+			
+		};
+		
+		add(listContainer.add(dataView).setOutputMarkupId(true));
+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = -1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(listContainer);
+			}
+		};
+		DataViewContainer<OAuthServer> container = new DataViewContainer<OAuthServer>(listContainer, dataView, navigator);
+		container.addLink(new OmOrderByBorder<OAuthServer>("orderById", "oauthServerId", container))
+			.addLink(new OmOrderByBorder<OAuthServer>("orderByName", "name", container));
+		add(container.getLinks());
+		add(navigator);
+		
+		form = new OAuthForm("form", listContainer, new OAuthServer());
+		form.showNewRecord();
+        add(form);
+	}
+
+}
diff --git a/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java b/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
new file mode 100644
index 0000000..a0849f0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
@@ -0,0 +1,378 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.admin.rooms;

+

+import static org.apache.openmeetings.web.app.Application.getBean;

+import static org.apache.openmeetings.web.app.WebSession.getSid;

+import static org.apache.openmeetings.web.app.WebSession.getUserId;

+

+import java.util.ArrayList;

+import java.util.Arrays;

+import java.util.Collection;

+import java.util.List;

+

+import org.apache.openmeetings.db.dao.room.RoomDao;

+import org.apache.openmeetings.db.dao.server.ISessionManager;

+import org.apache.openmeetings.db.dao.user.IUserService;

+import org.apache.openmeetings.db.dao.user.OrganisationDao;

+import org.apache.openmeetings.db.dao.user.UserDao;

+import org.apache.openmeetings.db.entity.room.Client;

+import org.apache.openmeetings.db.entity.room.Room;

+import org.apache.openmeetings.db.entity.room.RoomModerator;

+import org.apache.openmeetings.db.entity.room.RoomOrganisation;

+import org.apache.openmeetings.db.entity.user.Address;

+import org.apache.openmeetings.db.entity.user.Organisation;

+import org.apache.openmeetings.db.entity.user.User;

+import org.apache.openmeetings.web.admin.AdminBaseForm;

+import org.apache.openmeetings.web.admin.AdminUserChoiceProvider;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;

+import org.apache.openmeetings.web.util.RoomTypeDropDown;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;

+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;

+import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;

+import org.apache.wicket.behavior.AttributeAppender;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.html.form.CheckBox;

+import org.apache.wicket.markup.html.form.ChoiceRenderer;

+import org.apache.wicket.markup.html.form.DropDownChoice;

+import org.apache.wicket.markup.html.form.Form;

+import org.apache.wicket.markup.html.form.RequiredTextField;

+import org.apache.wicket.markup.html.form.TextArea;

+import org.apache.wicket.markup.html.form.TextField;

+import org.apache.wicket.markup.html.list.ListItem;

+import org.apache.wicket.markup.html.list.ListView;

+import org.apache.wicket.model.CompoundPropertyModel;

+import org.apache.wicket.model.IModel;

+import org.apache.wicket.model.Model;

+import org.apache.wicket.model.PropertyModel;

+import org.apache.wicket.util.string.Strings;

+import org.apache.wicket.util.time.Duration;

+import org.wicketstuff.select2.Response;

+import org.wicketstuff.select2.Select2Choice;

+import org.wicketstuff.select2.Select2MultiChoice;

+import org.wicketstuff.select2.TextChoiceProvider;

+

+public class RoomForm extends AdminBaseForm<Room> {

+	private static final long serialVersionUID = 1L;

+	private final static List<Long> DROPDOWN_NUMBER_OF_PARTICIPANTS = Arrays.asList(2L, 4L, 6L, 8L, 10L, 12L, 14L, 16L, 20L, 25L, 32L, 50L,

+			100L, 150L, 200L, 500L, 1000L);

+	private final WebMarkupContainer roomList;

+	private final TextField<String> pin;

+	private final WebMarkupContainer moderatorContainer = new WebMarkupContainer("moderatorContainer");

+	private final WebMarkupContainer clientsContainer = new WebMarkupContainer("clientsContainer");

+	private final ListView<Client> clients;

+	private List<Client> clientsInRoom = null;

+	private IModel<User> moderator2add = Model.of((User)null);

+	

+	public RoomForm(String id, WebMarkupContainer roomList, final Room room) {

+		super(id, new CompoundPropertyModel<Room>(room));

+		this.roomList = roomList;

+		setOutputMarkupId(true);

+		RequiredTextField<String> name = new RequiredTextField<String>("name");

+		name.setLabel(new Model<String>(Application.getString(193)));

+		add(name);

+

+		add(new DropDownChoice<Long>("numberOfPartizipants", //

+				DROPDOWN_NUMBER_OF_PARTICIPANTS, //

+				new ChoiceRenderer<Long>() {

+					private static final long serialVersionUID = 1L;

+					public Object getDisplayValue(Long id) {

+						return id;

+					}

+					public String getIdValue(Long id, int index) {

+						return "" + id;

+					}

+				}));

+

+		add(new RoomTypeDropDown("roomtype").setRequired(true).setLabel(Model.of(Application.getString(194))));

+

+		add(new TextArea<String>("comment"));

+

+		add(new CheckBox("appointment"));

+		add(new CheckBox("ispublic"));

+

+		List<Organisation> orgList = Application.getBean(OrganisationDao.class).get(0, Integer.MAX_VALUE);

+		final List<RoomOrganisation> orgRooms = new ArrayList<RoomOrganisation>(orgList.size());

+		for (Organisation org : orgList) {

+			orgRooms.add(new RoomOrganisation(org, getModelObject()));

+		}

+		add(new Select2MultiChoice<RoomOrganisation>("roomOrganisations", null, new TextChoiceProvider<RoomOrganisation>() {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected String getDisplayText(RoomOrganisation choice) {

+				String name = choice.getOrganisation().getName();

+				return name == null ? "" : name;

+			}

+

+			@Override

+			protected Object getId(RoomOrganisation choice) {

+				return choice.getOrganisation().getOrganisation_id();

+			}

+

+			@Override

+			public void query(String term, int page, Response<RoomOrganisation> response) {

+				for (RoomOrganisation or : orgRooms) {

+					if (Strings.isEmpty(term) || (!Strings.isEmpty(term) && or.getOrganisation().getName().contains(term))) {

+						response.add(or);

+					}

+				}

+			}

+

+			@Override

+			public Collection<RoomOrganisation> toChoices(Collection<String> _ids) {

+				List<Long> ids = new ArrayList<Long>();

+				for (String id : _ids) {

+					ids.add(Long.parseLong(id));

+				}

+				List<RoomOrganisation> list = new ArrayList<RoomOrganisation>();

+				for (Organisation o : getBean(OrganisationDao.class).get(ids)) {

+					list.add(new RoomOrganisation(o, RoomForm.this.getModelObject()));

+				}

+				return list;

+			}

+		}));

+

+		add(new CheckBox("isDemoRoom"));

+		TextField<Integer> demoTime = new TextField<Integer>("demoTime");

+		demoTime.setLabel(new Model<String>(Application.getString(637)));

+		add(demoTime);

+		add(new CheckBox("allowUserQuestions"));

+		add(new CheckBox("isAudioOnly"));

+		add(new CheckBox("allowFontStyles"));

+		add(new CheckBox("isClosed"));

+		add(new TextField<String>("redirectURL"));

+		add(new CheckBox("waitForRecording"));

+		add(new CheckBox("allowRecording"));

+

+		add(new CheckBox("hideTopBar"));

+		add(new CheckBox("hideChat"));

+		add(new CheckBox("hideActivitiesAndActions"));

+		add(new CheckBox("hideFilesExplorer"));

+		add(new CheckBox("hideActionsMenu"));

+		add(new CheckBox("hideScreenSharing"));

+		add(new CheckBox("hideWhiteboard"));

+		add(new CheckBox("showMicrophoneStatus"));

+		add(new CheckBox("chatModerated"));

+		add(new CheckBox("chatOpened"));

+		add(new CheckBox("filesOpened"));

+		add(new CheckBox("autoVideoSelect"));	

+		

+		// Users in this Room 

+		clients = new ListView<Client>("clients", clientsInRoom) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void populateItem(final ListItem<Client> item) {

+				Client client = item.getModelObject();

+				item.add(new Label("clientId", "" + client.getId()))

+					.add(new Label("clientLogin", "" + client.getUsername()))

+					.add(new ConfirmableAjaxBorder("clientDelete", getString("80"), getString("833")) {

+						private static final long serialVersionUID = 1L;

+

+						@Override

+						protected void onSubmit(AjaxRequestTarget target, Form<?> form) {

+							Client c = item.getModelObject();

+							getBean(IUserService.class).kickUserByStreamId(getSid(), c.getStreamid()

+									, c.getServer() == null ? 0 : c.getServer().getId());

+							

+							updateClients(target);

+						}

+					});

+			}

+		};

+		add(clientsContainer.add(clients.setOutputMarkupId(true)).setOutputMarkupId(true));

+		

+		// Moderators

+		final Select2Choice<User> moderatorChoice = new Select2Choice<User>("moderator2add", moderator2add, new AdminUserChoiceProvider() {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			public void query(String term, int page, Response<User> response) {

+				response.addAll(getBean(UserDao.class).get(term, false, page * PAGE_SIZE, PAGE_SIZE));

+				response.setHasMore(PAGE_SIZE == response.getResults().size());

+			}

+

+			@Override

+			protected String getDisplayText(User choice) {

+				Address a = choice.getAdresses();

+				return String.format("\"%s %s\" <%s>", choice.getFirstname(), choice.getLastname(), a == null ? "" : a.getEmail());

+			}

+		});

+		add(moderatorChoice.add(new AjaxFormComponentUpdatingBehavior("change") {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void onUpdate(AjaxRequestTarget target) {

+				Room r = RoomForm.this.getModelObject();

+				User u = moderator2add.getObject();

+				boolean found = false;

+				if (u != null) {

+					if (r.getModerators() == null) {

+						r.setModerators(new ArrayList<RoomModerator>());

+					}

+					for (RoomModerator rm : r.getModerators()) {

+						if (rm.getUser().getUser_id().equals(u.getUser_id())) {

+							found = true;

+							break;

+						}

+					}

+					if (!found) {

+						RoomModerator rm = new RoomModerator();

+						rm.setRoomId(r.getRooms_id());

+						rm.setUser(u);

+						r.getModerators().add(0, rm);

+						moderator2add.setObject(null);

+						target.add(moderatorContainer, moderatorChoice);

+					}

+				}

+			}

+		}).setOutputMarkupId(true));

+		add(moderatorContainer.add(new ListView<RoomModerator>("moderators") {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void populateItem(final ListItem<RoomModerator> item) {

+				RoomModerator moderator = item.getModelObject();

+				Label name = new Label("uName", moderator.getUser().getFirstname() + " " + moderator.getUser().getLastname());

+				if (moderator.getRoomModeratorsId() == 0) {

+					name.add(AttributeAppender.append("class", "newItem"));

+				}

+				item.add(new CheckBox("isSuperModerator", new PropertyModel<Boolean>(moderator, "isSuperModerator")))

+					.add(new Label("userId", "" + moderator.getUser().getUser_id()))

+					.add(name)

+					.add(new Label("email", moderator.getUser().getAdresses().getEmail()))

+					.add(new ConfirmableAjaxBorder("delete", getString("80"), getString("833")) {

+						private static final long serialVersionUID = 1L;

+

+						@Override

+						protected void onSubmit(AjaxRequestTarget target, Form<?> form) {

+							RoomForm.this.getModelObject().getModerators().remove(item.getIndex());

+							target.add(moderatorContainer);

+						}

+					});

+			}

+		}).setOutputMarkupId(true));

+

+        add(new CheckBox("isModeratedRoom"));

+

+		add(new TextField<String>("confno").setEnabled(false));

+		add(pin = new TextField<String>("pin"));

+		pin.setEnabled(room.isSipEnabled());

+		add(new TextField<String>("ownerId").setEnabled(false));

+		add(new AjaxCheckBox("sipEnabled") {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void onUpdate(AjaxRequestTarget target) {

+				updateView(target);

+			}

+		}.setOutputMarkupId(true));

+		

+		// attach an ajax validation behavior to all form component's keydown

+		// event and throttle it down to once per second

+		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));

+	}

+

+	void updateClients(AjaxRequestTarget target) {

+		long roomId = (getModelObject().getRooms_id() != null ? getModelObject().getRooms_id() : 0);  

+		final List<Client> clientsInRoom = Application.getBean(ISessionManager.class).getClientListByRoom(roomId);

+		clients.setDefaultModelObject(clientsInRoom);

+		target.add(clientsContainer);

+	}

+	

+	@Override

+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {

+		Room r = getModelObject();

+		boolean newRoom = r.getRooms_id() == null;

+		r = getBean(RoomDao.class).update(r, getUserId());

+		if (newRoom) {

+			for (RoomModerator rm : r.getModerators()) {

+				rm.setRoomId(r.getRooms_id());

+			}

+			// FIXME double update

+			getBean(RoomDao.class).update(getModelObject(), getUserId());

+		}

+		hideNewRecord();

+		updateView(target);

+	}

+

+	@Override

+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {

+		setModelObject(new Room());

+		updateView(target);

+	}

+

+	@Override

+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {

+		Room r = getModelObject();

+		if (r.getRooms_id() != null) {

+			r = getBean(RoomDao.class).get(r.getRooms_id());

+		} else {

+			r = new Room();

+		}

+		setModelObject(r);

+		updateView(target);

+	}

+

+	@Override

+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {

+		getBean(RoomDao.class).delete(getModelObject(), getUserId());

+		target.add(roomList);

+		setModelObject(new Room());

+		updateView(target);

+	}

+

+	@Override

+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	public void updateView(AjaxRequestTarget target) {

+		target.add(this);

+		target.add(roomList);

+		target.add(pin.setEnabled(getModelObject().isSipEnabled()));

+		updateClients(target);

+		target.appendJavaScript("omRoomPanelInit();");

+	}

+	

+	@Override

+	protected void onDetach() {

+		moderator2add.detach();

+		super.onDetach();

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html b/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
new file mode 100644
index 0000000..bbf053a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
@@ -0,0 +1,263 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+	   <script type="text/javascript">
+           function omRoomPanelInit() {
+               var documentHeight = $(document).height();
+               $('#adminForm').height(documentHeight-114);
+               $('#adminTable').height(documentHeight-144);
+           }
+       </script>
+    </wicket:head>
+	<wicket:panel>
+		<div class="adminPanel">
+			<div class="adminPanelColumnTable rooms">
+				<span wicket:id="navigator">[dataview navigator]</span>
+				<table class="adminListTable">
+					<thead>
+						<tr>
+							<th class="three_column_layout_column1 ui-widget-header"><span wicket:id="orderById"></span><wicket:message key="188" /></th>
+							<th class="three_column_layout_column2 ui-widget-header"><span wicket:id="orderByName"></span><wicket:message key="189" /></th>
+							<th class="three_column_layout_column3 ui-widget-header"><span wicket:id="orderByPublic"></span><wicket:message key="190" /></th>
+						</tr>	
+					</thead>
+				</table>
+				<div class="tableWrapper" id="adminTable">
+					<table class="adminListTable">
+						<tbody wicket:id="listContainer">		
+				    		<tr wicket:id="roomList">
+								<td class="three_column_layout_column1"><div class="three_column_layout_divcolumn1"><span wicket:id="rooms_id"></span></div></td>
+								<td class="three_column_layout_column2"><div class="three_column_layout_divcolumn2"><span wicket:id="name"></span></div></td>
+								<td class="three_column_layout_column3"><div class="three_column_layout_divcolumn3"><span wicket:id="ispublic"></span></div></td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="adminPanelColumnForm">
+				<form wicket:id="form" class="adminForm">
+					<div wicket:id="buttons"></div>
+					<div class="scrollcontent" id="adminForm">
+						
+						<!-- General -->
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="187" /></legend>
+							<div class="formelement">
+                                <label><wicket:message key="193" /></label><input type="text" wicket:id="name" />
+							</div>
+							<div class="formelement">
+                                <label><wicket:message key="482" /></label><select wicket:id="numberOfPartizipants"/>
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="194" /></label><select wicket:id="roomtype"/>
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="196" /></label><textarea style="width: 200px; height: 100px;" wicket:id="comment"/>
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="620" /></label><input type="checkbox" class="formcheckbox" wicket:id="appointment" />
+                            </div>
+				        </fieldset>
+				        
+				        <!-- Organisations -->
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="191" /></legend>
+				            <div class="formelement">
+                                <label><wicket:message key="195" /></label><input type="checkbox" class="formcheckbox" wicket:id="ispublic" />
+				            </div>
+				            <div class="formelement">
+				                <div class="info-text"><wicket:message key="828" /></div>
+				                <label><wicket:message key="191" /></label><input type="hidden" class="input" wicket:id="roomOrganisations" style="max-height: 80px"/>
+				            </div>
+				        </fieldset>
+				        
+				        <!-- Limitations -->
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="830" /></legend>
+				            <div class="formelement">
+                                <label><wicket:message key="636" /></label><input type="checkbox" class="formcheckbox" wicket:id="isDemoRoom" />
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="637" /></label><input type="text" wicket:id="demoTime" />
+                            </div>
+						</fieldset>
+						
+						<!-- Rights -->
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="881" /></legend>
+				            <div class="formelement">
+                                <label><wicket:message key="879" /></label><input type="checkbox" class="formcheckbox" wicket:id="allowUserQuestions" />
+				            </div>
+				            <div class="formelement">
+                                <wicket:message key="880" />
+				                <br/>
+				                <label><wicket:message key="1076" /></label><input type="checkbox" class="formcheckbox" wicket:id="isAudioOnly" />
+				            </div>
+				            <div class="formelement">
+				                <div class="info-text"><wicket:message key="1077" /></div>
+				                <label><wicket:message key="1531" /></label><input type="checkbox" class="formcheckbox" wicket:id="allowFontStyles" />
+				            </div>
+				            <div class="formelement">
+					            <div class="info-text"><wicket:message key="1101" /></div>
+				                <label><wicket:message key="1099" /></label><input type="checkbox" class="formcheckbox" wicket:id="isClosed" />
+				            </div>
+				            <div class="formelement">
+				                <label><wicket:message key="1100" /></label><input type="text" wicket:id="redirectURL" />
+							</div>
+							<div class="formelement">
+							    <div class="info-text"><wicket:message key="1102" /></div>
+                                <br/>
+				                <label><wicket:message key="1356" /></label><input type="checkbox" class="formcheckbox" wicket:id="waitForRecording" />
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="1355" /></label><input type="checkbox" class="formcheckbox" wicket:id="allowRecording" />
+				            </div>
+						</fieldset>
+						
+						<!-- Room Layout options -->
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="1443" /></legend>
+							<div class="formelement">
+                                <label><wicket:message key="1357" /></label><input type="checkbox" class="formcheckbox" wicket:id="hideTopBar" />
+				            </div>
+				            <div class="formelement">
+				                <label><wicket:message key="1436" /></label><input type="checkbox" class="formcheckbox" wicket:id="hideChat" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1437" /></label><input type="checkbox" class="formcheckbox" wicket:id="hideActivitiesAndActions" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1438" /></label><input type="checkbox" class="formcheckbox" wicket:id="hideFilesExplorer" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1439" /></label><input type="checkbox" class="formcheckbox" wicket:id="hideActionsMenu" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1440" /></label><input type="checkbox" class="formcheckbox" wicket:id="hideScreenSharing" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1441" /></label><input type="checkbox" class="formcheckbox" wicket:id="hideWhiteboard" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1442" /></label><input type="checkbox" class="formcheckbox" wicket:id="showMicrophoneStatus" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1513" /></label><input type="checkbox" class="formcheckbox" wicket:id="chatModerated" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1515" /></label><input type="checkbox" class="formcheckbox" wicket:id="chatOpened" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1516" /></label><input type="checkbox" class="formcheckbox" wicket:id="filesOpened" />
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1526" /></label><input type="checkbox" class="formcheckbox" wicket:id="autoVideoSelect" />
+				            </div>
+						</fieldset>
+						
+						<!-- Users in this Room -->
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="587" /></legend>
+							<table class="adminListTable">
+								<thead>
+									<tr>
+										<th class="three_column_layout_column1 ui-widget-header"><wicket:message key="588" /></th>
+										<th class="three_column_layout_column2 ui-widget-header"><wicket:message key="589" /></th>
+										<th class="three_column_layout_column3 ui-widget-header"><wicket:message key="590" /></th>
+									</tr>	
+								</thead>
+							</table>
+							<div class="tableWrapperSmall" id="adminTableSmall">
+								<table class="adminListTable">
+									<tbody wicket:id="clientsContainer">		
+							    		<tr wicket:id="clients">
+											<td class="three_column_layout_column1"><div class="three_column_layout_divcolumn1"><span wicket:id="clientId"></span></div></td>
+											<td class="three_column_layout_column2"><div class="three_column_layout_divcolumn2"><span wicket:id="clientLogin"></span></div></td>
+											<td class="three_column_layout_column3"><div class="formCancelButton" wicket:id="clientDelete" wicket:message="title:604"></div></td>
+										</tr>
+									</tbody>
+								</table>
+							</div>
+						</fieldset>
+						
+						<!-- Default moderators -->
+						<fieldset class="ui-widget-content">
+                            <div class="formelement">
+				            	<div class="info-text"><wicket:message key="823" /></div>
+				                <label><wicket:message key="640" /></label><input type="checkbox" class="formcheckbox" wicket:id="isModeratedRoom" />
+				            </div>
+	                        <div class="formelement">
+					            <label><wicket:message key="816" /></label><input type="hidden" wicket:id="moderator2add" class="input"/>
+				            </div>
+				            <div class="formelement" wicket:id="moderatorContainer">
+								<table class="adminListTableSmall">
+									<thead>
+										<tr>
+											<th class="three_column_layout_column1 ui-widget-header" style="overflow: hidden;" wicket:message="title:817"><wicket:message key="817" /></th>
+											<th class="three_column_layout_column2 ui-widget-header"><wicket:message key="818" /></th>
+											<th class="three_column_layout_column3 ui-widget-header"><wicket:message key="819" /></th>
+											<th class="three_column_layout_column4 ui-widget-header"><wicket:message key="820" /></th>
+											<th class="three_column_layout_column5 ui-widget-header"><wicket:message key="827" /></th>
+										</tr>	
+									</thead>
+								</table>
+								<div class="tableWrapperSmall" id="adminTableSmall">
+									<table class="adminListTableSmall">
+										<tbody>		
+								    		<tr wicket:id="moderators">
+												<td class="three_column_layout_column1"><div class="three_column_layout_divcolumn1"><input type="checkbox" wicket:id="isSuperModerator"/></div></td>
+												<td class="three_column_layout_column2"><div class="three_column_layout_divcolumn2"><span wicket:id="userId"></span></div></td>
+												<td class="three_column_layout_column3"><div class="three_column_layout_divcolumn3"><span wicket:id="uName"></span></div></td>
+												<td class="three_column_layout_column4"><div class="three_column_layout_divcolumn4" style="overflow: hidden;"><span wicket:id="email"></span></div></td>
+						                        <td style="width: 50px"><div style="width: 50px"><div class="formCancelButton" wicket:id="delete" wicket:message="title:274"></div></div></td>
+											</tr>
+										</tbody>
+									</table>
+								</div>
+							</div>
+						</fieldset>
+					    <!--SIP Settings -->
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="1001" /></legend>
+				            <div class="formelement">
+				                <div class="info-text"><wicket:message key="1002" /></div>
+                                <br/>
+                            </div>
+				            <div class="formelement">
+				                <label><wicket:message key="1003" /></label><input type="text" wicket:id="confno" />
+							</div>
+				            <div class="formelement">
+				                <label><wicket:message key="1004" /></label><input type="text" wicket:id="pin" />
+							</div>
+				            <div class="formelement">
+				                <label><wicket:message key="1308" /></label><input type="text" wicket:id="ownerId" />
+							</div>
+				            <div class="formelement">
+				                <label><wicket:message key="1538" /></label><input type="checkbox" class="formcheckbox" wicket:id="sipEnabled" />
+				            </div>
+						</fieldset>
+					</div>
+				</form>
+			</div>
+		</div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.java b/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.java
new file mode 100644
index 0000000..09a2b8d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.java
@@ -0,0 +1,96 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.admin.rooms;

+

+import static org.apache.openmeetings.web.app.Application.getBean;

+

+import org.apache.openmeetings.db.dao.room.RoomDao;

+import org.apache.openmeetings.db.entity.room.Room;

+import org.apache.openmeetings.web.admin.AdminPanel;

+import org.apache.openmeetings.web.admin.SearchableDataView;

+import org.apache.openmeetings.web.common.PagedEntityListPanel;

+import org.apache.openmeetings.web.data.DataViewContainer;

+import org.apache.openmeetings.web.data.OmOrderByBorder;

+import org.apache.openmeetings.web.data.SearchableDataProvider;

+import org.apache.wicket.AttributeModifier;

+import org.apache.wicket.ajax.AjaxEventBehavior;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.repeater.Item;

+

+public class RoomsPanel extends AdminPanel {

+	private static final long serialVersionUID = -1L;

+	final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");

+	private RoomForm form;

+	

+	@Override

+	public void onMenuPanelLoad(IPartialPageRequestHandler target) {

+		super.onMenuPanelLoad(target);

+		target.appendJavaScript("omRoomPanelInit();");

+	}

+

+	public RoomsPanel(String id) {

+		super(id);

+		SearchableDataView<Room> dataView = new SearchableDataView<Room>("roomList", new SearchableDataProvider<Room>(RoomDao.class)) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void populateItem(final Item<Room> item) {

+				Room room = item.getModelObject();

+				final long roomId = room.getRooms_id();

+				item.add(new Label("rooms_id", "" + room.getRooms_id()));

+				item.add(new Label("name", "" + room.getName()));

+				item.add(new Label("ispublic", "" + room.getIspublic()));

+				item.add(new AjaxEventBehavior("click") {

+					private static final long serialVersionUID = 1L;

+

+					protected void onEvent(AjaxRequestTarget target) {

+						form.hideNewRecord();

+						form.setModelObject(getBean(RoomDao.class).get(roomId));

+						form.updateView(target);

+						target.add(form, listContainer);

+						target.appendJavaScript("omRoomPanelInit();");

+					}

+				});

+				item.add(AttributeModifier.replace("class", "clickable ui-widget-content"

+						+ (room.getRooms_id().equals(form.getModelObject().getRooms_id()) ? " ui-state-active" : "")));

+			}

+		};

+		

+		add(listContainer.add(dataView).setOutputMarkupId(true));

+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {

+			private static final long serialVersionUID = -1L;

+

+			@Override

+			protected void onEvent(AjaxRequestTarget target) {

+				target.add(listContainer);

+			}

+		};

+		DataViewContainer<Room> container = new DataViewContainer<Room>(listContainer, dataView, navigator);

+		container.addLink(new OmOrderByBorder<Room>("orderById", "rooms_id", container))

+			.addLink(new OmOrderByBorder<Room>("orderByName", "name", container))

+			.addLink(new OmOrderByBorder<Room>("orderByPublic", "ispublic", container));

+		add(container.getLinks());

+		add(navigator);

+

+        add(form = new RoomForm("form", listContainer, new Room()));

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/admin/servers/ServerForm.java b/src/web/java/org/apache/openmeetings/web/admin/servers/ServerForm.java
new file mode 100644
index 0000000..d2ded20
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/servers/ServerForm.java
@@ -0,0 +1,140 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.admin.servers;

+

+import static org.apache.openmeetings.util.OpenmeetingsVariables.WEB_DATE_PATTERN;

+import static org.apache.wicket.datetime.markup.html.basic.DateLabel.forDatePattern;

+

+import org.apache.openmeetings.db.dao.server.ServerDao;

+import org.apache.openmeetings.db.entity.server.Server;

+import org.apache.openmeetings.web.admin.AdminBaseForm;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.openmeetings.web.app.WebSession;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.html.form.CheckBox;

+import org.apache.wicket.markup.html.form.Form;

+import org.apache.wicket.markup.html.form.RequiredTextField;

+import org.apache.wicket.markup.html.form.TextArea;

+import org.apache.wicket.markup.html.form.TextField;

+import org.apache.wicket.model.CompoundPropertyModel;

+import org.apache.wicket.model.Model;

+import org.apache.wicket.util.time.Duration;

+

+/**

+ * Form component to insert/update/delete {@link Server}

+ * 

+ * @author swagner

+ * 

+ */

+public class ServerForm extends AdminBaseForm<Server> {

+	private final WebMarkupContainer listContainer;

+	private static final long serialVersionUID = 1L;

+

+	public ServerForm(String id, WebMarkupContainer listContainer, final Server server) {

+		super(id, new CompoundPropertyModel<Server>(server));

+		setOutputMarkupId(true);

+		this.listContainer = listContainer;

+

+		add(new RequiredTextField<String>("name").setLabel(Model.of(Application.getString(1500))));

+		add(new CheckBox("active"));

+		add(new RequiredTextField<String>("address").setLabel(Model.of(Application.getString(1501))));

+		add(new TextField<Integer>("port"));

+		add(new TextField<String>("user"));

+		add(new TextField<String>("pass"));

+		add(new TextField<String>("webapp"));

+		add(new TextField<String>("protocol"));

+		add(forDatePattern("lastPing", WEB_DATE_PATTERN));

+		//add(new Label("pingRunning"));

+		add(forDatePattern("inserted", WEB_DATE_PATTERN));

+		add(new Label("insertedby.login"));

+		add(forDatePattern("updated", WEB_DATE_PATTERN));

+		add(new Label("updatedby.login"));

+		add(new TextArea<String>("comment"));

+

+		// attach an ajax validation behavior to all form component's keydown

+		// event and throttle it down to once per second

+		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));

+	}

+

+	@Override

+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {

+		Application.getBean(ServerDao.class).update(getModelObject(), WebSession.getUserId());

+		Server server = Application.getBean(ServerDao.class).get(getModelObject().getId());

+		setModelObject(server);

+		hideNewRecord();

+		target.add(this);

+		target.add(listContainer);

+		target.appendJavaScript("omServerPanelInit();");

+	}

+

+	@Override

+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {

+		Server s = new Server();

+		s.setWebapp("openmeetings");

+		s.setProtocol("http");

+		setModelObject(s);

+		target.add(this);

+		target.appendJavaScript("omServerPanelInit();");

+	}

+

+	@Override

+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {

+		Server server = getModelObject();

+		if (server.getId() > 0) {

+			server = Application.getBean(ServerDao.class).get(server.getId());

+		} else {

+			server = new Server();

+		}

+		setModelObject(server);

+		target.add(this);

+		target.appendJavaScript("omServerPanelInit();");

+	}

+

+	@Override

+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {

+		Application.getBean(ServerDao.class).delete(getModelObject(), WebSession.getUserId());

+		this.setModelObject(new Server());

+		target.add(listContainer);

+		target.add(this);

+		target.appendJavaScript("omServerPanelInit();");

+	}

+

+	@Override

+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/admin/servers/ServersPanel.html b/src/web/java/org/apache/openmeetings/web/admin/servers/ServersPanel.html
new file mode 100644
index 0000000..483e56e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/servers/ServersPanel.html
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+       <script type="text/javascript">
+           function omServerPanelInit() {
+               var documentHeight = $(document).height();
+               $('#adminForm').height(documentHeight-114);
+               $('#adminTable').height(documentHeight-144);
+           }
+       </script>
+    </wicket:head>
+	<wicket:panel>
+		<div class="adminPanel">
+			<div class="adminPanelColumnTable">
+				<span wicket:id="navigator">[dataview navigator]</span>
+				<table class="adminListTable">
+					<thead>
+						<tr>
+							<th class="three_column_layout_column1 ui-widget-header"><span wicket:id="orderById"></span><wicket:message key="188" /></th>
+							<th class="three_column_layout_column2 ui-widget-header"><span wicket:id="orderByName"></span><wicket:message key="1500" /></th>
+							<th class="three_column_layout_column3 ui-widget-header"><span wicket:id="orderByAddress"></span><wicket:message key="1501" /></th>
+						</tr>	
+					</thead>
+				</table>
+				<div class="tableWrapper" id="adminTable">
+					<table class="adminListTable">
+						<tbody wicket:id="listContainer">	
+				    		<tr wicket:id="serverList">
+								<td class="three_column_layout_column1"><div class="three_column_layout_divcolumn1"><span wicket:id="id"></span></div></td>
+								<td class="three_column_layout_column2"><div class="three_column_layout_divcolumn2"><span wicket:id="name"></span></div></td>
+								<td class="three_column_layout_column3"><div class="three_column_layout_divcolumn3"><span wicket:id="address"></span></div></td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="adminPanelColumnForm">
+				<form wicket:id="form" class="adminForm">
+					<div wicket:id="buttons"></div>
+					<div class="scrollcontent" id="adminForm">
+						<fieldset class="ui-widget-content">
+							<legend class="ui-widget-header"><wicket:message key="1502" /></legend>
+							<div class="formelement">
+                                <label><wicket:message key="1500" /></label><input type="text" wicket:id="name"/>
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="1525" /></label><input type="checkbox" class="formcheckbox" wicket:id="active" />
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="1501" /></label><input type="text" wicket:id="address"/>
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="1519" /></label><input type="text" wicket:id="port"/>
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="1520" /></label><input type="text" wicket:id="user"/>
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="1521" /></label><input type="text" wicket:id="pass"/>
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="1522" /></label><input type="text" wicket:id="webapp"/>
+				            </div>
+				            <div class="formelement">
+                                <label><wicket:message key="1523" /></label><input type="text" wicket:id="protocol"/>
+				            </div>
+				            <div class="formelement">
+					            <div class="info-text"><wicket:message key="1518" /></div>
+	                                <br/>
+                                <label><wicket:message key="1517" /></label><span wicket:id="lastPing"/>
+                                <!-- br/>
+                                <label><wicket:message key="1524" /></label><span wicket:id="pingRunning"/-->
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1110" /></label><span wicket:id="inserted"/>
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1111" /></label><span wicket:id="insertedby.login"/>
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1112" /></label><span wicket:id="updated"/>
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="1113" /></label><span wicket:id="updatedby.login"/>
+				            </div>
+                            <div class="formelement">
+                                <label><wicket:message key="270" /></label><textarea wicket:id="comment"/>
+				            </div>
+				        </fieldset>
+				    </div>
+				</form>
+			</div>
+		</div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/servers/ServersPanel.java b/src/web/java/org/apache/openmeetings/web/admin/servers/ServersPanel.java
new file mode 100644
index 0000000..1461422
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/servers/ServersPanel.java
@@ -0,0 +1,102 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.admin.servers;

+

+import org.apache.openmeetings.db.dao.server.ServerDao;

+import org.apache.openmeetings.db.entity.server.Server;

+import org.apache.openmeetings.web.admin.AdminPanel;

+import org.apache.openmeetings.web.admin.SearchableDataView;

+import org.apache.openmeetings.web.common.PagedEntityListPanel;

+import org.apache.openmeetings.web.data.DataViewContainer;

+import org.apache.openmeetings.web.data.OmOrderByBorder;

+import org.apache.openmeetings.web.data.SearchableDataProvider;

+import org.apache.wicket.AttributeModifier;

+import org.apache.wicket.ajax.AjaxEventBehavior;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.repeater.Item;

+

+/**

+ * Form component with list and form to manipulate {@link Server}

+ * 

+ * @author swagner

+ * 

+ */

+public class ServersPanel extends AdminPanel {

+	private static final long serialVersionUID = 1L;

+	final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");

+	private ServerForm form;

+	

+	@Override

+	public void onMenuPanelLoad(IPartialPageRequestHandler target) {

+		super.onMenuPanelLoad(target);

+		target.appendJavaScript("omServerPanelInit();");

+	}

+

+	public ServersPanel(String id) {

+		super(id);

+		SearchableDataView<Server> dataView = new SearchableDataView<Server>("serverList",

+				new SearchableDataProvider<Server>(ServerDao.class)) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void populateItem(final Item<Server> item) {

+				final Server server = item.getModelObject();

+				item.add(new Label("id", "" + server.getId()));

+				item.add(new Label("name", "" + server.getName()));

+				item.add(new Label("address", "" + server.getAddress()));

+				item.add(new AjaxEventBehavior("click") {

+					private static final long serialVersionUID = 1L;

+

+					protected void onEvent(AjaxRequestTarget target) {

+						form.setModelObject(server);

+						form.hideNewRecord();

+						target.add(form, listContainer);

+						target.appendJavaScript("omServerPanelInit();");

+					}

+				});

+				item.add(AttributeModifier.replace("class", "clickable ui-widget-content"

+						+ (server.getId().equals(form.getModelObject().getId()) ? " ui-state-active" : "")));

+			}

+		};

+		

+		add(listContainer.add(dataView).setOutputMarkupId(true));

+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void onEvent(AjaxRequestTarget target) {

+				target.add(listContainer);

+			}

+		};

+		DataViewContainer<Server> container = new DataViewContainer<Server>(listContainer, dataView, navigator);

+		container.addLink(new OmOrderByBorder<Server>("orderById", "id", container))

+			.addLink(new OmOrderByBorder<Server>("orderByName", "name", container))

+			.addLink(new OmOrderByBorder<Server>("orderByAddress", "address", container));

+		add(container.getLinks());

+		add(navigator);

+		

+		form = new ServerForm("form", listContainer, new Server());

+		form.showNewRecord();

+        add(form);

+		

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/admin/users/UserForm.html b/src/web/java/org/apache/openmeetings/web/admin/users/UserForm.html
new file mode 100644
index 0000000..0711634
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/users/UserForm.html
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div wicket:id="buttons"></div>
+	<div class="scrollcontent" id="adminForm">
+		<fieldset class="ui-widget-content">
+			<legend class="ui-widget-header">
+				<wicket:message key="143" />
+			</legend>
+			<div class="formelement">
+				<label><wicket:message key="132" /></label><input type="text" wicket:id="login" />
+			</div>
+			<form wicket:id="general"></form>
+			<div class="formelement">
+				<label><wicket:message key="45" /></label><select wicket:id="type"></select>
+			</div>
+			<div class="formelement" wicket:id="domain">
+				<label><wicket:message key="1118" /></label><select wicket:id="domainId"></select>
+			</div>
+			<div class="formelement">
+				<label><wicket:message key="1308" /></label><span wicket:id="ownerId"></span>
+			</div>
+			<div class="formelement">
+				<label><wicket:message key="1110" /></label><span wicket:id="starttime" />
+			</div>
+			<div class="formelement">
+				<label><wicket:message key="1112" /></label><span wicket:id="updatetime" />
+			</div>
+			<div class="formelement">
+				<div class="info-text">
+					<wicket:message key="1149" />
+				</div>
+				<br /> <label><wicket:message key="1148" /></label><input class="formcheckbox" type="checkbox"
+					wicket:id="forceTimeZoneCheck" />
+			</div>
+			<div class="formelement">
+				<label><wicket:message key="881" /></label><input type="hidden" class="input" wicket:id="rights" />
+			</div>
+		</fieldset>
+		<fieldset class="ui-widget-content">
+			<legend class="ui-widget-header">
+				<wicket:message key="1159" />
+			</legend>
+			<form wicket:id="comunity"></form>
+		</fieldset>
+	</div>
+</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/admin/users/UserForm.java b/src/web/java/org/apache/openmeetings/web/admin/users/UserForm.java
new file mode 100644
index 0000000..a66a29c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/users/UserForm.java
@@ -0,0 +1,300 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.admin.users;

+

+import static org.apache.openmeetings.db.util.UserHelper.getMinLoginLength;

+import static org.apache.openmeetings.util.OpenmeetingsVariables.WEB_DATE_PATTERN;

+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;

+import static org.apache.openmeetings.web.app.Application.getBean;

+import static org.apache.openmeetings.web.app.WebSession.getUserId;

+import static org.apache.wicket.datetime.markup.html.basic.DateLabel.forDatePattern;

+import static org.apache.wicket.validation.validator.StringValidator.minimumLength;

+

+import java.util.ArrayList;

+import java.util.Arrays;

+import java.util.Collection;

+import java.util.Hashtable;

+import java.util.List;

+import java.util.Map;

+

+import org.apache.openmeetings.data.user.EmailManager;

+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;

+import org.apache.openmeetings.db.dao.server.LdapConfigDao;

+import org.apache.openmeetings.db.dao.server.OAuth2Dao;

+import org.apache.openmeetings.db.dao.user.UserDao;

+import org.apache.openmeetings.db.entity.server.LdapConfig;

+import org.apache.openmeetings.db.entity.server.OAuthServer;

+import org.apache.openmeetings.db.entity.user.User;

+import org.apache.openmeetings.db.entity.user.User.Right;

+import org.apache.openmeetings.db.entity.user.User.Type;

+import org.apache.openmeetings.web.admin.AdminBaseForm;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.openmeetings.web.common.ComunityUserForm;

+import org.apache.openmeetings.web.common.GeneralUserForm;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;

+import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.html.form.CheckBox;

+import org.apache.wicket.markup.html.form.ChoiceRenderer;

+import org.apache.wicket.markup.html.form.DropDownChoice;

+import org.apache.wicket.markup.html.form.Form;

+import org.apache.wicket.markup.html.form.RequiredTextField;

+import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;

+import org.apache.wicket.markup.html.panel.PanelMarkupSourcingStrategy;

+import org.apache.wicket.model.CompoundPropertyModel;

+import org.apache.wicket.model.Model;

+import org.apache.wicket.util.time.Duration;

+import org.red5.logging.Red5LoggerFactory;

+import org.slf4j.Logger;

+import org.wicketstuff.select2.Response;

+import org.wicketstuff.select2.Select2MultiChoice;

+import org.wicketstuff.select2.TextChoiceProvider;

+

+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;

+

+/**

+ * CRUD operations in form for {@link User}

+ * 

+ * @author swagner

+ * 

+ */

+public class UserForm extends AdminBaseForm<User> {

+	private static final long serialVersionUID = 1L;

+	private static final Logger log = Red5LoggerFactory.getLogger(UserForm.class, webAppRootKey);

+	private final WebMarkupContainer listContainer;

+	private final WebMarkupContainer domain = new WebMarkupContainer("domain");

+	private GeneralUserForm generalForm;

+	private final RequiredTextField<String> login = new RequiredTextField<String>("login");

+	private final MessageDialog warning;

+	private final DropDownChoice<Long> domainId = new DropDownChoice<Long>("domainId");

+

+	public UserForm(String id, WebMarkupContainer listContainer, final User user, MessageDialog warning) {

+		super(id, new CompoundPropertyModel<User>(user));

+		setOutputMarkupId(true);

+		this.listContainer = listContainer;

+		this.warning = warning;

+		// Add form fields

+		addFormFields();

+

+		// attach an ajax validation behavior to all form component's keydown

+		// event and throttle it down to once per second

+		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));

+	}

+

+	@Override

+	protected void onModelChanged() {

+		super.onModelChanged();

+		generalForm.updateModelObject(getModelObject());

+	}

+	

+	@Override

+	protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {

+		User u = getModelObject();

+		try {

+			boolean isNew = (u.getUser_id() == null);

+			u = getBean(UserDao.class).update(u, generalForm.getPasswordField().getConvertedInput(), getUserId());

+			boolean sendEmailAtRegister = (1 == getBean(ConfigurationDao.class).getConfValue("sendEmailAtRegister", Integer.class, "0"));

+			if (isNew && sendEmailAtRegister) {

+				String link = getBean(ConfigurationDao.class).getBaseUrl();

+				String sendMail = getBean(EmailManager.class).sendMail(login.getValue(),

+						generalForm.getPasswordField().getConvertedInput(), generalForm.getEmail(), link, false, null);

+				if (!sendMail.equals("success")) {

+					throw new Exception("Mail for new user is not sent");

+				}

+			}

+		} catch (Exception e) {

+			// FIXME update feedback with the error details

+			log.error("[onSaveSubmit]: ", e);

+		}

+		setModelObject(u);

+		hideNewRecord();

+		target.add(this);

+		target.add(listContainer);

+		target.appendJavaScript("omUserPanelInit();");

+		if (u.getOrganisation_users().isEmpty()) {

+			warning.open(target);

+		}

+	}

+

+	@Override

+	protected void onNewSubmit(AjaxRequestTarget target, Form<?> form) {

+		UserDao usersDaoImpl = getBean(UserDao.class);

+		setModelObject(usersDaoImpl.getNewUserInstance(usersDaoImpl.get(getUserId())));

+		update(target);

+	}

+

+	@Override

+	protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {

+		User user = getModelObject();

+		if (user.getUser_id() != null) {

+			user = getBean(UserDao.class).get(user.getUser_id());

+		} else {

+			user = getBean(UserDao.class).getNewUserInstance(null);

+		}

+		setModelObject(user);

+		update(target);

+	}

+

+	@Override

+	protected void onDeleteSubmit(AjaxRequestTarget target, Form<?> form) {

+		UserDao usersDaoImpl = getBean(UserDao.class);

+		usersDaoImpl.delete(getModelObject(), getUserId());

+		setModelObject(usersDaoImpl.getNewUserInstance(usersDaoImpl.get(getUserId())));

+		update(target);

+	}

+

+	/**

+	 * Add the fields to the form

+	 */

+	private void addFormFields() {

+		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);

+		login.setLabel(Model.of(Application.getString(132)));

+		add(login.add(minimumLength(getMinLoginLength(cfgDao))));

+

+		add(generalForm = new GeneralUserForm("general", getModel(), true));

+

+		add(new DropDownChoice<Type>("type", Arrays.asList(Type.values())).add(new OnChangeAjaxBehavior() {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void onUpdate(AjaxRequestTarget target) {

+				updateDomain(target);

+			}

+		}));

+		update(null);

+		add(domain.add(domainId).setOutputMarkupId(true).setOutputMarkupPlaceholderTag(true));

+		add(new Label("ownerId"));

+		add(forDatePattern("starttime", WEB_DATE_PATTERN));

+		add(forDatePattern("updatetime", WEB_DATE_PATTERN));

+

+		add(new CheckBox("forceTimeZoneCheck"));

+

+		add(new Select2MultiChoice<Right>("rights", null, new TextChoiceProvider<Right>() {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected String getDisplayText(Right choice) {

+				return choice.name();

+			}

+

+			@Override

+			protected Object getId(Right choice) {

+				return choice.name();

+			}

+

+			@Override

+			public void query(String term, int page, Response<Right> response) {

+				for (Right r : Right.values()) {

+					if (r.name().contains(term)) {

+						response.add(r);

+					}

+				}

+			}

+

+			@Override

+			public Collection<Right> toChoices(Collection<String> ids) {

+				Collection<Right> rights = new ArrayList<User.Right>(ids.size());

+				for (String id : ids) {

+					rights.add(Right.valueOf(id));

+				}

+				return rights;

+			}

+		}));

+		add(new ComunityUserForm("comunity", getModel()));

+	}

+

+	public void updateDomain(AjaxRequestTarget target) {

+		User u = getModelObject();

+		final Map<Long, String> values = new Hashtable<Long, String>();

+		List<Long> ids = new ArrayList<Long>();

+		if (u.getType() == Type.ldap) {

+			for (LdapConfig c : getBean(LdapConfigDao.class).getActive()) {

+				ids.add(c.getLdapConfigId());

+				values.put(c.getLdapConfigId(), c.getName());

+			}

+		}

+		if (u.getType() == Type.oauth) {

+			for (OAuthServer s : getBean(OAuth2Dao.class).getActive()) {

+				ids.add(s.getId());

+				values.put(s.getId(), s.getName());

+			}

+		}

+		domainId.setChoices(ids);

+		domainId.setChoiceRenderer(new ChoiceRenderer<Long>() {

+			private static final long serialVersionUID = 1L;

+

+			public Object getDisplayValue(Long object) {

+				return values.get(object);

+			}

+

+			public String getIdValue(Long object, int index) {

+				return "" + object;

+			}

+		});

+		domain.setVisible(u.getType() == Type.ldap || u.getType() == Type.oauth);

+		if (target != null) {

+			target.add(domain);

+		}

+	}

+	

+	public void update(AjaxRequestTarget target) {

+		updateDomain(target);

+		if (target != null) {

+			target.add(this, listContainer);

+			target.appendJavaScript("omUserPanelInit();");

+		}

+	}

+	

+	@Override

+	protected void onValidate() {

+		User u = getModelObject();

+		if(!getBean(UserDao.class).checkLogin(login.getConvertedInput(), u.getType(), u.getDomainId(), u.getUser_id())) {

+			error(Application.getString(105));

+		}

+	}

+

+	@Override

+	protected void onSaveError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onNewError(AjaxRequestTarget target, Form<?> form) {

+		//ignore validation errors

+		onNewSubmit(target, form);

+	}

+

+	@Override

+	protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {

+		// TODO Auto-generated method stub

+	}

+

+	@Override

+	protected void onDeleteError(AjaxRequestTarget target, Form<?> form) {

+		//ignore validation errors

+		onDeleteSubmit(target, form);

+	}

+

+	@Override

+	protected IMarkupSourcingStrategy newMarkupSourcingStrategy() {

+		return new PanelMarkupSourcingStrategy(false);

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/admin/users/UsersPanel.html b/src/web/java/org/apache/openmeetings/web/admin/users/UsersPanel.html
new file mode 100644
index 0000000..b44077b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/users/UsersPanel.html
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:head>
+	<script type="text/javascript">
+		function omUserPanelInit() {
+			var documentHeight = $(document).height();
+			$('#adminForm').height(documentHeight - 114);
+			$('#adminTable').height(documentHeight - 144);
+		}
+	</script>
+</wicket:head>
+<wicket:panel>
+	<div class="adminPanel">
+		<div class="adminPanelColumnTable">
+			<span wicket:id="navigator">[dataview navigator]</span>
+			<table class="adminListTable">
+				<thead>
+					<tr>
+						<th class="four_column_layout_column1 ui-widget-header"><span wicket:id="orderById"></span> <wicket:message key="146" /></th>
+						<th class="four_column_layout_column2 ui-widget-header"><span wicket:id="orderByLogin"></span> <wicket:message key="147" /></th>
+						<th class="four_column_layout_column3 ui-widget-header"><span wicket:id="orderByFirstName"></span> <wicket:message key="148" /></th>
+						<th class="four_column_layout_column4 ui-widget-header"><span wicket:id="orderByLastName"></span> <wicket:message key="149" /></th>
+					</tr>
+				</thead>
+			</table>
+			<div class="tableWrapper" id="adminTable">
+				<table class="adminListTable">
+					<tbody wicket:id="listContainer">
+						<tr wicket:id="userList">
+							<td class="four_column_layout_column1"><div
+									class="four_column_layout_divcolumn1">
+									<span wicket:id="userId"></span>
+								</div></td>
+							<td class="four_column_layout_column2"><div
+									class="four_column_layout_divcolumn2">
+									<span wicket:id="login"></span>
+								</div></td>
+							<td class="four_column_layout_column3"><div
+									class="four_column_layout_divcolumn3">
+									<span wicket:id="firstName"></span>
+								</div></td>
+							<td class="four_column_layout_column4"><div
+									class="four_column_layout_divcolumn4">
+									<span wicket:id="lastName"></span>
+								</div></td>
+						</tr>
+					</tbody>
+				</table>
+			</div>
+		</div>
+		<div class="adminPanelColumnForm">
+			<form wicket:id="form" class="adminForm"/>
+		</div>
+	</div>
+	<div wicket:id="warning"></div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/admin/users/UsersPanel.java b/src/web/java/org/apache/openmeetings/web/admin/users/UsersPanel.java
new file mode 100644
index 0000000..e9c75ce
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/admin/users/UsersPanel.java
@@ -0,0 +1,113 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.admin.users;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.admin.AdminPanel;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.repeater.Item;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
+
+public class UsersPanel extends AdminPanel {
+	private static final long serialVersionUID = 1L;
+	final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
+	private final MessageDialog warning = new MessageDialog("warning", Application.getString(797), Application.getString(343), DialogButtons.OK, DialogIcon.WARN) {
+		private static final long serialVersionUID = 1L;
+
+		public void onClose(IPartialPageRequestHandler target, DialogButton button) {
+		}
+	};
+
+	@Override
+	public void onMenuPanelLoad(IPartialPageRequestHandler target) {
+		super.onMenuPanelLoad(target);
+		target.appendJavaScript("omUserPanelInit();");
+	}
+
+	private UserForm form;
+
+	public UsersPanel(String id) {
+		super(id);
+
+		final SearchableDataView<User> dataView = new SearchableDataView<User>("userList", new SearchableDataProvider<User>(UserDao.class)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(Item<User> item) {
+				User u = item.getModelObject();
+				final long userId = u.getUser_id();
+				item.add(new Label("userId", "" + u.getUser_id()));
+				item.add(new Label("login", u.getLogin()));
+				item.add(new Label("firstName", u.getFirstname()));
+				item.add(new Label("lastName", u.getLastname()));
+				item.add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					protected void onEvent(AjaxRequestTarget target) {
+						form.setModelObject(getBean(UserDao.class).get(userId));
+						form.hideNewRecord();
+						form.update(target);
+					}
+				});
+				item.add(AttributeModifier.append("class", "clickable ui-widget-content"
+						+ (u.getUser_id().equals(form.getModelObject().getUser_id()) ? " ui-state-active" : "")));
+			}
+		};
+		add(listContainer.add(dataView).setOutputMarkupId(true));
+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dataView) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(listContainer);
+			}
+		};
+		DataViewContainer<User> container = new DataViewContainer<User>(listContainer, dataView, navigator);
+		container.addLink(new OmOrderByBorder<User>("orderById", "user_id", container))
+			.addLink(new OmOrderByBorder<User>("orderByLogin", "login", container))
+			.addLink(new OmOrderByBorder<User>("orderByFirstName", "firstname", container))
+			.addLink(new OmOrderByBorder<User>("orderByLastName", "lastname", container));
+		add(container.getLinks());
+		add(navigator);
+
+		UserDao usersDaoImpl = getBean(UserDao.class);
+		form = new UserForm("form", listContainer, usersDaoImpl.getNewUserInstance(usersDaoImpl.get(getUserId())), warning);
+		form.showNewRecord();
+		add(form, warning);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application.java b/src/web/java/org/apache/openmeetings/web/app/Application.java
new file mode 100644
index 0000000..a1a9f10
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application.java
@@ -0,0 +1,354 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.app;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.red5.logging.Red5LoggerFactory.getLogger;
+import static org.springframework.web.context.WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE;
+import static org.springframework.web.context.support.WebApplicationContextUtils.getWebApplicationContext;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.servlet.ServletContext;
+
+import org.apache.commons.collections.MapIterator;
+import org.apache.commons.collections.keyvalue.MultiKey;
+import org.apache.commons.collections.map.MultiKeyMap;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.util.InitializationContainer;
+import org.apache.openmeetings.web.pages.ActivatePage;
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.openmeetings.web.pages.NotInitedPage;
+import org.apache.openmeetings.web.pages.RecordingPage;
+import org.apache.openmeetings.web.pages.ResetPage;
+import org.apache.openmeetings.web.pages.SwfPage;
+import org.apache.openmeetings.web.pages.auth.SignInPage;
+import org.apache.openmeetings.web.pages.install.InstallWizardPage;
+import org.apache.openmeetings.web.user.dashboard.MyRoomsWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.RssWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.StartWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.WelcomeWidgetDescriptor;
+import org.apache.openmeetings.web.util.AviRecordingResourceReference;
+import org.apache.openmeetings.web.util.FlvRecordingResourceReference;
+import org.apache.openmeetings.web.util.JpgRecordingResourceReference;
+import org.apache.openmeetings.web.util.Mp4RecordingResourceReference;
+import org.apache.openmeetings.web.util.OggRecordingResourceReference;
+import org.apache.openmeetings.web.util.UserDashboardPersister;
+import org.apache.wicket.Localizer;
+import org.apache.wicket.Page;
+import org.apache.wicket.RestartResponseException;
+import org.apache.wicket.RuntimeConfigurationType;
+import org.apache.wicket.ThreadContext;
+import org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession;
+import org.apache.wicket.authroles.authentication.AuthenticatedWebApplication;
+import org.apache.wicket.core.request.handler.BookmarkableListenerInterfaceRequestHandler;
+import org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler;
+import org.apache.wicket.core.request.mapper.MountedMapper;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.component.IRequestablePage;
+import org.apache.wicket.request.mapper.info.PageComponentInfo;
+import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
+import org.apache.wicket.util.tester.WicketTester;
+import org.slf4j.Logger;
+import org.springframework.web.context.WebApplicationContext;
+import org.springframework.web.context.support.XmlWebApplicationContext;
+import org.wicketstuff.select2.ApplicationSettings;
+
+import ro.fortsoft.wicket.dashboard.WidgetRegistry;
+import ro.fortsoft.wicket.dashboard.web.DashboardContext;
+import ro.fortsoft.wicket.dashboard.web.DashboardContextInjector;
+import ro.fortsoft.wicket.dashboard.web.DashboardSettings;
+
+public class Application extends AuthenticatedWebApplication {
+	private static final Logger log = getLogger(Application.class, webAppRootKey);
+	private static boolean isInstalled;
+	private static MultiKeyMap ONLINE_USERS = new MultiKeyMap(); 
+	private static Map<String, WebClient> INVALID_SESSIONS = new ConcurrentHashMap<String, WebClient>();
+	private DashboardContext dashboardContext;
+	private static Set<Long> STRINGS_WITH_APP = new HashSet<Long>(); //FIXME need to be removed
+	private static String appName;
+	static {
+		STRINGS_WITH_APP.addAll(Arrays.asList(499L, 500L, 506L, 511L, 512L, 513L, 517L, 532L, 622L, 804L
+				, 909L, 952L, 978L, 981L, 984L, 989L, 990L, 999L, 1151L, 1155L, 1157L, 1158L, 1194L));
+	}
+	
+	@Override
+	protected void init() {
+		appName = super.getName();
+		getSecuritySettings().setAuthenticationStrategy(new OmAuthenticationStrategy());
+		
+		//Add custom resource loader at the beginning, so it will be checked first in the 
+		//chain of Resource Loaders, if not found it will search in Wicket's internal 
+		//Resource Loader for a the property key
+		getResourceSettings().getStringResourceLoaders().add(0, new LabelResourceLoader());
+		
+		ApplicationSettings.get().setIncludeJqueryUI(false);
+		super.init();
+		
+		// register some widgets
+		dashboardContext = new DashboardContext();
+		dashboardContext.setDashboardPersister(new UserDashboardPersister());
+		WidgetRegistry widgetRegistry = dashboardContext.getWidgetRegistry();
+		widgetRegistry.registerWidget(new MyRoomsWidgetDescriptor());
+		widgetRegistry.registerWidget(new WelcomeWidgetDescriptor());
+		widgetRegistry.registerWidget(new StartWidgetDescriptor());
+		widgetRegistry.registerWidget(new RssWidgetDescriptor());
+		// add dashboard context injector
+		getComponentInstantiationListeners().add(new DashboardContextInjector(dashboardContext));
+		DashboardSettings dashboardSettings = DashboardSettings.get();
+		dashboardSettings.setIncludeJQuery(false);
+		dashboardSettings.setIncludeJQueryUI(false);
+		
+		getRootRequestMapperAsCompound().add(new NoVersionMapper(getHomePage()));
+		getRootRequestMapperAsCompound().add(new NoVersionMapper("notinited", NotInitedPage.class));
+		getRootRequestMapperAsCompound().add(new NoVersionMapper("swf", SwfPage.class));
+		getRootRequestMapperAsCompound().add(new NoVersionMapper("signin", getSignInPageClass()));
+		mountPage("install", InstallWizardPage.class);
+		mountPage("activate", ActivatePage.class);
+		mountPage("reset", ResetPage.class);
+		mountPage("/recording/${hash}", RecordingPage.class);
+		mountResource("/recordings/avi/${id}", new AviRecordingResourceReference());
+		mountResource("/recordings/flv/${id}", new FlvRecordingResourceReference());
+		mountResource("/recordings/mp4/${id}", new Mp4RecordingResourceReference());
+		mountResource("/recordings/ogg/${id}", new OggRecordingResourceReference());
+		mountResource("/recordings/jpg/${id}", new JpgRecordingResourceReference()); //should be in sync with VideoPlayer
+	}
+
+	private static class NoVersionMapper extends MountedMapper {
+		public NoVersionMapper(final Class<? extends IRequestablePage> pageClass) {
+			this("/", pageClass);
+		}
+		
+		public NoVersionMapper(String mountPath, final Class<? extends IRequestablePage> pageClass) {
+			super(mountPath, pageClass, new PageParametersEncoder());
+		}
+
+		@Override
+		protected void encodePageComponentInfo(Url url, PageComponentInfo info) {
+			//Does nothing
+		}
+		
+		@Override
+		public Url mapHandler(IRequestHandler requestHandler) {
+			if (requestHandler instanceof ListenerInterfaceRequestHandler || requestHandler instanceof BookmarkableListenerInterfaceRequestHandler) {
+				return null;
+			} else {
+				return super.mapHandler(requestHandler);
+			}
+		}
+	}
+
+	public static OmAuthenticationStrategy getAuthenticationStrategy() {
+		return (OmAuthenticationStrategy)get().getSecuritySettings().getAuthenticationStrategy();
+	}
+	
+	@Override
+	public Class<? extends Page> getHomePage() {
+		return MainPage.class;
+	}
+
+	@Override
+	protected Class<? extends AbstractAuthenticatedWebSession> getWebSessionClass() {
+		return WebSession.class;
+	}
+
+	@Override
+	public Class<? extends WebPage> getSignInPageClass() {
+		return SignInPage.class;
+	}
+	
+	public static Application get() {
+		return (Application) WebApplication.get();
+	}
+	
+	public static DashboardContext getDashboardContext() {
+		return get().dashboardContext;
+	}
+	
+	public synchronized static void addOnlineUser(WebClient client) {
+		try {
+			ONLINE_USERS.put(client.getUserId(), client.getSessionId(), client);
+		} catch (Exception err) {
+			log.error("[addOnlineUser]", err);
+		}
+	}
+	
+	public synchronized static void removeOnlineUser(WebClient c) {
+		try {
+			if (c != null) {
+				ONLINE_USERS.remove(c.getUserId(), c.getSessionId());
+			}
+		} catch (Exception err) {
+			log.error("[removeOnlineUser]", err);
+		}
+	}
+	
+	public static boolean isUserOnline(Long userId) {
+        MapIterator it = ONLINE_USERS.mapIterator();
+        boolean isUserOnline = false;
+        while (it.hasNext()) {
+            MultiKey multi = (MultiKey) it.next();
+            if (multi.size() > 0 && userId.equals(multi.getKey(0))){
+            	isUserOnline = true;
+            	break;
+            }
+        } 
+		return isUserOnline;
+	}
+
+	@SuppressWarnings("unchecked")
+	public static List<WebClient> getClients() {
+		return new ArrayList<WebClient>(ONLINE_USERS.values());
+	}
+
+	public static int getClientsSize() {
+		return ONLINE_USERS.size();
+	}
+	
+	public static WebClient getClientByKeys(Long userId, String sessionId) {
+		return (WebClient) ONLINE_USERS.get(userId, sessionId);
+	}
+	
+	public static void invalidateClient(WebClient client) {
+		if (!INVALID_SESSIONS.containsKey(client.getSessionId())) {
+			INVALID_SESSIONS.put(client.getSessionId(), client);
+			removeOnlineUser(client);
+		}
+	}
+	
+	public static boolean isInvaldSession(String sessionId) {
+		return sessionId == null ? false : INVALID_SESSIONS.containsKey(sessionId);
+	}
+	
+	public static void removeInvalidSession(String sessionId) {
+		if (INVALID_SESSIONS.containsKey(sessionId)){
+			INVALID_SESSIONS.remove(sessionId);
+		}
+	}
+	
+	//TODO need more safe way FIXME
+	public <T> T _getBean(Class<T> clazz) {
+		WebApplicationContext wac = getWebApplicationContext(getServletContext());
+		return wac == null ? null : wac.getBean(clazz);
+	}
+
+	public static String getString(long id) {
+		return getString(id, WebSession.getLanguage());
+	}
+
+	public static String getString(long id, final long languageId) {
+		Locale loc = LabelDao.languages.get(languageId);
+		if (loc == null) {
+			loc = WebSession.exists() ? WebSession.get().getLocale() : Locale.ENGLISH;
+		}
+		return getString(id, loc);
+	}
+	
+	public static String getString(long id, final Locale loc) {
+		return getString(id, loc, false);
+	}
+	
+	public static String getString(long id, final Locale loc, boolean noReplace) {
+		if (!exists()) {
+			ThreadContext.setApplication(Application.get(appName));
+		}
+		Localizer l = get().getResourceSettings().getLocalizer();
+		String value = l.getStringIgnoreSettings("" + id, null, null, loc, null, "[Missing]");
+		if (!noReplace && STRINGS_WITH_APP.contains(id)) {
+			final MessageFormat format = new MessageFormat(value, loc);
+			value = format.format(new Object[]{getBean(ConfigurationDao.class).getAppName()});
+		}
+		if (!noReplace && RuntimeConfigurationType.DEVELOPMENT == get().getConfigurationType()) {
+			value += String.format(" [%s]", id);
+		}
+		return value;
+	}
+
+	public static boolean isInstalled() {
+		boolean result = isInstalled;
+		if (!isInstalled) {
+			if (InitializationContainer.initComplete) {
+				//TODO can also check crypt class here
+				isInstalled = result = get()._getBean(UserDao.class).count() > 0;
+			}
+		}
+		return result;
+	}
+	
+	public static <T> T getBean(Class<T> clazz) {
+		if (InitializationContainer.initComplete) {
+			if (!isInstalled()) {
+				throw new RestartResponseException(InstallWizardPage.class);
+			}
+			return get()._getBean(clazz);
+		} else {
+			throw new RestartResponseException(NotInitedPage.class);
+		}
+	}
+	
+	public static WicketTester getWicketTester() {
+		return getWicketTester(-1);
+	}
+	
+	public static WicketTester getWicketTester(long langId) {
+		Application app = new Application();
+        
+		WicketTester tester = new WicketTester(app);
+		ServletContext sc = app.getServletContext();
+        XmlWebApplicationContext xmlContext = new XmlWebApplicationContext();
+        xmlContext.setConfigLocation("classpath:openmeetings-applicationContext.xml");
+        xmlContext.setServletContext(sc);
+        xmlContext.refresh();
+        sc.setAttribute(ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, xmlContext);
+        if (langId > 0) {
+        	WebSession.get().setLanguage(langId);
+        }
+        InitializationContainer.initComplete = true;
+        return tester;
+	}
+	
+	public static void destroy(WicketTester tester) {
+		if (tester != null) {
+			ServletContext sc = tester.getServletContext();
+			try {
+				((XmlWebApplicationContext)sc.getAttribute(ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)).close();
+			} catch (Exception e) {
+				log.error("Unexpected error while destroying XmlWebApplicationContext", e);
+			}
+			tester.destroy();
+		}
+	}
+	
+	public static String getAppName() {
+		return appName;
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application.properties.xml
new file mode 100644
index 0000000..6eb56db
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application.properties.xml
@@ -0,0 +1,1879 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Conference</entry>
+  <entry key="2">Meeting</entry>
+  <entry key="3">Events</entry>
+  <entry key="4">Settings</entry>
+  <entry key="5">Profile</entry>
+  <entry key="6">Administration</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Record</entry>
+  <entry key="9">No file available</entry>
+  <entry key="10">Record by teacher</entry>
+  <entry key="11">Connected users</entry>
+  <entry key="12">Start a conference</entry>
+  <entry key="13">My name</entry>
+  <entry key="14">Video conference</entry>
+  <entry key="15">File upload</entry>
+  <entry key="16">Refresh list</entry>
+  <entry key="17">To main file</entry>
+  <entry key="18">new poll</entry>
+  <entry key="19">A new poll for the conference</entry>
+  <entry key="20">Question</entry>
+  <entry key="21">Type of poll</entry>
+  <entry key="22">Create</entry>
+  <entry key="23">Each connected user receives a message with the new poll</entry>
+  <entry key="24">Create a poll</entry>
+  <entry key="25">Cancel</entry>
+  <entry key="26">Yes/No</entry>
+  <entry key="27">Numeric 1-10</entry>
+  <entry key="28">Poll</entry>
+  <entry key="29">You must be a moderator to create a question</entry>
+  <entry key="30">Your vote has been registered</entry>
+  <entry key="31">Your have already voted in this poll</entry>
+  <entry key="32">Vote</entry>
+  <entry key="33">Your response</entry>
+  <entry key="34">Yes</entry>
+  <entry key="35">No</entry>
+  <entry key="36">wants to know</entry>
+  <entry key="37">Poll results</entry>
+  <entry key="38">Question</entry>
+  <entry key="39">Results</entry>
+  <entry key="40">Answers</entry>
+  <entry key="41">No polls have been started</entry>
+  <entry key="42">Vote</entry>
+  <entry key="43">Meeting (max 4 seats)</entry>
+  <entry key="44">Conference (max 50 seats)</entry>
+  <entry key="45">Type</entry>
+  <entry key="46">Other seats</entry>
+  <entry key="47">Already chosen</entry>
+  <entry key="48">enter</entry>
+  <entry key="49">The moderator has left the meeting</entry>
+  <entry key="50">System information</entry>
+  <entry key="51">Choose device</entry>
+  <entry key="52">Choose webcam</entry>
+  <entry key="53">Choose micro</entry>
+  <entry key="54">OK</entry>
+  <entry key="55">Cancel</entry>
+  <entry key="56">You need to reconnect</entry>
+  <entry key="57">Edit setup</entry>
+  <entry key="58">Course</entry>
+  <entry key="59">Language</entry>
+  <entry key="60">OK</entry>
+  <entry key="61">Cancel</entry>
+  <entry key="62">Clear whiteboard</entry>
+  <entry key="63">Do you want to empty the whiteboard before a new picture is added?</entry>
+  <entry key="64">Don't ask again</entry>
+  <entry key="65">No</entry>
+  <entry key="66">Edit setup</entry>
+  <entry key="67">Confirm request to empty the whiteboard</entry>
+  <entry key="68">User info</entry>
+  <entry key="69">Clear whiteboard</entry>
+  <entry key="70">Undo</entry>
+  <entry key="71">Redo</entry>
+  <entry key="72">Select an object</entry>
+  <entry key="73">Text</entry>
+  <entry key="74">Paint</entry>
+  <entry key="75">Draw line</entry>
+  <entry key="76">Draw underline</entry>
+  <entry key="77">Rectangle</entry>
+  <entry key="78">Ellipse</entry>
+  <entry key="79">Arrow</entry>
+  <entry key="80">Delete</entry>
+  <entry key="81">Apply to be a moderator</entry>
+  <entry key="82">Apply</entry>
+  <entry key="83">Cancel</entry>
+  <entry key="84">I have a question</entry>
+  <entry key="85">Close</entry>
+  <entry key="86">italic</entry>
+  <entry key="87">bold</entry>
+  <entry key="88">WAITING</entry>
+  <entry key="89">A user has applied to be a moderator, you can either grant them only access to the whiteboard or completely switch the moderation role. User:</entry>
+  <entry key="90">Accept</entry>
+  <entry key="91">Reject</entry>
+  <entry key="92">Cancel</entry>
+  <entry key="93">Sending the request to the following users</entry>
+  <entry key="94">Accepted</entry>
+  <entry key="95">Rejected</entry>
+  <entry key="96">Change moderator</entry>
+  <entry key="97">You are not the moderator of this course</entry>
+  <entry key="98">Moderator</entry>
+  <entry key="99">This room is full</entry>
+  <entry key="100">Ellipse</entry>
+  <entry key="101">Close</entry>
+  <entry key="102">input data error</entry>
+  <entry key="103">Password and or login is too short</entry>
+  <entry key="104">Password and or login is too short</entry>
+  <entry key="105">The username is already used</entry>
+  <entry key="106">The mail address is already registered</entry>
+  <entry key="107">System error please contact the administrator</entry>
+  <entry key="108">Login</entry>
+  <entry key="109">Username or mail address</entry>
+  <entry key="110">Password</entry>
+  <entry key="111">Language</entry>
+  <entry key="112">Sign in</entry>
+  <entry key="113">Sign up</entry>
+  <entry key="114">Username</entry>
+  <entry key="115">Password</entry>
+  <entry key="116">Re-enter password</entry>
+  <entry key="117">First name</entry>
+  <entry key="118">Surname</entry>
+  <entry key="119">Email address</entry>
+  <entry key="120">Country</entry>
+  <entry key="121">Register</entry>
+  <entry key="122">Cancel</entry>
+  <entry key="123">Not a member?</entry>
+  <entry key="124">Home</entry>
+  <entry key="125">Users</entry>
+  <entry key="126">Groups</entry>
+  <entry key="127">Usergroups</entry>
+  <entry key="128">Conference rooms</entry>
+  <entry key="129">Public</entry>
+  <entry key="130">Usergroups</entry>
+  <entry key="131">Enter</entry>
+  <entry key="132">Login</entry>
+  <entry key="133">Password</entry>
+  <entry key="134">Re-enter password</entry>
+  <entry key="135">Title/first name</entry>
+  <entry key="136">Last name</entry>
+  <entry key="137">Email address</entry>
+  <entry key="138">Birthday</entry>
+  <entry key="139">Street/No</entry>
+  <entry key="140">Post code/Town</entry>
+  <entry key="141">Country</entry>
+  <entry key="142">Address</entry>
+  <entry key="143">User details</entry>
+  <entry key="144">Save</entry>
+  <entry key="145">Save</entry>
+  <entry key="146">User ID</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">First name</entry>
+  <entry key="149">Last name</entry>
+  <entry key="150">Show next</entry>
+  <entry key="151">Show previous</entry>
+  <entry key="152">Delete record</entry>
+  <entry key="153">Cancel</entry>
+  <entry key="154">Delete</entry>
+  <entry key="155">New record</entry>
+  <entry key="156">Refresh record</entry>
+  <entry key="157">Delete record</entry>
+  <entry key="158">Status</entry>
+  <entry key="159">Disabled</entry>
+  <entry key="160">Enabled</entry>
+  <entry key="161">Usergroup</entry>
+  <entry key="162">Calendar</entry>
+  <entry key="163">Close</entry>
+  <entry key="164">Usergroup ID</entry>
+  <entry key="165">Name</entry>
+  <entry key="166">User</entry>
+  <entry key="167">Moderator</entry>
+  <entry key="168">Admin</entry>
+  <entry key="169">User level</entry>
+  <entry key="170">Usergroup</entry>
+  <entry key="171">Name</entry>
+  <entry key="172">Add usergroup</entry>
+  <entry key="173">Add usergroup</entry>
+  <entry key="174">Cancel</entry>
+  <entry key="175">Add</entry>
+  <entry key="176">Remove usergroup</entry>
+  <entry key="177">User</entry>
+  <entry key="178">Add user</entry>
+  <entry key="179">Delete user</entry>
+  <entry key="180">Add user to usergroup</entry>
+  <entry key="181">Search user</entry>
+  <entry key="182">Search</entry>
+  <entry key="183">User</entry>
+  <entry key="184">Usergroup</entry>
+  <entry key="185">Enter</entry>
+  <entry key="186">Conference rooms</entry>
+  <entry key="187">Conference rooms</entry>
+  <entry key="188">ID</entry>
+  <entry key="189">Name</entry>
+  <entry key="190">Public</entry>
+  <entry key="191">Usergroups</entry>
+  <entry key="192">Conference rooms</entry>
+  <entry key="193">Name</entry>
+  <entry key="194">Type</entry>
+  <entry key="195">Public</entry>
+  <entry key="196">Comment</entry>
+  <entry key="197">Save and export</entry>
+  <entry key="198">Load</entry>
+  <entry key="199">Save as</entry>
+  <entry key="200">Filename</entry>
+  <entry key="201">Filename</entry>
+  <entry key="202">Cancel</entry>
+  <entry key="203">Save</entry>
+  <entry key="204">Error</entry>
+  <entry key="205">Loading</entry>
+  <entry key="206">Objects loaded</entry>
+  <entry key="207">Synchronizing, please wait</entry>
+  <entry key="208">Loading image</entry>
+  <entry key="209">Synchronizing, please wait</entry>
+  <entry key="210">Clear whiteboard</entry>
+  <entry key="211">Clear whiteboard, all data on the whiteboard will be lost</entry>
+  <entry key="212">Confirm before loading a file</entry>
+  <entry key="213">Send invitation</entry>
+  <entry key="214">Send invitation</entry>
+  <entry key="215">Subject</entry>
+  <entry key="216">Recipient</entry>
+  <entry key="217">Message</entry>
+  <entry key="218">Send</entry>
+  <entry key="219">Cancel</entry>
+  <entry key="220">Send</entry>
+  <entry key="221">User details</entry>
+  <entry key="222">Your nickname for this conference</entry>
+  <entry key="223">Nick</entry>
+  <entry key="224">First name</entry>
+  <entry key="225">Last name</entry>
+  <entry key="226">Email</entry>
+  <entry key="227">Language</entry>
+  <entry key="228">Enter</entry>
+  <entry key="229">Loading</entry>
+  <entry key="230">Loading data, please wait</entry>
+  <entry key="231">Wrong password</entry>
+  <entry key="232">Please enter two identical passwords</entry>
+  <entry key="233">Wrong email</entry>
+  <entry key="234">You have entered an invalid email address</entry>
+  <entry key="235">Registration complete</entry>
+  <entry key="236">Your account has been created. You can now login.</entry>
+  <entry key="237">Someone is already sharing their screen</entry>
+  <entry key="238">Sharing forbidden</entry>
+  <entry key="239">Share/record screen</entry>
+  <entry key="240">Unable to synchronize the screen. If this warning is shown often you should ask the moderator to reduce the quality.</entry>
+  <entry key="241">Screen of:</entry>
+  <entry key="242">Paint</entry>
+  <entry key="243">Document</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Files</entry>
+  <entry key="246">Members</entry>
+  <entry key="247">Download original document</entry>
+  <entry key="248">Download PDF document</entry>
+  <entry key="249">Load presentation to whiteboard</entry>
+  <entry key="250">Configuration</entry>
+  <entry key="251">Drag this object</entry>
+  <entry key="252">Resize this object</entry>
+  <entry key="253">%</entry>
+  <entry key="254">of</entry>
+  <entry key="255">Go to first page</entry>
+  <entry key="256">Go to previous page</entry>
+  <entry key="257">Go to next page</entry>
+  <entry key="258">Go to last page</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">Mr</entry>
+  <entry key="262">Ms</entry>
+  <entry key="263">Configuration</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Key</entry>
+  <entry key="266">Configuration</entry>
+  <entry key="267">Key</entry>
+  <entry key="268">Last update</entry>
+  <entry key="269">Updated by</entry>
+  <entry key="270">Comment</entry>
+  <entry key="271">Value</entry>
+  <entry key="272">of</entry>
+  <entry key="273">Users</entry>
+  <entry key="274">Delete user from usergroup</entry>
+  <entry key="275">D</entry>
+  <entry key="276">This user is already a member of this usergroup</entry>
+  <entry key="277">News</entry>
+  <entry key="278">Quick links</entry>
+  <entry key="279">Go to conference</entry>
+  <entry key="280">Goto auditorium</entry>
+  <entry key="281">Help and support</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Report a bug</entry>
+  <entry key="285">more</entry>
+  <entry key="286">Project website (http://openmeetings.apache.org)</entry>
+  <entry key="287">User mailing list (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Remember login</entry>
+  <entry key="289">Content</entry>
+  <entry key="290">Dashboard</entry>
+  <entry key="291">Calendar</entry>
+  <entry key="292">My scheduled events</entry>
+  <entry key="293">Public meetings</entry>
+  <entry key="294">Private meetings</entry>
+  <entry key="295">Public events</entry>
+  <entry key="296">Private events</entry>
+  <entry key="297">Public content</entry>
+  <entry key="298">Private content</entry>
+  <entry key="299">Personal content</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderation</entry>
+  <entry key="302">I have a question</entry>
+  <entry key="303">Polls</entry>
+  <entry key="304">Choose a file</entry>
+  <entry key="305">Settings</entry>
+  <entry key="306">Camera and mic settings</entry>
+  <entry key="307">Whiteboard settings</entry>
+  <entry key="308">Exit</entry>
+  <entry key="309">Back to rooms</entry>
+  <entry key="310">Logout</entry>
+  <entry key="311">Forgotten your password?</entry>
+  <entry key="312">Reset password</entry>
+  <entry key="313">Using email address</entry>
+  <entry key="314">Using login</entry>
+  <entry key="315">Your email address</entry>
+  <entry key="316">Your login</entry>
+  <entry key="317">Send email with a reset link</entry>
+  <entry key="318">No such email address was found. Make sure you entered the same email address you used to create your account.</entry>
+  <entry key="319">Please enter either an email address or a user name</entry>
+  <entry key="320">There is no user connected to this username</entry>
+  <entry key="321">The email containing a special link has been sent to your email address</entry>
+  <entry key="322">Error</entry>
+  <entry key="323">Message</entry>
+  <entry key="324">No user found</entry>
+  <entry key="325">Reset your password</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">Change password</entry>
+  <entry key="328">New password</entry>
+  <entry key="329">Re-enter password</entry>
+  <entry key="330">The passwords you entered weren't identical</entry>
+  <entry key="331">Password and or username too short, required minimum length for user name / password are:</entry>
+  <entry key="332">Password set. You can now login.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Unknown error. Please report this to the administrator.</entry>
+  <entry key="335">Username not found</entry>
+  <entry key="336">Invalid password</entry>
+  <entry key="337">Successfully logged out</entry>
+  <entry key="338">Registration disabled</entry>
+  <entry key="339">Invalid email address</entry>
+  <entry key="340">Duplicate file name, please enter another</entry>
+  <entry key="341">File name too short</entry>
+  <entry key="342">Could not save the address</entry>
+  <entry key="343">User added but you need to assign this user to an usergroup, otherwise they won't be able to log in</entry>
+  <entry key="344">New record</entry>
+  <entry key="345">No field found for the ID</entry>
+  <entry key="346">No label found</entry>
+  <entry key="347">Admin authorization required</entry>
+  <entry key="348">Language editor</entry>
+  <entry key="349">Language</entry>
+  <entry key="350">Label ID</entry>
+  <entry key="351">Label name</entry>
+  <entry key="352">Value</entry>
+  <entry key="353">Field values</entry>
+  <entry key="354">Label name</entry>
+  <entry key="355">Label value</entry>
+  <entry key="356">Label ID</entry>
+  <entry key="357">You have deleted the label</entry>
+  <entry key="358">Invalid label ID</entry>
+  <entry key="359">You cannot delete this field</entry>
+  <entry key="360">Export</entry>
+  <entry key="361">You need to logout for any changes to update</entry>
+  <entry key="362">Add new language</entry>
+  <entry key="363">Delete language</entry>
+  <entry key="364">Add new language</entry>
+  <entry key="365">Name</entry>
+  <entry key="366">Add language</entry>
+  <entry key="367">Backup</entry>
+  <entry key="368">goto first</entry>
+  <entry key="369">goto previous</entry>
+  <entry key="370">goto next</entry>
+  <entry key="371">goto last</entry>
+  <entry key="372">user speaks (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">turn sound on/off</entry>
+  <entry key="374">System</entry>
+  <entry key="375">Your settings</entry>
+  <entry key="376">Hello</entry>
+  <entry key="377">Edit your profile</entry>
+  <entry key="378">Unread messages</entry>
+  <entry key="379">Upload new image</entry>
+  <entry key="380">Export user data</entry>
+  <entry key="381">All usergroups must already exist</entry>
+  <entry key="382">Start export</entry>
+  <entry key="383">By usergroup</entry>
+  <entry key="384">Start export</entry>
+  <entry key="385">Import user data</entry>
+  <entry key="386">Choose users.xml</entry>
+  <entry key="387">Import</entry>
+  <entry key="388">Export to XML</entry>
+  <entry key="389">Choose a language file to import</entry>
+  <entry key="390">Import</entry>
+  <entry key="391">Save as</entry>
+  <entry key="392">Name</entry>
+  <entry key="393">Comment</entry>
+  <entry key="394">Save</entry>
+  <entry key="395">Recordings</entry>
+  <entry key="396">Recordings viewer</entry>
+  <entry key="397">Recordings of public and private rooms</entry>
+  <entry key="398">Users</entry>
+  <entry key="399">Joined</entry>
+  <entry key="400"></entry>
+  <entry key="401">Users in this room</entry>
+  <entry key="402">Refresh</entry>
+  <entry key="403">This room is full</entry>
+  <entry key="404">Click on a room to get the room details</entry>
+  <entry key="405">Chat with the users in this room</entry>
+  <entry key="406">Room</entry>
+  <entry key="407">Users in this room</entry>
+  <entry key="408">since</entry>
+  <entry key="409">Play recording</entry>
+  <entry key="410">Length</entry>
+  <entry key="411">Date</entry>
+  <entry key="412">Recorder mode</entry>
+  <entry key="413">Play this recording</entry>
+  <entry key="414">Play/Pause</entry>
+  <entry key="415">Record this meeting</entry>
+  <entry key="416">Stop recording</entry>
+  <entry key="417">Recording</entry>
+  <entry key="418">Someone is already recording this meeting</entry>
+  <entry key="419">Recording. User:</entry>
+  <entry key="420">Cancel</entry>
+  <entry key="421">Recording will be canceled and not saved</entry>
+  <entry key="422">resume</entry>
+  <entry key="423">Close this window and resume recording</entry>
+  <entry key="424">Change line colour</entry>
+  <entry key="425">Choose colour</entry>
+  <entry key="426">Disable/enable line colour</entry>
+  <entry key="427">Change fill colour</entry>
+  <entry key="428">Disable/enable fill colour</entry>
+  <entry key="429">Change line width</entry>
+  <entry key="430">Close</entry>
+  <entry key="431">Change font size</entry>
+  <entry key="432">Delete recording</entry>
+  <entry key="433">Guest</entry>
+  <entry key="434">By:</entry>
+  <entry key="435">Name</entry>
+  <entry key="436">Room</entry>
+  <entry key="437">Date</entry>
+  <entry key="438">Cancel</entry>
+  <entry key="439">Start</entry>
+  <entry key="440">Name</entry>
+  <entry key="441">Date</entry>
+  <entry key="442">Delete server chat log</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">Send message</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Choose published devices</entry>
+  <entry key="448">Audio and video</entry>
+  <entry key="449">Audio only</entry>
+  <entry key="450">Video only</entry>
+  <entry key="451">No audio/video (static image)</entry>
+  <entry key="452">No audio/video from your PC will be published, your profile picture will be shown</entry>
+  <entry key="453">MO</entry>
+  <entry key="454">TU</entry>
+  <entry key="455">WE</entry>
+  <entry key="456">TH</entry>
+  <entry key="457">FR</entry>
+  <entry key="458">SA</entry>
+  <entry key="459">SU</entry>
+  <entry key="460">Monday</entry>
+  <entry key="461">Tuesday</entry>
+  <entry key="462">Wednesday</entry>
+  <entry key="463">Thursday</entry>
+  <entry key="464">Friday</entry>
+  <entry key="465">Saturday</entry>
+  <entry key="466">Sunday</entry>
+  <entry key="467">CW</entry>
+  <entry key="468">Calendar week</entry>
+  <entry key="469">January</entry>
+  <entry key="470">February</entry>
+  <entry key="471">March</entry>
+  <entry key="472">April</entry>
+  <entry key="473">May</entry>
+  <entry key="474">June</entry>
+  <entry key="475">July</entry>
+  <entry key="476">August</entry>
+  <entry key="477">September</entry>
+  <entry key="478">October</entry>
+  <entry key="479">November</entry>
+  <entry key="480">December</entry>
+  <entry key="481">Calendar</entry>
+  <entry key="482">Participants</entry>
+  <entry key="483">Show layout settings</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Width | height</entry>
+  <entry key="486">Video container</entry>
+  <entry key="487">Moderation container</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Whiteboard container</entry>
+  <entry key="490">Enabled</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Width | height</entry>
+  <entry key="493">Files, chat, participants container</entry>
+  <entry key="494">Enabled</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Width | height</entry>
+  <entry key="497">The moderator has left the room. No one is presenting at the moment.</entry>
+  <entry key="498">There is no moderator in this room, but there are some participants. You have to apply to be the moderator or wait.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Invitation</entry>
+  <entry key="501">Message from user:</entry>
+  <entry key="502">Message:</entry>
+  <entry key="503">Click this link to participate in the conference [The link may only work for a certain period.]:</entry>
+  <entry key="504">Click here to enter room</entry>
+  <entry key="505">If you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="506">{0} Account Details</entry>
+  <entry key="507">Your account details</entry>
+  <entry key="508">Login</entry>
+  <entry key="509">Pass</entry>
+  <entry key="510">Email</entry>
+  <entry key="511">{0}-Team</entry>
+  <entry key="512">Your {0} account details</entry>
+  <entry key="513">{0} - Reset Password</entry>
+  <entry key="514">Click on this link to enter a new password</entry>
+  <entry key="515">Click here to enter a new password</entry>
+  <entry key="516">If you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="517">{0} password reset</entry>
+  <entry key="518">Please enter a valid date, for example 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">Please enter a valid email address, for example name@mail.com</entry>
+  <entry key="520">Please enter a float-number, for example 1.00</entry>
+  <entry key="521">Please enter an integer number, for example 100</entry>
+  <entry key="522">Please enter a valid phone number, for example ++49 0123 123123</entry>
+  <entry key="523">Please enter a valid time, for example 12:23 (hh:mm)</entry>
+  <entry key="524">Password protected</entry>
+  <entry key="525">Password</entry>
+  <entry key="526">Validity period</entry>
+  <entry key="527">Endless</entry>
+  <entry key="528">Period</entry>
+  <entry key="529">One time</entry>
+  <entry key="530">Valid from</entry>
+  <entry key="531">Valid to</entry>
+  <entry key="532">Invitation to {0}</entry>
+  <entry key="533">No invitation available for this invitation code</entry>
+  <entry key="534">This invitation was already used</entry>
+  <entry key="535">The invitation code is invalid</entry>
+  <entry key="536">Password</entry>
+  <entry key="537">Check password</entry>
+  <entry key="538">Invalid password</entry>
+  <entry key="539">Audio/video</entry>
+  <entry key="540">Synchronize audio/video</entry>
+  <entry key="541">Login was correct, but the session is not active or stored on the server</entry>
+  <entry key="542">The session ID is not logged in or has no admin rights. The SOAP gateway needs a user with admin rights to embed new users.</entry>
+  <entry key="543">This session has no remoteuser-data connected. You did not call the SOAP gateway before accessing the application or you are using a wrong session ID</entry>
+  <entry key="544">The recorder is currently beta</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">w</entry>
+  <entry key="550">width</entry>
+  <entry key="551">h</entry>
+  <entry key="552">height</entry>
+  <entry key="553">Change transparency</entry>
+  <entry key="554">Open browser</entry>
+  <entry key="555">Close browser</entry>
+  <entry key="556">The connection to the server has been lost</entry>
+  <entry key="557">Pointer</entry>
+  <entry key="558">Synchronizing</entry>
+  <entry key="559">Synchronizing, please wait</entry>
+  <entry key="560">&lt;u&gt;Download as SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download as PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download as JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download as PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download as TIF&lt;/u&gt;</entry>
+  <entry key="565">Notification type</entry>
+  <entry key="566">Category</entry>
+  <entry key="567">Repetition</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Location</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">End</entry>
+  <entry key="572">Title</entry>
+  <entry key="573">Comment</entry>
+  <entry key="574">Invite People</entry>
+  <entry key="575">Daily</entry>
+  <entry key="576">Monthly</entry>
+  <entry key="577">Yearly</entry>
+  <entry key="578">Appointment end is after of appointment start</entry>
+  <entry key="579">Please insert a title</entry>
+  <entry key="580">Right to left</entry>
+  <entry key="581">Activate this if you write in a right to left language</entry>
+  <entry key="582">Dashboard</entry>
+  <entry key="583">Watch recorded meetings or events</entry>
+  <entry key="584">Meeting - make a conference with between 4 and 25 users&lt;br/&gt;and everybody will have audio and video access</entry>
+  <entry key="585">Event - make a conference with up to 200 participants&lt;br/&gt;but only the moderator will have audio and video access</entry>
+  <entry key="586">Create users, rooms, usergroups&lt;br/&gt; and change configuration</entry>
+  <entry key="587">Users in this room</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Loading document. Please wait until all clients have been synchronized.</entry>
+  <entry key="592">Upload complete, converting document</entry>
+  <entry key="593">Start upload</entry>
+  <entry key="594">Upload and import dialog. Please select a file.</entry>
+  <entry key="595">Cancel</entry>
+  <entry key="596">Select file</entry>
+  <entry key="597">Connections</entry>
+  <entry key="598">Value</entry>
+  <entry key="599">Stream ID</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connected since</entry>
+  <entry key="602">Room / Scope</entry>
+  <entry key="603">Unenroll user</entry>
+  <entry key="604">Unenroll user</entry>
+  <entry key="605">Do you really want to unenroll this client from the room?</entry>
+  <entry key="606">Your session has been closed by an administrator or moderator.</entry>
+  <entry key="607">Phone</entry>
+  <entry key="608">User is the moderator of this room</entry>
+  <entry key="609">User is allowed to draw on the whiteboard</entry>
+  <entry key="610">(Re) Start audio/video or change device settings</entry>
+  <entry key="611">Allow this user to draw on the whiteboard</entry>
+  <entry key="612">Remove ability to draw on whiteboard</entry>
+  <entry key="613">Users</entry>
+  <entry key="614">Files</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Your account is assigned to multiple usergroups. Please choose one for this session.</entry>
+  <entry key="618">This room is full</entry>
+  <entry key="619">Room type</entry>
+  <entry key="620">Appointment room</entry>
+  <entry key="621">Server time</entry>
+  <entry key="622">{0} - reminder</entry>
+  <entry key="623">Message from user:</entry>
+  <entry key="624">Message:</entry>
+  <entry key="625">Click this link to participate in the conference [The link does only work 15 minutes before the meeting starts.]:</entry>
+  <entry key="626">Click here to enter room</entry>
+  <entry key="627">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="628">search intern</entry>
+  <entry key="629">Add external</entry>
+  <entry key="630">First name</entry>
+  <entry key="631">Surname</entry>
+  <entry key="632">Email</entry>
+  <entry key="633">Confirm logout</entry>
+  <entry key="634">Are you sure you want to logout?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Demo room</entry>
+  <entry key="637">Demo time</entry>
+  <entry key="638">Meeting timer</entry>
+  <entry key="639">This room is a demo room. You will be automatically logged off in:</entry>
+  <entry key="640">Moderated</entry>
+  <entry key="641">Please wait until the moderator has entered the room</entry>
+  <entry key="642">OK</entry>
+  <entry key="643">Incoming screen sharing</entry>
+  <entry key="644">There is a new screen sharing incoming from the User:</entry>
+  <entry key="645">Start sharing</entry>
+  <entry key="646">Add new meeting</entry>
+  <entry key="647">Meeting room</entry>
+  <entry key="648">Event room</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderate users</entry>
+  <entry key="651">Moderate rooms</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Do you want to change this user to be a moderator of that organisation?</entry>
+  <entry key="654">Please choose an organisation before you try to add a user to it</entry>
+  <entry key="655">Organisation - moderator</entry>
+  <entry key="656">Do you really want to delete this user from the organisation?</entry>
+  <entry key="657">This user is a moderator</entry>
+  <entry key="658">This user is not a moderator</entry>
+  <entry key="659">Do you not want this user to be a moderator of this organisation?</entry>
+  <entry key="660">Add or delete users or rooms within your organisation</entry>
+  <entry key="661">Do you really want to delete this record?</entry>
+  <entry key="662">Do you really want to delete this user from your organisation?</entry>
+  <entry key="663">You cannot delete your own user</entry>
+  <entry key="664">This method needs an adminstration account to be invoked</entry>
+  <entry key="665">There was no session associated with this ID</entry>
+  <entry key="666">This is an administrator or moderator account. You can only edit this account through the administration panel.</entry>
+  <entry key="667">To complete your registration please click on the following link</entry>
+  <entry key="668">Click to verify your email</entry>
+  <entry key="669">No user was found for this hash</entry>
+  <entry key="670">This user is already activated</entry>
+  <entry key="671">You successfully activated your account</entry>
+  <entry key="672">Login now</entry>
+  <entry key="673">Your account is not activated. Please use the link in the email you received during registration.</entry>
+  <entry key="674">You have successfully signed up. An email with a verification code will be sent to your mailbox.</entry>
+  <entry key="675">Remove moderator role from this user</entry>
+  <entry key="676">Grant moderator rights to this user</entry>
+  <entry key="677">User</entry>
+  <entry key="678">Access to whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Please choose any user on the list to make them a moderator or to grant them access to the whiteboard or video</entry>
+  <entry key="681">This user is already a moderator</entry>
+  <entry key="682">You cannot remove the moderator rights for yourself</entry>
+  <entry key="683">Allow this user to publish their audio/video</entry>
+  <entry key="684">Remove audio/video of this user</entry>
+  <entry key="685">I have a question</entry>
+  <entry key="686">I would like to draw on the whiteboard</entry>
+  <entry key="687">I would like to share my audio/video</entry>
+  <entry key="688">You are the moderator of this room</entry>
+  <entry key="689">You are allowed to draw on the whiteboard</entry>
+  <entry key="690">You are allowed to share your audio/video</entry>
+  <entry key="691">Message to moderator</entry>
+  <entry key="692">The user</entry>
+  <entry key="693">would like to ask a question</entry>
+  <entry key="694">would like to draw on whiteboard</entry>
+  <entry key="695">would like to share his audio/video</entry>
+  <entry key="696">You have to wait until a moderator enters the room</entry>
+  <entry key="697">Cancel</entry>
+  <entry key="698">Save</entry>
+  <entry key="699">Day</entry>
+  <entry key="700">Month</entry>
+  <entry key="701">Year</entry>
+  <entry key="702">Upload file</entry>
+  <entry key="703">Add folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (drag and drop item here)</entry>
+  <entry key="706">My files (home drive)</entry>
+  <entry key="707">Room files (public drive)</entry>
+  <entry key="708">Add file</entry>
+  <entry key="709">Add folder</entry>
+  <entry key="710">Delete folder</entry>
+  <entry key="711">Edit name</entry>
+  <entry key="712">New folder</entry>
+  <entry key="713">Are you sure you want to delete this item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open document</entry>
+  <entry key="717">Show all files (tree view)</entry>
+  <entry key="718">Close document</entry>
+  <entry key="719">Delete file</entry>
+  <entry key="720">You are not allowed to draw anything on the whiteboard</entry>
+  <entry key="721">Document properties</entry>
+  <entry key="722">Start Java</entry>
+  <entry key="723">Start Flash</entry>
+  <entry key="724">A user wants to share their screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your desktop</entry>
+  <entry key="726">Sharing session</entry>
+  <entry key="727">You are already sharing your desktop</entry>
+  <entry key="728">Desktop viewer</entry>
+  <entry key="729">Stop sharing</entry>
+  <entry key="730">Desktop sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start sharing</entry>
+  <entry key="733">Pause sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The sharer has finished this session</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start Java</entry>
+  <entry key="745">If you close this session completely you will not be able to restart the viewer for this session</entry>
+  <entry key="746">Confirm closing viewer session</entry>
+  <entry key="747">Share screen</entry>
+  <entry key="748">Record session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Please use Internet Explorer and not Firefox for Windows</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as the default website to your profile</entry>
+  <entry key="757">Test setup</entry>
+  <entry key="758">Use audio or video setup before you enter a room by recording for a few seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without audio or video can still use the whiteboard, share their desktop or write chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-meter</entry>
+  <entry key="768">Press start</entry>
+  <entry key="769">Start conference</entry>
+  <entry key="770">Start event</entry>
+  <entry key="771">Choose room</entry>
+  <entry key="772">Check setup</entry>
+  <entry key="773">Start conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start recording test</entry>
+  <entry key="776">Do not show audio/video test before entering a conference</entry>
+  <entry key="777">Public rooms</entry>
+  <entry key="778">Public rooms are accessible for all users</entry>
+  <entry key="779">Private rooms</entry>
+  <entry key="780">Private rooms are only accessible for users of the same usergroup</entry>
+  <entry key="781">My rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this</entry>
+  <entry key="784">Apply to be moderator</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for audio/video access</entry>
+  <entry key="787">This session hash has already been used</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit?</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved event in the "Event details" on the right. Please save, remove or cancel and edit the details before adding another event.</entry>
+  <entry key="795">Please add at least one attendee for your meeting</entry>
+  <entry key="796">Do you really want to delete this event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your web conferencing platform. You can either follow the 1-2-3 steps to enter a conference room directly or you choose the Calendar to set up and plan a meeting.</entry>
+  <entry key="805">Plan a meeting</entry>
+  <entry key="806">To setup a conference you can add a new event in the calendar</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no user selected</entry>
+  <entry key="812">Add attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event details</entry>
+  <entry key="816">Default moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">Email</entry>
+  <entry key="821">Add new default moderator</entry>
+  <entry key="822">Is super moderator</entry>
+  <entry key="823">If the room is moderated, any users with a moderator or administrator level access are automatically set to moderator when they enter the room</entry>
+  <entry key="824">A super moderator is always a moderator when they enter a room</entry>
+  <entry key="825">Make user a super moderator</entry>
+  <entry key="826">Remove super moderator from user</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an usergroup to the room only users of that usergroup have access to it</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Usergroup</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this item?</entry>
+  <entry key="834">There is no user selected</entry>
+  <entry key="835">Add new default moderator</entry>
+  <entry key="836">Do you want to add the super moderation flag for this user?</entry>
+  <entry key="837">Do you want to remove the super moderation flag for this user? You need to save the room object to save these settings.</entry>
+  <entry key="838">This user is a super moderator. You cannot remove the moderation flag.</entry>
+  <entry key="839">Do you really want to delete this file/folder?</entry>
+  <entry key="840">Delete file/folder?</entry>
+  <entry key="841">Mrs</entry>
+  <entry key="842">Dr</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share audio with SIP applet</entry>
+  <entry key="846">Share audio with SIP and video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share their screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing user</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New screen sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording timeline</entry>
+  <entry key="860">My recordings</entry>
+  <entry key="861">Public recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">Download</entry>
+  <entry key="868">Main - video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top.</entry>
+  <entry key="871">Start recording</entry>
+  <entry key="872">Stop recording</entry>
+  <entry key="873">Download as FLV</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Close</entry>
+  <entry key="879">Allow user questions</entry>
+  <entry key="880">Turn this off to prevent any user from disturbing you in this room</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw screen video</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the recording</entry>
+  <entry key="888">The recording is not yet ready for watching</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder message</entry>
+  <entry key="891">OK</entry>
+  <entry key="892">SIP applet is not ready</entry>
+  <entry key="893">SIP account settings</entry>
+  <entry key="894">SIP settings for each user</entry>
+  <entry key="895">SIP user</entry>
+  <entry key="896">SIP password</entry>
+  <entry key="897">SIP auth ID</entry>
+  <entry key="898">The login to the SIP gateway has failed</entry>
+  <entry key="899">The login to the SIP gateway has failed. Contact the administrator.</entry>
+  <entry key="900">Logging onto the SIP gateway...</entry>
+  <entry key="901">Logging onto the SIP gateway...</entry>
+  <entry key="902">Show log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP applet message</entry>
+  <entry key="905">The SIP applet is not ready. Accept the applet and click OK</entry>
+  <entry key="906">Get moderation</entry>
+  <entry key="907">Save appointment changes</entry>
+  <entry key="908">The appointment has been changed. Do you want to save these changes?</entry>
+  <entry key="909">To access other recordings you have to login to the {0} application</entry>
+  <entry key="910">Choose the user for this video</entry>
+  <entry key="911">Available users for this pod</entry>
+  <entry key="912">You are a moderator in this interview. You can decide who is speaking in this interview and you can start/stop the recording of the session.</entry>
+  <entry key="913">Start recording</entry>
+  <entry key="914">Stop recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started.</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP data</entry>
+  <entry key="921">Re-generate SIP data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder.</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License settings</entry>
+  <entry key="926">You can either bind the user to a expire date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your license has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time left on your account:</entry>
+  <entry key="935">User license Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make web-conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into conference rooms) or creating conference rooms via the calendar with external users is only allowed with a volume flatrate.</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited license</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit.</entry>
+  <entry key="951">Want your own server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per installation.</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact info and prizings</entry>
+  <entry key="958">Credit Card details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Typec</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (with Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and buy.</entry>
+  <entry key="983">Click and buy.</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy.</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received.</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your invoice. The invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}.</entry>
+  <entry key="990">Payment received {0} -</entry>
+  <entry key="991">Payment and transaction status</entry>
+  <entry key="992">Transcation hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th parties to access a meeting.</entry>
+  <entry key="1000">This email is already used by another user.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The conference number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only.</entry>
+  <entry key="1006">Only the URL entered in the status bar is send to participants.</entry>
+  <entry key="1007">Make team rooms [breakout session]</entry>
+  <entry key="1008">Choose users for a new team-room.</entry>
+  <entry key="1009">You can choose users here and create a new conference room ("Team room") for them. The chosen users will automatically switch to the new team-room or get a notification. Team room moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a moderator.</entry>
+  <entry key="1010">User name</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new team room:</entry>
+  <entry key="1014">Create team room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the team room.</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from team room</entry>
+  <entry key="1019">User is team room moderator (He is able to manage team rooms and users of the team room can ask him to come inside)</entry>
+  <entry key="1020">Room type</entry>
+  <entry key="1021">If you check "Force user to switch to new team room" all chosen users will automatically switch to the newly created team room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-moderators always have the free choice to manage the team rooms and switch between them.</entry>
+  <entry key="1022">Manage team rooms</entry>
+  <entry key="1023">You can switch here between all team rooms that you are assigned as team room moderator. Users inside the team room can send you a message, for example to ask you to come to their room and help them. You can also terminate the team room and all users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new team room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right.</entry>
+  <entry key="1031">1) Team room settings</entry>
+  <entry key="1032">2) Add users to the team room</entry>
+  <entry key="1033">Team room name</entry>
+  <entry key="1034">Team room</entry>
+  <entry key="1035">Change to the room</entry>
+  <entry key="1036">Switch to this team room</entry>
+  <entry key="1037">Terminate team room and logout all users</entry>
+  <entry key="1038">New team room</entry>
+  <entry key="1039">There is a new team room available for you.</entry>
+  <entry key="1040">Switch to team room</entry>
+  <entry key="1041">Team room actions</entry>
+  <entry key="1042">This is a team room, you can send the team moderator a message if you need help. You can re-open this window via the main menu in the "Actions" section.</entry>
+  <entry key="1043">1) Send message to team room moderator</entry>
+  <entry key="1044">New team room</entry>
+  <entry key="1045">There is a new team room available. You can switch to that room. Team rooms are like "Workgroups" with additionally possibilities to ask the team room moderator for help. Your team rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to team room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team room name:</entry>
+  <entry key="1049">This window will stay open even if you leave the room.</entry>
+  <entry key="1050">Users for this team room</entry>
+  <entry key="1051">3) Other team rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the team room moderators. For example if you need help in moderating the Rroom or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this team room</entry>
+  <entry key="1055">Is team room moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this team room.</entry>
+  <entry key="1057">There is no team moderator logged in at the moment.</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our team room.</entry>
+  <entry key="1060">A user from a team room requests your help.</entry>
+  <entry key="1061">Team room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any team room. But you can switch here to all team rooms that you have access to.</entry>
+  <entry key="1065">Backup the system. The backup includes all user generated data. The configuration is not included as well as the language labels. Because those values are imported with the system installer. To update your system, export your old system (1) re-install into a new database the new package (2) and import the backup file again (3). The backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System backup</entry>
+  <entry key="1067">Allow user to share screen/record</entry>
+  <entry key="1068">Deny user to share screen/record</entry>
+  <entry key="1069">User is moderator, he can do anything. [screen sharing]</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this flag on and the users will have only the audio option and no video in a conference room. This can bee good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (during screen sharing)</entry>
+  <entry key="1079">Deny Remote Control (during screen sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (during screen sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (during screen sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything.</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (during screen sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose &lt;i&gt;Insert&lt;/i&gt; from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;&lt;br/&gt;&lt;br/&gt;&lt;u&gt;&lt;FONT color='#0000CC'&gt;&lt;A HREF="http://www.youtube.com/watch?v=Ukqa01O48uI" TARGET="_BLANK"&gt;watch the demo&lt;/A&gt;&lt;/FONT&gt;&lt;/u&gt;</entry>
+  <entry key="1086">Copy and paste text from your PC to remote PC and vice versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy and paste</entry>
+  <entry key="1089">Quality of the screen share:</entry>
+  <entry key="1090">Very high quality</entry>
+  <entry key="1091">High quality</entry>
+  <entry key="1092">Medium quality</entry>
+  <entry key="1093">Low quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close webinar.</entry>
+  <entry key="1098">The webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">LDAP</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config file</entry>
+  <entry key="1107">LDAP Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to user name" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the login in the LDAP is stored including the domain name. Example: user enters "hans" domain is specified as "localhost.com", login that is verified against LDAP is: hans@localhost.com</entry>
+  <entry key="1117">Add domain to user name</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote clipboard text</entry>
+  <entry key="1122">Show remote clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about copy and paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation.</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">Timezone message</entry>
+  <entry key="1149">Check "Timezone message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the timezone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Free text</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Search result</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts.</entry>
+  <entry key="1198">confirmed you as contact.</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show /copy chat log</entry>
+  <entry key="1201">Chat log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Unenroll user</entry>
+  <entry key="1214">You cannot unenroll yourself out of the conference room. If you want to leave it close the browser or use the exit button.</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot unenroll a super moderator out of a room.</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you. You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied.</entry>
+  <entry key="1227">The user is already approved.</entry>
+  <entry key="1228">This user contact hash is invalid.</entry>
+  <entry key="1229">User added to contact list.</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list.</entry>
+  <entry key="1231">There is no such contact.</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder.</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected.</entry>
+  <entry key="1255">Move to inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone.</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages.</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside. Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course.</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is not valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own.</entry>
+  <entry key="1279">Show my own calendar again.</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first.</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted.</entry>
+  <entry key="1287">Choose your nick name</entry>
+  <entry key="1288">First name</entry>
+  <entry key="1289">Last name</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars. For both, first name and last name.</entry>
+  <entry key="1293">Please enter a valid email.</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner ID</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with user level user, moderator or admin</entry>
+  <entry key="1311">Webservice (only access via SOAP)</entry>
+  <entry key="1312">Load directly to the Whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone.</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget to 'Start recording', if you want have the meeting recorded."</entry>
+  <entry key="1316">Start recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw free</entry>
+  <entry key="1325">Select/move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom in/out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Show grid</entry>
+  <entry key="1333">Share file</entry>
+  <entry key="1334">Select shape</entry>
+  <entry key="1335">Select clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite attendees</entry>
+  <entry key="1349">By email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny and remove message</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards.</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">user defined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others. Give exclusive audio to me (You can also press F12)</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself.</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore.</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally.</entry>
+  <entry key="1392">Mute microphone globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore.</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off.</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on.</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally.</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally.</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him.</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally. To mute your own microphone: Please use the microphone icon in your video pod.</entry>
+  <entry key="1410">Poll name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple chart</entry>
+  <entry key="1415">Pie chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close poll</entry>
+  <entry key="1419">Are you sure you want to close this poll? No one will be able to vote.</entry>
+  <entry key="1420">Delete poll</entry>
+  <entry key="1421">Are you sure you want to delete this poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO code</entry>
+  <entry key="1423">Allow/deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">would like to have permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith.</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">You have the right to give exclusive audio. Click here to make yourself exclusive audio (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need to be a Moderator or have the 'draw on whiteboard' rights to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+  <entry key="1601">Apply for audio access</entry>
+  <entry key="1602">Ask moderator to share your micro</entry>
+  <entry key="1603">would like to share his audio</entry>
+  <entry key="1604">Allow this user to publish their audio</entry>
+  <entry key="1605">Remove audio of this user</entry>
+  <entry key="1606">I would like to share my audio</entry>
+  <entry key="1607">You are allowed to share your audio</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_ar.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
new file mode 100644
index 0000000..da2a016
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_ar.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">المؤتمر</entry>
+  <entry key="2">اجتماع</entry>
+  <entry key="3">الاحداث</entry>
+  <entry key="4">أماكن</entry>
+  <entry key="5">نبذة</entry>
+  <entry key="6">الادارة</entry>
+  <entry key="7">توقف</entry>
+  <entry key="8">سجل</entry>
+  <entry key="9">لا ملف متاحة</entry>
+  <entry key="10">سجل قبل المعلمين</entry>
+  <entry key="11">ترتبط المستخدمين :</entry>
+  <entry key="12">بدء المؤتمر</entry>
+  <entry key="13">اسمي</entry>
+  <entry key="14">الفيديو</entry>
+  <entry key="15">تحميل الملفات</entry>
+  <entry key="16">تحديث قائمة</entry>
+  <entry key="17">الى الملف الرئيسي</entry>
+  <entry key="18">استطلاع جديد</entry>
+  <entry key="19">استطلاع جديد للمؤتمر.</entry>
+  <entry key="20">السؤال :</entry>
+  <entry key="21">نوع من استطلاع للرأي يؤكد :</entry>
+  <entry key="22">خلق</entry>
+  <entry key="23">معلومات : كل صلة يتلقى المستخدم رسالة مع استطلاع جديد.</entry>
+  <entry key="24">انشاء استطلاع</entry>
+  <entry key="25">الغاء</entry>
+  <entry key="26">نعم / لا</entry>
+  <entry key="27">عددي 1-10</entry>
+  <entry key="28">استطلاع الرأى</entry>
+  <entry key="29">لا بد من وسيط لتهيئة السؤال</entry>
+  <entry key="30">تصويتك مسجلة.</entry>
+  <entry key="31">حسابك قد صوتت بالفعل في هذا الاستطلاع.</entry>
+  <entry key="32">تصويت!</entry>
+  <entry key="33">ردكم :</entry>
+  <entry key="34">نعم</entry>
+  <entry key="35">لا</entry>
+  <entry key="36">وسوف wissen :</entry>
+  <entry key="37">نتائج الاستطلاع</entry>
+  <entry key="38">السؤال :</entry>
+  <entry key="39">النتائج :</entry>
+  <entry key="40">الاجوبه :</entry>
+  <entry key="41">لا الاستطلاعات قد بدأت.</entry>
+  <entry key="42">تصويت!</entry>
+  <entry key="43">الاجتماع (ماكس 4 مقاعد)</entry>
+  <entry key="44">المؤتمر (ماكس 50 مقعدا)</entry>
+  <entry key="45">النوع</entry>
+  <entry key="46">المقاعد الاخرى</entry>
+  <entry key="47">بالفعل اختارت</entry>
+  <entry key="48">أدخل</entry>
+  <entry key="49">الوسيط قد غادر الجلسة.</entry>
+  <entry key="50">نظام المعلومات</entry>
+  <entry key="51">اختيار جهاز</entry>
+  <entry key="52">اختيار كاميرا ويب :</entry>
+  <entry key="53">اختيار الجزئي :</entry>
+  <entry key="54">الموافقة</entry>
+  <entry key="55">الغاء</entry>
+  <entry key="56">انت بحاجة الى اعادة وصل.</entry>
+  <entry key="57">تحرير الاعداد.</entry>
+  <entry key="58">وبطبيعة الحال :</entry>
+  <entry key="59">اللغة :</entry>
+  <entry key="60">الموافقة</entry>
+  <entry key="61">الغاء</entry>
+  <entry key="62">بيضاء واضحة</entry>
+  <entry key="63">هل تريد أن تكون لوحة جديدة قبل ان افرغوا الصورة المضافه؟</entry>
+  <entry key="64">لا أسأل مرة اخرى</entry>
+  <entry key="65">لا</entry>
+  <entry key="66">تحرير الاعداد</entry>
+  <entry key="67">تأكيد طلب قبل افراغ بيضاء.</entry>
+  <entry key="68">معلومات مستخدم</entry>
+  <entry key="69">واضح drawarea</entry>
+  <entry key="70">الغاء</entry>
+  <entry key="71">أعادة</entry>
+  <entry key="72">اختر جسم</entry>
+  <entry key="73">النص</entry>
+  <entry key="74">الطلاء</entry>
+  <entry key="75">استرعى الخط</entry>
+  <entry key="76">إبراز أوجه</entry>
+  <entry key="77">مستطيل</entry>
+  <entry key="78">بيضوي</entry>
+  <entry key="79">السهم</entry>
+  <entry key="80">اختار حذف البند</entry>
+  <entry key="81">طلب للحصول على الاعتدال</entry>
+  <entry key="82">تطبيق</entry>
+  <entry key="83">الغاء</entry>
+  <entry key="84">لتصبح مشرف</entry>
+  <entry key="85">وثيق</entry>
+  <entry key="86">مائل</entry>
+  <entry key="87">اجترئ</entry>
+  <entry key="88">انتظار</entry>
+  <entry key="89">مستخدم يريد ان يطبق لالاعتدال :</entry>
+  <entry key="90">يقبل</entry>
+  <entry key="91">نرفض</entry>
+  <entry key="92">الغاء</entry>
+  <entry key="93">إرسال طلب الى المستخدمين التالية</entry>
+  <entry key="94">مقبول</entry>
+  <entry key="95">رفض</entry>
+  <entry key="96">تغيير وسيط</entry>
+  <entry key="97">انت لا اعتدال هذا بالطبع!</entry>
+  <entry key="98">رئيس الجلسة :</entry>
+  <entry key="99">هذه الغرفة بالكامل. عفوا يرجى اعادة المحاوله لاحقا.</entry>
+  <entry key="100">بيضوي</entry>
+  <entry key="101">وثيق</entry>
+  <entry key="102">خطأ في البيانات المدخله</entry>
+  <entry key="103">اسم المستخدم يجب ان تكون على الأقل 4 احرف</entry>
+  <entry key="104">Userpass يجب أن تكون على الأقل 4 احرف</entry>
+  <entry key="105">اسم المستخدم مأخوذ من قبل</entry>
+  <entry key="106">البريد الالكتروني هو ما سبق تسجيله</entry>
+  <entry key="107">خطأ في النظام الرجاء الاتصال منظومة المشرفون</entry>
+  <entry key="108">تسجيل الدخول</entry>
+  <entry key="109">مستخدم :</entry>
+  <entry key="110">المرور :</entry>
+  <entry key="111">اللغة</entry>
+  <entry key="112">تسجيل الدخول</entry>
+  <entry key="113">اشترك</entry>
+  <entry key="114">مستخدم :</entry>
+  <entry key="115">المرور :</entry>
+  <entry key="116">قلت :</entry>
+  <entry key="117">Firstname :</entry>
+  <entry key="118">Lastname :</entry>
+  <entry key="119">البريد :</entry>
+  <entry key="120">البلد :</entry>
+  <entry key="121">سجل</entry>
+  <entry key="122">الغاء</entry>
+  <entry key="123">سجل</entry>
+  <entry key="124">البيت</entry>
+  <entry key="125">المستعملون</entry>
+  <entry key="126">المجموعات</entry>
+  <entry key="127">المنظمات</entry>
+  <entry key="128">- غرف الاجتماع</entry>
+  <entry key="129">الجمهور</entry>
+  <entry key="130">منظمة</entry>
+  <entry key="131">أدخل</entry>
+  <entry key="132">تسجيل الدخول</entry>
+  <entry key="133">كلمة السر</entry>
+  <entry key="134">حروف</entry>
+  <entry key="135">Firstname</entry>
+  <entry key="136">Lastname</entry>
+  <entry key="137">بريد</entry>
+  <entry key="138">عيد الميلاد</entry>
+  <entry key="139">الشارع / لا</entry>
+  <entry key="140">الرمز البريدي / المدينة</entry>
+  <entry key="141">البلاد</entry>
+  <entry key="142">Adress - معلومات</entry>
+  <entry key="143">Userdata</entry>
+  <entry key="144">انقاذ</entry>
+  <entry key="145">انقاذ</entry>
+  <entry key="146">- رقم تعريف المستخدم</entry>
+  <entry key="147">تسجيل الدخول</entry>
+  <entry key="148">Firstname</entry>
+  <entry key="149">Lastname</entry>
+  <entry key="150">وتبين المقبل</entry>
+  <entry key="151">وتظهر قبل</entry>
+  <entry key="152">حذف سجل</entry>
+  <entry key="153">الغاء</entry>
+  <entry key="154">حذف</entry>
+  <entry key="155">قياسيه جديدة</entry>
+  <entry key="156">تجديد السجل</entry>
+  <entry key="157">حذف سجل</entry>
+  <entry key="158">المركز</entry>
+  <entry key="159">فاقد الاهليه</entry>
+  <entry key="160">مكن</entry>
+  <entry key="161">المنظمات</entry>
+  <entry key="162">التقويم</entry>
+  <entry key="163">وثيق</entry>
+  <entry key="164">منظمة معرف</entry>
+  <entry key="165">الاسم</entry>
+  <entry key="166">مستعمل</entry>
+  <entry key="167">وزارة الدفاع</entry>
+  <entry key="168">الادارة</entry>
+  <entry key="169">Userlevel</entry>
+  <entry key="170">منظمة</entry>
+  <entry key="171">الاسم</entry>
+  <entry key="172">تضيف منظمة</entry>
+  <entry key="173">تضيف منظمة</entry>
+  <entry key="174">الغاء</entry>
+  <entry key="175">اضف</entry>
+  <entry key="176">ازالة منظمة</entry>
+  <entry key="177">مستعمل</entry>
+  <entry key="178">اضافة مستخدم</entry>
+  <entry key="179">حذف المستخدم</entry>
+  <entry key="180">اضافة مستخدم</entry>
+  <entry key="181">البحث المستخدم</entry>
+  <entry key="182">البحث</entry>
+  <entry key="183">مستعمل</entry>
+  <entry key="184">منظمة</entry>
+  <entry key="185">أدخل</entry>
+  <entry key="186">Conferencerooms</entry>
+  <entry key="187">Conferencerooms</entry>
+  <entry key="188">الهوية</entry>
+  <entry key="189">الاسم</entry>
+  <entry key="190">الجمهور</entry>
+  <entry key="191">المنظمات</entry>
+  <entry key="192">Meetingrooms</entry>
+  <entry key="193">الاسم</entry>
+  <entry key="194">النوع</entry>
+  <entry key="195">الجمهور</entry>
+  <entry key="196">التعليق</entry>
+  <entry key="197">انقاذ</entry>
+  <entry key="198">حمل</entry>
+  <entry key="199">باستثناء ما ورد</entry>
+  <entry key="200">اسم الملف</entry>
+  <entry key="201">اسم الملف</entry>
+  <entry key="202">الغاء</entry>
+  <entry key="203">انقاذ</entry>
+  <entry key="204">خطأ</entry>
+  <entry key="205">التحميل</entry>
+  <entry key="206">الاشياء المحمله</entry>
+  <entry key="207">Snychronizing العملاء والزبائن على الانتظار :</entry>
+  <entry key="208">التحميل imagedata</entry>
+  <entry key="209">Snychronizing العملاء والزبائن على الانتظار :</entry>
+  <entry key="210">واضح drawarea</entry>
+  <entry key="211">Drawarea واضحة ، وجميع البيانات المتعلقة وحة ستضيع</entry>
+  <entry key="212">تأكد قبل التحميل الملف</entry>
+  <entry key="213">ارسال دعوة</entry>
+  <entry key="214">ارسال دعوة</entry>
+  <entry key="215">الموضوع</entry>
+  <entry key="216">المتلقيه</entry>
+  <entry key="217">رسالة</entry>
+  <entry key="218">أرسل</entry>
+  <entry key="219">الغاء</entry>
+  <entry key="220">أرسل</entry>
+  <entry key="221">Userdata</entry>
+  <entry key="222">الاسم المستعار الخاص بك لهذا المؤتمر</entry>
+  <entry key="223">نيك</entry>
+  <entry key="224">Firstname</entry>
+  <entry key="225">Lastname</entry>
+  <entry key="226">البريد الالكتروني</entry>
+  <entry key="227">اللغة</entry>
+  <entry key="228">أدخل</entry>
+  <entry key="229">التحميل</entry>
+  <entry key="230">بيانات التحميل ، يرجى الانتظار!</entry>
+  <entry key="231">خطأ كلمة السر</entry>
+  <entry key="232">الرجاء ادخال كلمات السر متطابقه مع اثنين على الاقل 4 احرف</entry>
+  <entry key="233">البريد الخطأ</entry>
+  <entry key="234">لقد قمت بادخال غير صالحة للبريد - Adress</entry>
+  <entry key="235">التسجيل الكامل</entry>
+  <entry key="236">لقد تم انشاء حسابك. يمكنك الان تسجيل الدخول.</entry>
+  <entry key="237">لا يمكنك حصة الشاشه في تلك اللحظة. شخص آخر بالفعل السهم دورته الشاشه.</entry>
+  <entry key="238">تقاسم ممنوع</entry>
+  <entry key="239">حصة الشاشه</entry>
+  <entry key="240">سيئة عرض النطاق الترددى : انك لم تتمكن من syncronize الشاشه. اطر سيتم صرف النظر عنها. اذا كان هذا التحذير هو مبين في كثير من الاحيان يمكن لك ان تطلب من وسيط الى خفض نوعية.</entry>
+  <entry key="241">من الشاشه :</entry>
+  <entry key="242">الطلاء</entry>
+  <entry key="243">الوثيقة</entry>
+  <entry key="244">الدردشه</entry>
+  <entry key="245">ملفات</entry>
+  <entry key="246">الاعضاء</entry>
+  <entry key="247">تنزيل الوثيقة الاصليه</entry>
+  <entry key="248">تنزيل قوات الدفاع الشعبي وثيقة</entry>
+  <entry key="249">حمل عرض لوحة</entry>
+  <entry key="250">التشكيل</entry>
+  <entry key="251">أسحب هذا الوجه من وجوه</entry>
+  <entry key="252">لتغيير هذا الوجه من وجوه</entry>
+  <entry key="253">٪</entry>
+  <entry key="254">من</entry>
+  <entry key="255">اذهب الى الصفحه الاولى</entry>
+  <entry key="256">اذهب الى الصفحه السابقة</entry>
+  <entry key="257">اذهب الى الصفحه التالية</entry>
+  <entry key="258">اذهب الى الصفحه الاخيرة</entry>
+  <entry key="259">تكبير --</entry>
+  <entry key="260">تكبير</entry>
+  <entry key="261">السيد</entry>
+  <entry key="262">السيدة</entry>
+  <entry key="263">التشكيل</entry>
+  <entry key="264">الهوية</entry>
+  <entry key="265">مفتاح</entry>
+  <entry key="266">التشكيل</entry>
+  <entry key="267">مفتاح</entry>
+  <entry key="268">آخر تحديث</entry>
+  <entry key="269">Updatedby</entry>
+  <entry key="270">التعليق</entry>
+  <entry key="271">مفتاح</entry>
+  <entry key="272">من</entry>
+  <entry key="273">المستعملون</entry>
+  <entry key="274">حذف المستخدم من المنظمه</entry>
+  <entry key="275">حذف</entry>
+  <entry key="276">هذا المستخدم هو بالفعل عضو في هذه المنظمه.</entry>
+  <entry key="277">اخبار</entry>
+  <entry key="278">Quicklinks</entry>
+  <entry key="279">جوتو المؤتمر</entry>
+  <entry key="280">قاعة جوتو</entry>
+  <entry key="281">مساعدة ودعم</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">تقرير أ بقة!</entry>
+  <entry key="285">أكثر</entry>
+  <entry key="286">مشروع شبكى (http://openmeetings.apache.org)</entry>
+  <entry key="287">مستخدم قائمة بريديه (http://openmeetings.apache.org/mail-lists.html - مستخدم)</entry>
+  <entry key="288">نتذكر تسجيل الدخول</entry>
+  <entry key="289">المحتوى</entry>
+  <entry key="290">صفحتي الرئيسية</entry>
+  <entry key="291">بلدي الجلسات المقررة</entry>
+  <entry key="292">بلادي المقرر الاحداث</entry>
+  <entry key="293">الجلسات العلنيه</entry>
+  <entry key="294">الجلسات السرية</entry>
+  <entry key="295">المناسبات العامة</entry>
+  <entry key="296">المناسبات الخاصة</entry>
+  <entry key="297">الجمهور محتوى</entry>
+  <entry key="298">المحتوى الخاص</entry>
+  <entry key="299">الشخصيه المحتوى</entry>
+  <entry key="300"></entry>
+  <entry key="301">الاعتدال</entry>
+  <entry key="302">طلب للحصول على الاعتدال</entry>
+  <entry key="303">استطلاعات الرأي</entry>
+  <entry key="304">اختر ملف</entry>
+  <entry key="305">أماكن</entry>
+  <entry key="306">كأم التابعة لهيئة التصنيع العسكرى والاعدادات</entry>
+  <entry key="307">لوح الاعدادات</entry>
+  <entry key="308">خروج</entry>
+  <entry key="309">عودة الى غرف</entry>
+  <entry key="310">خروج</entry>
+  <entry key="311">Desktop Viewer</entry>
+  <entry key="312">start Desktop Viewer</entry>
+  <entry key="313">صوت و صورة</entry>
+  <entry key="314">دردشة</entry>
+  <entry key="315">لوح أبيض</entry>
+  <entry key="316">(إعادة) بدء صوت / صورة أو تغيير إعدادات الجهاز</entry>
+  <entry key="317">ملفات</entry>
+  <entry key="318">مستخدمين</entry>
+  <entry key="319">إستطلاعات</entry>
+  <entry key="320">هذا الإسم لا يعود إلى أي مستخدم</entry>
+  <entry key="321">لقد تم إرسال بريد يتضمن رابط خاص إلى بريدك الإلكتروني، الرجاء تفحص صندوق البريد. إذا لم تحصل بعد على بريد إلكتروني، الرجاء تعديل إعدادات البريد المزعج و قم بإعادة إرسال البريد الإلكتروني الخاص بالتأكيد.</entry>
+  <entry key="322">خطأ</entry>
+  <entry key="323">رسالة</entry>
+  <entry key="324">مزيج غير صالح. ليس هناك أي مستخدم.</entry>
+  <entry key="325">إستعادة كلمة المرور</entry>
+  <entry key="326">تسجيل الدخول</entry>
+  <entry key="327">تغيير كلمة المرور</entry>
+  <entry key="328">كلمة مرور جديدة</entry>
+  <entry key="329">إعادة إدخال كلمة المرور</entry>
+  <entry key="330">كلمات المرور التي أدخلتها ليست متطابقة</entry>
+  <entry key="331">أربع أحرف أو أكثر</entry>
+  <entry key="332">تم تسجيل كلمة المرور. يمكنك الآن تسجيل الدخول</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">خطأ غير معروف. الرجاء إبلاغ فريق الخدمة</entry>
+  <entry key="335">إسم المستخدم غير موجود</entry>
+  <entry key="336">كلمة مرور غير صحيحة</entry>
+  <entry key="337">تم تسجيل الخروج بنجاح</entry>
+  <entry key="338">تم إلغاء التسجيل السابق.</entry>
+  <entry key="339">بريد إلكتروني غير صحيح</entry>
+  <entry key="340">إسم ملف مكرر. الرجاء إختيار إسماً آخراً</entry>
+  <entry key="341">إسم الملف قصير</entry>
+  <entry key="342">لا يمكن حفظ العنوان</entry>
+  <entry key="343">تمت إضافة المستخدم لكن يجب إنساب هذا المستخدم إلى تنظيم و إلا لن يمكنه تسجيل الدخول.</entry>
+  <entry key="344">سجل جديد</entry>
+  <entry key="345">ليس هناك أي حقل يحمل هذا Id.</entry>
+  <entry key="346">ليس هناك إسم لهذه الرقعة.</entry>
+  <entry key="347">المطلوب إذن المشرف</entry>
+  <entry key="348">محرر اللغة</entry>
+  <entry key="349">لغة</entry>
+  <entry key="350">معرف الرقعة</entry>
+  <entry key="351">إسم الرقعة</entry>
+  <entry key="352">قيمة</entry>
+  <entry key="353">حقل القيم</entry>
+  <entry key="354">إسم الرقعة</entry>
+  <entry key="355">قيمة الرقعة</entry>
+  <entry key="356">معرف الرقعة</entry>
+  <entry key="357">لقد حذفت الرقعة ليس الحقل! لا يمكنك حذف الحقل. يمكن أن يكون له رقع في لغات أخرى.</entry>
+  <entry key="358">رقعة غير صالح ةid. لا يمكن إيجاد The FieldLanguagesvalues_Id في قاعدة البيانات.</entry>
+  <entry key="359">لا يمكنك حذف هذا الحقل. يمكنك فقط حذف رقعات لا حلقات. ليس هناك أي رقعات محملة في هذه الأثناء، سواء لم تختر أي حقل أو ليس هناك أي رقعة معرفة لهذه اللغة لهذا الحقل.</entry>
+  <entry key="360">تصدير</entry>
+  <entry key="361">يجب أن تخرج لرؤية التغييرات.</entry>
+  <entry key="362">إضافة لغة جديدة</entry>
+  <entry key="363">delete language</entry>
+  <entry key="364">حذف لغة</entry>
+  <entry key="365">إسم</entry>
+  <entry key="366">إضافة لغة</entry>
+  <entry key="367">نسخ إحتياطي</entry>
+  <entry key="368">القفز إلى الأول</entry>
+  <entry key="369">القفز إلى السابق</entry>
+  <entry key="370">القفز إلى التالي</entry>
+  <entry key="371">القفز إلى الأخير</entry>
+  <entry key="372">المستخدم يتكلم</entry>
+  <entry key="373">تشغيل/إيقاف الصوت</entry>
+  <entry key="374">نظام</entry>
+  <entry key="375">إعداداتك</entry>
+  <entry key="376">مرحباً،</entry>
+  <entry key="377">إضافة ملف التعريف</entry>
+  <entry key="378">رسائل جديدة:</entry>
+  <entry key="379">إيداع صور جديدة</entry>
+  <entry key="380">بيانات المستخدم - تصدير</entry>
+  <entry key="381">يجب أن تكون المنظمات موجودة!</entry>
+  <entry key="382">بدء التصدير</entry>
+  <entry key="383">عن طريق المنظمة</entry>
+  <entry key="384">بدء التصدير</entry>
+  <entry key="385">بيانات المستخدم - إستيراد</entry>
+  <entry key="386">إختر users.xml</entry>
+  <entry key="387">إستيراد</entry>
+  <entry key="388">Export to XML - These files can be used to: - Contribute to the project - Import into another System - Backup - Customization - Put it into the language-directory for your next installation</entry>
+  <entry key="389">Choose a language file to import. Choose the right Langauge from the Combobox! No matter what the name of the file is, it will be imported into this language!</entry>
+  <entry key="390">إستيراد - إختر ملف</entry>
+  <entry key="391">حفظ بإسم</entry>
+  <entry key="392">إسم:</entry>
+  <entry key="393">تعليق:</entry>
+  <entry key="394">حفظ</entry>
+  <entry key="395">تسجيلات</entry>
+  <entry key="396">مشاهدين التسجيلات</entry>
+  <entry key="397">تسجيلات الغرف العامة و الخاصة</entry>
+  <entry key="398">مستخدمين:</entry>
+  <entry key="399">إنضم:</entry>
+  <entry key="400"></entry>
+  <entry key="401">المستخدمين في هذه الغرفة:</entry>
+  <entry key="402">تحديث</entry>
+  <entry key="403">هذه الغرفة ممتلئة. حاول بعد بضع دقائق مرة أخرى.</entry>
+  <entry key="404">إضغط على الغرفة للحصول على تفاصيل</entry>
+  <entry key="405">دردشة مع المستخدمين في هذه الغرفة:</entry>
+  <entry key="406">غرفة:</entry>
+  <entry key="407">مستخدمين في هذه الغرفة:</entry>
+  <entry key="408">منذ:</entry>
+  <entry key="409">شغل التسجيل</entry>
+  <entry key="410">الطول:</entry>
+  <entry key="411">التاريخ:</entry>
+  <entry key="412">أسلوب المسجل! لا يمكنك تغيير القيم، هذا ملف مسجل!</entry>
+  <entry key="413">شغل هذا المسجل</entry>
+  <entry key="414">تشغيل/إيقاف</entry>
+  <entry key="415">بدء التسجيل</entry>
+  <entry key="416">إيقاف التسجيل</entry>
+  <entry key="417">تسجيل:</entry>
+  <entry key="418">هناك شخص آخر يقوم بالتسجيل في هذه الأثناء:</entry>
+  <entry key="419">تسجيل! عن طريق المستخدم:</entry>
+  <entry key="420">إلغاء</entry>
+  <entry key="421">سيتم إلغاء التسجيل دون حفظه.</entry>
+  <entry key="422">إستئناف</entry>
+  <entry key="423">اقفل النافذة و إستأنف التسجيل</entry>
+  <entry key="424">تغيير لون الخط</entry>
+  <entry key="425">إختر اللون</entry>
+  <entry key="426">تمكين/تعطيل لون الخط</entry>
+  <entry key="427">تغيير ملء اللون</entry>
+  <entry key="428">تعطيل / تشغيل ملء اللون</entry>
+  <entry key="429">تغيير عرض الخط</entry>
+  <entry key="430">غلق</entry>
+  <entry key="431">تغيير حجم الحروف</entry>
+  <entry key="432">حذف التسجيل</entry>
+  <entry key="433">ضيف</entry>
+  <entry key="434">عند:</entry>
+  <entry key="435">إسم</entry>
+  <entry key="436">غرفة</entry>
+  <entry key="437">تاريخ</entry>
+  <entry key="438">إلغاء</entry>
+  <entry key="439">بدء</entry>
+  <entry key="440">إسم</entry>
+  <entry key="441">تاريخ</entry>
+  <entry key="442">حذف server-chatlog</entry>
+  <entry key="443">دردشة</entry>
+  <entry key="444">إرسال رسالة</entry>
+  <entry key="445">رموز</entry>
+  <entry key="446">رموز</entry>
+  <entry key="447">إختر الأجهزة المنشورة</entry>
+  <entry key="448">صوت و صورة</entry>
+  <entry key="449">صوت فقط</entry>
+  <entry key="450">صورة فقط</entry>
+  <entry key="451">لا صورة/صوت (صورة ثابتة)</entry>
+  <entry key="452">لا صوت/صورة ستنشر من جهازك، بدلاً من هذا ستظهر صورة من ملفك. إختر هذه الإعدادات إذا كان لديك مشاكل مع عرض النطاق الترددي أو إذا كان إتصالك بالإنترنت بطيئاً.</entry>
+  <entry key="453">الإثنين</entry>
+  <entry key="454">الثلاثاء</entry>
+  <entry key="455">الأربعاء</entry>
+  <entry key="456">الخميس</entry>
+  <entry key="457">الجمعة</entry>
+  <entry key="458">السبت</entry>
+  <entry key="459">الأحد</entry>
+  <entry key="460">الإثنين</entry>
+  <entry key="461">الثلثاء</entry>
+  <entry key="462">الأربعاء</entry>
+  <entry key="463">الخميس</entry>
+  <entry key="464">الجمعة</entry>
+  <entry key="465">السبت</entry>
+  <entry key="466">الأحد</entry>
+  <entry key="467">التقويم الأسبوعي</entry>
+  <entry key="468">التقويم الأسبوعي</entry>
+  <entry key="469">كانون الثاني(يناير)</entry>
+  <entry key="470">شباط(فبراير)</entry>
+  <entry key="471">آذار(مارس)</entry>
+  <entry key="472">نيسان(أبريل)</entry>
+  <entry key="473">أيار(مايو)</entry>
+  <entry key="474">حزيران(يونيو)</entry>
+  <entry key="475">تموز(يوليو)</entry>
+  <entry key="476">آب(أغسطس)</entry>
+  <entry key="477">أيلول(سبتمبر)</entry>
+  <entry key="478">تشرين أول(أكتوبر)</entry>
+  <entry key="479">تشرين ثاني(نوفمبر)</entry>
+  <entry key="480">كانون أول(ديسمبر)</entry>
+  <entry key="481">تقويم</entry>
+  <entry key="482">المشاركون</entry>
+  <entry key="483">عرض إعدادات التصميم</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">عرض | طول</entry>
+  <entry key="486">صندوق الفيديو</entry>
+  <entry key="487">صندوق الإدارة</entry>
+  <entry key="488">X</entry>
+  <entry key="489">صندوق اللوح</entry>
+  <entry key="490">ممكن</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">عرض | طول</entry>
+  <entry key="493">صندوق - ملفات،دردشة،مشاركين</entry>
+  <entry key="494">ممكن</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">عرض | طول</entry>
+  <entry key="497">لقد ترك رئيس الجلسة الغرفة. ليس هناك أي رئيس للجلسة في هذه الأثناء. يمكنك التقدم لرئاسة الجلسة أو الإنتظار.</entry>
+  <entry key="498">ليس هناك أي رئيس للجلسة في هذه الغرفة، و لكن هناك بعد المشاركين. عليك التقدم لرئاسة الجلسة أو الإنتظار.</entry>
+  <entry key="499">ملاحظات {0}</entry>
+  <entry key="500">{0} - دعوات</entry>
+  <entry key="501">رسالة من المستخدم:</entry>
+  <entry key="502">رسالة:</entry>
+  <entry key="503">أنقر على هذا الرابط للمشاركة في الإجتماعات:</entry>
+  <entry key="504">أنقر هنا لدخول الغرفة:</entry>
+  <entry key="505">إذا واجهتك مشاكل مع الرابط، الرجاء نسخه و من ثم لصقه في المتصفح:</entry>
+  <entry key="506">تسجيل {0}</entry>
+  <entry key="507">بياناتك:</entry>
+  <entry key="508">تسجيل الدخول:</entry>
+  <entry key="509">كلمة المرور:</entry>
+  <entry key="510">البريد الإلكتروني:</entry>
+  <entry key="511">فريق - OpenMeeting</entry>
+  <entry key="512">إنشاء حساب OpenMeeting</entry>
+  <entry key="513">إعادة ضبط كلمة مرور - OpenMeeting</entry>
+  <entry key="514">انقر على هذا الرابط من أجل إدخال كلمة مرور جديدة:</entry>
+  <entry key="515">انقر على هنا من أجل إدخال كلمة مرور جديدة</entry>
+  <entry key="516">إذا واجهتك مشاكل مع هذا الرابط، الرجاء نسخه و لصقه في المتصفح:</entry>
+  <entry key="517">إعادة ضبط كلمة مرور OpenMeeting</entry>
+  <entry key="518">الرجاء إدخال تاريخ صالح 24.12.2001 (يوم، شهر، سنة)</entry>
+  <entry key="519">الرجاء إدخال بريد إلكتروني صالح، مثلاً name@mail.com</entry>
+  <entry key="520">الرجاء إدخال عدد من أعداد الفاصلة العائمة، مثلاً 1.00</entry>
+  <entry key="521">الرجاء إدخال عدد صحيح، مثلاً 100</entry>
+  <entry key="522">الرجاء إدخال رقم هاتف صحيح، مثلاً ++49 0123 123123</entry>
+  <entry key="523">الرجاء إدخال وقت صالح، مثلاً 12:23 (hh:mm)</entry>
+  <entry key="524">محمي عن طريق كلمة مرور</entry>
+  <entry key="525">كلمة المرور</entry>
+  <entry key="526">مدة الصلاحية</entry>
+  <entry key="527">أبدي</entry>
+  <entry key="528">مدة</entry>
+  <entry key="529">وقت واحد</entry>
+  <entry key="530">صالح من:</entry>
+  <entry key="531">صالح لغاية:</entry>
+  <entry key="532">دعوة إلى To {0}</entry>
+  <entry key="533">ليس هناك دعوة متوفرة لرمز الدعوة هذا</entry>
+  <entry key="534">هذه الدعوة استخدمت من قبل. لا يمكن إعادة إستخدام هذا النوع من الدعوات.</entry>
+  <entry key="535">رمز الدعوة هذا ليس صالح.</entry>
+  <entry key="536">كلمة المرور:</entry>
+  <entry key="537">إفحص كلمة المرور</entry>
+  <entry key="538">كلمة مرور غير صحيحة!</entry>
+  <entry key="539">متصفح</entry>
+  <entry key="540">مزامنة الصوت/الصورة</entry>
+  <entry key="541">تسجيل الدخول صحيح لكن الجلسة التي إخترتها معطلة أو مخزنة في الخادوم. تحتاج أن تحصل على ID-جلسة جديد و تسجل الدخول من جديد.</entry>
+  <entry key="542">ID-جلسة لم تسجل الدخول أو ليس لديها حقوق المسؤول. The SOAP Gateway يحتاج إلى مستخدم لديه حقوق مسؤول ليتضمن مستخدمين جدد.</entry>
+  <entry key="543">ليس لدى هذه الجلسة إتصال ب-Remoteuser-Data. سواء لم تصل ب- SOAP-Gateway قبل البدء بالإستعمال أو أنك تستخدم جلسة-ID خاطئة.</entry>
+  <entry key="544">يكون التسجيل حالياً Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">ع</entry>
+  <entry key="550">عرض</entry>
+  <entry key="551">ط</entry>
+  <entry key="552">طول</entry>
+  <entry key="553">تغيير الشفافية</entry>
+  <entry key="554">فتح المتصفح</entry>
+  <entry key="555">إغلاق المتصفح</entry>
+  <entry key="556">لقد تم فقدان الإتصال بالخادوم. عليك تحديث الطلب أو تفحص الشبكة.</entry>
+  <entry key="557">المؤشر</entry>
+  <entry key="558">المزامنة</entry>
+  <entry key="559">مزامنة المستخدمين، الرجاء الإنتظار</entry>
+  <entry key="560">&lt;u&gt;Download as SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download as PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download as JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download as PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download as TIF&lt;/u&gt;</entry>
+  <entry key="565">مذكرة:</entry>
+  <entry key="566">فئة:</entry>
+  <entry key="567">التكرار:</entry>
+  <entry key="568">لا أحد</entry>
+  <entry key="569">موقع:</entry>
+  <entry key="570">بداية</entry>
+  <entry key="571">نهاية</entry>
+  <entry key="572">عنوان:</entry>
+  <entry key="573">تعليق:</entry>
+  <entry key="574">دعوة ناس</entry>
+  <entry key="575">يومي</entry>
+  <entry key="576">شهري</entry>
+  <entry key="577">سنوي</entry>
+  <entry key="578">نهاية الموعد بعد بداية الموعد!</entry>
+  <entry key="579">الرجاء إدخال عنوان!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">قم بتشغيل هذا إن كنت تستخدم لغة تكتب من اليمن إلى اليسار (ترتيب كلمات معكوس)</entry>
+  <entry key="582">لوحة أجهزة القياس</entry>
+  <entry key="583">مشاهدة الإجتماعات أو الاحداث المسجلة</entry>
+  <entry key="584">إجتماع - قم بتشكيل مؤتمر مع 4 (حتى 16) مستخدمين&lt;br/&gt;يحصل الجميع على صوت و صورة</entry>
+  <entry key="585">حدث - قم بتشكيل مؤتمر مع إلى 200 مشارك&lt;br/&gt;رئيس المؤتمر فقط يكون لديه صوت و صورة</entry>
+  <entry key="586">قم بخلق مستخدمين، غرف، منظمات&lt;br/&gt; + تغيير الترتيبات</entry>
+  <entry key="587">المستخدمين في هذه الغرفة في الوقت الحالي</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">تسجيل الدخول</entry>
+  <entry key="590">D</entry>
+  <entry key="591">تحمل وثائق. التجاء الإنتظار حتى يتم مزامنة كل العملاء.</entry>
+  <entry key="592">تم الإيداع، تحويل الوثيقة ...</entry>
+  <entry key="593">بدء الإيداع</entry>
+  <entry key="594">إيداع و إستيراد الحوار. الرجاء إختيار ملف من الإسطوانة.</entry>
+  <entry key="595">إلغاء</entry>
+  <entry key="596">إختيار الملف</entry>
+  <entry key="597">إتصالات</entry>
+  <entry key="598">قيمة</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">تسجيل الدخول</entry>
+  <entry key="601">متصل منذ</entry>
+  <entry key="602">غرفة / إطار</entry>
+  <entry key="603">رمي المستخدم</entry>
+  <entry key="604">رمي المستخدم</entry>
+  <entry key="605">هل تريد فعلاً أن ترمي العميل خارج الإتصال؟&lt;br/&gt; هذا سوف يقوم فقط بإخراج الزبون من الغرفة الحالية. يمكن للزبون أن يدخل مرة أخرى.</entry>
+  <entry key="606">لقد تم إغلاق جلستك عن طريق المسؤول أو رئيس الجلسة.</entry>
+  <entry key="607">هاتف</entry>
+  <entry key="608">المستخدم هو الرئيس في هذه الغرفة.</entry>
+  <entry key="609">يسمح للمستخدم الرسم على اللوح.</entry>
+  <entry key="610">(إعادة) بدء صوت / صورة أو تغيير إعدادات الجهاز</entry>
+  <entry key="611">السماح لهذا المستخدم بالرسم على اللوح</entry>
+  <entry key="612">إلغاء قدرة الرسم على اللوح</entry>
+  <entry key="613">المستخدمين</entry>
+  <entry key="614">الملفات</entry>
+  <entry key="615">اللوح</entry>
+  <entry key="616">دردشة</entry>
+  <entry key="617">حسابك يعود إلى عدة منظمات. الرجاء إختيار واحدة لهذه الجلسة.</entry>
+  <entry key="618">هذه الغرفة مليئة في هذه الأثناء. الرجاء المحاولة لاحقاً.</entry>
+  <entry key="619">نوع الغرفة.</entry>
+  <entry key="620">غرفة المواعيد</entry>
+  <entry key="621">وقت الخادوم.</entry>
+  <entry key="622">مذكرة - OpenMeeting</entry>
+  <entry key="623">رسالة من المستخدم:</entry>
+  <entry key="624">رسالة:</entry>
+  <entry key="625">أنقر على هذا الرابط للمشاركة في الإجتماع:</entry>
+  <entry key="626">أنقر هنا لدخول الغرفة</entry>
+  <entry key="627">إذا كان لديك مشاكل مع الرابط، الرجاء نسخه و لصقه في المتصفح:</entry>
+  <entry key="628">البحث في الداخل</entry>
+  <entry key="629">مستخدم خارجي</entry>
+  <entry key="630">إسم الكنية</entry>
+  <entry key="631">إسم</entry>
+  <entry key="632">بريد إلكتروني</entry>
+  <entry key="633">أكد الخروج</entry>
+  <entry key="634">هل أنت متأكد أنك تريد تسجيل الخروج؟</entry>
+  <entry key="635">النشاطات</entry>
+  <entry key="636">غرفة تجريبية</entry>
+  <entry key="637">وقت تجريبي</entry>
+  <entry key="638">عداد الإجتماع</entry>
+  <entry key="639">هذه الغرفة هي غرفة تجربة. لتعطيل هذه التحذير عليك الحصول على غرفة خاصة للإستخدام الخاص أو إنشاء خادم خاص. سوف يتم إخراجك فوراً في:</entry>
+  <entry key="640">مدار</entry>
+  <entry key="641">الرجاء إنتظار دخول المدير الغرفة. يمكن أن يكون المدير معلم، مسؤول أو منشئ هذه الغرفة.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">وصول مشاركة الشاشة</entry>
+  <entry key="644">هناك مشارك شاشة قادمة من المستخدم:</entry>
+  <entry key="645">بدء المشاركة</entry>
+  <entry key="646">إضافة لقاء جديد</entry>
+  <entry key="647">غرفة الإجتماع</entry>
+  <entry key="648">غرفة الحدث</entry>
+  <entry key="649">إدارة</entry>
+  <entry key="650">المستخدمين المدراء</entry>
+  <entry key="651">الغرف المدارة</entry>
+  <entry key="652">M</entry>
+  <entry key="653">هل تريد تغيير هذا المستخدم و جعله مدير هذه المنظمة؟</entry>
+  <entry key="654">الرجاء إختيار المنظمة قبل محاول إضافة مستخدم إليها!</entry>
+  <entry key="655">منظمة - مدير</entry>
+  <entry key="656">هل تريد بالفعل حذف هذا المستخدم من المنظمة؟</entry>
+  <entry key="657">هذا المستخدم هو مدير</entry>
+  <entry key="658">هذا المستخدم ليس مديراً</entry>
+  <entry key="659">هل تريد أن لا يكون هذا المستخدم مدير هذه المنظمة؟</entry>
+  <entry key="660">إضافة أو حذف مستخدمين أو غرف ضمن منظمتك</entry>
+  <entry key="661">هل تريد حقاً حذف هذا التسجيل؟</entry>
+  <entry key="662">هل تريد حقاً حذف هذا المستخدم من منظمتك؟ سوف يتم فقط حذف الإتصال بين المستخدم و منظمتك، من أجل حذف المستخدم يجب أن تدخل لوحة المسؤول.</entry>
+  <entry key="663">لا يمكنك حذف مستخدمك!</entry>
+  <entry key="664">لتنفيذ هذه الطريقة تحتاج لحساب مسؤول!</entry>
+  <entry key="665">ليس هناك أي جلسة ترتبط ب- ID هذا.</entry>
+  <entry key="666">هذا حساب مسؤول أو مدير. يمكن تحرير هذا الحساب عن طريق لوحة المسؤول.</entry>
+  <entry key="667">لإكمال التسجيل الرجاء النقر على الرابط التالي. أو نسخ URL إلى المتصفح.</entry>
+  <entry key="668">أنقر من أجل التحقق من بريدك الإلكتروني</entry>
+  <entry key="669">ليس هناك أي مستخدم لهذا الخليط.</entry>
+  <entry key="670">هذا المستخدم معطل!</entry>
+  <entry key="671">لقد تم تفعيل حسابك بنجاح!</entry>
+  <entry key="672">تسجيل الدخول الآن</entry>
+  <entry key="673">حسابك ليس شغال. إستخدم أولاً الرابط في البريد الإلكتروني الذي حصلت عليه خلال التسجيل.</entry>
+  <entry key="674">لقد تم فتح حسابك بنجاح. لقد تم إرسال بريد إلكتروني مع رمز تحقق إلى بريدك. الرجاء التحقق من بريدك الإلكتروني.</entry>
+  <entry key="675">إزالة دور الإدارة من هذا المستخدم</entry>
+  <entry key="676">منح هذا المستخدم حق الإدارة</entry>
+  <entry key="677">مستخدم</entry>
+  <entry key="678">مدخل إلى اللوح</entry>
+  <entry key="679">مدير</entry>
+  <entry key="680">إدارة: الرجاء إختيار أي مستخدم على القائمة لمنحه مدخل إلى اللوح، الإدارة أو الفيديو.</entry>
+  <entry key="681">هذا المستخدم هو مدير، لهذا لديه تلقائياً الحق في الرسم على اللوح.</entry>
+  <entry key="682">هذا أنت! لا يمكنك إزالة حقوق الإدارة من نفسك.</entry>
+  <entry key="683">السماح لهذا المستخدم نشر صوت / صورة</entry>
+  <entry key="684">حذف صوت / صورة من هذا المستخدم</entry>
+  <entry key="685">أود أن أدير هذه الغرفة</entry>
+  <entry key="686">أود أن أرسم على اللوح</entry>
+  <entry key="687">أو أن أشارك صوت / صورة</entry>
+  <entry key="688">أنت مدير هذه الغرفة</entry>
+  <entry key="689">لديك حق الرسم على اللوح</entry>
+  <entry key="690">لديك حق مشاركة صوت / صورة</entry>
+  <entry key="691">رسالة إلى المدير</entry>
+  <entry key="692">المستخدم</entry>
+  <entry key="693">يود أن يحصل على الإدارة. إستخدم أيقونات الحالات جانب المستخدم في قائمة المستخدمين لإضافة أو حذف الإدارة.</entry>
+  <entry key="694">يود أن يرسم على اللوح. إستخدم أيقونات الحالات جانب المستخدم في قائمة المستخدمين لإضافة أو حذف حق الرسم على اللوح.</entry>
+  <entry key="695">يود أن يتشارك الصوت/الصورة. إستخدم أيقونات الحالات جانب المستخدم في قائمة المستخدمين لإضافة أو حذف حق المشاركة صوت/صورة لأي مستخدم.</entry>
+  <entry key="696">عليك إنتظار المدير حتى يدخل الغرفة.</entry>
+  <entry key="697">إلغاء</entry>
+  <entry key="698">حفظ</entry>
+  <entry key="699">يوم</entry>
+  <entry key="700">شهر</entry>
+  <entry key="701">سنة</entry>
+  <entry key="702">إيداع ملف</entry>
+  <entry key="703">إضافة مجلد</entry>
+  <entry key="704">تحديث</entry>
+  <entry key="705">قمامة</entry>
+  <entry key="706">ملفاتي (Home Drive)</entry>
+  <entry key="707">غرفة الملفات (Public Drive)</entry>
+  <entry key="708">إضافة ملف</entry>
+  <entry key="709">إضافة مجلد</entry>
+  <entry key="710">حذف مجلد</entry>
+  <entry key="711">تحرير إسم</entry>
+  <entry key="712">مجلد جديد</entry>
+  <entry key="713">هل أنت متأكد أنك تريد حذف هذا البند؟</entry>
+  <entry key="714">بحث</entry>
+  <entry key="715">بحث</entry>
+  <entry key="716">فتح وثيقة</entry>
+  <entry key="717">إظهار كل الملفات (Tree View)</entry>
+  <entry key="718">إغلاق وثيقة</entry>
+  <entry key="719">حذف ملف</entry>
+  <entry key="720">لا يسمح لك بالرسم على هذا اللوح. تحتاج أن تكون مديراً أو أن تحصل على الأقل على حق تحرير لوح. يجب أن تسأل مديراً للحصول على هذا الحق.</entry>
+  <entry key="721">خصائص الوثيقة</entry>
+  <entry key="722">بدأ العميل (external)</entry>
+  <entry key="723">بدأ العميل (HTTP)</entry>
+  <entry key="724">مسخدم يود تقاسم شاشته. هل تريد رؤيتها؟</entry>
+  <entry key="725">أنت تتشارك سطح مكتبك في هذه الأثناء. لإيقاف جلسة المشاركة الرجاء النقر زر توقف في عميل المشاركة.</entry>
+  <entry key="726">جلسة المشاركة</entry>
+  <entry key="727">أنت تتشارك سطح مكتبك!</entry>
+  <entry key="728">مشاهد سطح المكتب</entry>
+  <entry key="729">خروج</entry>
+  <entry key="730">مقاسم سطح المكتب</entry>
+  <entry key="731">أنقر على إبدأ لنشر شاشتك</entry>
+  <entry key="732">بدء المشاركة</entry>
+  <entry key="733">إيقاف المشاركة</entry>
+  <entry key="734">إختر نطاق شاشتك:</entry>
+  <entry key="735">تغيير العرض</entry>
+  <entry key="736">إنتهى المشارك من هذه الجلسة!</entry>
+  <entry key="737">تغيير الطول</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">العرض:</entry>
+  <entry key="741">الطول:</entry>
+  <entry key="742">قطع الإتصال من الخادوم</entry>
+  <entry key="743">إلغاء</entry>
+  <entry key="744">بدء الخارجي</entry>
+  <entry key="745">إذا أقفلت هذه الجلسة كلياً لن يعد بإمكانك البدء من جديد بالمشاهد لهذه الجلسة.</entry>
+  <entry key="746">تأكيد إقفال جسلة المشاهد</entry>
+  <entry key="747">مشاركة الشاشةShare Screen</entry>
+  <entry key="748">تسجيل الجلسةRecord Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">السابقPrevious</entry>
+  <entry key="752">التالي</entry>
+  <entry key="753">تحديث</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">شحن</entry>
+  <entry key="756">إجعل هذه الصفحة صفحة ملفك الإفتراضية.</entry>
+  <entry key="757">فحص الإعداد</entry>
+  <entry key="758">إفحص إعدادات الميكروفون و الكاميرا قبل دخولك الغرفة عن طريق التسجيل لبضع ثوان. يمكنك بعدها رؤية التسجيل لفحص الصوت و الصورة.</entry>
+  <entry key="759">لا تظهر هذا الإختبار بعد الآن</entry>
+  <entry key="760">إلغاء</entry>
+  <entry key="761">بدء المؤتمر</entry>
+  <entry key="762">لا تسأل مجدداً</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">يمكنك المتابعة دون الفحص إذا لا تريد نشر صورتك و صوتك. يمكن للمشاركين دون صوت و صورة متابعة إستخدام اللوح، مشاركة سطح المكتب أو كتابة رسائل دردشة.</entry>
+  <entry key="766">توقف</entry>
+  <entry key="767">مقياس المستوى</entry>
+  <entry key="768">إضغط على البداية</entry>
+  <entry key="769">بدء المؤتمر</entry>
+  <entry key="770">بدء الحدث</entry>
+  <entry key="771">إختر غرفة</entry>
+  <entry key="772">فحص الإعدادات</entry>
+  <entry key="773">بدء المؤتمر</entry>
+  <entry key="774">الطريق إلى المؤتمر:</entry>
+  <entry key="775">بدء التسجيل</entry>
+  <entry key="776">لا تظهر فحص صوت / صورة (تسجيل) قبل دخول المؤتمر</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_bg.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
new file mode 100644
index 0000000..2fbf6ac
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_bg.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Конференция</entry>
+  <entry key="2">Среща</entry>
+  <entry key="3">Класна стая</entry>
+  <entry key="4">Настройки</entry>
+  <entry key="5">Профил</entry>
+  <entry key="6">Администриране</entry>
+  <entry key="7">Стоп</entry>
+  <entry key="8">Запис</entry>
+  <entry key="9">Няма наличен файл</entry>
+  <entry key="10">Запис от учител</entry>
+  <entry key="11">Свързани потребители</entry>
+  <entry key="12">Започване на конференция</entry>
+  <entry key="13">Моето име</entry>
+  <entry key="14">Видеоконференция</entry>
+  <entry key="15">Качване на файл</entry>
+  <entry key="16">Опресняване на списъка</entry>
+  <entry key="17">Към главната папка</entry>
+  <entry key="18">Нова анкета</entry>
+  <entry key="19">Нова анкета за конференцията.</entry>
+  <entry key="20">Въпрос:</entry>
+  <entry key="21">Тип анкета:</entry>
+  <entry key="22">Създаване</entry>
+  <entry key="23">Инфо: Всеки свързан потребител получава съобщение за новата анкета.</entry>
+  <entry key="24">Създаване на анкета</entry>
+  <entry key="25">Отказ</entry>
+  <entry key="26">Да/Не</entry>
+  <entry key="27">Числов 1-10</entry>
+  <entry key="28">Анкета</entry>
+  <entry key="29">Трябва да сте модератор, за да добавите нов въпрос</entry>
+  <entry key="30">Гласът Ви е отчетен.</entry>
+  <entry key="31">Вече сте гласували в анкетата.</entry>
+  <entry key="32">Гласуване</entry>
+  <entry key="33">Вашият отговор:</entry>
+  <entry key="34">Да</entry>
+  <entry key="35">Не</entry>
+  <entry key="36">иска да знае:</entry>
+  <entry key="37">Резултати от анкетата</entry>
+  <entry key="38">Въпрос:</entry>
+  <entry key="39">Резултати:</entry>
+  <entry key="40">Отговори:</entry>
+  <entry key="41">Не са започнати анкети.</entry>
+  <entry key="42">Гласуване</entry>
+  <entry key="43">Среща (макс. 4 места)</entry>
+  <entry key="44">Конференция (макс. 50 места)</entry>
+  <entry key="45">Тип</entry>
+  <entry key="46">Оставащи места</entry>
+  <entry key="47">Вече избран</entry>
+  <entry key="48">вход</entry>
+  <entry key="49">Модераторът е напуснал срещата.</entry>
+  <entry key="50">Системна информация</entry>
+  <entry key="51">Избор на устройства</entry>
+  <entry key="52">Избор на уебкамера:</entry>
+  <entry key="53">Избор на микрофон:</entry>
+  <entry key="54">ОК</entry>
+  <entry key="55">Отказ</entry>
+  <entry key="56">Трябва да се свържете отново.</entry>
+  <entry key="57">Редактиране на настройките</entry>
+  <entry key="58">Курс:</entry>
+  <entry key="59">Език:</entry>
+  <entry key="60">ОК</entry>
+  <entry key="61">Отказ</entry>
+  <entry key="62">Изчистване на дъската</entry>
+  <entry key="63">Искате ли дъската да се изчиства, преди да бъде добавена нова снимка?</entry>
+  <entry key="64">Не питай отново</entry>
+  <entry key="65">не</entry>
+  <entry key="66">Редактиране на настройките</entry>
+  <entry key="67">Потвърждение преди изчистването на дъската</entry>
+  <entry key="68">Информация за потребител</entry>
+  <entry key="69">Изчистване на зоната за рисуване</entry>
+  <entry key="70">Стъпка назад</entry>
+  <entry key="71">Стъпка напред</entry>
+  <entry key="72">Маркиране на обект</entry>
+  <entry key="73">Текст</entry>
+  <entry key="74">Рисуване</entry>
+  <entry key="75">Чертаене на линия</entry>
+  <entry key="76">Подчертаване</entry>
+  <entry key="77">Правоъгълник</entry>
+  <entry key="78">Елипса</entry>
+  <entry key="79">Стрелка</entry>
+  <entry key="80">Изтриване на маркирания обект</entry>
+  <entry key="81">Искане на права на модератор</entry>
+  <entry key="82">Искане</entry>
+  <entry key="83">Отказ</entry>
+  <entry key="84">Получаване на права на модератор</entry>
+  <entry key="85">Затвори</entry>
+  <entry key="86">курсив</entry>
+  <entry key="87">получер</entry>
+  <entry key="88">Изчакване...</entry>
+  <entry key="89">Потребител иска права на модератор. Може да му дадете права само за рисуване върху дъската или напълно да му предадете правата на модератор.</entry>
+  <entry key="90">приемане</entry>
+  <entry key="91">отхвърляне</entry>
+  <entry key="92">отказ</entry>
+  <entry key="93">Изпращане на молба към следните потребители</entry>
+  <entry key="94">Прието</entry>
+  <entry key="95">Отхвърлено</entry>
+  <entry key="96">Смяна на модератор</entry>
+  <entry key="97">Вие нямате права на модератор за този курс!</entry>
+  <entry key="98">Модератор:</entry>
+  <entry key="99">Стаята е пълна. Моля, опитайте отново по-късно.</entry>
+  <entry key="100">Елипса</entry>
+  <entry key="101">затваряне</entry>
+  <entry key="102">грешка във входните данни</entry>
+  <entry key="103">4 или повече знака; големите букви имат значение</entry>
+  <entry key="104">паролата трябва да е поне 4 знака</entry>
+  <entry key="105">потребителското име е заето</entry>
+  <entry key="106">E-mail адресът е зает</entry>
+  <entry key="107">Грешка в системата, потърсете системния администратор.</entry>
+  <entry key="108">Вход</entry>
+  <entry key="109">Име или e-mail:</entry>
+  <entry key="110">Парола:</entry>
+  <entry key="111">Език</entry>
+  <entry key="112">Вход</entry>
+  <entry key="113">Форма за регистрация</entry>
+  <entry key="114">Потребителско име:</entry>
+  <entry key="115">Парола:</entry>
+  <entry key="116">Парола отново:</entry>
+  <entry key="117">Име:</entry>
+  <entry key="118">Фамилия:</entry>
+  <entry key="119">E-mail:</entry>
+  <entry key="120">Държава:</entry>
+  <entry key="121">Регистрация</entry>
+  <entry key="122">Отказ</entry>
+  <entry key="123">Нямате регистрация?</entry>
+  <entry key="124">Начало</entry>
+  <entry key="125">Потребители</entry>
+  <entry key="126">Групи</entry>
+  <entry key="127">Организации</entry>
+  <entry key="128">Стаи</entry>
+  <entry key="129">публични</entry>
+  <entry key="130">Организация</entry>
+  <entry key="131">Вход</entry>
+  <entry key="132">Потребителско име</entry>
+  <entry key="133">Парола</entry>
+  <entry key="134">Парола отново</entry>
+  <entry key="135">Име</entry>
+  <entry key="136">Фамилия</entry>
+  <entry key="137">E-mail</entry>
+  <entry key="138">Рожденна дата</entry>
+  <entry key="139">Улица/Но.</entry>
+  <entry key="140">Град</entry>
+  <entry key="141">Държава</entry>
+  <entry key="142">Адрес</entry>
+  <entry key="143">Данни за потребителя</entry>
+  <entry key="144">Запис</entry>
+  <entry key="145">Запис</entry>
+  <entry key="146">ID</entry>
+  <entry key="147">Потребител. име</entry>
+  <entry key="148">Име</entry>
+  <entry key="149">Фамилия</entry>
+  <entry key="150">Напред</entry>
+  <entry key="151">Назад</entry>
+  <entry key="152">Изтриване на запис</entry>
+  <entry key="153">Отказ</entry>
+  <entry key="154">Изтриване</entry>
+  <entry key="155">Нов запис</entry>
+  <entry key="156">Опресняване на записа</entry>
+  <entry key="157">Изтриване на запис</entry>
+  <entry key="158">Статус</entry>
+  <entry key="159">изключен</entry>
+  <entry key="160">включен</entry>
+  <entry key="161">Организации</entry>
+  <entry key="162">Календар</entry>
+  <entry key="163">Затваряне</entry>
+  <entry key="164">Организация ID</entry>
+  <entry key="165">Име</entry>
+  <entry key="166">Потребител</entry>
+  <entry key="167">Модератор</entry>
+  <entry key="168">Администратор</entry>
+  <entry key="169">Ниво потребител</entry>
+  <entry key="170">Организация</entry>
+  <entry key="171">име</entry>
+  <entry key="172">Добавяне на организация</entry>
+  <entry key="173">Добавяне на организация</entry>
+  <entry key="174">Отказ</entry>
+  <entry key="175">Добавяне</entry>
+  <entry key="176">Изтриване</entry>
+  <entry key="177">Потребител</entry>
+  <entry key="178">добавяне потребител</entry>
+  <entry key="179">изтриване потребител</entry>
+  <entry key="180">Добавяне на потребител към огранизация</entry>
+  <entry key="181">Търсене на потребител</entry>
+  <entry key="182">Търсене</entry>
+  <entry key="183">Потребител</entry>
+  <entry key="184">Организация</entry>
+  <entry key="185">Вход</entry>
+  <entry key="186">Стаи за конференции</entry>
+  <entry key="187">Стаи за конференции</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Име</entry>
+  <entry key="190">публична</entry>
+  <entry key="191">Организации</entry>
+  <entry key="192">Стаи за срещи</entry>
+  <entry key="193">Име</entry>
+  <entry key="194">Тип</entry>
+  <entry key="195">публична</entry>
+  <entry key="196">Коментар</entry>
+  <entry key="197">запазване и експорт</entry>
+  <entry key="198">зареждане</entry>
+  <entry key="199">запазване като</entry>
+  <entry key="200">Файл</entry>
+  <entry key="201">файл</entry>
+  <entry key="202">отказ</entry>
+  <entry key="203">запазване</entry>
+  <entry key="204">Грешка</entry>
+  <entry key="205">зареждане...</entry>
+  <entry key="206">обектите са заредени</entry>
+  <entry key="207">синхронизация на клиентите, чакащи клиенти:</entry>
+  <entry key="208">Зареждане на изображение</entry>
+  <entry key="209">синхронизация на клиентите, чакащи клиенти:</entry>
+  <entry key="210">изчистване на полето за рисуване</entry>
+  <entry key="211">Изчистване на полето? Цялата информация на дъската ще бъде изгубена.</entry>
+  <entry key="212">Потвърждение преди зареждане на файл</entry>
+  <entry key="213">Изпращане на покана</entry>
+  <entry key="214">Изпращане на покана</entry>
+  <entry key="215">Тема</entry>
+  <entry key="216">Получател</entry>
+  <entry key="217">Съобщение</entry>
+  <entry key="218">Изпрати</entry>
+  <entry key="219">отказ</entry>
+  <entry key="220">изпрати</entry>
+  <entry key="221">Данни за потребител</entry>
+  <entry key="222">Вашият ник за тази конференция</entry>
+  <entry key="223">Ник</entry>
+  <entry key="224">Име</entry>
+  <entry key="225">Фамилия</entry>
+  <entry key="226">E-mail</entry>
+  <entry key="227">Език</entry>
+  <entry key="228">вход</entry>
+  <entry key="229">Зареждане</entry>
+  <entry key="230">Зареждане на данни, моля изчакайте!</entry>
+  <entry key="231">Грешна парола</entry>
+  <entry key="232">Моля въведете две еднакви пароли от поне 6 знака</entry>
+  <entry key="233">Грешен e-mail</entry>
+  <entry key="234">Въвели сте грешен e-mail адрес</entry>
+  <entry key="235">Регистрацията е завършена</entry>
+  <entry key="236">Акаунтът е създаден. Може да влезете в системата.</entry>
+  <entry key="237">В момента не може да споделяте екрана си. Някой друг вече споделя своя екран.</entry>
+  <entry key="238">Споделянето е забранено.</entry>
+  <entry key="239">Споделяне на екран</entry>
+  <entry key="240">Слаба Интернет връзка: нямате възможност за синхронизация на екрана. Ще има изпускане на кадри. Ако това съобщение се показва често, може да помолите модератора да намали качеството.</entry>
+  <entry key="241">Екран на:</entry>
+  <entry key="242">Рисуване</entry>
+  <entry key="243">Документ</entry>
+  <entry key="244">Чат</entry>
+  <entry key="245">Файлове</entry>
+  <entry key="246">Членове</entry>
+  <entry key="247">Сваляне на оригиналния документ</entry>
+  <entry key="248">Сваляне на PDF</entry>
+  <entry key="249">Зареждане на презентацията на дъската</entry>
+  <entry key="250">Конфигурация</entry>
+  <entry key="251">Влачене на обект</entry>
+  <entry key="252">Промяна размерите на обект</entry>
+  <entry key="253">%</entry>
+  <entry key="254">от</entry>
+  <entry key="255">Към първа страница</entry>
+  <entry key="256">Към предишната страница</entry>
+  <entry key="257">Към следващата страница</entry>
+  <entry key="258">Към последна страница</entry>
+  <entry key="259">Мащаб --</entry>
+  <entry key="260">Мащаб ++</entry>
+  <entry key="261">Г-н</entry>
+  <entry key="262">Г-жа</entry>
+  <entry key="263">Конфигурация</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Ключ</entry>
+  <entry key="266">Конфигурация</entry>
+  <entry key="267">ключ</entry>
+  <entry key="268">последна промяна</entry>
+  <entry key="269">променен от</entry>
+  <entry key="270">коментар</entry>
+  <entry key="271">Стойност</entry>
+  <entry key="272">от</entry>
+  <entry key="273">Потребители</entry>
+  <entry key="274">изтриване на потребител от организация</entry>
+  <entry key="275">D</entry>
+  <entry key="276">Потребителят вече е член на организацията.</entry>
+  <entry key="277">Новини</entry>
+  <entry key="278">Бързи връзки</entry>
+  <entry key="279">Към конференция</entry>
+  <entry key="280">Към аудитория</entry>
+  <entry key="281">Помощ</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Бъг репорт!</entry>
+  <entry key="285">повече</entry>
+  <entry key="286">Сайт на проекта (http://openmeetings.apache.org)</entry>
+  <entry key="287">Потребителски мейлинг лист (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Запомни ме</entry>
+  <entry key="289">Съдържание</entry>
+  <entry key="290">Начална страница</entry>
+  <entry key="291">График на срещите</entry>
+  <entry key="292">График на събитията</entry>
+  <entry key="293">Публични срещи</entry>
+  <entry key="294">Частни срещи</entry>
+  <entry key="295">Публични събития</entry>
+  <entry key="296">Частни събития</entry>
+  <entry key="297">Публично съдържание</entry>
+  <entry key="298">Частно съдържание</entry>
+  <entry key="299">Лично съдържание</entry>
+  <entry key="300"></entry>
+  <entry key="301">Права на модератор</entry>
+  <entry key="302">Искане права на модератор</entry>
+  <entry key="303">Анкети</entry>
+  <entry key="304">Избор на файл</entry>
+  <entry key="305">Настройки</entry>
+  <entry key="306">Камера и микрофон</entry>
+  <entry key="307">Настройки на дъската</entry>
+  <entry key="308">Изход</entry>
+  <entry key="309">Назад към стаите</entry>
+  <entry key="310">Изход</entry>
+  <entry key="311">Забравена парола?</entry>
+  <entry key="312">Нова парола</entry>
+  <entry key="313">По E-mail</entry>
+  <entry key="314">По потребителско име</entry>
+  <entry key="315">E-mail</entry>
+  <entry key="316">Потребителско име</entry>
+  <entry key="317">Изпращане на E-mail с линк за нова парола</entry>
+  <entry key="318">Не е намерен такъв e-mail.</entry>
+  <entry key="319">Моля, въведете E-mail или потребителско име.</entry>
+  <entry key="320">Не е намерено такова потребителско име.</entry>
+  <entry key="321">Изпратен е e-mail, съдържащ линк за нова парола.</entry>
+  <entry key="322">Грешка</entry>
+  <entry key="323">Съобщение</entry>
+  <entry key="324">Не е намерен такъв потребител.</entry>
+  <entry key="325">Нова парола</entry>
+  <entry key="326">Потребителско име</entry>
+  <entry key="327">промяна на паролата</entry>
+  <entry key="328">нова парола</entry>
+  <entry key="329">нова парола отново</entry>
+  <entry key="330">Въведените пароли не са еднакви.</entry>
+  <entry key="331">4 или повече знака; главните букви имат значение!</entry>
+  <entry key="332">Паролата е настроена, вече може да влезете в системата.</entry>
+  <entry key="333">ОК</entry>
+  <entry key="334">Грешка. Докладвайте за бъг!</entry>
+  <entry key="335">Потребителското име не е намерено.</entry>
+  <entry key="336">Невалидна парола</entry>
+  <entry key="337">Успешен изход от системата</entry>
+  <entry key="338">Забранена е регистрацията на нови потребители.</entry>
+  <entry key="339">Невалиден e-mail</entry>
+  <entry key="340">дублиране на името на файла, изберете друго име</entry>
+  <entry key="341">името на файла е много кратко</entry>
+  <entry key="342">Не може да се запази адреса</entry>
+  <entry key="343">Потребителят е добавен, но трябва да се добави към Организация, за да може да влезе в системата.</entry>
+  <entry key="344">Нов запис</entry>
+  <entry key="345">Не е намерено поле с такова полеID</entry>
+  <entry key="346">Не е намерен етикет на това поле</entry>
+  <entry key="347">Необходима е ауторизация като администратор</entry>
+  <entry key="348">Редактор на език</entry>
+  <entry key="349">Език</entry>
+  <entry key="350">Етикет-ID</entry>
+  <entry key="351">Име на етикета</entry>
+  <entry key="352">Стойност</entry>
+  <entry key="353">Стойности на полето</entry>
+  <entry key="354">Име на етикета</entry>
+  <entry key="355">Стойност на етикета</entry>
+  <entry key="356">Етикет-ID</entry>
+  <entry key="357">Може да изтриете само етикета, но НЕ и полето! Не може да изтриете полето, защото то съдържа етикети на други езици.</entry>
+  <entry key="358">Невалидно Етикет-ID.</entry>
+  <entry key="359">Не може да изтриете това поле.</entry>
+  <entry key="360">експорт</entry>
+  <entry key="361">Трябва да излезете от системата, за да видите промените.</entry>
+  <entry key="362">Добавяне на нов език</entry>
+  <entry key="363">изтриване на език</entry>
+  <entry key="364">Добавяне на нов език</entry>
+  <entry key="365">Име</entry>
+  <entry key="366">добавяне на език</entry>
+  <entry key="367">Бекъп</entry>
+  <entry key="368">първа страница</entry>
+  <entry key="369">предишна страница</entry>
+  <entry key="370">следваща страница</entry>
+  <entry key="371">последна страница</entry>
+  <entry key="372">потребителят говори (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">изкл./вкл. на звука</entry>
+  <entry key="374">Система</entry>
+  <entry key="375">Вашите настройки</entry>
+  <entry key="376">Здравейте,</entry>
+  <entry key="377">Редакт.на профил</entry>
+  <entry key="378">Нови съобщения:</entry>
+  <entry key="379">Качи нова снимка</entry>
+  <entry key="380">Данни на потребител - експорт</entry>
+  <entry key="381">Всички организации трябва вече да съществуват!</entry>
+  <entry key="382">старт на експорт</entry>
+  <entry key="383">По организация</entry>
+  <entry key="384">старт на експорт</entry>
+  <entry key="385">Данни на потребител - импорт</entry>
+  <entry key="386">choose-users.xml</entry>
+  <entry key="387">импорт</entry>
+  <entry key="388">Експорт в XML - Тези файлове може да се използват в: &amp;lt;br/&amp;gt; - Помощ за проекта - Импорт в друга система &amp;lt;br/&amp;gt; - Бекъп - Настройки&amp;lt;br/&amp;gt; - Сложете файла в папката language на новата инсталация.</entry>
+  <entry key="389">Изберете XML файл за импорт на език. &amp;lt;br/&amp;gt; Изберете правилния език от падащото меню! &amp;lt;br/&amp;gt; Без значение от името на файла, &amp;lt;br/&amp;gt; той ще бъде импортнат в този език!</entry>
+  <entry key="390">импорт - изберете файл</entry>
+  <entry key="391">Запазване като</entry>
+  <entry key="392">Име:</entry>
+  <entry key="393">Коментар:</entry>
+  <entry key="394">запазване</entry>
+  <entry key="395">Записи</entry>
+  <entry key="396">Преглед на записи</entry>
+  <entry key="397">Записи от публични и частни стаи</entry>
+  <entry key="398">Потребители:</entry>
+  <entry key="399">Включили се:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Потребители в тази стая:</entry>
+  <entry key="402">опресняване</entry>
+  <entry key="403">Тази стая е пълна. Пробвайте отново след няколко минути.</entry>
+  <entry key="404">натиснете върху стая за детайли</entry>
+  <entry key="405">Чат с потребителите от тази стая:</entry>
+  <entry key="406">Стая:</entry>
+  <entry key="407">Потребители в тази стая:</entry>
+  <entry key="408">от:</entry>
+  <entry key="409">плейване на запис</entry>
+  <entry key="410">Дължина:</entry>
+  <entry key="411">Дата:</entry>
+  <entry key="412">Режим на запис! Не може да променяте стойности, това е записан файл!</entry>
+  <entry key="413">Плейване на този запис</entry>
+  <entry key="414">Плей / Пауза</entry>
+  <entry key="415">Старт запис</entry>
+  <entry key="416">Стоп запис</entry>
+  <entry key="417">Запис:</entry>
+  <entry key="418">В момента друг потребител прави запис.</entry>
+  <entry key="419">Запис! От потребител:</entry>
+  <entry key="420">отказ</entry>
+  <entry key="421">Записът ще бъде отказан и няма да бъде запаметен.</entry>
+  <entry key="422">подновяване</entry>
+  <entry key="423">Затворете този прозорец за подновяване на записа.</entry>
+  <entry key="424">смяна на цвета на линията</entry>
+  <entry key="425">Избор на цвят</entry>
+  <entry key="426">Изкл./Вкл. цвят на линия</entry>
+  <entry key="427">смяна на цвета на запълването</entry>
+  <entry key="428">Изкл./Вкл. цвят на запълване</entry>
+  <entry key="429">смяна ширината на линията</entry>
+  <entry key="430">затваряне</entry>
+  <entry key="431">смяна на размера на шрифта</entry>
+  <entry key="432">Изтриване на запис</entry>
+  <entry key="433">Гост</entry>
+  <entry key="434">От:</entry>
+  <entry key="435">Име</entry>
+  <entry key="436">Стая</entry>
+  <entry key="437">Дата</entry>
+  <entry key="438">отказ</entry>
+  <entry key="439">старт</entry>
+  <entry key="440">Име</entry>
+  <entry key="441">Дата</entry>
+  <entry key="442">Изтриване на чат история</entry>
+  <entry key="443">Чат</entry>
+  <entry key="444">изпращане на съобщение</entry>
+  <entry key="445">Емотикони</entry>
+  <entry key="446">Емотикони</entry>
+  <entry key="447">Избор на устройства</entry>
+  <entry key="448">Аудио и Видео</entry>
+  <entry key="449">Само Аудио</entry>
+  <entry key="450">Само Видео</entry>
+  <entry key="451">без Аудио/Видео (статично изображение)</entry>
+  <entry key="452">Няма да се показва никакво Аудио/Видео от Вашето PC, вместо това ще се показва статично изображение. Може да изберете тази настройка, ако имате бавна Интернет връзка.</entry>
+  <entry key="453">ПОН</entry>
+  <entry key="454">ВТ</entry>
+  <entry key="455">СР</entry>
+  <entry key="456">ЧЕТ</entry>
+  <entry key="457">ПЕТ</entry>
+  <entry key="458">СЪБ</entry>
+  <entry key="459">НЕД</entry>
+  <entry key="460">Понеделник</entry>
+  <entry key="461">Вторник</entry>
+  <entry key="462">Сряда</entry>
+  <entry key="463">Четвъртък</entry>
+  <entry key="464">Петък</entry>
+  <entry key="465">Събота</entry>
+  <entry key="466">Неделя</entry>
+  <entry key="467">седм</entry>
+  <entry key="468">Седмица</entry>
+  <entry key="469">Януари</entry>
+  <entry key="470">Февруари</entry>
+  <entry key="471">Март</entry>
+  <entry key="472">Април</entry>
+  <entry key="473">Май</entry>
+  <entry key="474">Юни</entry>
+  <entry key="475">Юли</entry>
+  <entry key="476">Август</entry>
+  <entry key="477">Септември</entry>
+  <entry key="478">Октомври</entry>
+  <entry key="479">Ноември</entry>
+  <entry key="480">Декември</entry>
+  <entry key="481">Календар</entry>
+  <entry key="482">Участници</entry>
+  <entry key="483">Показване настройки на изгледа</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Ширина | Височина</entry>
+  <entry key="486">Видео-контейнер</entry>
+  <entry key="487">Модерация-контейнер</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Дъска-контейнер</entry>
+  <entry key="490">Включен</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Ширина | Височина</entry>
+  <entry key="493">Файлове,Чат,Участници-контейнер</entry>
+  <entry key="494">Включен</entry>
+  <entry key="495">X | Y</entry>
+  <entry key="496">Ширина | Височина</entry>
+  <entry key="497">Модераторът е напуснал стаята и никой не присъства в момента. Може да поискате права на модаратор или да изчакате.</entry>
+  <entry key="498">Няма модератор в стаята, но има други участници. Може да поискате права на модаратор или да изчакате.</entry>
+  <entry key="499">Обратна връзка с {0}</entry>
+  <entry key="500">{0} - Покана</entry>
+  <entry key="501">Съобщение от потребител:</entry>
+  <entry key="502">Съобщение:</entry>
+  <entry key="503">Натиснете линка, за да участвате в срещата:</entry>
+  <entry key="504">Натиснете тук, за вход в стаята</entry>
+  <entry key="505">Ако имате проблеми с линка, копирайте го и го вмъкнете в браузъра:</entry>
+  <entry key="506">Регистрация в {0}</entry>
+  <entry key="507">Потребителски данни:</entry>
+  <entry key="508">Потребителско име:</entry>
+  <entry key="509">Парола:</entry>
+  <entry key="510">E-mail:</entry>
+  <entry key="511">Екип на {0}</entry>
+  <entry key="512">Регистрация в {0}</entry>
+  <entry key="513">Нова парола за {0}</entry>
+  <entry key="514">Натиснете линка, за да въведете нова парола.</entry>
+  <entry key="515">Натиснете тук, за да въведете нова парола.</entry>
+  <entry key="516">Ако имате проблеми с линка, копирайте го и го вмъкнете в браузъра:</entry>
+  <entry key="517">Нова парола за {0}</entry>
+  <entry key="518">Въведете валидна дата, например 24.11.2001 (дд.мм.гггг)</entry>
+  <entry key="519">Въведете валиден e-mail, например name@mail.com</entry>
+  <entry key="520">Въведете десетично число, например 1.00</entry>
+  <entry key="521">Въведете цяло число, например 100</entry>
+  <entry key="522">Въведете валиден телефон, например +359 888 123456</entry>
+  <entry key="523">Въведете валидно време, например 12:23 (чч:мм)</entry>
+  <entry key="524">Защита с парола</entry>
+  <entry key="525">Парола</entry>
+  <entry key="526">Период на валидност</entry>
+  <entry key="527">Безкраен</entry>
+  <entry key="528">Период</entry>
+  <entry key="529">Един път</entry>
+  <entry key="530">Валидност от:</entry>
+  <entry key="531">Валидност до:</entry>
+  <entry key="532">Покана за {0}</entry>
+  <entry key="533">Няма покана на раположение, за този код.</entry>
+  <entry key="534">Поканата вече е използвана. Този тип покани не могат да се използват повторно.</entry>
+  <entry key="535">Кодът за покана не е валиден.</entry>
+  <entry key="536">Парола</entry>
+  <entry key="537">Проверка на парола</entry>
+  <entry key="538">Грешна парола</entry>
+  <entry key="539">Аудио/Видео</entry>
+  <entry key="540">Синхронизация на Аудио/Видео</entry>
+  <entry key="541">Входът в системата е коректен, но сесията Ви не е активна. Трябва да опитате повторен вход в системата.</entry>
+  <entry key="542">Грешна сесия или липса на админ права. Трябва да имате админ права, за да добавяте нови потребители.</entry>
+  <entry key="543">Сесията не може да се свърже с отдалечения потребител.</entry>
+  <entry key="544">Рекордерът е в момента в БЕТА-версия!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-ос</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-ос</entry>
+  <entry key="549">шир</entry>
+  <entry key="550">ширина</entry>
+  <entry key="551">вис</entry>
+  <entry key="552">височина</entry>
+  <entry key="553">Промяна прозрачност</entry>
+  <entry key="554">Отваряне браузър</entry>
+  <entry key="555">Затваряне браузър</entry>
+  <entry key="556">Връзката със сървъра е прекъсната. Трябва да заредите наново приложението или да проверите мрежата си.</entry>
+  <entry key="557">Указател</entry>
+  <entry key="558">Синхронизация</entry>
+  <entry key="559">Синхронизация на потребители, моля изчакайте</entry>
+  <entry key="560">&amp;lt;u&amp;gt;Сваляне в SVG&amp;lt;/u&amp;gt;</entry>
+  <entry key="561">&amp;lt;u&amp;gt;Сваляне в PNG&amp;lt;/u&amp;gt;</entry>
+  <entry key="562">&amp;lt;u&amp;gt;Сваляне в JPG&amp;lt;/u&amp;gt;</entry>
+  <entry key="563">&amp;lt;u&amp;gt;Сваляне в PDF&amp;lt;/u&amp;gt;</entry>
+  <entry key="564">&amp;lt;u&amp;gt;Сваляне в TIF&amp;lt;/u&amp;gt;</entry>
+  <entry key="565">Напомняне:</entry>
+  <entry key="566">Категория:</entry>
+  <entry key="567">Повтаряне:</entry>
+  <entry key="568">няма</entry>
+  <entry key="569">Място:</entry>
+  <entry key="570">Начало</entry>
+  <entry key="571">Край</entry>
+  <entry key="572">Заглавие:</entry>
+  <entry key="573">Коментар:</entry>
+  <entry key="574">Покана</entry>
+  <entry key="575">Всеки ден</entry>
+  <entry key="576">Всеки месец</entry>
+  <entry key="577">Всяка година</entry>
+  <entry key="578">Краят на събитието е след началото му!</entry>
+  <entry key="579">Въведете заглавие!</entry>
+  <entry key="580">Отдясно наляво</entry>
+  <entry key="581">Активирайте, ако искате да пишете на език отдясно наляво (обратен ред на думите)</entry>
+  <entry key="582">Табло</entry>
+  <entry key="583">Гледане на записани срещи</entry>
+  <entry key="584">Среща - създава конференция с 4 (до 16) потребители&amp;lt;br/&amp;gt;като всички имат аудио + видео достъп</entry>
+  <entry key="585">Събитие - създава конференция с до 200 потребители&amp;lt;br/&amp;gt;като само Модераторът има аудио + видео достъп</entry>
+  <entry key="586">Създаване на потребители, стаи, организации&amp;lt;br/&amp;gt;+ промяна на конфигурациите</entry>
+  <entry key="587">Потребители в стаята в момента</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Логин</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Зареждане на документ. Моля изчакайте докато всички клиенти бъдат синхронизирани.</entry>
+  <entry key="592">Качването е завършено, конвертиране на документа...</entry>
+  <entry key="593">Старт качване</entry>
+  <entry key="594">Моля изберете файл от диска.</entry>
+  <entry key="595">Отказ</entry>
+  <entry key="596">Избор на файл</entry>
+  <entry key="597">Връзки</entry>
+  <entry key="598">Стойност</entry>
+  <entry key="599">СтриймID</entry>
+  <entry key="600">Логин</entry>
+  <entry key="601">Свързан от</entry>
+  <entry key="602">Стая / Обхват</entry>
+  <entry key="603">Кик потребител</entry>
+  <entry key="604">Кик потребител</entry>
+  <entry key="605">Наистина ли искате кик на потребителя?&amp;lt;br/&amp;gt;Това само ще махне клиента от стаята, и след това той може да се логне наново.</entry>
+  <entry key="606">Сесията Ви е приключена от Администратор или Модератор.</entry>
+  <entry key="607">Телефон</entry>
+  <entry key="608">Потребителят е Модератор в тази стая</entry>
+  <entry key="609">Потребителят има право да рисува на дъската.</entry>
+  <entry key="610">Ре(старт) на Аудио/Видео или промяна на настройките</entry>
+  <entry key="611">Позволяване на потребителя да рисува на дъската</entry>
+  <entry key="612">Премахва правото за рисуване на дъската</entry>
+  <entry key="613">Потребители</entry>
+  <entry key="614">Файлове</entry>
+  <entry key="615">Бяла дъска</entry>
+  <entry key="616">Чат</entry>
+  <entry key="617">Вашият акаунт е свързан с повече от 1 организация. Моля, изберете една за текущата сесия.</entry>
+  <entry key="618">Стаята е пълна в момента. Моля, пробвайте отново по-късно.</entry>
+  <entry key="619">Тип стая</entry>
+  <entry key="620">Уговорена среща</entry>
+  <entry key="621">Време на сървъра</entry>
+  <entry key="622">Напомняне</entry>
+  <entry key="623">Съобщение от потребител:</entry>
+  <entry key="624">Съобщение:</entry>
+  <entry key="625">Натиснете тук за участие в срещата</entry>
+  <entry key="626">Натиснете тук за вход в стаята</entry>
+  <entry key="627">Ако имате проблеми с този линк, моля копирайте и го вмъкнете в браузъра:</entry>
+  <entry key="628">вътр. търсене</entry>
+  <entry key="629">Добавяне външни</entry>
+  <entry key="630">Име</entry>
+  <entry key="631">Фамилия</entry>
+  <entry key="632">Е-майл</entry>
+  <entry key="633">Потвърждаване изход</entry>
+  <entry key="634">Искате ли да излезете сега?</entry>
+  <entry key="635">Дейности</entry>
+  <entry key="636">Демо стая</entry>
+  <entry key="637">Демо време</entry>
+  <entry key="638">Таймер на срещата</entry>
+  <entry key="639">Тази стая е Демо стая. За да изключите това предупреждение, трябва да влезете в частна стая или да настроите собствен сървър.</entry>
+  <entry key="640">Модериран</entry>
+  <entry key="641">Моля изчакайте докато Модераторът влезе в стаята. Модераторът може да е учител, администратор или създател на стаята.</entry>
+  <entry key="642">OK</entry>
+  <entry key="643">Споделен екран</entry>
+  <entry key="644">Има нов споделен екран от потребител:</entry>
+  <entry key="645">Старт на споделяне</entry>
+  <entry key="646">Добавяне на среща</entry>
+  <entry key="647">Стая за среща</entry>
+  <entry key="648">Стая за събитие</entry>
+  <entry key="649">Модерация</entry>
+  <entry key="650">Модерация на потребители</entry>
+  <entry key="651">Модерация на стаи</entry>
+  <entry key="652">М</entry>
+  <entry key="653">Искате ли този потребител да стане Модератор на тази организация?</entry>
+  <entry key="654">Моля изберете първо организация!</entry>
+  <entry key="655">Организация - Модератор</entry>
+  <entry key="656">Искате ли да изтриете потребителя от организацията?</entry>
+  <entry key="657">Потребителят е Модератор</entry>
+  <entry key="658">Потребителят не е Модератор</entry>
+  <entry key="659">Искате ли този потребител да не бъде Модератор на тази организация?</entry>
+  <entry key="660">Добавяне/премахване на потребители и стаи от организацията</entry>
+  <entry key="661">Наистина ли искате да изтриете този запис?</entry>
+  <entry key="662">Наистина ли искате да изтриете потребителя от организацията? Това само ще прекъсне връзката между потребителя и организацията, за да изтриете потребителя изцяло трябва да влезете в Администраторския панел.</entry>
+  <entry key="663">Не може да изтриете своя потребител!</entry>
+  <entry key="664">Тази операция изисква Администраторски акаунт!</entry>
+  <entry key="665">Няма сесия свързана с това ID.</entry>
+  <entry key="666">Това е Администраторски или Модераторски акаунт. Може да редактирате този акаунт само през Административния панел.</entry>
+  <entry key="667">За да приключите регистрацията, натиснете следния линк или копирайте адреса в браузъра си.</entry>
+  <entry key="668">Натиснете, за да потвърдите е-майла.</entry>
+  <entry key="669">Не беше намерен такъв потребител.</entry>
+  <entry key="670">Този потребител вече е активиран.</entry>
+  <entry key="671">Успешно активирахте акаунта си!</entry>
+  <entry key="672">Вход сега</entry>
+  <entry key="673">Вашият акаунт не е активиран. Използвайте линка за потвърждение в изпратения мейл.</entry>
+  <entry key="674">Успешна регистрация! Изпратен е мейл за потвърждение на регистрацията и активиране на акаунта. Моля проверете мейла си.</entry>
+  <entry key="675">Изтриване на Модераторска роля за този потребител</entry>
+  <entry key="676">Даване на Модераторски права на този потребител</entry>
+  <entry key="677">Потребител</entry>
+  <entry key="678">Достъп до дъската</entry>
+  <entry key="679">Модератор</entry>
+  <entry key="680">Модерация: моля изберете потребител от списъка за даване на права до дъската, модерация или видео.</entry>
+  <entry key="681">Този потребител вече е Модератор, затова той има достъп до дъската.</entry>
+  <entry key="682">Не може да премахнете Модераторските права от своя потребител!</entry>
+  <entry key="683">Позволяване на потребителя да публикува своето Аудио/Видео.</entry>
+  <entry key="684">Изтриване на Аудио/Видео за този потребител</entry>
+  <entry key="685">Искам права на Модератор за тази стая.</entry>
+  <entry key="686">Искам права за рисуване върху дъската.</entry>
+  <entry key="687">Искам права за споделяне на Аудио/Видео.</entry>
+  <entry key="688">Вие сте Модератор на тази стая.</entry>
+  <entry key="689">Вие имате права за рисуване върху дъската.</entry>
+  <entry key="690">Вие имате права за споделяне на Аудио/Видео.</entry>
+  <entry key="691">Съобщение към Модератор</entry>
+  <entry key="692">Потребителят</entry>
+  <entry key="693">иска права на Модератор. Използвайте статус иконите, за даване/премахване на правата.</entry>
+  <entry key="694">иска права за рисуване върху дъската. Използвайте статус иконите, за даване/премахване на правата.</entry>
+  <entry key="695">иска права за споделяне на Аудио/Видео. Използвайте статус иконите, за даване/премахване на правата.</entry>
+  <entry key="696">Трябва да изчакате, докато Модераторът влезе в стаята.</entry>
+  <entry key="697">Отказ</entry>
+  <entry key="698">Запазване</entry>
+  <entry key="699">Ден</entry>
+  <entry key="700">Месец</entry>
+  <entry key="701">Година</entry>
+  <entry key="702">Качване на файл</entry>
+  <entry key="703">Нова папка</entry>
+  <entry key="704">Опресняване</entry>
+  <entry key="705">Кошче</entry>
+  <entry key="706">Моите файлове (home)</entry>
+  <entry key="707">Файлове за стаята</entry>
+  <entry key="708">Нов файл</entry>
+  <entry key="709">Нова папка</entry>
+  <entry key="710">Изтриване на папка</entry>
+  <entry key="711">Редактиране на име</entry>
+  <entry key="712">Нова папка</entry>
+  <entry key="713">Сигурни ли сте, че искате да изтриете този елемент?</entry>
+  <entry key="714">Търсене</entry>
+  <entry key="715">Търсене</entry>
+  <entry key="716">Отваряне на документ</entry>
+  <entry key="717">Показване на всички файлове (дървовиден изглед)</entry>
+  <entry key="718">Затваряне на документ</entry>
+  <entry key="719">Изтриване на файл</entry>
+  <entry key="720">Нямате права за рисуване върху дъската. Може да поискате това право от Модератор.</entry>
+  <entry key="721">Свойства на документ</entry>
+  <entry key="722">Старт клиент (външен)</entry>
+  <entry key="723">Старт клиент (HTTP)</entry>
+  <entry key="724">Потребител иска да сподели своя екран. Искате ли да го видите?</entry>
+  <entry key="725">В момента споделяте своя екран. За да спрете споделянето, натиснете бутона Stop.</entry>
+  <entry key="726">Сесия за споделяне</entry>
+  <entry key="727">В момента споделяте своя екран!</entry>
+  <entry key="728">Десктоп преглед</entry>
+  <entry key="729">Изход</entry>
+  <entry key="730">Десктоп споделяне</entry>
+  <entry key="731">Натиснете Start, за да публикувате своя екран.</entry>
+  <entry key="732">Старт на споделяне</entry>
+  <entry key="733">Стоп на споделяне</entry>
+  <entry key="734">Избор на част от екрана:</entry>
+  <entry key="735">Промяна на ширина</entry>
+  <entry key="736">Сесията на споделяне е приключила!</entry>
+  <entry key="737">Промяна на височина</entry>
+  <entry key="738">X-изместване</entry>
+  <entry key="739">Y-изместване</entry>
+  <entry key="740">Ширина:</entry>
+  <entry key="741">Височина:</entry>
+  <entry key="742">Връзката е затворена от сървъра</entry>
+  <entry key="743">Отказ</entry>
+  <entry key="744">Старт външен</entry>
+  <entry key="745">Ако затворите сесията изцяло, няма да може да възстановите прегледа на тази сесия.</entry>
+  <entry key="746">Потвърждаване затваряне на сесията за преглед</entry>
+  <entry key="747">Споделяне на екран</entry>
+  <entry key="748">Запис на сесия</entry>
+  <entry key="749">Общ браузър</entry>
+  <entry key="750">Firefox на Windows не позволява чисто общо браузване. Моля изберете друг браузър.</entry>
+  <entry key="751">Предишен</entry>
+  <entry key="752">Следващ</entry>
+  <entry key="753">Презареждане</entry>
+  <entry key="754">Начало</entry>
+  <entry key="755">Зареждане</entry>
+  <entry key="756">Добавяне на сайт като сайт по подразбиране за този профил.</entry>
+  <entry key="757">Тест на настройките</entry>
+  <entry key="758">Проверете настройките на микрофона и камерата си. След това може да пуснете записа за проверка на гласа и картината.</entry>
+  <entry key="759">Не показвай повече този тест</entry>
+  <entry key="760">Отказ</entry>
+  <entry key="761">Старт конференция</entry>
+  <entry key="762">Не питай повече</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Може да продължите без тест, ако не планирате да публикувате видео/аудио. Участниците без Аудио/Видео могат да използват дъската, да споделят екрана си и да пишат чат съобщения.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Височина</entry>
+  <entry key="768">Натиснете Start</entry>
+  <entry key="769">Старт конференция</entry>
+  <entry key="770">Старт събитие</entry>
+  <entry key="771">Избор на стая</entry>
+  <entry key="772">Проба настройки</entry>
+  <entry key="773">Старт конференция</entry>
+  <entry key="774">Тип конференция:</entry>
+  <entry key="775">Начало запис</entry>
+  <entry key="776">Не показвай Аудио/Видео тест запис, преди влизане в конференцията.</entry>
+  <entry key="777">Публични стаи</entry>
+  <entry key="778">До публичните стаи имат достъп всички потребители.</entry>
+  <entry key="779">Частни стаи</entry>
+  <entry key="780">До частните стаи имат достъп само потребителите от същата организация.</entry>
+  <entry key="781">Моите стаи</entry>
+  <entry key="782">Стаите в тази секция са създадени за лично ползване. Те са създадени от календара и имат начална и крайна дата. Те се описват в тази секция, докато са валидни.</entry>
+  <entry key="783">Трябва да сте Модератор за това действие.</entry>
+  <entry key="784">Искане за Модератор</entry>
+  <entry key="785">Искане за рисуване върху дъската</entry>
+  <entry key="786">Искане достъп до камера/микрофон</entry>
+  <entry key="787">Сесията вече се използва - не може да я използвате повторно.</entry>
+  <entry key="788">СТАРТ</entry>
+  <entry key="789">ИЗХОД</entry>
+  <entry key="790">Наистина ли искате да излезете? Може би трябва да изчистите дъската, качените документи и чат историята.</entry>
+  <entry key="791">Изход конференция</entry>
+  <entry key="792">Стаи</entry>
+  <entry key="793">Изберете стая за срещата</entry>
+  <entry key="794">Има незапазено събитие в календара. Моля, запазете го или го изтрийте.</entry>
+  <entry key="795">Моля добавете поне 1 присъстващ на срещата!</entry>
+  <entry key="796">Наистина ли искате да изтриете това събитие?</entry>
+  <entry key="797">Предупреждение</entry>
+  <entry key="798">Добавяне събитие</entry>
+  <entry key="799">ден</entry>
+  <entry key="800">седмица</entry>
+  <entry key="801">месец</entry>
+  <entry key="802">Описание</entry>
+  <entry key="803">Присъстващи</entry>
+  <entry key="804">Моля, следвайте инструкциите и натиснете бутона Start, за да започнете конференция веднага или отидете в календара, за да планирате бъдеща конференция.</entry>
+  <entry key="805">Планиране среща</entry>
+  <entry key="806">За да планирате среща, добавете събитие към каледара. За всяко събитие в каледара ще бъде автоматично създадена стая за конференция. Вие и всички присъстващи ще получат мейл с линк към стаята&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt; Може да изберете различни типове стаи с различен тип модерация.</entry>
+  <entry key="807">Нужда от помощ?</entry>
+  <entry key="808">Ограничен</entry>
+  <entry key="809">Търсене</entry>
+  <entry key="810">Добавяне</entry>
+  <entry key="811">Не е избран потребител. Моля изберете елемент от списъка и го добавете.</entry>
+  <entry key="812">Добавяне на присъстващ</entry>
+  <entry key="813">Запазване</entry>
+  <entry key="814">Изтриване</entry>
+  <entry key="815">Детайли за събитието</entry>
+  <entry key="816">Модератори по подразбиране</entry>
+  <entry key="817">Супер</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Име</entry>
+  <entry key="820">Е-майл</entry>
+  <entry key="821">Добавяне на нов Модератор по подразбиране</entry>
+  <entry key="822">е Супер Модератор</entry>
+  <entry key="823">Ако стаята е модерирана, Модератор или Администратор автоматично са с права на Модератор. Ако искате определен потребител да бъде Модератор, използвайте опцията Модератор по подразбиране.</entry>
+  <entry key="824">Супер Модератор винаги е Модератор при вход в стаята и никой не може да премахне тези негови права.</entry>
+  <entry key="825">Прилагане права на Супер Модератор</entry>
+  <entry key="826">Премахване права на Супер Модератор</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Ако добавите организация към стаята, само потребителите от тази организация ще виждат стаята.</entry>
+  <entry key="829">Модерация</entry>
+  <entry key="830">Ограничения</entry>
+  <entry key="831">Организация</entry>
+  <entry key="832">Сигурни ли сте?</entry>
+  <entry key="833">Наистина ли искате да изтриете този елемент? Трябва да натиснете бутона Save, за запазване на промените!</entry>
+  <entry key="834">Не е избран потребител. Моля изберете потребител, преди да го добавите!</entry>
+  <entry key="835">Добавяне на нов Модератор по подразбиране</entry>
+  <entry key="836">Искате ли да дадете права на Супер Модератор на този потребител? Супер Модератор винаги е Модератор при вход в стаята и никой не може да премахне тези негови права. Трябва да запазите стаята, за да запазите настройките!</entry>
+  <entry key="837">Искате ли да премахнете правата на Супер Модератор от този потребител? Трябва да запазите стаята, за да запазите настройките!</entry>
+  <entry key="838">Потребителят е Супер Модератор и никой не може да премахне тези негови права!</entry>
+  <entry key="839">Наистина ли искате да изтриете този файл/папка?</entry>
+  <entry key="840">Изтриване на файл/папка?</entry>
+  <entry key="841">Г-жа</entry>
+  <entry key="842">Д-р</entry>
+  <entry key="843">Свойства</entry>
+  <entry key="844">Показване позицията на мишката на гледащите</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_ca.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
new file mode 100644
index 0000000..60ea20e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_ca.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Conferència</entry>
+  <entry key="2">Videoconferència</entry>
+  <entry key="3">Auditories</entry>
+  <entry key="4">Configuració</entry>
+  <entry key="5">Usuari</entry>
+  <entry key="6">Administració</entry>
+  <entry key="7">Aturar</entry>
+  <entry key="8">Grabar</entry>
+  <entry key="9">No s'ha seleccionat ningun fitxer</entry>
+  <entry key="10">Gravació pel professor</entry>
+  <entry key="11">Usuaris conectats:</entry>
+  <entry key="12">Iniciar conferència</entry>
+  <entry key="13">El meu nom</entry>
+  <entry key="14">Videoconferència</entry>
+  <entry key="15">Importar fitxer</entry>
+  <entry key="16">Actualitzar llista de fitxers</entry>
+  <entry key="17">Selecciona un fitxer com a principal</entry>
+  <entry key="18">Nova enquesta</entry>
+  <entry key="19">Nova enquesta per la conferència</entry>
+  <entry key="20">Pregunta:</entry>
+  <entry key="21">Tipus d'enquesta</entry>
+  <entry key="22">Crear</entry>
+  <entry key="23">Informació: descripció d'enquesta.</entry>
+  <entry key="24">Crear enquesta</entry>
+  <entry key="25">Cancel·lar</entry>
+  <entry key="26">Sí/No</entry>
+  <entry key="27">Valor numèric [1-10]</entry>
+  <entry key="28">Enquesta</entry>
+  <entry key="29">És necessita ser moderador per crear una enquesta.</entry>
+  <entry key="30">El seu vot ha sigut registrat</entry>
+  <entry key="31">Ja a respòs a la enquesta prèviament</entry>
+  <entry key="32">Votar</entry>
+  <entry key="33">La seva resposta:</entry>
+  <entry key="34">Sí</entry>
+  <entry key="35">No</entry>
+  <entry key="36">Vol saber:</entry>
+  <entry key="37">Resultats</entry>
+  <entry key="38">Pregunta:</entry>
+  <entry key="39">Resultats:</entry>
+  <entry key="40">Respostes:</entry>
+  <entry key="41">No hi ha enquestes</entry>
+  <entry key="42">Votar</entry>
+  <entry key="43">Reunió (màx 4 llocs)</entry>
+  <entry key="44">Conferència (máx 50 llocs)</entry>
+  <entry key="45">Tipus</entry>
+  <entry key="46">Altres llocs</entry>
+  <entry key="47">Ja ha seleccionat.</entry>
+  <entry key="48">Entrar</entry>
+  <entry key="49">El moderador a deixat la reunió.</entry>
+  <entry key="50">Informació del sistema</entry>
+  <entry key="51">Seleccionar el dispositiu</entry>
+  <entry key="52">Seleccionar camara:</entry>
+  <entry key="53">Seleccionar micròfon:</entry>
+  <entry key="54">OK</entry>
+  <entry key="55">Cancelar</entry>
+  <entry key="56">Necessita reconectar-se</entry>
+  <entry key="57">Editar configuració</entry>
+  <entry key="58">Curso:</entry>
+  <entry key="59">Idioma:</entry>
+  <entry key="60">OK</entry>
+  <entry key="61">cancelar</entry>
+  <entry key="62">Eliminar pissarra</entry>
+  <entry key="63">Vols netejar la pissarra abans de afegir una nova imatge?</entry>
+  <entry key="64">No tornar a preguntar</entry>
+  <entry key="65">no</entry>
+  <entry key="66">Editar la configuració</entry>
+  <entry key="67">Requerix confirmació abans de netejar la pissarra</entry>
+  <entry key="68">Informació del usuari</entry>
+  <entry key="69">Netejar l'àrea de dibuix</entry>
+  <entry key="70">Desfer</entry>
+  <entry key="71">Refer</entry>
+  <entry key="72">Seleccionar un objecte</entry>
+  <entry key="73">Text</entry>
+  <entry key="74">Pintar</entry>
+  <entry key="75">Traçar una línia</entry>
+  <entry key="76">Subratllar</entry>
+  <entry key="77">Rectangle</entry>
+  <entry key="78">El·lipse</entry>
+  <entry key="79">Data</entry>
+  <entry key="80">Esborrar l'ítem escollit</entry>
+  <entry key="81">Solicitar la moderació</entry>
+  <entry key="82">Aplicar</entry>
+  <entry key="83">Cancel·lar</entry>
+  <entry key="84">Convertir-se en moderador</entry>
+  <entry key="85">Tancar</entry>
+  <entry key="86">Itálica</entry>
+  <entry key="87">Negreta</entry>
+  <entry key="88">En espera...</entry>
+  <entry key="89">Un usuari sol·licita la moderació:</entry>
+  <entry key="90">Aceptar</entry>
+  <entry key="91">Denegar</entry>
+  <entry key="92">Cancel·lar</entry>
+  <entry key="93">Envian la sol·licitud als següents usuaris</entry>
+  <entry key="94">Aceptat</entry>
+  <entry key="95">Rebutjat</entry>
+  <entry key="96">Cambiar el moderador</entry>
+  <entry key="97">Voste no és moderador</entry>
+  <entry key="98">Moderador:</entry>
+  <entry key="99">Ho sentim, però aquesta sala està plena. Intenti'l més tard</entry>
+  <entry key="100">Elipse</entry>
+  <entry key="101">tancar</entry>
+  <entry key="102">error en la introducció de dades</entry>
+  <entry key="103">el nom d'usuari ha de contenir almenys 4 caràcters</entry>
+  <entry key="104">la clau d'usuari ha de contenir almenys 4 caràcters</entry>
+  <entry key="105">Aquest nombre d'usuari ja existeix</entry>
+  <entry key="106">Aquest email ja està registrat</entry>
+  <entry key="107">Error, per favor contacti amb l'administrador del sistema</entry>
+  <entry key="108">Entrar</entry>
+  <entry key="109">Usuari:</entry>
+  <entry key="110">Contrasenya:</entry>
+  <entry key="111">Idioma</entry>
+  <entry key="112">Entrar</entry>
+  <entry key="113">Registrar-se</entry>
+  <entry key="114">Usuari:</entry>
+  <entry key="115">Contrasenya:</entry>
+  <entry key="116">Contrasenya (un altre vegada):</entry>
+  <entry key="117">Nom:</entry>
+  <entry key="118">Cognoms:</entry>
+  <entry key="119">Correu electronic:</entry>
+  <entry key="120">País:</entry>
+  <entry key="121">Registrar-se</entry>
+  <entry key="122">Cancel·lar</entry>
+  <entry key="123">Registrar</entry>
+  <entry key="124">Inici</entry>
+  <entry key="125">Usuaris</entry>
+  <entry key="126">Grups</entry>
+  <entry key="127">Organitzacions</entry>
+  <entry key="128">Sales de conferèncias</entry>
+  <entry key="129">Públic</entry>
+  <entry key="130">Organització</entry>
+  <entry key="131">Entrar</entry>
+  <entry key="132">Usuari</entry>
+  <entry key="133">Contrasenya</entry>
+  <entry key="134">Escriure de nou</entry>
+  <entry key="135">Nom</entry>
+  <entry key="136">Cognoms</entry>
+  <entry key="137">Correu Electrónic</entry>
+  <entry key="138">Data de neixement</entry>
+  <entry key="139">Direcció</entry>
+  <entry key="140">Població</entry>
+  <entry key="141">País</entry>
+  <entry key="142">Més informació</entry>
+  <entry key="143">Dades de usuari</entry>
+  <entry key="144">Guardar</entry>
+  <entry key="145">Guardar</entry>
+  <entry key="146">ID</entry>
+  <entry key="147">Usuari</entry>
+  <entry key="148">nom</entry>
+  <entry key="149">cognoms</entry>
+  <entry key="150">mostrar següent</entry>
+  <entry key="151">mostrar anterior</entry>
+  <entry key="152">eliminar registre</entry>
+  <entry key="153">cancel·lar</entry>
+  <entry key="154">borrar</entry>
+  <entry key="155">Nou registre</entry>
+  <entry key="156">Actualitzar registre</entry>
+  <entry key="157">Esborrar registre</entry>
+  <entry key="158">Estat</entry>
+  <entry key="159">no actiu</entry>
+  <entry key="160">actiu</entry>
+  <entry key="161">Organitzacions</entry>
+  <entry key="162">calendari</entry>
+  <entry key="163">tancar</entry>
+  <entry key="164">ID</entry>
+  <entry key="165">Nom</entry>
+  <entry key="166">Usuari</entry>
+  <entry key="167">moderador</entry>
+  <entry key="168">administrador</entry>
+  <entry key="169">Rol de usuari</entry>
+  <entry key="170">organització</entry>
+  <entry key="171">nom</entry>
+  <entry key="172">afegir organització</entry>
+  <entry key="173">afegir organització</entry>
+  <entry key="174">cancel·lar</entry>
+  <entry key="175">afegir</entry>
+  <entry key="176">eliminar organització</entry>
+  <entry key="177">usuari</entry>
+  <entry key="178">afegir usuari</entry>
+  <entry key="179">eliminar usuari</entry>
+  <entry key="180">afegir usuari</entry>
+  <entry key="181">buscar usuari</entry>
+  <entry key="182">buscar</entry>
+  <entry key="183">usuari</entry>
+  <entry key="184">organització</entry>
+  <entry key="185">ingressar</entry>
+  <entry key="186">Sales</entry>
+  <entry key="187">Sales de conferència</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Nom</entry>
+  <entry key="190">pública</entry>
+  <entry key="191">Organitzacions</entry>
+  <entry key="192">Sales de conferència</entry>
+  <entry key="193">Nom</entry>
+  <entry key="194">Tipus</entry>
+  <entry key="195">Pública</entry>
+  <entry key="196">Comentari</entry>
+  <entry key="197">guardar</entry>
+  <entry key="198">carregar</entry>
+  <entry key="199">guardar com</entry>
+  <entry key="200">fitxer</entry>
+  <entry key="201">fitxer</entry>
+  <entry key="202">cancel·lar</entry>
+  <entry key="203">guardar</entry>
+  <entry key="204">error</entry>
+  <entry key="205">carregan</entry>
+  <entry key="206">objectes carregats</entry>
+  <entry key="207">sincronitzant clients, esperi un moment.</entry>
+  <entry key="208">Carregant dades d'imatge.</entry>
+  <entry key="209">sincronitzant clients, esperi un moment.</entry>
+  <entry key="210">netejar l'àrea de dibuix</entry>
+  <entry key="211">netejar l'àrea de dibuix, tota la informació de la pissarra s'esborrarà</entry>
+  <entry key="212">Confirmar abans de carregar un arxiu</entry>
+  <entry key="213">Enviar invitació</entry>
+  <entry key="214">Enviar invitació</entry>
+  <entry key="215">Tema</entry>
+  <entry key="216">Destinatari</entry>
+  <entry key="217">Missatge</entry>
+  <entry key="218">Enviar</entry>
+  <entry key="219">cancel·lar</entry>
+  <entry key="220">enviar</entry>
+  <entry key="221">Dades d'usuari</entry>
+  <entry key="222">El seu pseudònim per a aquesta conferència</entry>
+  <entry key="223">nom que es mostrarà</entry>
+  <entry key="224">nom</entry>
+  <entry key="225">cognoms</entry>
+  <entry key="226">email</entry>
+  <entry key="227">idioma</entry>
+  <entry key="228">ingressar</entry>
+  <entry key="229">Carregan</entry>
+  <entry key="230">Carregant dades, espere un moment</entry>
+  <entry key="231">Contrasenya errònia</entry>
+  <entry key="232">Per favor introdueixi dues vegades les mateixa contrasenya amb un mínim de 6 caràcters</entry>
+  <entry key="233">Correu invàlid</entry>
+  <entry key="234">Vostè ha introduït una adreça no vàlida de correu electrònic</entry>
+  <entry key="235">El registre s'ha completat amb èxit</entry>
+  <entry key="236">El seu compte ha estat creada, pot ingressar des d'aquest moment</entry>
+  <entry key="237">No pot compartir el seu escriptori en aquest moment. Algú més ja està compartint el seu escriptori.</entry>
+  <entry key="238">Compartició prohibida</entry>
+  <entry key="239">Compartir escriptori</entry>
+  <entry key="240">Problemes de connexió: La seva ample de banda és insuficient i es perdrà la informació. Si el missatge es repeteix amb freqüència sol·liciti al moderador reduir la qualitat d'imatge i àudio.</entry>
+  <entry key="241">Escriptori de:</entry>
+  <entry key="242">Dibuixar</entry>
+  <entry key="243">Document</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Fitxers</entry>
+  <entry key="246">Membres</entry>
+  <entry key="247">Descarregar el document original</entry>
+  <entry key="248">Descarregar el document en pdf</entry>
+  <entry key="249">Pujar un arxiu a la pissarra</entry>
+  <entry key="250">Configuració</entry>
+  <entry key="251">Arrossegar aquest objecte</entry>
+  <entry key="252">Ajustar el tamany del objete</entry>
+  <entry key="253">%</entry>
+  <entry key="254">de</entry>
+  <entry key="255">Anar a la primera pàgina</entry>
+  <entry key="256">Anar a la pàgina anterior</entry>
+  <entry key="257">Anar a la pàgina següent</entry>
+  <entry key="258">Anar a l'última pàgina</entry>
+  <entry key="259">Disminuir Zoom</entry>
+  <entry key="260">Aumentar Zoom</entry>
+  <entry key="261">Sr.</entry>
+  <entry key="262">Sra.</entry>
+  <entry key="263">Configuració</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Clau</entry>
+  <entry key="266">Configuració</entry>
+  <entry key="267">Clau</entry>
+  <entry key="268">última actualizació</entry>
+  <entry key="269">actualitzat per</entry>
+  <entry key="270">comentar</entry>
+  <entry key="271">clau</entry>
+  <entry key="272">de</entry>
+  <entry key="273">Usuaris</entry>
+  <entry key="274">Eliminar usuari de l'organització</entry>
+  <entry key="275">Eliminar</entry>
+  <entry key="276">Aquest usuari ja és membre de l'organització</entry>
+  <entry key="277">Noticies</entry>
+  <entry key="278">Enllaços ràpids</entry>
+  <entry key="279">Anar a la videoconferència</entry>
+  <entry key="280">Anar a l'auditori</entry>
+  <entry key="281">Ajuda i support tecnic</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Enviar "bug"</entry>
+  <entry key="285">més</entry>
+  <entry key="286">Web del Projecte (http://openmeetings.apache.org)</entry>
+  <entry key="287">Llista de correus del Projecto (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Recordar</entry>
+  <entry key="289">Contingut</entry>
+  <entry key="290">La meva pàgina d'inici</entry>
+  <entry key="291">Reunions programades</entry>
+  <entry key="292">Events programats</entry>
+  <entry key="293">Reunion publiques</entry>
+  <entry key="294">Reunions privades</entry>
+  <entry key="295">Events publics</entry>
+  <entry key="296">Events privats</entry>
+  <entry key="297">Contingut public</entry>
+  <entry key="298">Contingut privat</entry>
+  <entry key="299">Contenido personal</entry>
+  <entry key="300">...</entry>
+  <entry key="301">Moderació</entry>
+  <entry key="302">Sol·licitar la moderació</entry>
+  <entry key="303">Enquestes</entry>
+  <entry key="304">Seleccioni un fitxer</entry>
+  <entry key="305">Configuració</entry>
+  <entry key="306">Càmera i micròfon</entry>
+  <entry key="307">Configuració de la pissarra</entry>
+  <entry key="308">Sortir</entry>
+  <entry key="309">Regressar a les sales</entry>
+  <entry key="310">Sortir</entry>
+  <entry key="311">Ha oblidat la seva contrasenya?</entry>
+  <entry key="312">Resetear contrasenya</entry>
+  <entry key="313">Audi i Video</entry>
+  <entry key="314">Chat</entry>
+  <entry key="315">Pissarra</entry>
+  <entry key="316">Moderació</entry>
+  <entry key="317">Fitxers</entry>
+  <entry key="318">Usuaris</entry>
+  <entry key="319">Enquestes</entry>
+  <entry key="320">No hi ha ningú connectat amb aquest nom d'usuari</entry>
+  <entry key="321">El email conté un enllaç especial que ha estat enviat al seu correu. Si no apareix aquest correu revisi la configuració de filtres de spam del seu servidor i reenvée aquest correu novament.</entry>
+  <entry key="322">Error</entry>
+  <entry key="323">Missatge</entry>
+  <entry key="324">No es va trobar a l'usuari (mètode de generació de claus incorrecte).</entry>
+  <entry key="325">Generar contrasenya</entry>
+  <entry key="326">Entrar</entry>
+  <entry key="327">cambiar contrasenya</entry>
+  <entry key="328">nova contrasenya</entry>
+  <entry key="329">torni a escriure la contrasenya</entry>
+  <entry key="330">Les contrasenyes introduïdes no són iguals.</entry>
+  <entry key="331">Escrigui 4 o més caràcters. Distingeix majúscules de minúscules</entry>
+  <entry key="332">La contrasenya ha estat canviada, ara pot iniciar sessió.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Error desconegut. Enviï aquesta informació a l'administrador del sistema.</entry>
+  <entry key="335">No es va trobar a l'usuari</entry>
+  <entry key="336">Contrasenya incorrecta</entry>
+  <entry key="337">Ha sortit del sistema</entry>
+  <entry key="338">Es troba deshabilitada l'opció de registre.</entry>
+  <entry key="339">Correu incorrecte</entry>
+  <entry key="340">fitxer duplicat, per favor seleccioni un altre</entry>
+  <entry key="341">el nom de l'arxiu és massa curt</entry>
+  <entry key="342">No es va poder guardar l'adreça</entry>
+  <entry key="343">L'usuari va ser afegit, no obstant això haurà d'estar almenys en una organització per a poder iniciar la sessió.</entry>
+  <entry key="344">Nova gravació</entry>
+  <entry key="345">No es va trobar un camp en aquest FieldId.</entry>
+  <entry key="346">No es va trobar una etiqueta per a aquest camp.</entry>
+  <entry key="347">Es necessita autorització de l'administrador</entry>
+  <entry key="348">Editor d'idiomes</entry>
+  <entry key="349">Idioma</entry>
+  <entry key="350">Etiqueta-ID</entry>
+  <entry key="351">Etiqueta-Nom</entry>
+  <entry key="352">Valor</entry>
+  <entry key="353">Valor dels camps</entry>
+  <entry key="354">Nom</entry>
+  <entry key="355">Valor de l'etiqueta</entry>
+  <entry key="356">ID de l'etiqueta</entry>
+  <entry key="357">Ha eliminat l'etiqueta però no el camp. No es pot eliminar un camp ja que pot tenir etiquetes en altres idiomes.</entry>
+  <entry key="358">Labelid incorrecte. El seu FieldLanguagesvaluesAneu no es va trobar en la base de dades.</entry>
+  <entry key="359">Vostè no pot eliminar aquest camp, només les etiquetes. No hi ha una etiqueta carregada de moment o no es troba seleccionada cap (pot ser que no existeixi en l'idioma seleccionat).</entry>
+  <entry key="360">exportar</entry>
+  <entry key="361">Necessita tancar la sessió per a veure els canvis.</entry>
+  <entry key="362">Afegir nou idioma</entry>
+  <entry key="363">eliminar idioma</entry>
+  <entry key="364">Afegir nou idioma</entry>
+  <entry key="365">Nom</entry>
+  <entry key="366">afegir idioma</entry>
+  <entry key="367">Copia de seguretat</entry>
+  <entry key="368">anar a l'inici</entry>
+  <entry key="369">anterior</entry>
+  <entry key="370">sigüente</entry>
+  <entry key="371">anar al final</entry>
+  <entry key="372">l'usuari parla (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">encendre o apagar so</entry>
+  <entry key="374">Sistema</entry>
+  <entry key="375">La seva configuració</entry>
+  <entry key="376">Salutacions,</entry>
+  <entry key="377">Editar perfil</entry>
+  <entry key="378">Nous missatges:</entry>
+  <entry key="379">Pujar imatge</entry>
+  <entry key="380">Exportació de dades d'usuari</entry>
+  <entry key="381">¡Han d'existir totes les organitzacions!</entry>
+  <entry key="382">Exportar usuaris</entry>
+  <entry key="383">Exportar per organizació</entry>
+  <entry key="384">Iniciar procés d'exportació</entry>
+  <entry key="385">Importació de dades d'usuari</entry>
+  <entry key="386">Seleccionar fitxer xml</entry>
+  <entry key="387">importar</entry>
+  <entry key="388">Exportar a XML - Aquests fitxers poden ser usats per a: - Contribuir en el projecte - Importar-los en altre sistema - Copia de Respatller - Personalització - Col·locar-lo en el directori d'idiomes per a la pròxima instal·lació.</entry>
+  <entry key="389">Seleccioni un arxiu d'idioma que s'importarà. Configuri correctament l'idioma en el menú desplegable (no importa el nom que tingui l'arxiu ja que serà importat de tots les maneres).</entry>
+  <entry key="390">importar - seleccionar fitxer</entry>
+  <entry key="391">Guardar com...</entry>
+  <entry key="392">Nom:</entry>
+  <entry key="393">Comentari:</entry>
+  <entry key="394">guardar</entry>
+  <entry key="395">Grabacions</entry>
+  <entry key="396">Visor de grabacions</entry>
+  <entry key="397">Grabacions de salas publiques i privades</entry>
+  <entry key="398">Usuaris:</entry>
+  <entry key="399">En el sistema:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Usuaris en la sala:</entry>
+  <entry key="402">actualitzar</entry>
+  <entry key="403">La sala esta plena. Per favor, intenti'l més tard.</entry>
+  <entry key="404">Premi sobre una sala per a veure els detalls</entry>
+  <entry key="405">Escriure als usuaris d'aquesta sala:</entry>
+  <entry key="406">Sala:</entry>
+  <entry key="407">Usuaris en aquesta sala:</entry>
+  <entry key="408">desde:</entry>
+  <entry key="409">reproduir gravació</entry>
+  <entry key="410">Duració:</entry>
+  <entry key="411">Data:</entry>
+  <entry key="412">Manera d'enregistrament: no pot canviar cap valor ja que es tracta d'un arxiu gravat.</entry>
+  <entry key="413">Reproduir aquesta gravació</entry>
+  <entry key="414">Reproducir / Pausa</entry>
+  <entry key="415">Iniciar gravació</entry>
+  <entry key="416">Parar gravació</entry>
+  <entry key="417">Gravació:</entry>
+  <entry key="418">Actualmente algú es troba graban:</entry>
+  <entry key="419">Gravant per l'usuari:</entry>
+  <entry key="420">cancel·lar</entry>
+  <entry key="421">La gravació serà cancel·lada i no es guardarà.</entry>
+  <entry key="422">reprendre</entry>
+  <entry key="423">Tancar finestra i reprendre la gravació</entry>
+  <entry key="424">Canviar el color de línia</entry>
+  <entry key="425">Seleccionar color</entry>
+  <entry key="426">Deshabilitar / Habilitar color de línia</entry>
+  <entry key="427">canviar color de fons</entry>
+  <entry key="428">Deshabilitar / Habilitar color de fons</entry>
+  <entry key="429">canviar grossor de línia</entry>
+  <entry key="430">tancar</entry>
+  <entry key="431">canviar grandària de lletra</entry>
+  <entry key="432">Eliminar gravació</entry>
+  <entry key="433">Invitat</entry>
+  <entry key="434">Per:</entry>
+  <entry key="435">Nom</entry>
+  <entry key="436">Sala</entry>
+  <entry key="437">Data</entry>
+  <entry key="438">cancel·lar</entry>
+  <entry key="439">iniciar</entry>
+  <entry key="440">Nom</entry>
+  <entry key="441">Data</entry>
+  <entry key="442">Eliminar registre (log) de xat en el servidor</entry>
+  <entry key="443">Xat</entry>
+  <entry key="444">enviar un missatge</entry>
+  <entry key="445">Emoticones</entry>
+  <entry key="446">Emoticones</entry>
+  <entry key="447">Seleccionar dispositius</entry>
+  <entry key="448">Àudio i Vídeo</entry>
+  <entry key="449">Només Àudio</entry>
+  <entry key="450">Només Vídeo</entry>
+  <entry key="451">Sense Àudio/Vídeo (Imatge fixa)</entry>
+  <entry key="452">No es transmetrà Àudio/Vídeo des del seu equip. En el seu lloc es mostrarà la imatge del seu perfil. Seleccioni aquesta configuració si té problemes amb l'ample de banda d'internet.</entry>
+  <entry key="453">DL</entry>
+  <entry key="454">DM</entry>
+  <entry key="455">MC</entry>
+  <entry key="456">DJ</entry>
+  <entry key="457">DV</entry>
+  <entry key="458">DS</entry>
+  <entry key="459">DG</entry>
+  <entry key="460">Dilluns</entry>
+  <entry key="461">Dimarts</entry>
+  <entry key="462">Dimecres</entry>
+  <entry key="463">Dijous</entry>
+  <entry key="464">Divendres</entry>
+  <entry key="465">Disabte</entry>
+  <entry key="466">Diumenge</entry>
+  <entry key="467">S#</entry>
+  <entry key="468">Nombre de setmana de calendari</entry>
+  <entry key="469">Gener</entry>
+  <entry key="470">Febrer</entry>
+  <entry key="471">Març</entry>
+  <entry key="472">Abril</entry>
+  <entry key="473">Maig</entry>
+  <entry key="474">Juny</entry>
+  <entry key="475">Juliol</entry>
+  <entry key="476">Agost</entry>
+  <entry key="477">Setembre</entry>
+  <entry key="478">Octubre</entry>
+  <entry key="479">Novembre</entry>
+  <entry key="480">Desembre</entry>
+  <entry key="481">Calendari</entry>
+  <entry key="482">Participants</entry>
+  <entry key="483">Mostrar la configuració</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Ample | Alt</entry>
+  <entry key="486">Contenidor: vídeo</entry>
+  <entry key="487">Contenidor: moderació</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Contenidor: pissarra</entry>
+  <entry key="490">Habilitat</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Ample | Alt</entry>
+  <entry key="493">Contenidor: Fitxer,Xat,Participants</entry>
+  <entry key="494">Habilitat</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Ample | Alt</entry>
+  <entry key="497">El moderador s'ha retirat pel que ningú està realitzant una presentació en aquests moments. Pot sol·licitar la moderació o esperar.</entry>
+  <entry key="498">No hi ha moderador en aquesta sala, però si participants. Pot sol·licitar la moderació o esperar.</entry>
+  <entry key="499">Comentari de {0}</entry>
+  <entry key="500">{0} - Invitació</entry>
+  <entry key="501">Missatge del usuari:</entry>
+  <entry key="502">Missatge:</entry>
+  <entry key="503">Premi en aquest enllaç per a poder participar en la conferència:</entry>
+  <entry key="504">Premi aquí per a entrar a la sala</entry>
+  <entry key="505">Si té problemes amb l'enllaç, li vam suggerir que copiï i pegui el següent text en el seu navegador:</entry>
+  <entry key="506">Registre {0}</entry>
+  <entry key="507">La seva informació d'usuari:</entry>
+  <entry key="508">Usuari:</entry>
+  <entry key="509">Contrasenya:</entry>
+  <entry key="510">Correu:</entry>
+  <entry key="511">Equip-{0}</entry>
+  <entry key="512">{0} - Registre</entry>
+  <entry key="513">{0} - Resetear contrasenya</entry>
+  <entry key="514">Premi en el següent enllaç per a sol·licitar una nova contrasenya:</entry>
+  <entry key="515">Premi aquí per a introduir una nova contrasenya</entry>
+  <entry key="516">Si té problemes amb l'enllaç, li vam suggerir que copiï i pegui el següent text en el seu navegador:</entry>
+  <entry key="517">{0} - Nova Contrasenya</entry>
+  <entry key="518">Per favor, introdueixi una data vàlida amb el format dd.mm.yyyy Exemple: 24.12.2008.</entry>
+  <entry key="519">Per favor, introdueixi una adreça de correu vàlida</entry>
+  <entry key="520">Per favor, introdueixi un nombre decimal. Exemple: 1.00 (usi punt i no la coma)</entry>
+  <entry key="521">Per favor, introdueixi un nombre sencer</entry>
+  <entry key="522">Per favor, introdueixi un nombre de telèfon vàlid. Exemple: +593 947 225 200.</entry>
+  <entry key="523">Per favor introdueixi una hora vàlida en el format hh:mm. Exemple: 12:23.</entry>
+  <entry key="524">Contrasenya protegida</entry>
+  <entry key="525">Contrasenya</entry>
+  <entry key="526">Període de validesa</entry>
+  <entry key="527">Sense límit</entry>
+  <entry key="528">Període</entry>
+  <entry key="529">Una vegada</entry>
+  <entry key="530">Des de:</entry>
+  <entry key="531">Fins a:</entry>
+  <entry key="532">Invitació a {0}</entry>
+  <entry key="533">No existeix una invitació disponible amb aquest codi.</entry>
+  <entry key="534">Aquesta invitació ja va ser usada i no pot tornar-se a utilitzar.</entry>
+  <entry key="535">El codi d'invitació no és vàlid.</entry>
+  <entry key="536">Contrasenya:</entry>
+  <entry key="537">Verificar contrasenya</entry>
+  <entry key="538">Contrasenya incorrecta</entry>
+  <entry key="539">Navegador</entry>
+  <entry key="540">Sincronitzar Àudio/Vídeo</entry>
+  <entry key="541">El login és correcte, però la sessió en la qual intenta entrar no està activa o no va ser guardada en el servidor. Ha d'iniciar una nova sessió.</entry>
+  <entry key="542">La SessionId is not loggedin or has no Admin rights. The SOAP Gateway needs an User with Admin-Rights to embed new Users.</entry>
+  <entry key="543">This Session has no Remoteuser-Data connected. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">El grabador actualment està en fase beta</entry>
+  <entry key="545">x</entry>
+  <entry key="546">eix -x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">eix-y</entry>
+  <entry key="549">a</entry>
+  <entry key="550">amplària</entry>
+  <entry key="551">h</entry>
+  <entry key="552">altura</entry>
+  <entry key="553">Canviar Transparència</entry>
+  <entry key="554">Navegador Obrir</entry>
+  <entry key="555">Navegador Tancar</entry>
+  <entry key="556">S'ha perdut la connexió amb el servidor. Necessita recarregar l'aplicació i/o comprovar la seva Xarxa.</entry>
+  <entry key="557">Punter</entry>
+  <entry key="558">Sincronitzant</entry>
+  <entry key="559">Sincronitzant usuaris. Per favor, esperi.</entry>
+  <entry key="560">&lt;u&gt;Descarregar com SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Descarregar com PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Descarregar com JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Descarregar com PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Descarregar com TIF&lt;/u&gt;</entry>
+  <entry key="565">Recordi:</entry>
+  <entry key="566">Categoria:</entry>
+  <entry key="567">Repetició:</entry>
+  <entry key="568">ningú</entry>
+  <entry key="569">Localització:</entry>
+  <entry key="570">Inici</entry>
+  <entry key="571">Final</entry>
+  <entry key="572">Títol:</entry>
+  <entry key="573">Comentari:</entry>
+  <entry key="574">Convidar a persones</entry>
+  <entry key="575">Diàriament</entry>
+  <entry key="576">Mensualment</entry>
+  <entry key="577">Anualment</entry>
+  <entry key="578">La cita final va després de la cita d'inici</entry>
+  <entry key="579">Per favor, posi un títol</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Activi aquesta opció si l'escriptura del seu idioma va de dreta a esquerra</entry>
+  <entry key="582">Eines</entry>
+  <entry key="583">Veure esdeveniments o trobades gravades</entry>
+  <entry key="584">Videoconferència - Reuneixi's amb 4 o més (fins a 16) usuaris\ntots tindran accés d'àudio i vídeo.</entry>
+  <entry key="585">Auditori - Reuneixi's amb fins a 200 participants&lt;br/&gt;només el moderador tindrà àudio i/o vídeo</entry>
+  <entry key="586">Crear usuaris, sales, organitzacions&lt;br/&gt; + canvis en la configuració</entry>
+  <entry key="587">Usuaris en la Sala</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Carregant Arxiu. Esperi fins que tots els clients hagin estat sincronitzats.</entry>
+  <entry key="592">Pujada completa. Convertint l'arxiu...</entry>
+  <entry key="593">Iniciar Pujada</entry>
+  <entry key="594">Pujar i importar conversa. Per favor, seleccioni un arxiu del seu disc.</entry>
+  <entry key="595">Cancel·lar</entry>
+  <entry key="596">Seleccionar Arxiu</entry>
+  <entry key="597">Conexions</entry>
+  <entry key="598">Valor</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Conectat des de</entry>
+  <entry key="602">Sala / Àmbit</entry>
+  <entry key="603">Expulsar a l'usuari</entry>
+  <entry key="604">Expulsar</entry>
+  <entry key="605">Està segur de voler expulsar a aquest client de la connexió?\n El client serà expulsat de la Sala, però podrà tornar a autenticar-se de nou.</entry>
+  <entry key="606">La seva sessió ha estat tancada per l'administrador o el moderador.</entry>
+  <entry key="607">Telèfon</entry>
+  <entry key="608">L'usuari és el moderador d'aquesta Sala</entry>
+  <entry key="609">L'usuari té permisos per a dibuixar en la pissarra</entry>
+  <entry key="610">(Re) Iniciar Àudio/Vídeo o canviar la configuració de dispositius</entry>
+  <entry key="611">Permetre a aquest usuari dibuixar en la pissarra</entry>
+  <entry key="612">Llevar permisos per a dibuixar en la pissarra</entry>
+  <entry key="613">Usuaris</entry>
+  <entry key="614">Fitxers</entry>
+  <entry key="615">Pissarra</entry>
+  <entry key="616">Xat</entry>
+  <entry key="617">El seu compte està assignada a diverses organitzacions. Seleccioni aquella amb la qual vulgui entrar en aquesta sessió.</entry>
+  <entry key="618">Aquesta sala està completa. Intenti'l més tard.</entry>
+  <entry key="619">Tipus de sala</entry>
+  <entry key="620">Sala per a citar-se</entry>
+  <entry key="621">Hora del servidor</entry>
+  <entry key="622">{0} - Recordatori</entry>
+  <entry key="623">Missatge de l'usuari:</entry>
+  <entry key="624">Missatge:</entry>
+  <entry key="625">Premi en l'enllaç per a participar en la (Vídeo)Conferència:</entry>
+  <entry key="626">Premi aquí per a entrar en la sala</entry>
+  <entry key="627">Si té problemes, copiï i pegui aquest enllaç en el seu navegador:</entry>
+  <entry key="628">recerca interna:</entry>
+  <entry key="629">usarios externs</entry>
+  <entry key="630">nom</entry>
+  <entry key="631">cognoms</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirmar Sortir</entry>
+  <entry key="634">Està segur que desitja sortir?</entry>
+  <entry key="635">Accions</entry>
+  <entry key="636">Sala Demo</entry>
+  <entry key="637">Hora Demo</entry>
+  <entry key="638">Temporitzador de trobades</entry>
+  <entry key="639">Aquesta Sala és demo. Per a desactivar aquest avís, hauria d'aconseguir una sala privada per a ús propi o bé configurar el seu propi Servidor. Serà desconnectat automàticament en:</entry>
+  <entry key="640">Amb moderador</entry>
+  <entry key="641">Per favor, esperi fins que el moderador entre en la sala. El moderador pot ser un professor, l'administrador o el creador d'aquesta sala.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Escriptori compartit iniciant-se</entry>
+  <entry key="644">Està iniciant-se un escriptori compartit de l'usuari:</entry>
+  <entry key="645">Començar a compartir</entry>
+  <entry key="646">Afegir una nova trobada</entry>
+  <entry key="647">Sala de trobades</entry>
+  <entry key="648">Sala d'esdeveniments</entry>
+  <entry key="649">Moderació</entry>
+  <entry key="650">Moderar Usuaris</entry>
+  <entry key="651">Moderar Sales</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Desitja convertir a aquest usuari en Moderador d'aquesta Organització?</entry>
+  <entry key="654">Per favor, seleccioni una Organització abans d'intentar incloure a un usuari en la mateixa.</entry>
+  <entry key="655">Organització - Moderador</entry>
+  <entry key="656">Realment desitja esborrar a aquest usuari de l'Organització?</entry>
+  <entry key="657">Aquest usuari és Moderador</entry>
+  <entry key="658">Aquest usuari no és Moderador</entry>
+  <entry key="659">Desitja que aquest usuari deixi de ser Moderador d'aquesta Organització?</entry>
+  <entry key="660">Afegir o esborrar Usuaris i/o Sales en la seva Organització</entry>
+  <entry key="661">Realment vol esborrar aquest registre?</entry>
+  <entry key="662">Realment vol esborrar a aquest usuari de la seva organització? Només s'esborrarà la connexió entre l'usuari i la seva organització. En realitat, per a esborrar a l'usuari ha d'ingressar al Panell d'Administració.</entry>
+  <entry key="663">¡Vd no pot esborrar-se a si mateix!</entry>
+  <entry key="664">¡Aquest mètode necessita un compte d'Administració per a poder ser utilitzat!</entry>
+  <entry key="665">No hi ha cap sessió associada a aquest ID.</entry>
+  <entry key="666">Aquesta és un compte d'Administrador o de Moderador. Només pot editar aquest compte utilitzant el Panell d'Administració.</entry>
+  <entry key="667">Per a completar el seu registre, faci el favor de prémer en el següent enllaç. Altra opció és copiar la URL en la barra del seu navegador.</entry>
+  <entry key="668">Premi per a verificar el seu E-Mail</entry>
+  <entry key="669">No s'ha trobat un usuari per a aquest algorisme Hash.</entry>
+  <entry key="670">¡Aquest usuari ja va ser activat!</entry>
+  <entry key="671">¡Ud ha activat el seu compte amb èxit!</entry>
+  <entry key="672">Ingressi ara</entry>
+  <entry key="673">El seu compte no està activada. Utilitzi en primer lloc l'enllaç que hi ha en correu rebut al finalitzar el procés de registre.</entry>
+  <entry key="674">Ud s'ha registrat amb èxit. Li hem enviat un correu amb un codi de verificació. Per favor, revisi el seu compte de correu.</entry>
+  <entry key="675">Llevar el rol de Moderador a aquest usuari</entry>
+  <entry key="676">Donar permisos de Moderació a aquest usuari</entry>
+  <entry key="677">Usuari</entry>
+  <entry key="678">Accés a la pissarra</entry>
+  <entry key="679">Moderador</entry>
+  <entry key="680">Moderació: Per favor, seleccioni qualsevol usuari de la llista per a donar-li accés a la Pissarra, Moderació o Vídeo.</entry>
+  <entry key="681">Aquest usuari ja és Moderador, així que automàticament té permisos per a dibuixar.</entry>
+  <entry key="682">Aquest és Ud! No pot llevar-se els permisos de Moderació a si mateix.</entry>
+  <entry key="683">Permetre a aquest usuari Publicar el seu Àudio/Vídeo</entry>
+  <entry key="684">Esborrar l'Àudio/Vídeo d'aquest usuari</entry>
+  <entry key="685">M'agradaria ser moderador d'aquesta sala</entry>
+  <entry key="686">M'agradaria utilitzar la pissarra</entry>
+  <entry key="687">Desitjaria compartir el meu Àudio/Vídeo</entry>
+  <entry key="688">Vè. és el moderador d'aquesta sala</entry>
+  <entry key="689">Té permisos per a dibuixar en la pissarra</entry>
+  <entry key="690">Té permís per a compartir el seu Àudio/Video</entry>
+  <entry key="691">Missatge al Moderador</entry>
+  <entry key="692">L'usuari</entry>
+  <entry key="693">Desitjaria ser Moderador. Usi les icones d'estat pròxims a l'usuari en la Llista d'Usuaris per a agregar o remoure el permís de Moderació.</entry>
+  <entry key="694">desitjaria utilitzar la pissarra. Utilitzi les icones que hi ha al costat del nom de l'usuari (en la Llista d'Usuaris) per a agregar o llevar els permisos corresponents.</entry>
+  <entry key="695">desitjaria compartir el seu Àudio/Vídeo. Usi les icones que hi ha al costat del nom d'usuari (en la Llista d'Usuaris) per a agregar o llevar els permisos per a compartir Àudio/Video.</entry>
+  <entry key="696">Ha d'esperar fins que un Moderador ingressi a la sala.</entry>
+  <entry key="697">Cancel·lar</entry>
+  <entry key="698">Guardar</entry>
+  <entry key="699">Dia</entry>
+  <entry key="700">Mes</entry>
+  <entry key="701">Any</entry>
+  <entry key="702">Pujar fitxer</entry>
+  <entry key="703">Fitxer carpeta</entry>
+  <entry key="704">Actualizar</entry>
+  <entry key="705">Papelera</entry>
+  <entry key="706">Els meus Arxius (Dispositiu personal)</entry>
+  <entry key="707">Arxius de la Sala (Dispositiu públic)</entry>
+  <entry key="708">Afegir fitxer</entry>
+  <entry key="709">AfegirCarpeta</entry>
+  <entry key="710">Borrar Carpeta</entry>
+  <entry key="711">Editar nom</entry>
+  <entry key="712">Nova Carpeta</entry>
+  <entry key="713">Està segur que vol esborrar aquest ítem?)</entry>
+  <entry key="714">Buscar</entry>
+  <entry key="715">Buscar</entry>
+  <entry key="716">Obrir document</entry>
+  <entry key="717">Mostrar tots els arxius (Vista d'arbre)</entry>
+  <entry key="718">Tancar document</entry>
+  <entry key="719">Esborrar fitxer</entry>
+  <entry key="720">No té permisos per a escriure o dibuixar en la pissarra. Ha de ser moderador o, almenys, tenir permisos d'edició de la pissarra. Sol·liciti-l'hi a un Moderador.</entry>
+  <entry key="721">Propietats</entry>
+  <entry key="722">Iniciar Client (extern)</entry>
+  <entry key="723">Iniciar Client (HTTP)</entry>
+  <entry key="724">Un usuari desitja compartir la seva pantalla. Desitja visualitzar-lo?</entry>
+  <entry key="725">Actualment està compartint el seu escriptori. Per a deixar de fer-lo, premi en el botó Stop en el client utilitzat.</entry>
+  <entry key="726">Compartint sessió</entry>
+  <entry key="727">¡Ja està compartint el seu Escriptori!</entry>
+  <entry key="728">Visor d'Escriptori</entry>
+  <entry key="729">Sortir</entry>
+  <entry key="730">Compartint l'Escriptori</entry>
+  <entry key="731">Premi Iniciar per a publicar la seva pantalla</entry>
+  <entry key="732">Iniciar el compartir escriptori</entry>
+  <entry key="733">Finalitzar el compartir escriptori</entry>
+  <entry key="734">Seleccioni l'àrea de la seva pantalla:</entry>
+  <entry key="735">Canviar amplària</entry>
+  <entry key="736">!Ha finalitzat aquesta sessió!</entry>
+  <entry key="737">Canviar altura</entry>
+  <entry key="738">Desplaçament eix X</entry>
+  <entry key="739">Desplaçament eix Y</entry>
+  <entry key="740">Amplària:</entry>
+  <entry key="741">Altura:</entry>
+  <entry key="742">La connexió ha estat tancada pel servidor</entry>
+  <entry key="743">Cancel·lar</entry>
+  <entry key="744">Iniciar Externa</entry>
+  <entry key="745">Si tanca aquesta sessió completament, no serà possible reiniciar el visor durant aquesta sessió.</entry>
+  <entry key="746">Confirmar el tancament de la sessió</entry>
+  <entry key="747">Compartir pantalla</entry>
+  <entry key="748">Grabar sessió</entry>
+  <entry key="749">Co-Navegació</entry>
+  <entry key="750">Hum... Firefox en windows no mostra la co-navegació amb claredat. Per favor, utilitzi altre navegador o tancament aquesta funcionalitat.</entry>
+  <entry key="751">Previ</entry>
+  <entry key="752">Sigüent</entry>
+  <entry key="753">Recarregar</entry>
+  <entry key="754">Inici</entry>
+  <entry key="755">Carregar</entry>
+  <entry key="756">Configurar en el seu perfil aquest lloc com la pàgina web per defecte.</entry>
+  <entry key="757">Provar configuració</entry>
+  <entry key="758">Comprovi la configuració del seu micròfon i/o càmera abans d'entrar en la sala. Per a això gravi durant alguns segons i reprodueixi'l.</entry>
+  <entry key="759">No tornar a mostrar aquest test</entry>
+  <entry key="760">Cancel·lar</entry>
+  <entry key="761">Iniciar</entry>
+  <entry key="762">No demanar de nou</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Pot continuar sense fer la comprovació si no desitja publicar la imatge i/o el so. Els participants sense àudio o sense vídeo poden en tot cas utilitzar la pissarra, compartir el seu escriptori o enviar missatges utilitzant el xat.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Medidor de Nivell</entry>
+  <entry key="768">Pressioni Iniciar</entry>
+  <entry key="769">Iniciar Conferència</entry>
+  <entry key="770">Iniciar Esdeveniment</entry>
+  <entry key="771">Anar a la Sala</entry>
+  <entry key="772">Comprovar Config.</entry>
+  <entry key="773">Iniciar Conferen.</entry>
+  <entry key="774">Instruccions Conferència:</entry>
+  <entry key="775">Iniciar Gravació</entry>
+  <entry key="776">No mostrar el test de gravació d'àudio /vídeo abans d'entrar en una Conferència</entry>
+  <entry key="777">Salas públiques</entry>
+  <entry key="778">Les sales públiques són accessibles per a tots els usuaris.</entry>
+  <entry key="779">Salas privades</entry>
+  <entry key="780">Les sales privades són accessibles només per als usuaris de la mateixa organització.</entry>
+  <entry key="781">Les meves sales</entry>
+  <entry key="782">Les sales en aquesta secció són per a ús personal. Es creen utilitzant el calendari i tenen una data d'inici i de finalització. Només es mostren en aquesta secció durant l'interval temporal de validesa.</entry>
+  <entry key="783">Ha de ser moderador per a executar aquesta acció.</entry>
+  <entry key="784">Sol·licitar la moderació</entry>
+  <entry key="785">Sol·licitar accés a la pissarra</entry>
+  <entry key="786">Sol·licitar accés a la càmera/micròfon</entry>
+  <entry key="787">L'autenticació d'aquesta sessió ja ha estat utilitzada. No pot fer-se dues vegades.</entry>
+  <entry key="788">INICIAR</entry>
+  <entry key="789">SORTIR</entry>
+  <entry key="790">¿Desitja realment sortir? És convenient que abans esborri els documents pujats, la pissarra o l'historial del xat.</entry>
+  <entry key="791">Sortir de la conferència</entry>
+  <entry key="792">Sales</entry>
+  <entry key="793">Seleccioni una sala</entry>
+  <entry key="794">Hi ha un esdeveniment sense guardar en el calendari. Per favor, guardi'l o bé esborri'l.</entry>
+  <entry key="795">¡Per favor, afegexi almenys a un participant!</entry>
+  <entry key="796">¿Realment desitja esborrar aquest esdeveniment?</entry>
+  <entry key="797">Avis</entry>
+  <entry key="798">afegir event</entry>
+  <entry key="799">dia</entry>
+  <entry key="800">setmana</entry>
+  <entry key="801">mes</entry>
+  <entry key="802">Descripció</entry>
+  <entry key="803">Asistents</entry>
+  <entry key="804">{0}, la seva Plataforma Web de Videoconferència. Només segueixi les instruccions, pressioni el botó per a iniciar immediatament o vagi al Calendari per a programar una Trobada més endavant.</entry>
+  <entry key="805">Progr. Trobada</entry>
+  <entry key="806">Per a planificar una conferència, afegeixi un nou Esdeveniment en el Calendari. Per a cada Esdeveniment es crearà automàticament una Sala de (vídeo)conferència. Vostè i la resta d'assistents rebran un correu amb un enllaç de la sala. &lt;br/&gt;&lt;br/&gt;Pot escollir entre diferents tipus de sales amb diferents dissenys i sistemes de moderació. També pot escollir entre diferents tipus de notificació de correu que s'envien en cada esdeveniment del calendari.</entry>
+  <entry key="807">¿Necessita ajuda?</entry>
+  <entry key="808">Restringit</entry>
+  <entry key="809">Buscar</entry>
+  <entry key="810">Afegir</entry>
+  <entry key="811">No hi ha cap usuari seleccionat. Seleccioni primer un ítem de la llista i premi a Afegir.</entry>
+  <entry key="812">Afegir asistent</entry>
+  <entry key="813">Guardar</entry>
+  <entry key="814">Esborrar</entry>
+  <entry key="815">Detalls de l'Esdeveniment</entry>
+  <entry key="816">Moderadors per defecte</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Nom</entry>
+  <entry key="820">Email</entry>
+  <entry key="821">Afegir nou Moderador per defecte</entry>
+  <entry key="822">¿És supermoderador</entry>
+  <entry key="823">Si la sala està moderada, qui sigui ja moderador seguirà sent-lo. Si no desitja que sigui així, i només vol que determinat usuari sigui el moderador, utilitzi l'opció de Moderador per defecte.</entry>
+  <entry key="824">Un supermoderador és sempre el moderador d'una sala quan entra en ella. A més, ningú pot llevar-li la marca de moderació</entry>
+  <entry key="825">Aplicar supermoderación a l'usuari</entry>
+  <entry key="826">Llevar supermoderación a l'usuari</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Si afegix una organització a la sala, només els usuaris d'aquesta organització tindran accés a la mateixa (això només és vàlid si la marca de Pública està configurada com falsa)</entry>
+  <entry key="829">Moderació</entry>
+  <entry key="830">Limitacions</entry>
+  <entry key="831">Organització</entry>
+  <entry key="832">¿Està Vè. segur?</entry>
+  <entry key="833">Realment desitja esborrar aquest ítem? Ha de prémer en el botó de guardar per a emmagatzemar els canvis!</entry>
+  <entry key="834">No hi ha cap usuari seleccionat. Per favor, seleccioni'l primer.</entry>
+  <entry key="835">Afegir un nou moderador per defecte</entry>
+  <entry key="836">¿Desitja afegir una marca de supermoderador a aquest usuari? Recordi que un supermoderador no només és el moderador d'una sala, sinó que a més cap altre moderador podrà esborrar la marca de moderació. Necessita guardar l'objecte sala per a emmagatzemar aquestes configuracions.</entry>
+  <entry key="837">¿Desitja eliminar la marca de supermoderador a aquest usuari? Necessita guardar l'objecte sala per a emmagatzemar aquestes configuracions.</entry>
+  <entry key="838">Aquest usuari té el rol de supermoderador. No pot llevar-li la marca de moderació a un supermoderador.</entry>
+  <entry key="839">¿Realment desitja esborrar aquest Fitxer/Directori?</entry>
+  <entry key="840">¿Esborrar Fitxer/Directori ?</entry>
+  <entry key="841">Sra.</entry>
+  <entry key="842">D.</entry>
+  <entry key="843">Propietats</entry>
+  <entry key="844">Mostrar la posició del ratolí als participants</entry>
+  <entry key="845">Compartir Àudio amb el applet SIP</entry>
+  <entry key="846">Compartir Àudio amb SIP i Vídeo amb Flash</entry>
+  <entry key="847">Pantalla completa</entry>
+  <entry key="848">Veure pantalla</entry>
+  <entry key="849">El usuari</entry>
+  <entry key="850">desitja compartir la seva pantalla. Desitja visualitzar-la?</entry>
+  <entry key="851">Tancar</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">La sessió ha estat tancada per qui compartia pantalla</entry>
+  <entry key="854">Pausa</entry>
+  <entry key="855">Compartir pantalla</entry>
+  <entry key="856">Minimitzar</entry>
+  <entry key="857">Maximitzar</entry>
+  <entry key="858">Vídeo</entry>
+  <entry key="859">Línia temporal de gravació</entry>
+  <entry key="860">Les meves grabacions</entry>
+  <entry key="861">Grabacions públics</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Nom</entry>
+  <entry key="864">Longitud</entry>
+  <entry key="865">Data</entry>
+  <entry key="866">Per</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Vídeo - Principal</entry>
+  <entry key="869">Gravació</entry>
+  <entry key="870">Pot grabar i compartir la seva pantalla alhora. Per a permetre que uns altres vegin la seva pantalla, premi en el botó -iniciar- de la part superior. Per a gravar la sessió, és suficient amb prémer a iniciar enregistrament.</entry>
+  <entry key="871">Iniciar Gravació</entry>
+  <entry key="872">Parar Gravació</entry>
+  <entry key="873">Descarregar l'arxiu FLV</entry>
+  <entry key="874">Sala</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">L'usuari té el micròfon activat</entry>
+  <entry key="878">Detenir compartir</entry>
+  <entry key="879">Permetre preguntes de l'usuari</entry>
+  <entry key="880">Desactivi això per a impedir que cap usuari li molesti en aquesta sala. Al fer-lo, el botó per a sol·licitar la moderació no serà visible.</entry>
+  <entry key="881">Permissos</entry>
+  <entry key="882">Descarregar com AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Només audio</entry>
+  <entry key="887">Hi ha hagut errors mentre es processava gravació.</entry>
+  <entry key="888">La gravació encara no aquesta llista. Intenti'l de nou en un parell de minuts.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Missatge del grabador:</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">El applet SIP no està llest</entry>
+  <entry key="893">Configuració del compte SIP</entry>
+  <entry key="894">Configuración SIP para cada usuario. Puede activar o desactivar SIP desde Administración &gt; Configuración (Key: enable_sip). Los datos SIP de cada usuario deberían crearse automáticamente.</entry>
+  <entry key="895">Usuari SIP</entry>
+  <entry key="896">Contrasenya SIP</entry>
+  <entry key="897">ID Aut-SIP</entry>
+  <entry key="898">L'autenticació SIP ha fallat. Hauria de comprovar les dades d'autenticació del seu proveïdor SIP i del compte SIP de cada usuari. Com administrador, podrà autenticar-se i comprovar la configuració. Si entra com usuari o com moderador, qualsevol intent d'interacció serà bloquejat.</entry>
+  <entry key="899">L'autenticació SIP ha fallat. Contacti amb el servei tècnic.</entry>
+  <entry key="900">Autenticant en la porta d'enllaç SIP...</entry>
+  <entry key="901">Autenticant en la porta d'enllaç SIP...</entry>
+  <entry key="902">Mostrar Log</entry>
+  <entry key="903">Missatges Log del procés de postgravación</entry>
+  <entry key="904">Missatge de applet SIP</entry>
+  <entry key="905">El applet SIP no està llest. Per favor, accepti el applet i premi OK.</entry>
+  <entry key="906">Sol·licitar la moderació</entry>
+  <entry key="907">Guardar canvis de la cita</entry>
+  <entry key="908">La cita ha estat canviada. Desitja guardar aquests canvis? Tots els participants implicats rebran un correu amb la data i hora actualitzades (depenent del tipus de notificació d'aquesta cita).</entry>
+  <entry key="909">Per accedir a les gravacions que tingui per entrar en l'aplicació {0}.</entry>
+  <entry key="910">Seleccioneu l'usuari d'aquest vídeo</entry>
+  <entry key="911">Usuaris disponibles per aquesta POD</entry>
+  <entry key="912">Vostè és un moderador en aquesta entrevista. Pots decidir qui parla en aquesta entrevista i vostè pot començar / aturar la gravació de la sessió.</entry>
+  <entry key="913">Començar la gravació</entry>
+  <entry key="914">Aturar la gravació</entry>
+  <entry key="915">La gravació de l'entrevista ja ha començat.</entry>
+  <entry key="916">La gravació s'ha aturat o no han iniciat encara.</entry>
+  <entry key="917">La gravació d'aquesta entrevista ja s'ha iniciat!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_cs.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
new file mode 100644
index 0000000..4fa0716
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_cs.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Konference</entry>
+  <entry key="2">Schůzka</entry>
+  <entry key="3">Posluchárna</entry>
+  <entry key="4">Nastavení</entry>
+  <entry key="5">Profil</entry>
+  <entry key="6">Administrace</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Záznam</entry>
+  <entry key="9">Žádný soubor není dostupný</entry>
+  <entry key="10">Záznam učitele</entry>
+  <entry key="11">Připojení uživatelé:</entry>
+  <entry key="12">Start konference</entry>
+  <entry key="13">Mé jméno</entry>
+  <entry key="14">VideoKonference</entry>
+  <entry key="15">Nahrej soubor</entry>
+  <entry key="16">Aktualizuj</entry>
+  <entry key="17">Můj soubor</entry>
+  <entry key="18">Nová anketa</entry>
+  <entry key="19">Nová anketa pro konferenci.</entry>
+  <entry key="20">Otázka:</entry>
+  <entry key="21">Typ ankety:</entry>
+  <entry key="22">Vytvoř</entry>
+  <entry key="23">Info: Všichni připojení uživatelé obdrželi zprávu o nové anketě.</entry>
+  <entry key="24">Vytvoř anketu</entry>
+  <entry key="25">Zrušit</entry>
+  <entry key="26">Ano/Ne</entry>
+  <entry key="27">Čísla 1-10</entry>
+  <entry key="28">Anketa</entry>
+  <entry key="29">Pro vytvoření otázky musíte být moderátor</entry>
+  <entry key="30">Vaše hlasování bylo uloženo.</entry>
+  <entry key="31">V této anketě jste již hlasoval.</entry>
+  <entry key="32">Hlasuj !</entry>
+  <entry key="33">Vaše otpověď:</entry>
+  <entry key="34">Ano</entry>
+  <entry key="35">Ne</entry>
+  <entry key="36">will wissen:</entry>
+  <entry key="37">Výsledek ankety</entry>
+  <entry key="38">Otázka:</entry>
+  <entry key="39">Výsledek:</entry>
+  <entry key="40">Odpověď:</entry>
+  <entry key="41">Nejsou dostupné žádné ankety.</entry>
+  <entry key="42">Hlasuj!</entry>
+  <entry key="43">Schůzka (max 4 sedění)</entry>
+  <entry key="44">Konference (max 50 sedění)</entry>
+  <entry key="45">Typ</entry>
+  <entry key="46">Jiné sedění</entry>
+  <entry key="47">Vybráno</entry>
+  <entry key="48">vstup</entry>
+  <entry key="49">Moderátor opustil schůzku.</entry>
+  <entry key="50">Systémové informace</entry>
+  <entry key="51">Vyber zařízení</entry>
+  <entry key="52">Vyber webcam:</entry>
+  <entry key="53">Vyber mikrofon:</entry>
+  <entry key="54">ok</entry>
+  <entry key="55">zruš</entry>
+  <entry key="56">Musíte se znovu připojit.</entry>
+  <entry key="57">Uprav nastavení.</entry>
+  <entry key="58">Cesta:</entry>
+  <entry key="59">Jazyk:</entry>
+  <entry key="60">ok</entry>
+  <entry key="61">zruš</entry>
+  <entry key="62">Smaž tabuli</entry>
+  <entry key="63">Chcete aby tabule byla prázdná před přidáním nového obrázku?</entry>
+  <entry key="64">Žádné další dotazy</entry>
+  <entry key="65">ne</entry>
+  <entry key="66">Uprav nastavení</entry>
+  <entry key="67">Potvrzovací dotaz před smazáním tabule.</entry>
+  <entry key="68">Informace o uživateli</entry>
+  <entry key="69">Smaž kreslící oblast</entry>
+  <entry key="70">Krok zpět</entry>
+  <entry key="71">Krok vpřed</entry>
+  <entry key="72">Vyber Objekt</entry>
+  <entry key="73">Text</entry>
+  <entry key="74">Kreslení</entry>
+  <entry key="75">Kresli čáru</entry>
+  <entry key="76">Kresli podtržení</entry>
+  <entry key="77">čtyřúhelník</entry>
+  <entry key="78">Elipsa</entry>
+  <entry key="79">Šipka</entry>
+  <entry key="80">smaž vybranou položku</entry>
+  <entry key="81">Použít pro moderování</entry>
+  <entry key="82">použij</entry>
+  <entry key="83">zruš</entry>
+  <entry key="84">Stát se moderátorem</entry>
+  <entry key="85">zavřít</entry>
+  <entry key="86">italic</entry>
+  <entry key="87">tlustě</entry>
+  <entry key="88">ČEKÁM</entry>
+  <entry key="89">Uživatel chce použít pro moderování:</entry>
+  <entry key="90">akceptuj</entry>
+  <entry key="91">odmítni</entry>
+  <entry key="92">zruš</entry>
+  <entry key="93">Odeslat dotaz následujícím uživatelům</entry>
+  <entry key="94">Akceptováno</entry>
+  <entry key="95">Odmítnuto</entry>
+  <entry key="96">Změna moderátora</entry>
+  <entry key="97">Nemůžete moderovat tento kurz!</entry>
+  <entry key="98">Moderator:</entry>
+  <entry key="99">Místnost je plná. Omlováme se příjďte jindy.</entry>
+  <entry key="100">Elipsa</entry>
+  <entry key="101">zavři</entry>
+  <entry key="102">chyba vstupních dat</entry>
+  <entry key="103">4 nebo více znaků; záleží na velkých písmenkách!</entry>
+  <entry key="104">heslo musí mít minimálně 4 znaky</entry>
+  <entry key="105">Uživatel již existuje</entry>
+  <entry key="106">Email je již registrován</entry>
+  <entry key="107">Systémová chyba, kontaktujte správce sítě!</entry>
+  <entry key="108">Přihlášení</entry>
+  <entry key="109">Uživatel:</entry>
+  <entry key="110">Heslo:</entry>
+  <entry key="111">Jazyk</entry>
+  <entry key="112">Přihlásit</entry>
+  <entry key="113">Registrace:</entry>
+  <entry key="114">Uživatel:</entry>
+  <entry key="115">Heslo:</entry>
+  <entry key="116">Znovu:</entry>
+  <entry key="117">Jméno:</entry>
+  <entry key="118">Příjmení:</entry>
+  <entry key="119">Mail:</entry>
+  <entry key="120">Země:</entry>
+  <entry key="121">Registrace</entry>
+  <entry key="122">Zruš</entry>
+  <entry key="123">Nejsi členem?</entry>
+  <entry key="124">Domů</entry>
+  <entry key="125">Uživatelé</entry>
+  <entry key="126">Skupiny</entry>
+  <entry key="127">Organizace</entry>
+  <entry key="128">Jednací místnost</entry>
+  <entry key="129">veřejné</entry>
+  <entry key="130">Organizace</entry>
+  <entry key="131">vstup</entry>
+  <entry key="132">Uživatelské jméno</entry>
+  <entry key="133">Heslo</entry>
+  <entry key="134">Znovu</entry>
+  <entry key="135">Jméno</entry>
+  <entry key="136">Příjmení</entry>
+  <entry key="137">Mail</entry>
+  <entry key="138">Datum narození</entry>
+  <entry key="139">Ulice</entry>
+  <entry key="140">PSČ/Město</entry>
+  <entry key="141">Stát</entry>
+  <entry key="142">Info o adrese</entry>
+  <entry key="143">Uživatelská data</entry>
+  <entry key="144">ulož</entry>
+  <entry key="145">Ulož</entry>
+  <entry key="146">USER-ID</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">Jméno</entry>
+  <entry key="149">Příjmení</entry>
+  <entry key="150">ukaž další</entry>
+  <entry key="151">ukaž předchozí</entry>
+  <entry key="152">smaž záznam</entry>
+  <entry key="153">zruš</entry>
+  <entry key="154">smaž</entry>
+  <entry key="155">nový záznam</entry>
+  <entry key="156">aktualizuj záznam</entry>
+  <entry key="157">smaž záznam</entry>
+  <entry key="158">stav</entry>
+  <entry key="159">zakázáno</entry>
+  <entry key="160">povoleno</entry>
+  <entry key="161">Organizace</entry>
+  <entry key="162">kalendář</entry>
+  <entry key="163">zavři</entry>
+  <entry key="164">ID organizace</entry>
+  <entry key="165">Název</entry>
+  <entry key="166">Uživatel</entry>
+  <entry key="167">Moderator</entry>
+  <entry key="168">Admin</entry>
+  <entry key="169">uživatelská úroveň</entry>
+  <entry key="170">Organizace</entry>
+  <entry key="171">název</entry>
+  <entry key="172">přidej organizaci</entry>
+  <entry key="173">přidej organizaci</entry>
+  <entry key="174">zruš</entry>
+  <entry key="175">přidej</entry>
+  <entry key="176">zruš organizaci</entry>
+  <entry key="177">uživatel</entry>
+  <entry key="178">přidej uživatele</entry>
+  <entry key="179">zruš uživatele</entry>
+  <entry key="180">přidej uživatele</entry>
+  <entry key="181">hledej uživatele</entry>
+  <entry key="182">hledej</entry>
+  <entry key="183">uživatel</entry>
+  <entry key="184">Organizace</entry>
+  <entry key="185">vstup</entry>
+  <entry key="186">Konferenční místnost</entry>
+  <entry key="187">Konferenční místnost</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Jméno</entry>
+  <entry key="190">veřejné</entry>
+  <entry key="191">Organizace</entry>
+  <entry key="192">Zasedací místnost</entry>
+  <entry key="193">Název</entry>
+  <entry key="194">Typ</entry>
+  <entry key="195">Veřejné</entry>
+  <entry key="196">Komentář</entry>
+  <entry key="197">ulož a exportuj</entry>
+  <entry key="198">nahrej</entry>
+  <entry key="199">ulož jako</entry>
+  <entry key="200">Název souboru</entry>
+  <entry key="201">název souboru</entry>
+  <entry key="202">zruš</entry>
+  <entry key="203">ulož</entry>
+  <entry key="204">Chyba</entry>
+  <entry key="205">nahrávám</entry>
+  <entry key="206">objekt nahrán</entry>
+  <entry key="207">synchronizace klientů; čekající klienti:</entry>
+  <entry key="208">Nahrávám obrázek</entry>
+  <entry key="209">synchronizace klientů; čekající klienti:</entry>
+  <entry key="210">smaž kreslící oblast</entry>
+  <entry key="211">smaž kreslící oblast, všechna data z tabule budou ztracena</entry>
+  <entry key="212">Potvrzení před nahrátím souboru</entry>
+  <entry key="213">Zaslat pozvání</entry>
+  <entry key="214">Zaslat pozvání</entry>
+  <entry key="215">Předmět</entry>
+  <entry key="216">Příjemce</entry>
+  <entry key="217">Zpráva</entry>
+  <entry key="218">Odeslat</entry>
+  <entry key="219">zruš</entry>
+  <entry key="220">odeslat</entry>
+  <entry key="221">Uživatelská data</entry>
+  <entry key="222">Vaše přezdívka v této konferenci</entry>
+  <entry key="223">Přezdívka</entry>
+  <entry key="224">Jméno</entry>
+  <entry key="225">Příjmení</entry>
+  <entry key="226">Email</entry>
+  <entry key="227">Jazyk</entry>
+  <entry key="228">vstup</entry>
+  <entry key="229">Nahrávám</entry>
+  <entry key="230">Data se nahrávají, čekejte prosím</entry>
+  <entry key="231">Špatné heslo</entry>
+  <entry key="232">Zadejte prosím stejné heslo minimálně se 6 znaky</entry>
+  <entry key="233">Špatný mail</entry>
+  <entry key="234">Zadali jste špatnou emailovou adresu</entry>
+  <entry key="235">Registrace je kompletní</entry>
+  <entry key="236">Váš uživatelský účet byl vytvořen. Můžete se přihlásit.</entry>
+  <entry key="237">Nyní nemůžete sdílet obrazovku. Někdo jiný již sdílí svou obrazovku.</entry>
+  <entry key="238">Sdílení zakázáno</entry>
+  <entry key="239">Sdílej svou obrazovku</entry>
+  <entry key="240">Špatná šířka pásma: Nemůžete synchronizovat svou obrazovku. Snímek byl zahozen. Pokud se toto varování objeví, domluvte se s moderátorem na snížení kvality přenosu obrazovky.</entry>
+  <entry key="241">Obrazovka vypnuta:</entry>
+  <entry key="242">Kreslení</entry>
+  <entry key="243">Dokument</entry>
+  <entry key="244">Pokec</entry>
+  <entry key="245">Soubory</entry>
+  <entry key="246">Členové</entry>
+  <entry key="247">Nahrej originální dokument</entry>
+  <entry key="248">Nahrej PDF dokument</entry>
+  <entry key="249">Nahrej prezentaci na tabuli</entry>
+  <entry key="250">Konfigurace</entry>
+  <entry key="251">Přesun objektu</entry>
+  <entry key="252">Změna velikosti objektu</entry>
+  <entry key="253">%</entry>
+  <entry key="254">z</entry>
+  <entry key="255">První strana</entry>
+  <entry key="256">Předchozí strana</entry>
+  <entry key="257">Další strana</entry>
+  <entry key="258">Poslední strana</entry>
+  <entry key="259">Zmenši --</entry>
+  <entry key="260">Zvětši ++</entry>
+  <entry key="261">Pan</entry>
+  <entry key="262">Paní/slečna</entry>
+  <entry key="263">Konfigurace</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Klíč</entry>
+  <entry key="266">Konfigurace</entry>
+  <entry key="267">Klíč</entry>
+  <entry key="268">poslední aktualizace</entry>
+  <entry key="269">aktualizoval</entry>
+  <entry key="270">komentář</entry>
+  <entry key="271">Hodnota</entry>
+  <entry key="272">z</entry>
+  <entry key="273">Uživatelé</entry>
+  <entry key="274">smaž uživatele z organizace</entry>
+  <entry key="275">smaž</entry>
+  <entry key="276">Tentu uživatel již je členem organizace.</entry>
+  <entry key="277">Zprávy</entry>
+  <entry key="278">Rychlá navigace</entry>
+  <entry key="279">Schůzky</entry>
+  <entry key="280">Posluchárna</entry>
+  <entry key="281">Nápověda a podpora</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Nahlášení chyb!</entry>
+  <entry key="285">více</entry>
+  <entry key="286">Stránky projektu</entry>
+  <entry key="287">Archiv uživatelské korespondence</entry>
+  <entry key="288">Zapamatuj si přihlášení</entry>
+  <entry key="289">Obsah</entry>
+  <entry key="290">Má domovská stránka</entry>
+  <entry key="291">Mé plánované schůzky</entry>
+  <entry key="292">Mé plánované přednášky</entry>
+  <entry key="293">Veřejné schůzky</entry>
+  <entry key="294">Soukromé schůzky</entry>
+  <entry key="295">Veřejné přednáška</entry>
+  <entry key="296">Soukromé přednáška</entry>
+  <entry key="297">Veřejný obsah</entry>
+  <entry key="298">Soukromý obsah</entry>
+  <entry key="299">Uživatelský obsah</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderace</entry>
+  <entry key="302">Požadavek na moderaci</entry>
+  <entry key="303">Ankety</entry>
+  <entry key="304">Vyber soubor</entry>
+  <entry key="305">Nastavení</entry>
+  <entry key="306">Nastavení kamery a mikrofonu</entry>
+  <entry key="307">Nastavení tabule</entry>
+  <entry key="308">Odchod</entry>
+  <entry key="309">Zpět do výběru místností</entry>
+  <entry key="310">Odhlásit</entry>
+  <entry key="311">Zapměli jste heslo?</entry>
+  <entry key="312">Reset hesla</entry>
+  <entry key="313">Mailem</entry>
+  <entry key="314">Přihlášením</entry>
+  <entry key="315">Váš email</entry>
+  <entry key="316">Vaše uživatelské jméno</entry>
+  <entry key="317">Odeslán mail s odkazem na reset hesla</entry>
+  <entry key="318">Emailová adresa nenalezena. Použíjte stejnou adresu jako při zakládání uživatelského účtu.</entry>
+  <entry key="319">Zadejte prosím mail, nebo uživatelské jméno</entry>
+  <entry key="320">Takový uživatelský účet neexistuje</entry>
+  <entry key="321">Email obsahuje speciální odkaz, skontrolujte Vaši schránku. Pokud jste mail neobdrželi, skontrolujte nastavení antispamového filtru a pošlete mail znovu.</entry>
+  <entry key="322">Chyba</entry>
+  <entry key="323">Zpráva</entry>
+  <entry key="324">Špatný Hash. Uživatel nenalezen.</entry>
+  <entry key="325">Reset Vašeho hesla</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">změna hesla</entry>
+  <entry key="328">nové heslo</entry>
+  <entry key="329">znovu heslo</entry>
+  <entry key="330">Hesla nejsou stejná.</entry>
+  <entry key="331">4 nebo více znaků; záleží na velikosti písmen!</entry>
+  <entry key="332">Heslo nastaveno. Můžete se přihlásit.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Neznámá chyba. Nahlaste ji servisnímu týmu.</entry>
+  <entry key="335">Uživatelský účet nenalezen</entry>
+  <entry key="336">Špatné heslo</entry>
+  <entry key="337">Byli jste vpořádku odhlášeni</entry>
+  <entry key="338">Registrace uživatelů zakázána.</entry>
+  <entry key="339">Špatný mail</entry>
+  <entry key="340">soubor již existuje, vyberte jiný název souboru</entry>
+  <entry key="341">název souboru je krátký</entry>
+  <entry key="342">Nemohu uložit adresu</entry>
+  <entry key="343">Uživatel přidán, ale musíte jej přiřadit k organizaci, jinak se nebude moci přihlásit.</entry>
+  <entry key="344">Nový záznam</entry>
+  <entry key="345">Pole nenalezeno v FieldId.</entry>
+  <entry key="346">Pro toto pole nexistuje název.</entry>
+  <entry key="347">Vyžadovány práva administrátora</entry>
+  <entry key="348">Lokalizace</entry>
+  <entry key="349">Jazyk</entry>
+  <entry key="350">ID pole</entry>
+  <entry key="351">Název pole</entry>
+  <entry key="352">Hodnota</entry>
+  <entry key="353">Hodnoty pole</entry>
+  <entry key="354">Název pole</entry>
+  <entry key="355">Hodnota pole</entry>
+  <entry key="356">ID pole</entry>
+  <entry key="357">Smazali jste pouze název pole, ne pole! Nemůžete smazat pole, používá se v ostatních jazycích.</entry>
+  <entry key="358">Špatné ID pole. ID pole nenalezeno v databázi.</entry>
+  <entry key="359">Nemůžete smazat toto pole. Můžete smazat pouze názvy polí. Není nahrán žádný název pole, protože jste nevybrali žádné pole, nebo není pro toto pole název definován.</entry>
+  <entry key="360">export</entry>
+  <entry key="361">Odhlaste se a pak uvidíte změny.</entry>
+  <entry key="362">Přidej nový jazyk</entry>
+  <entry key="363">smaž jazyk</entry>
+  <entry key="364">Přidej nový jazyk</entry>
+  <entry key="365">Název</entry>
+  <entry key="366">přidej jazyk</entry>
+  <entry key="367">Záloha</entry>
+  <entry key="368">jdi na první</entry>
+  <entry key="369">jdi na předchozí</entry>
+  <entry key="370">jdi na další</entry>
+  <entry key="371">jdi na poslední</entry>
+  <entry key="372">uživatel mluví (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">Vpnout/Zapnout zvuk</entry>
+  <entry key="374">Systém</entry>
+  <entry key="375">Vaše nastavení</entry>
+  <entry key="376">Dobrý den,</entry>
+  <entry key="377">Uprav svůj profil</entry>
+  <entry key="378">Nové zprávy:</entry>
+  <entry key="379">Nahrej nový obrázek</entry>
+  <entry key="380">Export uživatelských dat</entry>
+  <entry key="381">AVšechny organizace musí existovat!</entry>
+  <entry key="382">start export</entry>
+  <entry key="383">Dle organizace</entry>
+  <entry key="384">start export</entry>
+  <entry key="385">Import uživatelských dat</entry>
+  <entry key="386">vyber uživatel.xml</entry>
+  <entry key="387">import</entry>
+  <entry key="388">Export do XML - Tento soubor může být použit pro: - Přispění k projektu - Import do jiného systému - Zálohu - Úpravy - Vložení do adresáře jazyků a použití pro další instalaci</entry>
+  <entry key="389">Vyberte soubor s překladem k importu.Vyberte správný jazyk ve výběru! Nezáleží na názvu souboru!</entry>
+  <entry key="390">import - vyber soubor</entry>
+  <entry key="391">Ulož jako</entry>
+  <entry key="392">Název:</entry>
+  <entry key="393">Popis:</entry>
+  <entry key="394">ulož</entry>
+  <entry key="395">Záznamy</entry>
+  <entry key="396">Prohlížeč záznamů</entry>
+  <entry key="397">Záznamy z veřejných a soukromých místností</entry>
+  <entry key="398">Uživatelé:</entry>
+  <entry key="399">Joined:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Uživatelé v této místnosti:</entry>
+  <entry key="402">aktualizuj</entry>
+  <entry key="403">Místnost je plná. Zkuste to za pár minut.</entry>
+  <entry key="404">Pro získání detalů klikněte na místnost</entry>
+  <entry key="405">Pokec uživatelů v této místnosti:</entry>
+  <entry key="406">Mistnost:</entry>
+  <entry key="407">Uživatelé v této místnosti:</entry>
+  <entry key="408">od:</entry>
+  <entry key="409">přehrej záznam</entry>
+  <entry key="410">Délka:</entry>
+  <entry key="411">Datum:</entry>
+  <entry key="412">Mód záznamu! Nemůžete měnit žádné hodnoty, toto je pouze záznam!</entry>
+  <entry key="413">Přehrej záznam</entry>
+  <entry key="414">Přehrej / Pozastav</entry>
+  <entry key="415">Začátek záznamu</entry>
+  <entry key="416">konec záznamu</entry>
+  <entry key="417">Záznam:</entry>
+  <entry key="418">Zde jsou dostupné záznamy:</entry>
+  <entry key="419">Zaznamenáno! Uživatelem:</entry>
+  <entry key="420">zruš</entry>
+  <entry key="421">Záznam byl ukončen a neuložen.</entry>
+  <entry key="422">opakovat</entry>
+  <entry key="423">Zavřete toto okno a zopakujte nahrávání</entry>
+  <entry key="424">změna barvy čáry</entry>
+  <entry key="425">Vyber barvu</entry>
+  <entry key="426">Zakaž / Povol změnu barvy čáry</entry>
+  <entry key="427">změň barvu výplně</entry>
+  <entry key="428">Zakaž / Povol změnu barvy výplně</entry>
+  <entry key="429">Změň tloušťku čáry</entry>
+  <entry key="430">zavři</entry>
+  <entry key="431">změň velikost písma</entry>
+  <entry key="432">Smaž nahrávku</entry>
+  <entry key="433">Host</entry>
+  <entry key="434">Zaznamenal:</entry>
+  <entry key="435">Název</entry>
+  <entry key="436">Místnost</entry>
+  <entry key="437">Datum</entry>
+  <entry key="438">zruš</entry>
+  <entry key="439">start</entry>
+  <entry key="440">Název</entry>
+  <entry key="441">Datum</entry>
+  <entry key="442">Smaž záznam pokecu na serveru</entry>
+  <entry key="443">Pokec</entry>
+  <entry key="444">zaslat zprávu</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Vyber zveřejněné zařízení</entry>
+  <entry key="448">Zvuk a obraz</entry>
+  <entry key="449">Pouze zvuk</entry>
+  <entry key="450">Pouze obraz</entry>
+  <entry key="451">Bez zvuku a obrazu (statický obrázek)</entry>
+  <entry key="452">Zvuk a Obraz z Vašeho PC není zveřejněno, bude zobrazen pouze obrázek z Vašeho profilu.Pokud máte problémy zkontrolujte Vaše nastavení, nebo máte velmi pomalé připojení k internetu.</entry>
+  <entry key="453">Po</entry>
+  <entry key="454">Út</entry>
+  <entry key="455">St</entry>
+  <entry key="456">Čt</entry>
+  <entry key="457">Pá</entry>
+  <entry key="458">So</entry>
+  <entry key="459">Ne</entry>
+  <entry key="460">Pondělí</entry>
+  <entry key="461">Úterý</entry>
+  <entry key="462">Středa</entry>
+  <entry key="463">Čtvrtek</entry>
+  <entry key="464">Pátek</entry>
+  <entry key="465">Sobota</entry>
+  <entry key="466">Neděle</entry>
+  <entry key="467">Týden</entry>
+  <entry key="468">Týdenní kalendář</entry>
+  <entry key="469">Leden</entry>
+  <entry key="470">Únor</entry>
+  <entry key="471">Březen</entry>
+  <entry key="472">Duben</entry>
+  <entry key="473">Květen</entry>
+  <entry key="474">Červen</entry>
+  <entry key="475">Červenec</entry>
+  <entry key="476">Srpen</entry>
+  <entry key="477">Září</entry>
+  <entry key="478">Říjen</entry>
+  <entry key="479">Listopad</entry>
+  <entry key="480">Prosinec</entry>
+  <entry key="481">Kalendář</entry>
+  <entry key="482">Účastníci</entry>
+  <entry key="483">Ukaž nastavení zobrazení</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Šířka | Výška</entry>
+  <entry key="486">Video-okno</entry>
+  <entry key="487">Moderation-okno</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Tabule-okno</entry>
+  <entry key="490">Povoleno</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Šířka | Výška</entry>
+  <entry key="493">Soubory,Pokec,Účastníci - okno</entry>
+  <entry key="494">Povoleno</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Šířka | Výška</entry>
+  <entry key="497">Moderátor opustil místnost. Není v tento moment přítomen. Můžete se stát moderátorem, nebo čekat.</entry>
+  <entry key="498">V této místnosti není moderátor, ale jsou zde účastníci. Můžete se stát moderátorem, nebo čekat.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Pozvánka</entry>
+  <entry key="501">Zpráva od uživatele:</entry>
+  <entry key="502">Zpráva:</entry>
+  <entry key="503">Klikněte sem a podílejte se na konferenci:</entry>
+  <entry key="504">Klikněte sem pro vstup do místnosti</entry>
+  <entry key="505">pokud máte problém s tímto odkazem, nakopírujte jej a vložte do prohlížeče:</entry>
+  <entry key="506">{0} Registrace</entry>
+  <entry key="507">Vaše uživatelská data:</entry>
+  <entry key="508">Uživatelské jméno:</entry>
+  <entry key="509">Heslo:</entry>
+  <entry key="510">EMail:</entry>
+  <entry key="511">{0}-Tým</entry>
+  <entry key="512">{0} Registrace</entry>
+  <entry key="513">{0} - Reset hesla</entry>
+  <entry key="514">Klikněte na tento odkaz a zadejte nové heslo:</entry>
+  <entry key="515">Klkněte sem a zadejte nové heslo</entry>
+  <entry key="516">pokud máte problém s tímto odkazem, nakopírujte jej a vložte do prohlížeče:</entry>
+  <entry key="517">{0} heslo resetováno</entry>
+  <entry key="518">Zadejte správné datum, například 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">Zadejte správný email, například name@mail.com</entry>
+  <entry key="520">Zadejte desitinné číslo, například 1.00</entry>
+  <entry key="521">Zadejte celé číslo, například 100</entry>
+  <entry key="522">Zadejte správné tel. číslo, například +49 0123 123123</entry>
+  <entry key="523">Zadejte správný čas, například 12:23 (hh:mm)</entry>
+  <entry key="524">Heslo zabezpečeno</entry>
+  <entry key="525">Heslo</entry>
+  <entry key="526">Platnost opakování</entry>
+  <entry key="527">Nekonečně</entry>
+  <entry key="528">Opakovaně</entry>
+  <entry key="529">Jen jednou</entry>
+  <entry key="530">Platí od:</entry>
+  <entry key="531">Platí do:</entry>
+  <entry key="532">Pozvánka do {0}</entry>
+  <entry key="533">Pro tento kód pozvánky není žádná pozvánka dostupná</entry>
+  <entry key="534">Pozvánka byla použita. Tento typ pozvánky nemůže být znovu použit.</entry>
+  <entry key="535">Tento kód pozvánky je špatný.</entry>
+  <entry key="536">Heslo:</entry>
+  <entry key="537">Zkontrolujte heslo</entry>
+  <entry key="538">Špatné heslo!</entry>
+  <entry key="539">Zvuk_Obraz</entry>
+  <entry key="540">Synchronizuji Zvuk/Obraz</entry>
+  <entry key="541">Už. účet v pořádku, ale připojení není aktivní, nebo registrované na serveru. Musíte se znovu přihlásit.</entry>
+  <entry key="542">Sezení není přihlášeno, nebo nemáte administrátorská práva. SOAP brána vyžaduje práva administrátora pro založení uživatele.</entry>
+  <entry key="543">Sezení nemá spojení na vzdálené uživatelské data. Nemůžete přistupovat k SOAP bráně před vstupem do aplikace, nebo používáte špatné ID sezení</entry>
+  <entry key="544">Záznamy jsou pouze beta verze!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">osa x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">osa y</entry>
+  <entry key="549">š</entry>
+  <entry key="550">šířka</entry>
+  <entry key="551">v</entry>
+  <entry key="552">výška</entry>
+  <entry key="553">Změna průhlednosti</entry>
+  <entry key="554">Průzkumník otevřen</entry>
+  <entry key="555">Průzkumník uzavřen</entry>
+  <entry key="556">Spojení se serverem bylo přerušeno. Musíte znovunahrát aplikaci (zkontrolujte Vaši síť).</entry>
+  <entry key="557">Ukazovátko</entry>
+  <entry key="558">Synchronizuji</entry>
+  <entry key="559">Synchronizuji uživatele, čekejte prosím</entry>
+  <entry key="560">&lt;u&gt;Načti jako SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Načti jako PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Načti jako JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Načti jako PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Načti jako TIF&lt;/u&gt;</entry>
+  <entry key="565">Připomínka:</entry>
+  <entry key="566">Kategorie:</entry>
+  <entry key="567">Opakování:</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Umístění:</entry>
+  <entry key="570">Začátek</entry>
+  <entry key="571">Konec</entry>
+  <entry key="572">Titul:</entry>
+  <entry key="573">Komentář:</entry>
+  <entry key="574">Invite People</entry>
+  <entry key="575">Denně</entry>
+  <entry key="576">Měsíčně</entry>
+  <entry key="577">Ročně</entry>
+  <entry key="578">Schůzka končí pouze pokud schůzka začala!</entry>
+  <entry key="579">Zadejte prosím nadpis!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Aktivujte pouze pokud píšete z prava do leva</entry>
+  <entry key="582">Rychlá navigace</entry>
+  <entry key="583">Záznamy z konferencí</entry>
+  <entry key="584">Schůzka - Vytvořte konference se 4 (max 16) účastníky&lt;br/&gt;všichni mohou používat zvuk a obraz</entry>
+  <entry key="585">Přednáška - Vytvořte konferenci až s 200 účastníky&lt;br/&gt;Pouze moderátor může používat zvuk a obraz</entry>
+  <entry key="586">Tvorba uživatelů, místností, organizací&lt;br/&gt; + změna konfigurace</entry>
+  <entry key="587">Uživatelé v této místnosti teď</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Nahrávám dokument. Poškejte prosím na synchronizaci všech uživatelů.</entry>
+  <entry key="592">Nahráno, konvertuji dokument ...</entry>
+  <entry key="593">Odešli</entry>
+  <entry key="594">Vyberte soubor z Vašeho disku.</entry>
+  <entry key="595">Zruš</entry>
+  <entry key="596">Vyber soubor</entry>
+  <entry key="597">Připojení</entry>
+  <entry key="598">Hodnota</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Připojeni poté</entry>
+  <entry key="602">Místnost / Možnosti</entry>
+  <entry key="603">Odpojit uživatele</entry>
+  <entry key="604">Odpojit uživatele</entry>
+  <entry key="605">Opravdu chcete odpojit uživatele?&lt;br/&gt; Toto pouze odpojí uživatele od dané místnosti. Uživatel se může opět přihlásit.</entry>
+  <entry key="606">Vaše sezení bylo ukončeno administrátorem, nebo moderátorem.</entry>
+  <entry key="607">Telefon</entry>
+  <entry key="608">Uživatel je moderátor této místnosti</entry>
+  <entry key="609">Uživatel má povoleno kreslit na tabuli</entry>
+  <entry key="610">(Re) Start Zvuk/Obraz, nebo změna nastavení zařízení</entry>
+  <entry key="611">Povolit tomuto uživateli kreslit na tabuli</entry>
+  <entry key="612">Odejmout možnost kreslení na tabuli</entry>
+  <entry key="613">Uživatelé</entry>
+  <entry key="614">Soubory</entry>
+  <entry key="615">Tabule</entry>
+  <entry key="616">Pokec</entry>
+  <entry key="617">Váš uživatelský účet je přiřazen do více organizací. Pro toto sezení vyberte jednu z nich.</entry>
+  <entry key="618">This room is full at the moment. Please try again later.</entry>
+  <entry key="619">Room Type</entry>
+  <entry key="620">Appointment Room</entry>
+  <entry key="621">Server Time</entry>
+  <entry key="622">{0} - Reminder</entry>
+  <entry key="623">Message from User:</entry>
+  <entry key="624">Message:</entry>
+  <entry key="625">Click this link to participate in the Meetings:</entry>
+  <entry key="626">Click here to enter room</entry>
+  <entry key="627">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="628">search intern</entry>
+  <entry key="629">extern users</entry>
+  <entry key="630">pre name</entry>
+  <entry key="631">name</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirm logout</entry>
+  <entry key="634">Are you sure you want to logout now?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Demo Room</entry>
+  <entry key="637">Demo Time</entry>
+  <entry key="638">Meeting Timer</entry>
+  <entry key="639">This Room is a Demo Room. To disable this warning you either should get a private meeting room for your personal usage or set up an own Server. You will be automatically logged off in:</entry>
+  <entry key="640">Moderated</entry>
+  <entry key="641">Please wait untill the Moderator has entered the Room. The Moderator can be either a Teacher, Admin or the creator of this Room.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Incoming Screen Sharing</entry>
+  <entry key="644">There is a new Screen Sharing incoming from the User:</entry>
+  <entry key="645">Start Sharing</entry>
+  <entry key="646">Add new Meeting</entry>
+  <entry key="647">Meeting Room</entry>
+  <entry key="648">Event Room</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderate Users</entry>
+  <entry key="651">Moderate Rooms</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Do you want to change this User to become a Moderator of that Organization?</entry>
+  <entry key="654">Please choose an Organization before you try to add a User to it!</entry>
+  <entry key="655">Organization - Moderator</entry>
+  <entry key="656">Do you really want to delete this User from the Organization?</entry>
+  <entry key="657">This User is Moderator</entry>
+  <entry key="658">This User is No-Moderator</entry>
+  <entry key="659">Do you want this User to be not a Moderator of this Organization?</entry>
+  <entry key="660">Add or delete Users or Rooms within your Organization</entry>
+  <entry key="661">Do you really want to delete this record?</entry>
+  <entry key="662">Do you really want to delete this user from your organization? You will only delete the connection between the user and your organization, to really delete the user itself you have to login into the Administration-Panel.</entry>
+  <entry key="663">You cannot delete your own User!</entry>
+  <entry key="664">This Method needs a Adminstration Account to be invoked!</entry>
+  <entry key="665">There was no Session associated with this ID.</entry>
+  <entry key="666">This is an Administrator or Moderator account. You can only edit this account through the Administration Panel.</entry>
+  <entry key="667">To complete your registration please click on the following link. Or copy the URL to your browser bar.</entry>
+  <entry key="668">Click to verify your E-Mail</entry>
+  <entry key="669">No user was found for this Hash.</entry>
+  <entry key="670">This user is already activated!</entry>
+  <entry key="671">You did successfully activate your account!</entry>
+  <entry key="672">Login Now</entry>
+  <entry key="673">Your account is not activated. First use the link in the Email you've received during registration.</entry>
+  <entry key="674">You successfully signed up. We've send an EMail with a verification Code to your Mail. Please check your Inbox.</entry>
+  <entry key="675">Remove Moderation Role from this User</entry>
+  <entry key="676">Grant Moderation Rights to this User</entry>
+  <entry key="677">User</entry>
+  <entry key="678">Access to whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Please choose any User on the List to grant him access to the Whiteboard, Moderation or Video.</entry>
+  <entry key="681">This User is already Moderator, so he has automatically the right to draw.</entry>
+  <entry key="682">This is you! You cannot remove the Moderation rights from yourself.</entry>
+  <entry key="683">Allow this User to Publish his Audio / Video</entry>
+  <entry key="684">Remove Audio/Video of this User</entry>
+  <entry key="685">I would like to get the moderation of this room</entry>
+  <entry key="686">I would like to draw on whiteboard</entry>
+  <entry key="687">I would like to share my Audio/Video</entry>
+  <entry key="688">You are moderator of this room</entry>
+  <entry key="689">You are allowed to draw on whiteboard</entry>
+  <entry key="690">You are allowed to share your Audio/Video</entry>
+  <entry key="691">Message to Moderator</entry>
+  <entry key="692">The User</entry>
+  <entry key="693">would like to get the Moderation. Use the status Icons next to the user in the List of Users to add or remove the Moderation.</entry>
+  <entry key="694">would like to draw on whiteboard. Use the status Icons next to the user in the List of Users to add or remove the right to draw anything on the whiteboard.</entry>
+  <entry key="695">would like to share his Audio/Video. Use the status Icons next to the user in the List of Users to add or remove the right to share Audio/Video for any User.</entry>
+  <entry key="696">You have to wait untill a Moderator enters the room.</entry>
+  <entry key="697">Cancel</entry>
+  <entry key="698">Save</entry>
+  <entry key="699">Day</entry>
+  <entry key="700">Month</entry>
+  <entry key="701">Year</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_da.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_da.properties.xml
new file mode 100644
index 0000000..a0bebb1
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_da.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Konference</entry>
+  <entry key="2">Møde</entry>
+  <entry key="3">Auditorium</entry>
+  <entry key="4">Indstillinger</entry>
+  <entry key="5">Profil</entry>
+  <entry key="6">Administration</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Optag</entry>
+  <entry key="9">Ingen fil tilgængelig</entry>
+  <entry key="10">Indspillet af lærer/instruktør</entry>
+  <entry key="11">Tilsluttede brugere:</entry>
+  <entry key="12">Start en konference</entry>
+  <entry key="13">Mit navn</entry>
+  <entry key="14">Videokonference</entry>
+  <entry key="15">Importer præsentation</entry>
+  <entry key="16">Opdater liste</entry>
+  <entry key="17">Til hovedfil</entry>
+  <entry key="18">Ny afstemning</entry>
+  <entry key="19">En ny afstemning før konferencen</entry>
+  <entry key="20">Spørgsmål:</entry>
+  <entry key="21">Afstemningstype:</entry>
+  <entry key="22">Opret</entry>
+  <entry key="23">INFO: Alle tilsluttede brugere får tilsendt en meddelelse med den nye afstemning.</entry>
+  <entry key="24">Opret afstemning</entry>
+  <entry key="25">Annuller</entry>
+  <entry key="26">Ja/Nej</entry>
+  <entry key="27">Numerisk 1-10</entry>
+  <entry key="28">Stem</entry>
+  <entry key="29">Du skal vare moderator for at kunne oprette en afstemning</entry>
+  <entry key="30">Din afstemning er accepteret</entry>
+  <entry key="31">Du har allerede stemt i denne afstemning.</entry>
+  <entry key="32">Stem!</entry>
+  <entry key="33">Dit svar:</entry>
+  <entry key="34">Ja</entry>
+  <entry key="35">Nej</entry>
+  <entry key="36">Vil vide:</entry>
+  <entry key="37">Afstemningsresultat</entry>
+  <entry key="38">Spørg:</entry>
+  <entry key="39">Resultat:</entry>
+  <entry key="40">Svar:</entry>
+  <entry key="41">Ingen nye afsteminger er startet.</entry>
+  <entry key="42">Stem!</entry>
+  <entry key="43">Møde (max 4 pladser)</entry>
+  <entry key="44">Konference (max 50 pladser)</entry>
+  <entry key="45">Type</entry>
+  <entry key="46">Andre pladser</entry>
+  <entry key="47">Allerede valgt</entry>
+  <entry key="48">Kom ind</entry>
+  <entry key="49">Moderatoren har forladt mødet.</entry>
+  <entry key="50">Systeminformation</entry>
+  <entry key="51">Vælg setup</entry>
+  <entry key="52">Vælg webcam:</entry>
+  <entry key="53">Vælg mikrofon:</entry>
+  <entry key="54">ok</entry>
+  <entry key="55">Afbryd</entry>
+  <entry key="56">Tilslut igen.</entry>
+  <entry key="57">Ændre setup.</entry>
+  <entry key="58">Kursus:</entry>
+  <entry key="59">Sprog:</entry>
+  <entry key="60">Ok</entry>
+  <entry key="61">Afbryd</entry>
+  <entry key="62">Rens skrivebordet</entry>
+  <entry key="63">Ønsker du at skrivebordet skal renses inden du uploader til et nyt billede?</entry>
+  <entry key="64">Spørg ikke igen</entry>
+  <entry key="65">Nej</entry>
+  <entry key="66">Ændre setup</entry>
+  <entry key="67">Spørg inden skrivebordet tømmes?.</entry>
+  <entry key="68">Brugerinfo</entry>
+  <entry key="69">Rens tegneområdet</entry>
+  <entry key="70">Fortryd</entry>
+  <entry key="71">Klar</entry>
+  <entry key="72">Vælg et objekt</entry>
+  <entry key="73">Tekst</entry>
+  <entry key="74">Mal/tegn</entry>
+  <entry key="75">Tegn linie</entry>
+  <entry key="76">Tegn understregning</entry>
+  <entry key="77">Rektangel</entry>
+  <entry key="78">Ellipse</entry>
+  <entry key="79">Pil</entry>
+  <entry key="80">Slet valgt objekt</entry>
+  <entry key="81">Læg til før moderation</entry>
+  <entry key="82">Læg til</entry>
+  <entry key="83">Afbryd</entry>
+  <entry key="84">Bliv moderator</entry>
+  <entry key="85">Luk</entry>
+  <entry key="86">italic</entry>
+  <entry key="87">fed</entry>
+  <entry key="88">VENTER</entry>
+  <entry key="89">En bruger venter på at blive moderator:</entry>
+  <entry key="90">Accepter</entry>
+  <entry key="91">Afvis</entry>
+  <entry key="92">Annuller</entry>
+  <entry key="93">Send spørgsmål til følgende brugere</entry>
+  <entry key="94">Accepteret</entry>
+  <entry key="95">Afvist</entry>
+  <entry key="96">Ændre moderator</entry>
+  <entry key="97">Du er ikke moderator på dette kursus!</entry>
+  <entry key="98">Moderator:</entry>
+  <entry key="99">Rummet er optaget. Prøv igen senere.</entry>
+  <entry key="100">Ellipse</entry>
+  <entry key="101">Luk</entry>
+  <entry key="102">Forkerte data angivet</entry>
+  <entry key="103">Brugernavnet skal indeholde mindst 4 tegn</entry>
+  <entry key="104">Adgangskoden skal indeholde mindst 4 tegn</entry>
+  <entry key="105">Brugernavnet anvendes i forvejen</entry>
+  <entry key="106">Emailadressen anvendes i forvejen</entry>
+  <entry key="107">Systemfejl, kontakt systemadministrator</entry>
+  <entry key="108">Login</entry>
+  <entry key="109">Brugernavn:</entry>
+  <entry key="110">Adgangskode:</entry>
+  <entry key="111">Sprog</entry>
+  <entry key="112">Login</entry>
+  <entry key="113">Registrering</entry>
+  <entry key="114">Brugernavn:</entry>
+  <entry key="115">Adgangskode:</entry>
+  <entry key="116">Adgangskode igen:</entry>
+  <entry key="117">Fornavn:</entry>
+  <entry key="118">Efternavn:</entry>
+  <entry key="119">Email:</entry>
+  <entry key="120">Land:</entry>
+  <entry key="121">Registrer</entry>
+  <entry key="122">Annuller</entry>
+  <entry key="123">Registrer</entry>
+  <entry key="124">Forside</entry>
+  <entry key="125">Brugere</entry>
+  <entry key="126">Grupper</entry>
+  <entry key="127">Organisationer</entry>
+  <entry key="128">Konferencerum</entry>
+  <entry key="129">Offentlig</entry>
+  <entry key="130">Organisation</entry>
+  <entry key="131">Log ind</entry>
+  <entry key="132">Login</entry>
+  <entry key="133">Adgangskode</entry>
+  <entry key="134">Adgangskode igen</entry>
+  <entry key="135">Fornavn</entry>
+  <entry key="136">Efternavn</entry>
+  <entry key="137">Email</entry>
+  <entry key="138">Fødselsdato</entry>
+  <entry key="139">Vej/nr</entry>
+  <entry key="140">Postnr./By</entry>
+  <entry key="141">Land</entry>
+  <entry key="142">Adresse-Info</entry>
+  <entry key="143">Brugerdata</entry>
+  <entry key="144">Gem</entry>
+  <entry key="145">Gem</entry>
+  <entry key="146">Bruger-ID</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">Fornavn</entry>
+  <entry key="149">Efternavn</entry>
+  <entry key="150">Vis næste</entry>
+  <entry key="151">Vis forrige</entry>
+  <entry key="152">Slet indhold</entry>
+  <entry key="153">Annuller</entry>
+  <entry key="154">Slet</entry>
+  <entry key="155">Nyt indhold</entry>
+  <entry key="156">Opdater indhold</entry>
+  <entry key="157">Slet indhold</entry>
+  <entry key="158">Status</entry>
+  <entry key="159">Ikke tilgængelig</entry>
+  <entry key="160">Tilgængelig</entry>
+  <entry key="161">Organisation</entry>
+  <entry key="162">Kalender</entry>
+  <entry key="163">Luk</entry>
+  <entry key="164">Organisation-ID</entry>
+  <entry key="165">Navn</entry>
+  <entry key="166">Bruger</entry>
+  <entry key="167">Moderator</entry>
+  <entry key="168">Admin</entry>
+  <entry key="169">Brugerniveau</entry>
+  <entry key="170">Organisation</entry>
+  <entry key="171">Navn</entry>
+  <entry key="172">Gem til organisation</entry>
+  <entry key="173">Gem til organisation</entry>
+  <entry key="174">Annuller</entry>
+  <entry key="175">Gem</entry>
+  <entry key="176">Fjern organisation</entry>
+  <entry key="177">Brugere</entry>
+  <entry key="178">Gem til brugere</entry>
+  <entry key="179">Slet brugere</entry>
+  <entry key="180">Gem til brugere</entry>
+  <entry key="181">Søg brugere</entry>
+  <entry key="182">søg</entry>
+  <entry key="183">Brugere</entry>
+  <entry key="184">Organisation</entry>
+  <entry key="185">Log ind</entry>
+  <entry key="186">Konferencerum</entry>
+  <entry key="187">Konferencerum</entry>
+  <entry key="188">Id</entry>
+  <entry key="189">Navn</entry>
+  <entry key="190">Offentlig</entry>
+  <entry key="191">Organisationer</entry>
+  <entry key="192">Konferencerum</entry>
+  <entry key="193">Navn</entry>
+  <entry key="194">Type</entry>
+  <entry key="195">Offentlig</entry>
+  <entry key="196">Kommentar</entry>
+  <entry key="197">Gem og eksport</entry>
+  <entry key="198">Upload</entry>
+  <entry key="199">Gem som</entry>
+  <entry key="200">Filnavn</entry>
+  <entry key="201">Filnavn</entry>
+  <entry key="202">Annuller</entry>
+  <entry key="203">Gem</entry>
+  <entry key="204">Fejl</entry>
+  <entry key="205">Gemmer</entry>
+  <entry key="206">Objekter indlæst</entry>
+  <entry key="207">Synkroniserer, vent:</entry>
+  <entry key="208">Indlæser billeddata</entry>
+  <entry key="209">Synkroniserer, vent:</entry>
+  <entry key="210">Rens tegneområde</entry>
+  <entry key="211">Rens tegneområde, alle data mistes</entry>
+  <entry key="212">Spørg inden indlæsning af fil</entry>
+  <entry key="213">Send invitation</entry>
+  <entry key="214">Send invitation</entry>
+  <entry key="215">Emne</entry>
+  <entry key="216">Modtagere</entry>
+  <entry key="217">Meddelelser</entry>
+  <entry key="218">Send</entry>
+  <entry key="219">Annuller</entry>
+  <entry key="220">Send</entry>
+  <entry key="221">Brugerdata</entry>
+  <entry key="222">Dit alias i denne konference</entry>
+  <entry key="223">Alias</entry>
+  <entry key="224">Fornavn</entry>
+  <entry key="225">Efternavn</entry>
+  <entry key="226">Email</entry>
+  <entry key="227">Sprog</entry>
+  <entry key="228">Log ind</entry>
+  <entry key="229">Indlæser</entry>
+  <entry key="230">Indlæser data, vent!</entry>
+  <entry key="231">Forkert adgangskode</entry>
+  <entry key="232">2 identiske adgangskoder med mindst 4 tegn, tak!</entry>
+  <entry key="233">Forkert emailadresse</entry>
+  <entry key="234">Du har angivet en forkert emailadresse</entry>
+  <entry key="235">Registrering er fuldført</entry>
+  <entry key="236">Din konto er oprettet. Du kan nu logge ind.</entry>
+  <entry key="237">Du kan ikke dele din skærm lige nu. En anden bruger funktionen lige nu.</entry>
+  <entry key="238">Deling forbudt</entry>
+  <entry key="239">Del din skærm</entry>
+  <entry key="240">Ringe båndbredde: Du kan ikke synkronisere din skærm. Frames bliver droppet. Hvis denne advarsel vises ofte kan du bede moderatoren om at sænke kvaliteten.</entry>
+  <entry key="241">Skærm af:</entry>
+  <entry key="242">Male/tegne</entry>
+  <entry key="243">Dokument</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Filer</entry>
+  <entry key="246">Medlemmer</entry>
+  <entry key="247">Download originalt dokument</entry>
+  <entry key="248">Download PDF-dokument</entry>
+  <entry key="249">Indlæs præsentationen til whiteboard</entry>
+  <entry key="250">Konfiguration</entry>
+  <entry key="251">Træk dette objekt</entry>
+  <entry key="252">Ændre størrelse på dette objekt</entry>
+  <entry key="253">%</entry>
+  <entry key="254">af</entry>
+  <entry key="255">Gå til første side</entry>
+  <entry key="256">Gå til foregående side</entry>
+  <entry key="257">Gå til næste side</entry>
+  <entry key="258">Gå til sidste side</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">Hr.</entry>
+  <entry key="262">Fr.</entry>
+  <entry key="263">Konfiguration</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Nøgle</entry>
+  <entry key="266">Konfiguration</entry>
+  <entry key="267">Nøgle</entry>
+  <entry key="268">sidste opdatering</entry>
+  <entry key="269">opdateret af</entry>
+  <entry key="270">kommentar</entry>
+  <entry key="271">nøgle</entry>
+  <entry key="272">af</entry>
+  <entry key="273">Brugere</entry>
+  <entry key="274">slet brugere fra organisationen</entry>
+  <entry key="275">slet</entry>
+  <entry key="276">Denne bruger er allerede medlem af organisationen.</entry>
+  <entry key="277">Nyheder</entry>
+  <entry key="278">Hurtige genveje</entry>
+  <entry key="279">Gå til Konference</entry>
+  <entry key="280">Gå til Auditorium</entry>
+  <entry key="281">Hjælp og support</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Anmeld bugs</entry>
+  <entry key="285">mere</entry>
+  <entry key="286">Projekt Webside (http://openmeetings.apache.org)</entry>
+  <entry key="287">Bruger mailliste (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Husk dit login</entry>
+  <entry key="289">Indhold</entry>
+  <entry key="290">Min forside</entry>
+  <entry key="291">Mine skemalagte møder</entry>
+  <entry key="292">Mine planlagte Auditorier</entry>
+  <entry key="293">Offentlige møder</entry>
+  <entry key="294">Private møder</entry>
+  <entry key="295">Offentlige Auditorier</entry>
+  <entry key="296">Private Auditorier</entry>
+  <entry key="297">Offentligt indhold</entry>
+  <entry key="298">Privat indhold</entry>
+  <entry key="299">Personligt indhold</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderering</entry>
+  <entry key="302">Anmod om moderering</entry>
+  <entry key="303">Afstemning</entry>
+  <entry key="304">Vælg en fil</entry>
+  <entry key="305">Indstillinger</entry>
+  <entry key="306">Cam. &amp; Mik. Indstil.</entry>
+  <entry key="307">Whiteboard Indstillinger</entry>
+  <entry key="308">Afslut</entry>
+  <entry key="309">Forlad rummet</entry>
+  <entry key="310">Log af</entry>
+  <entry key="311">Glemt din adgangskode?</entry>
+  <entry key="312">Nulstil adgangskode</entry>
+  <entry key="313">Via email</entry>
+  <entry key="314">Via brugernavn</entry>
+  <entry key="315">Din emailadresse</entry>
+  <entry key="316">Dit brugernavn</entry>
+  <entry key="317">Send email med aktiveringslink</entry>
+  <entry key="318">Brugere</entry>
+  <entry key="319">Indsæt venligst emailadresse eller brugernavn</entry>
+  <entry key="320">Ingen bruger er forbundet med dette brugernavn</entry>
+  <entry key="321">Emailen med det specielle link er blevet sendt til din emailadresse. Kontroller venligst din indbakke. Hvis du ikke har modtaget en email, bedes du kontrollere dint SPAM-filter og genfremsende emailen fra systemet.</entry>
+  <entry key="322">Fejl</entry>
+  <entry key="323">Meddelelse</entry>
+  <entry key="324">Forkert HASH. Ingen bruger fundet.</entry>
+  <entry key="325">Nulstil din adgangskode</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">Ændre adgangskode</entry>
+  <entry key="328">Ny adgangskode</entry>
+  <entry key="329">Adgangskode igen</entry>
+  <entry key="330">Adgangskoderne du har angivet er ikke identiske.</entry>
+  <entry key="331">4 tegn eller mere; forskel på små og store bogstaver!</entry>
+  <entry key="332">Adgangskode valgt. Du kan logge ind nu.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Ukendt fejl. Rapporter venligst til dine support muligheder.</entry>
+  <entry key="335">Brugernavnet blev ikke fundet.</entry>
+  <entry key="336">Ugyldig adgangskode.</entry>
+  <entry key="337">Du er nu logget ud.</entry>
+  <entry key="338">Registrering via loginside (frontend) er inaktiveret.</entry>
+  <entry key="339">Ugyldig emailadresse.</entry>
+  <entry key="340">Filnavnet eksisterer i forvejen. Vælg venligst et andet filnavn.</entry>
+  <entry key="341">Filnavnet er for kort.</entry>
+  <entry key="342">Kunne ikke gemme adressen.</entry>
+  <entry key="343">Bruger oprettet, men skal tildeles til en organisation for at kunne logge ind.</entry>
+  <entry key="344">Nyt felt</entry>
+  <entry key="345">Der er ikke fundet et felt med dette feltID.</entry>
+  <entry key="346">Der er ikke fundet en etiket til dette felt.</entry>
+  <entry key="347">Admin autorisation er krævet.</entry>
+  <entry key="348">Sprogeditor</entry>
+  <entry key="349">Sprog</entry>
+  <entry key="350">Etiket-ID</entry>
+  <entry key="351">Etiket-Navn</entry>
+  <entry key="352">Værdi</entry>
+  <entry key="353">Feltværdi</entry>
+  <entry key="354">EtiketNavn</entry>
+  <entry key="355">EtiketVærdi</entry>
+  <entry key="356">Etiket-ID</entry>
+  <entry key="357">Du slettede kun etiketten, IKKE Feltet! Du kan ikke slettet feltet, det indeholder måske etiketter på andre sprog.</entry>
+  <entry key="358">Ugyldig Etiket-ID. FieldLanguagesvalues_Id kan ikke findes i databasen.</entry>
+  <entry key="359">Du kan ikke slette dette felt. Du kan kun slette etiketter, IKKE Felt. I øjeblikket er der ikke indlæst etiketter, dette kan skyldes, at ingen etiket er valgt eller defineret for dette felt og sproget.</entry>
+  <entry key="360">Eksporter</entry>
+  <entry key="361">Du skal logge ud for at kunne se ændringer.</entry>
+  <entry key="362">Tilføj nyt sprog</entry>
+  <entry key="363">Fjern sprog</entry>
+  <entry key="364">Tilføj nyt sprog</entry>
+  <entry key="365">Navn</entry>
+  <entry key="366">Tilføj sprog</entry>
+  <entry key="367">Sikkerhedskopier</entry>
+  <entry key="368">Gå til første</entry>
+  <entry key="369">Gå til foregående</entry>
+  <entry key="370">Gå til næste</entry>
+  <entry key="371">Gå til sidste</entry>
+  <entry key="372">Bruger taler (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">LYD til/fra</entry>
+  <entry key="374">System</entry>
+  <entry key="375">Dine indstillinger</entry>
+  <entry key="376">Hej,</entry>
+  <entry key="377">Rediger profil</entry>
+  <entry key="378">Nye meddelelser:</entry>
+  <entry key="379">Indlæs nyt billede</entry>
+  <entry key="380">Brugerdata - Exporter</entry>
+  <entry key="381">Alla organisationer skal eksistere i forvejen!</entry>
+  <entry key="382">Start eksporteringen</entry>
+  <entry key="383">Ifølge organisation</entry>
+  <entry key="384">Start eksporteringen</entry>
+  <entry key="385">Brugerdata - Importer</entry>
+  <entry key="386">Vælg users.xml</entry>
+  <entry key="387">Importer</entry>
+  <entry key="388">Eksporter til XML - Disse filer kan bruges til: - Bidrage til projektet - Importere til et andet system - Lave sikkerhedskopier - Skræddersy programmet - Lægge i language-mappen for kommende installationer</entry>
+  <entry key="389">Vælg en sprogfil du vil importere. Husk at vælge den rigtige sprogfil fra combokoksen! Sprog filen vil blive importeret til dette sprog uafhængigt af navnet på filen.</entry>
+  <entry key="390">Importer - vælg fil</entry>
+  <entry key="391">Gem som</entry>
+  <entry key="392">Navn:</entry>
+  <entry key="393">Kommentar:</entry>
+  <entry key="394">Gem</entry>
+  <entry key="395">Optagelser</entry>
+  <entry key="396">Optagelser/fremviser</entry>
+  <entry key="397">Optagelser fra offentlige og private rum</entry>
+  <entry key="398">Brugere:</entry>
+  <entry key="399">Tlsluttede:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Brugere i dette rum:</entry>
+  <entry key="402">Opdater</entry>
+  <entry key="403">Dette rum er optaget. Forsøg igen om nogle få minutter.</entry>
+  <entry key="404">Klik på et rum for at få flere detaljer</entry>
+  <entry key="405">Chat med brugere i dette rum:</entry>
+  <entry key="406">Rum:</entry>
+  <entry key="407">Brugere i dette rum:</entry>
+  <entry key="408">Siden:</entry>
+  <entry key="409">Afspil optagelse</entry>
+  <entry key="410">Længde:</entry>
+  <entry key="411">Dato:</entry>
+  <entry key="412">Optagelsestilstand! Du kan ikke ændre nogen værdier. Dette er en indspillet fil!</entry>
+  <entry key="413">Afspil denne optagelse</entry>
+  <entry key="414">Afspil / Pause</entry>
+  <entry key="415">Påbegynd optagelse</entry>
+  <entry key="416">Stop optagelse</entry>
+  <entry key="417">Optagelse:</entry>
+  <entry key="418">Der er allerede nogen der optager i øjeblikket:</entry>
+  <entry key="419">Optagelse! Af bruger:</entry>
+  <entry key="420">Annuller</entry>
+  <entry key="421">Optagelsen vil blive afbrudt og gemmes ikke.</entry>
+  <entry key="422">Genoptag</entry>
+  <entry key="423">Luk dette vindue og genoptag optagelsen</entry>
+  <entry key="424">Ændre linjefarve</entry>
+  <entry key="425">Vælg farve</entry>
+  <entry key="426">Inaktiver / aktiver linjefarve</entry>
+  <entry key="427">Ændre fyldfarve</entry>
+  <entry key="428">Inaktiver / aktiver fyldfarve</entry>
+  <entry key="429">Ændre linjebredde</entry>
+  <entry key="430">Luk</entry>
+  <entry key="431">Ændre font størrelse</entry>
+  <entry key="432">Slet optagelse</entry>
+  <entry key="433">Gæst</entry>
+  <entry key="434">Af:</entry>
+  <entry key="435">Navn</entry>
+  <entry key="436">Rum</entry>
+  <entry key="437">Dato</entry>
+  <entry key="438">Annuller</entry>
+  <entry key="439">Start</entry>
+  <entry key="440">Navn</entry>
+  <entry key="441">Dato</entry>
+  <entry key="442">Slet serverens Chat-log</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">Send meddelelse</entry>
+  <entry key="445">Emotikoner</entry>
+  <entry key="446">Emotikoner</entry>
+  <entry key="447">Vælg enheder</entry>
+  <entry key="448">Lyd og video</entry>
+  <entry key="449">Kun lyd</entry>
+  <entry key="450">Kun video</entry>
+  <entry key="451">Ingen lyd/video (statisk billede)</entry>
+  <entry key="452">Ingen Lyd/Video vil blive publiceret. I stedet vil et billede fra din profil blive vist. Vælg denne indstilling, hvis du har en dårlig båndbredde.</entry>
+  <entry key="453">MA</entry>
+  <entry key="454">TI</entry>
+  <entry key="455">ON</entry>
+  <entry key="456">TO</entry>
+  <entry key="457">FR</entry>
+  <entry key="458">LØ</entry>
+  <entry key="459">SØ</entry>
+  <entry key="460">Mandag</entry>
+  <entry key="461">Tirsdag</entry>
+  <entry key="462">Onsdag</entry>
+  <entry key="463">Torsdag</entry>
+  <entry key="464">Fredag</entry>
+  <entry key="465">Lørdag</entry>
+  <entry key="466">Søndag</entry>
+  <entry key="467">KU</entry>
+  <entry key="468">Kalender uge</entry>
+  <entry key="469">Januar</entry>
+  <entry key="470">Februar</entry>
+  <entry key="471">Marts</entry>
+  <entry key="472">April</entry>
+  <entry key="473">Maj</entry>
+  <entry key="474">Juni</entry>
+  <entry key="475">Juli</entry>
+  <entry key="476">August</entry>
+  <entry key="477">September</entry>
+  <entry key="478">Oktober</entry>
+  <entry key="479">November</entry>
+  <entry key="480">December</entry>
+  <entry key="481">Kalender</entry>
+  <entry key="482">Deltagere</entry>
+  <entry key="483">Vis Layout indstillinger</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Bredde | Højde</entry>
+  <entry key="486">Video-container</entry>
+  <entry key="487">Moderator-container</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Whiteboard-container</entry>
+  <entry key="490">Aktiveret</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Bredde | Højde</entry>
+  <entry key="493">Filer, Chat, Deltagere - container</entry>
+  <entry key="494">Aktiveret</entry>
+  <entry key="495">X | Y</entry>
+  <entry key="496">Bredde | Højde</entry>
+  <entry key="497">Moderatoren har forladt rummet. I øjeblikket er der ikke nogen som præsenterer noget. Du kan ansøge om at blive moderator eller vente.</entry>
+  <entry key="498">Der er ikke nogen moderator i dette rum, men der er nogen deltagere. Du kan ansøge om at blive moderator eller vente.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Invitation</entry>
+  <entry key="501">Meddelelse fra bruger:</entry>
+  <entry key="502">Meddelelse:</entry>
+  <entry key="503">Klik på dette link for at deltage i mødet:</entry>
+  <entry key="504">Klik her for at gå til rummet.</entry>
+  <entry key="505">Hvis du har problemer med at åbne genvejen (link), bedes du kopiere genvejen og indsætte denne i din webbrowser:</entry>
+  <entry key="506">{0} registrering</entry>
+  <entry key="507">Dine brugerdata:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Adgangskode:</entry>
+  <entry key="510">Email:</entry>
+  <entry key="511">{0} - Teamet</entry>
+  <entry key="512">{0} registrering</entry>
+  <entry key="513">{0} - Nulstil adgangskode</entry>
+  <entry key="514">Klik på den her genvej (link) for at indsætte ny adgangskode:</entry>
+  <entry key="515">Klik her for at angive ny adgangskode</entry>
+  <entry key="516">Hvis du har problemer med at åbne genvejen (link), bedes du kopiere genvejen og indsætte denne i din webbrowser:</entry>
+  <entry key="517">{0} nulstilling af adgangskode</entry>
+  <entry key="518">Angiv venligst en gyldig dato, f.eks. 24.12.2009 (dd.mm.åååå)</entry>
+  <entry key="519">Angiv venligst en gyldig emailadresse, f.eks navn@mail.dk</entry>
+  <entry key="520">Angiv venligst et gyldigt flydende nummer, f.eks. 1.00</entry>
+  <entry key="521">Angiv venligst et gyldigt nummer (Integer), f.eks. 100</entry>
+  <entry key="522">Angiv venligst et gyldigt telefonnummer, f.eks. +45 39151515</entry>
+  <entry key="523">Angiv venligst en gyldig tid, f.eks. 12:23 (tt:mm)</entry>
+  <entry key="524">Adgangskodebeskyttet</entry>
+  <entry key="525">Adgangskode</entry>
+  <entry key="526">Gyldighedsstid</entry>
+  <entry key="527">Uendelig</entry>
+  <entry key="528">Periode</entry>
+  <entry key="529">Engangs</entry>
+  <entry key="530">Gyldig fra og med:</entry>
+  <entry key="531">Gyldig til:</entry>
+  <entry key="532">Invitation til {0}</entry>
+  <entry key="533">Ingen invitation tilgængelig med denne invitationskode.</entry>
+  <entry key="534">Invitationen anvendes allerede. Den her type invitationer kan ikke genanvendes.</entry>
+  <entry key="535">Invitationskoden er ikke gyldig udenfor mødets start og slut tidspunkt. Kontroller venligst tidspunktet i den tilsendte mødeindkaldelse (email)</entry>
+  <entry key="536">Adgangskode:</entry>
+  <entry key="537">Kontroller Adgangskode</entry>
+  <entry key="538">Ugyldig adgangskode!</entry>
+  <entry key="539">Webbrowser</entry>
+  <entry key="540">Synkroniser lyd/video</entry>
+  <entry key="541">Indlogningen var korrekt, men sessionen er ikke længere aktiv eller lagret på serveren. Prøv at logge ind igen efter du har fået et nyt SessionId.</entry>
+  <entry key="542">SessionId er ikke logget ind eller har ikke nogen administrationsrettigheder. SOAP Gateway kræver en bruger med administrationsrettigheder for at tilkoble nye brugere.</entry>
+  <entry key="543">Den her session er ikke koplet til nogen Remoteuser-Data. Enten blev den såkaldte SOAP-Gateway ikke indlæst før applikationen blev kørt eller der er anvendt et fejlagtigt Session-ID.</entry>
+  <entry key="544">Optageren er fortsat i Beta-stadie!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-aksel</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-aksel</entry>
+  <entry key="549">b</entry>
+  <entry key="550">bredde</entry>
+  <entry key="551">h</entry>
+  <entry key="552">højde</entry>
+  <entry key="553">Ændre gennemsigtghed (transparent)</entry>
+  <entry key="554">Åben browseren</entry>
+  <entry key="555">Luk browseren</entry>
+  <entry key="556">Forbindelsen til serveren er er gået tabt. Du skal indlæse applikationen igen eller/og kontrollere din netværksforbindelse.</entry>
+  <entry key="557">Peger</entry>
+  <entry key="558">Synkroniserer</entry>
+  <entry key="559">Synkroniserer brugere, vent venligst</entry>
+  <entry key="560">&lt;u&gt;Dovnload som SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download som PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download som JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download som PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download som TIF&lt;/u&gt;</entry>
+  <entry key="565">Påmindelse:</entry>
+  <entry key="566">Kategori:</entry>
+  <entry key="567">Repetition:</entry>
+  <entry key="568">ingen</entry>
+  <entry key="569">Placering:</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">Slut</entry>
+  <entry key="572">Titel:</entry>
+  <entry key="573">Kommentar:</entry>
+  <entry key="574">Inviter deltagere</entry>
+  <entry key="575">Daglig</entry>
+  <entry key="576">Måndelig</entry>
+  <entry key="577">Årlig</entry>
+  <entry key="578">Mødets sluttidspunkt skal være efter dets begyndelse!</entry>
+  <entry key="579">Tilføj en titel, tak!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Aktiver det her hvis du skriver på et højre til venstre sprog</entry>
+  <entry key="582">Skrivebord (Forside)</entry>
+  <entry key="583">Se optagelser fra møder og auditorier</entry>
+  <entry key="584">Møde - Opret en konference med 4 (op til 16) deltagere &lt;br&gt; alle vil have tilgang til lyd + video.</entry>
+  <entry key="585">Auditorium - Opret en konference med op til 200 deltagare&lt;br/&gt;Her er det kun moderatoren som har tilgang til lyd + video.</entry>
+  <entry key="586">Opret brugere, rum, organisationer&lt;br/&gt; + ændre konfigurationer</entry>
+  <entry key="587">Brugere i dette rum lige nu</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Indlæser dokument. Vent venligst til alle klienter er synkroniserede.</entry>
+  <entry key="592">Indlæsning færdig, konverterer dokument...</entry>
+  <entry key="593">Start indlæsning</entry>
+  <entry key="594">Dialog indlæsning og importering. Vælg venligst en fil fra din harddisk.</entry>
+  <entry key="595">Annuller</entry>
+  <entry key="596">Vælg fil</entry>
+  <entry key="597">Forbindelser</entry>
+  <entry key="598">Værdi</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Tilsluttet siden</entry>
+  <entry key="602">Rum</entry>
+  <entry key="603">Udeluk bruger</entry>
+  <entry key="604">Udeluk brugere</entry>
+  <entry key="605">Vil du virkelig udelukke denne klient?&lt;br/&gt; Det her udelukker kun klienten fra det aktuelle rum. Vedkommende kan tilslutte sig igen.</entry>
+  <entry key="606">Din session er blevet lukket af administratoren eller moderatoren.</entry>
+  <entry key="607">Telefon</entry>
+  <entry key="608">Brugeren er moderator i dette rum</entry>
+  <entry key="609">Brugeren har tilladelse til at tegne på whiteboardet</entry>
+  <entry key="610">Genstart lyd/video eller ændre indstillinger</entry>
+  <entry key="611">Tillad denne bruger at tegne på whiteboardet</entry>
+  <entry key="612">Fjern muligheden for at tegne på whiteboardet</entry>
+  <entry key="613">Brugere</entry>
+  <entry key="614">Filer</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Din konto er tildelt til flere organisationer. Vælg venligst en til denne session.</entry>
+  <entry key="618">Dette rum er optaget i øjeblikket. Forsøg venligst igen senere.</entry>
+  <entry key="619">Rumtyper</entry>
+  <entry key="620">Tidsbooket rum</entry>
+  <entry key="621">Servertid</entry>
+  <entry key="622">{0} - Påmindelse</entry>
+  <entry key="623">Meddelelse fra bruger:</entry>
+  <entry key="624">Meddelelse:</entry>
+  <entry key="625">Klik på denne genvej (link) for at deltage i mødet:</entry>
+  <entry key="626">Klik her for at gå ind i rummet</entry>
+  <entry key="627">Hvis du har problemer med genvejen, bedes du kopiere denne genvej i stedet og indsætte i din webbrowser:</entry>
+  <entry key="628">Søg internt</entry>
+  <entry key="629">eksterne brugere</entry>
+  <entry key="630">fornavn</entry>
+  <entry key="631">navn</entry>
+  <entry key="632">email</entry>
+  <entry key="633">Bekræft at du logger af</entry>
+  <entry key="634">Er du sikker på at du vil logge af?</entry>
+  <entry key="635">Aktioner</entry>
+  <entry key="636">Demo Rum</entry>
+  <entry key="637">Demo Tid</entry>
+  <entry key="638">Mødetimer</entry>
+  <entry key="639">Dette rum er et demo rum. For at fjerne denne advarsel, skal du enten oprette et privat møderum eller sætte et op på din egen server. Du bliver automatisk loget ud om:</entry>
+  <entry key="640">Modereret</entry>
+  <entry key="641">Vent venligst indtil moderatoren har tilsluttet sig rummet. Moderatoren kan enten være en lærer, instruktør, administrator eller den bruger som har oprettet rummet.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Indkommende skærmdeling</entry>
+  <entry key="644">En ny skærmdeling vil blive påbegyndt af brugeren:</entry>
+  <entry key="645">Start deling</entry>
+  <entry key="646">Tilføj et nyt møde</entry>
+  <entry key="647">Møderum</entry>
+  <entry key="648">Auditorium</entry>
+  <entry key="649">Moderering</entry>
+  <entry key="650">Moderer brugere</entry>
+  <entry key="651">Moderer rum</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Vil du ændre denne bruger til at være moderator af denne organisation?</entry>
+  <entry key="654">Vælg venligst en organisation før du forsøger at tilføje en bruger til den!</entry>
+  <entry key="655">Organisation - Moderator</entry>
+  <entry key="656">Vil du virkelig fjerne denne bruger fra organisationen?</entry>
+  <entry key="657">Denne bruger er moderator</entry>
+  <entry key="658">Denne bruger er ikke moderator</entry>
+  <entry key="659">Vil du fjerne denne bruger som moderator fra organisationen?</entry>
+  <entry key="660">Tilføj eller fjern brugere eller rum i din organisation</entry>
+  <entry key="661">Vil du virkelig fjerne denne?</entry>
+  <entry key="662">Vil du virkelig fjerne denne bruger fra organisationen? Du vil kun fjerne tilslutningen mellem brugeren og organisationen. For at fjerne brugeren helt, skal du logge ind i administrationspanelet.</entry>
+  <entry key="663">Du kan ikke fjerne din egen bruger!</entry>
+  <entry key="664">Denne funktion/metode kræver en administrationskonto for at kunne kaldes!</entry>
+  <entry key="665">Der findes ingen session associeret med dette ID.</entry>
+  <entry key="666">Dette er en administrations- eller moderatorkonto. Du kan kun ændre denne konto via administrationspanelet.</entry>
+  <entry key="667">Klik venligst på flg. link eller kopier adressen til din webbrowsers adressefelt for at fuldføre registreringen.</entry>
+  <entry key="668">Klik her for at verificere din emailadresse.</entry>
+  <entry key="669">Ingen brugere fundet med denne Hash-kode.</entry>
+  <entry key="670">Denne bruger er allerede aktiveret!</entry>
+  <entry key="671">Du har aktiveret din konto!</entry>
+  <entry key="672">Log ind nu</entry>
+  <entry key="673">Din konto er ikke aktiveret. Anvend genvejen (link) i den email du modtog, da du registrerede dig.</entry>
+  <entry key="674">Du har nu registreret dig til systemet. Du har fået tilsendt en email med din verificeringskode. Kontroller venligst din indbakke.</entry>
+  <entry key="675">Fjern denne bruger som moderator</entry>
+  <entry key="676">Tildel moderator rettigheder til denne bruger</entry>
+  <entry key="677">Brugere</entry>
+  <entry key="678">Adgang til whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Vælg venligst en bruger fra listen for at give vedkommende adgang til whiteboard, moderation eller video.</entry>
+  <entry key="681">Denne bruger er allerede moderator, så han har automatiskt ret til at tegne.</entry>
+  <entry key="682">Dette er dig! Du kan ikke fjerne moderator rettighederne fra dig selv.</entry>
+  <entry key="683">Tillad denne bruger at publicere lyd/video</entry>
+  <entry key="684">Fjern lyd/video fra denne bruger</entry>
+  <entry key="685">Jeg vil være moderator for dette rum</entry>
+  <entry key="686">Jeg vil tegne på whiteboardet</entry>
+  <entry key="687">Jeg vil dele lyd/video</entry>
+  <entry key="688">Du er moderator for dette rum</entry>
+  <entry key="689">Du har tilladelse til at tegne på whiteboardet</entry>
+  <entry key="690">Du har tilladelse til at publicere audio/video</entry>
+  <entry key="691">Meddelelse til moderatoren</entry>
+  <entry key="692">Brugeren</entry>
+  <entry key="693">vil have moderator rettigheder. Brug status ikonerne i brugerlisten for at tildele eller fjerne moderator rettigheder.</entry>
+  <entry key="694">vil tegne på whiteboardet. Brug status ikonerne i brugerlisten for at tildele eller fjerne rettigheder til at tegne på whiteboardet.</entry>
+  <entry key="695">vil publicere lyd/video. Brug status ikonerne i brugerlisten for at tildele eller fjerne rettigheder til publicering af lyd/video.</entry>
+  <entry key="696">Du skal vente til en moderator er trådt ind i rummet.</entry>
+  <entry key="697">Annuller</entry>
+  <entry key="698">Gem</entry>
+  <entry key="699">Dag</entry>
+  <entry key="700">Måned</entry>
+  <entry key="701">År</entry>
+  <entry key="702">Indlæs fil</entry>
+  <entry key="703">Tilføj mappe</entry>
+  <entry key="704">Opdater</entry>
+  <entry key="705">Papirkurv</entry>
+  <entry key="706">Mine filer (Privat drev)</entry>
+  <entry key="707">Rum filer (Offentligt drev)</entry>
+  <entry key="708">Tilføj fil</entry>
+  <entry key="709">Tilføj mappe</entry>
+  <entry key="710">Slet mappe</entry>
+  <entry key="711">Ret navn</entry>
+  <entry key="712">Ny mappe</entry>
+  <entry key="713">Er du sikker på at du vil slette dette emne?</entry>
+  <entry key="714">Søg</entry>
+  <entry key="715">Søg</entry>
+  <entry key="716">Åben dokument</entry>
+  <entry key="717">Vis alle filer (Træstruktur)</entry>
+  <entry key="718">Luk dokument</entry>
+  <entry key="719">Slet fil</entry>
+  <entry key="720">Du har ikke tilladelse til at tegne på whiteboardet. Du skal være moderator eller som min. have rettigheder til at redigere Wwhiteboardet. Du må spørge moderatoren om han vil give dig rettigheder.</entry>
+  <entry key="721">Dokument egenskaber</entry>
+  <entry key="722">Start klient (ekstern)</entry>
+  <entry key="723">Start klient (HTTP)</entry>
+  <entry key="724">En bruger vil dele sin skærm. Vil du se vedkommendes skærm?</entry>
+  <entry key="725">Du deler din skærm i øjeblikket. For at stoppe denne funktion (session) skal du klikke på stop knappen i klient programmet til deling af skærm.</entry>
+  <entry key="726">deling af skærm session</entry>
+  <entry key="727">Du deler allerede din skærm!</entry>
+  <entry key="728">Fremviser til deling af skærm</entry>
+  <entry key="729">Luk</entry>
+  <entry key="730">Fremviser til deling af skærm</entry>
+  <entry key="731">Klik på start for at dele din skærm</entry>
+  <entry key="732">Start deling af skærm</entry>
+  <entry key="733">Stop deling af skærm</entry>
+  <entry key="734">Vælg skærm område:</entry>
+  <entry key="735">Ændre bredde</entry>
+  <entry key="736">Deling af skærm sessionen er afsluttet!</entry>
+  <entry key="737">Ændre højde</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Bredde:</entry>
+  <entry key="741">Højde:</entry>
+  <entry key="742">Forbindelsen blev lukket af serveren</entry>
+  <entry key="743">Annuller</entry>
+  <entry key="744">Start ekstern</entry>
+  <entry key="745">Hvis du lukker denne session helt vil du ikke være i stand til at genstarte fremviseren for denne session.</entry>
+  <entry key="746">Bekræft lukning af fremviser sessionen.</entry>
+  <entry key="747">Del skærm</entry>
+  <entry key="748">Optag session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ups, ... Firefox på Windows viser ikke Co-Browsing så godt. Brug venligst en anden browser for at bruge denne mulighed.</entry>
+  <entry key="751">Forrige</entry>
+  <entry key="752">Næste</entry>
+  <entry key="753">Indlæs igen</entry>
+  <entry key="754">Hjem</entry>
+  <entry key="755">Indlæs</entry>
+  <entry key="756">Tilføj denne hjemmeside som standard hjemmeside i tilknytning til din profil.</entry>
+  <entry key="757">Test indstillinger</entry>
+  <entry key="758">Kontroller mikrofon og kameraindstillinger inden du går ind i et rum ved at optage i et par sek. Du kan efterflg. se din optagelse for at kontrollere din lyd samt dit kamerabillede.</entry>
+  <entry key="759">Vis ikke denne test igen</entry>
+  <entry key="760">Annuller</entry>
+  <entry key="761">Start konference</entry>
+  <entry key="762">Spørg ikke igen</entry>
+  <entry key="763">OPTAG</entry>
+  <entry key="764">AFSPIL</entry>
+  <entry key="765">Du kan fortsætte uden at teste, hvis du ikke planlægger at publicere lyd og billede. Deltagere uden lyd og video kan stadig bruge whiteboard, dele skærm eller skrive chat meddelelser.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Niveau (visning)</entry>
+  <entry key="768">Klik på start</entry>
+  <entry key="769">Start konference</entry>
+  <entry key="770">Start event</entry>
+  <entry key="771">Vælg rum</entry>
+  <entry key="772">Kontroller Setup</entry>
+  <entry key="773">Start konference</entry>
+  <entry key="774">Sådan gør du:</entry>
+  <entry key="775">Start optagelse</entry>
+  <entry key="776">Vis ikke Audio / Video Test (optagelse) før du deltager i en konference</entry>
+  <entry key="777">Offentlige Rum</entry>
+  <entry key="778">Offentlige Rum er tilgængelige for alle brugere.</entry>
+  <entry key="779">Private Rum</entry>
+  <entry key="780">Private Rum er kun tilgængelige for brugere i samme organisation.</entry>
+  <entry key="781">Mine rum</entry>
+  <entry key="782">Rum i dette afsnit er oprettet til privat brug. De er oprettet via kalenderen og har en start og slut dato. De vises kun i dette afsnit mens de er aktive (gyldige).</entry>
+  <entry key="783">Du skal være moderator for at kunne gøre dette.</entry>
+  <entry key="784">Ansøg om moderation</entry>
+  <entry key="785">Ansøg om whiteboard adgang</entry>
+  <entry key="786">Ansøg om kamera/mikrofon adgang</entry>
+  <entry key="787">Denne sessions Hash-kode er allerede brugt. Du kan ikke bruge den 2 gange.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">LUK</entry>
+  <entry key="790">Vil du virkelg lukke? Du skal måske slette indlæste dokumenter, whiteboard og chat historie først.</entry>
+  <entry key="791">Luk konference</entry>
+  <entry key="792">Rum</entry>
+  <entry key="793">Vælg rum til et møde</entry>
+  <entry key="794">Der er en event i kalenderen som ikke er gemt. Gem den først eller fjern den.</entry>
+  <entry key="795">Tilføj venligst min. 1 deltager til dit møde!</entry>
+  <entry key="796">Vil du virkelig slette denne event?</entry>
+  <entry key="797">Advarsel</entry>
+  <entry key="798">Tilføj event</entry>
+  <entry key="799">dag</entry>
+  <entry key="800">uge</entry>
+  <entry key="801">måned</entry>
+  <entry key="802">Beskrivelse</entry>
+  <entry key="803">Deltagere</entry>
+  <entry key="804">{0} konferenceplatform. Klik på startknappen for at starte en konference med det samme eller gå til din kalender for at planlægge et møde.</entry>
+  <entry key="805">Planlæg et møde</entry>
+  <entry key="806">For at sætte en konference op, kan du tilføje en event i din kalender. For hver event der oprettes, vil der automatisk blive oprettet et konferencerum. Alle deltagere samt dig selv, vil få tilsendt en email med en genvej (link) til det pågældende konferencerum.&lt;br/&gt;&lt;br/&gt;Du kan vælge mellem forskellige rumtyper med forskellig layout og funktionalitet. Du kan også vælge mellem forskellige notificeringsmuligheder (email), som sendes for hver kalender event.</entry>
+  <entry key="807">Behov for hjælp?</entry>
+  <entry key="808">Begrænset</entry>
+  <entry key="809">Søg</entry>
+  <entry key="810">Tilføj</entry>
+  <entry key="811">Ingen bruger valgt. Vælg venligst et emne fra listen først og klik på tilføj efterfølgende.</entry>
+  <entry key="812">Tilføj deltager</entry>
+  <entry key="813">Gem</entry>
+  <entry key="814">Slet</entry>
+  <entry key="815">Event detaljer</entry>
+  <entry key="816">Default moderatorer</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Navn</entry>
+  <entry key="820">Email</entry>
+  <entry key="821">Tilføj ny default moderator</entry>
+  <entry key="822">Er Super moderator</entry>
+  <entry key="823">Hvis rummet er modereret, vil brugere med moderator eller administrator niveau automatisk blive moderator hvis de går ind i rummet. Såfremt du ikke vil angive dette og kun vil lade en bestemt bruger blive moderator, skal du anvende default moderator valgmuligheden.</entry>
+  <entry key="824">En Super moderator er altid moderator, når vedkommende går ind i et rum og ingen kan fjerne moderator flaget fra vedkommende.</entry>
+  <entry key="825">Tildel Super moderator funk. til en bruger</entry>
+  <entry key="826">Fjern Super moderator funk. fra en bruger</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Såfremt du tilføjer en organisation til et rum, er det kun brugere som er medlem af organisationen, som kan få adgang til pågældende rum (Dette er kun gyldigt hvis hvis isPublic flaget er sat til false!).</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Begrænsninger</entry>
+  <entry key="831">Organisation</entry>
+  <entry key="832">Er du sikker?</entry>
+  <entry key="833">Vil du virkelig slette dette emne? Du skal klikke på Gem knappen for at gemme ændringerne!</entry>
+  <entry key="834">Ingen bruger er valgt. Vælg først inden du tilføjer!</entry>
+  <entry key="835">Tilføj ny default moderator</entry>
+  <entry key="836">Vil du tilføje Super moderator flaget for denne bruger? En Super moderator er ikke kun moderator i et rum, hvilket betyder at ingen andre moderatorer kan fjerne moderator flaget for denne bruger. Du mangler at gemme rum objektet for at gemme disse indstillinger!</entry>
+  <entry key="837">Vil du fjerne Super moderator flaget for denne bruger?? Du mangler at gemme rum objektet for at gemme disse indstillinger!</entry>
+  <entry key="838">Denne bruger er en Super moderator. Du kan ikke fjerne moderator flaget fra en Super moderator!</entry>
+  <entry key="839">Vil du virkelig slette denne fil/mappe?</entry>
+  <entry key="840">Slet fil/mappe?</entry>
+  <entry key="841">Fr.</entry>
+  <entry key="842">Hr.</entry>
+  <entry key="843">Egenskaber</entry>
+  <entry key="844">Vis musens position for brugerne</entry>
+  <entry key="845">Del lyd med SIP Appletten</entry>
+  <entry key="846">Del lyd med SIP og video med Flash</entry>
+  <entry key="847">Fyldig</entry>
+  <entry key="848">Se skærm</entry>
+  <entry key="849">Brugeren</entry>
+  <entry key="850">ønsker at dele sin skærm. Vil du se?</entry>
+  <entry key="851">Luk</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">Sessionen blev lukket at den delende bruger!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">Ny deling af skærm</entry>
+  <entry key="856">Minimer</entry>
+  <entry key="857">Maximer</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Optagelse tidslinie</entry>
+  <entry key="860">Mine optagelser</entry>
+  <entry key="861">Offentlige optagelser</entry>
+  <entry key="862">INFO</entry>
+  <entry key="863">Navn</entry>
+  <entry key="864">Længde</entry>
+  <entry key="865">Dato</entry>
+  <entry key="866">Af</entry>
+  <entry key="867">Download</entry>
+  <entry key="868">MAIN - Video</entry>
+  <entry key="869">Optager</entry>
+  <entry key="870">Du kan optage og dele din skærm samtidigt. For at gøre det muligt for andre at se din skærm, skal du bare klikke på Start knappen i toppen. For kun at optage sessionen er det nok at klikke på Start optagelse.</entry>
+  <entry key="871">Start optagelse</entry>
+  <entry key="872">Stop optagelse</entry>
+  <entry key="873">Download FLV-filen</entry>
+  <entry key="874">Rum</entry>
+  <entry key="875">Afspil</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">Brugeren har mikrofonen tilsluttet</entry>
+  <entry key="878">Stop deling</entry>
+  <entry key="879">Tillad bruger spørgsmål</entry>
+  <entry key="880">Slå fra for at forhindre at brugere kan forstyrre dig i dette rum. Effekten er, at knappen som anvendes til moderation ("Jeg har et spørgsmål") ikke vil være synlig.</entry>
+  <entry key="881">Rettigheder</entry>
+  <entry key="882">Download som AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Rå skærmvideo</entry>
+  <entry key="886">Kun lyd</entry>
+  <entry key="887">Der har været fejl under processionen af optagelsen.</entry>
+  <entry key="888">Optagelsen er ikke klar til at blive set. Prøv venligst igen om et par minutter.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Optager meddelelse</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet er ikke klar</entry>
+  <entry key="893">SIP-konto indstillinger</entry>
+  <entry key="894">SIP for hver enkelt bruger. Du kan tilslutte eller afslutte SIP via administration &gt; konfiguration (Nøgle: enable_sip). SIP data for hver enkelt bruger bør blive oprettet automatisk.</entry>
+  <entry key="895">SIP-Bruger</entry>
+  <entry key="896">Sip-Adgangskode</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">Login til SIP Gateway har fejlet. Du bør kontrollere autentifikations data fra din SIP-udbyder og SIP-onto data for hver enkelt bruger. Som administrator har du stadig mulighed for at logge ind og kontrollere konfigurationen. Som bruger eller moderator vil du blive blokeret med hensyn til interaktion.</entry>
+  <entry key="899">Login til SIP Gateway har fejlet. Kontakt support!</entry>
+  <entry key="900">Logger ind til SIP-Gateway ...</entry>
+  <entry key="901">Logger ind til SIP-Gateway ...</entry>
+  <entry key="902">Vis Log</entry>
+  <entry key="903">Log meddelelser fra sendingen af optagelses processen</entry>
+  <entry key="904">SIP-Applet meddelelse</entry>
+  <entry key="905">SIP-Appletten er ikke klar. Accepter appletten og klik på OK!</entry>
+  <entry key="906">Anmod om at blive moderator</entry>
+  <entry key="907">Gem møde ændringer</entry>
+  <entry key="908">Mødet har været ændret. Vil du gemme disse ændringer? &lt;br/&gt;&lt;br/&gt;Alle deltagere til dette møde vil modtage en email med den opdaterede dato og tid (afhængig af notifikationstypen for dette møde).</entry>
+  <entry key="909">For at få adgang til andre optagelser skal du logge ind i {0} applikationen.</entry>
+  <entry key="910">Vælg bruger for denne video</entry>
+  <entry key="911">Bruge tilgængelige for denne Pod</entry>
+  <entry key="912">Du er moderator i dette interview. Du kan bestemme hvem der taler i dette interview og du kan starte / stoppe optagelsen af denne session.</entry>
+  <entry key="913">Start optagelse</entry>
+  <entry key="914">Stop optagelse</entry>
+  <entry key="915">Optagelsen af interviewet er allerede startet.</entry>
+  <entry key="916">Optagelsen er allerede stoppet eller er ikke startet endnu.</entry>
+  <entry key="917">Optagelsen af dette interview er allerede startet!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">This is a Team-Room, you can send the Team-Moderator a message if you need help. You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">1) Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything! [Screen Sharing]</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_de.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_de.properties.xml
new file mode 100644
index 0000000..f0d5ab3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_de.properties.xml
@@ -0,0 +1,1882 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Konferenz</entry>
+  <entry key="2">Meeting</entry>
+  <entry key="3">Event</entry>
+  <entry key="4">Einstellungen</entry>
+  <entry key="5">Profil</entry>
+  <entry key="6">Administration</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Aufnahme</entry>
+  <entry key="9">Keine Datei vorhanden</entry>
+  <entry key="10">Aufnahme nur für Lehrer verfügbar</entry>
+  <entry key="11">verbundene Benutzer:</entry>
+  <entry key="12">Konferenz starten</entry>
+  <entry key="13">Mein Name</entry>
+  <entry key="14">Videokonferenz</entry>
+  <entry key="15">Datei importieren</entry>
+  <entry key="16">Liste neu laden</entry>
+  <entry key="17">Zum Hauptverzeichnis</entry>
+  <entry key="18">Neue Umfrage</entry>
+  <entry key="19">Eine neue Umfrage für die Konferenz.</entry>
+  <entry key="20">Frage:</entry>
+  <entry key="21">Umfragenart:</entry>
+  <entry key="22">Anlegen</entry>
+  <entry key="23">Info: Jeder verbundene Benutzer erhält eine Nachricht mit der neuen Umfrage.</entry>
+  <entry key="24">Umfrage anlegen</entry>
+  <entry key="25">Abbrechen</entry>
+  <entry key="26">Ja/Nein</entry>
+  <entry key="27">Numerisch 1-10</entry>
+  <entry key="28">Umfrage</entry>
+  <entry key="29">Sie müssen Moderator/Lehrer in diesem Raum sein, um eine Umfrage anzulegen.</entry>
+  <entry key="30">Ihr Stimme wurde abgegeben.</entry>
+  <entry key="31">Sie haben für diese Umfrage bereits ihr Votum abgegeben.</entry>
+  <entry key="32">Abstimmen!</entry>
+  <entry key="33">Ihre Antwort:</entry>
+  <entry key="34">Ja</entry>
+  <entry key="35">Nein</entry>
+  <entry key="36">will wissen:</entry>
+  <entry key="37">Umfrageergebnisse</entry>
+  <entry key="38">Frage:</entry>
+  <entry key="39">Antworten:</entry>
+  <entry key="40">Ergebnis:</entry>
+  <entry key="41">Es gibt zur Zeit keine Umfrage.</entry>
+  <entry key="42">Abstimmen!</entry>
+  <entry key="43">Meeting (max 4 Plätze)</entry>
+  <entry key="44">Konferenz (max 50 Plätze)</entry>
+  <entry key="45">Modus</entry>
+  <entry key="46">verbleibende Plätze</entry>
+  <entry key="47">Bereits vergeben</entry>
+  <entry key="48">Eintreten</entry>
+  <entry key="49">Der Moderator/Lehrer hat den Raum verlassen.</entry>
+  <entry key="50">Systemnachricht</entry>
+  <entry key="51">Geräteauswahl</entry>
+  <entry key="52">Kamera wählen:</entry>
+  <entry key="53">Mikrofon wählen:</entry>
+  <entry key="54">Ok</entry>
+  <entry key="55">Abbrechen</entry>
+  <entry key="56">Sie müssen sich erneut verbinden damit die Änderungen wirksam werden.</entry>
+  <entry key="57">Einstellungen ändern.</entry>
+  <entry key="58">Kurs:</entry>
+  <entry key="59">Kurssprache:</entry>
+  <entry key="60">Ok</entry>
+  <entry key="61">Abbrechen</entry>
+  <entry key="62">Zeichenbrett leeren</entry>
+  <entry key="63">Soll das Zeichenbrett geleert werden bevor ein neues Bild hinzugefügt wird?</entry>
+  <entry key="64">Nicht nochmal fragen</entry>
+  <entry key="65">Nein</entry>
+  <entry key="66">Einstellungen bearbeiten</entry>
+  <entry key="67">Bestätigung anfordern bevor das Zeichenbrett geleert wird.</entry>
+  <entry key="68">Profil</entry>
+  <entry key="69">Zeichenbrett leeren</entry>
+  <entry key="70">Rückgängig</entry>
+  <entry key="71">Wiederherstellen</entry>
+  <entry key="72">Markieren</entry>
+  <entry key="73">Text</entry>
+  <entry key="74">Frei zeichnen</entry>
+  <entry key="75">Linien zeichnen</entry>
+  <entry key="76">Unterstreichen</entry>
+  <entry key="77">Rechteck</entry>
+  <entry key="78">Kreis</entry>
+  <entry key="79">Pfeil</entry>
+  <entry key="80">Löschen</entry>
+  <entry key="81">Moderation beantragen</entry>
+  <entry key="82">Beantragen</entry>
+  <entry key="83">Abbrechen</entry>
+  <entry key="84">Moderator werden</entry>
+  <entry key="85">Schließen</entry>
+  <entry key="86">Kursiv</entry>
+  <entry key="87">Fett</entry>
+  <entry key="88">Warte</entry>
+  <entry key="89">Ein Benutzer möchte die Moderation übernehmen:</entry>
+  <entry key="90">Annehmen</entry>
+  <entry key="91">Ablehnen</entry>
+  <entry key="92">Abbrechen</entry>
+  <entry key="93">Sende Anfrage an folgende Nutzer</entry>
+  <entry key="94">bestätigt</entry>
+  <entry key="95">abgelehnt</entry>
+  <entry key="96">Ändere Moderator</entry>
+  <entry key="97">Sie sind nicht der Moderator dieser Konferenz!</entry>
+  <entry key="98">Moderator:</entry>
+  <entry key="99">Dieser Raum ist voll. Bitte versuchen Sie es zu einem späteren Zeitpunkt nochmals.</entry>
+  <entry key="100">Kreis</entry>
+  <entry key="101">Schließen</entry>
+  <entry key="102">Eingabefehler</entry>
+  <entry key="103">Der Benutzername muss mindestens 4 Zeichen lang sein</entry>
+  <entry key="104">Das Passwort muss mindestens 4 Zeichen lang sein</entry>
+  <entry key="105">Der Benutzername ist bereits vergeben</entry>
+  <entry key="106">Die E-Mail ist bereits registriert</entry>
+  <entry key="107">Ein Fehler trat auf. Bitte kontaktieren Sie den Administrator</entry>
+  <entry key="108">Login</entry>
+  <entry key="109">Benutzer/E-Mail:</entry>
+  <entry key="110">Passwort:</entry>
+  <entry key="111">Sprache</entry>
+  <entry key="112">Einloggen</entry>
+  <entry key="113">Registrieren</entry>
+  <entry key="114">Benutzer:</entry>
+  <entry key="115">Passwort:</entry>
+  <entry key="116">Wiederhole:</entry>
+  <entry key="117">Vorname:</entry>
+  <entry key="118">Nachname:</entry>
+  <entry key="119">E-Mail:</entry>
+  <entry key="120">Land:</entry>
+  <entry key="121">Registrieren</entry>
+  <entry key="122">Abbrechen</entry>
+  <entry key="123">Registrieren</entry>
+  <entry key="124">Home</entry>
+  <entry key="125">Benutzer</entry>
+  <entry key="126">Gruppen</entry>
+  <entry key="127">Organisationen</entry>
+  <entry key="128">Konferenzräume</entry>
+  <entry key="129">Öffentlich</entry>
+  <entry key="130">Organisation</entry>
+  <entry key="131">Betreten</entry>
+  <entry key="132">Benutzer</entry>
+  <entry key="133">Passwort</entry>
+  <entry key="134">Wiederholen</entry>
+  <entry key="135">Vorname</entry>
+  <entry key="136">Nachname</entry>
+  <entry key="137">E-Mail</entry>
+  <entry key="138">Geburtstag</entry>
+  <entry key="139">Straße/Nr.</entry>
+  <entry key="140">PLZ/Stadt</entry>
+  <entry key="141">Land</entry>
+  <entry key="142">Adressinfo</entry>
+  <entry key="143">Benutzerdaten</entry>
+  <entry key="144">Speichern</entry>
+  <entry key="145">Speichervorgang</entry>
+  <entry key="146">Benutzer-ID</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">Vorname</entry>
+  <entry key="149">Nachname</entry>
+  <entry key="150">Vorwärts</entry>
+  <entry key="151">Zurück</entry>
+  <entry key="152">Datensatz entfernen</entry>
+  <entry key="153">Abbrechen</entry>
+  <entry key="154">Enfernen</entry>
+  <entry key="155">Datensatz anlegen</entry>
+  <entry key="156">Datensatz neu laden</entry>
+  <entry key="157">Datensatz entfernen</entry>
+  <entry key="158">Status</entry>
+  <entry key="159">gesperrt</entry>
+  <entry key="160">aktiv</entry>
+  <entry key="161">Organisationen</entry>
+  <entry key="162">Kalender</entry>
+  <entry key="163">Schließen</entry>
+  <entry key="164">Organisations-ID</entry>
+  <entry key="165">Name</entry>
+  <entry key="166">Benutzer</entry>
+  <entry key="167">Moderator</entry>
+  <entry key="168">Admin</entry>
+  <entry key="169">Benutzerrolle</entry>
+  <entry key="170">Organisation</entry>
+  <entry key="171">Name</entry>
+  <entry key="172">Organisation hinzufügen</entry>
+  <entry key="173">Organisation hinzufügen</entry>
+  <entry key="174">Abbrechen</entry>
+  <entry key="175">Hinzufügen</entry>
+  <entry key="176">Organisation entfernen</entry>
+  <entry key="177">Benutzer</entry>
+  <entry key="178">Benutzer hinzufügen</entry>
+  <entry key="179">Benutzer entfernen</entry>
+  <entry key="180">Benutzer hinzufügen</entry>
+  <entry key="181">Benutzer suchen</entry>
+  <entry key="182">Suchen</entry>
+  <entry key="183">Benutzer</entry>
+  <entry key="184">Organisation</entry>
+  <entry key="185">Auswählen</entry>
+  <entry key="186">Konferenzräume</entry>
+  <entry key="187">Konferenzräume</entry>
+  <entry key="188">ID</entry>
+  <entry key="189">Name</entry>
+  <entry key="190">öffentlich</entry>
+  <entry key="191">Organisationen</entry>
+  <entry key="192">Konferenzräume</entry>
+  <entry key="193">Name</entry>
+  <entry key="194">Typ</entry>
+  <entry key="195">Öffentlich</entry>
+  <entry key="196">Kommentar</entry>
+  <entry key="197">Speichern</entry>
+  <entry key="198">Öffnen</entry>
+  <entry key="199">Speichern unter</entry>
+  <entry key="200">Dateiname</entry>
+  <entry key="201">Dateiname</entry>
+  <entry key="202">Abbrechen</entry>
+  <entry key="203">Speichern</entry>
+  <entry key="204">Fehler</entry>
+  <entry key="205">Laden</entry>
+  <entry key="206">Objekte geladen</entry>
+  <entry key="207">Synchronisiere Benutzer. Restliche Benutzer:</entry>
+  <entry key="208">Lade Bilddaten</entry>
+  <entry key="209">Synchronisiere Benutzer. Restliche Benutzer:</entry>
+  <entry key="210">Zeichenbrett leeren</entry>
+  <entry key="211">Zeichenbrett leeren. Alle bisherigen Änderungen gehen damit verloren!</entry>
+  <entry key="212">Bestätigung anfordern vor dem Laden einer Datei</entry>
+  <entry key="213">Einladung versenden</entry>
+  <entry key="214">Einladung versenden</entry>
+  <entry key="215">Betreff</entry>
+  <entry key="216">Empfänger</entry>
+  <entry key="217">Nachricht</entry>
+  <entry key="218">Abschicken</entry>
+  <entry key="219">Abbrechen</entry>
+  <entry key="220">Senden</entry>
+  <entry key="221">Benutzerdaten</entry>
+  <entry key="222">Nickname für diese Konferenz</entry>
+  <entry key="223">Spitzname/Alias</entry>
+  <entry key="224">Vorname</entry>
+  <entry key="225">Nachname</entry>
+  <entry key="226">E-Mail</entry>
+  <entry key="227">Sprache</entry>
+  <entry key="228">Absenden</entry>
+  <entry key="229">Laden</entry>
+  <entry key="230">Daten werden geladen. Bitte warten!</entry>
+  <entry key="231">Falsches Passwort</entry>
+  <entry key="232">Bitte geben Sie ihr Passwort zweimal ein. Länge: mindestens 6 Buchstaben.</entry>
+  <entry key="233">Ungültige E-Mail</entry>
+  <entry key="234">Die angegebene E-Mail-Adresse ist ungültig</entry>
+  <entry key="235">Registration abgeschlossen</entry>
+  <entry key="236">Ihr Benutzer wurde angelegt. Sie können sich nun einloggen.</entry>
+  <entry key="237">Sie können Ihren Bildschirm im Moment nicht veröffentlichen, da dies bereits ein anderer Benutzer in diesem Konferenzraum tut.</entry>
+  <entry key="238">Veröffentlichung abgelehnt</entry>
+  <entry key="239">Desktop veröffentlichen</entry>
+  <entry key="240">Schlechte Bandbreite. Es war nicht möglich alle Bilder des Bildschirms zu laden. Tritt dieser Fehler häufiger auf können Sie den Moderator darum bitten, die Qualität zur verringern.</entry>
+  <entry key="241">Bildschirm von:</entry>
+  <entry key="242">Zeichnen</entry>
+  <entry key="243">Dokumente</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Dateien</entry>
+  <entry key="246">Benutzer</entry>
+  <entry key="247">Orginaldatei herunterladen</entry>
+  <entry key="248">PDF-Dokument herunterladen</entry>
+  <entry key="249">Präsentation in Zeichenbrett laden</entry>
+  <entry key="250">Konfiguration</entry>
+  <entry key="251">Objekt verschieben</entry>
+  <entry key="252">Objekt vergrößern/verkleinern</entry>
+  <entry key="253">%</entry>
+  <entry key="254">von</entry>
+  <entry key="255">zur ersten Seite springen</entry>
+  <entry key="256">zur vorherigen Seite springen</entry>
+  <entry key="257">zur nächsten Seite springen</entry>
+  <entry key="258">zur letzten Seite springen</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">Herr</entry>
+  <entry key="262">Frau</entry>
+  <entry key="263">Konfiguration</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Schlüssel</entry>
+  <entry key="266">Konfiguration</entry>
+  <entry key="267">Schlüssel</entry>
+  <entry key="268">Zuletzt bearbeitet</entry>
+  <entry key="269">Bearbeitet von</entry>
+  <entry key="270">Kommentar</entry>
+  <entry key="271">Schlüssel</entry>
+  <entry key="272">von</entry>
+  <entry key="273">Benutzer</entry>
+  <entry key="274">Benutzer aus Organisation entfernen</entry>
+  <entry key="275">Löschen</entry>
+  <entry key="276">Dieser Benutzer ist bereits Teil dieser Organisation.</entry>
+  <entry key="277">Neuigkeiten</entry>
+  <entry key="278">Quicklinks</entry>
+  <entry key="279">Zu den Konferenzräumen (max. 50 Teilnehmer)</entry>
+  <entry key="280">Zu den Eventräumen (unbegrenzte Zuschauer)</entry>
+  <entry key="281">Hilfe und Support</entry>
+  <entry key="282">http://openmeetings.apache.org//</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Fehler melden!</entry>
+  <entry key="285">Mehr</entry>
+  <entry key="286">Projekt im Netz (http://openmeetings.apache.org/)</entry>
+  <entry key="287">Benutzer Mailing Liste (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Login merken</entry>
+  <entry key="289">Dateien</entry>
+  <entry key="290">Meine Übersicht</entry>
+  <entry key="291">Meetings planen</entry>
+  <entry key="292">Meine Events</entry>
+  <entry key="293">Öffentliche Meetings</entry>
+  <entry key="294">Private Meetings</entry>
+  <entry key="295">Öffentliche Events</entry>
+  <entry key="296">Private Events</entry>
+  <entry key="297">Öffentliche Dateien</entry>
+  <entry key="298">Private Dateien</entry>
+  <entry key="299">Persönliche Dateien</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderation</entry>
+  <entry key="302">Moderation anfordern</entry>
+  <entry key="303">Umfrage</entry>
+  <entry key="304">Datei auswählen</entry>
+  <entry key="305">Einstellungen</entry>
+  <entry key="306">Kamera-/Mikro-Einstellungen</entry>
+  <entry key="307">Zeichenbrett-Einstellungen</entry>
+  <entry key="308">Verlassen</entry>
+  <entry key="309">Zurück zur Raum-Übersicht</entry>
+  <entry key="310">Abmelden</entry>
+  <entry key="311">Passwort zurücksetzen?</entry>
+  <entry key="312">Passwort zurücksetzen</entry>
+  <entry key="313">Bei E-Mail</entry>
+  <entry key="314">Bei Login</entry>
+  <entry key="315">E-Mail</entry>
+  <entry key="316">Login</entry>
+  <entry key="317">Dateien</entry>
+  <entry key="318">E-Mail mit Reset-Link versenden</entry>
+  <entry key="319">Geben Sie bitte entweder eine E-Mail oder einen Login an.</entry>
+  <entry key="320">Es gibt keinen Benutzer mit diesem Benutzernamen.</entry>
+  <entry key="321">Die E-Mail mit dem dazugehörigen Link wurde an Ihre E-Mail-Adresse gesandt. Bitte überprüfen Sie Ihren Posteingang. Falls Sie immer noch keine E-Mail erhalten haben, korrigieren Sie bitte Ihre Spam-Einstellungen und senden Sie die E-Mail nochmals.</entry>
+  <entry key="322">Fehler!</entry>
+  <entry key="323">Nachricht</entry>
+  <entry key="324">Ungültiger Hash.</entry>
+  <entry key="325">Passwort zurücksetzen</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">Passwort ändern</entry>
+  <entry key="328">Neues Passwort</entry>
+  <entry key="329">Passwort wiederholen</entry>
+  <entry key="330">Die von Ihnen angegebenen Passwörter sind nicht identisch.</entry>
+  <entry key="331">Benutzername oder Passwort sind zu kurz, bitte geben Sie mindestens folgende Anzahl an Zeichen für Benutzername / Passwort ein:</entry>
+  <entry key="332">Passwort gespeichert. Sie können sich nun damit einloggen.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Unbekannter Fehler. Bitte melden Sie das dem Service-Team.</entry>
+  <entry key="335">Benutzername nicht gefunden</entry>
+  <entry key="336">Ungültiges Passwort</entry>
+  <entry key="337">Erfolgreich ausgeloggt</entry>
+  <entry key="338">Registrierung ist ausgeschaltet.</entry>
+  <entry key="339">Ungültige E-Mail-Adresse</entry>
+  <entry key="340">Dieser Dateiname wird schon verwendet. Bitte geben Sie einen anderen an.</entry>
+  <entry key="341">Dateiname zu kurz</entry>
+  <entry key="342">Adresse konnte nicht gespeichert werden.</entry>
+  <entry key="343">Benutzer hinzugefügt. Vergessen Sie nicht diesem Benutzer auch eine Organisation hinzuzufügen. Benutzer ohne Organisation können sich nicht einloggen.</entry>
+  <entry key="344">Neuer Datensatz</entry>
+  <entry key="345">Es konnte kein Feld zu dieser ID ermittelt werden.</entry>
+  <entry key="346">Es konnte kein Label für diese ID ermittelt werden.</entry>
+  <entry key="347">Sie müssen Administrator sein, um diese Aktion auszuführen.</entry>
+  <entry key="348">Sprach-Editor</entry>
+  <entry key="349">Sprache</entry>
+  <entry key="350">Label-ID</entry>
+  <entry key="351">Label-Name</entry>
+  <entry key="352">Wert</entry>
+  <entry key="353">Feldwerte</entry>
+  <entry key="354">LabelName</entry>
+  <entry key="355">LabelWert</entry>
+  <entry key="356">Label-ID</entry>
+  <entry key="357">Sie haben nur das Label gelöscht nicht das Feld! Das Feld könnte noch Referenzen in anderen Sprachen beinhalten.</entry>
+  <entry key="358">Ungültige Labelid. FieldLanguagesvalues_Id kann in der Datenbank nicht gefunden werden.</entry>
+  <entry key="359">Sie können dieses Feld nicht löschen. Sie können nur Labels, nicht aber Felder löschen. Zur Zeit ist kein Label geladen, entweder ist kein Feld ausgewählt oder es gibt kein Label in dieser Sprache für das Feld.</entry>
+  <entry key="360">Exportieren</entry>
+  <entry key="361">Sie müssen sich neu anmelden, um Änderungen zu sehen.</entry>
+  <entry key="362">Neue Sprache anlegen</entry>
+  <entry key="363">Sprache löschen</entry>
+  <entry key="364">Neue Sprache anlegen</entry>
+  <entry key="365">Name</entry>
+  <entry key="366">Sprache anlegen</entry>
+  <entry key="367">Sicherung</entry>
+  <entry key="368">Zum Ersten</entry>
+  <entry key="369">Zum Letzten</entry>
+  <entry key="370">Zum Nächsten</entry>
+  <entry key="371">Zum Letzten</entry>
+  <entry key="372">Benutzer spricht (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">Sound an/ausschalten</entry>
+  <entry key="374">Übersicht</entry>
+  <entry key="375">Ihr Profil</entry>
+  <entry key="376">Hallo,</entry>
+  <entry key="377">Profil bearbeiten</entry>
+  <entry key="378">Ungelesene Nachrichten:</entry>
+  <entry key="379">Bild ändern</entry>
+  <entry key="380">Benutzerdaten - Exportieren</entry>
+  <entry key="381">Alle Organisationen müssen bereits vorhanden sein!</entry>
+  <entry key="382">Starte Export</entry>
+  <entry key="383">Nach Organisation</entry>
+  <entry key="384">Starte Export</entry>
+  <entry key="385">Benutzerdaten - Import</entry>
+  <entry key="386">Wählen Sie users.xml aus</entry>
+  <entry key="387">importiere</entry>
+  <entry key="388">Exportiere als XML - Diese Dateien können benutzt werden als: Beitrag zum Projekt - Import in ein anderes System - Sicherung - kundenspezifische Anpassung - Ablage im Sprachverzeichnins für Ihre nächste Installation.</entry>
+  <entry key="389">Wählen Sie eine Sprachdatei für den Import aus. Wählen Sie die passende Sprache aus der Combobox! Egal welchen Namen die Datei hat, sie wird in diese Sprache importiert!</entry>
+  <entry key="390">Import - Wählen Sie eine Datei aus</entry>
+  <entry key="391">Speichern unter</entry>
+  <entry key="392">Name:</entry>
+  <entry key="393">Kommentar:</entry>
+  <entry key="394">Speichern</entry>
+  <entry key="395">Aufnahmen</entry>
+  <entry key="396">Aufnahmen ansehen</entry>
+  <entry key="397">Aufnahmen aus allen Räumen</entry>
+  <entry key="398">Benutzer:</entry>
+  <entry key="399">Mitglied seit:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Benutzer in diesem Raum:</entry>
+  <entry key="402">Neu laden</entry>
+  <entry key="403">Dieser Raum ist voll. Bitte versuchen Sie es später noch einmal.</entry>
+  <entry key="404">Wählen Sie einen Raum aus, um Details zu erhalten.</entry>
+  <entry key="405">Chatten Sie mit Benutzern in diesem Raum:</entry>
+  <entry key="406">Raum:</entry>
+  <entry key="407">Benutzer in diesem Raum:</entry>
+  <entry key="408">Seit:</entry>
+  <entry key="409">Aufnahme abspielen</entry>
+  <entry key="410">Länge:</entry>
+  <entry key="411">Datum:</entry>
+  <entry key="412">Aufnahme! Sie können hier nichts mehr ändern ...</entry>
+  <entry key="413">Aufnahme abspielen</entry>
+  <entry key="414">Abspielen / Pause</entry>
+  <entry key="415">Aufnahme starten</entry>
+  <entry key="416">Aufnahme beenden</entry>
+  <entry key="417">Aufnahmen:</entry>
+  <entry key="418">Die Aufnahme ist bereits gestartet.</entry>
+  <entry key="419">Aufnahme gestartet von Benutzer:</entry>
+  <entry key="420">Abbrechen</entry>
+  <entry key="421">Aufnahme wird abgebrochen und nicht gespeichert.</entry>
+  <entry key="422">Fortsetzen</entry>
+  <entry key="423">Aufnahme fortsetzen</entry>
+  <entry key="424">Linienfarbe ändern</entry>
+  <entry key="425">Farbe auswählen</entry>
+  <entry key="426">Randfarbe de/aktivieren</entry>
+  <entry key="427">Füllfarbe ändern</entry>
+  <entry key="428">Füllfarbe de/aktivieren</entry>
+  <entry key="429">Linienstärke ändern</entry>
+  <entry key="430">Schließen</entry>
+  <entry key="431">Schriftgröße anpassen</entry>
+  <entry key="432">Aufnahme löschen</entry>
+  <entry key="433">Gäste</entry>
+  <entry key="434">Von:</entry>
+  <entry key="435">Name</entry>
+  <entry key="436">Raum</entry>
+  <entry key="437">Datum</entry>
+  <entry key="438">Abbrechen</entry>
+  <entry key="439">Start</entry>
+  <entry key="440">Name</entry>
+  <entry key="441">Datum</entry>
+  <entry key="442">Chatlog löschen</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">Nachricht abschicken</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Wählen Sie die Geräte aus:</entry>
+  <entry key="448">Ton und Video</entry>
+  <entry key="449">nur Ton (Mikrophon)</entry>
+  <entry key="450">nur Video (Webcam)</entry>
+  <entry key="451">kein Video/Ton (nur Profil-Bild)</entry>
+  <entry key="452">Kein Video/Ton veröffentlichen. Wählen Sie diese Einstellung wenn die verfügbare Bandbreite sehr niedrig ist.</entry>
+  <entry key="453">MO</entry>
+  <entry key="454">DI</entry>
+  <entry key="455">MI</entry>
+  <entry key="456">DO</entry>
+  <entry key="457">FR</entry>
+  <entry key="458">SA</entry>
+  <entry key="459">SO</entry>
+  <entry key="460">Montag</entry>
+  <entry key="461">Dienstag</entry>
+  <entry key="462">Mittwoch</entry>
+  <entry key="463">Donnerstag</entry>
+  <entry key="464">Freitag</entry>
+  <entry key="465">Samstag</entry>
+  <entry key="466">Sonntag</entry>
+  <entry key="467">KW</entry>
+  <entry key="468">Kalenderwoche</entry>
+  <entry key="469">Januar</entry>
+  <entry key="470">Februar</entry>
+  <entry key="471">März</entry>
+  <entry key="472">April</entry>
+  <entry key="473">Mai</entry>
+  <entry key="474">Juni</entry>
+  <entry key="475">Juli</entry>
+  <entry key="476">August</entry>
+  <entry key="477">September</entry>
+  <entry key="478">Oktober</entry>
+  <entry key="479">November</entry>
+  <entry key="480">Dezember</entry>
+  <entry key="481">Kalender</entry>
+  <entry key="482">Teilnehmerzahl</entry>
+  <entry key="483">Zeige Layouteinstellungen</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Breite | Höhe</entry>
+  <entry key="486">Video-Container</entry>
+  <entry key="487">Moderations-Container</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Whiteboard-Container</entry>
+  <entry key="490">Aktiviert</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Breite | Höhe</entry>
+  <entry key="493">Dateien-, Chat-, Teilnehmer-Container</entry>
+  <entry key="494">Aktiv</entry>
+  <entry key="495">X | Y</entry>
+  <entry key="496">Breite | Höhe</entry>
+  <entry key="497">Der Moderator hat den Raum verlassen. Sie müssen die Moderation beantragen wenn Sie auf das Zeichenbrett zeichnen wollen.</entry>
+  <entry key="498">Es gibt momentan keinen Moderator in diesen Raum. Sie müssen die Moderation beantragen oder warten.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Einladung</entry>
+  <entry key="501">Nachricht von Benutzer:</entry>
+  <entry key="502">Nachricht:</entry>
+  <entry key="503">Klicken Sie auf diesen Link, um in den Raum zu gelangen:</entry>
+  <entry key="504">Klicken Sie hier</entry>
+  <entry key="505">Wenn der Link fehlerhaft dargestellt wird, kopieren Sie bitte folgenden Link in die Adresszeile ihres Browsers:</entry>
+  <entry key="506">{0} Registrierung</entry>
+  <entry key="507">Ihre Benutzerdaten:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Pass:</entry>
+  <entry key="510">E-Mail:</entry>
+  <entry key="511">{0}-Team</entry>
+  <entry key="512">{0} Registrierung</entry>
+  <entry key="513">{0} - Passwort zurücksetzen</entry>
+  <entry key="514">Klicken Sie hier, um ein neues Passwort einzugeben:</entry>
+  <entry key="515">Klicken Sie hier</entry>
+  <entry key="516">Wenn der Link fehlerhaft dargestellt wird, kopieren Sie bitte folgenden Link in die Adresszeile Ihres Browsers:</entry>
+  <entry key="517">{0} Password Reset</entry>
+  <entry key="518">Bitte geben Sie ein gültiges Datum an, zum Beispiel 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">Bitte geben Sie eine gültige E-Mail an, zum Beispiel name@mail.com</entry>
+  <entry key="520">Bitte geben Sie eine Dezimalzahl an, zum Beispiel 1.00</entry>
+  <entry key="521">Bitte geben Sie eine Ganzzahl an, zum Beispiel 100</entry>
+  <entry key="522">Bitte geben Sie eine gültige Telefon-Nummer an, zum Beispiel ++49 0123 123123</entry>
+  <entry key="523">Bitte geben Sie eine gültige Uhrzeit an, zum Beispiel 12:23 (hh:mm)</entry>
+  <entry key="524">Passwort geschützt</entry>
+  <entry key="525">Passwort</entry>
+  <entry key="526">Gültigkeit</entry>
+  <entry key="527">Immer</entry>
+  <entry key="528">Zeitspanne</entry>
+  <entry key="529">Einmalig</entry>
+  <entry key="530">Gültig ab:</entry>
+  <entry key="531">Gültig bis:</entry>
+  <entry key="532">Einladung für diese Konferenz</entry>
+  <entry key="533">Keine Einladung für diesen Code</entry>
+  <entry key="534">Die Einladung ist nicht mehr gültig.</entry>
+  <entry key="535">Die Einladung ist nicht mehr gültig.</entry>
+  <entry key="536">Passwort:</entry>
+  <entry key="537">Überprüfen Sie das Passwort</entry>
+  <entry key="538">Falsches Passwort!</entry>
+  <entry key="539">Browser</entry>
+  <entry key="540">Ton/Video neu starten</entry>
+  <entry key="541">Sitzung abgelaufen oder ungültig.</entry>
+  <entry key="542">SessionId ist nicht eingeloggt oder hat keine Administratorrechte. Das SOAP Gateway benötigt einen Benutzer mit Admin-Rechten um einen neuen Nutzer einzubetten.</entry>
+  <entry key="543">Diese Sitzung steht mit keiner Remoteuser-Data in Verbindung. Entweder haben Sie das SOAP-Gateway vor dem Zugriff auf die Anwendung nicht gerufen oder Sie benutzen die falsche Sitzungs-ID</entry>
+  <entry key="544">Die Aufnahme von Meetings ist noch Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-Achse</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-Achse</entry>
+  <entry key="549">w</entry>
+  <entry key="550">Breite</entry>
+  <entry key="551">h</entry>
+  <entry key="552">Höhe</entry>
+  <entry key="553">Transparenz ändern</entry>
+  <entry key="554">Browser offen</entry>
+  <entry key="555">Browser geschlossen</entry>
+  <entry key="556">Die Verbindung zum Server ist abgebrochen. Prüfen Sie ihre Netzwerk-Verbindung und starten Sie die Anwendung neu.</entry>
+  <entry key="557">Pointer</entry>
+  <entry key="558">Synchronisiere</entry>
+  <entry key="559">Synchroniziere Benutzer, bitte warten Sie</entry>
+  <entry key="560">&lt;u&gt;Download als SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download als PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download als JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download als PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download als TIF&lt;/u&gt;</entry>
+  <entry key="565">Erinnerung</entry>
+  <entry key="566">Kategorie</entry>
+  <entry key="567">Wiederholung</entry>
+  <entry key="568">Keine</entry>
+  <entry key="569">Ort:</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">Ende</entry>
+  <entry key="572">Titel:</entry>
+  <entry key="573">Kommentar:</entry>
+  <entry key="574">Jemanden einladen</entry>
+  <entry key="575">täglich</entry>
+  <entry key="576">monatlich</entry>
+  <entry key="577">jährlich</entry>
+  <entry key="578">Terminstart muss vor Terminende liegen!</entry>
+  <entry key="579">Bitte geben Sie einen Titel an!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Aktivieren Sie die falls es sich um eine Eingabe einer Rechts-Nach-Links Sprache (arabisch, persich, hebräisch) handelt.</entry>
+  <entry key="582">Start</entry>
+  <entry key="583">Aufgenommene Konferenzen betrachten</entry>
+  <entry key="584">Meeting - Machen Sie eine Konferenz&lt;br/&gt;</entry>
+  <entry key="585">Event</entry>
+  <entry key="586">Benutzer, Konfiguration und Verwaltung</entry>
+  <entry key="587">Benutzer in diesem Raum</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Einloggen</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Lade Dokument. Bitte warten Sie bis alle Benutzer synchonisiert wurden.</entry>
+  <entry key="592">Dokument hochgeladen. Konvertiere ...</entry>
+  <entry key="593">Starte Upload</entry>
+  <entry key="594">Hochladen und importieren. Bitte wählen Sie eine Datei aus.</entry>
+  <entry key="595">Abbrechen</entry>
+  <entry key="596">Datei auswählen</entry>
+  <entry key="597">Verbindungen</entry>
+  <entry key="598">Wert</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Verbunden seit</entry>
+  <entry key="602">Raum / Bereich</entry>
+  <entry key="603">Ausloggen</entry>
+  <entry key="604">Benutzeranbindung ausloggen</entry>
+  <entry key="605">Wollen Sie diesen Benutzer wirklich von dieser Verbingung ausschließen?&lt;br/&gt; Diese Maßnahme entfernt den Benutzer lediglich aus dem Raum. Der Benutzer kann sich wieder einloggen.</entry>
+  <entry key="606">Ihre Sitzung wurde beendet.</entry>
+  <entry key="607">Telefon</entry>
+  <entry key="608">Benutzer ist Moderator dieses Raumes.</entry>
+  <entry key="609">Benutzer darf nicht auf dem Zeichenbrett zeichnen</entry>
+  <entry key="610">Neu starten von Ton/Video oder Einstellungen ändern</entry>
+  <entry key="611">Diesem Benutzer den Zugang zum Zeichenbrett gewähren.</entry>
+  <entry key="612">Diesem Benutzer den Zugang zum Zeichenbrett verwehren.</entry>
+  <entry key="613">Benutzer</entry>
+  <entry key="614">Dateien</entry>
+  <entry key="615">Zeichenbrett</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Ihr Benutzer-Profil ist Mitglied in mehreren Organisationen. Bitte wählen Sie eine für diese Sitzung.</entry>
+  <entry key="618">Der Raum ist im Moment voll. Bitte versuchen Sie es später noch einmal.</entry>
+  <entry key="619">Raumtyp</entry>
+  <entry key="620">Termin Raum</entry>
+  <entry key="621">Server Zeit</entry>
+  <entry key="622">{0} - Erinnerung</entry>
+  <entry key="623">Nachricht von Benutzer:</entry>
+  <entry key="624">Nachricht:</entry>
+  <entry key="625">Klicken Sie auf diesen Link um in den Raum zu gelangen [Der Link funktioniert erst 15 Minuten vor dem Meeting!]:</entry>
+  <entry key="626">Klicken Sie hier</entry>
+  <entry key="627">Wenn der Link fehlerhaft dargestellt wird, kopieren Sie bitte folgenden Link in die Adresszeile Ihres Browsers:</entry>
+  <entry key="628">Suche intern</entry>
+  <entry key="629">Externe Benutzer eingeben</entry>
+  <entry key="630">Vorname</entry>
+  <entry key="631">Name</entry>
+  <entry key="632">E-Mail</entry>
+  <entry key="633">Abmeldung bestätigen</entry>
+  <entry key="634">Wollen Sie sich wirklich ausloggen?</entry>
+  <entry key="635">Aktionen</entry>
+  <entry key="636">Demoraum</entry>
+  <entry key="637">Demo Zeit</entry>
+  <entry key="638">Meeting Zeitmesser</entry>
+  <entry key="639">Dies ist ein Demo-Raum. Um diesen Hinweis abzuschalten sollten Sie entweder einen privaten Meeting-Raum für Ihren persönlichen Zweck aufsuchen oder Ihren eigenen Server anlegen. Sie werden automatisch ausgeloggt in:</entry>
+  <entry key="640">Moderiert</entry>
+  <entry key="641">Bitte warten Sie bis der Moderator den Raum betreten hat. Der Moderator kann ein Lehrer, ein Administrator oder der Erschaffer dieses Raumes sein.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Einkommende Bildteilung</entry>
+  <entry key="644">Es gibt eine neue ankommende Bildteilung vom Benutzer:</entry>
+  <entry key="645">Beginne Teilung</entry>
+  <entry key="646">Füge ein neues Meeting hinzu</entry>
+  <entry key="647">Meeting Raum</entry>
+  <entry key="648">Event Raum</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderiere Benutzer</entry>
+  <entry key="651">Moderiere Räume</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Wollen Sie diesen Benutzer zum Moderator der Organisation ernennen?</entry>
+  <entry key="654">Bitte wählen Sie zuerst die Organisation aus bevor Sie einen Benutzer hinzufügen wollen!</entry>
+  <entry key="655">Organisation - Moderator</entry>
+  <entry key="656">Wollen Sie diesen Benutzer aus der Organisation wirklich löschen?</entry>
+  <entry key="657">Dieser Benutzer ist ein Moderator</entry>
+  <entry key="658">Dieser Benutzer ist kein Moderator</entry>
+  <entry key="659">Wollen Sie diesem Benutzer die Funktion des Moderators entziehen?</entry>
+  <entry key="660">Räume innerhalb der Organisation hinzufügen oder löschen</entry>
+  <entry key="661">Wollen Sie diese Aufnahme wirklich löschen?</entry>
+  <entry key="662">Wollen Sie diesen Benutzer aus Ihrer Organisation wirklich löschen? Sie werden nur die Verbindung zwischen dem Benutzer und Ihrer Organisation löschen können, um den Benutzer wirklich zu löschen brauchen Sie Administrator-Rechte.</entry>
+  <entry key="663">Sie können Ihren eigenen Nutzeraccount nicht löschen!</entry>
+  <entry key="664">Diese Methode benötigt ein Administrator-Account um aufgerufen zu werden.</entry>
+  <entry key="665">Es ist keine Sitzung mit dieser ID verbungen.</entry>
+  <entry key="666">Dies ist ein Administrator- oder Moderator-Account. Dieses Account können Sie nur mittels eines Administrator-Tableau bearbeiten.</entry>
+  <entry key="667">Um Ihre Registration abzuschließen klicken Sie bitte auf den folgenden Link. Oder kopieren Sie die URL(Link) in Ihre Browser-Adressleiste.</entry>
+  <entry key="668">Klicken Sie um Ihre E-Mail zu bestätigen</entry>
+  <entry key="669">Es wurde kein Benutzer für diesen Hash gefunden.</entry>
+  <entry key="670">Dieser Benutzer ist bereits aktiviert!</entry>
+  <entry key="671">Sie haben Ihr Account erfolgreich aktiviert!</entry>
+  <entry key="672">Jetzt einloggen</entry>
+  <entry key="673">Ihr Account ist nicht aktiviert. Benutzen Sie zuerst den Link in der E-Mail die Sie während der Registrierung erhalten haben.</entry>
+  <entry key="674">Sie haben sich erfolgreich angemeldet. Wir haben eine E-Mail mit einem Verifizierungscode an Ihre E-Mail-Adresse geschickt. Bitte überprüfen Sie Ihren Posteingang.</entry>
+  <entry key="675">Diesem Benutzer die Moderationsrechte entziehen.</entry>
+  <entry key="676">Diesem Benutzer Moderatoionsrechte übertragen</entry>
+  <entry key="677">Benutzer</entry>
+  <entry key="678">Zugang zum Zeichenbrett</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Wählen Sie einen Benutzer aus der Liste um ihm den Zugriff auf Zeichenbrett, Moderation oder Video zu ermöglichen.</entry>
+  <entry key="681">Dieser Benutzer ist bereits Moderator. Er hat automatisch das Recht zu zeichnen.</entry>
+  <entry key="682">Das sind Sie! Sie können Ihre eigenen Moderatorrechte nicht entfernen.</entry>
+  <entry key="683">Erlaube diesem Benutzer sein Video/ Audio zu veröffentlichen</entry>
+  <entry key="684">Audio/Video von diesem Benutzer entfernen</entry>
+  <entry key="685">Ich würde gerne die Moderation dieses Raumes übernehmen.</entry>
+  <entry key="686">Ich würde gerne auf dem Zeichenbrett zeichnen.</entry>
+  <entry key="687">Ich würde gerne mein Audio/Video mit anderen teilen</entry>
+  <entry key="688">Sie sind der Moderator dieses Raumes</entry>
+  <entry key="689">Ihnen ist es erlaubt, auf dem Zeichenbrett zu zeichnen</entry>
+  <entry key="690">Ihnen ist es erlaubt, Ihr Audio/Video mit anderen zu teilen</entry>
+  <entry key="691">Nachricht an den Moderator</entry>
+  <entry key="692">Der Benutzer</entry>
+  <entry key="693">würde gerne die Moderation übernehmen.</entry>
+  <entry key="694">würde gerne auf dem Zeichenbrett zeichnen.</entry>
+  <entry key="695">würde gerne sein Audio/Video mit anderen teilen.</entry>
+  <entry key="696">Sie müssen warten bis der Moderator den Raum betritt.</entry>
+  <entry key="697">Abbruch</entry>
+  <entry key="698">Speichern</entry>
+  <entry key="699">Tag</entry>
+  <entry key="700">Monat</entry>
+  <entry key="701">Jahr</entry>
+  <entry key="702">Datei hochladen</entry>
+  <entry key="703">Ordner hinzufügen</entry>
+  <entry key="704">Aktualisieren</entry>
+  <entry key="705">Papierkorb (Ziehen Sie eine Datei mit der Maus hierher)</entry>
+  <entry key="706">Meine Dateien (persönliches Laufwerk)</entry>
+  <entry key="707">Konferenzdokumente (öffentliches Laufwerk)</entry>
+  <entry key="708">Datei hinzufügen</entry>
+  <entry key="709">Ordner hinzufügen</entry>
+  <entry key="710">Ordner löschen</entry>
+  <entry key="711">Name bearbeiten</entry>
+  <entry key="712">Neuer Ordner</entry>
+  <entry key="713">Sind Sie sicher, dass Sie dieses Element löschen wollen?</entry>
+  <entry key="714">Suche</entry>
+  <entry key="715">Suche</entry>
+  <entry key="716">Dokument öffnen</entry>
+  <entry key="717">Zeige alle Dateien (Baum Ansicht)</entry>
+  <entry key="718">Dokument schließen</entry>
+  <entry key="719">Datei löschen</entry>
+  <entry key="720">Es ist Ihnen nicht gestattet auf dem Zeichenbrett zu zeichnen. Sie müssen Moderator sein oder zumindest das Recht besitzen das Zeichenbrett zu bearbeiten. Sie können den Moderator nach den Rechten fragen.</entry>
+  <entry key="721">Dokumenteigenschaften</entry>
+  <entry key="722">Starte Client (extern)</entry>
+  <entry key="723">Starte Client (HTTP)</entry>
+  <entry key="724">Ein Benutzer will seinen Desktop freigeben. Wollen Sie ihn sehen?</entry>
+  <entry key="725">Sie haben ihren Desktop freigegeben. Wenn Sie die Freigabe beenden wollen drücken Sie die Anhalten-Schaltfläche im Desktop Sharer.</entry>
+  <entry key="726">Geteilte Sitzung</entry>
+  <entry key="727">Sie haben Ihren Desktop bereits freigegeben!</entry>
+  <entry key="728">Desktop-Betrachter</entry>
+  <entry key="729">Beenden</entry>
+  <entry key="730">Desktop-Teiler</entry>
+  <entry key="731">Drücken Sie Start, um ihren Desktop freizugeben</entry>
+  <entry key="732">Start</entry>
+  <entry key="733">Anhalten</entry>
+  <entry key="734">Wählen Sie einen Bildschirmbereich aus:</entry>
+  <entry key="735">Breite ändern</entry>
+  <entry key="736">Die Freigabe wurde beendet!</entry>
+  <entry key="737">Höhe ändern</entry>
+  <entry key="738">X-Abstand</entry>
+  <entry key="739">Y-Abstand</entry>
+  <entry key="740">Breite:</entry>
+  <entry key="741">Höhe:</entry>
+  <entry key="742">Die Verbindung wurde vom Server abgebrochen.</entry>
+  <entry key="743">Abbrechen</entry>
+  <entry key="744">Extern starten</entry>
+  <entry key="745">Wenn Sie diese Session schließen, können Sie die Session nicht wieder starten.</entry>
+  <entry key="746">Sitzung wirklich schließen?</entry>
+  <entry key="747">Bildschirm teilen</entry>
+  <entry key="748">Sitzung aufnehmen</entry>
+  <entry key="749">Geteiltes surfen</entry>
+  <entry key="750">Upsa, ... Firefox unter Windows ist nicht in der Lage, mangelfreies Co-Browsing zu gewährleisten. Bitte benutzen Sie einen anderen Browser um die Co-Browsing-Funktion zu nutzen.</entry>
+  <entry key="751">Vorherige</entry>
+  <entry key="752">Nächste</entry>
+  <entry key="753">Nachladen</entry>
+  <entry key="754">Heim</entry>
+  <entry key="755">Laden</entry>
+  <entry key="756">Diese Webseite als vorgegebene Webseite zu meinem Profil hinzufügen.</entry>
+  <entry key="757">Teste Setup</entry>
+  <entry key="758">Überprüfen Sie Ihre Mikrofon- und Kameraeinstellungen bevor Sie einen Raum betreten und Aufzeichnungen durchführen. Sie können Ihre Aufnahmen im Nachhinein abspielen.</entry>
+  <entry key="759">Dieses Fenster nicht wieder anzeigen</entry>
+  <entry key="760">Abbrechen</entry>
+  <entry key="761">Beginne Konferenz</entry>
+  <entry key="762">Nicht wieder fragen</entry>
+  <entry key="763">Aufnahme</entry>
+  <entry key="764">Abspielen</entry>
+  <entry key="765">Sie können auch ohne einen Test fortfahren, falls Sie beabsichtigen Ihre Stimme oder Ihr Bild nicht zu veröffentlichen. Kursteilnehmer ohne Video oder Audio können dennoch das Zeichenbrett benutzen, ihren Desktop mit anderen teilen oder am Chat teilnehmen.</entry>
+  <entry key="766">Stop</entry>
+  <entry key="767">Lautstärke</entry>
+  <entry key="768">Start drücken</entry>
+  <entry key="769">Konferenz starten</entry>
+  <entry key="770">Event starten</entry>
+  <entry key="771">Raum wählen</entry>
+  <entry key="772">Prüfe Setup</entry>
+  <entry key="773">Starte Konferenz</entry>
+  <entry key="774">Wie starte ich eine Konferenz</entry>
+  <entry key="775">Starte Aufnahme</entry>
+  <entry key="776">Audio-/Video-Test (Aufnahme) vor dem Betreten einer Konferenz nicht zeigen</entry>
+  <entry key="777">Öffentliche Räume</entry>
+  <entry key="778">Öffentliche Räume können von allen Benutzern benutzt werden.</entry>
+  <entry key="779">Gruppenräume</entry>
+  <entry key="780">Private Räume sind nur für Benutzer in der selben Organisation verfügbar.</entry>
+  <entry key="781">Private Räume</entry>
+  <entry key="782">Räume in diesem Bereich sind für den persönlichen Bedarf. Die Räume haben ein Start und Enddatum und stehen nur in diesem Zeitraum zur Verfügung.</entry>
+  <entry key="783">Sie müssen Moderator sein, um diese Aktion auszuführen.</entry>
+  <entry key="784">Moderation beantragen</entry>
+  <entry key="785">Zeichenbrett beantragen</entry>
+  <entry key="786">WebCam/Mikrofon beantragen</entry>
+  <entry key="787">Dieser SessionHasgh wird bereits genutzt. Er kann nicht zweifach vergeben werden.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Wollen Sie die Konferenz wirklich verlassen? Vielleicht sollten Sie zuerst Dokumente, Zeichenbrett und Chat History leeren. Andernfalls werden die Dateien einfach in diesem Raum bis zu Ihrem nächsten Besuch bleiben.</entry>
+  <entry key="791">Konferenz beenden</entry>
+  <entry key="792">Räume</entry>
+  <entry key="793">Wählen Sie einen Raum für die Konferenz aus</entry>
+  <entry key="794">Es ist ein nicht gespeichertes Event im Kalender. Speichern Sie es oder löschen Sie es wieder.</entry>
+  <entry key="795">Bitte fügen Sie mindestens einen Teilnehmer zum Event.</entry>
+  <entry key="796">Soll dieses Event wirklich aus dem Kalender gelöscht werden?</entry>
+  <entry key="797">Warnung</entry>
+  <entry key="798">Neues Event</entry>
+  <entry key="799">Tag</entry>
+  <entry key="800">Woche</entry>
+  <entry key="801">Monat</entry>
+  <entry key="802">Beschreibung</entry>
+  <entry key="803">Teilnehmer</entry>
+  <entry key="804">{0}, Ihre Web Konferenz Plattform. Entweder starten Sie sofort ein Meeting indem Sie den 1-2-3 Anweisungen folgen oder Sie benutzen "Meetings planen" um eine Konferenz zu planen.</entry>
+  <entry key="805">Konferenz planen</entry>
+  <entry key="806">Um eine Konferenz zu planen können Sie einen Event im Kalender hinzufügen.</entry>
+  <entry key="807">Brauchen Sie Hilfe?</entry>
+  <entry key="808">Webinar</entry>
+  <entry key="809">Suche</entry>
+  <entry key="810">Ok</entry>
+  <entry key="811">Es ist kein Benutzer ausgewählt. Wählen Sie zuerst einen Benutzer und drücken dann Ok.</entry>
+  <entry key="812">Teilnehmer hinzufügen</entry>
+  <entry key="813">Speichern</entry>
+  <entry key="814">Löschen</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderatoren</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Neuen Default-Moderator hinzufügen</entry>
+  <entry key="822">Ist Super-Moderator</entry>
+  <entry key="823">In einem moderierten Raum sind Nutzer mit den Rollen Level-Moderator oder Administrator beim Betreten des Raums automatisch Moderatoren. Um dies abzuschalten, verwenden Sie die Funktion Default-Moderator.</entry>
+  <entry key="824">Der Super-Moderator ist beim Betreten eines Raums immer Moderator. Das Recht kann ihm im Raum nicht genommen werden.</entry>
+  <entry key="825">Nutzer Super-Moderatorrechte zuweisen</entry>
+  <entry key="826">Nutzer Super-Moderatorrechte aberkennen</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Wenn eine Organisation einen Raum zugewiesen wird, haben nur Mitglieder der Organisation Zugang. (Dies gilt nur wenn die Einstellung isPublic auf false gesetzt wurde!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Begrenzungen</entry>
+  <entry key="831">Organisation</entry>
+  <entry key="832">Sind Sie sicher?</entry>
+  <entry key="833">Wirklich löschen? Diese Aktion kann nicht wiederufen werden.</entry>
+  <entry key="834">Es wurde kein Nutzer ausgewählt. Bitte erst auswählen, um ihn hinzuzufügen!</entry>
+  <entry key="835">Neuen Default-Moderator hinzufügen</entry>
+  <entry key="836">Soll dieser Nutzer Super-Moderation werden? Super-Moderatorenrechte können nicht gelöscht werden. Zum Speichern der Einstellungen muss das Raumobjekt gespeichert werden!</entry>
+  <entry key="837">Sollen die Super-Moderatorenrechte für diesen Nutzer aufgehoben werden? Zum Speichern der Einstellungen muss das Raumobjekt gespeichert werden!</entry>
+  <entry key="838">Dies ist ein Super-Moderator. Sie können die Moderationsrechte dem Nutzer nicht entziehen!</entry>
+  <entry key="839">Wollen Sie wirklich diese Datei oder Ordner löschen?</entry>
+  <entry key="840">Datei/Ordner löschen?</entry>
+  <entry key="841">Fräulein</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Einstellungen</entry>
+  <entry key="844">Teilnehmern Mauszeiger anzeigen</entry>
+  <entry key="845">Audio mit SIP Applet übertragen</entry>
+  <entry key="846">Audio mit SIP aud Video mit Flash übertragen</entry>
+  <entry key="847">Vollformat</entry>
+  <entry key="848">Bildschirm zeigen</entry>
+  <entry key="849">Der Nutzer</entry>
+  <entry key="850">möchte den Bildschirm übertragen. Wollen Sie ihn sehen?</entry>
+  <entry key="851">Schließen</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">Die Sitzung wurde vom übertragenden Nutzer geschlossen!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">Neuer Desktop verfügbar</entry>
+  <entry key="856">Minimieren</entry>
+  <entry key="857">Maximieren</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Video Zeitspur</entry>
+  <entry key="860">Meine Aufnahmen</entry>
+  <entry key="861">Öffentliche Aufnahmen</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Länge</entry>
+  <entry key="865">Datum</entry>
+  <entry key="866">Von</entry>
+  <entry key="867">Download</entry>
+  <entry key="868">Haupt - Video</entry>
+  <entry key="869">Aufnahmen</entry>
+  <entry key="870">Sie können gleichzeitig ihren Bildschirm teilen ode die komplette Session aufnehmen. Wenn Sie nur den Bildschirm teilen wollen genügt esauf Start zu drücken. Die fertige Aufnahme befindet sich bei den anderen Aufnahmen im öffentlichen Ordner.</entry>
+  <entry key="871">Aufnahme starten</entry>
+  <entry key="872">Aufnahme stoppen</entry>
+  <entry key="873">Download FLV-Datei</entry>
+  <entry key="874">Raum</entry>
+  <entry key="875">Abspielen</entry>
+  <entry key="876">Stopp</entry>
+  <entry key="877">Teilnehmer hat das Mikrofon an</entry>
+  <entry key="878">Bildschirm teilen stoppen</entry>
+  <entry key="879">Benutzerfragen erlauben</entry>
+  <entry key="880">Wenn Sie diese Option aktivieren ist die Schaltfläche zum beantragen der Moderation für andere Teilnehmer nicht sichtbar und Sie werden nicht in ihrem Vortrag gestört.</entry>
+  <entry key="881">Rechte</entry>
+  <entry key="882">Download AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Nur Audio nur</entry>
+  <entry key="887">Es gab Fehler beim Verarbeiten der Aufzeichnung.</entry>
+  <entry key="888">Die Aufzeichnung ist noch nicht zur Wiedergabe bereit. Versuchen Sie es in einigen Minuten erneut.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Nachricht</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet ist nicht bereit</entry>
+  <entry key="893">SIP-Account Einstellungen</entry>
+  <entry key="894">SIP Einstellungen für jeden Nutzer. De-Aktivieren Sie SIP über Administration &gt; Konfiguration (Key: enable_sip). Die SIP Daten für jeden Nutzer sollten automatisch generiert werden. Sie können diese neu erstellen lassen über die Funktion "Re-Generate/Wieder Herstellen der SIP Daten"</entry>
+  <entry key="895">SIP-Nutzer</entry>
+  <entry key="896">Sip-Passwort</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">Der Login zum SIP Gateway ist fehlgeschlagen. Prüfen Sie die Authentifizierungsdaten zum SIP-Provider und die SIP-Account Daten für jeden Nutzer. Als Administrator können Sie sich enloggen und die Konfiguration überprüfen. Nur Nutzer und Moderatoren sind derzeit von den Aktionen ausgeschlossen.</entry>
+  <entry key="899">Der Login zum SIP Gateway ist fehlgeschlagen. Kontakten Sie das SerrviceTeam.</entry>
+  <entry key="900">Am SIP-Gateway einloggen...</entry>
+  <entry key="901">Am SIP-Gateway einloggen ...</entry>
+  <entry key="902">Log anzeigen</entry>
+  <entry key="903">Log-Mitteilungen früherer Aufzeichnungen</entry>
+  <entry key="904">SIP-Applet Mitteilungen</entry>
+  <entry key="905">Das SIP-Applet ist nicht bereit. Applet bitte bestätigen und dann 'OK' klicken.</entry>
+  <entry key="906">Moderation bekommen</entry>
+  <entry key="907">Terminänderungen speichern</entry>
+  <entry key="908">Der Termin wurde geändert. Wollen Sie die Änderungen nun speichern? &lt;br/&gt;&lt;br/&gt;Alle Teilnehmer des Termins erhalten nun eine Benachrichtigung per E-Mail mit den neuen Daten (abhängig vom Benachrichtigungstyp).</entry>
+  <entry key="909">Zugriff zu anderen Aufzeichnungen über {0} Application.</entry>
+  <entry key="910">Nutzer für dieses Video auswählen</entry>
+  <entry key="911">Verfügbare Nutzer für dieses Pod</entry>
+  <entry key="912">Sie sind Moderator dieses Interview. Sie legen die Sprecher fest und können die Aufzeichnung starten und stoppen.</entry>
+  <entry key="913">Aufzeichnung starten</entry>
+  <entry key="914">Aufzeichnung stoppen</entry>
+  <entry key="915">Die Interviewaufzeichung wurde bereits gestartet.</entry>
+  <entry key="916">Die Aufzeichung wurde bereits gestoppt oder noch nicht gestartet.</entry>
+  <entry key="917">Die Aufzeichnung des Interviews wurde bereits gestartet.</entry>
+  <entry key="918">Abbrechen</entry>
+  <entry key="919">Die Nachbearbeitung eines Interview benötigt fünf Minuten für jede aufgezeichnete Minute. Die Anzeige zeigt den Fortschritt:</entry>
+  <entry key="920">Sie müssen das Passwort erneut eingeben, um SIP Daten automatisch zu erzeugen.</entry>
+  <entry key="921">SIP Daten neu erzeugen</entry>
+  <entry key="922">Sie können die Datei oder Ordner nicht in einen eigenen Unterordner verschieben.</entry>
+  <entry key="923">Größe Homeverzeichnis</entry>
+  <entry key="924">Größe öffentliches Verzeichnis</entry>
+  <entry key="925">Lizenzeinstellungen</entry>
+  <entry key="926">Mit der Lizenzaktivierung können Sie ein Ablaufdatum oder eine Höchstnutzungszeit (Minuten) für Nutzer festlegen.</entry>
+  <entry key="927">Lizenz prüfen</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Ablaufdatum</entry>
+  <entry key="930">Verbrauchte Sekunden</entry>
+  <entry key="931">Gesamtzeit</entry>
+  <entry key="932">Ihre Lizenz ist abgelaufen. Sie können weitere Minuten ((Pay-per-minute) oder eine Flatate erwerben.</entry>
+  <entry key="933">Click-and-buy</entry>
+  <entry key="934">Restzeit für Account:</entry>
+  <entry key="935">Nutzerlizenzinformation</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Schließen</entry>
+  <entry key="938">Ihre Lizenz ist abgelaufen. Sie können weitere Minuten ((Pay-per-minute) oder eine Flatate erwerben.</entry>
+  <entry key="939">Lizenzeinstellungen</entry>
+  <entry key="940">Sie können entweder Nutzungszeit für Webkonferenzen (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; oder eine Volumenflatrate für 3-12 Monate erwerben. &lt;br/&gt;&lt;br/&gt;Der Versand von Einladungen mit direktem Link zum Konferenzraum oder dasErstellen von Konferenzräumen mittels Kalender für externe Nutzer ist nur mit einer Volumenflatrate zulässig.</entry>
+  <entry key="941">60 Minuten 9,99 EURO (16 Cent pro Minute) kaufen</entry>
+  <entry key="942">5 Stunden 19,99 EURO (6 Cent pro Minute) kaufen</entry>
+  <entry key="943">3 Monate für 29,99 EURO (9,99 Euro pro Monat) kaufen</entry>
+  <entry key="944">6 Monate fürr 39,99 EURO (6,66 Euro pro Monat) kaufen</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volumenflatrate</entry>
+  <entry key="947">Sie haben eine unbegrenzte Lizenz</entry>
+  <entry key="948">Ablaufdatum Ihrer Lizenz:</entry>
+  <entry key="949">Sie nutzen das Pay-per-minute-Modell. Sie haben noch:</entry>
+  <entry key="950">Neue einkaufen!</entry>
+  <entry key="951">Wollen Sie einen eigenen Server?</entry>
+  <entry key="952">Sie wünschen {0} als eigenständige Installation oder integriert in Moodle, SugarCRM, Website oder Intranet? Beginnen Sie ab 500 Euro.</entry>
+  <entry key="953">Oder senden Sie uns eine Nachricht</entry>
+  <entry key="954">Antwort an:</entry>
+  <entry key="955">Nachricht:</entry>
+  <entry key="956">Senden</entry>
+  <entry key="957">Kontaktinformationen und Preise? Klicken Sie hier</entry>
+  <entry key="958">Kreditkartendetails</entry>
+  <entry key="959">Vorname</entry>
+  <entry key="960">Nachname</entry>
+  <entry key="961">Kreditkartentyp</entry>
+  <entry key="962">VISA Karte</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Kreditkartennummer</entry>
+  <entry key="967">Ablaufdatum</entry>
+  <entry key="968">Kartenprüfnummer</entry>
+  <entry key="969">Rechnungsanschrift</entry>
+  <entry key="970">Adresse</entry>
+  <entry key="971"></entry>
+  <entry key="972">Stadt</entry>
+  <entry key="973">Land</entry>
+  <entry key="974">Staat (nur US)</entry>
+  <entry key="975">PLZ</entry>
+  <entry key="976">Betrag</entry>
+  <entry key="977">Abschicken</entry>
+  <entry key="978">Schritt 1: {0} - Zahlungsformular</entry>
+  <entry key="979">E-Mail</entry>
+  <entry key="980">Klicken Sie auf "Zahlen mit Paypal".&lt;br/&gt; Paypal akzeptiert VISA, MasterCard, Discover oder American Express. &lt;br/&gt;Sie müssen sich dazu nicht bei Paypal registrieren. &lt;br/&gt;Nutzer aus Deutschland können auch per Lastschrift-Einzug zahlen.</entry>
+  <entry key="981">Vielen Dank für Ihren Einkauf von {0}. &lt;br/&gt; &lt;br/&gt; Sobald die Zahlung bei uns eingetroffen ist wird Ihr Account aktualisiert.&lt;br/&gt; Sie erhalten eine E-Mail mit Ihrer Rechnung als PDF.&lt;br/&gt;Die aktuelle und frühere Transaktionen sind in Ihren Profileinstellungen dokumentiert.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Sie können dieses browserfenster/den Tab nun schließen und zu {0} zurückkehren.</entry>
+  <entry key="982">Abschicken Kauf bestätigen.</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Schritt: {0} Bezahlung - Bestellung prüfen und kaufen.</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Zahlung erhalten.</entry>
+  <entry key="987">Guten Tag,</entry>
+  <entry key="988"></entry>
+  <entry key="989">Vielen Dank für die Nutzung von {0}!</entry>
+  <entry key="990">Zahlung erhalten {0} -</entry>
+  <entry key="991">Zahlungen und Transaktionsstatus</entry>
+  <entry key="992">Transaktions-Hash</entry>
+  <entry key="993">Minuten</entry>
+  <entry key="994">Monate</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Rechnung</entry>
+  <entry key="998"></entry>
+  <entry key="999">Zum Versand von Einladungen oder zur Erstellung von Sitzungen über den Kalender benötigen Sie eine Volumenflatrate. Mit Pay-per-minute Tarifen können Sie selber das Angebot von {0} nutzen, nicht aber Dritte zur Teilnahme an einem Meeting einladen.</entry>
+  <entry key="1000">Diese E-Mail-Adresse wird bereits durch einen anderen Nutzer verwandt.</entry>
+  <entry key="1001">SIP-Einstellungen</entry>
+  <entry key="1002">Die Konferenznummer und PIN ist automatisch über das OpenXG RPC-Gateway erstellt worden.</entry>
+  <entry key="1003">SIP Nummer</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Nur auf aktueller Seite löschen.</entry>
+  <entry key="1006">Nur die URL der Statusanzeige wird an Teilnehmer versandt.</entry>
+  <entry key="1007">Teamräume [Breakout session] erstellen</entry>
+  <entry key="1008">Nutzer für neuen Teamraum auswählen</entry>
+  <entry key="1009">Sie können nun Teilnehmer auswählen und für diese einen Konferenzraum (Teamraum) anlegen. Die ausgewählten Teilnehmer werden direkt in den Raum verschoben oder benachrichtigt. Moderateoren in den Teamräumen erhalten eine Liste ihrer aktuellen Räume, um zwischen diesen zu wechseln falls ein Moderator benötigt wird.</entry>
+  <entry key="1010">Nutzername</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Nutzer für neuen Teamrraum:</entry>
+  <entry key="1014">Teamraum anlegen</entry>
+  <entry key="1015">Abbrechen</entry>
+  <entry key="1016">Wählen Sie zumindest einen Nutzer für den Teamraum</entry>
+  <entry key="1017">In Team einfügen</entry>
+  <entry key="1018">Aus Teamraum austragen</entry>
+  <entry key="1019">Nutzer hat Moderatorenrolle im Teamraum. Er ist zur Verwaltung des Teamraums berechtigt und kann Teilnehmer zulassen.</entry>
+  <entry key="1020">Raumtyp</entry>
+  <entry key="1021">Wenn Sie "Wechseln in neuen Teamraum erzwingen" anklicken erden alle Nutzer automatisch in diesen Raum übertragen. Andernfalls erhalten sie eine Benachrichtigung mit einem Button und &lt;i&gt;können&lt;/i&gt; wählen, ob sie in den neuen Raum wechseln wollen. Teammoderatoren haben immer die Wahl zu entscheiden,ob sie wechseln wollen.</entry>
+  <entry key="1022">Teamräume verwalten</entry>
+  <entry key="1023">Als Teamraummoderator können Sie zwischen allen Räumen wechseln, denen Sie zugewiesen wurden. Teilnehmer in Teamräumen können Ihnen eine Nachricht senden, uz.B. um Sie zu bitten Ihnen behilflich zu sein. Sie können die Teamräume auch beschränken und Nutzer ausloggen.</entry>
+  <entry key="1024">Wechseln in neuen Teamraum erzwingen</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Erstellt</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Verfügbare Nutzer</entry>
+  <entry key="1030">Mit Pluszeichen Nutzer hinzufügen; mit Kreuz austragen.</entry>
+  <entry key="1031">1. Teamraumeinstellungen</entry>
+  <entry key="1032">2. Nutzer zu Teamraum hinzufügen</entry>
+  <entry key="1033">Titel Teamraum</entry>
+  <entry key="1034">Teamraum</entry>
+  <entry key="1035">In Raum wechseln</entry>
+  <entry key="1036">In diesen Teamraum wechseln</entry>
+  <entry key="1037">Teamraum schließen und alle Nutzer ausloggen</entry>
+  <entry key="1038">Neuer Teamraum</entry>
+  <entry key="1039">Ein neuer Teamraum wurde für Sie angelegt.</entry>
+  <entry key="1040">In Teamraum wechseln</entry>
+  <entry key="1041">Teamraumaktionen</entry>
+  <entry key="1042">Sie können dieses Fenster erneut öffnen über das Hauptmenu &gt; Aktionen.</entry>
+  <entry key="1043">Mitteilung an Teamraummoderator versenden</entry>
+  <entry key="1044">Neuer Teamraum</entry>
+  <entry key="1045">Ein neuer Teamraum steht zur Verfügung. Sie können nun in diesen Raum wechseln. Teamräume sind Bereiche für Arbeitsgruppen. Sie haben zusätzlich die Möglichkeit, einen Moderator um Hilfe zu bitten. Der Teamraum wird ihnen auch in der Übersicht "Meine Meetings" angezeigt.</entry>
+  <entry key="1046">In Teamraum wechseln</entry>
+  <entry key="1047">Erstelltvon:</entry>
+  <entry key="1048">Name des Teamraums:</entry>
+  <entry key="1049">Dieses Fenster bleibt offen auch wenn Sie den Teamraum verlassen.</entry>
+  <entry key="1050">Nutzer dieses Teamraums</entry>
+  <entry key="1051">3. Andere Teamräume auf die Sie Zugriff haben</entry>
+  <entry key="1052">Teammoderator Nachricht senden. Nutzen Sie diese Möglichkeit falls Sie Hilfe benötigen oder eine Frage haben.</entry>
+  <entry key="1053">Senden</entry>
+  <entry key="1054">2. Eingeladene Nutzer für diesen Teamraum</entry>
+  <entry key="1055">ist Teamraummoderator</entry>
+  <entry key="1056">Alle vom Moderator eingeladenen Nutzer für diesen Teamraum.</entry>
+  <entry key="1057">Zur Zeit ist kein Teammoderator eingeloggt.</entry>
+  <entry key="1058">Bitte Nachricht eintragen</entry>
+  <entry key="1059">Bitte helfen Sie uns. Wir haben ein Problem im Teamraum.</entry>
+  <entry key="1060">Ein Nutzer des Teamraums bittet Sie um Unterstützung.</entry>
+  <entry key="1061">Teamraum Unterstützungsanfrage</entry>
+  <entry key="1062">Mitteilung:</entry>
+  <entry key="1063">Von:</entry>
+  <entry key="1064">Sie befinden sich derzeit in keinem Teamraum. Von hier aus können Sie in jeden Teamraum wechseln auf den Sie Zugriff haben.</entry>
+  <entry key="1065">Systembackup. Das Backup schließt alle von Nutzern erzeugten Daten ein. Die Konfiguration wird nicht ins Backup einbezogen, da diese Daten mit der Systeminstallation erstellt werden. Zum Update des Systems exportieren Sie das alte System (1), installieren Sie das neue Systempaket in eine neue Datenbank (2) und imporieren Sie das Backup des alten Systems (3). Achten Sie darauf, das Backup vorzunehmen, bevor im neuen System neue Daten erzeugt werden.</entry>
+  <entry key="1066">Systembackup</entry>
+  <entry key="1067">Bildschirm teilen/Aufzeichnung Nutzern erlauben</entry>
+  <entry key="1068">Bildschirm teilen/aufzeichnen Nutzern untersagen</entry>
+  <entry key="1069">Nutzer ist Moderator. Er kann alles tun.</entry>
+  <entry key="1070">möchte Bildschirm zeigen/aufzeichnen.</entry>
+  <entry key="1071">Sie können den Bildschirm teilen /aufzeichnen</entry>
+  <entry key="1072">Anfrage zum Teilen/Aufzeichnen des Bildschirms.</entry>
+  <entry key="1073">Erlauben/untersagen Bildschirm zu teilen/aufzuzeichnen.</entry>
+  <entry key="1074">Ton abschalten</entry>
+  <entry key="1075">Ton anschalten</entry>
+  <entry key="1076">Raum nur mit Audio</entry>
+  <entry key="1077">Mit dieser Funktion erlauben Sie im Raum nur Audioübertragung und schalten Video ab. Dies kann sinnvoll sein, um Bandbreite zu reduzieren.</entry>
+  <entry key="1078">Remote Control erlauben (während Bildschirmübertragung)</entry>
+  <entry key="1079">Remote Control untersagen (während Bildschirmübertragung)</entry>
+  <entry key="1080">Remote Control Screen-Berechtigung anfragen (während Bildschirmübertragung)</entry>
+  <entry key="1081">Sie sind berechtigt zu Remote Control Screen (während Übertragung)</entry>
+  <entry key="1082">bittet um Zugriff auf remote control screen.</entry>
+  <entry key="1083">Nutzer ist Moderator. Er kann alles tun. [Remote Desktop Control]</entry>
+  <entry key="1084">Erlauben/untersagen Recht auf Remote Control Screen (Während Bildschirmübertragung)</entry>
+  <entry key="1085">1. Ihr PC an Remote-PC: Klicken Sie auf den Bildschirm um Text aus Zwischenablage in Remote Screen einzufügen. Machen Sie dann einen Rechtsklick im Textfeld und wählen 'Einfügen' im Kontextmenu&lt;br&gt;&lt;br&gt;2. Vom Remote PC auf Ihren PC: Um Text vom Remote PC auf ihren PC zu übertragen markieren Sie zunächst am Remote PC mit der Maus. Klicken sie dort mit der rechten Maustaste auf den Text und wählen Sie &lt;i&gt;Kopieren des markierten Texts&lt;/i&gt; im Kontextmenu. Auf Ihrem PC nutzen Sie die Funktion 'einfügen'.</entry>
+  <entry key="1086">Kopieren und Einfügen von Text zwischen Remote PC und eigenem PC.</entry>
+  <entry key="1087">Kopieren des markierten Texts</entry>
+  <entry key="1088">Kopieren und Einfügen</entry>
+  <entry key="1089">Qualität der Übertragung:</entry>
+  <entry key="1090">Sehr hohe Qualität</entry>
+  <entry key="1091">Hohe Qualität</entry>
+  <entry key="1092">Mittlere Qualität</entry>
+  <entry key="1093">Niedrige Qualität</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Tastatur:</entry>
+  <entry key="1097">Webinar beenden</entry>
+  <entry key="1098">Das Webinar ist bereits beendet. Weitere interessante Angebote befinden sich in</entry>
+  <entry key="1099">Raum schließen</entry>
+  <entry key="1100">Ausgang (URL)</entry>
+  <entry key="1101">Einstellungen für Raumbeschränkung (zeitlich)</entry>
+  <entry key="1102">Wenn der Raum geschlossen wird, werden die Teilnehmer zum Ausgang (URL) geleitet.</entry>
+  <entry key="1103">LDAP</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Configurationsdatei</entry>
+  <entry key="1107">LDAP Konfiguration</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Aktiviert</entry>
+  <entry key="1110">Eingefügt</entry>
+  <entry key="1111">Eingefügt von</entry>
+  <entry key="1112">Aktualisiert</entry>
+  <entry key="1113">Aktualisiert von</entry>
+  <entry key="1114">Die Konfigurationsdateien liegen im gleichen Ordner wie webapps/openmeetings/conf. Die Dateien müssen manuell in den Ordner kopiert werden. Änderungen an der Konfigurationsdatei sind direkt online wirksam.</entry>
+  <entry key="1115">Name der Konfigurationsdatei</entry>
+  <entry key="1116">Wenn Sie "Domain zum Nutzernamen hinzufügen" aktivieren wird der Eingabe des Nutzers beim Login derim Feld 'Domain' hinterlegte Wert hinzugefügt. Dies ist sinnvoll wenn in einem LDAP System der Nutzer mit einer Domainangabe geführt wird. Beispiel. Der Nutzer gibt beim Login 'Hans' ein. Die Domain ist mit 'localhost.com' eingetragen. Im LDAP wird hans@localhost.com geprüft.</entry>
+  <entry key="1117">Domain zum Nutzernamen hinzufügen</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Einfügen</entry>
+  <entry key="1120">Markierten Text kopieren</entry>
+  <entry key="1121">Text aus Remote Zwischenablage</entry>
+  <entry key="1122">Remote Zwischenablage anzeigen</entry>
+  <entry key="1123">Nicht noch einmal anzeigen</entry>
+  <entry key="1124">Text hier einfügen ...</entry>
+  <entry key="1125">Sie benötigen Remote Control-Rechte (oder Moderationsrechte)um das kopieren und Enfügen auf dem Remote Screen auszuführen.</entry>
+  <entry key="1126">Grundeinstellungen bearbeiten ...</entry>
+  <entry key="1127">Infofeld zum Kopieren/Einfügen nicht in Remote Control anzeigen</entry>
+  <entry key="1128">Speichern</entry>
+  <entry key="1129">Entfernen</entry>
+  <entry key="1130">Abbrechen</entry>
+  <entry key="1131">Nutzer in Konferenzraum einladen</entry>
+  <entry key="1132">Konferenzraum auswählen. Die eingeladenen Nutzer erhalten eine Nachricht mit Ihrem Namen und dem Link zum Raum.</entry>
+  <entry key="1133">Verbunden seit:</entry>
+  <entry key="1134">Nach Einladungsversand Raum betreten</entry>
+  <entry key="1135">Einladen</entry>
+  <entry key="1136">Nachricht</entry>
+  <entry key="1137">möchte Sie in den Konferenzraum einladen:</entry>
+  <entry key="1138">Einladung</entry>
+  <entry key="1139">Einladung versenden</entry>
+  <entry key="1140">nimmt Ihre Einladung &lt;b&gt;nichtt&lt;/b&gt; an.</entry>
+  <entry key="1141">Annehmen</entry>
+  <entry key="1142">Ablehnen</entry>
+  <entry key="1143">Zeitzone</entry>
+  <entry key="1144">Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Beschreibung</entry>
+  <entry key="1147">Erstellt von</entry>
+  <entry key="1148">Hinweis zur Zeitzone</entry>
+  <entry key="1149">"Hinweis zur Zeitzone" geben wenn Nutzer sich das nächste Mal einloggt, damit diese das Nutzerprofil aktualisieren.</entry>
+  <entry key="1150">Bitte prüfen Sie die eingestellte Zeitzone in Ihrem Nutzerprofil.</entry>
+  <entry key="1151">Neue {0} Konferenz:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">Ende:</entry>
+  <entry key="1155">{0} Konferenz geändert:</entry>
+  <entry key="1156">Organisation durch:</entry>
+  <entry key="1157">{0} Konferenz abgesagt:</entry>
+  <entry key="1158">Erinnerung an {0} Konferenz:</entry>
+  <entry key="1159">Community-Einstellungen</entry>
+  <entry key="1160">Kontaktdaten für alle sichtbar</entry>
+  <entry key="1161">Interessenfelder eingeben, um ebenfalls interessierte Partner für Konferenz zu finden. Werte durch Komma trennen (z.B.: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">Meine Angebote</entry>
+  <entry key="1163">Meine Interessen</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Zeitzone</entry>
+  <entry key="1166">Interessenfelder</entry>
+  <entry key="1167">Kontaktinformationen</entry>
+  <entry key="1168">Meine Kontaktdaten nur persönlichen Kontakten anzeigen</entry>
+  <entry key="1169">Niemanden meine Kontaktdaten anzeigen</entry>
+  <entry key="1170">Mein Profil</entry>
+  <entry key="1171">Einstellungen bearbeiten</entry>
+  <entry key="1172">Nutzer suchen</entry>
+  <entry key="1173">Profilvorschau</entry>
+  <entry key="1174">Einstellungen bearbeiten; z.B: Interessen eingeben, um gefunden zu werden</entry>
+  <entry key="1175">Andere Nutzer suchen und Netzwerk erweitern</entry>
+  <entry key="1176">Suchen</entry>
+  <entry key="1177">Nutzer bietet an</entry>
+  <entry key="1178">Nutzer sucht</entry>
+  <entry key="1179">Freitext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Zeitzone</entry>
+  <entry key="1182">Angebote</entry>
+  <entry key="1183">Gesuche</entry>
+  <entry key="1184">Suchergebnis</entry>
+  <entry key="1185">Aktionen</entry>
+  <entry key="1186">Als Kontakt hinzufügen</entry>
+  <entry key="1187">Nachricht senden</entry>
+  <entry key="1188">Kontakte und Nachrichten</entry>
+  <entry key="1189">Wartende Kontakte</entry>
+  <entry key="1190">Akzeptiern</entry>
+  <entry key="1191">Ablehnen</entry>
+  <entry key="1192">Guten Tag,</entry>
+  <entry key="1193">ich würde Sie gerne als Kontakt hinzufügen.</entry>
+  <entry key="1194">Prüfen Sie Ihre Kontaktanfragen in {0} oder klicken Sie auf die Links zum Akzeptieren oder Ablehnen der Anfragen.</entry>
+  <entry key="1195">Der Nutzer ist bereits in Ihrer Kontaktliste oder hat von Ihnen eine Benachrichtigung erhalten, die noch nicht beantwortet wurde.</entry>
+  <entry key="1196">Ihre Kontaktliste</entry>
+  <entry key="1197">Kontakte und Nachrichten bearbeiten,&lt;br/&gt; wartende Kontakte bearbeiten</entry>
+  <entry key="1198">hat Sie als Kontakt bestätigt</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Chat Log anzeigen/kopieren</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">Von</entry>
+  <entry key="1203">Thema</entry>
+  <entry key="1204">Senden</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Nachrichten</entry>
+  <entry key="1207">Neue Mail</entry>
+  <entry key="1208">Neue Nachricht an meine Kontakte schreiben</entry>
+  <entry key="1209">Neue Nachricht schreiben</entry>
+  <entry key="1210">An:</entry>
+  <entry key="1211">Thema:</entry>
+  <entry key="1212">Vollansicht: das Whiteboard wird in der größtmöglichen Ansicht &lt;br/&gt; gezeigt. Darstellung ist abhängig von der&lt;br/&gt;Bildschirmauflösung der Nutzer.</entry>
+  <entry key="1213">Nutzer entfernen</entry>
+  <entry key="1214">Sie können sich nicht selbst aus dem Konferenzraum entfernen. Wenn Sie den Konferenzraum verlassen wollen, schließen Sie das Browserfenster oder nutzen Sie den Ausgang-Button.</entry>
+  <entry key="1215">Wollen Sie den Nutzer tatsächlich aus diesem Konferenzraum entfernen?</entry>
+  <entry key="1216">Aktion bestätigen....</entry>
+  <entry key="1217">Sie können den Super-Moderator nicht aus dem Raum ausschließen</entry>
+  <entry key="1218">Konferenzraum buchen</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">Ende</entry>
+  <entry key="1221">Erstellen Sie einen Konferenzraum und eine optionale Teilnahmeanfrage zum Meeting. Der Termin wird in die Kalender aller Teilnehmer eingetragen.</entry>
+  <entry key="1222">Eingang</entry>
+  <entry key="1223">Gesendet</entry>
+  <entry key="1224">Gelöscht</entry>
+  <entry key="1225">Sie können sich nicht selbst als Kontakt einfügen.</entry>
+  <entry key="1226">Der Nutzer wurde bereits abgelehnt.</entry>
+  <entry key="1227">Der Nutzer wurde bereits bestätigt.</entry>
+  <entry key="1228">Nutzerkontakt Hash-Wert ist ungültig</entry>
+  <entry key="1229">Nutzer wurde zu Kontaktliste hinzugefügt.</entry>
+  <entry key="1230">Kontakt für Nutzer abgelehnt und von Warteliste entfernt.</entry>
+  <entry key="1231">Kein Kontakt gefunden.</entry>
+  <entry key="1232">Wollen Sie den Kontakt tatsächlich entfernen?</entry>
+  <entry key="1233">Kontakt entfernen bestätigen</entry>
+  <entry key="1234">Kontakt von Liste entfernen</entry>
+  <entry key="1235">Nutzerprofile</entry>
+  <entry key="1236">Nutzerprofile anzeigen</entry>
+  <entry key="1237">Nachrichten</entry>
+  <entry key="1238">Suche</entry>
+  <entry key="1239">Alle auswählen</entry>
+  <entry key="1240">Keine auswählen</entry>
+  <entry key="1241">Ungelesene auswählen</entry>
+  <entry key="1242">Gelesene auswählen</entry>
+  <entry key="1243">In Ordner verschieben ...</entry>
+  <entry key="1244">Neuen Ordner anlegen ...</entry>
+  <entry key="1245">Löschen</entry>
+  <entry key="1246">Gelöschte Mails liegen im Papierkorb.</entry>
+  <entry key="1247">Ungelesene markieren</entry>
+  <entry key="1248">Gelesene markieren</entry>
+  <entry key="1249">Antwort</entry>
+  <entry key="1250">Antwort an alle</entry>
+  <entry key="1251">Weiterleiten</entry>
+  <entry key="1252">Aktionen ...</entry>
+  <entry key="1253">Private Nachricht senden</entry>
+  <entry key="1254">Nichts ausgewählt</entry>
+  <entry key="1255">In Eingang verschieben</entry>
+  <entry key="1256">Löschen (endgültig)</entry>
+  <entry key="1257">Diese Aktion kann nicht rückgängig gemacht werden.</entry>
+  <entry key="1258">Ordner hinzufügen</entry>
+  <entry key="1259">Ordner hinzufügen und Nachrichten verwalten.</entry>
+  <entry key="1260">Ordner hinzufügen</entry>
+  <entry key="1261">Hinzufügen</entry>
+  <entry key="1262">Ordner löschen</entry>
+  <entry key="1263">Löschen oder verschieben Sie erst die Nachrichten in dem Ordner. Danach kann der Ordner gelöscht werden.</entry>
+  <entry key="1264">Name bearbeiten</entry>
+  <entry key="1265">Wollen Sie den Ordner wirklich löschen? Der Vorgang kann nicht rückgängig gemacht werden.</entry>
+  <entry key="1266">Ihre Anfrage wurde an den Nutzer gesandt. Er kann die Benachrichtigung annhmen oder ablehnen. Nur angenommene Anfragen erscheinen in Ihrer Kontaktliste.</entry>
+  <entry key="1267">Nachricht</entry>
+  <entry key="1268">Der Nutzer veröffentlicht die persönlichen Kontaktdaten nicht.</entry>
+  <entry key="1269">Der Nutzer zeigt die persönlichen Kontaktdaten nur seinen bestätigten Kontakten.</entry>
+  <entry key="1270">Adresse &amp; Telefon</entry>
+  <entry key="1271">Ihr Einladungscode ist ungültig. Er kann nur im angegebenen Zeitraum genutzt werden:</entry>
+  <entry key="1272">Der Termin ist in den Kalendern anderer Nutzer eingetragen. Die Änderungen werden auch dort vorgenommen. Wollen Sie den Termine wirklich aktualisieren?</entry>
+  <entry key="1273">Aktualisierung bestätigen</entry>
+  <entry key="1274">Dieser Kontakt darfen meinen Kalender einsehen (nur Ansicht)</entry>
+  <entry key="1275">Kalender nicht veröffentlichen</entry>
+  <entry key="1276">Kalender meiner Kontakte</entry>
+  <entry key="1277">Erste wenn die Kontakte bestätigt wurden besteht Zugriff auf die Kalender.</entry>
+  <entry key="1278">Sie können nur in Ihrem eigenen Kalender Termine speichern oder löschen.</entry>
+  <entry key="1279">Meinen eigenen Kalender anzeigen.</entry>
+  <entry key="1280">Der Termin ist in den Kalendern anderer Nutzer eingetragen. Soll der Termin wirklich überall gelöscht werden?</entry>
+  <entry key="1281">Aktion bestätigen</entry>
+  <entry key="1282">Raum betreten</entry>
+  <entry key="1283">Zugang zum Konferenzraum</entry>
+  <entry key="1284">Ein Konferenzraum und Termin ist durch diese private Nachricht gebucht worden.</entry>
+  <entry key="1285">DerTermin muß erst noch gespeichert werden.</entry>
+  <entry key="1286">Der Termin und der gebuchte Raum wurden inzwischen gelöscht. Der Raum steht nicht zur Verfügung.</entry>
+  <entry key="1287">Spitznamen wählen</entry>
+  <entry key="1288">Vorname</entry>
+  <entry key="1289">Nachname</entry>
+  <entry key="1290">E-Mail</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Mindestens 4 Zeichen für Vor- und Nachname eingeben.</entry>
+  <entry key="1293">Bitte geben Sie eine gültige Mail-Adresse ein.</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login mit Ihrem Facebook-Account</entry>
+  <entry key="1296">Mitglied seit</entry>
+  <entry key="1297">Sie sind über Ihren Facebook-Account eingeloggt. Aktualisieren Sie in Ihrem Profil Ihre E-Mailadresse. Sie erhalten sonst keine Einladungen zu Sitzungen odr Nachrichten von Ihren Kontakten.</entry>
+  <entry key="1298">Nachricht</entry>
+  <entry key="1299">Mitteilung zur Profilaktualisierung künftig nicht anzeigen.</entry>
+  <entry key="1300">weitere Anzeigemöglichkeiten ...</entry>
+  <entry key="1301">Neue private Nachrichten:</entry>
+  <entry key="1302">Klicken Sie auf Ihr Profil um die ganze Nachricht zu sehen....</entry>
+  <entry key="1303">Anworten</entry>
+  <entry key="1304">Räume und Chat</entry>
+  <entry key="1305">Meine Räume</entry>
+  <entry key="1306">Mein Konferenzraum (für 1-16 Benutzer)</entry>
+  <entry key="1307">Mein Webinarraum (für 1-120 Benutzer)</entry>
+  <entry key="1308">Eigne ID</entry>
+  <entry key="1309">Bitte Passwort eingeben</entry>
+  <entry key="1310">Sie benötigen einen Nutzeraccount als Teilnehmer, Moderator oder Administrator</entry>
+  <entry key="1311">Web-Service (nur SOAP)</entry>
+  <entry key="1312">Direkt auf Whiteboard ablegen</entry>
+  <entry key="1313">Soll dieses Whiteboard wirklich entfernt werden? Die Aktion kann nicht rückgängig gemacht werden.</entry>
+  <entry key="1314">In Whiteboard laden</entry>
+  <entry key="1315">Vergessen Sie nicht die Aufzeichnung zu starten. Ein Nutzer des Raum muß die Aufzeichnung starten, damit diese anschließend zur Verfügung steht.</entry>
+  <entry key="1316">Aufzeichnung starten</entry>
+  <entry key="1317">Pfeil</entry>
+  <entry key="1318">Kreis</entry>
+  <entry key="1319">Linie</entry>
+  <entry key="1320">Rechteck</entry>
+  <entry key="1321">Dreieck</entry>
+  <entry key="1322">Text/Notiz</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Frei Zeichnen</entry>
+  <entry key="1325">Auswählen/Verschieben</entry>
+  <entry key="1326">Form zeichnen</entry>
+  <entry key="1327">Ausschneiden/verschieben</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Drucken</entry>
+  <entry key="1330">Rückgängig</entry>
+  <entry key="1331">Löschen</entry>
+  <entry key="1332">Raster einfügen</entry>
+  <entry key="1333">Datei bereitstellen</entry>
+  <entry key="1334">Form auswählen</entry>
+  <entry key="1335">Clipart auswählen</entry>
+  <entry key="1336">Kopieren</entry>
+  <entry key="1337">Ausschneide</entry>
+  <entry key="1338">Einfügen</entry>
+  <entry key="1339">Löschen</entry>
+  <entry key="1340">Wollen Sie wirklich den gesamten Inhalt der Whiteboard löschen?</entry>
+  <entry key="1341">Direkt auf Whiteboard ablegen.</entry>
+  <entry key="1342">Teilnehmer</entry>
+  <entry key="1343">Teilnehmerverwaltung</entry>
+  <entry key="1344">Anwesend</entry>
+  <entry key="1345">Remote Control</entry>
+  <entry key="1346">Austragen</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Teilnehmer einladen</entry>
+  <entry key="1349">Per E-Mail</entry>
+  <entry key="1350">Nutzer ist Moderator</entry>
+  <entry key="1351">Nutzer hat Webcam aktiviert</entry>
+  <entry key="1352">Form ausfüllen deaktivieren</entry>
+  <entry key="1353">Form ausfüllen aktivieren</entry>
+  <entry key="1354">Einrasten</entry>
+  <entry key="1355">Aufzeichnung erlauben</entry>
+  <entry key="1356">Warten auf Aufzeichnung</entry>
+  <entry key="1357">Topbar verbergen</entry>
+  <entry key="1358">Video abspielen</entry>
+  <entry key="1359">Wollen Sie wirklich den Inhalt der aktuellen Folie löschen?</entry>
+  <entry key="1360">Nutzerrechte akzeptieren/gewähren</entry>
+  <entry key="1361">Ablehnen</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Aktivitäten und Aktionen</entry>
+  <entry key="1364">Whiteboard entfernen</entry>
+  <entry key="1365">Um Whiteboards zu entfernen benötigen Sie Moderations- oder Schreibrechte für die Whiteboards.</entry>
+  <entry key="1366">Nicht erlaubt</entry>
+  <entry key="1367">hat den Raum verlassen.</entry>
+  <entry key="1368">Mathematische Zeichen</entry>
+  <entry key="1369">Keine Kategorie</entry>
+  <entry key="1370">Farbstil</entry>
+  <entry key="1371">Qualität</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">besuche</entry>
+  <entry key="1374">rot-orange</entry>
+  <entry key="1375">mittel seegrün</entry>
+  <entry key="1376">stahlblau</entry>
+  <entry key="1377">hellstahlblau</entry>
+  <entry key="1378">rotgold</entry>
+  <entry key="1379">silbergrau</entry>
+  <entry key="1380">nutzerdefiniert</entry>
+  <entry key="1381">beste</entry>
+  <entry key="1382">Upload</entry>
+  <entry key="1383">mittlere</entry>
+  <entry key="1384">Mikrofone für alle stumm schalten</entry>
+  <entry key="1385">Mikrofone für alle aktivieren</entry>
+  <entry key="1386">Mikrofone für andere stumm schalten</entry>
+  <entry key="1387">Der Moderator hat ihr Mikrofon stumm geschaltet. Sie können dies nicht selber ändern.</entry>
+  <entry key="1388">Mikrofon für alle stumm schalten?</entry>
+  <entry key="1389">Wollen Sie Ihr Mikrofon wirklich stumm schalten? Niemand wird Sie dann hören können.</entry>
+  <entry key="1390">Mikrofon für alle stumm schalten?</entry>
+  <entry key="1391">Wollen Sie dieses Mikrofon wirklich stumm schalten? Sie hören danach den Nutzer nicht mehr. Dies hat keine Auswirkung ob andere Nutzer es noch hören. Nur Moderatoren können Mikrofone für alle abschalten.</entry>
+  <entry key="1392">Mikrofon für alle stumm schalten?</entry>
+  <entry key="1393">Wenn Sie dieses Mikrofon für alle stumm schalten wird kein Nutzer es mehr hören können.</entry>
+  <entry key="1394">Ihr Ton ist aktiv. Klicken Sie hier, um dem Moderator eine Nachricht zu senden, Ihr Mikrofon für alle Nutzer im Konferenzraum stummzuschalten.</entry>
+  <entry key="1395">Ihr Ton ist stummgeschaltet. Klicken Sie hier, um dem Moderator eine Nachricht zu senden, Ihr Mikrofon für alle Nutzer im Konferenzraum anzuschalten.</entry>
+  <entry key="1396">bittet den Moderator das eigene Mikrofon für alle Nutzer des Raums stummzuschalten.</entry>
+  <entry key="1397">bittet den Moderator das eigene Mikrofon für alle Nutzer des Raums anzuschalten.</entry>
+  <entry key="1398">bittet den Moderator sein/ihr Mikrofon anzuschalten.</entry>
+  <entry key="1399">bittet den Moderator sein/ihr Mikrofon stummzuschalten.</entry>
+  <entry key="1400">Mikrofon anschalten. Hier klicken, um das Mikrofon für alle Nutzer des Raums stummzuschalten.</entry>
+  <entry key="1401">Mikrofon stummschalten. Hier klicken, um das Mikrofon für alle Nutzer des Raums anzuschalten.</entry>
+  <entry key="1402">Mikrofon des Nutzers ist vom Moderator für alle stummgeschaltet. Sie können es nicht reaktivieren.</entry>
+  <entry key="1403">Mein Mikrofon für alle stummschalten.</entry>
+  <entry key="1404">Mein Mikrofon für alle anschalten.</entry>
+  <entry key="1405">Mikrofon stummschalten</entry>
+  <entry key="1406">Mikrofon anschalten</entry>
+  <entry key="1407">Mikrofon für alle abschalten</entry>
+  <entry key="1408">Mikrofon für alle anschalten</entry>
+  <entry key="1409">Nur Moderatoren können Mikrofone für alle an/abschalten. Sie können Ihr eigenes Mikrofon mit dem Mikrofon-Icon abschalten.</entry>
+  <entry key="1410">Titel der Abstimmung</entry>
+  <entry key="1411">Sie</entry>
+  <entry key="1412">Archivierte Abstimmungen</entry>
+  <entry key="1413">aktiv</entry>
+  <entry key="1414">Einfache Grafik</entry>
+  <entry key="1415">Tortengrafik</entry>
+  <entry key="1416">Bitte geben Sie eine E-Mail-Adresse an</entry>
+  <entry key="1417">Neue Nachricht(en)</entry>
+  <entry key="1418">Abstimmung schließen</entry>
+  <entry key="1419">Wollen Sie die Abstimmung wirklich schließen? Danach kann sich niemand mehr beteiligen.</entry>
+  <entry key="1420">Abstimmung löschen</entry>
+  <entry key="1421">Wollen Sie die Abstimmung wirklich löschen? Damit werden auch alle Ergebnisse gelöscht.</entry>
+  <entry key="1422">Sprache: ISO Code</entry>
+  <entry key="1423">Recht für exklusiven Audiozugriff vergeben/entziehen.</entry>
+  <entry key="1424">Nutzer erhält Recht für exklusives Audio</entry>
+  <entry key="1425">Recht für exklusives Audio für Nutzer entziehen</entry>
+  <entry key="1426">bittet um Recht für exklusives Audio.</entry>
+  <entry key="1427">bittet den Moderator darum ihm exklusives Audio-Recht zu geben.</entry>
+  <entry key="1428">Recht für exklusives Audio geben.</entry>
+  <entry key="1429">Kamera-Auflösung</entry>
+  <entry key="1430">Die Kamera-Auflösung hat einen direkten Einfluss auf die verbrauchte Upload-Bandbreite!</entry>
+  <entry key="1431">Sie verfügen nicht über das Recht sich selbst oder anderen exklusives Audiorecht zu geben. Sie können jedoch den Moderator bitten, Ihnen diese Berechtigung zuzuweisen.</entry>
+  <entry key="1432">Ich würde gerne das Recht auf exklusives Audio erhalten.</entry>
+  <entry key="1433">Mir exklusives Rederecht geben (alternativ: klick auf Video Pod oder F12)</entry>
+  <entry key="1434">Mikrofon ist an</entry>
+  <entry key="1435">Mikrofon ist abgeschaltet</entry>
+  <entry key="1436">Chat verbergen</entry>
+  <entry key="1437">Aktivitäten verbergen</entry>
+  <entry key="1438">Dateiverwaltung verbergen</entry>
+  <entry key="1439">Aktionenmenü verbergen</entry>
+  <entry key="1440">Screen Sharing verbergen</entry>
+  <entry key="1441">Whiteboard verbergen</entry>
+  <entry key="1442">Mikrofonstatus in Video anzeigen</entry>
+  <entry key="1443">Layout Optionen</entry>
+  <entry key="1444">Neuer Termin</entry>
+  <entry key="1445">Passwortgeschützt ist nicht der Raum sondern die Einladungen die an die Teilnehmer verschickt werden! D.h. wenn Sie einen Termin mehrmals mit unterschiedlichem Passwort speichern wird jedesmal ein Link per mail zum Konferenzraum an alle Teilnehmer verschickt mit dem jeweiligem Passwort. Bereits versendete Einladungen funktionieren weiterhin!</entry>
+  <entry key="1446">Termin ändern</entry>
+  <entry key="1447">Zeige sip dialer</entry>
+  <entry key="1448">Anrufen</entry>
+  <entry key="1449">Zeige Kalender Einträge</entry>
+  <entry key="1450">Startseite</entry>
+  <entry key="1451">Ihr Terminkalender</entry>
+  <entry key="1452">Aufnahmen ansehen und verwalten</entry>
+  <entry key="1453">Konferenzraum beitreten</entry>
+  <entry key="1454">Benutzerrechte verwalten</entry>
+  <entry key="1455">Verbindungen verwalten</entry>
+  <entry key="1456">Benutzergruppen verwalten</entry>
+  <entry key="1457">Konferenzräume verwalten</entry>
+  <entry key="1458">System-Einstellungen verwalten</entry>
+  <entry key="1459">Sprachen verwalten</entry>
+  <entry key="1460">LDAP und ADS Konfiguration</entry>
+  <entry key="1461">Export/Import von Systemsicherungen</entry>
+  <entry key="1462">Sie verfügen nicht über die erforderlichen Berechtigungen für diese Funktion</entry>
+  <entry key="1463">Text bearbeiten</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Veröffentlichen</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduzieren Sie die Breite des Sharing-Screens, bevor Sie versuchen ihn nach links zu verschieben.</entry>
+  <entry key="1472">Reduzieren Sie die Höhe des Sharing-Screens, bevor Sie versuchen ihn nach unten zu verschieben,</entry>
+  <entry key="1473">Reduzieren Sie x des Sharing-Screens, bevor Sie versuchen ihn zu erweitern weiter,</entry>
+  <entry key="1474">Reduzieren Sie y des Sharing-Screens, bevor Sie versuchen die Höhe zu verändern.</entry>
+  <entry key="1475">Tragen Sie hier die Einstellungen zu Ihren Bildschirmdaten für Drittanbeiter wie justin.tv ein</entry>
+  <entry key="1476">Bitte starten Sie Screen-Sharing, um in der Lage zu sein, ihn zu veröffentlichen</entry>
+  <entry key="1477">Moderator Berechtigung erforderliche, um die Aufnahme zu starten</entry>
+  <entry key="1478">Sie haben keine Berechtigung, um jedem Teilnehmer Audio-Rechte zu gewähren. Sie müssen Rolle Moderator besitzen oder das Recht Audio für jedes Mikrofon einzuschalten.</entry>
+  <entry key="1479">neue Datei in Datei-Explorer hochladen</entry>
+  <entry key="1480">Öffne neuen Dialog mit Sharing-Einstellungen</entry>
+  <entry key="1481">Ein existierender Moderator muss dies genehmigen</entry>
+  <entry key="1482">Fragen Sie den Moderator, um Ihr/e Webcam/Mikro zu teilen</entry>
+  <entry key="1483">Feedback sammeln, indem sie eine Umfrage starten</entry>
+  <entry key="1484">Vergangene und gegenwärtige Umfrage-Ergebnisse als Diagramme</entry>
+  <entry key="1485">Stimmen Sie ab, wenn es eine Umfrage für diesen Konferenzraum gibt</entry>
+  <entry key="1486">Bearbeiten der Webcam und Mikrofon-Einstellungen</entry>
+  <entry key="1487">Bestätigen und verlassen des Raumes</entry>
+  <entry key="1488">Rufen Sie externe Personen über VoIP/SIP an</entry>
+  <entry key="1489">Senden Sie eine E-Mail mit einem direkten Link zu diesem Raum</entry>
+  <entry key="1490">Ändern Sie Ihre Whiteboard-Einstellungen</entry>
+  <entry key="1491">Maximal Upload-Größe</entry>
+  <entry key="1492">Fragen Sie den Moderator, um Ihr Whiteboard teilen</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">Alle</entry>
+  <entry key="1495">Sie können nicht mit sichselbst einen privaten Chat starten.</entry>
+  <entry key="1496">Sie haben bereits einen privaten Chat mit diesem Teilnehmer gestartet.</entry>
+  <entry key="1497">Wollen Sie wirklich diesen privaten Chat löschen?</entry>
+  <entry key="1498">Server</entry>
+  <entry key="1499">Beteiligten Server im Cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server-Addresse</entry>
+  <entry key="1502">Server-Details</entry>
+  <entry key="1503">Sende SMS</entry>
+  <entry key="1504">Veröffentlichen. Nutzer:</entry>
+  <entry key="1505">Um Zeit und Internet-Verkehr sparen, können Sie den Befehl admin für Backup/Wiederherstellen/Aktualisieren verwenden. &lt;ol&gt; &lt;li&gt;Gehen sie zum OM-Installationspfad (z.b. /opt/red5)&lt;/li&gt; &lt;li&gt;Stopen Sie OM (z.b. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/heute_om_backup.zip (Backup vom bestehenden OM erstellen)&lt;/li&gt; &lt;li&gt;Laden Sie die neue Version OM herunter&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (kopieren Sie die existierende OM-Version für den Fall :))&lt;/li&gt; &lt;li&gt;Entpacken Sie die heruntergeladene OM-Version nach /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/heute_om_backup.zip (or './admin.sh -i -file ~/heute_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass', für den Fall, dass Sie eine Nicht-Standard-DB verwenden)&lt;/li&gt; &lt;li&gt;Starten Sie OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">gemeinsame Räume für alle Benutzer</entry>
+  <entry key="1507">gemeinsame Räume für die aktuelle Benutzer-Gruppe</entry>
+  <entry key="1508">Räume des aktuellen Benutzers</entry>
+  <entry key="1509">Erstellen/Ändern Termin spezieller Raum</entry>
+  <entry key="1510">Sie können mehrere Adressen im folgenden Format angeben: vorname1 nachname1 &lt;email1&gt;,"vorname2 nachname2" &lt;email2&gt;,'vorname nachname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Stream-Volumen anpassen</entry>
+  <entry key="1512">Mikrofon-Volumen anpassen</entry>
+  <entry key="1513">Chat ist moderiert</entry>
+  <entry key="1514">Erlaube Nachrichten</entry>
+  <entry key="1515">Chat-Feld standardmäßig geöffnet</entry>
+  <entry key="1516">Dateien-Fenster standardmäßig geöffnet</entry>
+  <entry key="1517">letzter ping</entry>
+  <entry key="1518">Jeder Slave sendet alle 3 Sekunden einen Ping an den Master (konfigurierbar). Der lastPing des Slave muss kleiner sein als 1 Minute, so dass der Master den Slave verwendet.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">Benutzer (SOAP-Access)</entry>
+  <entry key="1521">Passwort</entry>
+  <entry key="1522">Webapplikations-Pfad</entry>
+  <entry key="1523">Protokoll</entry>
+  <entry key="1524">ping läuft</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">URL generieren</entry>
+  <entry key="1527">Netzwerk testen</entry>
+  <entry key="1528">Auswahl Interview Video Pod</entry>
+  <entry key="1529">unterstreichen</entry>
+  <entry key="1530">Schriftart</entry>
+  <entry key="1531">Schriftarten erlauben</entry>
+  <entry key="1532">Schriftfarbe</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Session-Statistiken anzeigen</entry>
+  <entry key="1535">Details zur Session</entry>
+  <entry key="1536">System Import</entry>
+  <entry key="1537">beinhaltet hochgeladene Dateien und Aufnahmen im Backup</entry>
+  <entry key="1538">Aktivieren Sie SIP-Verkehr im Raum</entry>
+  <entry key="1539">Wollen Sie wirklich diesem Benutzer exklusive Audiorechte geben?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Import von Bildern auf 
+					das Whiteboard erm&ouml;glichen<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Installieren Sie <strong>ImageMagick</strong> auf dem Server. Weitere
+					Informationen unter <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>.
+					Anleitungen f&uuml;r die Installation finden Sie unter <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>, in den
+					meisten Linux-Distributionen l&auml;sst es sich jedoch bequem per Paketmanager
+					(z.B. apt-get) installieren.
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Import von PDF-Dateien auf das
+					Whiteboard erm&ouml;glichen<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Installieren Sie <strong>GhostScript</strong> auf dem Server. Weitere
+					Informationen (Installationsanleitungen etc.) finden Sie unter <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>. 
+					In den meisten Linux-Distributionen l&auml;sst es sich bequem per Paketmanager
+					(z.B. apt-get) installieren.
+				</li>
+				<li>Installieren Sie <strong>SWFTools</strong> auf dem Server. Weitere 
+					Informationen (Installationsanleitungen etc.) finden Sie unter <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>. 
+					Einige Linux-Distributionen haben es bereits in ihre Paketquellen aufgenommen (siehe 
+					<a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>).
+					Die empfohlene Version von <strong>SWFTools</strong> ist 0.9 - fr&uuml;here Versionen
+					enthalten einen Bug, welcher zu falschen Objektausdehnungen auf dem Whiteboard 
+					f&uuml;hrt.
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Import von 
+					Office-Dokumenten (.doc, .docx, .ppt, .pptx, etc.) auf das Whiteboard erm&ouml;glichen
+					<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> muss gestartet worden sein und auf Port 8100 lauschen, 
+					siehe <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>.</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Aufzeichnung und 
+					Import von Videos (.avi, .flv, .mov und .mp4) auf das Whiteboard erm&ouml;glichen<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Installieren Sie <strong>FFmpeg</strong>. Sie sollten die neueste Version verwenden! 
+					Windows-Binaries finden Sie z.B. unter 
+					<a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a>. Linux- oder OSx-Nutzer sollten 
+					eine der zahlreichen Installationsanleitungen im Web zu Rate ziehen. libmp3lame muss 
+					aktiviert sein!
+				</li>
+				<li>Installieren Sie <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					Sie sollten die neueste Version verwenden! SoX 12.xx wird NICHT funktionieren!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">Falls Sie weitere Fragen haben oder Support bei Installation und Hosting 
+			ben&ouml;tigen:</span></b>
+	<br />
+	<br />
+    <br />
+	<br />
+	<b><span style="font-size: 1.2em">Support durch die OpenMeetings-Community:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailinglisten</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.4em">Einige Unternehmen bieten kommerziellen Support
+	    f&uuml;r Apache OpenMeetings an:</span></b>
+	<br />
+	<br />
+
+    <span style="font-size: 1.3em"><a
+        href="http://openmeetings.apache.org/commercial-support.html"
+        target="_blank">http://openmeetings.apache.org/commercial-support.html</a></span>
+    <br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Empfehlung 
+				f&uuml;r Produktivumgebungen<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			Standardm&auml;&szlig;ig verwendet {0} die integrierte 
+			{1} Datenbank. In Produktivumgebungen wird jedoch der Einsatz von {2}, {3}, {4}, {5} or {6} empfohlen.
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Nutzerdaten</entry>
+	<entry key="install.wizard.params.step1.username">Nutzername</entry>
+	<entry key="install.wizard.params.step1.username.title">Geben Sie einen Nutzernamen ein</entry>
+	<entry key="install.wizard.params.step1.password">Nutzerpasswort</entry>
+	<entry key="install.wizard.params.step1.password.title">Geben Sie ein Passwort ein</entry>
+	<entry key="install.wizard.params.step1.email">E-Mail</entry>
+	<entry key="install.wizard.params.step1.email.title">Geben Sie eine E-Mail-Adresse ein</entry>
+	<entry key="install.wizard.params.step1.tz">Zeitzone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Geben Sie den Namen Ihrer Organisation ein</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Konfiguration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Neuen Nutzern erlauben, sich zu registrieren (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">E-Mail an neu registrierte Nutzer senden (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode"><![CDATA[Neu registrierte Nutzer m&uuml;ssen Ihre E-Mail-Adresse verifizieren (sendEmailWithVerficationCode)]]></entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms"><![CDATA[Beispielr&auml;ume aller Raumtypen erstellen]]></entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server-Port(Standard ist 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Nutzername (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Nutzerpasswort (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">TLS zur Mailserver-Authentifizierung aktivieren</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Die E-Mail-Adresse des Einladenden als 'ReplyTo'-Adresse
+					in E-Mail-Einladungen verwenden (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Voreingestellte Sprache</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Voreingestellte Schriftart beim Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Konverter</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> Siehe</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title"><![CDATA[Geben Sie an, wieviel dpi swftools f&uuml;r die 'PDF zu SWF'-Konvertierung nutzen soll.]]></entry>
+	<entry key="install.wizard.params.step3.swfZoom.text"><![CDATA[Sie k&ouml;nnen &uuml;berpr&uuml;fen, ob swftools im Systempfad 
+		installiert ist, indem Sie eine Shell oder einen cmd-Prompt &ouml;ffnen
+		und pdf2swf eingeben.
+		Geben Sie an, wieviel dpi swftools f&uuml;r die 'PDF zu SWF'-Konvertierung nutzen soll.
+		Voreingestellter Wert ist 100 dpi.]]></entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality"><![CDATA[SWFTools JPEG-Qualit&auml;t]]></entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title"><![CDATA[Geben Sie an, welche Qualit&auml;tsstufe f&uuml;r eingebettete JPEG-Bilder verwendet werden soll.]]></entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text"><![CDATA[Sie k&ouml;nnen &uuml;berpr&uuml;fen, ob swftools im Systempfad 
+		installiert ist, indem Sie eine Shell oder einen cmd-Prompt &ouml;ffnen
+		und pdf2swf eingeben.
+		Geben Sie an, welche Qualit&auml;tsstufe f&uuml;r eingebettete JPEG-Bilder 
+		verwendet werden soll. 0 bedeutet schlechteste Qualit&auml;t (kleinste 
+		Dateigr&ouml;&szlig;e), 100 bedeutet beste Qualit&auml;t (gr&ouml;&szlig;te 
+		Dateigr&ouml;&szlig;e) (Voreinstellung: 85)]]></entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools-Pfad</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Geben Sie den Pfad zu swftools an, z.B. C:/swftools (Windows), falls es sich nicht im Systempfad befindet.</entry>
+	<entry key="install.wizard.params.step3.swfPath.text"><![CDATA[
+		Sie k&ouml;nnen &uuml;berpr&uuml;fen, ob swftools im Systempfad 
+		installiert ist, indem Sie eine Shell oder einen cmd-Prompt &ouml;ffnen
+		und pdf2swf eingeben. Wenn daraufhin eine Liste mit Optionen angezeigt wird, 
+		k&ouml;nen Sie dieses Feld leer lassen. Ansonsten m&uuml;ssen Sie den Pfad 
+		zu pdf2swf hier eintragen.
+	]]></entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick-Pfad</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Geben Sie den Pfad zu ImageMagick an, falls es sich nicht im Systempfad befindet.</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG-Pfad</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Geben Sie den Pfad zu FFMPEG an, falls es sich nicht im Systempfad befindet.</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX-Pfad</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Geben Sie den Pfad zu SoX an, falls es sich nicht im Systempfad befindet.</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD-Pfad</entry>
+	<entry key="install.wizard.params.step3.jodPath.title"><![CDATA[Der Pfad zur JOD-Bibliothek (http://code.google.com/p/jodconverter). Beachten Sie, dass der Pfad auf das lib-Verzeichnis zeigen muss, welches auch jodconverter-core-version.jar enth&auml;lt.]]></entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath"><![CDATA[OpenOffice-/LibreOffice-Pfad f&uuml;r jodconverter]]></entry>
+	<entry key="install.wizard.params.step3.officePath.title">Der Pfad zu OpenOffice/LibreOffice (optional). Bitte geben Sie den echten Pfad an, falls jodconverter die OpenOffice-/LibreOffice-Installation nicht automatisch findet.</entry>
+	<entry key="install.wizard.params.step3.officePath.text">Der Pfad zu OpenOffice/LibreOffice (optional). Bitte geben Sie den richtigen Pfad an, falls 
+					jodconverter die OpenOffice-/LibreOffice-Installation nicht automatisch findet.
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Krypto-Typ</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Krypto-Klasse</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title"><![CDATA[Geben Sie den Klassennamen der Krypto-Klasse an. &Auml;NDERN SIE DIESEN WERT NICHT, WENN SIE SICH NICHT SICHER SIND!]]></entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		Sie k&ouml;nnen den voreingestellten Krypto-Typ (welcher der 
+		PHP-MD5-Funktion entspricht) benutzen, oder Sie geben 
+		<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		ein, um BSD-artige Verschl&uuml;sselung zu benutzen. F&uuml;r 
+		weitergehende Informationen, auch zum Schreiben einer eigenen 
+		Krypto-Klasse, siehe <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a>. Sie k&ouml;nnen diesen 
+		Wert sp&auml;ter ver&auml;ndern, ABER vorher erstellte Nutzer und 
+		Sitzungen k&ouml;nnten anschlie&szlig;end unbenutzbar sein. 
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">SIP aktivieren</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">red5SIP-Integration aktivieren</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix"><![CDATA[Pr&auml;fix f&uuml;r SIP-R&auml;ume]]></entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text"><![CDATA[Pr&auml;fix f&uuml;r Telefonnummer der Konferenzr&auml;ume]]></entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP-Erweiterungskontext</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text"><![CDATA[Kontext f&uuml;r Asterisk-Erweiterungen]]></entry>
+
+	<entry key="install.wizard.install.desc">Bitte klicken Sie auf "Finish" um die Installation zu starten!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter"><![CDATA[&Ouml;ffnen der Anwendung]]></entry>
+	<entry key="install.wizard.congrats.port">Falls Ihr Red5-Server einen anderen Port oder eine andere Domain benutzt, sollten Sie</entry>
+	<entry key="install.wizard.congrats.config">die Konfiguration des Clients anpassen</entry>
+	<entry key="install.wizard.congrats.mail">Mailingliste</entry>
+	<entry key="install.wizard.congrats.commercial"><![CDATA[Einige Unternehmen bieten kommerziellen Support
+		f&uuml;r Apache OpenMeetings an:]]></entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_el.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_el.properties.xml
new file mode 100644
index 0000000..0b74cb3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_el.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Συνδιάσκεψη</entry>
+  <entry key="2">Συνάντηση</entry>
+  <entry key="3">Γεγονότα</entry>
+  <entry key="4">Ρυθμίσεις</entry>
+  <entry key="5">Προφίλ</entry>
+  <entry key="6">Διαχείριση</entry>
+  <entry key="7">Διακοπή</entry>
+  <entry key="8">Εγγραφή</entry>
+  <entry key="9">Το αρχείο δεν βρέθηκε!</entry>
+  <entry key="10">Εγγραφή κατά Δάσκαλο</entry>
+  <entry key="11">Συνδεδεμένοι Χρήστες:</entry>
+  <entry key="12">Έναρξη Συνδιάσκεψης</entry>
+  <entry key="13">Το Όνομά Μου</entry>
+  <entry key="14">ΒιντεοΣυνδιάσκεψη</entry>
+  <entry key="15">Φόρτωση Αρχείου</entry>
+  <entry key="16">Ανανέωση Λίστας</entry>
+  <entry key="17">Στο Βασικό Αρχείο</entry>
+  <entry key="18">Νέα Ψηφοφορία</entry>
+  <entry key="19">Νέα Ψηφοφορία Συνδιάσκεψης.</entry>
+  <entry key="20">Ερώτηση:</entry>
+  <entry key="21">Τύπος Ψηφοφορίας:</entry>
+  <entry key="22">Δημιουργία</entry>
+  <entry key="23">Ενημέρωση: Κάθε συνδεδεμένος Χρήστης λαμβάνει ένα μήνυμα με τη νέα Ψηφοφορία.</entry>
+  <entry key="24">Δημιουργία Ψηφοφορίας</entry>
+  <entry key="25">Ακύρωση</entry>
+  <entry key="26">Ναι/Όχι</entry>
+  <entry key="27">Αριθμός 1-10</entry>
+  <entry key="28">Ψηφοφορία</entry>
+  <entry key="29">Μόνο ο Συντονιστής μπορεί να δημιουργεί Ερωτήσεις!</entry>
+  <entry key="30">Η Ψήφος σας καταχωρήθηκε.</entry>
+  <entry key="31">Έχετε ήδη συμμετάσχει σε αυτήν την Ψηφοφορία.</entry>
+  <entry key="32">Ψηφίστε!</entry>
+  <entry key="33">Η Απάντησή Σας:</entry>
+  <entry key="34">Ναι</entry>
+  <entry key="35">Όχι</entry>
+  <entry key="36">θέλει να ξέρει:</entry>
+  <entry key="37">Αποτελέσματα Ψηφοφορίας</entry>
+  <entry key="38">Ερώτηση:</entry>
+  <entry key="39">Αποτελέσματα:</entry>
+  <entry key="40">Απαντήσεις:</entry>
+  <entry key="41">Δεν έχει ξεκινήσει καμία Ψηφοφορία.</entry>
+  <entry key="42">Ψηφίστε!</entry>
+  <entry key="43">Συνάντηση (μέγιστο 4 θέσεις)</entry>
+  <entry key="44">Συνδιάσκεψη (μέγιστο 50 θέσεις)</entry>
+  <entry key="45">Τύπος</entry>
+  <entry key="46">Άλλες Θέσεις</entry>
+  <entry key="47">Ήδη Επιλεγμένη</entry>
+  <entry key="48">Είσοδος</entry>
+  <entry key="49">Ο Συντονιστής εγκατέλειψε τη Συνάντηση.</entry>
+  <entry key="50">Πληροφορίες Συστήματος</entry>
+  <entry key="51">Επιλογή Συσκευής</entry>
+  <entry key="52">Επιλογή Web Κάμερας:</entry>
+  <entry key="53">Επιλογή Μικροφώνου:</entry>
+  <entry key="54">Εντάξει</entry>
+  <entry key="55">Ακύρωση</entry>
+  <entry key="56">Πρέπει να συνδεθείτε ξανά!</entry>
+  <entry key="57">Τροποποίηση Εγκατάστασης.</entry>
+  <entry key="58">Μάθημα:</entry>
+  <entry key="59">Γλώσσα:</entry>
+  <entry key="60">Εντάξει</entry>
+  <entry key="61">Ακύρωση</entry>
+  <entry key="62">Εκκαθάριση Πίνακα</entry>
+  <entry key="63">Να αδειάζει ο Πίνακας πριν από την προσθήκη Νέας Εικόνας</entry>
+  <entry key="64">Να μην ερωτηθώ ξανά!</entry>
+  <entry key="65">Όχι</entry>
+  <entry key="66">Ρύθμιση Εγκατάστασης</entry>
+  <entry key="67">Να ζητείται Επιβεβαίωση πριν από την εκκαθάριση του Πίνακα</entry>
+  <entry key="68">Πληροφορίες Χρήστη</entry>
+  <entry key="69">Εκκαθάριση Περιοχής Σχεδίασης</entry>
+  <entry key="70">Αναίρεση</entry>
+  <entry key="71">Επαναφορά</entry>
+  <entry key="72">Επιλογή Αντικειμένου</entry>
+  <entry key="73">Κείμενο</entry>
+  <entry key="74">Ζωγραφική</entry>
+  <entry key="75">Σχεδίαση Γραμμής</entry>
+  <entry key="76">Σχεδίαση Υπογράμμισης</entry>
+  <entry key="77">Ορθογώνιο</entry>
+  <entry key="78">Έλλειψη</entry>
+  <entry key="79">Βέλος</entry>
+  <entry key="80">Διαγραφή Επιλεγμένου Στοιχείου</entry>
+  <entry key="81">Αίτηση για Συντονισμό</entry>
+  <entry key="82">Αίτηση</entry>
+  <entry key="83">Ακύρωση</entry>
+  <entry key="84">Γίνετε Συντονιστής</entry>
+  <entry key="85">Κλείσιμο</entry>
+  <entry key="86">Italic</entry>
+  <entry key="87">Bold</entry>
+  <entry key="88">Σε Αναμονή</entry>
+  <entry key="89">Κάποιος Χρήστης θέλει να κάνει Αίτηση για Συντονισμό. Μπορείτε να του παραχωρήσετε πρόσβαση μόνο στον Πίνακα ή να μεταστρέψετε πλήρως το ρόλο Συντονισμού. Χρήστης:</entry>
+  <entry key="90">Αποδοχή</entry>
+  <entry key="91">Απόρριψη</entry>
+  <entry key="92">Ακύρωση</entry>
+  <entry key="93">Αποστολή Αιτήματος στους ακόλουθους Χρήστες:</entry>
+  <entry key="94">Αποδεκτό</entry>
+  <entry key="95">Μη Αποδεκτό</entry>
+  <entry key="96">Αλλαγή Συντονιστή</entry>
+  <entry key="97">Δεν συντονίζετε εσείς αυτό το Μάθημα!</entry>
+  <entry key="98">Συντονιστής:</entry>
+  <entry key="99">Αυτό το Δωμάτιο είναι πλήρες. Παρακαλούμε δοκιμάστε ξανά αργότερα.</entry>
+  <entry key="100">Έλλειψη</entry>
+  <entry key="101">Κλείσιμο</entry>
+  <entry key="102">Σφάλμα Δεδομένων Εισόδου</entry>
+  <entry key="103">4 ή Περισσότεροι Χαρακτήρες: Προβλήματα Καταχώρησης με Κεφαλαία Γράμματα!</entry>
+  <entry key="104">Ο Κωδικός Χρήστη πρέπει να περιέχει τουλάχιστον 4 Χαρακτήρες!</entry>
+  <entry key="105">Το συγκεκριμένο Όνομα Χρήστη έχει επιλεγεί ήδη!</entry>
+  <entry key="106">Το συγκεκριμένο Email έχει καταχωρηθεί ήδη!</entry>
+  <entry key="107">Σφάλμα Συστήματος: Παρακαλούμε επικοινωνήστε με τους Διαχειριστές Συστήματος!</entry>
+  <entry key="108">Login</entry>
+  <entry key="109">Χρήστης ή Email:</entry>
+  <entry key="110">Κωδικός:</entry>
+  <entry key="111">Γλώσσα</entry>
+  <entry key="112">Σύνδεση</entry>
+  <entry key="113">Εγγραφή</entry>
+  <entry key="114">Χρήστης:</entry>
+  <entry key="115">Κωδικός:</entry>
+  <entry key="116">Επαν. Κωδικού:</entry>
+  <entry key="117">Όνομα:</entry>
+  <entry key="118">Επώνυμο:</entry>
+  <entry key="119">Email:</entry>
+  <entry key="120">Χώρα:</entry>
+  <entry key="121">Καταχώρηση</entry>
+  <entry key="122">Ακύρωση</entry>
+  <entry key="123">Δεν είστε Μέλος;</entry>
+  <entry key="124">Αρχική Σελίδα</entry>
+  <entry key="125">Χρήστες</entry>
+  <entry key="126">Ομάδες</entry>
+  <entry key="127">Οργανισμοί</entry>
+  <entry key="128">Δωμάτια Συναντήσεων</entry>
+  <entry key="129">Κοινό</entry>
+  <entry key="130">Οργανισμός</entry>
+  <entry key="131">Είσοδος</entry>
+  <entry key="132">Login</entry>
+  <entry key="133">Κωδικός</entry>
+  <entry key="134">Επαν. Κωδικού</entry>
+  <entry key="135">Όνομα</entry>
+  <entry key="136">Επώνυμο</entry>
+  <entry key="137">Email</entry>
+  <entry key="138">Γενέθλια</entry>
+  <entry key="139">Οδός/Αριθμός</entry>
+  <entry key="140">Τ.Κ./Πόλη</entry>
+  <entry key="141">Χώρα</entry>
+  <entry key="142">Διεύθυνση</entry>
+  <entry key="143">Στοιχεία Χρήστη</entry>
+  <entry key="144">Αποθήκευση</entry>
+  <entry key="145">Αποθήκευση</entry>
+  <entry key="146">ID</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">Όνομα</entry>
+  <entry key="149">Επώνυμο</entry>
+  <entry key="150">Επόμενο</entry>
+  <entry key="151">Προηγούμενο</entry>
+  <entry key="152">Διαγραφή Εγγραφής</entry>
+  <entry key="153">Ακύρωση</entry>
+  <entry key="154">Διαγραφή</entry>
+  <entry key="155">Νέα Εγγραφή</entry>
+  <entry key="156">Ανανέωση Εγγραφής</entry>
+  <entry key="157">Διαγραφή Εγγραφής</entry>
+  <entry key="158">Κατάσταση</entry>
+  <entry key="159">Απενεργοποιημένη</entry>
+  <entry key="160">Ενεργοποιημένη</entry>
+  <entry key="161">Οργανισμοί</entry>
+  <entry key="162">Ημερολόγιο</entry>
+  <entry key="163">Κλείσιμο</entry>
+  <entry key="164">ID</entry>
+  <entry key="165">Όνομα</entry>
+  <entry key="166">Χρήστης</entry>
+  <entry key="167">Συντονιστής</entry>
+  <entry key="168">Διαχειριστής</entry>
+  <entry key="169">Επίπεδο Χρήστη</entry>
+  <entry key="170">Οργανισμός</entry>
+  <entry key="171">Όνομα</entry>
+  <entry key="172">Προσθήκη Οργανισμού</entry>
+  <entry key="173">Προσθήκη Οργανισμού</entry>
+  <entry key="174">Ακύρωση</entry>
+  <entry key="175">Προσθήκη</entry>
+  <entry key="176">Αφαίρεση Οργανισμού</entry>
+  <entry key="177">Χρήστης</entry>
+  <entry key="178">Προσθήκη Χρήστη</entry>
+  <entry key="179">Διαγραφή Χρήστη</entry>
+  <entry key="180">Προσθήκη Χρήστη σε Οργανισμό</entry>
+  <entry key="181">Εύρεση Χρήστη</entry>
+  <entry key="182">Εύρεση</entry>
+  <entry key="183">Χρήστης</entry>
+  <entry key="184">Οργανισμός</entry>
+  <entry key="185">Είσοδος</entry>
+  <entry key="186">Δωμάτια Συνδιασκέψεων</entry>
+  <entry key="187">Δωμάτιο Συνδιάσκέψεων</entry>
+  <entry key="188">Αριθμός</entry>
+  <entry key="189">Όνομα</entry>
+  <entry key="190">Δημόσιο</entry>
+  <entry key="191">Οργανισμοί</entry>
+  <entry key="192">Δωμάτια Συναντήσεων</entry>
+  <entry key="193">Όνομα</entry>
+  <entry key="194">Τύπος</entry>
+  <entry key="195">Δημόσιο</entry>
+  <entry key="196">Σχόλιο</entry>
+  <entry key="197">Αποθήκευση και Εξαγωγή</entry>
+  <entry key="198">Φόρτωση</entry>
+  <entry key="199">Αποθήκευση ως</entry>
+  <entry key="200">Όνομα Αρχείου</entry>
+  <entry key="201">Όνομα Αρχείου</entry>
+  <entry key="202">Ακύρωση</entry>
+  <entry key="203">Αποθήκευση</entry>
+  <entry key="204">Μήνυμα</entry>
+  <entry key="205">Φόρτωση</entry>
+  <entry key="206">Τα Αντικείμενα Φορτώθηκαν με Επιτυχία</entry>
+  <entry key="207">Συγχρονισμός πελατών. Πελάτες προς Αναμονή:</entry>
+  <entry key="208">Φόρτωση Δεδομένων Εικόνας</entry>
+  <entry key="209">Συγχρονισμός πελατών. Πελάτες προς Αναμονή:</entry>
+  <entry key="210">Εκκαθάριση Περιοχής Σχεδίασης</entry>
+  <entry key="211">Εκκαθάριση Περιοχής Σχεδίασης: Όλα τα δεδομένα του Πίνακα θα χαθούν!</entry>
+  <entry key="212">Να ζητείται Επιβεβαίωση πριν από την Φόρτωση Αρχείου</entry>
+  <entry key="213">Αποστολή Πρόσκλησης</entry>
+  <entry key="214">Αποστολή Πρόσκλησης</entry>
+  <entry key="215">Θέμα</entry>
+  <entry key="216">Παραλήπτης</entry>
+  <entry key="217">Μήνυμα</entry>
+  <entry key="218">Αποστολή</entry>
+  <entry key="219">Ακύρωση</entry>
+  <entry key="220">Aποστολή</entry>
+  <entry key="221">Στοιχεία Χρήστη</entry>
+  <entry key="222">Ψευδώνυμο για αυτήν τη Συνδιάσκεψη</entry>
+  <entry key="223">Ψευδώνυμο</entry>
+  <entry key="224">Όνομα</entry>
+  <entry key="225">Επώνυμο</entry>
+  <entry key="226">Email</entry>
+  <entry key="227">Γλώσσα</entry>
+  <entry key="228">Είσοδος</entry>
+  <entry key="229">Φόρτωση</entry>
+  <entry key="230">Φόρτωση Δεδομένων: Παρακαλούμε περιμένετε!</entry>
+  <entry key="231">Λάθος Κωδικός</entry>
+  <entry key="232">Παρακαλούμε εισάγετε δύο πανομοιότυπους Κωδικούς τουλάχιστον 6 Χαρακτήρων!</entry>
+  <entry key="233">Λάθος Email</entry>
+  <entry key="234">Μη Έγκυρη Διεύθυνση Email!</entry>
+  <entry key="235">Η Kαταχώρηση Oλοκληρώθηκε</entry>
+  <entry key="236">Ο Λογαριασμός σας δημιουργήθηκε με επιτυχία. Τώρα μπορείτε να συνδεθείτε.</entry>
+  <entry key="237">Δεν μπορείτε να μοιραστείτε την Οθόνη σας αυτή τη στιγμή! Κάποιος άλλος μοιράζεται ήδη την δική του.</entry>
+  <entry key="238">Διαμοίραση Απαγορευμένη</entry>
+  <entry key="239">Διαμοίραση Οθόνης</entry>
+  <entry key="240">Κακό Bandwidth: Δεν μπορέσατε να συγχρονίσετε την Οθόνη. Κάποια πλαίσια θα χαθούν. Αν αυτή η ειδοποίηση εμφανίζεται συχνά μπορείτε να ζητήσετε στο συντονιστή να μειώσει την Ποιότητα.</entry>
+  <entry key="241">Οθόνη του:</entry>
+  <entry key="242">Ζωγραφική</entry>
+  <entry key="243">Έγγραφα</entry>
+  <entry key="244">Συνομιλία</entry>
+  <entry key="245">Αρχεία</entry>
+  <entry key="246">Μέλη</entry>
+  <entry key="247">Αποθήκευση Γνήσιου Εγγράφου</entry>
+  <entry key="248">Αποθήκευση pdf Εγγράφου</entry>
+  <entry key="249">Φόρτωση Παρουσίασης στον Πίνακα</entry>
+  <entry key="250">Διαμόρφωση</entry>
+  <entry key="251">Σύρετε το Αντικείμενο</entry>
+  <entry key="252">Αλλάξτε το μέγεθος του Αντικειμένου</entry>
+  <entry key="253">%</entry>
+  <entry key="254">από</entry>
+  <entry key="255">Μεταφορά στην Πρώτη Σελίδα</entry>
+  <entry key="256">Μεταφορά στην Προηγούμενη Σελίδα</entry>
+  <entry key="257">Μεταφορά στην Επόμενη Σελίδα</entry>
+  <entry key="258">Μεταφορά στην Τελευταία Σελίδα</entry>
+  <entry key="259">Εστίαση --</entry>
+  <entry key="260">Εστίαση ++</entry>
+  <entry key="261">Κος</entry>
+  <entry key="262">Κα</entry>
+  <entry key="263">Διαμόρφωση</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Κλειδί</entry>
+  <entry key="266">Διαμόρφωση</entry>
+  <entry key="267">Κλειδί</entry>
+  <entry key="268">Τελευταία Τροποποίηση</entry>
+  <entry key="269">Τροποποιημένο από</entry>
+  <entry key="270">Σχόλιο</entry>
+  <entry key="271">Τιμή</entry>
+  <entry key="272">από</entry>
+  <entry key="273">Χρήστες</entry>
+  <entry key="274">Διαγραφή Χρήστη από Οργανισμό</entry>
+  <entry key="275">Δ</entry>
+  <entry key="276">Ο Χρήστης είναι ήδη Μέλος του συγκεκριμένου Οργανισμού!</entry>
+  <entry key="277">Νέα</entry>
+  <entry key="278">Γρήγοροι Σύνδεσμοι</entry>
+  <entry key="279">Συνδιάσκεψη</entry>
+  <entry key="280">Αμφιθέατρο</entry>
+  <entry key="281">Βοήθεια και Υποστήριξη</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Αναφορά Bug!</entry>
+  <entry key="285">Περισσότερα</entry>
+  <entry key="286">Project Website (http://openmeetings.apache.org)</entry>
+  <entry key="287">Λίστα με Email Χρηστών (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Υπενθύμιση Login</entry>
+  <entry key="289">Περιεχόμενο</entry>
+  <entry key="290">Η Αρχική Μου Σελίδα</entry>
+  <entry key="291">Προγραμματισμένες Συναντήσεις</entry>
+  <entry key="292">Προγραμματισμένα Συμβάντα</entry>
+  <entry key="293">Δημόσιες Συναντήσεις</entry>
+  <entry key="294">Ιδιωτικές Συναντήσεις</entry>
+  <entry key="295">Δημόσια Συμβάντα</entry>
+  <entry key="296">Ιδιωτικά Συμβάντα</entry>
+  <entry key="297">Δημόσιο Περιεχόμενο</entry>
+  <entry key="298">Ιδιωτικό Περιεχόμενο</entry>
+  <entry key="299">Προσωπικό Περιεχόμενο</entry>
+  <entry key="300"></entry>
+  <entry key="301">Συντονισμός</entry>
+  <entry key="302">Αίτηση για Συντονισμό</entry>
+  <entry key="303">Ψηφοφορίες</entry>
+  <entry key="304">Επιλογή Αρχείου</entry>
+  <entry key="305">Ρυθμίσεις</entry>
+  <entry key="306">Κάμερα &amp; Μικρόφωνο</entry>
+  <entry key="307">Πίνακας</entry>
+  <entry key="308">Έξοδος</entry>
+  <entry key="309">Πίσω στα Δωμάτια</entry>
+  <entry key="310">Logout</entry>
+  <entry key="311">Ξεχάσατε τον Κωδικό σας?</entry>
+  <entry key="312">Αλλάξτε Κωδικό</entry>
+  <entry key="313">Μέσω Email</entry>
+  <entry key="314">Μέσω Login</entry>
+  <entry key="315">To Email Σας</entry>
+  <entry key="316">Το Login Σας</entry>
+  <entry key="317">Αποστολή Email με Σύνδεσμο εκ νέου ρύθμισης (reset)</entry>
+  <entry key="318">Η διεύθυνση Email δεν βρέθηκε! Εισάγετε την ίδια διεύθυνση Email με εκείνην που χρησιμοποιήσατε για τη δημιουργία του Λογαριασμού σας.</entry>
+  <entry key="319">Παρακαλούμε εισάγετε Διεύθυνση Email ή Όνομα Χρήστη</entry>
+  <entry key="320">Δεν βρέθηκε Χρήστης που να αντιστοιχεί στο συγκεκριμένο Όνομα Χρήστη!</entry>
+  <entry key="321">Ένα mail με Ειδικό Σύνδεσμο έχει σταλεί στη διεύθυνση Email σας. Παρακαλούμε ελέγξτε το ταχυδρομείο σας. Αν δεν έχετε λάβει ακόμα mail, παρακαλούμε προσαρμόστε τις ρυθμίσεις spam του ταχυδρομείου σας και επαναλάβατε την αποστολή του mail Επιβεβαίωσης.</entry>
+  <entry key="322">Μήνυμα</entry>
+  <entry key="323">Μήνυμα</entry>
+  <entry key="324">Μη Έγκυρη Τιμή Hash! Δεν βρέθηκαν Χρήστες.</entry>
+  <entry key="325">Αλλάξτε τον Κωδικό σας</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">Αλλαγή Κωδικού</entry>
+  <entry key="328">Νέος Κωδικός</entry>
+  <entry key="329">Επανάληψη Κωδικού</entry>
+  <entry key="330">Οι Κωδικοί που πληκτρολογήσατε δεν είναι ίδιοι!</entry>
+  <entry key="331">4 ή Περισσότεροι Χαρακτήρες: Προβλήματα Καταχώρησης με Κεφαλαία Γράμματα!</entry>
+  <entry key="332">Ο Κωδικός ρυθμίστηκε. Τώρα μπορείτε να συνδεθείτε.</entry>
+  <entry key="333">Εντάξει</entry>
+  <entry key="334">Άγνωστο Σφάλμα: Παρακαλούμε να το αναφέρετε στην Ομάδα Εξυπηρέτησής σας.</entry>
+  <entry key="335">Το Όνομα Χρήστη δεν βρέθηκε.</entry>
+  <entry key="336">Μη Έγκυρος Κωδικός</entry>
+  <entry key="337">Επιτυχής Αποσύνδεση</entry>
+  <entry key="338">Frontend Εγγραφές Απενεργοποιημένες.</entry>
+  <entry key="339">Μη Έγκυρο Email</entry>
+  <entry key="340">Επανάληψη Ονόματος Αρχείου: Παρακαλούμε επιλέξτε διαφορετικό Όνομα Αρχείου!</entry>
+  <entry key="341">Πολύ μικρό Όνομα Αρχείου!</entry>
+  <entry key="342">Αδυναμία Αποθήκευσης Διεύθυνσης</entry>
+  <entry key="343">Ο Χρήστης προστέθηκε επιτυχώς, αλλά πρέπει να τοποθετηθεί σε κάποιον Οργανισμό, αλλιώς δεν θα μπορεί να συνδεθεί!</entry>
+  <entry key="344">Νέα Εγγραφή</entry>
+  <entry key="345">Δεν βρέθηκε Πεδίο με το συγκεκριμένο ID (Κωδικό Αριθμό) Πεδίου!</entry>
+  <entry key="346">Δεν βρέθηκε Ετικέτα για το συγκεκριμένο Πεδίο!</entry>
+  <entry key="347">Απαιτείται Εξουσιοδότηση από το Διαχειριστή!</entry>
+  <entry key="348">Σύνταξη Γλώσσας</entry>
+  <entry key="349">Γλώσσα</entry>
+  <entry key="350">ID Ετικέτας</entry>
+  <entry key="351">Όνομα Ετικέτας</entry>
+  <entry key="352">Τιμή</entry>
+  <entry key="353">Τιμές Πεδίου</entry>
+  <entry key="354">Όνομα Ετικέτας:</entry>
+  <entry key="355">Τιμή Ετικέτας:</entry>
+  <entry key="356">Αριθμός Ετικέτας:</entry>
+  <entry key="357">Διαγράψατε μόνο την Ετικέτα και ΟΧΙ το Πεδίο! Δεν μπορείτε να διαγράψετε το Πεδίο, διότι ενδέχεται να περιέχει Ετικέτες σε άλλες Γλώσσες.</entry>
+  <entry key="358">Μη Έγκυρο ID (Κωδικός Αριθμός) Ετικέτας! Δεν βρέθηκε καταχωρημένο στη Βάση Δεδομένων.</entry>
+  <entry key="359">Δεν μπορείτε να διαγράψετε το συγκεκριμένο Πεδίο! Μπορείτε να διαγράφετε Ετικέτες αλλά ΟΧΙ Πεδία. Αυτή τη στιγμή δεν έχει επιλεγεί κάποια Ετικέτα. Είτε δεν έγινε επιλογή Ετικέτας από κανένα Πεδίο, είτε δεν υπάρχει Ετικέτα για την συγκεκριμένη Γλώσσα και το συγκεκριμένο Πεδίο.</entry>
+  <entry key="360">Εξαγωγή</entry>
+  <entry key="361">Πρέπει να αποσυνδεθείτε για να δείτε τις αλλαγές!</entry>
+  <entry key="362">Προσθήκη Νέας Γλώσσας</entry>
+  <entry key="363">Διαγραφή Γλώσσας</entry>
+  <entry key="364">Προσθήκη Νέας Γλώσσας</entry>
+  <entry key="365">Όνομα</entry>
+  <entry key="366">Προσθήκη Γλώσσας</entry>
+  <entry key="367">Αντίγραφα Ασφαλείας</entry>
+  <entry key="368">Αρχή</entry>
+  <entry key="369">Προηγούμενο</entry>
+  <entry key="370">Επόμενο</entry>
+  <entry key="371">Τέλος</entry>
+  <entry key="372">Ο Χρήστης μιλάει (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">Ανοιγμα/Κλείσιμο Ήχου</entry>
+  <entry key="374">Σύστημα</entry>
+  <entry key="375">Οι Ρυθμίσεις Σας</entry>
+  <entry key="376">Γειά σας,</entry>
+  <entry key="377">Επεξεργασία Προφίλ</entry>
+  <entry key="378">Νέα Μηνύματα:</entry>
+  <entry key="379">Αλλαγή Εικόνας</entry>
+  <entry key="380">Δεδομένα Χρήστη - Εξαγωγή</entry>
+  <entry key="381">Όλοι οι Oργανισμοί πρέπει να είναι ήδη υπάρχοντες!</entry>
+  <entry key="382">Εκκίνηση Εξαγωγής</entry>
+  <entry key="383">Κατά Οργανισμό</entry>
+  <entry key="384">Εκκίνηση Εξαγωγής</entry>
+  <entry key="385">Δεδομένα Χρήστη - Εισαγωγή</entry>
+  <entry key="386">Επιλογή users.xml</entry>
+  <entry key="387">Εισαγωγή</entry>
+  <entry key="388">Εξαγωγή σε XML Αρχείο. Το Αρχείο αυτό μπορεί να χρησιμοποιηθεί για:&lt;br/&gt; - Συνεισφορά στο Project &lt;br/&gt; - Εισαγωγή σε άλλο Σύστημα&lt;br/&gt; - Αντίγραφο Ασφαλείας &lt;br/&gt; - Εξατομίκευση&lt;br/&gt; - Εισαγωγή στο φάκελο Γλωσσών για επόμενη Εγκατάσταση</entry>
+  <entry key="389">Επιλογή Αρχείου Γλώσσας για Εισαγωγή. &lt;br/&gt;ΠΡΟΣΟΧΗ: Επιλέξτε τη σωστή Γλώσσα από τη λίστα! &lt;br/&gt;Όποιο και να είναι το όνομα του αρχείου&lt;br/&gt;θα εισαχθεί στην επιλεγμένη γλώσσα!</entry>
+  <entry key="390">Εισαγωγή - Επιλογή Αρχείου</entry>
+  <entry key="391">Αποθήκευση ως</entry>
+  <entry key="392">Όνομα:</entry>
+  <entry key="393">Σχόλιο:</entry>
+  <entry key="394">Αποθήκευση</entry>
+  <entry key="395">Μαγνητοσκοπήσεις</entry>
+  <entry key="396">Προβολέας Μαγνητοσκοπήσεων</entry>
+  <entry key="397">Μαγνητοσκοπήσεις Δημοσίων και Ιδιωτικών Δωματίων.</entry>
+  <entry key="398">Χρήστες :</entry>
+  <entry key="399">Συνδεδεμένοι:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Χρήστες σε αυτό το Δωμάτιο:</entry>
+  <entry key="402">Ανανέωση</entry>
+  <entry key="403">Αυτό το Δωμάτιο είναι πλήρες! Δοκιμάστε ξανά σε μερικά λεπτά.</entry>
+  <entry key="404">Επιλέξτε ένα Δωμάτιο για να δείτε Λεπτομέρειες.</entry>
+  <entry key="405">Συνομιλήστε με τους Χρήστες σε αυτό το Δωμάτιο:</entry>
+  <entry key="406">Δωμάτιο:</entry>
+  <entry key="407">Χρήστες σε αυτό το Δωμάτιο:</entry>
+  <entry key="408">Από:</entry>
+  <entry key="409">Αναπαραγωγή Μαγνητοσκόπησης</entry>
+  <entry key="410">Μήκος:</entry>
+  <entry key="411">Ημερομηνία:</entry>
+  <entry key="412">Λειτουργία Μαγνητοσκόπησης! Δεν μπορείτε να μεταβάλλετε καμία Τιμή. Πρόκειται για ένα μαγνητοσκοπημένο Αρχείο!</entry>
+  <entry key="413">Αναπαραγωγή</entry>
+  <entry key="414">Αναπαραγωγή / Παύση</entry>
+  <entry key="415">Έναρξη Μαγνητοσκόπησης</entry>
+  <entry key="416">Λήξη Μαγνητοσκόπησης</entry>
+  <entry key="417">Μαγνητοσκόπηση:</entry>
+  <entry key="418">Κάποιος άλλος μαγνητοσκοπεί ήδη αυτή τη στιγμή:</entry>
+  <entry key="419">Μαγνητοσκόπηση! Από τον Χρήστη:</entry>
+  <entry key="420">Ακύρωση</entry>
+  <entry key="421">Ακύρωση Μαγνητοσκόπησης χωρίς Αποθήκευση!</entry>
+  <entry key="422">Συνέχεια</entry>
+  <entry key="423">Κλείσιμο Παραθύρου και Συνέχεια Μαγνητοσκόπησης.</entry>
+  <entry key="424">Αλλαγή Χρώματος Γραμμής</entry>
+  <entry key="425">Επιλογή Χρώματος</entry>
+  <entry key="426">Απενεργοποίηση / Ενεργοποίηση Χρώματος Γραμμής</entry>
+  <entry key="427">Αλλαγή Χρώματος Γεμίσματος</entry>
+  <entry key="428">Απενεργοποίηση / Ενεργοποίηση Χρώματος Γεμίσματος</entry>
+  <entry key="429">Αλλαγή Πλάτους Γραμμής</entry>
+  <entry key="430">Κλείσιμο</entry>
+  <entry key="431">Αλλαγή Μεγέθους Γραμματοσειράς</entry>
+  <entry key="432">Διαγραφή Μαγνητοσκόπησης</entry>
+  <entry key="433">Επισκέπτης</entry>
+  <entry key="434">Από:</entry>
+  <entry key="435">Όνομα</entry>
+  <entry key="436">Δωμάτιο</entry>
+  <entry key="437">Ημερομηνία</entry>
+  <entry key="438">Ακύρωση</entry>
+  <entry key="439">Έναρξη</entry>
+  <entry key="440">Όνομα</entry>
+  <entry key="441">Ημερομηνία</entry>
+  <entry key="442">Διαγραφή Chatlog από το Διακομιστή</entry>
+  <entry key="443">Συνομιλία</entry>
+  <entry key="444">Aποστολή Μηνύματος</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Επιλογή Δημοσιευμένων Συσκευών</entry>
+  <entry key="448">Ήχος και Βίντεο</entry>
+  <entry key="449">Ήχος μόνο</entry>
+  <entry key="450">Βίντεο μόνο</entry>
+  <entry key="451">Χωρίς Ηχό/Βίντεο (Στατική Εικόνα)</entry>
+  <entry key="452">Δεν θα δημοσιεύεται ούτε Ήχος ούτε Βίντεο από το PC σας. Αντί αυτού θα εμφανίζεται η Εικόνα του Προφίλ σας. Επιλέξτε αυτήν τη ρύθμιση αν έχετε προβλήματα με το bandwidth σας ή μια πολύ αργή Σύνδεση Internet.</entry>
+  <entry key="453">ΔΕΥ</entry>
+  <entry key="454">ΤΡΙ</entry>
+  <entry key="455">ΤΕΤ</entry>
+  <entry key="456">ΠΕΜ</entry>
+  <entry key="457">ΠΑΡ</entry>
+  <entry key="458">ΣΑΒ</entry>
+  <entry key="459">ΚΥΡ</entry>
+  <entry key="460">Δευτέρα</entry>
+  <entry key="461">Τρίτη</entry>
+  <entry key="462">Τετάρτη</entry>
+  <entry key="463">Πέμπτη</entry>
+  <entry key="464">Παρασκευή</entry>
+  <entry key="465">Σάββατο</entry>
+  <entry key="466">Κυριακή</entry>
+  <entry key="467">ΗΕ</entry>
+  <entry key="468">Ημερολογιακή Εβδομάδα</entry>
+  <entry key="469">Ιανουάριος</entry>
+  <entry key="470">Φεβρουάριος</entry>
+  <entry key="471">Μάρτιος</entry>
+  <entry key="472">Απρίλιος</entry>
+  <entry key="473">Μάιος</entry>
+  <entry key="474">Ιούνιος</entry>
+  <entry key="475">Ιούλιος</entry>
+  <entry key="476">Αύγουστος</entry>
+  <entry key="477">Σεπτέμβριος</entry>
+  <entry key="478">Οκτώβριος</entry>
+  <entry key="479">Νοέμβριος</entry>
+  <entry key="480">Δεκέμβριος</entry>
+  <entry key="481">Ημερολόγιο</entry>
+  <entry key="482">Συμμετέχοντες</entry>
+  <entry key="483">Εμφάνιση Ρυθμίσεων Διάταξης</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Πλάτος | Ύψος</entry>
+  <entry key="486">Χώρος Βίντεο</entry>
+  <entry key="487">Χώρος Συντονισμού</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Χώρος Πίνακα</entry>
+  <entry key="490">Ενεργοποιημένος</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Πλάτος | Ύψος</entry>
+  <entry key="493">Χώρος Αρχείων, Συνομιλιών και Συμμετεχόντων</entry>
+  <entry key="494">Ενεργοποιημένος</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Πλάτος | Ύψος</entry>
+  <entry key="497">Ο Συντονιστής εγκατέλειψε το Δωμάτιο. Κανείς δεν παρουσιάζει αυτήν τη στιγμή. Μπορείτε να κάνετε αίτηση για Συντονισμό ή να περιμένετε.</entry>
+  <entry key="498">Δεν υπάρχει Συντονιστής σε αυτό το Δωμάτιο, αλλά υπάρχουν κάποιοι Συμμετέχοντες. Πρέπει να κάνετε αίτηση για Συντονισμό ή να περιμένετε.</entry>
+  <entry key="499">{0} - Ανάδραση</entry>
+  <entry key="500">{0} - Πρόσκληση</entry>
+  <entry key="501">Μήνυμα από το Χρήστη:</entry>
+  <entry key="502">Μήνυμα:</entry>
+  <entry key="503">Κάντε κλικ σε αυτόν το Σύνδεσμο για να συμμετάσχετε στις Συναντήσεις:</entry>
+  <entry key="504">Κάντε κλικ εδώ για να μπείτε σε κάποιο Δωμάτιο.</entry>
+  <entry key="505">Αν έχετε προβλήματα με το Σύνδεσμο, παρακαλούμε αντιγράψτε και επικολλήστε αυτό στο Φυλλομετρητή σας:</entry>
+  <entry key="506">Εγγραφή στο {0}</entry>
+  <entry key="507">Τα Στοιχεία Σας:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Κωδικός:</entry>
+  <entry key="510">Email:</entry>
+  <entry key="511">{0} - Ομάδα</entry>
+  <entry key="512">{0} - Εγγραφή Μέλους</entry>
+  <entry key="513">{0} - Αλλαγή Κωδικού</entry>
+  <entry key="514">Κάντε κλικ σε αυτόν το Σύνδεσμο για να εισάγετε έναν νέο Κωδικό:</entry>
+  <entry key="515">Κάντε κλικ εδώ για να εισάγετε έναν νέο Κωδικό.</entry>
+  <entry key="516">Αν έχετε προβλήματα με το Σύνδεσμο, παρακαλούμε αντιγράψτε και επικολλήστε αυτό στο Φυλλομετρητή σας:</entry>
+  <entry key="517">{0} - Αλλαγή Κωδικού</entry>
+  <entry key="518">Παρακαλούμε εισάγετε μια έγκυρη Ημερομηνία, για παράδειγμα: 24.12.2001 (ΗΗ.ΜΜ.ΕΕΕΕ)</entry>
+  <entry key="519">Παρακαλούμε εισάγετε ένα έγκυρο Email, για παράδειγμα: name@mail.com</entry>
+  <entry key="520">Παρακαλούμε εισάγετε έναν πραγματικό Aριθμό, για παράδειγμα: 1.00</entry>
+  <entry key="521">Παρακαλούμε εισάγετε έναν ακέραιο Aριθμό, για παράδειγμα: 100</entry>
+  <entry key="522">Παρακαλούμε εισάγετε έναν έγκυρο Aριθμό Tηλεφώνου, για παράδειγμα: ++30 210 5731230</entry>
+  <entry key="523">Παρακαλούμε εισάγετε μια έγκυρη Ώρα, για παράδειγμα: 12:23 (ΩΩ:ΛΛ)</entry>
+  <entry key="524">Προστατευμένο με Κωδικό</entry>
+  <entry key="525">Κωδικός</entry>
+  <entry key="526">Εγκυρότητα</entry>
+  <entry key="527">Απεριόριστη</entry>
+  <entry key="528">Περίοδος</entry>
+  <entry key="529">Μία Φορά</entry>
+  <entry key="530">Έγκυρο Από:</entry>
+  <entry key="531">Έγκυρο Έως:</entry>
+  <entry key="532">Πρόσκληση στο {0}</entry>
+  <entry key="533">Δεν υπάρχει διαθέσιμη Πρόσκληση για το συγκεκριμένο Κωδικό!</entry>
+  <entry key="534">Η Πρόσκληση έχει ήδη χρησιμοποιηθεί! Αυτός ο τύπος Πρόσκλησης δεν μπορεί να χρησιμοποιηθεί ξανά.</entry>
+  <entry key="535">Ο συγκεκριμένος Κωδικός Πρόσκλησης δεν είναι έγκυρος!</entry>
+  <entry key="536">Κωδικός:</entry>
+  <entry key="537">Έλεγχος Κωδικού</entry>
+  <entry key="538">Μη Έγκυρος Κωδικός!</entry>
+  <entry key="539">Ήχος/Βίντεο</entry>
+  <entry key="540">Συγχρονισμός Ήχου/Βίντεο</entry>
+  <entry key="541">Το login ήταν σωστό, αλλά η Σύνοδος που δοκιμάσατε δεν είναι ενεργή ή δεν είναι αποθηκευμένη στον Διακομιστή. Πρέπει να αποκτήσετε νέο Αριθμό Συνόδου και να δοκιμάσετε να συνδεθείτε ξανά.</entry>
+  <entry key="542">Ο Αριθμός Συνόδου δεν είναι ενεργός ή δεν έχει δικαιώματα Διαχείρισης. Η πύλη SOAP χρειάζεται έναν Χρήστη με Δικαιώματα Διαχείρισης για την ενσωμάτωση νέων Χρηστών.</entry>
+  <entry key="543">Η συγκεκριμένη Σύνοδος δεν έχει συνδεδεμένα Στοιχεία Απομακρυσμένου Χρήστη. Είτε δεν καλέσατε την πύλη SOAP πριν την πρόσβαση στην Εφαρμογή, είτε χρησιμοποιείτε λάθος Αριθμό Συνόδου.</entry>
+  <entry key="544">Η Συσκευή Εγγραφής είναι σε πειραματικό στάδιο προς το παρόν!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">Άξονας-x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">Άξονας-y</entry>
+  <entry key="549">π</entry>
+  <entry key="550">Πλάτος</entry>
+  <entry key="551">υ</entry>
+  <entry key="552">Ύψος</entry>
+  <entry key="553">Αλλαγή Βαθμού Διαφάνειας</entry>
+  <entry key="554">Άνοιγμα Φυλλομετρητή</entry>
+  <entry key="555">Κλείσιμο Φυλλομετρητή</entry>
+  <entry key="556">Η Σύνδεση με το Διακομιστή χάθηκε. Πρέπει να φορτώσετε ξανά την Εφαρμογή ή/και να ελέγξετε το Δίκτυό σας.</entry>
+  <entry key="557">Δείκτης</entry>
+  <entry key="558">Συγχρονισμός</entry>
+  <entry key="559">Συγχρονισμός Χρηστών. Παρακαλούμε περιμένετε.</entry>
+  <entry key="560">&lt;u&gt;Αποθήκευση ως SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Αποθήκευση ως PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Αποθήκευση ως JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Αποθήκευση ως PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Αποθήκευση ως TIF&lt;/u&gt;</entry>
+  <entry key="565">Υπενθύμιση:</entry>
+  <entry key="566">Κατηγορία:</entry>
+  <entry key="567">Επανάληψη:</entry>
+  <entry key="568">Καμία</entry>
+  <entry key="569">Τοποθεσία:</entry>
+  <entry key="570">Έναρξη</entry>
+  <entry key="571">Λήξη</entry>
+  <entry key="572">Τίτλος:</entry>
+  <entry key="573">Σχόλιο:</entry>
+  <entry key="574">Προσκαλέστε Κόσμο</entry>
+  <entry key="575">Καθημερινά</entry>
+  <entry key="576">Κάθε Μήνα</entry>
+  <entry key="577">Κάθε Έτος</entry>
+  <entry key="578">Η Λήξη μιας Συνάντησης πρέπει να είναι μετά από την Έναρξη της Συνάντησης!</entry>
+  <entry key="579">Παρακαλούμε εισάγετε Τίτλο!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Ενεργοποιήστε αυτό για γλώσσες με διάταξη από τα δεξιά προς τα αριστερά.</entry>
+  <entry key="582">Αρχικό Ταμπλό</entry>
+  <entry key="583">Παρακολουθήστε μαγνητοφωνημένες Συναντήσεις ή Συμβάντα</entry>
+  <entry key="584">Συνάντηση - Συνδιάσκεψη με 4 (έως 16) Χρήστες&lt;br/&gt;Όλοι θα έχουν πρόσβαση σε Ήχο και Βίντεο.</entry>
+  <entry key="585">Συμβάν - Συνδιάσκεψη με έως και 200 συμμετέχοντες&lt;br/&gt;Μόνο ο Συντονιστής θα έχει Ήχο και Βίντεο.</entry>
+  <entry key="586">Δημιουργία Χρηστών, Δωματίων, Οργανισμών&lt;br/&gt; και Αλλαγή Διαμόρφωσης.</entry>
+  <entry key="587">Χρήστες Δωματίου</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">Δ</entry>
+  <entry key="591">Φόρτωση Εγγράφου. Παρακαλούμε περιμένετε μέχρι να συγχρονιστούν όλοι οι Πελάτες.</entry>
+  <entry key="592">Η Φόρτωση Ολοκληρώθηκε. Μετατροπή Εγγράφου ...</entry>
+  <entry key="593">Έναρξη Φόρτωσης</entry>
+  <entry key="594">Διάλογος Φόρτωσης και Εισαγωγής: Παρακαλούμε επιλέξτε ένα Αρχείο από το Δίσκο.</entry>
+  <entry key="595">Ακύρωση</entry>
+  <entry key="596">Επιλογή Αρχείου</entry>
+  <entry key="597">Συνδέσεις</entry>
+  <entry key="598">Τιμή</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Συνδεδεμένος Από</entry>
+  <entry key="602">Δωμάτιο / Πλαίσιο</entry>
+  <entry key="603">Αφαίρεση Χρήστη</entry>
+  <entry key="604">Αφαίρεση Χρήστη</entry>
+  <entry key="605">Θέλετε πραγματικά να βγάλετε αυτόν τον Πελάτη από τη Σύνδεση;&lt;br/&gt; Με αυτόν τον τρόπο ο Πελάτης αφαιρείται μόνο από το τρέχον Δωμάτιο και μπορεί να συνδεθεί ξανά.</entry>
+  <entry key="606">Η Σύνοδός σας έχει κλείσει από Διαχειριστή ή Συντονιστή.</entry>
+  <entry key="607">Τηλέφωνο</entry>
+  <entry key="608">Ο Χρήστης είναι ο Συντονιστής του συγκεκριμένου Δωματίου!</entry>
+  <entry key="609">Ο Χρήστης επιτρέπεται να σχεδιάσει πάνω στον Πίνακα.</entry>
+  <entry key="610">(Επαν)Εκκίνηση Ήχου/Βίντεο ή Αλλαγή Ρυθμίσεων Συσκευής</entry>
+  <entry key="611">Επιτρέψτε στο Χρήστη να σχεδιάσει πάνω στον Πίνακα</entry>
+  <entry key="612">Αφαιρέστε τη δυνατότητα σχεδίασης πάνω στον Πίνακα</entry>
+  <entry key="613">Χρήστες</entry>
+  <entry key="614">Αρχεία</entry>
+  <entry key="615">Πίνακας</entry>
+  <entry key="616">Συνομιλία</entry>
+  <entry key="617">Ο Λογαριασμός σας αντιστοιχεί σε πολλαπλούς Οργανισμούς. Παρακαλούμε επιλέξτε έναν από αυτούς για τη συγκεκριμένη Σύνοδο.</entry>
+  <entry key="618">Αυτό το Δωμάτιο είναι πλήρες. Παρακαλούμε δοκιμάστε ξανά αργότερα.</entry>
+  <entry key="619">Τύπος Δωματίου</entry>
+  <entry key="620">Δωμάτιο Συνάντησης</entry>
+  <entry key="621">Χρόνος Διακομιστή</entry>
+  <entry key="622">{0} - Υπενθύμιση</entry>
+  <entry key="623">Μήνυμα από τον Χρήστη:</entry>
+  <entry key="624">Μήνυμα:</entry>
+  <entry key="625">Κάντε κλικ σε αυτόν το Σύνδεσμο για να συμμετάσχετε στις Συναντήσεις:</entry>
+  <entry key="626">Κάντε κλικ εδώ για να εισέλθετε στο Δωμάτιο</entry>
+  <entry key="627">Αν έχετε προβλήματα με το Σύνδεσμο, παρακαλούμε αντιγράψτε και επικολλήστε αυτό στο Φυλλομετρητή σας:</entry>
+  <entry key="628">Εσωτερική Αναζήτηση</entry>
+  <entry key="629">Εξωτερική Προσθήκη</entry>
+  <entry key="630">Όνομα</entry>
+  <entry key="631">Επώνυμο</entry>
+  <entry key="632">Email</entry>
+  <entry key="633">Επιβεβαίωση Αποσύνδεσης</entry>
+  <entry key="634">Θέλετε σίγουρα να αποσυνδεθείτε;</entry>
+  <entry key="635">Ενέργειες</entry>
+  <entry key="636">Δωμάτιο Επιδείξεων</entry>
+  <entry key="637">Χρόνος Επίδειξης</entry>
+  <entry key="638">Χρονόμετρο Συνάντησης</entry>
+  <entry key="639">Αυτό το Δωμάτιο είναι ένα Δωμάτιο Επιδείξεων. Για να απενεργοποιήθεί αυτή η ειδοποίηση πρέπει να βρείτε ένα Ιδιωτικό Δωμάτιο Συναντήσεων για προσωπική χρήση ή να εγκαταστήσετε Διακομιστή της κυριότητάς σας. Αυτόματη Αποσύνδεση σε:</entry>
+  <entry key="640">Υπό Συντονισμό</entry>
+  <entry key="641">Παρακαλούμε περιμένετε μέχρι να εισέλθει στο Δωμάτιο Συντονιστής. ο Συντονιστής μπορεί να είναι κάποιος Δάσκαλος, Διαχειριστής ή ο δημιουργός του Δωματίου.</entry>
+  <entry key="642">Εντάξει</entry>
+  <entry key="643">Εισερχόμενη Διαμοίραση Οθόνης</entry>
+  <entry key="644">Υπάρχει μια νέα εισερχόμενη Διαμοίραση Οθόνης από το Χρήστη:</entry>
+  <entry key="645">Έναρξη Διαμοίρασης</entry>
+  <entry key="646">Προσθήκη Νέας Συνάντησης</entry>
+  <entry key="647">Δωμάτιο Συναντήσεων</entry>
+  <entry key="648">Δωμάτιο Συμβάντων</entry>
+  <entry key="649">Συντονισμός</entry>
+  <entry key="650">Συντονισμός Χρηστών</entry>
+  <entry key="651">Συντονισμός Δωματίων</entry>
+  <entry key="652">Σ</entry>
+  <entry key="653">Θα θέλατε να μετατρέψετε αυτόν το Χρήστη σε Συντονιστή του Οργανισμού;</entry>
+  <entry key="654">Παρακαλούμε επιλέξτε έναν Οργανισμό πριν προσπαθήσετε να προσθέσετε κάποιον Χρήστη σε αυτόν!</entry>
+  <entry key="655">Οργανισμός - Συντονιστής</entry>
+  <entry key="656">Θέλετε πραγματικά να διαγράψετε αυτόν το Χρήστη από τον Οργανισμό;</entry>
+  <entry key="657">Αυτός ο Χρήστης είναι Συντονιστής!</entry>
+  <entry key="658">Αυτός ο Χρήστης δεν είναι Συντονιστής.</entry>
+  <entry key="659">Θέλετε αυτός ο Χρήστης να μην είναι Συντονιστής του Οργανισμού;</entry>
+  <entry key="660">Προσθέστε ή διαγράψτε Χρήστες/Δωμάτια στον Οργανισμό σας.</entry>
+  <entry key="661">Θέλετε πραγματικά να διαγράψετε αυτήν την Εγγραφή;</entry>
+  <entry key="662">Θέλετε πραγματικά να διαγράψετε αυτόν το Χρήστη από τον Οργανισμό σας; Θα διαγραφεί μόνο η Σύνδεση μεταξύ του Χρήστη και του Οργανισμού. Για να διαγράψετε πραγματικά τον Χρήστη πρέπει να συνδεθείτε στον Πίνακα Διαχείρισης.</entry>
+  <entry key="663">Δεν μπορείτε να διαγράψετε το δικό σας Χρήστη!</entry>
+  <entry key="664">Αυτή η Μέθοδος χρειάζεται Λογαριασμό Διαχειριστή για να εκτελεστεί!</entry>
+  <entry key="665">Δεν υπάρχει Σύνοδος που να σχετίζεται με το συγκεκριμένο Κωδικό Αριθμό (ID).</entry>
+  <entry key="666">Πρόκειται για Λογαριασμό Διαχειριστή ή Συντονιστή! Η επεξεργασία τέτοιων Λογαριασμών είναι δυνατή μόνο από τον Πίνακα Διαχείρισης.</entry>
+  <entry key="667">Για την ολοκλήρωση της Εγγραφής σας παρακαλούμε κάντε κλικ στον παρακάτω Σύνδεσμο ή αντιγράψτε το URL στην μπάρα του Φυλλομετρητή σας.</entry>
+  <entry key="668">Κάντε κλικ για να επιβεβαιώσετε το Email σας.</entry>
+  <entry key="669">Δεν βρέθηκε Xρήστης για τη συγκεκριμένη τιμή Hash.</entry>
+  <entry key="670">Αυτός ο Xρήστης έχει ενεργοποιηθεί ήδη!</entry>
+  <entry key="671">Ο Λογαριασμός σας ενεργοποιήθηκε με επιτυχία!</entry>
+  <entry key="672">Συνδεθείτε Τώρα</entry>
+  <entry key="673">Ο Λογαριασμός σας δεν είναι ενεργοποιημένος! Χρησιμοποιείστε πρώτα το Σύνδεσμο που βρίσκεται στο Email που λάβατε κατά την διάρκεια της Εγγραφής σας.</entry>
+  <entry key="674">Εγγραφήκατε με επιτυχία. Ένα μήνυμα με Επαναληπτικό Κωδικό έχει σταλεί στο Email σας. Παρακαλούμε ελέγξτε το Ταχυδρομείο σας.</entry>
+  <entry key="675">Αφαίρεση Συντονιστικού Ρόλου από αυτόν το Χρήστη.</entry>
+  <entry key="676">Παραχώρηση Δικαιωμάτων Συντονισμού σε αυτόν το Χρήστη.</entry>
+  <entry key="677">Χρήστης</entry>
+  <entry key="678">Πρόσβαση στον Πίνακα</entry>
+  <entry key="679">Συντονιστής</entry>
+  <entry key="680">Συντονισμός: Επιλέξτε κάποιον Χρήστη από τη Λίστα για να του παραχωρήσετε το Συντονισμό και πρόσβαση σε Πίνακα ή Βίντεο.</entry>
+  <entry key="681">Αυτός ο Χρήστης είναι ήδη Συντονιστής, οπότε έχει αυτόματα Δικαιώματα Σχεδίασης.</entry>
+  <entry key="682">Πρόκειται για εσάς! Δεν μπορείτε να αφαιρέσετε δικαιώματα Συντονισμού από τον εαυτό σας.</entry>
+  <entry key="683">Επιτρέψτε σε αυτόν τον Χρήστη να Δημοσιεύσει τον Ήχο/Βίντεό του.</entry>
+  <entry key="684">Αφαίρεση Ήχου/Βίντεο του συγκεκριμένου Χρήστη.</entry>
+  <entry key="685">Θα ήθελα να αναλάβω τον Συντονισμό αυτού του Δωματίου.</entry>
+  <entry key="686">Θα ήθελα να σχεδιάσω πάνω στον Πίνακα.</entry>
+  <entry key="687">Θα ήθελα να μοιραστώ τον Ήχο/Βίντεό μου.</entry>
+  <entry key="688">Είσαστε ο Συντονιστής αυτού του Δωματίου.</entry>
+  <entry key="689">Μπορείτε να σχεδιάσετε πάνω στον Πίνακα.</entry>
+  <entry key="690">Μπορείτε να μοιραστείτε τον Ήχο/Βίντεό σας.</entry>
+  <entry key="691">Μήνυμα στο Συντονιστή</entry>
+  <entry key="692">Ο Χρήστης</entry>
+  <entry key="693">θα ήθελε να αναλάβει το Συντονισμό. Χρησιμοποιήστε τα Εικονίδια Κατάστασης δίπλα στο Χρήστη (Λίστα Χρηστών) για να αναθέσετε ή να αφαιρέσετε το Συντονισμό.</entry>
+  <entry key="694">θα ήθελε να σχεδιάσει πάνω στον Πίνακα. Χρησιμοποιείστε τα Εικονίδια Κατάστασης δίπλα στο Χρήστη (Λίστα Χρηστών) για να παραχωρήσετε ή να αφαιρέσετε δικαιώματα σχεδίασης πάνω στον Πίνακα.</entry>
+  <entry key="695">θα ήθελε να μοιραστεί τον Ήχο/Βίντεό του. Χρησιμοποιείστε τα Εικονίδια Κατάστασης δίπλα στο Χρήστη (Λίστα Χρηστών) για να παραχωρήσετε ή να αφαιρέσετε το δικαίωμα οποιουδήποτε Χρήστη να μοιράζεται Ήχο/Βίντεο.</entry>
+  <entry key="696">Πρέπει να περιμένετε μέχρι να εισέλθει κάποιος Συντονιστής στο Δωμάτιο.</entry>
+  <entry key="697">Ακύρωση</entry>
+  <entry key="698">Αποθήκευση</entry>
+  <entry key="699">Ημέρα</entry>
+  <entry key="700">Μήνας</entry>
+  <entry key="701">Έτος</entry>
+  <entry key="702">Φόρτωση Αρχείου</entry>
+  <entry key="703">Προσθήκη Φακέλου</entry>
+  <entry key="704">Ανανέωση</entry>
+  <entry key="705">Σκουπίδια</entry>
+  <entry key="706">Τα Αρχεία Μου (Home Drive)</entry>
+  <entry key="707">Αρχεία Δωματίου (Public Drive)</entry>
+  <entry key="708">Προσθήκη Αρχείου</entry>
+  <entry key="709">Προσθήκη Φακέλου</entry>
+  <entry key="710">Διαγραφή Φακέλου</entry>
+  <entry key="711">Επεξεργασία Ονόματος</entry>
+  <entry key="712">Νέος Φάκελος</entry>
+  <entry key="713">Θέλετε σίγουρα να διαγράψετε το συγκεκριμένο Στοιχείο;</entry>
+  <entry key="714">Αναζήτηση</entry>
+  <entry key="715">Αναζήτηση</entry>
+  <entry key="716">Άνοιγμα Εγγράφου</entry>
+  <entry key="717">Εμφάνιση όλων των Αρχείων (Δενδρική Εικόνα)</entry>
+  <entry key="718">Κλείσιμο Εγγράφου</entry>
+  <entry key="719">Διαγραφή Αρχείου</entry>
+  <entry key="720">Δεν επιτρέπεται να σχεδιάσετε τίποτα πάνω στον Πίνακα. Πρέπει να γίνετε Συντονιστής ή τουλάχιστον να αποκτήσετε δικαιώματα Επεξεργασίας του Πίνακα. Μπορείτε να ζητήσετε από ένα Συντονιστή να σας παραχωρήσει τέτοια δικαιώματα.</entry>
+  <entry key="721">Ιδιότητες Εγγράφου</entry>
+  <entry key="722">Έναρξη Πελάτη (external)</entry>
+  <entry key="723">Έναρξη Πελάτη (HTTP)</entry>
+  <entry key="724">Κάποιος Χρήστης θέλει να μοιραστεί την Οθόνη του. Επιθυμείτε να την δείτε?</entry>
+  <entry key="725">Αυτήν τη στιγμή μοιράζεστε την Επιφάνεια Εργασίας σας. Για την διακοπή της Συνόδου Διαμοίρασης παρακαλούμε πατήστε το κουμπί Διακοπής στο Διαμοιραζόμενο Πελάτη.</entry>
+  <entry key="726">Σύνοδος Διαμοίρασης</entry>
+  <entry key="727">Ήδη μοιράζεστε την Επιφάνεια Εργασίας σας!</entry>
+  <entry key="728">Προβολή Επιφάνειας Εργασίας</entry>
+  <entry key="729">Έξοδος</entry>
+  <entry key="730">Διαμοιραστής Επιφάνειας Εργασίας</entry>
+  <entry key="731">Πατήστε "Έναρξη Διαμοίρασης" για να δημοσιοποιήσετε την Οθόνη σας.</entry>
+  <entry key="732">Έναρξη Διαμοίρασης</entry>
+  <entry key="733">Τερματισμός Διαμοίρασης</entry>
+  <entry key="734">Επιλογή Περιοχής Οθόνης:</entry>
+  <entry key="735">Μεταβολή Πλάτους</entry>
+  <entry key="736">Ο Διαμοιραστής τερμάτισε την συγκεκριμένη Σύνοδο!</entry>
+  <entry key="737">Μεταβολή Ύψους</entry>
+  <entry key="738">Αρχικό Σημείο-X</entry>
+  <entry key="739">Αρχικό Σημείο-Y</entry>
+  <entry key="740">Πλάτος:</entry>
+  <entry key="741">Ύψος:</entry>
+  <entry key="742">Η Σύνδεση έκλεισε από τον Διακομιστή!</entry>
+  <entry key="743">Ακύρωση</entry>
+  <entry key="744">Εξωτερική Έναρξη</entry>
+  <entry key="745">Αν κλείσετε πλήρως αυτήν την Σύνοδο δεν θα μπορείτε να επανεκκινήσετε την προβολή για την συγκεκριμένη Σύνοδο!</entry>
+  <entry key="746">Επιβεβαίωση Τερματισμού Συνόδου Προβολής</entry>
+  <entry key="747">Διαμοίραση Οθόνης</entry>
+  <entry key="748">Σύνοδος Εγγραφής</entry>
+  <entry key="749">Από Κοινού Φυλλομέτρηση</entry>
+  <entry key="750">Λυπούμαστε, ... Ο Firefox στα Windows δεν εμφανίζει καθαρά την Από Κοινού Φυλλομέτρηση (Co-Browsing). Παρακαλούμε χρησιμοποιήστε κάποιον άλλο Φυλομετρητή για να κάνετε χρήση του συγκεκριμένου χαρακτηριστικού.</entry>
+  <entry key="751">Προηγούμενο</entry>
+  <entry key="752">Επόμενο</entry>
+  <entry key="753">Επαναφόρτωση</entry>
+  <entry key="754">Αρχική Σελίδα</entry>
+  <entry key="755">Φόρτωση</entry>
+  <entry key="756">Προσθήκη του συγκεκριμένου Website ως Εξ'ορισμού Website στο Προφίλ σας.</entry>
+  <entry key="757">Δοκιμή Εγκατάστασης</entry>
+  <entry key="758">Ελέγξτε την εγκατάσταση του Μικροφώνου και της Κάμεράς σας πριν εισέλθετε σε κάποιο Δωμάτιο, μαγνητοσκοπώντας για κάποια δευτερόλεπτα.</entry>
+  <entry key="759">Να μην εμφανιστεί αυτός ο έλεγχος ξανά.</entry>
+  <entry key="760">Ακύρωση</entry>
+  <entry key="761">Συνδιάσκεψη</entry>
+  <entry key="762">Να μην ερωτηθώ ξανά.</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Μπορείτε να συνεχίσετε χωρίς ελέγχους αν δεν σχεδιάζετε να δημοσιοποιήσετε την φωνή ή την εικόνα σας. Οι Συμμετέχοντες χωρίς Ήχο ή Βίντεο μπορούν να κάνουν χρήση του Πίνακα, να μοιράζονται την Επιφάνεια Εργασίας τους ή να γράφουν μηνύματα Συνομιλιών.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Μέτρο Επιπέδου</entry>
+  <entry key="768">Έναρξη</entry>
+  <entry key="769">Έναρξη Συνδιάσκεψης</entry>
+  <entry key="770">Έναρξη Συμβάντος</entry>
+  <entry key="771">Επιλογή Δωματίου</entry>
+  <entry key="772">Έλεγχος</entry>
+  <entry key="773">Έναρξη Συνδιάσκεψης</entry>
+  <entry key="774">Διαδικασία Συνδιάσκεψης:</entry>
+  <entry key="775">Μαγνητοσκόπηση</entry>
+  <entry key="776">Να μην γίνεται Έλεγχος Ήχου/Βίντεο (Μαγνητοσκόπηση) πριν από την είσοδο σε Συνδιάσκεψη.</entry>
+  <entry key="777">Δημόσια Δωμάτια</entry>
+  <entry key="778">Στα Δημόσια Δωμάτια έχουν πρόσβαση όλοι οι Χρήστες.</entry>
+  <entry key="779">Ιδιωτικά Δωμάτια</entry>
+  <entry key="780">Στα Ιδιωτικά Δωμάτια έχουν πρόσβαση μόνο οι Χρήστες του ίδιου Οργανισμού.</entry>
+  <entry key="781">Τα Δωμάτιά Μου</entry>
+  <entry key="782">Τα Δωμάτια του συγκεκριμένου τμήματος δημιουργούνται για προσωπική χρήση μέσα από το Ημερολόγιο και διαθέτουν μια αρχική και μια τελική ημερομηνία. Μόνο έγκυρα Δωμάτια εμφανίζονται εδώ.</entry>
+  <entry key="783">Πρέπει να είσαστε Συντονιστής για να πραγματοποιήσετε την συγκεκριμένη ενέργεια.</entry>
+  <entry key="784">Αίτηση Συντονισμού</entry>
+  <entry key="785">Αίτηση Πρόσβασης στον Πίνακα</entry>
+  <entry key="786">Αίτηση Πρόσβασης σε Κάμερα/Μικρόφωνο</entry>
+  <entry key="787">Η συγκεκριμένη τιμή Hash Συνόδου έχει χρησιμοποιηθεί ήδη. Δεν μπορείτε να την χρησιμοποιήσετε ξανά!</entry>
+  <entry key="788">ΕΝΑΡΞΗ</entry>
+  <entry key="789">ΕΧΙΤ</entry>
+  <entry key="790">Θέλετε πραγματικά να εγκαταλείψετε την Συνδιάσκεψη; Καλό θα ήταν να καθαρίσετε τον Πίνακα και το Ιστορικό Συνομιλιών και να αφαιρέσετε Έγγραφα που πιθανώς έχουν φορτωθεί.</entry>
+  <entry key="791">Έξοδος από την Συνδιάσκεψη</entry>
+  <entry key="792">Δωμάτια</entry>
+  <entry key="793">Επιλέξτε Δωμάτιο για Συνάντηση</entry>
+  <entry key="794">Υπάρχει κάποιο μη αποθηκευμένο Συμβάν στο Ημερολόγιο. Παρακαλούμε είτε να το αποθηκεύσετε είτε να το αφαιρέσετε.</entry>
+  <entry key="795">Παρακαλούμε προσθέστε τουλάχιστον έναν Συμμετέχοντα στην Συνάντησή σας!</entry>
+  <entry key="796">Θέλετε πραγματικά να διαγράψετε αυτό το Συμβάν;</entry>
+  <entry key="797">Προειδοποίηση</entry>
+  <entry key="798">Προσθήκη Συμβάντος</entry>
+  <entry key="799">Μέρα</entry>
+  <entry key="800">Εβδομάδα</entry>
+  <entry key="801">Μήνας</entry>
+  <entry key="802">Περιγραφή</entry>
+  <entry key="803">Συμμετέχοντες</entry>
+  <entry key="804">{0}: Η Πλατφόρμα Σας για Web Συνδιασκέψεις. Μπορείτε να ακολουθήσετε τις Οδηγίες, να πατήσετε το κουμπί Έναρξης και να ξεκινήσετε αμέσως μια Συνδιάσκεψη ή να μετα-φερθείτε στο Ημερολόγιο και να προγραμματίσετε μια Συνδιάσκεψη για το μέλλον.</entry>
+  <entry key="805">Σχέδιο Συνάντησης</entry>
+  <entry key="806">Για να προγραμματίσετε μια Συνδιάσκεψη μπορείτε να προσθέσετε ένα νέο Συμβάν στο Ημερολόγιο. Για κάθε Συμβάν του Ημερολογίου δημιουργείται αυτόματα ένα Δωμάτιο Συνδιασκέψεων. Εσείς, μάζι με όλους τους Συμμετέχοντες στην Συνδιάσκεψη, θα λάβετε ένα mail με σύνδεσμο στο συγκεκριμένο Δωμάτιο.&lt;br/&gt;&lt;br/&gt;Μπορείτε να επιλέξετε μεταξύ διαφορετικών τύπων Δωματίων που έχουν διαφορετικές διατάξεις και διαφορετικά συστήματα Συντονισμού. Μπορείτε επίσης να επιλέξετε μεταξύ διαφορετικών τύπων Ειδοποίησης για το mail που θα σταλεί για κάθε Συμβάν του Ημερολογίου.</entry>
+  <entry key="807">Χρειάζεστε Βοήθεια;</entry>
+  <entry key="808">Περιορισμένη</entry>
+  <entry key="809">Αναζήτηση</entry>
+  <entry key="810">Προσθήκη</entry>
+  <entry key="811">Δεν έχει επιλεγεί Χρήστης! Παρακαλούμε επιλέξτε πρώτα ένα στοιχείο από τη λίστα και έπειτα πατήστε "Προσθήκη".</entry>
+  <entry key="812">Προσθήκη Συμμετέχοντα</entry>
+  <entry key="813">Αποθήκευση</entry>
+  <entry key="814">Διαγραφή</entry>
+  <entry key="815">Λεπτομέρειες Συμβάντος</entry>
+  <entry key="816">Εξ Oρισμού Συντονιστές</entry>
+  <entry key="817">Ανώτερος</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Όνομα</entry>
+  <entry key="820">Email</entry>
+  <entry key="821">Προσθήκη Νέου Εξ Oρισμού Συντονιστή</entry>
+  <entry key="822">Είναι Ανώτερος Συντονιστής</entry>
+  <entry key="823">Αν το Δωμάτιο είναι συντονιζόμενο, οι Χρήστες επιπέδου Συντονιστή ή Διαχειριστή γίνονται αυτόματα Συντονιστές όταν εισέλθουν στο Δωμάτιο. Αν θέλετε μόνο κάποιος συγκεκριμένος Χρήστης να γίνει Συντονιστής χρησιμοποιήστε την επιλογή Εξ Ορισμού Συντονιστή.</entry>
+  <entry key="824">Ένας Ανώτερος Συντονιστής είναι πάντα Συντονιστής όταν εισέρχεται σε κάποιο Δωμάτιο και κανείς δεν μπορεί να αφαιρέσει το Σήμα Συντονισμού από αυτόν.</entry>
+  <entry key="825">Εφαρμογή Ανώτερου Συντονισμού σε Χρήστη</entry>
+  <entry key="826">Αφαίρεση Ανώτερου Συντονισμού από Χρήστη</entry>
+  <entry key="827">Δ</entry>
+  <entry key="828">Με την προσθήκη ενός Οργανισμού σε ένα Δωμάτιο, μόνο οι Χρήστες που ανήκουν στον συγκεκριμένο Οργανισμό έχουν πρόσβαση στο συγκεκριμένο δωμάτιο (Αυτό ισχύει μόνο όταν η τιμή "Δημόσιο" είναι ίση με false!).</entry>
+  <entry key="829">Συντονισμός</entry>
+  <entry key="830">Περιορισμοί</entry>
+  <entry key="831">Οργανισμός</entry>
+  <entry key="832">Είστε σίγουρος;</entry>
+  <entry key="833">Θέλετε πραγματικά να διαγράψετε το συγκεκριμένο Στοιχείο; Πρέπει να πατήσετε το κουμπί αποθήκευσης για να αποθηκευτούν οι αλλαγές!</entry>
+  <entry key="834">Δεν έχει επιλεγεί κάποιος Χρήστης! Παρακαλούμε επιλέξτε πρώτα έναν Χρήστη και μετά κάντε προσθήκη.</entry>
+  <entry key="835">Προσθήκη Νέου Εξ Ορισμού Συντονιστή</entry>
+  <entry key="836">Επιθυμείτε να προσθέσετε το Σήμα Ανώτερου Συντονισμού σε αυτόν τον Χρήστη; Ένας Ανώτερος Συντονιστής δεν είναι μόνο Συντονιστής κάποιου Δωματίου. Επιπλέον, κανένας άλλος Συντονιστής δεν μπορεί να αφαιρέσει το Σήμα Συντονισμού από αυτόν. Πρέπει να αποθηκεύσετε το Αντικείμενο Δωματίου για την αποθήκευση των συγκεκριμένων ρυθμίσεων!</entry>
+  <entry key="837">Επιθυμείτε να αφαιρέσετε το Σήμα Ανώτερου Συντονισμού από αυτόν τον Χρήστη; Πρέπει να αποθηκεύσετε το Αντικείμενο Δωματίου για την αποθήκευση των συγκεκριμένων ρυθμίσεων!</entry>
+  <entry key="838">Αυτός ο Χρήστης είναι Ανώτερος Συντονιστής! Δεν μπορείτε να αφαιρέσετε το Σήμα Συντονισμού από έναν Ανώτερο Συντονιστή!</entry>
+  <entry key="839">Θέλετε πραγματικά να διαγράψετε το συγκεκριμένο Αρχείο/Φάκελο;</entry>
+  <entry key="840">Διαγραφή Αρχείου/Φακέλου;</entry>
+  <entry key="841">Δις.</entry>
+  <entry key="842">Δρ.</entry>
+  <entry key="843">Ιδιότητες</entry>
+  <entry key="844">Εμφάνιση θέσης ποντικιού στους θεατές</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_es.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_es.properties.xml
new file mode 100644
index 0000000..a921e0d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_es.properties.xml
@@ -0,0 +1,1868 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Conferencia</entry>
+  <entry key="2">Reunión</entry>
+  <entry key="3">Eventos</entry>
+  <entry key="4">Ajustes</entry>
+  <entry key="5">Perfil</entry>
+  <entry key="6">Administración</entry>
+  <entry key="7">Detener</entry>
+  <entry key="8">Grabar</entry>
+  <entry key="9">No hay ningún archivo disponible</entry>
+  <entry key="10">Grabado por el profesor</entry>
+  <entry key="11">Usuarios conectados:</entry>
+  <entry key="12">Iniciar conferencia</entry>
+  <entry key="13">Mi nombre</entry>
+  <entry key="14">Videoconferencia</entry>
+  <entry key="15">Enviar un archivo</entry>
+  <entry key="16">Actualizar la lista</entry>
+  <entry key="17">Marcar como archivo principal</entry>
+  <entry key="18">Nueva encuesta</entry>
+  <entry key="19">Nueva encuesta para la conferencia</entry>
+  <entry key="20">Pregunta:</entry>
+  <entry key="21">Tipo de Encuesta:</entry>
+  <entry key="22">Crear</entry>
+  <entry key="23">Información: cada usuario conectado recibe un mensaje con la nueva encuesta.</entry>
+  <entry key="24">Crear encuesta</entry>
+  <entry key="25">Cancelar</entry>
+  <entry key="26">Sí/No</entry>
+  <entry key="27">Valor numérico [1-10]</entry>
+  <entry key="28">Encuesta</entry>
+  <entry key="29">Se necesita ser moderador para crear una encuesta.</entry>
+  <entry key="30">Su voto ha sido registrado</entry>
+  <entry key="31">Ya ha respondido a la encuesta con anterioridad</entry>
+  <entry key="32">Votar</entry>
+  <entry key="33">Su respuesta:</entry>
+  <entry key="34">Sí</entry>
+  <entry key="35">No</entry>
+  <entry key="36">Desea saber:</entry>
+  <entry key="37">Resultados</entry>
+  <entry key="38">Pregunta:</entry>
+  <entry key="39">Resultados:</entry>
+  <entry key="40">Respuestas:</entry>
+  <entry key="41">No hay encuestas</entry>
+  <entry key="42">Votar</entry>
+  <entry key="43">Reunión (máx 4 puestos)</entry>
+  <entry key="44">Conferencia (máx 50 puestos)</entry>
+  <entry key="45">Tipo</entry>
+  <entry key="46">Otros puestos</entry>
+  <entry key="47">Ya fue seleccionado.</entry>
+  <entry key="48">Entrar</entry>
+  <entry key="49">El moderador ha abandonado la reunión.</entry>
+  <entry key="50">Información del sistema</entry>
+  <entry key="51">Seleccionar dispositivo</entry>
+  <entry key="52">Seleccionar cámara:</entry>
+  <entry key="53">Seleccionar micrófono:</entry>
+  <entry key="54">Aceptar</entry>
+  <entry key="55">Cancelar</entry>
+  <entry key="56">Necesita reconectarse</entry>
+  <entry key="57">Editar configuración</entry>
+  <entry key="58">Curso:</entry>
+  <entry key="59">Idioma:</entry>
+  <entry key="60">Aceptar</entry>
+  <entry key="61">Cancelar</entry>
+  <entry key="62">Borrar pizarra</entry>
+  <entry key="63">¿Desea limpiar la pizarra antes de añadir una nueva imagen?</entry>
+  <entry key="64">No volver a preguntar</entry>
+  <entry key="65">no</entry>
+  <entry key="66">Editar configuración</entry>
+  <entry key="67">Requerir confirmación antes de limpiar la pizarra</entry>
+  <entry key="68">Información del usuario</entry>
+  <entry key="69">Limpiar la pizarra</entry>
+  <entry key="70">Deshacer</entry>
+  <entry key="71">Rehacer</entry>
+  <entry key="72">Seleccionar un objeto</entry>
+  <entry key="73">Texto</entry>
+  <entry key="74">Pintar</entry>
+  <entry key="75">Trazar una línea</entry>
+  <entry key="76">Subrayar</entry>
+  <entry key="77">Rectángulo</entry>
+  <entry key="78">Elipse</entry>
+  <entry key="79">Flecha</entry>
+  <entry key="80">Borrar el ítem escogido</entry>
+  <entry key="81">Solicitar ser moderador</entry>
+  <entry key="82">Solicitar</entry>
+  <entry key="83">Cancelar</entry>
+  <entry key="84">Tengo una pregunta</entry>
+  <entry key="85">Cerrar</entry>
+  <entry key="86">Itálica</entry>
+  <entry key="87">Negrita</entry>
+  <entry key="88">En espera...</entry>
+  <entry key="89">Un usuario solicita la moderación; puede concederle acceso sólo a la pizarra o cambiar por completo el rol de la moderación. Usuario:</entry>
+  <entry key="90">Aceptar</entry>
+  <entry key="91">Denegar</entry>
+  <entry key="92">Cancelar</entry>
+  <entry key="93">Enviando la solicitud a los siguientes usuarios</entry>
+  <entry key="94">Aceptado</entry>
+  <entry key="95">Rechazado</entry>
+  <entry key="96">Cambiar de moderador</entry>
+  <entry key="97">Usted no es moderador</entry>
+  <entry key="98">Moderador:</entry>
+  <entry key="99">Lo sentimos, pero esta sala está llena. Inténtelo más tarde</entry>
+  <entry key="100">Elipse</entry>
+  <entry key="101">Cerrado</entry>
+  <entry key="102">error en la introducción de datos</entry>
+  <entry key="103">el nombre de usuario debe contener al menos 4 caracteres</entry>
+  <entry key="104">la clave de usuario debe contener al menos 4 caracteres</entry>
+  <entry key="105">Este nombre de usuario ya existe</entry>
+  <entry key="106">Este email ya está registrado</entry>
+  <entry key="107">Error del sistema, por favor contacte con el administrador</entry>
+  <entry key="108">Entrar</entry>
+  <entry key="109">Usuario:</entry>
+  <entry key="110">Contraseña:</entry>
+  <entry key="111">Idioma</entry>
+  <entry key="112">Entrar</entry>
+  <entry key="113">Registrarse</entry>
+  <entry key="114">Usuario:</entry>
+  <entry key="115">Contraseña:</entry>
+  <entry key="116">Contraseña (otra vez):</entry>
+  <entry key="117">Nombre:</entry>
+  <entry key="118">Apellidos:</entry>
+  <entry key="119">Correo electrónico:</entry>
+  <entry key="120">País:</entry>
+  <entry key="121">Registrarse</entry>
+  <entry key="122">Cancelar</entry>
+  <entry key="123">¿No está registrado?</entry>
+  <entry key="124">Inicio</entry>
+  <entry key="125">Usuarios</entry>
+  <entry key="126">Grupos</entry>
+  <entry key="127">Organizaciones</entry>
+  <entry key="128">Salas de Conferencias</entry>
+  <entry key="129">Público</entry>
+  <entry key="130">Organización</entry>
+  <entry key="131">Entrar</entry>
+  <entry key="132">Inicio</entry>
+  <entry key="133">Contraseña</entry>
+  <entry key="134">Escribir de nuevo</entry>
+  <entry key="135">Nombre</entry>
+  <entry key="136">Apellidos</entry>
+  <entry key="137">Correo Electrónico</entry>
+  <entry key="138">Fecha nacimiento</entry>
+  <entry key="139">Dirección</entry>
+  <entry key="140">Código/Población</entry>
+  <entry key="141">País</entry>
+  <entry key="142">Más información</entry>
+  <entry key="143">Datos de Usuario</entry>
+  <entry key="144">Guardar</entry>
+  <entry key="145">Guardar</entry>
+  <entry key="146">ID</entry>
+  <entry key="147">Inicio</entry>
+  <entry key="148">Nombre</entry>
+  <entry key="149">Apellido(s)</entry>
+  <entry key="150">Mostrar siguiente</entry>
+  <entry key="151">Mostrar anterior</entry>
+  <entry key="152">Eliminar registro</entry>
+  <entry key="153">Cancelar</entry>
+  <entry key="154">Borrar</entry>
+  <entry key="155">Nuevo registro</entry>
+  <entry key="156">Actualizar registro</entry>
+  <entry key="157">Borrar registro</entry>
+  <entry key="158">Estado</entry>
+  <entry key="159">desactivado</entry>
+  <entry key="160">activado</entry>
+  <entry key="161">Organizaciones</entry>
+  <entry key="162">Calendario</entry>
+  <entry key="163">Cerrar</entry>
+  <entry key="164">ID</entry>
+  <entry key="165">Nombre</entry>
+  <entry key="166">Usuario</entry>
+  <entry key="167">Moderador</entry>
+  <entry key="168">Administrador</entry>
+  <entry key="169">Nivel de usuario</entry>
+  <entry key="170">Organización</entry>
+  <entry key="171">nombre</entry>
+  <entry key="172">Añadir organización</entry>
+  <entry key="173">Añadir organización</entry>
+  <entry key="174">Cancelar</entry>
+  <entry key="175">Añadir</entry>
+  <entry key="176">Eliminar organización</entry>
+  <entry key="177">Usuario</entry>
+  <entry key="178">Añadir usuario</entry>
+  <entry key="179">Eliminar usuario</entry>
+  <entry key="180">Añadir usuario</entry>
+  <entry key="181">Buscar usuario</entry>
+  <entry key="182">Buscar</entry>
+  <entry key="183">Usuario</entry>
+  <entry key="184">Organización</entry>
+  <entry key="185">Entrar</entry>
+  <entry key="186">Salas</entry>
+  <entry key="187">Salas de Conferencia</entry>
+  <entry key="188">ID</entry>
+  <entry key="189">Nombre</entry>
+  <entry key="190">pública</entry>
+  <entry key="191">Organizaciones</entry>
+  <entry key="192">Salas de Conferencia</entry>
+  <entry key="193">Nombre</entry>
+  <entry key="194">Tipo</entry>
+  <entry key="195">Pública</entry>
+  <entry key="196">Comentario</entry>
+  <entry key="197">Guardar y exportar</entry>
+  <entry key="198">cargar</entry>
+  <entry key="199">Guardar como</entry>
+  <entry key="200">Archivo</entry>
+  <entry key="201">archivo</entry>
+  <entry key="202">Cancelar</entry>
+  <entry key="203">Guardar</entry>
+  <entry key="204">Error</entry>
+  <entry key="205">Cargando</entry>
+  <entry key="206">Objetos cargados</entry>
+  <entry key="207">Sincronizando clientes, espere un momento.</entry>
+  <entry key="208">Cargando datos de imagen</entry>
+  <entry key="209">Sincronizando. Espere, por favor.</entry>
+  <entry key="210">Limpiar la pizarra</entry>
+  <entry key="211">limpiar la pizarra, toda la información de la pizarra se perderá</entry>
+  <entry key="212">Confirmar antes de cargar un archivo</entry>
+  <entry key="213">Enviar invitación</entry>
+  <entry key="214">Enviar invitación</entry>
+  <entry key="215">Tema</entry>
+  <entry key="216">Destinatario</entry>
+  <entry key="217">Mensaje</entry>
+  <entry key="218">Enviar</entry>
+  <entry key="219">cancelar</entry>
+  <entry key="220">enviar</entry>
+  <entry key="221">Datos de usuario</entry>
+  <entry key="222">Su nombre para esta conferencia</entry>
+  <entry key="223">Nombre (apodo)</entry>
+  <entry key="224">Nombre</entry>
+  <entry key="225">Apellido</entry>
+  <entry key="226">Email</entry>
+  <entry key="227">Idioma</entry>
+  <entry key="228">Entrar</entry>
+  <entry key="229">Cargando</entry>
+  <entry key="230">Cargando datos, espere un momento</entry>
+  <entry key="231">Contraseña errónea</entry>
+  <entry key="232">Por favor introduzca dos veces las misma contraseña con un mínimo de 4 caracteres</entry>
+  <entry key="233">Correo inválido</entry>
+  <entry key="234">Usted ha introducido una dirección no válida de correo electrónico</entry>
+  <entry key="235">El registro se ha completado con éxito</entry>
+  <entry key="236">Su cuenta ha sido creada, puede ingresar desde este momento</entry>
+  <entry key="237">No puede compartir su escritorio en este momento. Alguien más ya está compartiendo su escritorio.</entry>
+  <entry key="238">Compartición no permitida</entry>
+  <entry key="239">Compartir/grabar escritorio</entry>
+  <entry key="240">Problemas de conexión: Su ancho de banda es insuficiente y se perderá la información. Si el mensaje se repite con frecuencia solicite al moderador reducir la calidad de imagen y audio.</entry>
+  <entry key="241">Escritorio de:</entry>
+  <entry key="242">Dibujar</entry>
+  <entry key="243">Documento</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Archivos</entry>
+  <entry key="246">Miembros</entry>
+  <entry key="247">Descargar el documento original</entry>
+  <entry key="248">Descargar el documento en pdf</entry>
+  <entry key="249">Subir un archivo a la pizarra</entry>
+  <entry key="250">Configuración</entry>
+  <entry key="251">Arrastrar este objeto</entry>
+  <entry key="252">Ajustar el tamaño del objeto</entry>
+  <entry key="253">%</entry>
+  <entry key="254">de</entry>
+  <entry key="255">Ir a la primera página</entry>
+  <entry key="256">Ir a la página anterior</entry>
+  <entry key="257">Ir a la página siguiente</entry>
+  <entry key="258">Ir a la última página</entry>
+  <entry key="259">Disminuir Zoom</entry>
+  <entry key="260">Aumentar Zoom</entry>
+  <entry key="261">Sr.</entry>
+  <entry key="262">Sra.</entry>
+  <entry key="263">Configuración</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Clave</entry>
+  <entry key="266">Configuración</entry>
+  <entry key="267">Clave</entry>
+  <entry key="268">última actualización</entry>
+  <entry key="269">actualizado por</entry>
+  <entry key="270">comentar</entry>
+  <entry key="271">Valor</entry>
+  <entry key="272">de</entry>
+  <entry key="273">Usuarios</entry>
+  <entry key="274">Eliminar usuario de la organización</entry>
+  <entry key="275">Eliminar</entry>
+  <entry key="276">Este usuario ya es miembro de la organización</entry>
+  <entry key="277">Noticias</entry>
+  <entry key="278">Enlaces rápidos</entry>
+  <entry key="279">Ir a la (Vídeo)Conferencia</entry>
+  <entry key="280">Ir al Auditorio</entry>
+  <entry key="281">Ayuda y Soporte Técnico</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Enviar "bug"</entry>
+  <entry key="285">más</entry>
+  <entry key="286">Web del Proyecto (http://openmeetings.apache.org)</entry>
+  <entry key="287">Lista de correo del Proyecto (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Recordar</entry>
+  <entry key="289">Contenido</entry>
+  <entry key="290">Mi página de inicio</entry>
+  <entry key="291">Reuniones programadas</entry>
+  <entry key="292">Eventos programados</entry>
+  <entry key="293">Reuniones públicas</entry>
+  <entry key="294">Reuniones privadas</entry>
+  <entry key="295">Eventos públicos</entry>
+  <entry key="296">Eventos privados</entry>
+  <entry key="297">Contenido público</entry>
+  <entry key="298">Contenido privado</entry>
+  <entry key="299">Contenido personal</entry>
+  <entry key="300">...</entry>
+  <entry key="301">Moderación</entry>
+  <entry key="302">Tengo una pregunta</entry>
+  <entry key="303">Encuestas</entry>
+  <entry key="304">Seleccione un archivo</entry>
+  <entry key="305">Configuración</entry>
+  <entry key="306">Cámara y micrófono</entry>
+  <entry key="307">Configuración de la pizarra</entry>
+  <entry key="308">Salir</entry>
+  <entry key="309">Regresar a las salas</entry>
+  <entry key="310">Salir</entry>
+  <entry key="311">¿Ha olvidado su contraseña?</entry>
+  <entry key="312">Resetear contraseña</entry>
+  <entry key="313">Por email</entry>
+  <entry key="314">Por inicio de sesión</entry>
+  <entry key="315">Su email</entry>
+  <entry key="316">Su inicio de sesión</entry>
+  <entry key="317">Enviar correo con enlace de restablecimiento</entry>
+  <entry key="318">No se ha encontrado esa dirección de correo. Asegúrese de introducir la misma dirección que utilizó al crear la cuenta</entry>
+  <entry key="319">Escriba o su correo o su nombre de usuario</entry>
+  <entry key="320">No hay ningún usuario con ese nombre</entry>
+  <entry key="321">Se le ha enviado un correo con un enlace especial. Si no aparece este correo revise la configuración de filtros de spam de su servidor y reenvée este correo nuevamente.</entry>
+  <entry key="322">Error</entry>
+  <entry key="323">Mensaje</entry>
+  <entry key="324">No se encontró al usuario (método de generación de claves incorrecto).</entry>
+  <entry key="325">Generar contraseña</entry>
+  <entry key="326">Inicio</entry>
+  <entry key="327">cambiar contraseña</entry>
+  <entry key="328">nueva contraseña</entry>
+  <entry key="329">vuelva a escribir la contraseña</entry>
+  <entry key="330">Las contraseñas introducidas no son iguales.</entry>
+  <entry key="331">Escriba 4 ó más caracteres. Distingue mayúsculas de minúsculas</entry>
+  <entry key="332">La contraseña ha sido cambiada, ahora puede iniciar sesión.</entry>
+  <entry key="333">Aceptar</entry>
+  <entry key="334">Error desconocido. Envíe esta información al administrador del sistema.</entry>
+  <entry key="335">No se encontró al usuario</entry>
+  <entry key="336">Contraseña incorrecta</entry>
+  <entry key="337">Ha salido del sistema</entry>
+  <entry key="338">Registro desactivado.</entry>
+  <entry key="339">Correo incorrecto</entry>
+  <entry key="340">nombre de archivo duplicado, por favor seleccione otro</entry>
+  <entry key="341">el nombre del archivo es demasiado corto</entry>
+  <entry key="342">No se pudo guardar la dirección</entry>
+  <entry key="343">El usuario fue añadido, sin embargo deberá estar al menos en una organización para poder iniciar la sesión.</entry>
+  <entry key="344">Nueva grabación</entry>
+  <entry key="345">No se encontró un campo en este FieldId.</entry>
+  <entry key="346">No se encontró una etiqueta para este campo.</entry>
+  <entry key="347">Se necesita autorización del administrador</entry>
+  <entry key="348">Editor de idioma</entry>
+  <entry key="349">Idioma</entry>
+  <entry key="350">ID de la etiqueta</entry>
+  <entry key="351">Nombre de la etiqueta</entry>
+  <entry key="352">Valor</entry>
+  <entry key="353">Valor de los campos</entry>
+  <entry key="354">Nombre</entry>
+  <entry key="355">Valor de la etiqueta</entry>
+  <entry key="356">ID de la etiqueta</entry>
+  <entry key="357">Ha eliminado la etiqueta pero no el campo. No se puede eliminar un campo ya que puede tener etiquetas en otros idiomas.</entry>
+  <entry key="358">ID de la etiqueta incorrecto. Su FieldLanguagesvalues_Id no se encontró en la base de datos.</entry>
+  <entry key="359">Usted no puede eliminar este campo, sólo las etiquetas. No hay una etiqueta cargada por el momento o no se encuentra seleccionada ninguna (puede que no exista en el idioma seleccionado).</entry>
+  <entry key="360">exportar</entry>
+  <entry key="361">Necesita cerrar la sesión para ver los cambios.</entry>
+  <entry key="362">Añadir nuevo idioma</entry>
+  <entry key="363">eliminar idioma</entry>
+  <entry key="364">Añadir nuevo idioma</entry>
+  <entry key="365">Nombre</entry>
+  <entry key="366">añadir idioma</entry>
+  <entry key="367">Copia de seguridad</entry>
+  <entry key="368">ir al inicio</entry>
+  <entry key="369">anterior</entry>
+  <entry key="370">siguiente</entry>
+  <entry key="371">ir al final</entry>
+  <entry key="372">usuario habla (Haciendo clic aquí usted podrá dar audio exclusivo o silenciar el micrófono de los demás)</entry>
+  <entry key="373">encender o apagar sonido</entry>
+  <entry key="374">Sistema</entry>
+  <entry key="375">Su configuración</entry>
+  <entry key="376">Saludos,</entry>
+  <entry key="377">Editar perfil</entry>
+  <entry key="378">Nuevos mensajes:</entry>
+  <entry key="379">Subir imagen</entry>
+  <entry key="380">Datos de usuario - Exportar</entry>
+  <entry key="381">Deben existir todas las organizaciones previamente</entry>
+  <entry key="382">Iniciar la exportación</entry>
+  <entry key="383">Por organización</entry>
+  <entry key="384">Iniciar la exportación</entry>
+  <entry key="385">Datos de usuario - Importar</entry>
+  <entry key="386">Seleccione archivo xml</entry>
+  <entry key="387">importar</entry>
+  <entry key="388">Exportar a XML - Estos archivos pueden ser usados para: - Contribuir en el proyecto - Importarlos en otro sistema - Copia de Respaldo (Backup) - Personalización - Colocarlo en el directorio de idiomas para la próxima instalación.</entry>
+  <entry key="389">Seleccione un archivo de idioma que se importará. Configure correctamente el idioma en el menú desplegable (no importa el nombre que tenga el archivo ya que será importado de todos los modos).</entry>
+  <entry key="390">importar - seleccionar archivo</entry>
+  <entry key="391">Guardar como...</entry>
+  <entry key="392">Nombre:</entry>
+  <entry key="393">Comentario:</entry>
+  <entry key="394">guardar</entry>
+  <entry key="395">Grabaciones</entry>
+  <entry key="396">Visor de grabaciones</entry>
+  <entry key="397">Grabaciones de salas públicas y privadas</entry>
+  <entry key="398">Usuarios:</entry>
+  <entry key="399">Unido:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Usuarios en la sala:</entry>
+  <entry key="402">actualizar</entry>
+  <entry key="403">La sala esta llena. Por favor, inténtelo más tarde.</entry>
+  <entry key="404">Pulse sobre una sala para ver los detalles</entry>
+  <entry key="405">Conversar con los usuarios de esta sala:</entry>
+  <entry key="406">Sala:</entry>
+  <entry key="407">Usuarios en esta sala:</entry>
+  <entry key="408">desde:</entry>
+  <entry key="409">reproducir grabación</entry>
+  <entry key="410">Duración:</entry>
+  <entry key="411">Fecha:</entry>
+  <entry key="412">Modo de grabación: no puede cambiar ningún valor ya que se trata de un archivo grabado.</entry>
+  <entry key="413">Reproducir esta grabación</entry>
+  <entry key="414">Reproducir / Pausa</entry>
+  <entry key="415">Iniciar grabación</entry>
+  <entry key="416">Detener grabación</entry>
+  <entry key="417">Grabación:</entry>
+  <entry key="418">Actualmente alguien se encuentra grabando:</entry>
+  <entry key="419">Grabando por el usuario:</entry>
+  <entry key="420">cancelar</entry>
+  <entry key="421">La grabación será cancelada y no se guardará.</entry>
+  <entry key="422">reanudar</entry>
+  <entry key="423">Cerrar ventana y reanudar grabación</entry>
+  <entry key="424">Cambiar el color de línea</entry>
+  <entry key="425">Seleccionar color</entry>
+  <entry key="426">Deshabilitar / Habilitar color de línea</entry>
+  <entry key="427">Cambiar color de relleno</entry>
+  <entry key="428">Deshabilitar / Habilitar color de relleno</entry>
+  <entry key="429">Cambiar grosor de línea</entry>
+  <entry key="430">Cerrar</entry>
+  <entry key="431">cambiar tamaño de letra</entry>
+  <entry key="432">Eliminar grabación</entry>
+  <entry key="433">Invitado</entry>
+  <entry key="434">Por:</entry>
+  <entry key="435">Nombre</entry>
+  <entry key="436">Sala</entry>
+  <entry key="437">Fecha</entry>
+  <entry key="438">cancelar</entry>
+  <entry key="439">iniciar</entry>
+  <entry key="440">Nombre</entry>
+  <entry key="441">Fecha</entry>
+  <entry key="442">Eliminar registro (log) de chat en el servidor</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">enviar mensaje</entry>
+  <entry key="445">Emoticones</entry>
+  <entry key="446">Emoticones</entry>
+  <entry key="447">Seleccionar dispositivos</entry>
+  <entry key="448">Audio y vídeo</entry>
+  <entry key="449">Sólo audio</entry>
+  <entry key="450">Sólo vídeo</entry>
+  <entry key="451">Sin audio/vídeo (Imagen fija)</entry>
+  <entry key="452">No se transmitirá audio/vídeo desde su equipo. En su lugar se mostrará la imagen de su perfil. Seleccione esta configuración si tiene problemas con el ancho de banda de internet.</entry>
+  <entry key="453">LU</entry>
+  <entry key="454">MA</entry>
+  <entry key="455">MI</entry>
+  <entry key="456">JU</entry>
+  <entry key="457">VI</entry>
+  <entry key="458">SÁ</entry>
+  <entry key="459">DO</entry>
+  <entry key="460">Lunes</entry>
+  <entry key="461">Martes</entry>
+  <entry key="462">Miércoles</entry>
+  <entry key="463">Jueves</entry>
+  <entry key="464">Viernes</entry>
+  <entry key="465">Sábado</entry>
+  <entry key="466">Domingo</entry>
+  <entry key="467">S#</entry>
+  <entry key="468">Número de semana de calendario</entry>
+  <entry key="469">Enero</entry>
+  <entry key="470">Febrero</entry>
+  <entry key="471">Marzo</entry>
+  <entry key="472">Abril</entry>
+  <entry key="473">Mayo</entry>
+  <entry key="474">Junio</entry>
+  <entry key="475">Julio</entry>
+  <entry key="476">Agosto</entry>
+  <entry key="477">Septiembre</entry>
+  <entry key="478">Octubre</entry>
+  <entry key="479">Noviembre</entry>
+  <entry key="480">Diciembre</entry>
+  <entry key="481">Calendario</entry>
+  <entry key="482">Participantes</entry>
+  <entry key="483">Mostrar la configuración</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Ancho | Alto</entry>
+  <entry key="486">Contenedor de vídeo</entry>
+  <entry key="487">Contenedor de moderación</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Contenedor de pizarra</entry>
+  <entry key="490">Activado</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Ancho | Alto</entry>
+  <entry key="493">Contenedor de archivos, chat, participantes</entry>
+  <entry key="494">Activado</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Ancho | Alto</entry>
+  <entry key="497">El moderador se ha retirado por lo que nadie está realizando una presentación en estos momentos. Puede solicitar la moderación o esperar.</entry>
+  <entry key="498">No hay moderador en esta sala, pero sí participantes. Puede solicitar la moderación o esperar.</entry>
+  <entry key="499">Comentario de {0}</entry>
+  <entry key="500">{0} - Invitación</entry>
+  <entry key="501">Mensaje del usuario:</entry>
+  <entry key="502">Mensaje:</entry>
+  <entry key="503">Pulse en este enlace para poder participar en la conferencia:</entry>
+  <entry key="504">Pulse aquí para entrar a la sala</entry>
+  <entry key="505">Si tiene problemas con el enlace, le sugerimos que copie y pegue el siguiente texto en su navegador:</entry>
+  <entry key="506">Registro {0}</entry>
+  <entry key="507">Sus datos de usuario:</entry>
+  <entry key="508">Inicio:</entry>
+  <entry key="509">Contraseña:</entry>
+  <entry key="510">Correo:</entry>
+  <entry key="511">{0} - Equipo</entry>
+  <entry key="512">{0} - Registro</entry>
+  <entry key="513">{0} - Resetear contraseña</entry>
+  <entry key="514">Pulse en el siguiente enlace para solicitar una nueva contraseña:</entry>
+  <entry key="515">Pulse aquí para introducir una nueva contraseña</entry>
+  <entry key="516">Si tiene problemas con el enlace, le sugerimos que copie y pegue el siguiente texto en su navegador:</entry>
+  <entry key="517">{0} - Nueva Contraseña</entry>
+  <entry key="518">Por favor, introduzca una fecha válida con el formato dd.mm.yyyy Ejemplo: 24.12.2008</entry>
+  <entry key="519">Por favor, introduzca una dirección de correo válida</entry>
+  <entry key="520">Por favor, introduzca un número decimal. Ejemplo: 1.00 (use punto y no la coma)</entry>
+  <entry key="521">Por favor, introduzca un número entero</entry>
+  <entry key="522">Por favor, introduzca un número de teléfono válido. Ejemplo: +593 947 225 200</entry>
+  <entry key="523">Por favor introduzca una hora válida en el formato hh:mm. Ejemplo: 12:23</entry>
+  <entry key="524">Contraseña protegida</entry>
+  <entry key="525">Contraseña</entry>
+  <entry key="526">Período de validez</entry>
+  <entry key="527">Sin límite</entry>
+  <entry key="528">Período</entry>
+  <entry key="529">Una vez</entry>
+  <entry key="530">Válido desde:</entry>
+  <entry key="531">Válido hasta:</entry>
+  <entry key="532">Invitación a {0}</entry>
+  <entry key="533">No existe una invitación disponible con este código.</entry>
+  <entry key="534">Esta invitación ya fue usada y no puede volverse a utilizar.</entry>
+  <entry key="535">El código de invitación no es válido.</entry>
+  <entry key="536">Contraseña:</entry>
+  <entry key="537">Verificar contraseña</entry>
+  <entry key="538">Contraseña incorrecta</entry>
+  <entry key="539">Navegador</entry>
+  <entry key="540">Sincronizar audio/vídeo</entry>
+  <entry key="541">El login es correcto, pero la sesión en la que intenta entrar no está activa o no fue guardada en el servidor. Tiene que iniciar una nueva sesión.</entry>
+  <entry key="542">El ID de la sesión no está iniciado o no tiene permisos de administración. La pasarela SOAP necesita un usuario con permisos de administración para añadir nuevos usuarios.</entry>
+  <entry key="543">Esta sesión no tiene datos del usuario remoto conectado. Quizás no llamó a la pasarela SOAP antes de acceder a la aplicación o está utilizando un ID de sesión incorrecto</entry>
+  <entry key="544">El grabador actualmente está en fase beta</entry>
+  <entry key="545">x</entry>
+  <entry key="546">eje-x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">eje-y</entry>
+  <entry key="549">a</entry>
+  <entry key="550">anchura</entry>
+  <entry key="551">h</entry>
+  <entry key="552">altura</entry>
+  <entry key="553">Cambiar transparencia</entry>
+  <entry key="554">Abrir el navegador</entry>
+  <entry key="555">Cerrar el navegador</entry>
+  <entry key="556">Se ha perdido la conexión con el servidor. Necesita recargar la aplicación y/o comprobar su Red.</entry>
+  <entry key="557">Puntero</entry>
+  <entry key="558">Sincronizando</entry>
+  <entry key="559">Sincronizando usuarios. Por favor, espere.</entry>
+  <entry key="560">&lt;u&gt;Descargar como SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Descargar como PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Descargar como JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Descargar como PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Descargar como TIF&lt;/u&gt;</entry>
+  <entry key="565">Recuerde:</entry>
+  <entry key="566">Categoría:</entry>
+  <entry key="567">Repetición:</entry>
+  <entry key="568">ninguno</entry>
+  <entry key="569">Localización:</entry>
+  <entry key="570">Inicio</entry>
+  <entry key="571">Final</entry>
+  <entry key="572">Título:</entry>
+  <entry key="573">Comentario:</entry>
+  <entry key="574">Invitar a personas</entry>
+  <entry key="575">Diario</entry>
+  <entry key="576">Mensual</entry>
+  <entry key="577">Anual</entry>
+  <entry key="578">La fecha final va después de la fecha de inicio</entry>
+  <entry key="579">Por favor, ponga un título</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Active esta opción si la escritura de su idioma va de derecha a izquierda</entry>
+  <entry key="582">Panel de control</entry>
+  <entry key="583">Ver eventos o encuentros grabados</entry>
+  <entry key="584">Videoconferencia - Reúnase con 4 ó más (hasta 16) usuarios&lt;br/&gt;todos tendrán acceso de audio y vídeo.</entry>
+  <entry key="585">Auditorio - Reúnase con hasta 200 participantes&lt;br/&gt;sólo el moderador tendrá audio y/o vídeo</entry>
+  <entry key="586">Crear usuarios, salas, organizaciones&lt;br/&gt; + cambios en la configuración</entry>
+  <entry key="587">Usuarios en la sala</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Inicio</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Cargando documento. Aguarde hasta que todos los clientes estén sincronizados.</entry>
+  <entry key="592">Subida completa. Convirtiendo documento...</entry>
+  <entry key="593">Iniciar Subida</entry>
+  <entry key="594">Diálogo de subir e importar. Por favor, seleccione un archivo de su disco.</entry>
+  <entry key="595">Cancelar</entry>
+  <entry key="596">Seleccionar archivo</entry>
+  <entry key="597">Conexiones</entry>
+  <entry key="598">Valor</entry>
+  <entry key="599">ID de flujo</entry>
+  <entry key="600">Inicio</entry>
+  <entry key="601">Conectado desde</entry>
+  <entry key="602">Sala / Ámbito</entry>
+  <entry key="603">Expulsar al usuario</entry>
+  <entry key="604">Expulsar</entry>
+  <entry key="605">¿Está seguro de querer expulsar a este cliente de la conexión?&lt;br/&gt; El cliente será expulsado de la sala, pero podrá volver a autenticarse de nuevo.</entry>
+  <entry key="606">Su sesión ha sido cerrada por el administrador o el moderador.</entry>
+  <entry key="607">Teléfono</entry>
+  <entry key="608">El usuario es el moderador de esta sala</entry>
+  <entry key="609">El usuario tiene permisos para dibujar en la pizarra</entry>
+  <entry key="610">(Re) Iniciar audio/vídeo o cambiar la configuración de dispositivos</entry>
+  <entry key="611">Permitir a este usuario dibujar en la pizarra</entry>
+  <entry key="612">Quitar permisos para dibujar en la pizarra</entry>
+  <entry key="613">Usuarios</entry>
+  <entry key="614">Archivos</entry>
+  <entry key="615">Pizarra</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Su cuenta está asignada a varias organizaciones. Seleccione aquella con la que quiera entrar en esta sesión.</entry>
+  <entry key="618">Esta sala está completa. Inténtelo más tarde.</entry>
+  <entry key="619">Tipo de sala</entry>
+  <entry key="620">Sala para citarse</entry>
+  <entry key="621">Hora del servidor</entry>
+  <entry key="622">{0} - Recordatorio</entry>
+  <entry key="623">Mensaje del usuario:</entry>
+  <entry key="624">Mensaje:</entry>
+  <entry key="625">Pulse en el enlace para participar en la (Vídeo)Conferencia:</entry>
+  <entry key="626">Pulse aquí para entrar en la sala</entry>
+  <entry key="627">Si tiene problemas, copie y pegue este enlace en su navegador:</entry>
+  <entry key="628">búsqueda interna</entry>
+  <entry key="629">Añadir externos</entry>
+  <entry key="630">Nombre</entry>
+  <entry key="631">Apellidos</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirmar la salida</entry>
+  <entry key="634">¿Está seguro de que desea salir?</entry>
+  <entry key="635">Acciones</entry>
+  <entry key="636">Sala de demostración</entry>
+  <entry key="637">Hora de la demostración</entry>
+  <entry key="638">Horario del encuentro</entry>
+  <entry key="639">Esta es una sala de demostración. Para desactivar este aviso, debería conseguir una sala privada para uso propio o bien configurar su propio Servidor. Será desconectado automáticamente en:</entry>
+  <entry key="640">Moderado</entry>
+  <entry key="641">Por favor, espere hasta que el moderador entre en la sala. El moderador puede ser un profesor, el administrador o el creador de esta sala.</entry>
+  <entry key="642">Aceptar</entry>
+  <entry key="643">Recibiendo el escritorio compartido</entry>
+  <entry key="644">Hay una nueva recepción de escritorio compartido del usuario:</entry>
+  <entry key="645">Comenzar a compartir</entry>
+  <entry key="646">Añadir un nuevo encuentro</entry>
+  <entry key="647">Sala de encuentros</entry>
+  <entry key="648">Sala de eventos</entry>
+  <entry key="649">Moderación</entry>
+  <entry key="650">Moderar usuarios</entry>
+  <entry key="651">Moderar salas</entry>
+  <entry key="652">M</entry>
+  <entry key="653">¿Desea convertir a este usuario en moderador de esa organización?</entry>
+  <entry key="654">Por favor, seleccione una organización antes de intentar incluir a un usuario en la misma.</entry>
+  <entry key="655">Organización - Moderador</entry>
+  <entry key="656">¿Realmente desea borrar a este usuario de la Organización?</entry>
+  <entry key="657">Este usuario es moderador</entry>
+  <entry key="658">Este usuario no es moderador</entry>
+  <entry key="659">¿Desea que este usuario deje de ser moderador de esta organización?</entry>
+  <entry key="660">Añadir o borrar usuarios y/o salas en su organización</entry>
+  <entry key="661">¿Realmente quiere borrar este registro?</entry>
+  <entry key="662">¿Realmente quiere borrar a este usuario de su organización? Sólo se borrará la conexión entre el usuario y su organización. En realidad, para borrar al usuario debe ingresar al Panel de administración.</entry>
+  <entry key="663">¡Vd no puede borrarse a sí mismo!</entry>
+  <entry key="664">¡Para usar este método necesita de una cuenta de administrador!</entry>
+  <entry key="665">No hay ninguna sesión asociada a este ID.</entry>
+  <entry key="666">Esta es una cuenta de administrador o de moderador. Sólo puede editar esta cuenta utilizando el Panel de administración.</entry>
+  <entry key="667">Para completar su registro, haga el favor de pulsar en el siguiente enlace. Otra opción es copiar la URL en la barra de su navegador.</entry>
+  <entry key="668">Pulse para verificar su correo</entry>
+  <entry key="669">No se ha encontrado un usuario para ese algoritmo Hash.</entry>
+  <entry key="670">¡Este usuario ya está activado!</entry>
+  <entry key="671">¡Ha activado su cuenta con éxito!</entry>
+  <entry key="672">Ingrese ahora</entry>
+  <entry key="673">Su cuenta no está activada. Utilice en primer lugar el enlace que hay en correo recibido al finalizar el proceso de registro.</entry>
+  <entry key="674">Se ha registrado con éxito. Le hemos enviado un correo con un código de verificación. Por favor, revise su cuenta de correo.</entry>
+  <entry key="675">Quitar el rol de moderador a este usuario</entry>
+  <entry key="676">Dar permisos de moderación a este usuario</entry>
+  <entry key="677">Usuario</entry>
+  <entry key="678">Acceso a la pizarra</entry>
+  <entry key="679">Moderador</entry>
+  <entry key="680">Moderación: Por favor, seleccione cualquier usuario de la lista para darle acceso a la pizarra, moderación o vídeo.</entry>
+  <entry key="681">Este usuario ya es moderador, así que automáticamente tiene permisos para dibujar.</entry>
+  <entry key="682">¡Este es Vd! No puede quitarse los permisos de moderación a sí mismo.</entry>
+  <entry key="683">Permitir a este usuario publicar su audio/vídeo</entry>
+  <entry key="684">Borrar el audio/vídeo de este usuario</entry>
+  <entry key="685">Desearía ser moderador de esta sala</entry>
+  <entry key="686">Desearía utilizar la pizarra</entry>
+  <entry key="687">Desearía compartir mi audio/vídeo</entry>
+  <entry key="688">Usted es el moderador de esta sala</entry>
+  <entry key="689">Tiene permisos para dibujar en la pizarra</entry>
+  <entry key="690">Tiene permiso para compartir su audio/video</entry>
+  <entry key="691">Mensaje al moderador</entry>
+  <entry key="692">El Usuario</entry>
+  <entry key="693">Desearía ser moderador. Use los iconos de estado próximos al usuario en la Lista de Usuarios para agregar o remover el permiso de moderación.</entry>
+  <entry key="694">desearía utilizar la pizarra. Utilice los iconos que hay junto al nombre del usuario (en la Lista de Usuarios) para agregar o quitar los permisos correspondientes.</entry>
+  <entry key="695">desearía compartir su audio/vídeo. Use los iconos que hay junto al nombre de usuario (en la Lista de Usuarios) para agregar o quitar los permisos para compartir audio/vídeo.</entry>
+  <entry key="696">Debe esperar hasta que un moderador ingrese a la sala.</entry>
+  <entry key="697">Cancelar</entry>
+  <entry key="698">Guardar</entry>
+  <entry key="699">Día</entry>
+  <entry key="700">Mes</entry>
+  <entry key="701">Año</entry>
+  <entry key="702">Subir archivo</entry>
+  <entry key="703">Añadir carpeta</entry>
+  <entry key="704">Actualizar</entry>
+  <entry key="705">Papelera</entry>
+  <entry key="706">Mis archivos (Dispositivo personal)</entry>
+  <entry key="707">Archivos de la sala (Dispositivo público)</entry>
+  <entry key="708">Agregar archivo</entry>
+  <entry key="709">Agregar carpeta</entry>
+  <entry key="710">Borrar carpeta</entry>
+  <entry key="711">Editar nombre</entry>
+  <entry key="712">Nueva carpeta</entry>
+  <entry key="713">¿Está seguro de que quiere borrar este ítem?</entry>
+  <entry key="714">Buscar</entry>
+  <entry key="715">Buscar</entry>
+  <entry key="716">Abrir documento</entry>
+  <entry key="717">Mostrar todos los archivos (Vista de árbol)</entry>
+  <entry key="718">Cerrar documento</entry>
+  <entry key="719">Borrar archivo</entry>
+  <entry key="720">No tiene permisos para escribir o dibujar en la pizarra. Debe ser moderador o, al menos, tener permisos de edición de la pizarra. Solicíteselo a un moderador.</entry>
+  <entry key="721">Propiedades</entry>
+  <entry key="722">Iniciar Java</entry>
+  <entry key="723">Iniciar Flash</entry>
+  <entry key="724">Un usuario desea compartir su escritorio. ¿Desea visualizarlo?</entry>
+  <entry key="725">Actualmente está compartiendo su escritorio. Para dejar de hacerlo, pulse en el botón Stop en el cliente utilizado.</entry>
+  <entry key="726">Compartiendo sesión</entry>
+  <entry key="727">¡Ya está compartiendo su escritorio!</entry>
+  <entry key="728">Visor de escritorio</entry>
+  <entry key="729">Salir</entry>
+  <entry key="730">Compartiendo el escritorio</entry>
+  <entry key="731">Pulse Iniciar para publicar su escritorio</entry>
+  <entry key="732">Iniciar la compartición</entry>
+  <entry key="733">Pausar la compartición</entry>
+  <entry key="734">Seleccione el área de la pantalla:</entry>
+  <entry key="735">Cambiar anchura</entry>
+  <entry key="736">!Ha finalizado esta sesión!</entry>
+  <entry key="737">Cambiar altura</entry>
+  <entry key="738">Desplazamiento eje X</entry>
+  <entry key="739">Desplazamiento eje Y</entry>
+  <entry key="740">Anchura:</entry>
+  <entry key="741">Altura:</entry>
+  <entry key="742">La conexión ha sido cerrada por el Servidor</entry>
+  <entry key="743">Cancelar</entry>
+  <entry key="744">Iniciar Java</entry>
+  <entry key="745">Si cierra esta sesión completamente, no será posible reiniciar el visor durante esta sesión.</entry>
+  <entry key="746">Confirmar el cierre de la sesión</entry>
+  <entry key="747">Compartir escritorio</entry>
+  <entry key="748">Grabar sesión</entry>
+  <entry key="749">Co-navegación</entry>
+  <entry key="750">Hum... Firefox en windows no muestra la co-navegación con claridad. Por favor, utilice otro navegador o cierre esta funcionalidad.</entry>
+  <entry key="751">Previo</entry>
+  <entry key="752">Siguiente</entry>
+  <entry key="753">Recargar</entry>
+  <entry key="754">Inicio</entry>
+  <entry key="755">Cargar</entry>
+  <entry key="756">Configurar en su perfil este sitio como predeterminado.</entry>
+  <entry key="757">Probar configuración</entry>
+  <entry key="758">Compruebe la configuración de su micrófono y/o cámara antes de entrar en la sala. Para ello grabe durante algunos segundos y reprodúzcalo.</entry>
+  <entry key="759">No volver a mostrar este test</entry>
+  <entry key="760">Cancelar</entry>
+  <entry key="761">Iniciar</entry>
+  <entry key="762">No volver a preguntar</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Puede continuar sin hacer la comprobación si no desea publicar la imagen y/o el sonido. Los participantes sin audio o sin vídeo pueden en todo caso utilizar la pizarra, compartir su escritorio o enviar mensajes utilizando el chat.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Medidor de Nivel</entry>
+  <entry key="768">Presione Iniciar</entry>
+  <entry key="769">Iniciar Conferencia</entry>
+  <entry key="770">Iniciar Evento</entry>
+  <entry key="771">Ir a la sala</entry>
+  <entry key="772">Comprobar Config.</entry>
+  <entry key="773">Iniciar Confer.</entry>
+  <entry key="774">Instrucciones Conferencia:</entry>
+  <entry key="775">Iniciar Grabación</entry>
+  <entry key="776">No mostrar el test de grabación de audio /vídeo antes de entrar en una Conferencia</entry>
+  <entry key="777">Salas públicas</entry>
+  <entry key="778">Las salas públicas son accesibles a todos los usuarios.</entry>
+  <entry key="779">Salas privadas</entry>
+  <entry key="780">Las salas privadas son accesibles sólo para los usuarios de la misma organización.</entry>
+  <entry key="781">Mis salas</entry>
+  <entry key="782">Las salas en esta sección son para uso personal. Se crean utilizando el calendario y tienen una fecha de inicio y de finalización. Sólo se muestran en esta sección durante el intervalo temporal de validez.</entry>
+  <entry key="783">Tiene que ser moderador para ejecutar esta acción.</entry>
+  <entry key="784">Solicitar la moderación</entry>
+  <entry key="785">Solicitar acceso a la pizarra</entry>
+  <entry key="786">Solicitar acceso a la cámara/micrófono</entry>
+  <entry key="787">La autenticación de esta sesión ya ha sido utilizada. No puede hacerse dos veces.</entry>
+  <entry key="788">INICIAR</entry>
+  <entry key="789">SALIR</entry>
+  <entry key="790">¿Desea realmente salir? Es conveniente que antes borre los documentos subidos, la pizarra o el historial del chat.</entry>
+  <entry key="791">Salir de la conferencia</entry>
+  <entry key="792">Salas</entry>
+  <entry key="793">Seleccione una sala</entry>
+  <entry key="794">Hay un evento sin guardar en el calendario. Por favor, guárdelo o bien bórrelo.</entry>
+  <entry key="795">¡Añada, al menos, a un participante!</entry>
+  <entry key="796">¿Realmente desea borrar este evento?</entry>
+  <entry key="797">Aviso</entry>
+  <entry key="798">Añadir evento</entry>
+  <entry key="799">día</entry>
+  <entry key="800">semana</entry>
+  <entry key="801">mes</entry>
+  <entry key="802">Descripción</entry>
+  <entry key="803">Asistentes</entry>
+  <entry key="804">{0}, su Plataforma Web de Videoconferencia. Sólo siga las instrucciones, presione el botón para iniciar inmediatamente o vaya al Calendario para programar un Encuentro más adelante.</entry>
+  <entry key="805">Progr. Encuentro</entry>
+  <entry key="806">Para planificar una conferencia, añada un nuevo Evento en el Calendario. Para cada Evento se creará automáticamente una sala de (vídeo)conferencia. Usted y el resto de asistentes recibirán un correo con un enlace de la sala.&lt;br/&gt;&lt;br/&gt;Puede escoger entre diferentes tipos de salas con diferentes diseños y sistemas de moderación. También puede escoger entre diferentes tipos de notificación de correo que se envían en cada evento del calendario.</entry>
+  <entry key="807">¿Necesita ayuda?</entry>
+  <entry key="808">Restringido</entry>
+  <entry key="809">Buscar</entry>
+  <entry key="810">Añadir</entry>
+  <entry key="811">No hay ningún usuario seleccionado. Seleccione primero un ítem de la lista y pulse en Añadir.</entry>
+  <entry key="812">Añadir asistente</entry>
+  <entry key="813">Guardar</entry>
+  <entry key="814">Borrar</entry>
+  <entry key="815">Detalles del Evento</entry>
+  <entry key="816">Moderadores por defecto</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Nombre</entry>
+  <entry key="820">Email</entry>
+  <entry key="821">Añadir nuevo moderador por defecto</entry>
+  <entry key="822">¿Es supermoderador</entry>
+  <entry key="823">Si la sala está moderada, quien sea ya moderador seguirá siéndolo. Si no desea que sea así, y sólo quiere que determinado usuario sea el moderador, utilice la opción de moderador por defecto.</entry>
+  <entry key="824">Un supermoderador es siempre el moderador de una sala cuando entra en ella. Además, nadie puede quitarle la marca de moderación</entry>
+  <entry key="825">Aplicar supermoderación al usuario</entry>
+  <entry key="826">Quitar supermoderación al usuario</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Si añade una organización a la sala, sólo los usuarios de dicha organización tendrán acceso a la misma (esto sólo es válido si la marca de Pública está configurada como falsa)</entry>
+  <entry key="829">Moderación</entry>
+  <entry key="830">Limitaciones</entry>
+  <entry key="831">Organización</entry>
+  <entry key="832">¿Está usted seguro?</entry>
+  <entry key="833">¿Realmente desea borrar este ítem? ¡Tiene que pulsar en el botón de guardar para almacenar los cambios!</entry>
+  <entry key="834">No hay ningún usuario seleccionado. Por favor, selecciónelo primero.</entry>
+  <entry key="835">Añadir un nuevo moderador por defecto</entry>
+  <entry key="836">¿Desea añadir una marca de supermoderador a este usuario? Recuerde que un supermoderador no sólo es el moderador de una sala, sino que además ningún otro moderador podrá borrar la marca de moderación. Necesita guardar el objeto sala para almacenar estas configuraciones.</entry>
+  <entry key="837">¿Desea eliminar la marca de supermoderador a este usuario? Necesita guardar el objeto sala para almacenar estas configuraciones.</entry>
+  <entry key="838">Este usuario tiene el rol de supermoderador. No puede quitarle la marca de moderación a un supermoderador.</entry>
+  <entry key="839">¿Realmente desea borrar este Archivo/Directorio?</entry>
+  <entry key="840">¿Borrar archivo/directorio?</entry>
+  <entry key="841">Dña.</entry>
+  <entry key="842">D.</entry>
+  <entry key="843">Propiedades</entry>
+  <entry key="844">Mostrar la posición del ratón a los participantes</entry>
+  <entry key="845">Compartir audio con el applet SIP</entry>
+  <entry key="846">Compartir audio con SIP y vídeo con Flash</entry>
+  <entry key="847">Pantalla completa</entry>
+  <entry key="848">Ver escritorio</entry>
+  <entry key="849">El usuario</entry>
+  <entry key="850">desea compartir su escritorio. ¿Desea visualizarlo?</entry>
+  <entry key="851">Cerrar</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">La sesión ha sido cerrada por quien compartía escritorio</entry>
+  <entry key="854">Pausa</entry>
+  <entry key="855">Nueva compartición de escritorio</entry>
+  <entry key="856">Minimizar</entry>
+  <entry key="857">Maximizar</entry>
+  <entry key="858">Vídeo</entry>
+  <entry key="859">Línea temporal de grabación</entry>
+  <entry key="860">Mis grabaciones</entry>
+  <entry key="861">Grabaciones públicas</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Nombre</entry>
+  <entry key="864">Longitud</entry>
+  <entry key="865">Fecha</entry>
+  <entry key="866">Por</entry>
+  <entry key="867">Descarga</entry>
+  <entry key="868">Principal - Vídeo</entry>
+  <entry key="869">Grabación</entry>
+  <entry key="870">Puede grabar y compartir su escritorio a la vez. Para permitir que otros vean su escritorio, pulse en el botón -iniciar- de la parte superior. Para grabar la sesión, es suficiente con pulsar en iniciar grabación.</entry>
+  <entry key="871">Iniciar grabación</entry>
+  <entry key="872">Parar grabación</entry>
+  <entry key="873">Descargar el archivo FLV</entry>
+  <entry key="874">Sala</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">El usuario tiene el micrófono activado</entry>
+  <entry key="878">Detener la compartición</entry>
+  <entry key="879">Permitir preguntas del usuario</entry>
+  <entry key="880">Desactive esta opción para impedir que ningún usuario le moleste en esta sala. Al hacerlo, el botón para solicitar la moderación no será visible.</entry>
+  <entry key="881">Permisos</entry>
+  <entry key="882">Descargar como AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Sólo audio</entry>
+  <entry key="887">Ha habido errores mientras se procesaba la grabación.</entry>
+  <entry key="888">La grabación aún no esta lista. Inténtelo de nuevo en un par de minutos.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Mensaje del grabador:</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">El applet SIP no está listo</entry>
+  <entry key="893">Configuración de la cuenta SIP</entry>
+  <entry key="894">Configuración SIP para cada usuario. Puede activar o desactivar SIP desde Administración &gt; Configuración (Key: enable_sip). Los datos SIP de cada usuario deberían crearse automáticamente.</entry>
+  <entry key="895">Usuario SIP</entry>
+  <entry key="896">Contraseña SIP</entry>
+  <entry key="897">ID Aut-SIP</entry>
+  <entry key="898">La autenticación SIP ha fallado. Debería comprobar los datos de autenticación de su proveedor SIP y de la cuenta SIP de cada usuario. Como administrador, podrá autenticarse y comprobar la configuración. Si entra como usuario o como moderador, cualquier intento de interacción será bloqueado.</entry>
+  <entry key="899">La autenticación SIP ha fallado. Contacte con el servicio técnico.</entry>
+  <entry key="900">Autenticando en la puerta de enlace SIP...</entry>
+  <entry key="901">Autenticando en la puerta de enlace SIP...</entry>
+  <entry key="902">Mostrar Log</entry>
+  <entry key="903">Mensajes Log del proceso de postgrabación</entry>
+  <entry key="904">Mensaje del applet SIP</entry>
+  <entry key="905">El applet SIP no está listo. Por favor, acepte el applet y pulse OK.</entry>
+  <entry key="906">Solicitar la moderación</entry>
+  <entry key="907">Guardar cambios de la cita</entry>
+  <entry key="908">La cita ha sido cambiada. ¿Desea guardar dichos cambios? Todos los participantes implicados recibirán un correo con la fecha y hora actualizadas (dependiendo del tipo de notificación de esta cita).</entry>
+  <entry key="909">Para acceder a otras grabaciones, tiene que autenticarse en la aplicación {0}.</entry>
+  <entry key="910">Seleccione el usuario para este vídeo</entry>
+  <entry key="911">Usuarios disponsibles para esta transmisión Pod</entry>
+  <entry key="912">Usted es moderador en esta entrevista. Puede decidir quién habla así como iniciar / parar la grabación de la sesión.</entry>
+  <entry key="913">Iniciar Grabación</entry>
+  <entry key="914">Parar Grabación</entry>
+  <entry key="915">La grabación de la entrevista está ya iniciada.</entry>
+  <entry key="916">La grabación está ya parada o bien no ha sido iniciada aún.</entry>
+  <entry key="917">¡Ya se ha iniciado la grabación de esta entrevista!</entry>
+  <entry key="918">Cancelar</entry>
+  <entry key="919">El post-proceso de una entrevista lleva cinco veces más tiempo que el de la propia entrevista. El progreso actual de este proceso es el siguiente:</entry>
+  <entry key="920">Tiene que introducir de nuevo su contraseña para autocrear los datos SIP</entry>
+  <entry key="921">Regenerar datos SIP</entry>
+  <entry key="922">¡No puede mover este archivo o carpeta dentro de su propio subdirectorio!</entry>
+  <entry key="923">Tamaño del dispositivo personal</entry>
+  <entry key="924">Tamaño del dispositivo público</entry>
+  <entry key="925">Ajustes de licencia</entry>
+  <entry key="926">Al habilitar la licencia puede obligar a los usuarios bien con una fecha de caducidad bien con un número máximo de minutos.</entry>
+  <entry key="927">Comprobar licencia</entry>
+  <entry key="928">Tarifa plana</entry>
+  <entry key="929">Fecha de caducidad</entry>
+  <entry key="930">Segundos restantes</entry>
+  <entry key="931">Tiempo total</entry>
+  <entry key="932">Su licencia ha expirado. Necesita comprar más tiempo (pago por minuto) o bien pasarse a una tarifa plana.</entry>
+  <entry key="933">Pulsar y comprar</entry>
+  <entry key="934">Tiempo restante de su cuenta:</entry>
+  <entry key="935">Información de la licencia del usuario</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Cerrar</entry>
+  <entry key="938">Su licencia ha expirado. Necesita comprar o un paquete de tiempo (pago-por-minutos) o una tarifa plana.</entry>
+  <entry key="939">Configuración de la licencia</entry>
+  <entry key="940">Puede o bien comprar minutos de uso de la videoconferencia.&lt;br/&gt;&lt;br/&gt; O puede comprar una tarifa plana de 3 a 12 meses.&lt;br/&gt;&lt;br/&gt;Sólo se permite el envío de invitaciones (enlaces directos para entrar en las salas) o la creación de salas de conferencia a través del calendario a usuarios con tarifa plana.</entry>
+  <entry key="941">Comprar 60 minutos 9,99 € (16 céntimos por minuto)</entry>
+  <entry key="942">Comprar 5 horas 19,99 € (6 céntimos por minuto)</entry>
+  <entry key="943">Comprar 3 meses por 29,99 € (9,99 € por mes)</entry>
+  <entry key="944">Comporar 6 meses por 39,99 € (6,66 € por mes)</entry>
+  <entry key="945">Pago-por-minuto</entry>
+  <entry key="946">Tarifa plana</entry>
+  <entry key="947">Tiene una licencia ilimitada</entry>
+  <entry key="948">Su licencia expirará a las:</entry>
+  <entry key="949">Ha comprado Pago-por-minuto. Todavía tiene:</entry>
+  <entry key="950">¡Ampliar el crédito!</entry>
+  <entry key="951">¿Desea tener su propio servidor?</entry>
+  <entry key="952">Puede que desee tener {0} instalado en su servidor o integrado con Moodle, SugarCRM, la página web o la intranet. El precio mínimo es de 500 € por la instalación.</entry>
+  <entry key="953">O envíenos un mensaje</entry>
+  <entry key="954">Responder a:</entry>
+  <entry key="955">Mensaje:</entry>
+  <entry key="956">Enviar</entry>
+  <entry key="957">Pulse aquí para conseguir información de contacto y precios</entry>
+  <entry key="958">Detalles de la tarjeta de crédito</entry>
+  <entry key="959">Nombre</entry>
+  <entry key="960">Apellidos</entry>
+  <entry key="961">Tipo de tarjeta de crédito</entry>
+  <entry key="962">Tarjeta VISA</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Número de la tarjeta de crédito</entry>
+  <entry key="967">Fecha de caducidad</entry>
+  <entry key="968">Número de verificación de la tarjeta</entry>
+  <entry key="969">Dirección de facturación</entry>
+  <entry key="970">Dirección</entry>
+  <entry key="971"></entry>
+  <entry key="972">Ciudad</entry>
+  <entry key="973">País</entry>
+  <entry key="974">Estado (Sólo US)</entry>
+  <entry key="975">Código Postal</entry>
+  <entry key="976">Cantidad</entry>
+  <entry key="977">Enviar</entry>
+  <entry key="978">Paso 1: {0} - Forma de pago</entry>
+  <entry key="979">Correo</entry>
+  <entry key="980">Pulse "Verificar con Paypal" para pagar.&lt;br/&gt; Paypal acepta VISA, MasterCard, Discover o American Express. &lt;br/&gt;No es obligatorio registrarse con Paypal. &lt;br/&gt;Los ciudadanos de Alemana pueden pagar también utilizando domiciliación bancaria.</entry>
+  <entry key="981">Gracias por comprar {0}. &lt;br/&gt; &lt;br/&gt; Tan pronto como tengamos confirmación del pago, su cuenta será actualizada.&lt;br/&gt; Recibirá un correo con su factura en pdf.&lt;br/&gt;Puede también comprobar los movimientos pasados y actuales en su perfil.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Si lo desea, pueda ya cerrar esta ventana en el navegador y volver a {0}.</entry>
+  <entry key="982">Enviar y Comprar</entry>
+  <entry key="983">Pulsar y Comprar</entry>
+  <entry key="984">Paso 3: Pago por {0} - Verifique la orden y pague</entry>
+  <entry key="985">Nombre</entry>
+  <entry key="986">¡Pago recibido!</entry>
+  <entry key="987">Saludos,</entry>
+  <entry key="988">Hemos recibido su pago. Su perfil de usuario se ha actualizado convenientemente. Vea adjuntada su factura. Esta (así como todas las anteriores) podrá ser descargada desde su perfil.</entry>
+  <entry key="989">Gracias por utilizar {0}!</entry>
+  <entry key="990">Pago recibido de {0} -</entry>
+  <entry key="991">Estado de pagos y transferencias</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutos</entry>
+  <entry key="994">Meses</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Estado</entry>
+  <entry key="997">Factura</entry>
+  <entry key="998"></entry>
+  <entry key="999">Necesita comprar una tarifa plana para poder enviar invitaciones o crear encuentros utilizando el calendario. Con el sistema pago por minutos sólo es posible acceder a {0}.</entry>
+  <entry key="1000">Esta dirección de correo está siendo utilizada por otro usuario.</entry>
+  <entry key="1001">Ajustes SIP</entry>
+  <entry key="1002">El número de la videoconferencia y el PIN son creados automáticamente utilizando la pasarela OpenXG RPC-Gateway</entry>
+  <entry key="1003">Número SIP</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">¡Limpiar sólo los objetos de la presentación actual!</entry>
+  <entry key="1006">Sólo se enviará a los participantes la URL introducida en la barra de estado</entry>
+  <entry key="1007">Hacer salas de equipos</entry>
+  <entry key="1008">Seleccione usuarios para una nueva sala de equipo</entry>
+  <entry key="1009">Puede seleccionar usuarios aquí y crear una nueva sala de (vídeo)conferencia ("sala de equipo") para los mismos. Los usuarios seleccionados automáticamente podrán conectarse a la nueva sala o bien recibir una notificación. Los moderadores conseguirán adicionalmente una lista de las salas actuales de tal modo que puedan conectarse a cada sala si fuera necesario moderarlas.</entry>
+  <entry key="1010">Usuario</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Usuarios para la nueva sala de equipo:</entry>
+  <entry key="1014">Crear sala de equipo</entry>
+  <entry key="1015">Cancelar</entry>
+  <entry key="1016">Seleccione al menos un usuario para la sala de equipo</entry>
+  <entry key="1017">Añadir un usuario al equipo</entry>
+  <entry key="1018">Quitar usuarios de la sala de equipo</entry>
+  <entry key="1019">El usuario es moderador de la sala de equipo (puede gestionar salas, y los usuarios del equipo pueden soliciarte entrar)</entry>
+  <entry key="1020">Tipo de sala</entry>
+  <entry key="1021">Si activa "Forzar a los usuarios a conectarse a la nueva sala de equipo" todos los usuarios seleccionados serán conectados automáticamente a la última sala creada. Por otro lado, reciben una notificación con un botón que ellos cambiar a la nueva sala. Los moderadores de equipo siempre tienen libertad de elección para gestionar las salas y conectarse a la que deseen.</entry>
+  <entry key="1022">Gestionar Salas de Equipos</entry>
+  <entry key="1023">Puede conectarse aquí a la sala que desee de las que es moderador. Los usuarios del equipo pueden enviarle un mensaje, por ejemplo para pedirle que entre en su sala y les ayude. También puede finalizar la sala de equipo con lo que todos los usuarios serán desconectados.</entry>
+  <entry key="1024">Forzar al usuario a conectarse a la nueva sala de equipo</entry>
+  <entry key="1025">Nombre</entry>
+  <entry key="1026">Creado</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Usuarios disponibles</entry>
+  <entry key="1030">Añada un usuario con el + en la izquierda o bórrelo con la x de la derecha</entry>
+  <entry key="1031">1) Configuración de la sala</entry>
+  <entry key="1032">2) Añadir usuarios a la sala de equipo</entry>
+  <entry key="1033">Nombre de la sala de equipo</entry>
+  <entry key="1034">Sala de equipo</entry>
+  <entry key="1035">Cambiar a la sala</entry>
+  <entry key="1036">Conectar a esta sala de equipo</entry>
+  <entry key="1037">Finalizar sala y desconectar a todos los usuarios</entry>
+  <entry key="1038">Nueva sala de equipo</entry>
+  <entry key="1039">Hay una nueva sala de equipo disponible para usted.</entry>
+  <entry key="1040">Cambiar a la sala de equipo</entry>
+  <entry key="1041">Acciones de la sala de equipo</entry>
+  <entry key="1042">Puede reabrir esta ventana a través del menú principal en la sección "Acciones"</entry>
+  <entry key="1043">Enviar mensaje al moderador de la sala de equipo</entry>
+  <entry key="1044">Nueva sala de equipo</entry>
+  <entry key="1045">Hay una nueva sala de equipo disponible. Puede cambiarse a esa sala. Las salas de equipo son como "grupos de trabajo" con posibilidades adicionales para solicitar ayuda al moderador. Sus salas de equipo son también accesibles desde la sección "Mis Reuniones".</entry>
+  <entry key="1046">Cambiar a la sala de equipo</entry>
+  <entry key="1047">Creada por:</entry>
+  <entry key="1048">Nombre de la sala de equipo:</entry>
+  <entry key="1049">Esta ventana permanecerá abierta aunque salga de la sala.</entry>
+  <entry key="1050">Usuarios de esta sala de equipo</entry>
+  <entry key="1051">3) Otras salas de equipo a las que podría conectarse</entry>
+  <entry key="1052">Enviar un mensaje a los moderadores de esta sala. Por ejemplo, si necesita ayuda en la moderación de la sala o si tiene alguna pregunta sobre el tema.</entry>
+  <entry key="1053">Enviar</entry>
+  <entry key="1054">2) Usuarios que están invitados a esta sala de equipo</entry>
+  <entry key="1055">Es moderador de la sala de equipo</entry>
+  <entry key="1056">Estos son todos los usuarios a los que el moderador ha invitado a entrar a esta sala de equipo.</entry>
+  <entry key="1057">No hay un moderador conectado en este momento</entry>
+  <entry key="1058">Por favor, introduzca un mensaje</entry>
+  <entry key="1059">Por favor, ayúdenos. Tenemos un problema en nuestra sala de equipo</entry>
+  <entry key="1060">Un usuario de una sala de equipo solicita su ayuda.</entry>
+  <entry key="1061">El Equipo pide ayuda</entry>
+  <entry key="1062">Mensaje:</entry>
+  <entry key="1063">De:</entry>
+  <entry key="1064">Actualmente no está en ninguna sala de equipo. Puede entrar aquí a todas las Salas a las que tiene acceso.</entry>
+  <entry key="1065">Resguarde el sistma. El backup incluye los datos generados por todos los usuarios. La configuración no se incluye, al igual que las etiquetas de idiomas, ya que esos valores se importan con el instalador de sistema. Para actualizar su sistema, exporte los valores antiguos (1), reinstale en una nueva base de datos el nuevo paquete (2) e importe la archivo de backup de nuevo (3). El Backup debiera ser importado antes de generar los datos en el nuevo sistema.</entry>
+  <entry key="1066">Sistema de Backup</entry>
+  <entry key="1067">Permitir al usuario compartir Pantalla/Grabación</entry>
+  <entry key="1068">Denegar al usuario compartir Pantalla/Grabación</entry>
+  <entry key="1069">El usuario es moderador, tiene todos los permisos.</entry>
+  <entry key="1070">le gustaría compartir/grabar pantalla.</entry>
+  <entry key="1071">Puede compartir/grabar pantalla</entry>
+  <entry key="1072">Aplicar para permitir compartir/grabar pantalla.</entry>
+  <entry key="1073">Permitir/Denegar permisos para compartir/grabar pantalla.</entry>
+  <entry key="1074">Apagar sonido</entry>
+  <entry key="1075">Activar sonido</entry>
+  <entry key="1076">Sala de sólo audio</entry>
+  <entry key="1077">Active esta bandera y los usuarios tendrán sólo la opción de Audio (sin vídeo) en la sala. Es indicado para ahorrar ancho de banda.</entry>
+  <entry key="1078">Permitir control remoto (durante la compartición de pantalla)</entry>
+  <entry key="1079">Denegar control remoto (durante la compartición de pantalla)</entry>
+  <entry key="1080">Aplicar para permitir el control remoto de la pantalla</entry>
+  <entry key="1081">Tiene permisos para el control remoto de la pantalla (durante la compartición de pantalla)</entry>
+  <entry key="1082">le gustaría tener control remoto de la pantalla.</entry>
+  <entry key="1083">El usuario es moderador, así que tiene todos los permisos.</entry>
+  <entry key="1084">Permitir/Denegar permisos en la Pantalla de Control Remoto (durante la compartición de pantalla)</entry>
+  <entry key="1085">1) De su PC a un PC remoto: para copiar y pegar texto de su portapapeles a una pantalla remota, pulse sobre la pantalla, luego pulse el botón derecho del ratón y, en el campo de texto, seleccione "Insertar" del menú.&lt;br/&gt;&lt;br/&gt;2) Del PC remoto a su PC: para copiar texto de un PC remoto al portapapeles de su PC, seleccione el texto con el ratón en la pantalla remota, luego pulse el botón derecho del ratón sobre la pantalla remota y seleccione &lt;i&gt;Copiar texto destacado&lt;/i&gt;</entry>
+  <entry key="1086">Copie y pegue texto de su PC al PC remoto y viceversa.</entry>
+  <entry key="1087">Copie el texto destacado</entry>
+  <entry key="1088">Cómo copiar y pegar</entry>
+  <entry key="1089">Calidad para compartir pantalla:</entry>
+  <entry key="1090">Calidad muy Alta</entry>
+  <entry key="1091">Calidad Alta</entry>
+  <entry key="1092">Calidad Media</entry>
+  <entry key="1093">Calidad baja</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Teclado:</entry>
+  <entry key="1097">¡Cerrar conferencia!</entry>
+  <entry key="1098">La conferencia ya está cerrada, será redirigido a otras ofertas interesantes</entry>
+  <entry key="1099">Cerra sala</entry>
+  <entry key="1100">URL de Salida</entry>
+  <entry key="1101">Configuración de finalización de sala</entry>
+  <entry key="1102">Si la sala está cerrada los usuarios serán redirigidos a la URL de salida.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Nombre</entry>
+  <entry key="1106">Archivo de Configuración</entry>
+  <entry key="1107">Configuración Ldap</entry>
+  <entry key="1108">Nombre</entry>
+  <entry key="1109">Activado</entry>
+  <entry key="1110">Insertado</entry>
+  <entry key="1111">Insertado por</entry>
+  <entry key="1112">Actualizado</entry>
+  <entry key="1113">Actualizado por</entry>
+  <entry key="1114">Los archivos de configuración están en la carpeta webapps/openmeetings/conf. Necesita subir manualmente los archivos a esta carpeta. Los cambios realizados en el archivo estarán online inmediatamente.</entry>
+  <entry key="1115">Nombre del archivo de configuración</entry>
+  <entry key="1116">Si activa "Añadir Dominio al nombre de usuario" el valor del campo "dominio" se añade a cada registro que el usuario introduce en la casilla de login. Esto es útil si el Login en el Ldap se almacena incluyendo el nombre de dominio. Ejemplo: supongamos que el usuario introduce "hans" y el dominio está especificado como "localhost.com". El login que se verificará contra el Ldap será: hans@localhost.com</entry>
+  <entry key="1117">Añadir Dominio al nombre de usuario</entry>
+  <entry key="1118">Dominio</entry>
+  <entry key="1119">Insertar</entry>
+  <entry key="1120">Copiar el texto remarcado</entry>
+  <entry key="1121">Texto remoto en Portapapeles</entry>
+  <entry key="1122">Mostrar Portapapeles remoto</entry>
+  <entry key="1123">No mostrar nuevamente</entry>
+  <entry key="1124">Copie el texto aquí ...</entry>
+  <entry key="1125">Necesita derechos de control remoto (o moderación) para copiar y pegar texto desde o a la pantalla remota.</entry>
+  <entry key="1126">Editar configuración original ...</entry>
+  <entry key="1127">No mostrar la caja de información en el Control Remoto acerca de Copiar y Pegar</entry>
+  <entry key="1128">Guardar</entry>
+  <entry key="1129">Suprimir</entry>
+  <entry key="1130">Cancelar</entry>
+  <entry key="1131">Invitar usuario a sala de conferencias</entry>
+  <entry key="1132">Escoja sala de conferencias. El usuario invitado verá un mensaje con tu nombre y un link a la sala.</entry>
+  <entry key="1133">Conectado desde:</entry>
+  <entry key="1134">Entrar a sala tras enviar invitación</entry>
+  <entry key="1135">Invitar</entry>
+  <entry key="1136">Mensaje</entry>
+  <entry key="1137">Me gustaría invitarle a sala de conferencia:</entry>
+  <entry key="1138">Mensaje de invitación</entry>
+  <entry key="1139">Enviar invitación</entry>
+  <entry key="1140">did &lt;b&gt;no&lt;/b&gt; acepta su invitación</entry>
+  <entry key="1141">Aceptar</entry>
+  <entry key="1142">Denegar</entry>
+  <entry key="1143">Zona Horaria</entry>
+  <entry key="1144">Detalles del Evento</entry>
+  <entry key="1145">Nombre</entry>
+  <entry key="1146">Descripción</entry>
+  <entry key="1147">Hecho por</entry>
+  <entry key="1148">Mensaje de Zona Horaria</entry>
+  <entry key="1149">Chequear "Mensaje de Zona Horaria" para dar mensaje a los usuarios la próxima vez que accedan para que actualicen sus perfiles.</entry>
+  <entry key="1150">Por favor, chequee la zona horaria en su perfil.</entry>
+  <entry key="1151">Nueva {0} conferencia:</entry>
+  <entry key="1152">Detalles:</entry>
+  <entry key="1153">Comenzar:</entry>
+  <entry key="1154">Finalizar:</entry>
+  <entry key="1155">Conferencia {0} cambiada:</entry>
+  <entry key="1156">Organizar:</entry>
+  <entry key="1157">Conferencia {0} cancelada:</entry>
+  <entry key="1158">{0} Recordar conferencia:</entry>
+  <entry key="1159">Datos para la Comunidad</entry>
+  <entry key="1160">Mostrar datos de contacto a todos</entry>
+  <entry key="1161">Agregar campos de interés que usted ofrece o que está buscando para encontrar socios interesantes para una conferencia. Las comas separan los términos (por ejemplo: Servicio médico, Aseguradoras de la Salud, ...)</entry>
+  <entry key="1162">Mis ofertas</entry>
+  <entry key="1163">Mis intereses</entry>
+  <entry key="1164">Nombre</entry>
+  <entry key="1165">Zona Horaria</entry>
+  <entry key="1166">Campos de interés</entry>
+  <entry key="1167">Información de contacto</entry>
+  <entry key="1168">Mostrar información de contacto solo a contactados.</entry>
+  <entry key="1169">No mostrar datos de contacto a nadie</entry>
+  <entry key="1170">Mi Perfil</entry>
+  <entry key="1171">Editar configuraciones</entry>
+  <entry key="1172">Buscar usuarios</entry>
+  <entry key="1173">Ver tu perfil como los demás lo ven</entry>
+  <entry key="1174">Editar tu configuraciones, añadir tus intereses para ser encontradas</entry>
+  <entry key="1175">Buscar otros usuarios y ampliar tu red</entry>
+  <entry key="1176">Buscar</entry>
+  <entry key="1177">Ofertas del usuario</entry>
+  <entry key="1178">Busca usuario</entry>
+  <entry key="1179">Texto libre</entry>
+  <entry key="1180">Nombre</entry>
+  <entry key="1181">Zona Horaria</entry>
+  <entry key="1182">Ofertas</entry>
+  <entry key="1183">Búsquedas</entry>
+  <entry key="1184">Resultado de búsqueda</entry>
+  <entry key="1185">Acciones</entry>
+  <entry key="1186">Añadir a Contactos</entry>
+  <entry key="1187">Enviar mensaje</entry>
+  <entry key="1188">Contactos y Mensajes</entry>
+  <entry key="1189">Contactos pendientes</entry>
+  <entry key="1190">Aceptar</entry>
+  <entry key="1191">Denegar</entry>
+  <entry key="1192">Hola,</entry>
+  <entry key="1193">me gustaría añadirle como contacto.</entry>
+  <entry key="1194">Chequear sus peticiones de contacto {0} o hacer clic en los links para aceptar o denegar la petición</entry>
+  <entry key="1195">Este usuario ya se encuentra en su lista de contactos o ha recibido una invitación a su lista de contactos que aún no ha contestado.</entry>
+  <entry key="1196">Su lista de contactos</entry>
+  <entry key="1197">Editar sus Contactos y Mensajes,&lt;br/&gt; administrar sus contactos pendientes!</entry>
+  <entry key="1198">está usted confirmado como contacto!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Mostrar / Copiar log del chat</entry>
+  <entry key="1201">Log del chat</entry>
+  <entry key="1202">De:</entry>
+  <entry key="1203">Asunto</entry>
+  <entry key="1204">Enviar</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Mensajes</entry>
+  <entry key="1207">Nuevo correo</entry>
+  <entry key="1208">Click para escribir nuevo mensaje a cualquiera de sus contactos</entry>
+  <entry key="1209">Escribir nuevo mensaje</entry>
+  <entry key="1210">A:</entry>
+  <entry key="1211">Asunto:</entry>
+  <entry key="1212">Activar ajuste completo y la pizarra hará zoom para que todos&lt;br/&gt;documentos sean visibles en función de la resolución de los monitores de cada participante.</entry>
+  <entry key="1213">Expulsar usuario</entry>
+  <entry key="1214">No puede expulsarse a sí mismo de la sala de conferencia! Si quiere salir cierre el navegador o emplee el botón Salir!</entry>
+  <entry key="1215">Realmente quiere desconectar este usuario de la sala de conferencia?</entry>
+  <entry key="1216">Confirme la acción ...</entry>
+  <entry key="1217">No puede expulsar de la sala a un Super-Moderador!</entry>
+  <entry key="1218">Libro sala de conferencias</entry>
+  <entry key="1219">Comenzar</entry>
+  <entry key="1220">Finalizar</entry>
+  <entry key="1221">Agregar una solicitud opcional para reunirse al mensaje y hacer una sala de conferencias. El evento es entonces copiado en el calendario de cada participante.</entry>
+  <entry key="1222">Carpeta de entrada</entry>
+  <entry key="1223">Enviados</entry>
+  <entry key="1224">Papelera</entry>
+  <entry key="1225">Este es usted! No puede añadirse a sí mismo como contacto.</entry>
+  <entry key="1226">El usuario ya estaba denegado!</entry>
+  <entry key="1227">El usuario ya estaba aprobado!</entry>
+  <entry key="1228">El hash de este usuario-contacto es inválido!</entry>
+  <entry key="1229">Usuario añadido a lista de contactos!</entry>
+  <entry key="1230">Usuario denegado como contacto y eliminado de la lista de contactos pendiente!</entry>
+  <entry key="1231">No está ese contacto!</entry>
+  <entry key="1232">Realmente quiere eliminar ese contacto?</entry>
+  <entry key="1233">Confirmar eliminación del contacto</entry>
+  <entry key="1234">Eliminar contacto de la lista</entry>
+  <entry key="1235">Perfil de Usuario</entry>
+  <entry key="1236">Mostrar perfil del usuario</entry>
+  <entry key="1237">Mensajes</entry>
+  <entry key="1238">Buscar</entry>
+  <entry key="1239">Seleccionar todos</entry>
+  <entry key="1240">No seleccionar ninguno</entry>
+  <entry key="1241">Seleccionar no leidos</entry>
+  <entry key="1242">Seleccionar leidos</entry>
+  <entry key="1243">Mover a carpeta ...</entry>
+  <entry key="1244">Añadir nueva carpeta ...</entry>
+  <entry key="1245">Borrar</entry>
+  <entry key="1246">Correos borrados aún permanecen en su papelera!</entry>
+  <entry key="1247">Marcar no leidos</entry>
+  <entry key="1248">Marcar leidos</entry>
+  <entry key="1249">Responder</entry>
+  <entry key="1250">Responder a todos</entry>
+  <entry key="1251">Adelante</entry>
+  <entry key="1252">Acciones ...</entry>
+  <entry key="1253">Enviar mensaje privado</entry>
+  <entry key="1254">Nada seleccionado!</entry>
+  <entry key="1255">Mover a carpeta de entrada</entry>
+  <entry key="1256">Borrar (final)</entry>
+  <entry key="1257">Esta acción no puede ser deshecha!</entry>
+  <entry key="1258">Añadir carpeta</entry>
+  <entry key="1259">Añadir carpetas y organizar sus mensajes!</entry>
+  <entry key="1260">Añadir carpeta</entry>
+  <entry key="1261">Añadir</entry>
+  <entry key="1262">Borrar carpeta</entry>
+  <entry key="1263">No puede borrar esta carpeta, aún contiene mensajes! Borre antes los mensajes o muévalos a otra carpeta.</entry>
+  <entry key="1264">Editar nombre</entry>
+  <entry key="1265">Realmente quiere borrar esta carpeta? No se podrá recuperar.</entry>
+  <entry key="1266">Su petición fue enviada al usuario. El usuario recibirá una notificación para aceptar o denegar la petición. Solamente las peticiones aceptadas estarán en su lista de contactos...naturalmente!</entry>
+  <entry key="1267">Mensaje</entry>
+  <entry key="1268">El usuario no comparte sus datos personales de contacto.</entry>
+  <entry key="1269">El usuario comparte sus datos personales solamente con sus contactos.</entry>
+  <entry key="1270">Dirección &amp; Teléfono</entry>
+  <entry key="1271">Su código de invitación no es válido. El código solamente es válido durante la fecha y hora especificados:</entry>
+  <entry key="1272">Este evento está conectado a los calendarios de otros usuarios. Los cambios que efectúe afectarán tambien a sus calendarios. Realmente quiere cambiar el evento?</entry>
+  <entry key="1273">Confirmar cambios</entry>
+  <entry key="1274">Permitir a los contactos ver mi calendario (ver solamente)</entry>
+  <entry key="1275">No compartir calendario</entry>
+  <entry key="1276">Calendario de contactos</entry>
+  <entry key="1277">Sus contactos necesitan aprovarle primero para poder ver sus calendarios.</entry>
+  <entry key="1278">Usted no puede almacenar o borrar eventos de otros calendarios que no sean el suyo!</entry>
+  <entry key="1279">Mostrar mi calendario nuevamente!</entry>
+  <entry key="1280">Este evento está conectado a los calendarios de otros usuarios. Su acción borrará tambien el evento de sus calendarios. Realmente quiere borrar el evento?</entry>
+  <entry key="1281">Confirmar acción</entry>
+  <entry key="1282">Entrar a sala</entry>
+  <entry key="1283">Acceso a la sala de conferencias</entry>
+  <entry key="1284">Hay una sala de conferencias y evento reservado con este mensaje privado.</entry>
+  <entry key="1285">Primero es necesario almacenar el evento!</entry>
+  <entry key="1286">Esa sala no es accesible. El evento en el Calendario y sala relacionada, ya ha sido eliminada!</entry>
+  <entry key="1287">Elija su nick-nombre</entry>
+  <entry key="1288">Nombre</entry>
+  <entry key="1289">Apellidos</entry>
+  <entry key="1290">Dirección mail</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Mínimo 4 caracteres! para ambos: Nombre y Apellidos.</entry>
+  <entry key="1293">Por favor, introduzca un mail válido!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login con su cuenta de Facebook</entry>
+  <entry key="1296">Miembro desde</entry>
+  <entry key="1297">Ha hecho login con su cuenta de Facebook. Actualice su perfil con la cuenta de mail correcta; de otro modo no podrá recibir invitaciones ni mensajes privados de otros usuarios.</entry>
+  <entry key="1298">Mensaje</entry>
+  <entry key="1299">No mostrar nuevamente mensaje actualización del perfil</entry>
+  <entry key="1300">más opciones ...</entry>
+  <entry key="1301">Nuevo mensaje privado:</entry>
+  <entry key="1302">Haga click aquí para visitar su perfil y ver el mensaje completo ...</entry>
+  <entry key="1303">Replicar</entry>
+  <entry key="1304">Salas y Chats</entry>
+  <entry key="1305">Mis salas</entry>
+  <entry key="1306">Mi sala de conferencias (para 1-16 usuarios)</entry>
+  <entry key="1307">Mi sala webinar (para 1-120 usuarios)</entry>
+  <entry key="1308">Propietario Id</entry>
+  <entry key="1309">Por favor introduzca una contraseña</entry>
+  <entry key="1310">Necesita una cuenta con el Nivel de Usuario, Moderador o Admin.</entry>
+  <entry key="1311">Web-Service (acceso solamente via SOAP)</entry>
+  <entry key="1312">Cargar directamente a la pizarra</entry>
+  <entry key="1313">Realmente quiere suprimir esta pizarra? Esta acción no puede ser deshecha!</entry>
+  <entry key="1314">Cargar a la pizarra</entry>
+  <entry key="1315">No olvide comenzar la grabación! Un usuario por sala necesita comenzarla para tener después el control de la misma.</entry>
+  <entry key="1316">Comenzar grabación</entry>
+  <entry key="1317">Flecha</entry>
+  <entry key="1318">Circulo</entry>
+  <entry key="1319">Linea</entry>
+  <entry key="1320">Cuadrado</entry>
+  <entry key="1321">Triangulo</entry>
+  <entry key="1322">Texto/Nota</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Dibujo Libre</entry>
+  <entry key="1325">Seleccionar/Mover</entry>
+  <entry key="1326">Dibujar Formas</entry>
+  <entry key="1327">Cortar/Mover</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Imprimir</entry>
+  <entry key="1330">Deshacer</entry>
+  <entry key="1331">Papelera</entry>
+  <entry key="1332">Añadir Rejilla</entry>
+  <entry key="1333">Compartir Archivo</entry>
+  <entry key="1334">Seleccionar Formas</entry>
+  <entry key="1335">Seleccionar Clipart</entry>
+  <entry key="1336">Copiar</entry>
+  <entry key="1337">Cortar</entry>
+  <entry key="1338">Pegar</entry>
+  <entry key="1339">Borrar</entry>
+  <entry key="1340">Realmente quiere borrar todo el contenido de la pizarra?</entry>
+  <entry key="1341">Cargar directamente a la pizarra</entry>
+  <entry key="1342">Asistentes</entry>
+  <entry key="1343">Administrador de asistentes</entry>
+  <entry key="1344">Presente</entry>
+  <entry key="1345">Control Remoto</entry>
+  <entry key="1346">Expulsar</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invitar Asistentes</entry>
+  <entry key="1349">Por Email</entry>
+  <entry key="1350">Usuario es moderador</entry>
+  <entry key="1351">Usuario ha conectado su webcam</entry>
+  <entry key="1352">Desactivar llenar con formas</entry>
+  <entry key="1353">Activar llenar con formas</entry>
+  <entry key="1354">Click a Rejilla</entry>
+  <entry key="1355">Permitir grabación</entry>
+  <entry key="1356">Esperando a grabación</entry>
+  <entry key="1357">Ocultar la barra superior</entry>
+  <entry key="1358">Reproducir video</entry>
+  <entry key="1359">Realmente quiere borrar el contenido de la presente exposición?</entry>
+  <entry key="1360">Aceptar y otorgar derechos al usuario</entry>
+  <entry key="1361">Denegar</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Actividades y acciones</entry>
+  <entry key="1364">Suprimir pizarra</entry>
+  <entry key="1365">Necesita la moderación o el derecho a dibujar en la pizarra para suprimir esta!</entry>
+  <entry key="1366">No permitido</entry>
+  <entry key="1367">ha salido de la sala.</entry>
+  <entry key="1368">Iconos de Matematicas</entry>
+  <entry key="1369">Sin categoría</entry>
+  <entry key="1370">Color-Estilo</entry>
+  <entry key="1371">Calidad</entry>
+  <entry key="1372">Dominio</entry>
+  <entry key="1373">visite</entry>
+  <entry key="1374">rojo-naranja</entry>
+  <entry key="1375">verde-mar</entry>
+  <entry key="1376">azul-industrial</entry>
+  <entry key="1377">azul-brillante</entry>
+  <entry key="1378">rojo-oro</entry>
+  <entry key="1379">gris-plata</entry>
+  <entry key="1380">usuario-definido</entry>
+  <entry key="1381">mejor</entry>
+  <entry key="1382">subir</entry>
+  <entry key="1383">medio</entry>
+  <entry key="1384">Silenciar micrófonos globalmente</entry>
+  <entry key="1385">Volver a activar micrófonos globalmente</entry>
+  <entry key="1386">Silenciar los micrófonos de los demás</entry>
+  <entry key="1387">Usted ha sido desactivado globalmente por el moderador. Usted no puede volver a activarse a sí mismo!</entry>
+  <entry key="1388">Silenciar micrófonos globalmente?</entry>
+  <entry key="1389">Realmente quiere silenciarse globalmente a sí mismo? Nadie podrá oirle!</entry>
+  <entry key="1390">Silenciar micrófono localmente?</entry>
+  <entry key="1391">Realmente quiere silenciar este micrófono? Puede silenciarlo solo en su pantalla localmente. Esto no tendrá efecto en cómo otros usuarios oyen a este usuario. Solo los moderadores pueden silenciarlo globalmente!</entry>
+  <entry key="1392">Silenciar micrófono globalmente?</entry>
+  <entry key="1393">Realmente quiere silenciar a este usuario globalmente? Ningún otro usuario podrá oirle!</entry>
+  <entry key="1394">Su sonido está activado. Haga click aquí y enviará un mensaje al moderador para silenciar globalmente tu micrófono (en toda la sala de conferencias)!</entry>
+  <entry key="1395">Su sonido está desactivado. Haga click aquí y enviará un mensaje al moderador para reactivar tu micrófono globalmente (en toda la sala de conferencias)!</entry>
+  <entry key="1396">desearía que el moderador silencie mi micrófono globalmente.</entry>
+  <entry key="1397">desearía que el moderador reactive mi micrófono globalmente.</entry>
+  <entry key="1398">quiero que el moderador reactive su micrófono.</entry>
+  <entry key="1399">quiero que el moderador silencie su micrófono.</entry>
+  <entry key="1400">Reactivar micrófono. Haga click aquí para silenciar su micrófono globalmente!</entry>
+  <entry key="1401">Silenciar micrófono. Haga click aquí para reactivar su micrófono globalmente!</entry>
+  <entry key="1402">Este usuario ha sido desactivado globalmente por el moderador. Usted no puede reactivarle!</entry>
+  <entry key="1403">Silenciar tu micrófono globalmente</entry>
+  <entry key="1404">Reactivar tu micrófono globalmente</entry>
+  <entry key="1405">Silenciar micrófono</entry>
+  <entry key="1406">Reactivar micrófono</entry>
+  <entry key="1407">Silenciar micrófono globalmente</entry>
+  <entry key="1408">Reactivar micrófono globalmente</entry>
+  <entry key="1409">Solo los moderadores pueden pueden desactivar o reactivar globalmente a un usuario! Para silenciar su propio micrófono: Por favor, emplee el icono en tu ventana de video!</entry>
+  <entry key="1410">Nombre Encuesta</entry>
+  <entry key="1411">Usted</entry>
+  <entry key="1412">Encuestas archivadas</entry>
+  <entry key="1413">activa</entry>
+  <entry key="1414">Cuadro Simple</entry>
+  <entry key="1415">Cuadro Gráfico</entry>
+  <entry key="1416">Por favor, introduzca su dirección de correo</entry>
+  <entry key="1417">Nuevo mensaje(s)</entry>
+  <entry key="1418">Encuesta cerrada</entry>
+  <entry key="1419">Realmente quiere cerrar esta encuesta? Nadie más podrá votar.</entry>
+  <entry key="1420">Eliminar encuesta</entry>
+  <entry key="1421">Realmente quiere eliminar esta encuesta? Los resultados tambien se eliminarán.</entry>
+  <entry key="1422">Lenguaje ISO Código</entry>
+  <entry key="1423">Permitir/Denegar derecho para dar audio exclusivo.</entry>
+  <entry key="1424">Permitir a usuario dar audio exclusivo</entry>
+  <entry key="1425">Denegar a usuario dar audio exclusivo</entry>
+  <entry key="1426">Quisiera obtener permiso para tener audio exclusivo.</entry>
+  <entry key="1427">Quisiera que el moderador me concediera permiso para tener audio exclusivo.</entry>
+  <entry key="1428">Dar permiso para audio exclusivo.</entry>
+  <entry key="1429">Resolución de cámara</entry>
+  <entry key="1430">Cambiando la resolución a efecto de ancho de banda, fotos grandes necesitan más ancho de banda!</entry>
+  <entry key="1431">Usted no tiene los derechos para darse a sí mismo o a los demás audio exclusivo. Necesita solicitar los derechos al moderador o que éste le de audio exclusivo.</entry>
+  <entry key="1432">Quisiera obtener los derechos para audio exclusivo</entry>
+  <entry key="1433">Darme audio exclusivo a mí mismo (alternativamente hacer click en la ventana de video o pulsar F12)</entry>
+  <entry key="1434">El micrófono está abierto!</entry>
+  <entry key="1435">El micrófono esta silenciado</entry>
+  <entry key="1436">Ocultar chat</entry>
+  <entry key="1437">Ocultar actividades</entry>
+  <entry key="1438">Ocultar explorador de archivos</entry>
+  <entry key="1439">Ocultar menú de acciones</entry>
+  <entry key="1440">Ocultar compartir pantalla</entry>
+  <entry key="1441">Ocultar pizarra</entry>
+  <entry key="1442">Mostrar estatus del micrófono en video</entry>
+  <entry key="1443">Opciones de capa</entry>
+  <entry key="1444">Nuevo Evento</entry>
+  <entry key="1445">Los enlaces a la conferencia que son enviados a los participantes cuando usted guarda el evento en el calendario, están protegidos por contraseña, no la sala! Ello quiere decir que si guarda el evento múltiples veces pero con diferentes contraseñas, cada participante recibirá un nuevo enlace con una contraseña diferente. Aunque los enlaces primeros seguirán estando activos una vez se hayan enviado!</entry>
+  <entry key="1446">Editar detalles</entry>
+  <entry key="1447">Mostrar sip dialer</entry>
+  <entry key="1448">Llamar</entry>
+  <entry key="1449">Mostrar los eventos de contacto en el calendario</entry>
+  <entry key="1450">Su inicio!</entry>
+  <entry key="1451">Planear sus reuniones</entry>
+  <entry key="1452">Ver grabaciones y entrevistas</entry>
+  <entry key="1453">Escoger y comenzar una web-conferencia</entry>
+  <entry key="1454">Administrar usuarios y derechos</entry>
+  <entry key="1455">Administrar conexiones y usuarios expulsados</entry>
+  <entry key="1456">Administrar grupos de usuarios</entry>
+  <entry key="1457">Administrar salas de conferencia</entry>
+  <entry key="1458">Administrar configuraciones del sistema</entry>
+  <entry key="1459">Administrar etiquetas y formularios</entry>
+  <entry key="1460">Administrar configuraciones de LDAP y ADS</entry>
+  <entry key="1461">Exportar/Importar Backups del Sistema</entry>
+  <entry key="1462">Usted necesita la moderación o el derecho para dibujar en la pizarra, subir, añadir, suprimir o cargar archivos y carpetas.</entry>
+  <entry key="1463">Editar texto</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publicar</entry>
+  <entry key="1466">Comenzar Publicación</entry>
+  <entry key="1467">Finalizar Publicación</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publicar App</entry>
+  <entry key="1470">Publicar Id</entry>
+  <entry key="1471">Reducir la anchura de la Compartición de Escritorio antes de intentar moverlo a la izquierda</entry>
+  <entry key="1472">Reducir la altura de la Compartición de Escritorio antes de intentar moverlo abajo</entry>
+  <entry key="1473">Reducir la x de la Compartición de Escritorio antes de intentar hacerla más ancho</entry>
+  <entry key="1474">Reducir la y de la Compartición de Escritorio antes de intentar hacerla más alta</entry>
+  <entry key="1475">Completar estas configuraciones stream con los datos de tu pantalla a proveedores de terceras partes como justin.tv</entry>
+  <entry key="1476">Por favor lance Compartición de Escritorio para que pueda ser publicada</entry>
+  <entry key="1477">Es requerido permiso del Moderador para comenzar la grabaciónModerator permission required to start recording</entry>
+  <entry key="1478">Usted no tiene permiso para conceder audio exclusivo a cualquier participante. Necesita tener el papel de moderador o el derecho de audio exclusivo para hacer exclusivo y activo a algun micrófono.</entry>
+  <entry key="1479">Subir nuevo archivo al explorador de archivos</entry>
+  <entry key="1480">Abrir nuevo diálogo de configuraciones compartidas</entry>
+  <entry key="1481">Un moderador debe aprobarlo</entry>
+  <entry key="1482">Decir al moderador que quieres compartir tu webcam/micro</entry>
+  <entry key="1483">Reunir feedback al crear una encuesta</entry>
+  <entry key="1484">Resultados de las encuestas pasadas y actual como gráfico</entry>
+  <entry key="1485">Vote si hay una encuesta para esta sala de conferencias</entry>
+  <entry key="1486">Editar configuraciones de cam y micro</entry>
+  <entry key="1487">Confirmar y dejar la sala</entry>
+  <entry key="1488">Llamada a gente externa via VoIP/SIP</entry>
+  <entry key="1489">Enviar un correo con un link directo a esta sala</entry>
+  <entry key="1490">Cambiar sus configuraciones de la pizarra</entry>
+  <entry key="1491">Máximo peso de subida</entry>
+  <entry key="1492">Pedir al moderador compartir tu pizarra</entry>
+  <entry key="1493">Comenzar Chat Privado</entry>
+  <entry key="1494">Todo</entry>
+  <entry key="1495">No puede comenzar un chat privado con usted mismo.</entry>
+  <entry key="1496">Usted ya comenzó un chat privado con este participante.</entry>
+  <entry key="1497">Realmente quiere eliminar este chat privado?</entry>
+  <entry key="1498">Servidores</entry>
+  <entry key="1499">Servidores participantes en grupo</entry>
+  <entry key="1500">Nombre del Servidor</entry>
+  <entry key="1501">Dirección del Servidor</entry>
+  <entry key="1502">Detalles del Servidor</entry>
+  <entry key="1503">Enviar SMS</entry>
+  <entry key="1504">Publicando. Usuario:</entry>
+  <entry key="1505">Para guardar hora y tráfico de internet puede emplear la linea de comandos como administrador para hacer backup/restaurar/actualizar: &lt;ol&gt; &lt;li&gt;ir al directorio de instalación en OM (por ejemplo /opt/red5)&lt;/li&gt; &lt;li&gt;detenga OM (por ejemplo ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (hacer backup del actual OM)&lt;/li&gt; &lt;li&gt;descargar archivo con el nuevo OM&lt;/li&gt; &lt;li&gt; (mover versión de trabajo de OM solo en el caso :))&lt;/li&gt; &lt;li&gt;extraer el OM descargado a /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' en el caso de que esté usted empleando una base de datos DB distinta a la original )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Salas comunes a todos los usuarios</entry>
+  <entry key="1507">Salas comunes al grupo de usuarios actual</entry>
+  <entry key="1508">Salas del usuario actual</entry>
+  <entry key="1509">Crear/Modificar sala especial de cita</entry>
+  <entry key="1510">Puede insertar múltiples direcciones en el formato: nombre1 apellidos1 &lt;correo1&gt;,"nombre2 apellidos2" &lt;correo2&gt;,'nombre3 apellidos3' &lt;correo3&gt;, ...</entry>
+  <entry key="1511">Ajustar volumen de flujo</entry>
+  <entry key="1512">Ajustar volumen del micrófono</entry>
+  <entry key="1513">Es un chat moderado</entry>
+  <entry key="1514">Permitir mensajes</entry>
+  <entry key="1515">Panel de chat abierto por defecto</entry>
+  <entry key="1516">Panel de archivos abierto por defecto</entry>
+  <entry key="1517">Último ping</entry>
+  <entry key="1518">Cada esclavo envió un ping al master cada 3 segundos (configurable). El último ping del esclavo debe ser inferior a 1 minuto así el master emplea al esclavo. Every slave sends a ping to the master every 3 seconds (configurable).</entry>
+  <entry key="1519">Puerto HTTP</entry>
+  <entry key="1520">Usuario (SOAP-Access)</entry>
+  <entry key="1521">Contraseña</entry>
+  <entry key="1522">Ruta Webapp</entry>
+  <entry key="1523">Protocolo</entry>
+  <entry key="1524">Ping funcionando</entry>
+  <entry key="1525">Activo</entry>
+  <entry key="1526">Generar URL</entry>
+  <entry key="1527">Testeando la Red</entry>
+  <entry key="1528">Auto-seleccionar ventana de video en interview</entry>
+  <entry key="1529">Subrayar</entry>
+  <entry key="1530">Estilo de fuente</entry>
+  <entry key="1531">Permitir estilos de fuentes</entry>
+  <entry key="1532">Color de fuente</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Mostrar estadísticas de sesión</entry>
+  <entry key="1535">Detalles de la sesión</entry>
+  <entry key="1536">Importar sistema</entry>
+  <entry key="1537">Incluir archivos subidos y grabaciones en el backup</entry>
+  <entry key="1538">Permitir transporte SIP en la sala</entry>
+  <entry key="1539">Realmente quiere proveer a este usuario de audio exclusivo?</entry>
+  <entry key="1540">Por favor, especifique su Zona Horaria</entry>
+  <entry key="1541">conferencia (1-25 usuarios)</entry>
+  <entry key="1542">restringida (1-150 usuarios)</entry>
+  <entry key="1543">interview (1:1 reunión con grabación)</entry>
+  <entry key="1544">Ya existe la configuración con esa clave, por favor especifique otra clave o edite la configuración existente</entry>
+  <entry key="1545">El contenido se está guardando, Por favor espere.</entry>
+  <entry key="1546">BienVenidos</entry>
+  <entry key="1547">El Widget muestra información básica del usuario y links soportados</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">Acerca de</entry>
+  <entry key="1550">Nonmbre</entry>
+  <entry key="1551">Versión</entry>
+  <entry key="1552">Revisión</entry>
+  <entry key="1553">Fecha de construcción</entry>
+  <entry key="1554">Cargando ...</entry>
+  <entry key="1555">hoy</entry>
+  <entry key="1556">Ene</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Abr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Ago</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dic</entry>
+  <entry key="1568">no envíe notificación</entry>
+  <entry key="1569">correo simple</entry>
+  <entry key="1570">iCal correo</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Administrar configuraciones de OAuth2</entry>
+  <entry key="1573">Nombre</entry>
+  <entry key="1574">Permitido</entry>
+  <entry key="1575">Icono URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Solicitud de clave URL</entry>
+  <entry key="1579">Solicitud simbólica de URL</entry>
+  <entry key="1580">Solicitud de información URL</entry>
+  <entry key="1581">Configuración de OAuth2</entry>
+  <entry key="1582">Login parámetros nombre</entry>
+  <entry key="1583">Correo parámetros nombre</entry>
+  <entry key="1584">Nombre parámetros nombre</entry>
+  <entry key="1585">Apellidos parámetros nombre</entry>
+  <entry key="1586">Solicitud simbólica de atributos</entry>
+  <entry key="1587">Redireccionar uri</entry>
+  <entry key="1588">Puede introducir la dirección de correo en el formato: nombre1 apellidos1 &lt;email1&gt; o "nombre2 apellidos2" &lt;email2&gt; o 'nombre3 apellidos3' &lt;email3&gt; o email</entry>
+  <entry key="1589">Notificar desconexión</entry>
+  <entry key="1590">Exponer</entry>
+  <entry key="1591">Su cuenta ha sido hecha. El correo de confirmación ha sido enviado. Ahora puede usted hacer login.</entry>
+  <entry key="1592">El final de la fecha introducida es anterior a la fecha del comienzo.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Instalación</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Activar Subir Imagen e Importar a la pizarra
+				<a href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Instalar <strong>ImageMagick</strong> en el servidor, puede obtener más información en
+				<a target="_blank" href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					observando instalación. Las instrucciones para la misma puede encontrarlas aquí
+					<a target="_blank" href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					de todos modos en la mayoría de los sistemas linux puede conseguirlo via su paquete favorito
+					de administración (apt-get it).
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Activando
+				importar PDFs a la pizarra<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Instale <strong>GhostScript</strong> en el servidor, puede tener
+					más información en <a target="_blank" href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					mire en instalación. Las instrucciones para la instalación se encuentran allí, 
+					de todos modos en la mayoría de los sistemas linux puede conseguirlo
+					via su paquete favorito de administración (apt-get it)
+				</li>
+				<li>Instale <strong>SWFTools</strong> en el servidor, puede tener
+					más información en <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					mire en instalación. Algunas de las distribuciones Linux ya lo tienen en el
+					administrador de paquetes, vea <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					la versión recomendada de <strong>SWFTools</strong> es 0.9 porque las
+					anteriores tienen un bug que hace llevar unas dimensiones erróneas al objeto
+                     en la Pizarra.
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Activando
+				importar .doc, .docx, .ppt, .pptx, ... todos los Documentos de Oficina a la Pizarra
+				<a href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu" class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> lanzado escucha en el
+					puerto 8100, vea <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					para más detalles.</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Activando
+				Grabación e importación de .avi, .flv, .mov and .mp4 a la pizarra<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Instalar <strong>FFMpeg</strong>. Puede conseguir FFMPEG de una copia actualizada! 
+				    Para Windows puede descargar una Build, por ejemplo desde
+					<a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Los usuarios de Linux o OSx
+					pueden emplear una de las variadas Instrucciones de Instalación que hay en la Web. 
+					Es necesario activar libmp3lame!
+				</li>
+				<li>Instalar <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_blank">http://sox.sourceforge.net/</a>.
+					Instalar una copia de SOX actualizada! SOX 12.xx no funcionará!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">Si tiene otras cuestiones o necesita soporte para instalación o hosting:</span></b>
+	<br />
+	<br />
+
+	
+	<b><span style="font-size: 1.2em">Soporte-Comunidad:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Listas de correo</a></span>
+	<br />
+	
+	<b> <span style="font-size: 1.4em">Hay algunas compañias
+            que tambien ofrecen soporte comercial para Apache OpenMeetings:</span></b>
+    <br />
+    <br />
+    <br />
+    <br />
+    <span style="font-size: 1.3em"><a
+        href="http://openmeetings.apache.org/commercial-support.html"
+        target="_blank">http://openmeetings.apache.org/commercial-support.html</a></span>
+    <br />
+    ]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recomendación 
+			para medios de producción<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			Viene predeterminado {0} para emplear la base de datos {1}. Para
+			medios de producción considere emplear {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+    ]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Datos del usuario</entry>
+	<entry key="install.wizard.params.step1.username">Nombre de usuario</entry>
+	<entry key="install.wizard.params.step1.username.title">Introduzca un nombre de usuario</entry>
+	<entry key="install.wizard.params.step1.password">Contraseña</entry>
+	<entry key="install.wizard.params.step1.password.title">Introduzca una contraseña</entry>
+	<entry key="install.wizard.params.step1.email">Dirección de correo</entry>
+	<entry key="install.wizard.params.step1.email.title">Introduzca una dirección de correo</entry>
+	<entry key="install.wizard.params.step1.tz">Time Zone del Usuario</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organización (Dominios)</entry>
+	<entry key="install.wizard.params.step1.group">Nombre</entry>
+	<entry key="install.wizard.params.step1.group.title">Introduzca una Organización por omisión</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuración</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Permitir auto-registro (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Enviar Correo a los nuevos Usuarios registrados (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">Los Nuevos Usuarios necesitan verificarse con sus Correos (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Salas Preconfiguradas de todo tipo serán creadas</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Correo de Referencia (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Introduzca una Referencia</entry>
+	<entry key="install.wizard.params.step2.smtpServer">Servidor SMTP (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Introduzca un Servidor-SMTP</entry>
+	<entry key="install.wizard.params.step2.smtpPort">Puerto del Servidor (el Puerto clásico del Servidor-Smtp es el 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Introduzca un Puerto SMTP normalmente 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">Nombre de Usuario de correo SMTP (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Introduzca nombre usuario de correo</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">Contraseña del usuario de correo SMTP (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Introduzca la contraseña del usuario de correo</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Activar TLS en el Servidor de Correo Autentificado</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Poner la dirección de correo electrónico como ReplyTo en los correos de invitaciónes (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Idioma preferido</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Fuente Preferida para Exportar [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Convertidores</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> consulte</entry>
+	<entry key="install.wizard.params.step3.installation">Instalación</entry>
+	<entry key="install.wizard.params.step3.swfZoom">Zoom SWFTools</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Introduzca el dpi que swftools empleará para convertir PDF a SWF</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">Puede comprobar si la ruta a la instalación de swftools es la correcta
+		abriendo una shell o cmd-prompt y escribir pdf2swf  Introduzca la dpi
+		que swftools empleará para convertir PDF a SWF. Preconfigurada es
+		100 dpi</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">Calidad de JPEG en SWFTools</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Introduzca la calidad embebida de las imágenes jpeg. 0 es la menor (pesa menos), 100 es la mejor (pesa más). (por omisión:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Puede comprobar si la ruta a la instalación de swftools es la correcta
+		abriendo una shell o cmd-prompt y escribir pdf2swf  Introduzca la calidad
+		de las imagenes jpeg embebidas. 0 es la menor (pequeña),
+		100 es la mejor (grande). (preconfigurada:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path (Ruta)</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Introduzca la ruta a swftools, por ejemplo C:/swftools (Windows) o déjelo en blanco si swftools está registrado en el path del sistema</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		Puede comprobar si la ruta a la instalación de swftools es la correcta
+		abriendo una shell o cmd-prompt y escribir pdf2swf  Si muestra
+		una lista de opciones, deje este campo en blanco, si no debe especificar
+		la ruta a pdf2swf en su sistema
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path (Ruta)</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Introduzca la ruta a ImageMagick, o déjelo en blanco si ImageMagick está registrado en el path del sistema</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path (Ruta)</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Introduzca la ruta a FFMPEG, o déjelo en blanco si ImageMagick está registrado en el path del sistema</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path (Ruta)</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Introduzca la ruta a SOX, o déjelo en blanco si SOX está registrado en el path del sistema</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path (Ruta)</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">Ruta a la libreria JOD (http://code.google.com/p/jodconverter), introduzca la ruta al directorio lib donde se encuentra el archivo jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path (Ruta) para jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">Ruta a OpenOffice/LibreOffice (opcional), por favor introdúzcala en el caso que jodconverter no encuentre a OpenOffice/LibreOffice automáticamente</entry>
+	<entry key="install.wizard.params.step3.officePath.text">El path (ruta) a OpenOffice/LibreOffice (opcional) por favor
+		configúrelo correctamente en caso de que jodconverter no pueda
+		encontrar la instalación de OpenOffice/LibreOffice
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Tipo de Encriptación</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Introduzca el nombre del tipo de Encriptación. NO LO CAMBIE SI NO ESTÁ SEGURO</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		Puede emplear este tipo de encriptación que es igual
+		a la función PHP-MD5 o BSD-Style empleando: <b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		para más información o escribir su propio Cryp-Style mire en: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Customizar Mecanismo de Encriptación</a> Puede editar este valor
+		después AUNQUE los Usuarios y Sesiones creadas anteriormente pueden quedar
+		en desuso para siempre.
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuración</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Activar SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Activar la integración de red5SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP prefijo de salas</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefijo para número telefónico de salas de conferencia</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensiones contexto</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Contexto de Asterisk extensiones</entry>
+
+	<entry key="install.wizard.install.desc">Por favor pulse el botón "Finalizar" para comenzar la instalación.</entry>
+	<entry key="install.wizard.install.started">Por favor aguarde, instalación en progreso...</entry>
+	<entry key="install.wizard.install.failed">Instalación fallida</entry>
+
+	<entry key="install.wizard.congrats.enter">Entrar a la Aplicación</entry>
+	<entry key="install.wizard.congrats.port">Si su servidor Red5 corre en un Puerto distinto o en diferente dominio</entry>
+	<entry key="install.wizard.congrats.config">cambie los valores de configuración del cliente</entry>
+	<entry key="install.wizard.congrats.mail">Listas de correo</entry>
+	<entry key="install.wizard.congrats.commercial">Hay algunas compañias
+		que tambien ofrecen soporte comercial para Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_fa.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
new file mode 100644
index 0000000..045216f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_fa.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">كنفرانس</entry>
+  <entry key="2">ملاقات</entry>
+  <entry key="3">درس كلاس</entry>
+  <entry key="4">تنظيمات</entry>
+  <entry key="5">فردي مشخصات</entry>
+  <entry key="6">مدیریت</entry>
+  <entry key="7">توقف</entry>
+  <entry key="8">ضبط</entry>
+  <entry key="9">دسترس قابل غير فايل</entry>
+  <entry key="10">استاد توسط ضبط</entry>
+  <entry key="11">حاضر كاربران</entry>
+  <entry key="12">كنفرانس يك شروع</entry>
+  <entry key="13">من نام</entry>
+  <entry key="14">ويديويي كنفرانس</entry>
+  <entry key="15">بارگذاري</entry>
+  <entry key="16">ليست بازبيني</entry>
+  <entry key="17">اصلي فايل</entry>
+  <entry key="18">جديد سنجي نظر</entry>
+  <entry key="19">كنفرانس براي جديد راي يك</entry>
+  <entry key="20">:پرسش</entry>
+  <entry key="21">:سنجي نظر انواع</entry>
+  <entry key="22">ايجاد</entry>
+  <entry key="23">اطلاعات پيام</entry>
+  <entry key="24">سنجي نظر يك ايجاد</entry>
+  <entry key="25">انصراف</entry>
+  <entry key="26">خير/بله</entry>
+  <entry key="27">1-10 اعداد</entry>
+  <entry key="28">سنجي نظر</entry>
+  <entry key="29">اعتدال</entry>
+  <entry key="30">راي</entry>
+  <entry key="31">پيشين آرا</entry>
+  <entry key="32">راي</entry>
+  <entry key="33">پاسخ</entry>
+  <entry key="34">بله</entry>
+  <entry key="35">خير</entry>
+  <entry key="36">:پاسخ درخواست</entry>
+  <entry key="37">راي پيامد</entry>
+  <entry key="38">:پرسش</entry>
+  <entry key="39">:پيامد</entry>
+  <entry key="40">:پاسخ</entry>
+  <entry key="41">است نشده آغاز سنجي نظر هيچ</entry>
+  <entry key="42">آرا</entry>
+  <entry key="43">جلسه</entry>
+  <entry key="44">كنفرانس</entry>
+  <entry key="45">نوع</entry>
+  <entry key="46">ديگر جايگاه</entry>
+  <entry key="47">پيشين انتخابهاي</entry>
+  <entry key="48">ورود</entry>
+  <entry key="49">.کردند ترک را جلسه سيستم مدير</entry>
+  <entry key="50">سيستم پيام</entry>
+  <entry key="51">انتخاب شيوه</entry>
+  <entry key="52">دوربين انتخاب</entry>
+  <entry key="53">ميكروفن انتخاب</entry>
+  <entry key="54">ادامه</entry>
+  <entry key="55">انصراف</entry>
+  <entry key="56">داريد مجدد اتصال به احتياج شما</entry>
+  <entry key="57">تنظيمات ويرايش</entry>
+  <entry key="58">رشته</entry>
+  <entry key="59">:زبان</entry>
+  <entry key="60">ادامه</entry>
+  <entry key="61">انصراف</entry>
+  <entry key="62">مانيتور صفحه كردن پاك</entry>
+  <entry key="63">شود؟ اضافه جديد عكس يك اينكه از قبل شود خالي مانيتور صفحه ميخواهيد آيا</entry>
+  <entry key="64">نفرماييد سوال دوباره</entry>
+  <entry key="65">خير</entry>
+  <entry key="66">نصب تصحيح</entry>
+  <entry key="67"></entry>
+  <entry key="68">كاربر اطلاعات</entry>
+  <entry key="69">شده ترسيم محيط وضوح</entry>
+  <entry key="70">كردن خنثي</entry>
+  <entry key="71">دوباره انجام</entry>
+  <entry key="72">نظر مورد موضوع</entry>
+  <entry key="73">متن</entry>
+  <entry key="74">كردن نقاشي</entry>
+  <entry key="75">كشيدن خط</entry>
+  <entry key="76">كردن دار خط زير</entry>
+  <entry key="77">گوش چهار</entry>
+  <entry key="78">بيضي</entry>
+  <entry key="79">پيكان</entry>
+  <entry key="80">انتخابي آيتم حذف</entry>
+  <entry key="81">مديريت درخواست</entry>
+  <entry key="82">اجرا قابل</entry>
+  <entry key="83">انصراف</entry>
+  <entry key="84">مديريت درخواست</entry>
+  <entry key="85">بستن</entry>
+  <entry key="86">كج حروف</entry>
+  <entry key="87">توپر حروف</entry>
+  <entry key="88">ماندن منتظر</entry>
+  <entry key="89">اجرا قابل پيغام</entry>
+  <entry key="90">پذيرفتن</entry>
+  <entry key="91">كردن رد</entry>
+  <entry key="92"></entry>
+  <entry key="93">سيستم مدير به درخواست پيام ارسال</entry>
+  <entry key="94">پذيرفتن</entry>
+  <entry key="95">كردن رد</entry>
+  <entry key="96">سيستم مدير تغيير</entry>
+  <entry key="97">You are not moderating this course!</entry>
+  <entry key="98">:سيستم مدير</entry>
+  <entry key="99">This Room is full. Sorry please try again later.</entry>
+  <entry key="100">بيضي</entry>
+  <entry key="101">بستن</entry>
+  <entry key="102"></entry>
+  <entry key="103">كاراكتر 4 از بيش يا 4</entry>
+  <entry key="104">باشد كاراكتر 4 حداقل بايد عبور رمز</entry>
+  <entry key="105">The username is already taken</entry>
+  <entry key="106">The email is already registered</entry>
+  <entry key="107">سيستم اخطار</entry>
+  <entry key="108">ارتباط قطع</entry>
+  <entry key="109">:كاربر</entry>
+  <entry key="110">:عبور رمز</entry>
+  <entry key="111">:زبان</entry>
+  <entry key="112">سيستم به ورود</entry>
+  <entry key="113">Sign Up</entry>
+  <entry key="114">:كاربر</entry>
+  <entry key="115">عبور رمز:</entry>
+  <entry key="116">تايپ بازبيني:</entry>
+  <entry key="117">:نام</entry>
+  <entry key="118">:خانوادگي نام</entry>
+  <entry key="119">:ايميل</entry>
+  <entry key="120">:كشور</entry>
+  <entry key="121">ثبت</entry>
+  <entry key="122">انصراف</entry>
+  <entry key="123">Not a member?</entry>
+  <entry key="124">اصلي صفحه</entry>
+  <entry key="125">كاربر</entry>
+  <entry key="126">ها گروه</entry>
+  <entry key="127">دهي سازمان</entry>
+  <entry key="128">گفتگو اطاق</entry>
+  <entry key="129">همگاني</entry>
+  <entry key="130">دهي سازمان</entry>
+  <entry key="131">ورود</entry>
+  <entry key="132">ارتباط قطع</entry>
+  <entry key="133">عبور رمز</entry>
+  <entry key="134">تايپ بازبيني</entry>
+  <entry key="135">:نام</entry>
+  <entry key="136">:خانوادگي نام</entry>
+  <entry key="137">:ايميل</entry>
+  <entry key="138">:تولد تاريخ</entry>
+  <entry key="139">:سكونت محل</entry>
+  <entry key="140">:كدپستي</entry>
+  <entry key="141">:كشور</entry>
+  <entry key="142">:آدرس</entry>
+  <entry key="143">كاربر سوابق</entry>
+  <entry key="144">ذخيره</entry>
+  <entry key="145">ذخيره</entry>
+  <entry key="146">كاربر شناسه</entry>
+  <entry key="147">ارتباط قطع</entry>
+  <entry key="148">نام</entry>
+  <entry key="149">خانوادگي نام</entry>
+  <entry key="150">بعدي نمايش</entry>
+  <entry key="151">قبلي نمايش</entry>
+  <entry key="152">ضبط حذف</entry>
+  <entry key="153">انصراف</entry>
+  <entry key="154">حذف</entry>
+  <entry key="155">جديد ضبط</entry>
+  <entry key="156">ضبط بيني باز</entry>
+  <entry key="157">ضبط حذف</entry>
+  <entry key="158">وضعيت</entry>
+  <entry key="159">صلاحيت فاقد</entry>
+  <entry key="160">ساختن قادر</entry>
+  <entry key="161">دهي سازمان</entry>
+  <entry key="162">تقويم</entry>
+  <entry key="163">بستن</entry>
+  <entry key="164">سازمان شناسه</entry>
+  <entry key="165">نام</entry>
+  <entry key="166">كاربر</entry>
+  <entry key="167">سيستم مدير</entry>
+  <entry key="168">سيستم مدير</entry>
+  <entry key="169">كاربر سطح</entry>
+  <entry key="170">دهي سازمان</entry>
+  <entry key="171">نام</entry>
+  <entry key="172">دهي سازمان افزودن</entry>
+  <entry key="173">دهي سازمان افزودن</entry>
+  <entry key="174">انصراف</entry>
+  <entry key="175">افزودن</entry>
+  <entry key="176">remove organisation</entry>
+  <entry key="177">كاربر</entry>
+  <entry key="178">اضافه كاربر</entry>
+  <entry key="179">كاربر حذف</entry>
+  <entry key="180">كاربر افزودن</entry>
+  <entry key="181">كاربر جستجوي</entry>
+  <entry key="182">كاوش</entry>
+  <entry key="183">كاربر</entry>
+  <entry key="184">دهي سازمان</entry>
+  <entry key="185">ورود</entry>
+  <entry key="186">كنفرانس اطاق</entry>
+  <entry key="187">كنفرانس اطاق</entry>
+  <entry key="188">شناسه</entry>
+  <entry key="189">نام</entry>
+  <entry key="190">همگاني</entry>
+  <entry key="191">دهي سازمان</entry>
+  <entry key="192">گفتگو اطاق</entry>
+  <entry key="193">نام</entry>
+  <entry key="194">تايپ</entry>
+  <entry key="195">همگاني</entry>
+  <entry key="196">تفسير</entry>
+  <entry key="197">ذخيره</entry>
+  <entry key="198">گذاري بار</entry>
+  <entry key="199">از ذخيره</entry>
+  <entry key="200">فايل نام</entry>
+  <entry key="201">فايل نام</entry>
+  <entry key="202">انصراف</entry>
+  <entry key="203">ذخيره</entry>
+  <entry key="204">خطا</entry>
+  <entry key="205">گذاري بار</entry>
+  <entry key="206">موضوع بارگذاري</entry>
+  <entry key="207">snychronizing clients, clients to wait:</entry>
+  <entry key="208">تصويري هاي داده گذاري بار</entry>
+  <entry key="209">snychronizing clients, clients to wait:</entry>
+  <entry key="210">شده ترسيم محيط وضوح</entry>
+  <entry key="211">clear drawarea, all data on whiteboard will be lost</entry>
+  <entry key="212">فايل گذاري بار از قبل تثبيت</entry>
+  <entry key="213">نامه دعوت ارسال</entry>
+  <entry key="214">نامه دعوت ارسال</entry>
+  <entry key="215">موضوع</entry>
+  <entry key="216">گيرنده</entry>
+  <entry key="217">پيام</entry>
+  <entry key="218">ارسال</entry>
+  <entry key="219">انصراف</entry>
+  <entry key="220">ارسال</entry>
+  <entry key="221">كاربر داده</entry>
+  <entry key="222">كنفرانس اين براي شما اختصار نام</entry>
+  <entry key="223">مستعار نام</entry>
+  <entry key="224">نام</entry>
+  <entry key="225">خانوادگي نام</entry>
+  <entry key="226">ايميل</entry>
+  <entry key="227">زبان</entry>
+  <entry key="228">ورود</entry>
+  <entry key="229">گذاري بار</entry>
+  <entry key="230">كنيد صبر لطفا-اطلاعات گذاري بار حال در</entry>
+  <entry key="231">ورود رمز اخطار</entry>
+  <entry key="232">كنيد وارد عبور رمز دو لطفا</entry>
+  <entry key="233">ايميل اخطار</entry>
+  <entry key="234">كرديد وارد صحيح نا پستي آدرس</entry>
+  <entry key="235">Registration Complete</entry>
+  <entry key="236">است شده ايجاد شما اكانت</entry>
+  <entry key="237">بگذاريد اشتراك به را خود صفحه نميتوانيد شما</entry>
+  <entry key="238">ممنوع گذاري اشتراك به</entry>
+  <entry key="239">شما صفحه گذاري اشتراك</entry>
+  <entry key="240">Bad Bandwidth: You have not been able to syncronize the Screen. Frames will be dropped. If this Warning is shown often you could ask the moderator to reduce the Quality.</entry>
+  <entry key="241">:صفحه</entry>
+  <entry key="242">كردن نقاشي</entry>
+  <entry key="243">سند</entry>
+  <entry key="244"></entry>
+  <entry key="245">ها فايل</entry>
+  <entry key="246">اعضا</entry>
+  <entry key="247">اصلي سند دانلود</entry>
+  <entry key="248">pdf سند دانلود</entry>
+  <entry key="249">Load Presentation to whiteboard</entry>
+  <entry key="250">بندي پيكره</entry>
+  <entry key="251">موضوع اين كشيدن</entry>
+  <entry key="252">موضوع اين سايز تغيير</entry>
+  <entry key="253">درصد</entry>
+  <entry key="254">مبدا</entry>
+  <entry key="255">اول صفحه به بازگشت</entry>
+  <entry key="256">قبلي صفحه به بازگشت</entry>
+  <entry key="257">بعدي صفحه به رفتن</entry>
+  <entry key="258">آخر صفحه به رفتن</entry>
+  <entry key="259">-- زوم</entry>
+  <entry key="260">++ زوم</entry>
+  <entry key="261">Mr.</entry>
+  <entry key="262">Ms.</entry>
+  <entry key="263">موقعيت</entry>
+  <entry key="264">شناسه</entry>
+  <entry key="265">راهنما</entry>
+  <entry key="266">موقعيت</entry>
+  <entry key="267">راهنما</entry>
+  <entry key="268">رساني بروز آخرين</entry>
+  <entry key="269">توسط شده روز به</entry>
+  <entry key="270">تفسير</entry>
+  <entry key="271">بها</entry>
+  <entry key="272">مبدا</entry>
+  <entry key="273">كاربر</entry>
+  <entry key="274">سازمان از كاربر حذف</entry>
+  <entry key="275">حذف</entry>
+  <entry key="276">This user is already member of this organisation.</entry>
+  <entry key="277">خبر</entry>
+  <entry key="278">Quicklinks</entry>
+  <entry key="279">كنفرانس به بازگشت</entry>
+  <entry key="280">كنفرانس تالار به بازگشت</entry>
+  <entry key="281">پشتيباني و همكاري</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">!اشكال يك ضبط</entry>
+  <entry key="285">بيشتر</entry>
+  <entry key="286">Project website (http://openmeetings.apache.org/)</entry>
+  <entry key="287">User mailing list (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Remember Login</entry>
+  <entry key="289">محتوا</entry>
+  <entry key="290">من خانگي صفحه</entry>
+  <entry key="291">My Scheduled Meetings</entry>
+  <entry key="292">My Scheduled Events</entry>
+  <entry key="293">همگاني گفتگوي</entry>
+  <entry key="294">همگاني گفتگو</entry>
+  <entry key="295">همگاني وقايع</entry>
+  <entry key="296">خصوصي وقايع</entry>
+  <entry key="297">همگاني محتوا</entry>
+  <entry key="298">خصوصي محتواي</entry>
+  <entry key="299">شخصي محتواي</entry>
+  <entry key="300"></entry>
+  <entry key="301">مديريت</entry>
+  <entry key="302">مديريت درخواست</entry>
+  <entry key="303">سنجي نظر</entry>
+  <entry key="304">فايل يك انتخاب</entry>
+  <entry key="305">تنظيمات</entry>
+  <entry key="306">دوربين و ميكروفن تنظيمات</entry>
+  <entry key="307">مانيتور صفحه تنظيمات</entry>
+  <entry key="308">خروج</entry>
+  <entry key="309">اتاق به بازگشت</entry>
+  <entry key="310">خروج</entry>
+  <entry key="311">ايد؟كرده فراموش را خودعبور رمز</entry>
+  <entry key="312">Reset Password</entry>
+  <entry key="313">ايميل توسط</entry>
+  <entry key="314">By Login</entry>
+  <entry key="315">شما ايميل</entry>
+  <entry key="316">Your Login</entry>
+  <entry key="317">Send Mail with reset Link</entry>
+  <entry key="318">No such email address was found. Make sure you enter the same email address you used to create your account.</entry>
+  <entry key="319">Please enter either a Mail or a Username</entry>
+  <entry key="320">There is no User connected to this Username</entry>
+  <entry key="321">The email containing a special link has been sent to your email address, please check your mailbox. If you still have not received a email, please adjust your email spam settings and resend confirmation email.</entry>
+  <entry key="322">خطا</entry>
+  <entry key="323">پيام</entry>
+  <entry key="324">Invalid Hash. No User found.</entry>
+  <entry key="325">Reset Your Password</entry>
+  <entry key="326">ارتباط قطع</entry>
+  <entry key="327">عبور رمز تغيير</entry>
+  <entry key="328">جديد عبور رمز</entry>
+  <entry key="329">عبور رمز مجدد ورود</entry>
+  <entry key="330">The Passwords you entered weren't identical.</entry>
+  <entry key="331">4 از بيش يا كاراكتر 4</entry>
+  <entry key="332">Password set. You can login now.</entry>
+  <entry key="333">ادامه</entry>
+  <entry key="334">Unkown Error. Please report this to your Service-Team.</entry>
+  <entry key="335">Username not found</entry>
+  <entry key="336">صحيح نا عبور رمز</entry>
+  <entry key="337">Successfully Logged out</entry>
+  <entry key="338">Frontend Registration disabled.</entry>
+  <entry key="339">صحيح نا ايميل</entry>
+  <entry key="340">كنيد وارد را ديگري فايل نام لطفا است تكراري فايل نام</entry>
+  <entry key="341">است كوتاه خيلي فايل نام</entry>
+  <entry key="342">كنيد ذخيره توانيد نمي را آدرس</entry>
+  <entry key="343">User added but you need to assign this User to an Organisation, otherwise he won't be able to sign-in.</entry>
+  <entry key="344">جديد ضبط</entry>
+  <entry key="345">No Field found with this FieldId.</entry>
+  <entry key="346">No Label found for that Field.</entry>
+  <entry key="347">Admin Authorization required</entry>
+  <entry key="348">Language-Editor</entry>
+  <entry key="349">زبان</entry>
+  <entry key="350">Label-ID</entry>
+  <entry key="351">Label-Name</entry>
+  <entry key="352">Value</entry>
+  <entry key="353">Fieldvalues</entry>
+  <entry key="354">LabelName</entry>
+  <entry key="355">LabelValue</entry>
+  <entry key="356">Label-ID</entry>
+  <entry key="357">You did only delete the Label NOT the Field! You cannot delete the Field, it may has Labels in other Languages.</entry>
+  <entry key="358">Invalid Labelid. The FieldLanguagesvalues_Id cannot be found in the database.</entry>
+  <entry key="359">You cannot delete this Field. You can only delete Labels NOT Fields. There is no Label loaded at the moment, wether it is not selected any Field or there is no Label for this Language for that Field defined.</entry>
+  <entry key="360">export</entry>
+  <entry key="361">You need to logout to see any changes.</entry>
+  <entry key="362">جديد زبان افزودن</entry>
+  <entry key="363">زبان حذف</entry>
+  <entry key="364">جديد زبان افزودن</entry>
+  <entry key="365">نام</entry>
+  <entry key="366">زبان افزودن</entry>
+  <entry key="367">پشتيبان</entry>
+  <entry key="368">اولين به بازگشت</entry>
+  <entry key="369">قبلي به بازگشت</entry>
+  <entry key="370">بعدي به رفتن</entry>
+  <entry key="371">آخر به رفتن</entry>
+  <entry key="372">كاربر گفتگوي (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">صدا كردن خاموش/روشن</entry>
+  <entry key="374">سيستم</entry>
+  <entry key="375">شما تنظيمات</entry>
+  <entry key="376">سلام</entry>
+  <entry key="377">شما نمودار ويرايش</entry>
+  <entry key="378">:جديد پيام</entry>
+  <entry key="379">جديد تصوير گذاري بار</entry>
+  <entry key="380">Userdata - Export</entry>
+  <entry key="381">بندي طبقه همه</entry>
+  <entry key="382">start export</entry>
+  <entry key="383">بندي طبقه بوسيله</entry>
+  <entry key="384">start export</entry>
+  <entry key="385">كاربر داده</entry>
+  <entry key="386">كاربر انتخاب</entry>
+  <entry key="387">اهميت</entry>
+  <entry key="388">Export to XML - These files can be used to: - Contribute to the project - Import into another System - Backup - Customization - Put it into the language-directory for your next installation</entry>
+  <entry key="389">Choose a language file to import. Choose the right Langauge from the Combobox! No matter what the name of the file is, it will be imported into this language!</entry>
+  <entry key="390">فايل انتخاب</entry>
+  <entry key="391">از ذخيره</entry>
+  <entry key="392">:نام</entry>
+  <entry key="393">:توضيح</entry>
+  <entry key="394">ذخيره</entry>
+  <entry key="395">بایگانی</entry>
+  <entry key="396">Recordings Viewer</entry>
+  <entry key="397">Recordings of public and private Rooms</entry>
+  <entry key="398">:كاربر</entry>
+  <entry key="399">:پيوستن</entry>
+  <entry key="400"></entry>
+  <entry key="401">:اطاق اين در كاربر</entry>
+  <entry key="402">بيني باز</entry>
+  <entry key="403">This Room is Full. Try again in a few minutes.</entry>
+  <entry key="404">click on a room to get details</entry>
+  <entry key="405">Chat with the users in this Room:</entry>
+  <entry key="406">:اطاق</entry>
+  <entry key="407">:اطاق در كاربر</entry>
+  <entry key="408">:ابتدا از</entry>
+  <entry key="409">play recording</entry>
+  <entry key="410">:طول</entry>
+  <entry key="411">:تاريخ</entry>
+  <entry key="412">Recorder Mode! You cannot change any values, this is a recorded File!</entry>
+  <entry key="413">Play this recording</entry>
+  <entry key="414">مكث/</entry>
+  <entry key="415">ضبط شروع</entry>
+  <entry key="416">ضبط توقف</entry>
+  <entry key="417">:ضبط</entry>
+  <entry key="418">There is already somebody recording at the moment:</entry>
+  <entry key="419">كاربر توسط!ضبط</entry>
+  <entry key="420">انصراف</entry>
+  <entry key="421">Recording will be canceled and not saved.</entry>
+  <entry key="422">مطالب خلاصه</entry>
+  <entry key="423">شود ضبط مطالب خلاصه و شود بسته پنجره اين</entry>
+  <entry key="424">خط رنگ تغيير</entry>
+  <entry key="425">رنگ انتخاب</entry>
+  <entry key="426">خط رنگ ساختن توانايي عدم /توانايي</entry>
+  <entry key="427">رنگ سطل ساختن توانايي عدم/توانايي</entry>
+  <entry key="428">خط رنگ ساختن توانايي عدم/توانايي</entry>
+  <entry key="429">خط ضخامت تغيير</entry>
+  <entry key="430">بستن</entry>
+  <entry key="431">فونت تغيير</entry>
+  <entry key="432">ضبط حذف</entry>
+  <entry key="433">مهمان</entry>
+  <entry key="434">:بوسيله</entry>
+  <entry key="435">نام</entry>
+  <entry key="436">اطاق</entry>
+  <entry key="437">تاريخ</entry>
+  <entry key="438">انصراف</entry>
+  <entry key="439">شروع</entry>
+  <entry key="440">نام</entry>
+  <entry key="441">تاريخ</entry>
+  <entry key="442">سرور حذف</entry>
+  <entry key="443"></entry>
+  <entry key="444">پيام ارسال</entry>
+  <entry key="445">احساسات</entry>
+  <entry key="446">احساسات</entry>
+  <entry key="447">Choose Published Devices</entry>
+  <entry key="448">بصري و سمعي</entry>
+  <entry key="449">سمعي فقط</entry>
+  <entry key="450">بصري فقط</entry>
+  <entry key="451">بصري نه/سمعي نه</entry>
+  <entry key="452">بصري نه/سمعي نه</entry>
+  <entry key="453">دوشنبه</entry>
+  <entry key="454">شنبه سه</entry>
+  <entry key="455">شنبه چهار</entry>
+  <entry key="456">شنبه پنج</entry>
+  <entry key="457">جمعه</entry>
+  <entry key="458">شنبه</entry>
+  <entry key="459">شنبه يك</entry>
+  <entry key="460">شنبه دو</entry>
+  <entry key="461">شنبه سه</entry>
+  <entry key="462">شنبه چهار</entry>
+  <entry key="463">شنبه پنج</entry>
+  <entry key="464">جمعه</entry>
+  <entry key="465">شنبه</entry>
+  <entry key="466">شنبه يك</entry>
+  <entry key="467">هفتگي تقويم</entry>
+  <entry key="468">هفتگي تقويم</entry>
+  <entry key="469">ژانويه</entry>
+  <entry key="470">فوريه</entry>
+  <entry key="471">مارس</entry>
+  <entry key="472">آوريل</entry>
+  <entry key="473">مه</entry>
+  <entry key="474">ژوئن</entry>
+  <entry key="475">جولاي</entry>
+  <entry key="476">آگوست</entry>
+  <entry key="477">سپتامبر</entry>
+  <entry key="478">اكتبر</entry>
+  <entry key="479">نوامبر</entry>
+  <entry key="480">دسامبر</entry>
+  <entry key="481">تقويم</entry>
+  <entry key="482">كنندگان شركت</entry>
+  <entry key="483">Show Layout Settings</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">عرض/طول</entry>
+  <entry key="486">Video-Container</entry>
+  <entry key="487">Moderation-Container</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Whiteboard-Container</entry>
+  <entry key="490">ساختن قادر</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Width | Height</entry>
+  <entry key="493">Files,Chat,Participants - Container</entry>
+  <entry key="494">ساختن قادر</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">عرض/طول</entry>
+  <entry key="497">The Moderator has left the Room. No one is presenting at the Moment. You could apply for Moderation or wait.</entry>
+  <entry key="498">There is no Moderator in this Room, but there are some Participants. You have to apply for Moderation or wait.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Invitation</entry>
+  <entry key="501">كاربر براي پيام</entry>
+  <entry key="502">:پيام</entry>
+  <entry key="503">:كنيد كليك كنندگان شركت با گفتگو براي لينك اين در</entry>
+  <entry key="504">كنيد كليك را اينجا اطاق به ورود براي</entry>
+  <entry key="505">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="506">{0} SignUp</entry>
+  <entry key="507">:شما كاربر داده</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">:عبور رمز</entry>
+  <entry key="510">:ايميل</entry>
+  <entry key="511">{0}-Team</entry>
+  <entry key="512">{0} Sign-Up</entry>
+  <entry key="513">{0} - Reset Password</entry>
+  <entry key="514">Click on this link to enter a new password:</entry>
+  <entry key="515">كنيد كليك اينجا جديد عبور رمز ورود براي</entry>
+  <entry key="516">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="517">{0} Password Reset</entry>
+  <entry key="518">(dd.mm.yyyy)24/12/2001 مثال عنوان به كنيد وارد صحيح تاريخ يك لطفا</entry>
+  <entry key="519">name@mail.com مثال عنوان به كنيد وارد صحيح ايميل يك لطفا</entry>
+  <entry key="520">Please enter a Float-Number, for example 1.00</entry>
+  <entry key="521">100 مثال عنوان به كنيد وارد عدد يك لطفا</entry>
+  <entry key="522">++490123123123مثال عنوان به كنيد وارد صحيح تلفن يك لطفا</entry>
+  <entry key="523">(hh:mm)12:23 مثال عنوان به كنيد وارد صحيح زمان يك لطفا</entry>
+  <entry key="524">عبور رمز حفاظت</entry>
+  <entry key="525">عبور رمز</entry>
+  <entry key="526">دوره اعتبار</entry>
+  <entry key="527">ناپذير پايان</entry>
+  <entry key="528">دوره يك</entry>
+  <entry key="529">اول دوره</entry>
+  <entry key="530">:از اعتبار</entry>
+  <entry key="531">:تا اعتبار</entry>
+  <entry key="532">آنلاين كلاس به دعوت</entry>
+  <entry key="533">Not Invitation availible for this Invitation-Code</entry>
+  <entry key="534">The Invitation was already used. This type of Invitation cannot be re-used.</entry>
+  <entry key="535">This Invitation-Code is not valid.</entry>
+  <entry key="536">:عبور رمز</entry>
+  <entry key="537">Check Password</entry>
+  <entry key="538">Invalid Password!</entry>
+  <entry key="539">گذاشتن اجرا به</entry>
+  <entry key="540">بصري /سمعي بودن مطابق</entry>
+  <entry key="541">Login was correct, but the Session you tried is not active or stored on the Server. You have to get a new SessionId and retry login.</entry>
+  <entry key="542">The SessionId is not loggedin or has no Admin rights. The SOAP Gateway needs an User with Admin-Rights to embed new Users.</entry>
+  <entry key="543">This Session has no Remoteuser-Data connected. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">The recorder is currently Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">w</entry>
+  <entry key="550">width</entry>
+  <entry key="551">h</entry>
+  <entry key="552">height</entry>
+  <entry key="553">Change Transparency</entry>
+  <entry key="554">Browser Open</entry>
+  <entry key="555">Browser Close</entry>
+  <entry key="556">The Connection to the Server is lost. You need to reload the Application or/and check your Network.</entry>
+  <entry key="557">Pointer</entry>
+  <entry key="558">Synchronizing</entry>
+  <entry key="559">Synchronizing Users, please wait</entry>
+  <entry key="560">&lt;u&gt;Download as SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download as PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download as JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download as PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download as TIF&lt;/u&gt;</entry>
+  <entry key="565">Reminder:</entry>
+  <entry key="566">Category:</entry>
+  <entry key="567">Repetition:</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Location:</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">End</entry>
+  <entry key="572">Title:</entry>
+  <entry key="573">Comment:</entry>
+  <entry key="574">Invite People</entry>
+  <entry key="575">Daily</entry>
+  <entry key="576">Monthly</entry>
+  <entry key="577">Yearly</entry>
+  <entry key="578">Appointment-end is after of appointment-start!</entry>
+  <entry key="579">Please insert a title!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Activate this if you write in a right to left language (inverse word order)</entry>
+  <entry key="582">Dashboard</entry>
+  <entry key="583">Watch recorded Meetings or Events</entry>
+  <entry key="584">Meeting - Make a conference with 4 (up to 16) Users&lt;br/&gt;everybody will have audio + video access</entry>
+  <entry key="585">Event - Make a conference with up to 200 participents&lt;br/&gt;Only the Moderator will have audio/video</entry>
+  <entry key="586">Create users, rooms, organizations&lt;br/&gt; + change configuration</entry>
+  <entry key="587">Users in this Room now</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Loading Document. Please wait untill all Client have been synchronized.</entry>
+  <entry key="592">Upload complete, converting Document ...</entry>
+  <entry key="593">Start Upload</entry>
+  <entry key="594">Upload and Import Dialog. Please select a File from your Disk.</entry>
+  <entry key="595">Cancel</entry>
+  <entry key="596">Select File</entry>
+  <entry key="597">Connections</entry>
+  <entry key="598">Value</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connected since</entry>
+  <entry key="602">Room / Scope</entry>
+  <entry key="603">Kick User</entry>
+  <entry key="604">Kick User</entry>
+  <entry key="605">Do you really want to kick this Client from the Connection?&lt;br/&gt; This does only remove the Client from the current Room.The Client could re-login again.</entry>
+  <entry key="606">Your session has been closed by an Administrator or Moderator.</entry>
+  <entry key="607">Telefon</entry>
+  <entry key="608">User is the Moderator of this Room</entry>
+  <entry key="609">User is allowed to draw on the Whiteboard</entry>
+  <entry key="610">(Re) Start Audio/Video or change Device Settings</entry>
+  <entry key="611">Allow this User to draw on the Whiteboard</entry>
+  <entry key="612">Remove ability to draw on whiteboard</entry>
+  <entry key="613">Users</entry>
+  <entry key="614">Files</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Your account is assigned to multiple Organizations. Please choose one for this Session.</entry>
+  <entry key="618">This room is full at the moment. Please try again later.</entry>
+  <entry key="619">Room Type</entry>
+  <entry key="620">Appointment Room</entry>
+  <entry key="621">Server Time</entry>
+  <entry key="622">{0} - Reminder</entry>
+  <entry key="623">Message from User:</entry>
+  <entry key="624">Message:</entry>
+  <entry key="625">Click this link to participate in the Meetings:</entry>
+  <entry key="626">Click here to enter room</entry>
+  <entry key="627">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="628">search intern</entry>
+  <entry key="629">extern users</entry>
+  <entry key="630">pre name</entry>
+  <entry key="631">name</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirm logout</entry>
+  <entry key="634">Are you sure you want to logout now?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Demo Room</entry>
+  <entry key="637">Demo Time</entry>
+  <entry key="638">Meeting Timer</entry>
+  <entry key="639">This Room is a Demo Room. To disable this warning you either should get a private meeting room for your personal usage or set up an own Server. You will be automatically logged off in:</entry>
+  <entry key="640">Moderated</entry>
+  <entry key="641">Please wait untill the Moderator has entered the Room. The Moderator can be either a Teacher, Admin or the creator of this Room.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Incoming Screen Sharing</entry>
+  <entry key="644">There is a new Screen Sharing incoming from the User:</entry>
+  <entry key="645">Start Sharing</entry>
+  <entry key="646">Add new Meeting</entry>
+  <entry key="647">Meeting Room</entry>
+  <entry key="648">Event Room</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderate Users</entry>
+  <entry key="651">Moderate Rooms</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Do you want to change this User to become a Moderator of that Organization?</entry>
+  <entry key="654">Please choose an Organization before you try to add a User to it!</entry>
+  <entry key="655">Organization - Moderator</entry>
+  <entry key="656">Do you really want to delete this User from the Organization?</entry>
+  <entry key="657">This User is Moderator</entry>
+  <entry key="658">This User is No-Moderator</entry>
+  <entry key="659">Do you want this User to be not a Moderator of this Organization?</entry>
+  <entry key="660">Add or delete Users or Rooms within your Organization</entry>
+  <entry key="661">Do you really want to delete this record?</entry>
+  <entry key="662">Do you really want to delete this user from your organization? You will only delete the connection between the user and your organization, to really delete the user itself you have to login into the Administration-Panel.</entry>
+  <entry key="663">You cannot delete your own User!</entry>
+  <entry key="664">This Method needs a Adminstration Account to be invoked!</entry>
+  <entry key="665">There was no Session associated with this ID.</entry>
+  <entry key="666">This is an Administrator or Moderator account. You can only edit this account through the Administration Panel.</entry>
+  <entry key="667">To complete your registration please click on the following link. Or copy the URL to your browser bar.</entry>
+  <entry key="668">Click to verify your E-Mail</entry>
+  <entry key="669">No user was found for this Hash.</entry>
+  <entry key="670">This user is already activated!</entry>
+  <entry key="671">You did successfully activate your account!</entry>
+  <entry key="672">Login Now</entry>
+  <entry key="673">Your account is not activated. First use the link in the Email you've received during registration.</entry>
+  <entry key="674">You successfully signed up. We've send an EMail with a verification Code to your Mail. Please check your Inbox.</entry>
+  <entry key="675">Remove Moderation Role from this User</entry>
+  <entry key="676">Grant Moderation Rights to this User</entry>
+  <entry key="677">User</entry>
+  <entry key="678">Access to whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Please choose any User on the List to grant him access to the Whiteboard, Moderation or Video.</entry>
+  <entry key="681">This User is already Moderator, so he has automatically the right to draw.</entry>
+  <entry key="682">This is you! You cannot remove the Moderation rights from yourself.</entry>
+  <entry key="683">Allow this User to Publish his Audio / Video</entry>
+  <entry key="684">Remove Audio/Video of this User</entry>
+  <entry key="685">I would like to get the moderation of this room</entry>
+  <entry key="686">I would like to draw on whiteboard</entry>
+  <entry key="687">I would like to share my Audio/Video</entry>
+  <entry key="688">You are moderator of this room</entry>
+  <entry key="689">You are allowed to draw on whiteboard</entry>
+  <entry key="690">You are allowed to share your Audio/Video</entry>
+  <entry key="691">Message to Moderator</entry>
+  <entry key="692">The User</entry>
+  <entry key="693">would like to get the Moderation. Use the status Icons next to the user in the List of Users to add or remove the Moderation.</entry>
+  <entry key="694">would like to draw on whiteboard. Use the status Icons next to the user in the List of Users to add or remove the right to draw anything on the whiteboard.</entry>
+  <entry key="695">would like to share his Audio/Video. Use the status Icons next to the user in the List of Users to add or remove the right to share Audio/Video for any User.</entry>
+  <entry key="696">You have to wait untill a Moderator enters the room.</entry>
+  <entry key="697">Cancel</entry>
+  <entry key="698">Save</entry>
+  <entry key="699">Day</entry>
+  <entry key="700">Month</entry>
+  <entry key="701">Year</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_fi.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
new file mode 100644
index 0000000..43be712
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_fi.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Konferenssi</entry>
+  <entry key="2">Kokous</entry>
+  <entry key="3">Tapahtumat</entry>
+  <entry key="4">Asetukset</entry>
+  <entry key="5">Profiili</entry>
+  <entry key="6">Ylläpito</entry>
+  <entry key="7">Pysäytä</entry>
+  <entry key="8">Nauhoita</entry>
+  <entry key="9">Ei tiedostoa saatavilla</entry>
+  <entry key="10">Opettajan nauhoitus</entry>
+  <entry key="11">Aktiiviset käyttäjät:</entry>
+  <entry key="12">Aloita konferenssi</entry>
+  <entry key="13">Oma nimi</entry>
+  <entry key="14">Videokonferenssi</entry>
+  <entry key="15">Lähetä tiedosto</entry>
+  <entry key="16">Päivitä lista</entry>
+  <entry key="17">Päätiedostoon</entry>
+  <entry key="18">uusi kysely</entry>
+  <entry key="19">Uusi kysely konferenssiin.</entry>
+  <entry key="20">Kysymys:</entry>
+  <entry key="21">Kyselyn tyyppi:</entry>
+  <entry key="22">Luo</entry>
+  <entry key="23">Tiedoksi: Jokainen paikalla oleva käyttäjä vastaanottaa viestin kyselystä.</entry>
+  <entry key="24">Luo kysely</entry>
+  <entry key="25">Peruuta</entry>
+  <entry key="26">Kyllä/Ei</entry>
+  <entry key="27">Numeerinen 1-10</entry>
+  <entry key="28">Kysely</entry>
+  <entry key="29">Sinun täytyy olla moderaattori luodaksesi kysymyksen.</entry>
+  <entry key="30">Äänesi on rekisteröity.</entry>
+  <entry key="31">Olet jo äänestänyt tässä kysymyksessä.</entry>
+  <entry key="32">Äänestä!</entry>
+  <entry key="33">Vastauksesi:</entry>
+  <entry key="34">Kyllä</entry>
+  <entry key="35">Ei</entry>
+  <entry key="36">haluaa tietää:</entry>
+  <entry key="37">Kyselyn tulokset</entry>
+  <entry key="38">Kysymys:</entry>
+  <entry key="39">Tulokset:</entry>
+  <entry key="40">Vastaukset:</entry>
+  <entry key="41">Kyselyitä ei ole aloitettu.</entry>
+  <entry key="42">Äänestä!</entry>
+  <entry key="43">Kokous (enintään 4 osanottajaa)</entry>
+  <entry key="44">Konferenssi (enintään 50 osanottajaa)</entry>
+  <entry key="45">Tyyppi</entry>
+  <entry key="46">Vapaita paikkoja</entry>
+  <entry key="47">On jo valittu</entry>
+  <entry key="48">astu sisään</entry>
+  <entry key="49">Moderaattori on lähtenyt kokouksesta.</entry>
+  <entry key="50">Järjestelmän viesti</entry>
+  <entry key="51">Valitse laite</entry>
+  <entry key="52">Valitse web-kamera:</entry>
+  <entry key="53">Valitse mikrofoni:</entry>
+  <entry key="54">ok</entry>
+  <entry key="55">peruuta</entry>
+  <entry key="56">Sinun täytyy yhdistä uudelleen.</entry>
+  <entry key="57">Muokkaa asetuksia.</entry>
+  <entry key="58">Kurssi:</entry>
+  <entry key="59">Kieli:</entry>
+  <entry key="60">ok</entry>
+  <entry key="61">peruuta</entry>
+  <entry key="62">Tyhjää kirjoitustaulu</entry>
+  <entry key="63">Haluatko tyhjentää kirjoitustaulun ennen uuden kuvan lisäämistä?</entry>
+  <entry key="64">Älä kysy uudestaan</entry>
+  <entry key="65">ei</entry>
+  <entry key="66">Muokkaa asetuksia</entry>
+  <entry key="67">Kysy varmistus ennen kirjoitustaulun tyhjäystä.</entry>
+  <entry key="68">Käyttäjätiedot</entry>
+  <entry key="69">Tyhjää piirtoalue</entry>
+  <entry key="70">Peru</entry>
+  <entry key="71">Tee uudestaan</entry>
+  <entry key="72">Valitse objekti</entry>
+  <entry key="73">Teksti</entry>
+  <entry key="74">Piirrä</entry>
+  <entry key="75">Piirrä viiva</entry>
+  <entry key="76">Alleviivaa</entry>
+  <entry key="77">Suorakaide</entry>
+  <entry key="78">Ellipsi</entry>
+  <entry key="79">Nuoli</entry>
+  <entry key="80">poista valittu kohde</entry>
+  <entry key="81">Pyydä moderaattorin oikeutta</entry>
+  <entry key="82">aseta</entry>
+  <entry key="83">peruuta</entry>
+  <entry key="84">Muutu moderaattoriksi</entry>
+  <entry key="85">sulje</entry>
+  <entry key="86">kursivointi</entry>
+  <entry key="87">lihavointi</entry>
+  <entry key="88">ODOTTAA</entry>
+  <entry key="89">Käyttäjä hakee moderaattorin oikeutta:</entry>
+  <entry key="90">hyväksy</entry>
+  <entry key="91">hylkää</entry>
+  <entry key="92">peruuta</entry>
+  <entry key="93">Sending request to following Users</entry>
+  <entry key="94">Hyväksytty</entry>
+  <entry key="95">Hylätty</entry>
+  <entry key="96">Vaihda moderaattoria</entry>
+  <entry key="97">Et ole tämän kurssin moderaattori!</entry>
+  <entry key="98">Moderaattori:</entry>
+  <entry key="99">Tämä huone on täynnä. Yritä myöhemmin uudestaan.</entry>
+  <entry key="100">Ellipsi</entry>
+  <entry key="101">sulje</entry>
+  <entry key="102">syötevirhe</entry>
+  <entry key="103">vähintään 4 merkkiä; isoilla kirjaimilla on merkitystä!</entry>
+  <entry key="104">salasanan täytyy olla vähintään 4 merkkiä pitkä</entry>
+  <entry key="105">Tunnus on jo varattu</entry>
+  <entry key="106">Sähköpostiosoite on jo rekisteröity</entry>
+  <entry key="107">Järjestelmävirhe, ota yhteyttä ylläpitoon</entry>
+  <entry key="108">Kirjautuminen</entry>
+  <entry key="109">Käyttäjä:</entry>
+  <entry key="110">Salasana:</entry>
+  <entry key="111">Kieli</entry>
+  <entry key="112">Kirjaudu</entry>
+  <entry key="113">Rekisteröinti</entry>
+  <entry key="114">Käyttäjätunnus:</entry>
+  <entry key="115">Salasana:</entry>
+  <entry key="116">Uudestaan:</entry>
+  <entry key="117">Etunimi:</entry>
+  <entry key="118">Sukunimi:</entry>
+  <entry key="119">Sähköposti:</entry>
+  <entry key="120">Maa:</entry>
+  <entry key="121">Rekisteröidy</entry>
+  <entry key="122">Peruuta</entry>
+  <entry key="123">Etkö ole jäsen?</entry>
+  <entry key="124">Koti</entry>
+  <entry key="125">Users</entry>
+  <entry key="126">Ryhmät</entry>
+  <entry key="127">Organisaatiot</entry>
+  <entry key="128">Kokoushuoneet</entry>
+  <entry key="129">julkinen</entry>
+  <entry key="130">Organisaatio</entry>
+  <entry key="131">astu sisään</entry>
+  <entry key="132">Tunnus</entry>
+  <entry key="133">Salasana</entry>
+  <entry key="134">Uudestaan</entry>
+  <entry key="135">Etunimi</entry>
+  <entry key="136">Sukunimi</entry>
+  <entry key="137">Sähköposti</entry>
+  <entry key="138">Synnyinaika</entry>
+  <entry key="139">Katuosoite</entry>
+  <entry key="140">Postinumero/Toimipaikka</entry>
+  <entry key="141">Maa</entry>
+  <entry key="142">Osoitteen lisätieto</entry>
+  <entry key="143">Käyttäjätieto</entry>
+  <entry key="144">tallenna</entry>
+  <entry key="145">Tallenna</entry>
+  <entry key="146">USER-ID</entry>
+  <entry key="147">Tunnus</entry>
+  <entry key="148">Etunimi</entry>
+  <entry key="149">Sukunimi</entry>
+  <entry key="150">näytä seuraava</entry>
+  <entry key="151">näytä edellinen</entry>
+  <entry key="152">poista tietue</entry>
+  <entry key="153">peruuta</entry>
+  <entry key="154">poista</entry>
+  <entry key="155">uusi tietue</entry>
+  <entry key="156">päivitä tietue</entry>
+  <entry key="157">poista tietue</entry>
+  <entry key="158">tila</entry>
+  <entry key="159">pois käytöstä</entry>
+  <entry key="160">käytössä</entry>
+  <entry key="161">Organisaatiot</entry>
+  <entry key="162">kalenteri</entry>
+  <entry key="163">sulje</entry>
+  <entry key="164">Organisaatio-ID</entry>
+  <entry key="165">Nimi</entry>
+  <entry key="166">Käyttäjä</entry>
+  <entry key="167">Moderaattori</entry>
+  <entry key="168">Ylläpitäjä</entry>
+  <entry key="169">käyttäjätaso</entry>
+  <entry key="170">Organisaatio</entry>
+  <entry key="171">nimi</entry>
+  <entry key="172">uusi organisaatio</entry>
+  <entry key="173">uusi organisaatio</entry>
+  <entry key="174">peruuta</entry>
+  <entry key="175">lisää</entry>
+  <entry key="176">poista organisaatio</entry>
+  <entry key="177">käyttäjä</entry>
+  <entry key="178">uusi käyttäjä</entry>
+  <entry key="179">poista käyttäjä</entry>
+  <entry key="180">uusi käyttäjä</entry>
+  <entry key="181">etsi käyttäjää</entry>
+  <entry key="182">haku</entry>
+  <entry key="183">käyttäjä</entry>
+  <entry key="184">Organisaatio</entry>
+  <entry key="185">hyväksy</entry>
+  <entry key="186">Konferenssihuoneet</entry>
+  <entry key="187">Konferenssihuoneet</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Nimi</entry>
+  <entry key="190">julkinen</entry>
+  <entry key="191">Organisaatiot</entry>
+  <entry key="192">Kokoushuoneet</entry>
+  <entry key="193">Nimi</entry>
+  <entry key="194">Tyyppi</entry>
+  <entry key="195">Julkinen</entry>
+  <entry key="196">Kommentti</entry>
+  <entry key="197">tallenna ja vie</entry>
+  <entry key="198">lataa</entry>
+  <entry key="199">tallenna nimellä</entry>
+  <entry key="200">Tiedostonimi</entry>
+  <entry key="201">tiedostonimi</entry>
+  <entry key="202">peruuta</entry>
+  <entry key="203">tallenna</entry>
+  <entry key="204">Virhe</entry>
+  <entry key="205">ladataan</entry>
+  <entry key="206">objektia ladattu</entry>
+  <entry key="207">synkronisoidaan, odottavat asiakkaat:</entry>
+  <entry key="208">Ladataan kuvadataa</entry>
+  <entry key="209">synkronisoidaan, odottavat asiakkaat:</entry>
+  <entry key="210">tyhjää piirtoalue</entry>
+  <entry key="211">tyhjää piirtoalue, koko piirtoalue tyhjennetään</entry>
+  <entry key="212">Varmista ennen tiedoston lataamista</entry>
+  <entry key="213">Lähetä kutsu</entry>
+  <entry key="214">Lähetä kutsu</entry>
+  <entry key="215">Aihe</entry>
+  <entry key="216">Vastaanottaja</entry>
+  <entry key="217">Viesti</entry>
+  <entry key="218">Lähetä</entry>
+  <entry key="219">peruuta</entry>
+  <entry key="220">lähetä</entry>
+  <entry key="221">Käyttäjätieto</entry>
+  <entry key="222">Lempinimesi tähän konferenssiin</entry>
+  <entry key="223">Lempinimi</entry>
+  <entry key="224">Etunimi</entry>
+  <entry key="225">Sukunimi</entry>
+  <entry key="226">Sähköposti</entry>
+  <entry key="227">Kieli</entry>
+  <entry key="228">lisää</entry>
+  <entry key="229">Ladataan</entry>
+  <entry key="230">Ladataan, ole hyvä ja odota!</entry>
+  <entry key="231">Väärä salasana</entry>
+  <entry key="232">Anna kaksi samaa salasanaa joissa vähintään 6 merkkiä</entry>
+  <entry key="233">Epäkelpo sähköposti</entry>
+  <entry key="234">Annoit epäkelvon sähköpostiosoitteen</entry>
+  <entry key="235">Rekisteröinti onnistui</entry>
+  <entry key="236">Tilisi on luotu, voit kirjautua sisään.</entry>
+  <entry key="237">Et voi jakaa ruutua tällä hetkellä, koska joku muu jakaa jo omaa ruutuaan.</entry>
+  <entry key="238">Jakaminen kielletty</entry>
+  <entry key="239">Jaa ruutusi</entry>
+  <entry key="240">Kaistanleveys ei riitä: Et pysty synkronisoimaan ruutua. Ruudunpäivityksiä saattaa jäädä pois. Jos tämä ilmoitus toistuu usein, voit pyytää moderaattoria pienentämään kuvan laatua.</entry>
+  <entry key="241">Käyttäjän ruutu:</entry>
+  <entry key="242">Maalaa</entry>
+  <entry key="243">Dokumentti</entry>
+  <entry key="244">Keskustelu</entry>
+  <entry key="245">Tiedostot</entry>
+  <entry key="246">Jäsenet</entry>
+  <entry key="247">Lataa alkuperäinen dokumentti</entry>
+  <entry key="248">Lataa pdf-dokumentti</entry>
+  <entry key="249">Lataa esitys piirtoalueelle</entry>
+  <entry key="250">Asetukset</entry>
+  <entry key="251">Raaha tätä objektia</entry>
+  <entry key="252">Muuta objektin kokoa</entry>
+  <entry key="253">%</entry>
+  <entry key="254">of</entry>
+  <entry key="255">Mene ensimmäiselle sivulle</entry>
+  <entry key="256">Mene edelliselle sivulle</entry>
+  <entry key="257">Mene seuraavalle sivulle</entry>
+  <entry key="258">Mene viimeiselle sivulle</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">Herra</entry>
+  <entry key="262">Rouva</entry>
+  <entry key="263">Asetukset</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Avain</entry>
+  <entry key="266">Asetukset</entry>
+  <entry key="267">Avain</entry>
+  <entry key="268">edellinen päivitys</entry>
+  <entry key="269">päivityksen tekijä</entry>
+  <entry key="270">kommentti</entry>
+  <entry key="271">Arvo</entry>
+  <entry key="272">/</entry>
+  <entry key="273">Käyttäjät</entry>
+  <entry key="274">poista käyttäjä organisaatiosta</entry>
+  <entry key="275">poista</entry>
+  <entry key="276">Käyttäjä on jo tämän organisaation jäsen.</entry>
+  <entry key="277">Uutiset</entry>
+  <entry key="278">Pikalinkit</entry>
+  <entry key="279">Mene konferenssiin</entry>
+  <entry key="280">Mene auditorioon</entry>
+  <entry key="281">Apua ja tukea</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Ilmoita bugi!</entry>
+  <entry key="285">lisää</entry>
+  <entry key="286">Projektin web-sivut (http://openmeetings.apache.org)</entry>
+  <entry key="287">Käyttäjien postituslista (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Muista kirjautuminen</entry>
+  <entry key="289">Sisältö</entry>
+  <entry key="290">Oma sivu</entry>
+  <entry key="291">Tulevat kokoukset</entry>
+  <entry key="292">Omat tulevat kokoukset</entry>
+  <entry key="293">Julkiset kokoukset</entry>
+  <entry key="294">Yksityiset kokoukset</entry>
+  <entry key="295">Julkiset tapahtumat</entry>
+  <entry key="296">Yksityiset tapahtumat</entry>
+  <entry key="297">Julkinen sisältö</entry>
+  <entry key="298">Yksityinen sisältö</entry>
+  <entry key="299">Henkilökohtainen sisältö</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderointi</entry>
+  <entry key="302">Hae moderointioikeutta</entry>
+  <entry key="303">Kyselyt</entry>
+  <entry key="304">Valitse tiedosto</entry>
+  <entry key="305">Asetukset</entry>
+  <entry key="306">Kamera ja mikrofoni</entry>
+  <entry key="307">Piirtoalueen asetukset</entry>
+  <entry key="308">Poistu</entry>
+  <entry key="309">Takaisin huoneisiin</entry>
+  <entry key="310">Poistu</entry>
+  <entry key="311">Unohditko salasanasi?</entry>
+  <entry key="312">Nollaa salasana</entry>
+  <entry key="313">Sähköpostilla</entry>
+  <entry key="314">Käyttäjätunnuksella</entry>
+  <entry key="315">Sähköpostisi</entry>
+  <entry key="316">Tunnuksesi</entry>
+  <entry key="317">Lähetä sähköposti nollauslinkillä</entry>
+  <entry key="318">Sähköpostiosoitetta ei löytynyt. Varmista että annoit saman osoitteen kuin mitä käytit rekisteröityessäsi.</entry>
+  <entry key="319">Anna sähköpostiosoite tai käyttäjätunnus</entry>
+  <entry key="320">Käyttäjätunnusta ei ole</entry>
+  <entry key="321">Linkin sisältävä sähköposti on lähetetty osoitteeseesi, ole hyvä ja tarkista sähköpostisi. Jos et ole vielä vastaanottanut viestiä, tarkista roskapostiasetuksesi ja yritä uudestaan.</entry>
+  <entry key="322">Virhe</entry>
+  <entry key="323">Viesti</entry>
+  <entry key="324">Epäkelpo hash. Käyttäjää ei löydy.</entry>
+  <entry key="325">Nollaa salasanasi</entry>
+  <entry key="326">Kirjaudu</entry>
+  <entry key="327">vaihda salasana</entry>
+  <entry key="328">uusi salasana</entry>
+  <entry key="329">salasana uudestaan</entry>
+  <entry key="330">Antamasi salasanat eivät täsmänneet.</entry>
+  <entry key="331">4 merkkiä tai pidempi; isoilla kirjaimilla on merkitystä!</entry>
+  <entry key="332">Salasana asetettu. Voit nyt kirjautua sisään.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Tuntematon virhe. Ole hyvä ja ilmoita virheestä tukitiimillesi.</entry>
+  <entry key="335">Käyttäjää ei löydy</entry>
+  <entry key="336">Epäkelpo salasana</entry>
+  <entry key="337">Uloskirjautuminen onnistui</entry>
+  <entry key="338">Rekisteröinti on poissa käytöstä.</entry>
+  <entry key="339">Epäkelpo sähköposti</entry>
+  <entry key="340">saman niminen tiedosto on jo olemassa, valitse toinen nimi</entry>
+  <entry key="341">tiedostonimi liian lyhyt</entry>
+  <entry key="342">Ei voitu tallentaa osoitetta</entry>
+  <entry key="343">Käyttäjä lisätty, mutta sinun täytyy lisätä tämä käyttäjä johonkin organisaatioon jotta hän voi kirjautua sisään.</entry>
+  <entry key="344">Uusi tietue</entry>
+  <entry key="345">Kenttää ei löytynyt kentän id:llä.</entry>
+  <entry key="346">Kentälle ei löydy kuvausta.</entry>
+  <entry key="347">Ylläpitäjän oikeudet tarvitaan.</entry>
+  <entry key="348">Kielien muokkaus</entry>
+  <entry key="349">Kieli</entry>
+  <entry key="350">Nimi-ID</entry>
+  <entry key="351">Kuvaus-Nimi</entry>
+  <entry key="352">Arvo</entry>
+  <entry key="353">Kentän arvot</entry>
+  <entry key="354">Kuvaus</entry>
+  <entry key="355">Arvo</entry>
+  <entry key="356">Kuvaus-ID</entry>
+  <entry key="357">Poistit pelkän kuvauksen etkä kenttää! Et voi poistaa kenttää, sillä voi olla kuvauksia muilla kielillä.</entry>
+  <entry key="358">Epäkelpo kuvaus-ID. Kenttää FieldLanguagesvalues_Id ei löydy tietokannasta.</entry>
+  <entry key="359">Et voi poistaa tätä kenttää. Voit ainostaa poistaa kuvauksia, et kenttiä. Kuvausta ei ole ladattuna nyt, joko sitä ei ole valittuna mistään kentästä tai tälle kielelle ei ole määritelty kuvauksen mukaista kenttää.</entry>
+  <entry key="360">vie</entry>
+  <entry key="361">Sinun täytyy kirjaudua uudestaan nähdäksesi muutokset.</entry>
+  <entry key="362">Lisää kieli</entry>
+  <entry key="363">poista kieli</entry>
+  <entry key="364">Lisää kieli</entry>
+  <entry key="365">Nimi</entry>
+  <entry key="366">lisää kieli</entry>
+  <entry key="367">Varmuuskopiointi</entry>
+  <entry key="368">mene alkuun</entry>
+  <entry key="369">edellinen</entry>
+  <entry key="370">seuraava</entry>
+  <entry key="371">viimeinen</entry>
+  <entry key="372">käyttäjä puhuu (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">ääni päälle/pois</entry>
+  <entry key="374">Järjestelmä</entry>
+  <entry key="375">Asetuksesi</entry>
+  <entry key="376">hei,</entry>
+  <entry key="377">Muokkaa profiiliasi</entry>
+  <entry key="378">Uudet viestit:</entry>
+  <entry key="379">Lataa uusi kuva</entry>
+  <entry key="380">Käyttäjädata - Vie</entry>
+  <entry key="381">Organisaatioiden täytyy olla jo olemassa!</entry>
+  <entry key="382">aloita vienti</entry>
+  <entry key="383">Organisaation mukaan</entry>
+  <entry key="384">aloita vienti</entry>
+  <entry key="385">Käyttäjädata - Tuo</entry>
+  <entry key="386">valitse users.xml</entry>
+  <entry key="387">tuo</entry>
+  <entry key="388">Vie XML-tiedostoksi - Näitä tiedostoja voidaan käyttää: Projektiin osallistuminen - Toiseen järjestelmään vienti - Varmuuskopiointi - Mukautus - Laita se hakemistoon language seuraavaa asennustasi varten.</entry>
+  <entry key="389">Valitse kielitiedosto tuotavaksi. Valitse oikea kieli valintalistalta! Tämä määrää asetettavan kielen tiedoston nimestä riippumatta!</entry>
+  <entry key="390">tuonti - valitse tiedosto</entry>
+  <entry key="391">Tallenna nimellä</entry>
+  <entry key="392">Nimi:</entry>
+  <entry key="393">Kommentti:</entry>
+  <entry key="394">tallenna</entry>
+  <entry key="395">Nauhoitukset</entry>
+  <entry key="396">Nauhoitusten katselu</entry>
+  <entry key="397">Julkisten ja yksityisten huoneiden nauhoitukset</entry>
+  <entry key="398">Käyttäjät :</entry>
+  <entry key="399">Liittynyt:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Käyttäjiä huoneessa:</entry>
+  <entry key="402">päivitä</entry>
+  <entry key="403">Tämä huone on täynnä. Yritä uudestaan muutaman minuutin kuluttua.</entry>
+  <entry key="404">klikkaa huonetta saadaksesi lisätietoja</entry>
+  <entry key="405">Keskustele tämän huoneen käyttäjien kanssa:</entry>
+  <entry key="406">Huone:</entry>
+  <entry key="407">Käyttäjät huoneessa:</entry>
+  <entry key="408">since:</entry>
+  <entry key="409">toista nauhoitus</entry>
+  <entry key="410">Pituus:</entry>
+  <entry key="411">Päivämäärä:</entry>
+  <entry key="412">Nauhoitustila! Et voi muuttaa arvoja, tämä on nauhoitettu tiedosto!</entry>
+  <entry key="413">Toista nauhoitus</entry>
+  <entry key="414">Toista / Keskeytä</entry>
+  <entry key="415">Aloita nauhoitus</entry>
+  <entry key="416">pysäytä nauhoitus</entry>
+  <entry key="417">Nauhoittaa:</entry>
+  <entry key="418">Joku on jo nauhoittamassa tällä hetkellä:</entry>
+  <entry key="419">Nauhoitetaan! Käyttäjä:</entry>
+  <entry key="420">peruuta</entry>
+  <entry key="421">Nauhoitus peruutetaan ja sitä ei tallenneta.</entry>
+  <entry key="422">palaa</entry>
+  <entry key="423">Sulje ikkuna ja jatka nauhoitusta</entry>
+  <entry key="424">muuta viivan väriä</entry>
+  <entry key="425">Valitse väri</entry>
+  <entry key="426">Viivan väri päälle/pois</entry>
+  <entry key="427">muuta täytön väriä</entry>
+  <entry key="428">täyttöväri päälle/pois</entry>
+  <entry key="429">Muuta viivan leveyttä</entry>
+  <entry key="430">sulje</entry>
+  <entry key="431">muuta fontin kokoa</entry>
+  <entry key="432">Poista nauhoitus</entry>
+  <entry key="433">Vieras</entry>
+  <entry key="434">Tehnyt:</entry>
+  <entry key="435">Nimi</entry>
+  <entry key="436">Huone</entry>
+  <entry key="437">Aika</entry>
+  <entry key="438">peruuta</entry>
+  <entry key="439">aloita</entry>
+  <entry key="440">Nimi</entry>
+  <entry key="441">Päivämäärä</entry>
+  <entry key="442">Poista palvelimen keskusteluloki</entry>
+  <entry key="443">Keskustelu</entry>
+  <entry key="444">lähetä viesti</entry>
+  <entry key="445">Hymiöt</entry>
+  <entry key="446">Hymiöt</entry>
+  <entry key="447">Valitse julkaistavat laitteet</entry>
+  <entry key="448">Ääni ja video</entry>
+  <entry key="449">Vain ääni</entry>
+  <entry key="450">Vain video</entry>
+  <entry key="451">Ei ääntä/videota (kiinteä kuva)</entry>
+  <entry key="452">Ääntä/kuvaa tietokoneelta ei julkaista. Profiilikuvasi näytetään sen sijaan. Valitse tämä asetus jos sinulla on ongelmia yhteytesi kanssa tai yhteytesi on erittäin hidas.</entry>
+  <entry key="453">MA</entry>
+  <entry key="454">TI</entry>
+  <entry key="455">KE</entry>
+  <entry key="456">TO</entry>
+  <entry key="457">PE</entry>
+  <entry key="458">LA</entry>
+  <entry key="459">SU</entry>
+  <entry key="460">Maanantai</entry>
+  <entry key="461">Tiistai</entry>
+  <entry key="462">Keskiviikko</entry>
+  <entry key="463">Torstai</entry>
+  <entry key="464">Perjantai</entry>
+  <entry key="465">Lauantai</entry>
+  <entry key="466">Sunnuntai</entry>
+  <entry key="467">KV</entry>
+  <entry key="468">Kalenteriviikko</entry>
+  <entry key="469">Tammikuu</entry>
+  <entry key="470">Helmikuu</entry>
+  <entry key="471">Maaliskuu</entry>
+  <entry key="472">Huhtikuu</entry>
+  <entry key="473">Toukokuu</entry>
+  <entry key="474">Kesäkuu</entry>
+  <entry key="475">Heinäkuu</entry>
+  <entry key="476">Elokuu</entry>
+  <entry key="477">Syyskuu</entry>
+  <entry key="478">Lokakuu</entry>
+  <entry key="479">Marraskuu</entry>
+  <entry key="480">Joulukuu</entry>
+  <entry key="481">Kalenteri</entry>
+  <entry key="482">Osanottajat</entry>
+  <entry key="483">Näytä asettelun asetukset</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Leveys | Korkeus</entry>
+  <entry key="486">Video-Säiliö</entry>
+  <entry key="487">Moderaatio-Säiliö</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Piirtoalue-Säiliö</entry>
+  <entry key="490">Päällä</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Leveys | Korkeus</entry>
+  <entry key="493">Tiedostot,Keskustelu,Osanottajat - Säiliö</entry>
+  <entry key="494">Päällä</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Leveys | Korkeus</entry>
+  <entry key="497">Moderaattori on lähtenyt huoneesta, kukaan ei ole esittäjänä tällä hetkellä. Voit hakea moderaattorin oikeuksia tai odottaa.</entry>
+  <entry key="498">Tässä huoneessa on muutama osanottaja mutta ei moderaattoria. Voit hakea moderaattorin oikeuksia tai odottaa.</entry>
+  <entry key="499">{0} palaute</entry>
+  <entry key="500">{0} - Kutsu</entry>
+  <entry key="501">Viesti käyttäjältä:</entry>
+  <entry key="502">Viesti:</entry>
+  <entry key="503">Käytä tätä linkkiä ottaaksesi osaa kokoukseen:</entry>
+  <entry key="504">Klikkaa tästä liittyäksesi huoneeseen</entry>
+  <entry key="505">jos linkin kanssa on ongelmia, ole hyvä ja kopioi se selaimesi osoiteriville:</entry>
+  <entry key="506">{0} Rekisteröinti</entry>
+  <entry key="507">Käyttäjätietosi:</entry>
+  <entry key="508">Tunnus:</entry>
+  <entry key="509">Salasana:</entry>
+  <entry key="510">Sähköposti:</entry>
+  <entry key="511">{0}-Tiimi</entry>
+  <entry key="512">{0} Rekisteröinti</entry>
+  <entry key="513">{0} - Salasanan nollaus</entry>
+  <entry key="514">Käytä tätä linkkiä syöttääksesi uuden salasanan:</entry>
+  <entry key="515">Klikkaa tästä syöttääksesi uuden salasanan</entry>
+  <entry key="516">jos linkin kanssa on ongelmia, ole hyvä ja kopioi se selaimesi osoiteriville:</entry>
+  <entry key="517">{0} Salasanan nollaus</entry>
+  <entry key="518">Anna päivämäärä muodossa pp.kk.vvvv (esim. 24.12.2009)</entry>
+  <entry key="519">Anna toimiva sähköpostiosoite, muodossa nimi@mail.com</entry>
+  <entry key="520">Anna liukuluku, esim. 1.00</entry>
+  <entry key="521">Anna kokonaisluku, esim. 100</entry>
+  <entry key="522">Anna puhelinnumero, esim. +358501234567</entry>
+  <entry key="523">Anna kellonaika, esim. 12:23 (tt:mm)</entry>
+  <entry key="524">Salasanasuojaus</entry>
+  <entry key="525">Salasana</entry>
+  <entry key="526">Voimassaoloaika</entry>
+  <entry key="527">Päättymätön</entry>
+  <entry key="528">Aikaväli</entry>
+  <entry key="529">Kertakäyttöinen</entry>
+  <entry key="530">Voimassa alkaen:</entry>
+  <entry key="531">Voimassa kunnes:</entry>
+  <entry key="532">Kutsu {0}iin</entry>
+  <entry key="533">Kutsua ei ole saatavilla antamallesi kutsukoodille</entry>
+  <entry key="534">Kutsu on jo käytetty. Kutsua ei voi uudelleenkäyttää.</entry>
+  <entry key="535">Kutsu ei ole kelvollinen.</entry>
+  <entry key="536">Salasana:</entry>
+  <entry key="537">Tarkista salasana</entry>
+  <entry key="538">Väärä salasana!</entry>
+  <entry key="539">Ääni_Kuva</entry>
+  <entry key="540">Synkronisoi ääni/kuva</entry>
+  <entry key="541">Kirjautuminen onnistu, mutta haluamasi istunto ei ole aktiivinen tai ei ole tallennettu palvelimelle. Sinun täytyy hankkia uusi istunto-id ja yrittää kirjautumista uudelleen.</entry>
+  <entry key="542">Istunnon id ei ole kirjautunut tai sillä ei ole ylläpitäjän oikeuksia. SOAP-yhdyskäytävä tarvitsee ylläpitokäyttäjän oikeudet lisätäkseen käyttäjiä.</entry>
+  <entry key="543">Tällä istunnolla ei ole etäkäyttäjän tietoja. Joko kutsuit SOAP-yhdyskäytävää ennen ohjelman käyttämistä tai käytät väärää istunnon id:tä</entry>
+  <entry key="544">Nauhoittaminen on vielä Beta-asteella!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-akseli</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-akseli</entry>
+  <entry key="549">l</entry>
+  <entry key="550">leveys</entry>
+  <entry key="551">k</entry>
+  <entry key="552">korkeus</entry>
+  <entry key="553">Muuta läpinäkyvyyttä</entry>
+  <entry key="554">Avaa selain</entry>
+  <entry key="555">Sulje selain</entry>
+  <entry key="556">Yhteys palvelimeen menetettiin. Sinun täytyy käynnistää sovellus uudelleen ja/tai tarkistaa verkkoyhteytesi.</entry>
+  <entry key="557">Osoitin</entry>
+  <entry key="558">Synkronisoidaan</entry>
+  <entry key="559">Synkronisoidaan käyttäjiä, ole hyvä ja odota</entry>
+  <entry key="560">&lt;u&gt;Lataa SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Lataa PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Lataa JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Lataa PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Lataa TIF&lt;/u&gt;</entry>
+  <entry key="565">Muistutus:</entry>
+  <entry key="566">Kategoria:</entry>
+  <entry key="567">Toisto:</entry>
+  <entry key="568">tyhjä</entry>
+  <entry key="569">Sijainti:</entry>
+  <entry key="570">Alku</entry>
+  <entry key="571">Loppu</entry>
+  <entry key="572">Otsikko:</entry>
+  <entry key="573">Kommentti:</entry>
+  <entry key="574">Kutsu ihmisiä</entry>
+  <entry key="575">Päivittäinen</entry>
+  <entry key="576">Kuukausittainen</entry>
+  <entry key="577">Vuosittainen</entry>
+  <entry key="578">Tapaamisen loppuaika on ennen alkuaikaa!</entry>
+  <entry key="579">Anna otsikko!</entry>
+  <entry key="580">Oikea-Vasen</entry>
+  <entry key="581">Käytä tätä jos tarvitset käänteistä sanajärjestystä (oikealta vasemmalle)</entry>
+  <entry key="582">Paneeli</entry>
+  <entry key="583">Katsele nauhoitettuja kokouksia tai tapahtumia</entry>
+  <entry key="584">Kokous - Perusta konferenssi neljälle käyttäjälle (korkeintaan 16) &lt;br/&gt;kaikilla on oikeus ääneen + kuvaan</entry>
+  <entry key="585">Tapahtuma - Luo konferenssi enintään 200 osanottajalle. &lt;br/&gt;Vain moderaattorilla on kuva ja ääni</entry>
+  <entry key="586">Luo käyttäjiä, huoneita, organisaatioita &lt;br/&gt; + muokkaa asetuksia</entry>
+  <entry key="587">Käyttäjät tällä hetkellä tässä huoneessa</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Tunnis</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Ladataan dokumenttia. Ole hyvä ja odota kunnes kaikki asiakkaat ovat synkronisoineet.</entry>
+  <entry key="592">Lähetys valmis, muunnetaan dokumenttia ...</entry>
+  <entry key="593">Aloita lähetys</entry>
+  <entry key="594">Tiedoston lähetys ja tuonti-ikkuna. Ole hyvä ja valitse tiedosto koneeltasi.</entry>
+  <entry key="595">Peruuta</entry>
+  <entry key="596">Valitse tiedosto</entry>
+  <entry key="597">Yhteydet</entry>
+  <entry key="598">Arvo</entry>
+  <entry key="599">Stream id</entry>
+  <entry key="600">Kirjaudu</entry>
+  <entry key="601">Yhdistetty alkaen</entry>
+  <entry key="602">Huone / Laajuus</entry>
+  <entry key="603">Poista käyttäjä</entry>
+  <entry key="604">Poista käyttäjä</entry>
+  <entry key="605">Haluatko varmasti katkaista tämän asiakkaan yhteyden?&lt;br/&gt; Tämä vain poistaa asiakkaan huoneesta. Asiakas voi kirjautua aina uudestaan.</entry>
+  <entry key="606">Istuntosi on lopetettu ylläpitäjän tai moderaattorin toimesta.</entry>
+  <entry key="607">Puhelin</entry>
+  <entry key="608">Käyttäjä on tämän huoneen moderaattori</entry>
+  <entry key="609">Käyttäjä voi piirtää piirtoalueelle</entry>
+  <entry key="610">(Re) Käynnistä Ääni/Kuva tai muuta laitteiden asetuksia</entry>
+  <entry key="611">Salli tämän käyttäjän piirtää piirtoalueelle</entry>
+  <entry key="612">Estä käyttäjän piirtäminen piirtoalueelle</entry>
+  <entry key="613">Käyttäjät</entry>
+  <entry key="614">Tiedostot</entry>
+  <entry key="615">Piirtoalue</entry>
+  <entry key="616">Keskustelu</entry>
+  <entry key="617">Tunnuksesi on liitetty useampaan organisaatioon. Ole hyvä ja valitse yksi tätä istuntoa varten.</entry>
+  <entry key="618">Tämä huone on täynnä. Ole hyvä ja yritä myöhemmin uudestaan.</entry>
+  <entry key="619">Huoneen tyyppi</entry>
+  <entry key="620">Tapaamishuone</entry>
+  <entry key="621">Palvelimen aika</entry>
+  <entry key="622">{0} - Muistutus</entry>
+  <entry key="623">Viesti käyttäjältä:</entry>
+  <entry key="624">Viesti:</entry>
+  <entry key="625">Klikkaa tätä linkkiä osallistuaksesi kokoukseen:</entry>
+  <entry key="626">Klikkaa tästä liittyäksesi huoneeseen</entry>
+  <entry key="627">jos linkin kanssa on ongelmia, ole hyvä ja kopioi se selaimesi osoiteriville:</entry>
+  <entry key="628">hae sisäisiä</entry>
+  <entry key="629">ulkoiset käyttäjät</entry>
+  <entry key="630">nimen etuliite</entry>
+  <entry key="631">nimi</entry>
+  <entry key="632">Sähköposti</entry>
+  <entry key="633">Varmista poistuminen</entry>
+  <entry key="634">Haluatko varmasti kirjautua ulos?</entry>
+  <entry key="635">Toiminnot</entry>
+  <entry key="636">Esittelyhuone</entry>
+  <entry key="637">Esittelyaika</entry>
+  <entry key="638">Kokousajastin</entry>
+  <entry key="639">Tämä on esittelyhuone. Poistaaksesi tämän varoituksen voit hankkia oman yksityishuoneesi tai perustaa oman palvelimen. Sinut kirjataan ulos automaattisesti hetken kuluttua:</entry>
+  <entry key="640">Moderoitu</entry>
+  <entry key="641">Ole hyvä ja odota kunnes moderaattori on liittynyt huoneeseen. Moderaattori voi olla joko opettaja, ylläpitäjä tai tämän huoneen tekijä.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Incoming Screen Sharing</entry>
+  <entry key="644">Uusi ruudun jako on tulossa käyttäjältä:</entry>
+  <entry key="645">Aloita jakaminen</entry>
+  <entry key="646">Lisää uusi kokous</entry>
+  <entry key="647">Kokoushuone</entry>
+  <entry key="648">Tapahtumahuone</entry>
+  <entry key="649">Moderointi</entry>
+  <entry key="650">Moderoi käyttäjiä</entry>
+  <entry key="651">Moderoi huoneita</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Haluatko asettaa tämän käyttäjän moderaattoriksi tälle organisaatiolle?</entry>
+  <entry key="654">Ole hyvä ja valitse organisaatio ennenkuin yrität lisätä siihen käyttäjiä!</entry>
+  <entry key="655">Organisaatio - Moderaattori</entry>
+  <entry key="656">Haluatko poistaa käyttäjän organisaatiosta?</entry>
+  <entry key="657">Tämä käyttäjä on Moderaattori</entry>
+  <entry key="658">Tämä käyttäjä ei ole moderaattori</entry>
+  <entry key="659">Haluatko että käyttäjä ei ole moderaattori tälle organisaatiolle?</entry>
+  <entry key="660">Lisää tai poista käyttäjiä tai huoneita organisaatiossasi</entry>
+  <entry key="661">Haluatko poistaa tämän tietueen?</entry>
+  <entry key="662">Haluatko todella poistaa käyttäjän organisaatiostasi? Tämä poistaa pelkästään linkin käyttäjän ja organisaation välillä, jos haluat poistaa käyttäjän niin joudut kirjautumaan ylläpitopaneeliin.</entry>
+  <entry key="663">Et voi poistaa itseäsi!</entry>
+  <entry key="664">Tämä toiminto vaatii ylläpitäjän oikeudet!</entry>
+  <entry key="665">Tälle ID-numerolle ei ole määritelty istuntoa.</entry>
+  <entry key="666">Tämä on ylläpitäjän tai moderaattorin tili. Voit muokata tiliä vain ylläpitopaneelin kautta.</entry>
+  <entry key="667">Klikkaa seuraavaa linkkiä viimeistelläksesi rekisteröintisi tai kopioi osoite selaimesi osoiteriville.</entry>
+  <entry key="668">Klikkaa varmistaaksesi sähköpostiosoitteesi</entry>
+  <entry key="669">Käyttäjää ei löytynyt annetulla tunnuksella</entry>
+  <entry key="670">Käyttäjä on jo aktivoitu!</entry>
+  <entry key="671">Käyttäjätunnuksesi aktivoitiin onnistuneesti!</entry>
+  <entry key="672">Kirjaudu nyt</entry>
+  <entry key="673">Käyttäjätunnustasi ei ole aktivoitu. Muista käyttää varmistussähköpostin mukana tullutta linkkiä ennen uutta yritystä.</entry>
+  <entry key="674">Olen rekisteröitynyt onnistuneesti. Lähetimme sinulle sähköpostin jossa on varmistuskoodi. Ole hyvä ja tarkista sähköpostilaatikkosi.</entry>
+  <entry key="675">Poista käyttäjän moderointioikeus</entry>
+  <entry key="676">Anna moderointioikeus tälle käyttäjälle</entry>
+  <entry key="677">Käyttäjä</entry>
+  <entry key="678">Käyttöoikeus piirtopöydälle</entry>
+  <entry key="679">Moderaattori</entry>
+  <entry key="680">Moderointi: Ole hyvä ja valitse käyttäjä listalta antaaksesi hänelle oikeuden piirtopöydälle, moderointiin tai videoon.</entry>
+  <entry key="681">Tämä käyttäjä on jo moderaattori, joten hänellä on aina oikeus piirtää.</entry>
+  <entry key="682">Et voi poistaa moderointioikeutta itseltäsi!</entry>
+  <entry key="683">Salli tämän käyttäjän julkaista ääntä / kuvaa</entry>
+  <entry key="684">Poista ääni/kuva tältä käyttäjältä</entry>
+  <entry key="685">Haluaisin saada moderointioikeuden tähän huoneeseen</entry>
+  <entry key="686">Haluan piirtää piirtoalueelle</entry>
+  <entry key="687">Haluan jakaa ääntä/kuvaa</entry>
+  <entry key="688">Olet tämän huoneen moderaattori</entry>
+  <entry key="689">Sinulla on oikeus piirtää piirtoalueelle</entry>
+  <entry key="690">Sinulla on oikeus jakaa ääntä/kuvaa</entry>
+  <entry key="691">Lähetä viesti moderaattorille</entry>
+  <entry key="692">Käyttäjä</entry>
+  <entry key="693">pyytää moderointioikeutta. Käytä kuvakkeita listassa käyttäjän vieressä salliaksesi tai poistaaksesi oikeuden.</entry>
+  <entry key="694">pyytää oikeutta piirtää piirtoalueelle. Käytä kuvakkeita listassa käyttäjän vieressä salliaksesi tai poistaaksesi oikeuden.</entry>
+  <entry key="695">pyytää oikeutta jakaa ääntä/kuvaa. Käytä kuvakkeita listassa käyttäjän vieressä salliaksesi tai poistaaksesi oikeuden.</entry>
+  <entry key="696">Sinun täytyy odottaa kunnes moderaattori liittyy huoneeseen.</entry>
+  <entry key="697">Peruuta</entry>
+  <entry key="698">Tallenna</entry>
+  <entry key="699">Päivä</entry>
+  <entry key="700">Kuukausi</entry>
+  <entry key="701">Vuosi</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_fr.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
new file mode 100644
index 0000000..5b572bb
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_fr.properties.xml
@@ -0,0 +1,1838 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Conférence</entry>
+  <entry key="2">Réunion</entry>
+  <entry key="3">Conférence</entry>
+  <entry key="4">Paramètres</entry>
+  <entry key="5">Profil</entry>
+  <entry key="6">Administration</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Enregistrer</entry>
+  <entry key="9">Aucun fichier disponible</entry>
+  <entry key="10">Enregistrement par le professeur</entry>
+  <entry key="11">Utilisateurs connectés :</entry>
+  <entry key="12">Commencer une conférence</entry>
+  <entry key="13">Mon nom</entry>
+  <entry key="14">Vidéoconférence</entry>
+  <entry key="15">Nouvelle présentation</entry>
+  <entry key="16">Charger à nouveau la liste</entry>
+  <entry key="17">Retour à la liste des fichiers</entry>
+  <entry key="18">Nouveau sondage</entry>
+  <entry key="19">Un nouveau sondage pour la conférence.</entry>
+  <entry key="20">Question :</entry>
+  <entry key="21">Type de sondage :</entry>
+  <entry key="22">Créer</entry>
+  <entry key="23">Info : Chaque utilisateur reçoit le nouveau sondage.</entry>
+  <entry key="24">Créer un sondage</entry>
+  <entry key="25">Annuler</entry>
+  <entry key="26">Oui/Non</entry>
+  <entry key="27">Numérique 1-10</entry>
+  <entry key="28">Sondage</entry>
+  <entry key="29">Vous devez être modérateur pour créer un sondage.</entry>
+  <entry key="30">Votre vote est enregistré.</entry>
+  <entry key="31">Vous avez déjà voté pour ce sondage.</entry>
+  <entry key="32">Voter !</entry>
+  <entry key="33">Votre réponse :</entry>
+  <entry key="34">Oui</entry>
+  <entry key="35">Non</entry>
+  <entry key="36">Question posée :</entry>
+  <entry key="37">Résultats des votes</entry>
+  <entry key="38">Question :</entry>
+  <entry key="39">Résultats :</entry>
+  <entry key="40">Réponses :</entry>
+  <entry key="41">Aucun sondage n'est en cours.</entry>
+  <entry key="42">Voter !</entry>
+  <entry key="43">Réunion (max. 4 places)</entry>
+  <entry key="44">Conférence (max. 50 places)</entry>
+  <entry key="45">Mode</entry>
+  <entry key="46">Autres places</entry>
+  <entry key="47">Déjà choisi</entry>
+  <entry key="48">Entrer</entry>
+  <entry key="49">L'animateur a quitté la réunion.</entry>
+  <entry key="50">Information du système</entry>
+  <entry key="51">Choix du périphérique</entry>
+  <entry key="52">Choix de la caméra :</entry>
+  <entry key="53">Choix du micro :</entry>
+  <entry key="54">Ok</entry>
+  <entry key="55">Annuler</entry>
+  <entry key="56">Vous devez vous reconnecter</entry>
+  <entry key="57">Edition des réglages</entry>
+  <entry key="58">Cours :</entry>
+  <entry key="59">Langue :</entry>
+  <entry key="60">Ok</entry>
+  <entry key="61">Annuler</entry>
+  <entry key="62">Nettoyer le tableau blanc</entry>
+  <entry key="63">Voulez-vous nettoyer le tableau blanc avant d'ajouter une nouvelle image ?</entry>
+  <entry key="64">Ne pas redemander</entry>
+  <entry key="65">Non</entry>
+  <entry key="66">Modifier les réglages</entry>
+  <entry key="67">Demander confirmation avant de nettoyer le tableau blanc</entry>
+  <entry key="68">Information sur l'utilisateur</entry>
+  <entry key="69">Effacer tableau blanc</entry>
+  <entry key="70">Annuler</entry>
+  <entry key="71">Refaire</entry>
+  <entry key="72">Sélectionner un objet</entry>
+  <entry key="73">Texte</entry>
+  <entry key="74">Dessiner</entry>
+  <entry key="75">Tracer une ligne</entry>
+  <entry key="76">Surligner</entry>
+  <entry key="77">Rectangle</entry>
+  <entry key="78">Ellipse</entry>
+  <entry key="79">Flèche</entry>
+  <entry key="80">Supprimer l'élément sélectionné</entry>
+  <entry key="81">Demander la modération</entry>
+  <entry key="82">Appliquer</entry>
+  <entry key="83">Annuler</entry>
+  <entry key="84">Devenir modérateur</entry>
+  <entry key="85">Fermer</entry>
+  <entry key="86">Italique</entry>
+  <entry key="87">Gras</entry>
+  <entry key="88">En attente...</entry>
+  <entry key="89">Un utilisateur souhaite devenir modérateur :</entry>
+  <entry key="90">Accepter</entry>
+  <entry key="91">Rejeter</entry>
+  <entry key="92">Annuler</entry>
+  <entry key="93">Envoi aux autres utilisateurs</entry>
+  <entry key="94">Accepté</entry>
+  <entry key="95">Rejeté</entry>
+  <entry key="96">Changer de modérateur</entry>
+  <entry key="97">Vous n'êtes pas le modérateur de ce cours !</entry>
+  <entry key="98">Modérateur :</entry>
+  <entry key="99">Cette salle est pleine. Merci de revenir plus tard.</entry>
+  <entry key="100">Ellipse</entry>
+  <entry key="101">Fermer</entry>
+  <entry key="102">Erreur de formulaire</entry>
+  <entry key="103">Le nom d'utilisateur doit contenir au moins 4 caractères</entry>
+  <entry key="104">Le mot de passe doit contenir au moins 4 caractères</entry>
+  <entry key="105">Le nom d'utilisateur existe déjà</entry>
+  <entry key="106">Cette adresse e-mail est déjà utilisée</entry>
+  <entry key="107">Erreur système, merci de contacter l'administrateur</entry>
+  <entry key="108">Connexion</entry>
+  <entry key="109">Utilisateur :</entry>
+  <entry key="110">Mot de passe :</entry>
+  <entry key="111">Langue :</entry>
+  <entry key="112">Se connecter</entry>
+  <entry key="113">S'enregistrer</entry>
+  <entry key="114">Utilisateur :</entry>
+  <entry key="115">Mot de passe :</entry>
+  <entry key="116">Retapez :</entry>
+  <entry key="117">Prénom :</entry>
+  <entry key="118">Nom :</entry>
+  <entry key="119">E-mail :</entry>
+  <entry key="120">Pays :</entry>
+  <entry key="121">Enregistrer</entry>
+  <entry key="122">Annuler</entry>
+  <entry key="123">Inscription</entry>
+  <entry key="124">Accueil</entry>
+  <entry key="125">Utilisateurs</entry>
+  <entry key="126">Groupes</entry>
+  <entry key="127">Organisations</entry>
+  <entry key="128">Salles</entry>
+  <entry key="129">Publique</entry>
+  <entry key="130">Organisation</entry>
+  <entry key="131">Entrer</entry>
+  <entry key="132">Identifiant</entry>
+  <entry key="133">Mot de passe</entry>
+  <entry key="134">Confirmez</entry>
+  <entry key="135">Prénom</entry>
+  <entry key="136">Nom</entry>
+  <entry key="137">E-mail</entry>
+  <entry key="138">Date de naissance</entry>
+  <entry key="139">Rue et N°</entry>
+  <entry key="140">Code postal/Ville</entry>
+  <entry key="141">Pays</entry>
+  <entry key="142">Commentaires</entry>
+  <entry key="143">Détails sur l'utilisateur</entry>
+  <entry key="144">Sauvegarder</entry>
+  <entry key="145">Sauvegarder</entry>
+  <entry key="146">ID</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">Prénom</entry>
+  <entry key="149">Nom</entry>
+  <entry key="150">Suivant</entry>
+  <entry key="151">Précédent</entry>
+  <entry key="152">Effacer l'enregistrement</entry>
+  <entry key="153">Annuler</entry>
+  <entry key="154">Effacer</entry>
+  <entry key="155">Nouvel enregistrement</entry>
+  <entry key="156">Actualiser l'enregistrement</entry>
+  <entry key="157">Effacer l'enregistrement</entry>
+  <entry key="158">Statut</entry>
+  <entry key="159">Désactivé</entry>
+  <entry key="160">Activé</entry>
+  <entry key="161">Organisations</entry>
+  <entry key="162">Calendrier</entry>
+  <entry key="163">Fermer</entry>
+  <entry key="164">ID Organisation</entry>
+  <entry key="165">Nom</entry>
+  <entry key="166">Utilisateur</entry>
+  <entry key="167">Modérateur</entry>
+  <entry key="168">Admin</entry>
+  <entry key="169">Type d'utilisateur</entry>
+  <entry key="170">Organisation</entry>
+  <entry key="171">Nom</entry>
+  <entry key="172">Ajouter une organisation</entry>
+  <entry key="173">Ajouter une organisation</entry>
+  <entry key="174">Annuler</entry>
+  <entry key="175">Ajouter</entry>
+  <entry key="176">Effacer organisation</entry>
+  <entry key="177">Utilisateur</entry>
+  <entry key="178">Ajouter utilisateur</entry>
+  <entry key="179">Effacer utilisateur</entry>
+  <entry key="180">Ajouter utilisateur</entry>
+  <entry key="181">Rechercher un utilisateur</entry>
+  <entry key="182">Rechercher</entry>
+  <entry key="183">Utilisateur</entry>
+  <entry key="184">Organisation</entry>
+  <entry key="185">Entrer</entry>
+  <entry key="186">Salles</entry>
+  <entry key="187">Salles</entry>
+  <entry key="188">ID</entry>
+  <entry key="189">Nom</entry>
+  <entry key="190">Publique</entry>
+  <entry key="191">Organisations</entry>
+  <entry key="192">Salle de conférence</entry>
+  <entry key="193">Nom</entry>
+  <entry key="194">Type</entry>
+  <entry key="195">Publique</entry>
+  <entry key="196">Commentaire :</entry>
+  <entry key="197">Enregistrer</entry>
+  <entry key="198">Charger</entry>
+  <entry key="199">Enregistrer sous</entry>
+  <entry key="200">Nom du fichier</entry>
+  <entry key="201">Nom du fichier</entry>
+  <entry key="202">Annuler</entry>
+  <entry key="203">Sauvegarder</entry>
+  <entry key="204">Erreur</entry>
+  <entry key="205">Chargement</entry>
+  <entry key="206">Objets chargés</entry>
+  <entry key="207">Synchronisation des clients, patientez...</entry>
+  <entry key="208">Chargement des données</entry>
+  <entry key="209">Synchronisation des clients, patientez...</entry>
+  <entry key="210">Effacer la zone de dessin</entry>
+  <entry key="211">Effacer la zone de dessin, toutes les données sur le tableau blanc seront perdues</entry>
+  <entry key="212">Confirmer avant de charger un fichier</entry>
+  <entry key="213">Envoyer invitation</entry>
+  <entry key="214">Envoyer invitation</entry>
+  <entry key="215">Sujet</entry>
+  <entry key="216">Destinataire</entry>
+  <entry key="217">Message</entry>
+  <entry key="218">Envoyer</entry>
+  <entry key="219">Annuler</entry>
+  <entry key="220">Envoyer</entry>
+  <entry key="221">Détails sur l'utilisateur</entry>
+  <entry key="222">Votre pseudonyme pour cette conférence</entry>
+  <entry key="223">Pseudo</entry>
+  <entry key="224">Prénom</entry>
+  <entry key="225">Nom</entry>
+  <entry key="226">E-mail</entry>
+  <entry key="227">Langue</entry>
+  <entry key="228">Entrer</entry>
+  <entry key="229">Chargement</entry>
+  <entry key="230">Sélectionnez votre langue</entry>
+  <entry key="231">Mot de passe erroné</entry>
+  <entry key="232">Merci de mettre deux mots de passes identiques avec 6 caractères minimum</entry>
+  <entry key="233">Adresse e-mail erronée</entry>
+  <entry key="234">Vous avez utilisé une adresse E-mail non valide</entry>
+  <entry key="235">Enregistrement effectué</entry>
+  <entry key="236">Votre compte a été créé. Vous pouvez maintenant vous connecter</entry>
+  <entry key="237">Vous ne pouvez pas partager votre écran car un autre utilisateur utilise déjà cette fonctionnalité</entry>
+  <entry key="238">Partage annulé</entry>
+  <entry key="239">Partager votre écran</entry>
+  <entry key="240">Mauvaise bande passante : Vous ne pouvez pas synchroniser votre écran. Des images seront supprimées.</entry>
+  <entry key="241">Ecran de :</entry>
+  <entry key="242">Dessiner</entry>
+  <entry key="243">Document</entry>
+  <entry key="244">T'chat</entry>
+  <entry key="245">Fichiers</entry>
+  <entry key="246">Membres</entry>
+  <entry key="247">Télécharger le document original</entry>
+  <entry key="248">Télécharger le document PDF</entry>
+  <entry key="249">Chargement de la présentation sur le tableau blanc</entry>
+  <entry key="250">Configuration</entry>
+  <entry key="251">Déplacer cet objet</entry>
+  <entry key="252">Redimensionner cet objet</entry>
+  <entry key="253">%</entry>
+  <entry key="254">de</entry>
+  <entry key="255">Aller à la première page</entry>
+  <entry key="256">Aller à la page précédente</entry>
+  <entry key="257">Aller à la page suivante</entry>
+  <entry key="258">Aller à la dernière page</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">M.</entry>
+  <entry key="262">Mme.</entry>
+  <entry key="263">Configuration</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Clé</entry>
+  <entry key="266">Configuration</entry>
+  <entry key="267">Clé</entry>
+  <entry key="268">Dernière MAJ</entry>
+  <entry key="269">Mis à jour par</entry>
+  <entry key="270">Commentaire</entry>
+  <entry key="271">Clé</entry>
+  <entry key="272">de</entry>
+  <entry key="273">Utilisateurs</entry>
+  <entry key="274">Effacer l'organisation</entry>
+  <entry key="275">Effacer</entry>
+  <entry key="276">Cet utilisateur est déjà membre de l'organisation</entry>
+  <entry key="277">Nouvelles</entry>
+  <entry key="278">Raccourcis</entry>
+  <entry key="279">Aller à la réunion</entry>
+  <entry key="280">Aller à la conférence</entry>
+  <entry key="281">Aide et support</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Un bug !</entry>
+  <entry key="285">Détail</entry>
+  <entry key="286">Site du projet (http://openmeetings.apache.org)</entry>
+  <entry key="287">Liste de diffusion pour les utilisateurs (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Se souvenir de moi</entry>
+  <entry key="289">Contenu</entry>
+  <entry key="290">Ma page personnelle</entry>
+  <entry key="291">Mes réunions programmées</entry>
+  <entry key="292">Mes conférences programmées</entry>
+  <entry key="293">Réunions publiques</entry>
+  <entry key="294">Réunions privées</entry>
+  <entry key="295">Auditorium public</entry>
+  <entry key="296">Auditorium privé</entry>
+  <entry key="297">Contenu public</entry>
+  <entry key="298">Contenu privé</entry>
+  <entry key="299">Contenu personnel</entry>
+  <entry key="300"></entry>
+  <entry key="301">Modération</entry>
+  <entry key="302">Demander la modération</entry>
+  <entry key="303">Sondage</entry>
+  <entry key="304">Choisir un fichier</entry>
+  <entry key="305">Configuration</entry>
+  <entry key="306">Choix micro/caméra</entry>
+  <entry key="307">Config. du tableau blanc</entry>
+  <entry key="308">Sortir</entry>
+  <entry key="309">Retour aux salles</entry>
+  <entry key="310">Quitter</entry>
+  <entry key="311">Mot de passe oublié ?</entry>
+  <entry key="312">Réinitialiser votre mot de passe</entry>
+  <entry key="313">Par e-mail</entry>
+  <entry key="314">Par login</entry>
+  <entry key="315">Votre e-mail</entry>
+  <entry key="316">Votre login</entry>
+  <entry key="317">Envoyer un e-mail de réinitialisation</entry>
+  <entry key="318">Aucune adresse trouvée. Soyez sûr d'avoir entré la même adresse que durant l'inscription.</entry>
+  <entry key="319">Entrez votre e-mail ou nom d'utilisateur</entry>
+  <entry key="320">Il n'y a pas d'utilisateur avec ce nom</entry>
+  <entry key="321">Un e-mail contenant un lien vous a été envoyé. Si vous n'avez pas reçu d'e-mail, vérifiez votre antispam et redemandez une confirmation.</entry>
+  <entry key="322">Quitter</entry>
+  <entry key="323">Message</entry>
+  <entry key="324">Hachage non valide. Pas d'utilisateur trouvé.</entry>
+  <entry key="325">Changez votre mot de passe</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">Changez votre mot de passe</entry>
+  <entry key="328">Nouveau mot de passe</entry>
+  <entry key="329">Retapez votre mot de passe</entry>
+  <entry key="330">Les mots de passe que vous avez entrés ne sont pas identiques.</entry>
+  <entry key="331">4 caractères ou plus ; la casse a de l'importance !</entry>
+  <entry key="332">Mot de passe changé. Vous pouvez vous connecter.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Erreur inconnue. Veuillez le signaler à votre équipe support.</entry>
+  <entry key="335">Nom d'utilisateur inconnu</entry>
+  <entry key="336">Mot de passe non valide</entry>
+  <entry key="337">Déconnecté avec succès</entry>
+  <entry key="338">Enregistrement depuis la page d'accueil désactivé.</entry>
+  <entry key="339">E-mail non valide</entry>
+  <entry key="340">Nom de fichier identique, veuillez choisir un autre nom de fichier</entry>
+  <entry key="341">Nom de fichier trop court</entry>
+  <entry key="342">Impossible de sauvegarder l'adresse</entry>
+  <entry key="343">Utilisateur ajouté. Si vous ne l'avez pas assigné à une organisation, veuillez le faire sans quoi il ne pourra pas se connecter.</entry>
+  <entry key="344">Nouvel enregistrement</entry>
+  <entry key="345">Pas de champ trouvé avec cet ID.</entry>
+  <entry key="346">Pas d'étiquette trouvée pour ce champ.</entry>
+  <entry key="347">Requière l'autorisation de l'administrateur</entry>
+  <entry key="348">Editeur de langue</entry>
+  <entry key="349">Langue</entry>
+  <entry key="350">Label-ID</entry>
+  <entry key="351">Label-Nom</entry>
+  <entry key="352">Label-Valeur</entry>
+  <entry key="353">Champs</entry>
+  <entry key="354">Label-Nom</entry>
+  <entry key="355">Label-Valeur</entry>
+  <entry key="356">Label-ID</entry>
+  <entry key="357">Vous avez effacé le label, pas le champ ! Vous ne pouvez pas effacer le champ, il peut contenir des labels pour d'autres langues.</entry>
+  <entry key="358">ID du label non valide. Le FieldLanguagesvalues_Id n'est pas dans la base de données.</entry>
+  <entry key="359">Vous ne pouvez pas supprimer ce champ, seulement les labels. Il n'y a pas de labels pour le moment ou il n'y a pas de labels pour ce langage.</entry>
+  <entry key="360">Exporter</entry>
+  <entry key="361">Vous devez vous déconnecter pour voir les changements.</entry>
+  <entry key="362">Ajouter un langage</entry>
+  <entry key="363">Effacer un langage</entry>
+  <entry key="364">Ajouter un langage</entry>
+  <entry key="365">Nom</entry>
+  <entry key="366">Ajouter un langage</entry>
+  <entry key="367">Sauvegarde</entry>
+  <entry key="368">Retour au début</entry>
+  <entry key="369">Précédent</entry>
+  <entry key="370">Suivant</entry>
+  <entry key="371">Aller au dernier</entry>
+  <entry key="372">L'utilisateur parle</entry>
+  <entry key="373">Son marche/arrêt</entry>
+  <entry key="374">Système</entry>
+  <entry key="375">Votre configuration</entry>
+  <entry key="376">Bonjour,</entry>
+  <entry key="377">Editez votre profil</entry>
+  <entry key="378">Nouveau(x) Message(s) :</entry>
+  <entry key="379">Nouvelle image</entry>
+  <entry key="380">Détails utilisateurs</entry>
+  <entry key="381">Choisissez votre organisation</entry>
+  <entry key="382">Commencer l'export</entry>
+  <entry key="383">Tous les utilisateurs</entry>
+  <entry key="384">Commencer l'export</entry>
+  <entry key="385">Importer détails utilisateurs</entry>
+  <entry key="386">Choisissez users.xml</entry>
+  <entry key="387">Importer</entry>
+  <entry key="388">Export en XML - Ces fichiers peuvent être utilisés pour : - Contribuer au projet - Importation sur un autre système - Sauvegarde - Personnalisation - Mettez-le dans le dossier des langues pour votre prochaine installation</entry>
+  <entry key="389">Choisissez un fichier de langue à importer. Choisissez le bon langage depuis la boite déroulante ! Peu importe le nom du fichier, il sera importé pour ce langage</entry>
+  <entry key="390">Import - Choisir un fichier</entry>
+  <entry key="391">Enregistrer sous</entry>
+  <entry key="392">Nom :</entry>
+  <entry key="393">Commentaire :</entry>
+  <entry key="394">Sauvegarde</entry>
+  <entry key="395">Enregistrements</entry>
+  <entry key="396">Lecteur d'enregistrements</entry>
+  <entry key="397">Enregistrement des salles privées et publiques</entry>
+  <entry key="398">Utilisateurs :</entry>
+  <entry key="399">Inscrits :</entry>
+  <entry key="400"></entry>
+  <entry key="401">Utilisateur dans la salle :</entry>
+  <entry key="402">Rafraichir</entry>
+  <entry key="403">Cette salle est pleine. Réessayez dans quelques minutes.</entry>
+  <entry key="404">Infos : Cliquez sur une salle</entry>
+  <entry key="405">Discutez avec les utilisateurs de cette salle :</entry>
+  <entry key="406">Salle :</entry>
+  <entry key="407">Utilisateurs dans cette salle :</entry>
+  <entry key="408">Depuis :</entry>
+  <entry key="409">Lire l'enregistrement</entry>
+  <entry key="410">Durée :</entry>
+  <entry key="411">Date :</entry>
+  <entry key="412">Mode enregistrement ! Vous ne pouvez rien modifier, ceci est un document enregistré !</entry>
+  <entry key="413">Lire cet enregistrement</entry>
+  <entry key="414">Lecture/Pause</entry>
+  <entry key="415">Commencer l'enregistrement</entry>
+  <entry key="416">Stopper l'enregistrement</entry>
+  <entry key="417">Enregistrement :</entry>
+  <entry key="418">Quelqu'un est déjà en train d'enregistrer cette session :</entry>
+  <entry key="419">Enregistrement par :</entry>
+  <entry key="420">Annuler</entry>
+  <entry key="421">Si vous annulez l'enregistrement, il ne sera pas sauvegardé.</entry>
+  <entry key="422">Reprendre</entry>
+  <entry key="423">Fermer cette fenêtre et reprendre l'enregistrement</entry>
+  <entry key="424">Changer la couleur de ligne</entry>
+  <entry key="425">Choisir une couleur</entry>
+  <entry key="426">Désactiver/Activer la couleur de ligne</entry>
+  <entry key="427">changer la couleur de remplissage</entry>
+  <entry key="428">Désactiver / Activer couleur de remplissage</entry>
+  <entry key="429">Changer la largeur de ligne</entry>
+  <entry key="430">Fermer</entry>
+  <entry key="431">Changer la taille de la police</entry>
+  <entry key="432">Effacer l'enregistrement</entry>
+  <entry key="433">Invité</entry>
+  <entry key="434">Par :</entry>
+  <entry key="435">Nom</entry>
+  <entry key="436">Salle</entry>
+  <entry key="437">Date</entry>
+  <entry key="438">Annuler</entry>
+  <entry key="439">Démarrer</entry>
+  <entry key="440">Nom</entry>
+  <entry key="441">Date</entry>
+  <entry key="442">Effacer l'historique du t'chat</entry>
+  <entry key="443">T'chat</entry>
+  <entry key="444">Envoyer message</entry>
+  <entry key="445">Emoticônes</entry>
+  <entry key="446">Emoticônes</entry>
+  <entry key="447">Choisissez le périphérique</entry>
+  <entry key="448">Audio et Vidéo</entry>
+  <entry key="449">Audio seulement</entry>
+  <entry key="450">Vidéo seulement</entry>
+  <entry key="451">Pas d'audio ni de vidéo (image statique)</entry>
+  <entry key="452">Aucun flux Audio/Vidéo ne sera émis, à la place l'image de votre profil sera affichée. Choisissez cette configuration en cas de problème de bande passante ou si votre connexion internet est lente.</entry>
+  <entry key="453">LU</entry>
+  <entry key="454">MA</entry>
+  <entry key="455">ME</entry>
+  <entry key="456">JE</entry>
+  <entry key="457">VE</entry>
+  <entry key="458">SA</entry>
+  <entry key="459">DI</entry>
+  <entry key="460">Lundi</entry>
+  <entry key="461">Mardi</entry>
+  <entry key="462">Mercredi</entry>
+  <entry key="463">Jeudi</entry>
+  <entry key="464">Vendredi</entry>
+  <entry key="465">Samedi</entry>
+  <entry key="466">Dimanche</entry>
+  <entry key="467">CS</entry>
+  <entry key="468">Calendrier semaine</entry>
+  <entry key="469">Janvier</entry>
+  <entry key="470">Février</entry>
+  <entry key="471">Mars</entry>
+  <entry key="472">Avril</entry>
+  <entry key="473">Mai</entry>
+  <entry key="474">Juin</entry>
+  <entry key="475">Juillet</entry>
+  <entry key="476">Août</entry>
+  <entry key="477">Septembre</entry>
+  <entry key="478">Octobre</entry>
+  <entry key="479">Novembre</entry>
+  <entry key="480">Décembre</entry>
+  <entry key="481">Calendrier</entry>
+  <entry key="482">Participants</entry>
+  <entry key="483">Montrer la disposition</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Largeur | Hauteur</entry>
+  <entry key="486">Conteneur-vidéo</entry>
+  <entry key="487">Conteneur-modération</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Conteneur-tableau blanc</entry>
+  <entry key="490">Activé</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Largeur | Hauteur</entry>
+  <entry key="493">Conteneur Fichier,t'chat,participants</entry>
+  <entry key="494">Activé</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Largeur | Hauteur</entry>
+  <entry key="497">Le modérateur a quitté la salle. Personne n'est présent actuellement. Vous pouvez demander la modération ou attendre.</entry>
+  <entry key="498">Il n'y a pas de modérateur dans cette salle, mais il reste des participants. Vous pouvez demander la modération ou attendre.</entry>
+  <entry key="499">Sentiments sur {0}</entry>
+  <entry key="500">{0} - Invitation</entry>
+  <entry key="501">Message de :</entry>
+  <entry key="502">Message :</entry>
+  <entry key="503">Cliquez sur le lien pour participer à la conférence :</entry>
+  <entry key="504">Cliquez pour entrer dans la salle</entry>
+  <entry key="505">Si ce lien ne fonctionne pas, copier/coller-le dans votre navigateur.</entry>
+  <entry key="506">Inscription {0}</entry>
+  <entry key="507">Vos données utilisateur :</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Mot de passe :</entry>
+  <entry key="510">E-mail :</entry>
+  <entry key="511">Equipe-{0}</entry>
+  <entry key="512">Inscription {0}</entry>
+  <entry key="513">{0} - Réinitialiser mot de passe</entry>
+  <entry key="514">Cliquez sur le lien pour saisir un nouveau mot de passe :</entry>
+  <entry key="515">Cliquez ici pour saisir un nouveau mot de passe</entry>
+  <entry key="516">Si ce lien ne fonctionne pas, copier/coller-le dans votre navigateur.</entry>
+  <entry key="517">{0} nouveau mot de passe</entry>
+  <entry key="518">Entrez une date valide, par exemple 24.12.2001 (jj.mm.aaaa)</entry>
+  <entry key="519">Entrez un e-mail valide, par exemple name@mail.com</entry>
+  <entry key="520">Entrez un nombre décimal valide, par exemple 1.00</entry>
+  <entry key="521">Entrez un entier valide, par exemple 100</entry>
+  <entry key="522">Entrez un numéro de téléphone valide, par exemple 01 02 03 04 05</entry>
+  <entry key="523">Entrez une heure valide, par exemple 12:23 (hh:mm)</entry>
+  <entry key="524">Protégé par mot de passe</entry>
+  <entry key="525">Mot de passe</entry>
+  <entry key="526">Période de validité</entry>
+  <entry key="527">Indéfinie</entry>
+  <entry key="528">Temporaire</entry>
+  <entry key="529">Une connexion</entry>
+  <entry key="530">Valide à partir de :</entry>
+  <entry key="531">Valide jusqu'à :</entry>
+  <entry key="532">Invitation à une conférence {0}</entry>
+  <entry key="533">Pas d'invitation disponible pour ce code</entry>
+  <entry key="534">L'invitation est déjà utilisé. Impossible d'accéder à la réunion/conférence.</entry>
+  <entry key="535">Ce code d'invitation n'est pas valide.</entry>
+  <entry key="536">Mot de passe:</entry>
+  <entry key="537">Vérification du mot de passe</entry>
+  <entry key="538">Mot de passe non valide !</entry>
+  <entry key="539">Navigateur</entry>
+  <entry key="540">Synchroniser Audio/Vidéo</entry>
+  <entry key="541">Votre mot de passe est correct mais la session est inactive. Vous devez récupérer une nouvelle ID de session et vous reconnecter.</entry>
+  <entry key="542">L'ID de session n'est pas connecté ou ne possède pas les droits d'administration. La passerelle SOAP nécessite un utilisateur ayant les droits d'administration pour intégrer de nouveaux utilisateurs.</entry>
+  <entry key="543">Cette session n'a pas d'utilisateur distant connecté. Soit vous n'avez pas appelé la passerelle SOAS avant d'accéder à l'application, soit vous utilisez une mauvaise ID de session.</entry>
+  <entry key="544">L'enregistrement est en construction...</entry>
+  <entry key="545">x</entry>
+  <entry key="546">axe-x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">axe-y</entry>
+  <entry key="549">w</entry>
+  <entry key="550">Largeur</entry>
+  <entry key="551">h</entry>
+  <entry key="552">Hauteur</entry>
+  <entry key="553">Modifier la transparence</entry>
+  <entry key="554">Navigateur ouvert</entry>
+  <entry key="555">Navigateur fermé</entry>
+  <entry key="556">La connexion avec le serveur est interrompue. Vérifiez le réseau ou contactez l'adminitrateur.</entry>
+  <entry key="557">Pointeur</entry>
+  <entry key="558">Synchronisation</entry>
+  <entry key="559">Synchronisation des utilisateurs, patientez s'il vous plait...</entry>
+  <entry key="560">&lt;u&gt;Télécharger en SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Télécharger en PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Télécharger en JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Télécharger en PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Télécharger en TIF&lt;/u&gt;</entry>
+  <entry key="565">Rappel :</entry>
+  <entry key="566">Catégorie:</entry>
+  <entry key="567">Répétition:</entry>
+  <entry key="568">Nul</entry>
+  <entry key="569">Lieu :</entry>
+  <entry key="570">Début</entry>
+  <entry key="571">Fin</entry>
+  <entry key="572">Titre :</entry>
+  <entry key="573">Commentaire :</entry>
+  <entry key="574">Inviter</entry>
+  <entry key="575">Jour</entry>
+  <entry key="576">Mois</entry>
+  <entry key="577">Année</entry>
+  <entry key="578">Fin de rendez-vous est après début de rendez-vous !</entry>
+  <entry key="579">Indiquez un titre s'il vous plait</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Cochez cette case pour écrire de droite à gauche</entry>
+  <entry key="582">Tableau de bord</entry>
+  <entry key="583">Visionner vos réunions ou conférences</entry>
+  <entry key="584">Accéder aux réunions en cours&lt;br/&gt;Tout le monde pourra parler et entendre l'ensemble des conversations.</entry>
+  <entry key="585">Accéder aux conférences en cours&lt;br/&gt;Le droit de parole est réservée au conférencier. Vous ne pourrez qu'écouter.</entry>
+  <entry key="586">Créer un utilisateur, une réunion, une organisation.&lt;br/&gt; + changer la configuration</entry>
+  <entry key="587">Utilisateurs actuellement dans cette réunion :</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Document en chargement. Attendez que tous les utilisateurs soient synchronisés.</entry>
+  <entry key="592">Téléchargement ok, conversion en cours...</entry>
+  <entry key="593">Démarrer l'importation</entry>
+  <entry key="594">Sélectionnez un fichier sur votre disque :</entry>
+  <entry key="595">Quitter</entry>
+  <entry key="596">Sélectionner un fichier</entry>
+  <entry key="597">Connexions</entry>
+  <entry key="598">Valeur</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connecté depuis</entry>
+  <entry key="602">Salle / Limite</entry>
+  <entry key="603">Sortir utilisateur</entry>
+  <entry key="604">Sortir utilisateur</entry>
+  <entry key="605">Voulez-vous vraiment sortir cet utilisateur ?&lt;br/&gt; Cela supprimera le client de la réunion actuelle mais il pourra se reconnecter.</entry>
+  <entry key="606">Votre session a été interrompue par l'administrateur ou le modérateur.</entry>
+  <entry key="607">Téléphone</entry>
+  <entry key="608">Modérateur de cette réunion</entry>
+  <entry key="609">Autoriser/Refuser le droit de dessiner sur le tableau blanc</entry>
+  <entry key="610">(Re) Démarrer audio/vidéo ou changer les paramètres</entry>
+  <entry key="611">Autoriser cet utilisateur à dessiner sur le tableau blanc</entry>
+  <entry key="612">Retirer le droit de dessiner sur le tableau blanc.</entry>
+  <entry key="613">Utilisateurs</entry>
+  <entry key="614">Fichiers</entry>
+  <entry key="615">Tableau blanc</entry>
+  <entry key="616">T'chat</entry>
+  <entry key="617">Votre compte est assigné à plusieurs organisations. Choisissez-en une pour cette session.</entry>
+  <entry key="618">Le nombre max. d'utilisateurs est atteint. Veuillez réessayez plus tard.</entry>
+  <entry key="619">Type de salle</entry>
+  <entry key="620">Salle temporaire</entry>
+  <entry key="621">Heure serveur</entry>
+  <entry key="622">{0} - Rappel</entry>
+  <entry key="623">Message de l'utilisateur :</entry>
+  <entry key="624">Message :</entry>
+  <entry key="625">Cliquez sur ce lien pour participer à la réunion :</entry>
+  <entry key="626">Cliquez ici pour entrer dans la salle</entry>
+  <entry key="627">Si vous avez un problème avec le lien, copier-coller-le dans votre navigateur s.v.p. :</entry>
+  <entry key="628">recherche interne</entry>
+  <entry key="629">Ajouter un utilisateur extérieur</entry>
+  <entry key="630">Prénom</entry>
+  <entry key="631">Nom</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirmer la sortie</entry>
+  <entry key="634">Etes-vous sûr de vouloir quitter ?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Salle Démo</entry>
+  <entry key="637">Heure Démo</entry>
+  <entry key="638">Temps de réunion</entry>
+  <entry key="639">C'est une salle de Démo. Pour désactiver ce message vous devez utiliser une réunion privée pour votre usage personnel ou avoir votre propre serveur. Vous allez être automatiquement déconnecté dans :</entry>
+  <entry key="640">Modération</entry>
+  <entry key="641">S.V.P. attendez que le modérateur rejoigne la salle.&lt;br/&gt;Le modérateur peut-être un enseignant,&lt;br/&gt;l'administrateur ou le créateur de&lt;br/&gt; cette réunion.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Nouveau partage d'écran</entry>
+  <entry key="644">C'est un nouveau partage d'écran de cet utilisateur:</entry>
+  <entry key="645">Démarrer le partage</entry>
+  <entry key="646">Ajouter une nouvelle réunion</entry>
+  <entry key="647">Salle de réunion</entry>
+  <entry key="648">Salle de conférence</entry>
+  <entry key="649">Modération</entry>
+  <entry key="650">Modérer les utilisateurs</entry>
+  <entry key="651">Salles modérées</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Voulez-vous que cet utilisateur devienne un modérateur de cette organisation ?</entry>
+  <entry key="654">Choisissez une organisation avant de lui ajouter un utilisateur s.v.p. !</entry>
+  <entry key="655">Organisation - Modérateur</entry>
+  <entry key="656">Voulez-vous réellement supprimer cet utilisateur de cette organisation?</entry>
+  <entry key="657">Cet utilisateur est un modérateur</entry>
+  <entry key="658">Cet utilisateur n'est pas un modérateur</entry>
+  <entry key="659">Voulez-vous que cet utilisateur ne soit pas un modérateur de cette organisation ?</entry>
+  <entry key="660">Ajouter ou supprimer des utilisateurs ou des salles de votre organisation</entry>
+  <entry key="661">Voulez-vous réellement supprimer cet enregistrement ?</entry>
+  <entry key="662">Voulez-vous réellement supprimer cet utilisateur de votre organisation ? Vous supprimez seulement le lien entre cet utilisateur et votre organisation, pour supprimer réellement cet utilisateur vous devez aller dans l'onglet d'administration.</entry>
+  <entry key="663">Vous ne pouvez pas vous supprimer !</entry>
+  <entry key="664">Cette méthode nécessite des droits d'administration.</entry>
+  <entry key="665">Il n'y a pas de session associée à cet ID.</entry>
+  <entry key="666">C'est un compte d'administration ou de modérateur. Vous ne pouvez l'éditer qu'à travers l'onglet d'administration.</entry>
+  <entry key="667">Pour terminer votre enregistrement veuillez cliquer sur le lien suivant. Ou copier l'URL dans la barre d'adresse de votre navigateur.</entry>
+  <entry key="668">Cliquez pour vérifier votre E-mail</entry>
+  <entry key="669">Aucun utilisateur pour ce hachage.</entry>
+  <entry key="670">Cet utilisateur est déjà activé !</entry>
+  <entry key="671">Vous avez activé votre compte avec succès !</entry>
+  <entry key="672">Se connecter maintenant</entry>
+  <entry key="673">Votre compte n'est pas actif. Utilisez le lien dans l'e-mail que vous avez reçu pour l'enregistrement.</entry>
+  <entry key="674">Vous êtes enregistré. Nous vous avons envoyé un e-mail avec un code de vérification. Regardez votre boite de messagerie.</entry>
+  <entry key="675">Enlever le rôle de modérateur à cet utilisateur</entry>
+  <entry key="676">Donner les droits de modération à cet utilisateur</entry>
+  <entry key="677">Utilisateur</entry>
+  <entry key="678">Accès au tableau blanc</entry>
+  <entry key="679">Modérateur</entry>
+  <entry key="680">Modération : Choisissez un utilisateur de cette liste pour lui donner accès au tableau blanc, à la modération ou à la vidéo.</entry>
+  <entry key="681">Cet utilisateur est déjà modérateur, donc il a le droit de dessiner.</entry>
+  <entry key="682">Il s'agit de vous ! Vous ne pouvez pas vous retirer &lt;br/&gt;les droits de modération.</entry>
+  <entry key="683">Autoriser cet utilisateur à publier son Audio/Vidéo</entry>
+  <entry key="684">Supprimer l'Audio/Vidéo de cet utilisateur</entry>
+  <entry key="685">Je souhaiterais obtenir le modération de cette salle.</entry>
+  <entry key="686">Je souhaiterais dessiner sur le tableau blanc</entry>
+  <entry key="687">Je souhaiterais partager mon audio/vidéo</entry>
+  <entry key="688">Vous êtes le modérateur de cette salle</entry>
+  <entry key="689">Vous êtes autorisé à dessiner sur le tableau blanc</entry>
+  <entry key="690">Vous êtes autorisé à partager votre Audio/Vidéo.</entry>
+  <entry key="691">Message au modérateur</entry>
+  <entry key="692">L'utilisateur</entry>
+  <entry key="693">&lt;br/&gt;demande la modération. Utilisez l'icône dans la liste des utilisateurs pour ajouter ou enlever la modération.</entry>
+  <entry key="694">&lt;br/&gt;demande l'accès au tableau blanc. Utilisez l'icône dans la liste des utilisateurs pour ajouter ou enlever le droit de dessiner sur le tableau blanc.</entry>
+  <entry key="695">&lt;br/&gt;demande le partage audio/vidéo. Utilisez l'icône dans la liste des utilisateurs pour ajouter ou enlever le droit de partager l'audio/vidéo.</entry>
+  <entry key="696">Vous devez attendre qu'un modérateur entre dans la salle.</entry>
+  <entry key="697">Annuler</entry>
+  <entry key="698">Sauver</entry>
+  <entry key="699">Jour</entry>
+  <entry key="700">Mois</entry>
+  <entry key="701">Année</entry>
+  <entry key="702">Ajouter un fichier</entry>
+  <entry key="703">Ajouter un dossier</entry>
+  <entry key="704">Rafraichir</entry>
+  <entry key="705">Poubelle</entry>
+  <entry key="706">Mes fichiers personnels</entry>
+  <entry key="707">Les fichiers de la salle (Public)</entry>
+  <entry key="708">Ajouter un fichier</entry>
+  <entry key="709">Ajouter un dossier</entry>
+  <entry key="710">Supprimer un dossier</entry>
+  <entry key="711">Modifier le nom</entry>
+  <entry key="712">Nouveau dossier</entry>
+  <entry key="713">Etes-vous sûr de vouloir supprimer cet item ?</entry>
+  <entry key="714">Recherche</entry>
+  <entry key="715">Recherche</entry>
+  <entry key="716">Ouvrir le document</entry>
+  <entry key="717">Montrer tous les fichiers (Arborescence)</entry>
+  <entry key="718">Fermer le document</entry>
+  <entry key="719">Supprimer le fichier</entry>
+  <entry key="720">Tableau blanc non autorisé.</entry>
+  <entry key="721">Propriétés Document</entry>
+  <entry key="722">+net +long</entry>
+  <entry key="723">conseillé</entry>
+  <entry key="724">Un utilisateur souhaite partager son écran. Voulez-vous le voir ?</entry>
+  <entry key="725">Vous partagez actuellement votre écran. Pour arrêter ce partage, cliquez sur le bouton Sortie de la fenêtre de partage.</entry>
+  <entry key="726">Session de partage</entry>
+  <entry key="727">Vous partagez déjà votre écran !</entry>
+  <entry key="728">Vue d'écran</entry>
+  <entry key="729">Sortie</entry>
+  <entry key="730">Partage d'écran</entry>
+  <entry key="731">Cliquez sur Partager pour publier votre écran</entry>
+  <entry key="732">Partager</entry>
+  <entry key="733">Arrêter</entry>
+  <entry key="734">Sélectionner la partie d'écran :</entry>
+  <entry key="735">Changer la largeur</entry>
+  <entry key="736">La session de partage est terminée !</entry>
+  <entry key="737">Changer la hauteur</entry>
+  <entry key="738">Marge-X</entry>
+  <entry key="739">Marge-Y</entry>
+  <entry key="740">Largeur :</entry>
+  <entry key="741">Hauteur :</entry>
+  <entry key="742">La connection a été fermée par le serveur</entry>
+  <entry key="743">Annuler</entry>
+  <entry key="744">+ net</entry>
+  <entry key="745">Si vous fermez cette session vous ne pourrez plus redemarrer le partage pour cette session.</entry>
+  <entry key="746">Confirmez la fermeture de cette session de partage</entry>
+  <entry key="747">Ecran partage</entry>
+  <entry key="748">Enregistrement de la session</entry>
+  <entry key="749">Navigation collaborative</entry>
+  <entry key="750">Oups... Firefox et Windows ne permettent pas une bonne navigation collaborative. Veuillez utiliser un autre navigateur pour utiliser cette fonction.</entry>
+  <entry key="751">Précédent</entry>
+  <entry key="752">Suivant</entry>
+  <entry key="753">Rechargement</entry>
+  <entry key="754">Accueil</entry>
+  <entry key="755">Chargement</entry>
+  <entry key="756">Ajouter ce site web comme site par défaut pour votre profil</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Testez votre micro et votre caméra avant d'entrer dans la réunion en enregistrant quelques secondes. Vous pourrez alors rejouer votre enregistrement pour vérification.</entry>
+  <entry key="759">Ne plus montrer ce test (modifiable dans le profil)</entry>
+  <entry key="760">Annuler</entry>
+  <entry key="761">Début de réunion</entry>
+  <entry key="762">Ne plus poser cette question</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Vous pouvez continuer sans tester si vous ne pensez pas publier votre voix ou votre vidéo. Les participants sans audio ou vidéo peuvent utiliser le tableau blanc, partager leur écran ou écrire des messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Niveau</entry>
+  <entry key="768">Cliquer sur Début</entry>
+  <entry key="769">Commencer la réunion</entry>
+  <entry key="770">Commencer la conférence</entry>
+  <entry key="771">Choisir la salle</entry>
+  <entry key="772">Auto-test</entry>
+  <entry key="773">Commencer la réunion</entry>
+  <entry key="774">Chronologie d'emploi :</entry>
+  <entry key="775">Début d'enreg.</entry>
+  <entry key="776">Ne pas montrer le test audio/vidéo (Enregistrement) avant d'entrer en réunion.</entry>
+  <entry key="777">Salles publiques</entry>
+  <entry key="778">Les salles publiques sont accessibles à tous les utilisateurs.</entry>
+  <entry key="779">Salles privées</entry>
+  <entry key="780">Les salles privées ne sont accessibles qu'aux utilisateurs de l'organisation pour laquelle elles ont été créées.</entry>
+  <entry key="781">Mes salles</entry>
+  <entry key="782">Ici les salles sont créées pour un usage personnel. Elles sont créées par le calendrier et ont une date de début et de fin. Elles ne sont listées ici que tant qu'elles sont valides dans le jour J (aujourd'hui).</entry>
+  <entry key="783">Vous devez être modérateur pour faire cela.</entry>
+  <entry key="784">Demander la modération</entry>
+  <entry key="785">Demander l'accès au tableau blanc</entry>
+  <entry key="786">Demander l'accès à caméra/micro</entry>
+  <entry key="787">Ce hachage est déjà utilisé. Vous ne pouvez l'utiliser deux fois.</entry>
+  <entry key="788">DEBUT</entry>
+  <entry key="789">Sortie</entry>
+  <entry key="790">Voulez-vous réellement sortir ? Vous devriez peut-être préalablement nettoyer les documents chargés, le tableau blanc ou les messages instantanés.</entry>
+  <entry key="791">Sortie de réunion</entry>
+  <entry key="792">Salles</entry>
+  <entry key="793">Choisir une salle pour la réunion</entry>
+  <entry key="794">Il y a un évènement non sauvegardé dans le calendrier. S.V.P. sauvegardez-le ou supprimez-le.</entry>
+  <entry key="795">S.V.P. ajoutez au moins un participant à votre réunion</entry>
+  <entry key="796">Voulez-vous réellement supprimer cet évènement ?</entry>
+  <entry key="797">Attention</entry>
+  <entry key="798">Ajouter un évènement</entry>
+  <entry key="799">jour</entry>
+  <entry key="800">semaine</entry>
+  <entry key="801">mois</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Participants</entry>
+  <entry key="804">{0}, votre plateforme de conférence web. Suivez les instructions.&lt;br/&gt;Cliquez sur le bouton 'Début' pour commencer une réunion immédiatement ou allez au calendrier pour planifier une réunion.</entry>
+  <entry key="805">Planifier</entry>
+  <entry key="806">Pour planifier une réunion vous pouvez créer un événement dans le calendrier.</entry>
+  <entry key="807">Besoin d'aide ?</entry>
+  <entry key="808">Accès réservé</entry>
+  <entry key="809">Recherche</entry>
+  <entry key="810">Ajouter</entry>
+  <entry key="811">Il n'y a pas d'utilisateur sélectionné. S.V.P. choisissez un utilisateur dans la liste.</entry>
+  <entry key="812">Ajouter un participant</entry>
+  <entry key="813">Sauvegarde</entry>
+  <entry key="814">Supprimer</entry>
+  <entry key="815">Détails de l'évènement</entry>
+  <entry key="816">Modérateurs par défaut</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Nom</entry>
+  <entry key="820">E-mail</entry>
+  <entry key="821">Ajouter un nouveau modérateur par défaut</entry>
+  <entry key="822">C'est le super modérateur</entry>
+  <entry key="823">Si la salle est modérée, un utilisateur avec le niveau modérateur ou administrateur est automatiquement modérateur s'il participe à la réunion. Si vous ne voulez pas de ce fonctionnement et que voulez qu'un certain utilisateur devienne modérateur, utilisez l'option modérateur par défaut.</entry>
+  <entry key="824">Un super modérateur est toujours modérateur quand il participe à une réunion, et personne ne peut lui retirer ce droit</entry>
+  <entry key="825">Appliquer la super-modération à cet utilisateur</entry>
+  <entry key="826">Retirer la super-modération à cet utilisateur</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Si vous spécifiez une organisation pour la réunion, seuls les utilisateurs qui appartiennent à cette organisation y ont accès (S'il ne s'agit pas d'une réunion publique !)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organisation</entry>
+  <entry key="832">Etes-vous sûr ?</entry>
+  <entry key="833">Voulez-vous réellement supprimer cet item ? Vous devez utiliser le bouton Sauvegarde pour garder les modifications !</entry>
+  <entry key="834">Aucun utilisateur sélectionné. S.V.P. sélectionnez en un avant de l'ajouter !</entry>
+  <entry key="835">Ajouter un nouveau modérateur par défaut</entry>
+  <entry key="836">Voulez-vous que cet utilisateur soit super-modérateur ? Un super-modérateur n'est pas seulement modérateur de la réunion, son rôle ne peut de plus être enlevé par aucun autre modérateur. Vous devez sauvegarder la salle pour sauvegarder ces paramètres !</entry>
+  <entry key="837">Voulez-vous retirer la super-modération à cet utilisateur ? Vous devez sauvegarder la salle pour sauvegarder ces paramètres !</entry>
+  <entry key="838">Cet utilisateur est un super-modérateur. Vous ne pouvez pas enlever la modération à un super-modérateur !</entry>
+  <entry key="839">Voulez-vous réellement supprimer ce fichier/dossier ?</entry>
+  <entry key="840">Supprimer Fichier/Dossier ?</entry>
+  <entry key="841">Mlle.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Propriétés</entry>
+  <entry key="844">Montrer la souris sur l'écran</entry>
+  <entry key="845">Partager l'audio avec l'applet SIP</entry>
+  <entry key="846">Partager l'audio avec SIP et la vidéo avec Flash</entry>
+  <entry key="847">Zoom 100%</entry>
+  <entry key="848">Voir écran</entry>
+  <entry key="849">L'utilisateur</entry>
+  <entry key="850">souhaite partager son écran. Voulez-vous le voir ?</entry>
+  <entry key="851">Fermer</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">La session a été fermée par l'utilisateur qui partageait son écran!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">Nouveau partage d'écran</entry>
+  <entry key="856">Réduire</entry>
+  <entry key="857">Maximiser</entry>
+  <entry key="858">Vidéo</entry>
+  <entry key="859">Chronologie de l'enregistrement</entry>
+  <entry key="860">Mes enregistrements</entry>
+  <entry key="861">Enregistrements publics</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Nom</entry>
+  <entry key="864">Durée</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">par</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Enregistrement</entry>
+  <entry key="870">Vous pouvez enregistrer et partager votre écran en même temps. Pour permettre aux autres de voir votre écran, cliquez le bouton Partager en haut. Pour seulement enregistrer la session, il suffit de cliquer sur Démarrer l'enregistrement.</entry>
+  <entry key="871">Démarrer l'enregistrement</entry>
+  <entry key="872">Arrêter l'enregistrement</entry>
+  <entry key="873">Télécharger le fichier FLV</entry>
+  <entry key="874">Salle</entry>
+  <entry key="875">Jouer</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">L'utilisateur a son micro activé</entry>
+  <entry key="878">Arrêter le partage</entry>
+  <entry key="879">Accepter les questions</entry>
+  <entry key="880">Désactivez ceci pour éviter que les utilisateurs ne vous disturbent dans la salle. Cela a pour effet de masquer le bouton permettant de demander la modération.</entry>
+  <entry key="881">Droits</entry>
+  <entry key="882">Télécharger le fichier AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Ecran vidéo brut</entry>
+  <entry key="886">Audio seulement</entry>
+  <entry key="887">Il y a eu des erreurs durant le traitement de l'enregistrement.</entry>
+  <entry key="888">L'enregistrement n'est pas encore prêt à être visionné. Veuillez réessayer dans quelques minutes.</entry>
+  <entry key="889">Log :</entry>
+  <entry key="890">Message de l'enregistreur</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">L'applet SIP n'est pas prêt</entry>
+  <entry key="893">Paramètre compte SIP</entry>
+  <entry key="894">Paramètres SIP pour chaque utilisateur. Vous pouvez activer ou désactiver SIP via Administration &gt; Configuration (Champ : enable_sip). Les données SIP pour chaque utilisateur devraient être créées automatiquement. Vous pouvez recréer les données en cochant "Regénérer les données SIP"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">La connexion à la passerelle SIP a échoué. Vous devrier vérifier les données d'autentification de votre fournisseur SIP et les données des comptes SIP de chaque utilisateur. En tant qu'administrateur vous pouvez toujours vous connecter et vérifier la configuration. En tant qu'utilisateur ou modérateur vous ne pourrez pas interragir.</entry>
+  <entry key="899">La connexion à la passerelle SIP a échoué. Veuiller contacter votre équipe de support !</entry>
+  <entry key="900">Connexion à la passerelle SIP...</entry>
+  <entry key="901">Connexion à la passerelle SIP...</entry>
+  <entry key="902">Montrer le journal</entry>
+  <entry key="903">Journaliser les messages de post traitement de l'enregistreur</entry>
+  <entry key="904">Message de l'applet SIP</entry>
+  <entry key="905">L'applet SIP n'est pas prêt. Acceptez l'applet et cliquez ok !</entry>
+  <entry key="906">Obtenir la modération</entry>
+  <entry key="907">Sauvegarder les modifications de la réunion</entry>
+  <entry key="908">La réunion a été modifiée. Voulez-vous sauvegarder les changements ? &lt;br/&gt;&lt;br/&gt;Tous les participants à la réunion recevront un e-mail avec la date et l'heure mises à jour (cela dépend du type de notification pour cette réunion).</entry>
+  <entry key="909">Pour accéder à d'autres enregistrements vous devez vous connecter à l'application {0} Application.</entry>
+  <entry key="910">Choisissez l'utilisateur pour cette vidéo</entry>
+  <entry key="911">Utilisateurs disponibles pour ce conteneur</entry>
+  <entry key="912">Vous êtes un modérateur dans cette salle d'interview. Vous pouvez décider de qui parle et vous pouvez démarrer/arrêter l'enregistrement de la session.</entry>
+  <entry key="913">Démarrer l'enregistr.</entry>
+  <entry key="914">Arrêter l'enregistr.</entry>
+  <entry key="915">L'enregisrement de l'interview est déjà démarré.</entry>
+  <entry key="916">L'enregistrement est déjà arrêté ou n'a pas encore démarré.</entry>
+  <entry key="917">L'enregistrement pour cette interview a déjà démarré !</entry>
+  <entry key="918">Annuler</entry>
+  <entry key="919">Le post traitement d'une interview dure 5 minutes par minute d'interview. L'avancement actuel du post traitement est :</entry>
+  <entry key="920">Vous devez entrer votre mot de passe à nouveau pour créer automatiquement les données SIP</entry>
+  <entry key="921">Regénérer les données</entry>
+  <entry key="922">Vous ne pouvez déplacer ce fichier ou dossier dans son propre sous-dossier !</entry>
+  <entry key="923">Taille du disque local</entry>
+  <entry key="924">Taille du disque public</entry>
+  <entry key="925">Paramètres de la licence</entry>
+  <entry key="926">Vous pouvez soit lier l'utilisateur à une date d'expiration ou à un nombre de minutes lorsque vous activez la licence.</entry>
+  <entry key="927">Vérifier la licence</entry>
+  <entry key="928">Forfait</entry>
+  <entry key="929">Date d'expiration</entry>
+  <entry key="930">Secondes restantes</entry>
+  <entry key="931">Temps total</entry>
+  <entry key="932">Votre licence a expiré. Vous devez soit acheter des minutes (paiement à la minute) soit un volume forfaitaire.</entry>
+  <entry key="933">Cliquez et achetez</entry>
+  <entry key="934">Temps restant sur votre compte :</entry>
+  <entry key="935">Information licence utilisateur</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Fermer</entry>
+  <entry key="938">Votre licence a expiré. Vous devez soit acheter des minutes (paiement à la minute) soit un volume forfaitaire</entry>
+  <entry key="939">Paramètres de la licence</entry>
+  <entry key="940">Vous pouvez soit acheter des minutes pour faire des conférences en ligne (paiement à la minute).&lt;br/&gt;&lt;br/&gt; Ou acheter un volume forfaitaire de 3-12 mois.&lt;br/&gt;&lt;br/&gt;Envoyer des invitations (liens directs vers les salles de conférences) ou créer des salles de conférences via le calendrier pour des utilisateurs externes est seulement possible avec un volume forfaitaire !</entry>
+  <entry key="941">Acheter 60 minutes 9,99 euros (16 cents par minute)</entry>
+  <entry key="942">Acheter 5 heures 19,99 euros (6 cents par minute)</entry>
+  <entry key="943">Acheter 3 mois pour 29,99 euros (9,99 euros par mois)</entry>
+  <entry key="944">Acheter 6 mois pour 39,99 euros (6,66 euros par mois)</entry>
+  <entry key="945">Paiement à la minute</entry>
+  <entry key="946">Volume forfaitaire</entry>
+  <entry key="947">Vous avez une licence illimitée</entry>
+  <entry key="948">Votre licence expirera à :</entry>
+  <entry key="949">Vous avez effectué un paiement à la minute. Il vous reste :</entry>
+  <entry key="950">Acheter un nouveau crédit !</entry>
+  <entry key="951">Voulez-vous votre propre serveur ?</entry>
+  <entry key="952">Vous voudriez avoir {0} installé sur votre serveur ou intégré dans Moodle, SugarCRM, votre site web ou intranet ? Les prix commencent à 500 euros par installation !</entry>
+  <entry key="953">Ou envoyez-nous un message</entry>
+  <entry key="954">Répondre à :</entry>
+  <entry key="955">Message :</entry>
+  <entry key="956">Envoyer</entry>
+  <entry key="957">Cliquez ici pour obtenir des infos et les prix</entry>
+  <entry key="958">Détails de la carte de crédit</entry>
+  <entry key="959">Prénom</entry>
+  <entry key="960">Nom</entry>
+  <entry key="961">Type de carte de crédit</entry>
+  <entry key="962">Carte VISA</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Numéro de carte</entry>
+  <entry key="967">Date d'expiration</entry>
+  <entry key="968">Numéro de vérification</entry>
+  <entry key="969">Adresse de facturation</entry>
+  <entry key="970">Adresse</entry>
+  <entry key="971"></entry>
+  <entry key="972">Ville</entry>
+  <entry key="973">Pays</entry>
+  <entry key="974">Etat (seulement USA)</entry>
+  <entry key="975">Code postal</entry>
+  <entry key="976">Montant</entry>
+  <entry key="977">Soumettre</entry>
+  <entry key="978">Etape 1: {0} - Formulaire de paiement</entry>
+  <entry key="979">E-mail</entry>
+  <entry key="980">Cliquez "Régler avec Paypal" pour payer.&lt;br/&gt; Paypal accepte VISA, MasterCard, Discover ou American Express. &lt;br/&gt;Il ne faut pas s'inscrire chez Paypal. &lt;br/&gt;Les citoyens allemands peuvent aussi payer avec un débit direct (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Merci d'avoir acheté {0}. &lt;br/&gt; &lt;br/&gt; Dès que nous aurons reçu le paiement, votre compte sera mis à jour.&lt;br/&gt; Vous recevrez un e-mail avec votre facture en PDF.&lt;br/&gt;Vous pouvez également vérifier les transactions passées et actuelles dansd votre profil.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Vous pouvez fermer cette fenêtre maintenant et retourner à {0}.</entry>
+  <entry key="982">Soumettre et acheter !</entry>
+  <entry key="983">Cliquer et acheter !</entry>
+  <entry key="984">Etape 3 : Paiement {0} - Vérifier la commande et acheter !</entry>
+  <entry key="985">Nom</entry>
+  <entry key="986">Paiement reçu !</entry>
+  <entry key="987">Bonjour,</entry>
+  <entry key="988">Nous avons reçu votre paiement. Votre profil utilisateur a été mis-à-jour. Voir votre facture ci-attachée. La facture ansi que toutes les factures passées peuvent être téléchargées dans votre profil utilisateur.</entry>
+  <entry key="989">Merci d'utiliser {0}!</entry>
+  <entry key="990">Paiement {0} reçu-</entry>
+  <entry key="991">Statut des paiements et transactions</entry>
+  <entry key="992">Hachage de transaction</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Mois</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Statut</entry>
+  <entry key="997">Facture</entry>
+  <entry key="998"></entry>
+  <entry key="999">Vous devez acheter un volume forfaitaire pour pouvoir envoyer des invitations ou créer des réunions via le calendrier. Avec un paiement à la minute il ne vous est possible que d'accéder à {0}. Vous ne pouvez pas permettre à des tiers de participer à une réunion.</entry>
+  <entry key="1000">Cette adresse e-mail est déjà utilisée par un autre utilisateur.</entry>
+  <entry key="1001">Paramètres SIP</entry>
+  <entry key="1002">Le numéro de conférence et PIN sont créés automatiquement via la passerelle OpenXG RPC</entry>
+  <entry key="1003">Numéro SIP</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Supprimer les objets sur le document actuel seulement !</entry>
+  <entry key="1006">Seule l'URL entrée dans la barre de statut est envoyée aux participants !</entry>
+  <entry key="1007">Créer des groupes de travail [Groupes restreints]</entry>
+  <entry key="1008">Choisir les utilisateurs pour un nouveau groupe de travail !</entry>
+  <entry key="1009">Vous pouvez choisir les utilisateurs ici et créer une nouvelle salle de conférence ("Groupe de travail") pour eux. Les utilisateurs choisis seront automatiquement transférés dans la nouvelle salle ou recevront une notification. Les modérateurs des groupes de travail recevront en plus une liste des salles actuelles afin qu'ils puissent changer de salle si nécessaire.</entry>
+  <entry key="1010">Nom d'utilisateur</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Utilisateurs pour le nouveau groupe de travail :</entry>
+  <entry key="1014">Créer un groupe de travail</entry>
+  <entry key="1015">Annuler</entry>
+  <entry key="1016">Choisissez au moins un utilisateur pour le groupe de travail !</entry>
+  <entry key="1017">Ajouter utilisateur au groupe</entry>
+  <entry key="1018">Supprimer utilisateur du groupe de travail</entry>
+  <entry key="1019">L'utilisateur est modérateur du groupe de travail (Il peut gérer les groupes de travail et les utilisateurs des groupes de travail peuvent lui demander de venir dans la salle)</entry>
+  <entry key="1020">Type de salle</entry>
+  <entry key="1021">Si vous cochez "Forcer utilisateur à changer de groupe de travail", tous les utilisateurs choisis seront automatiquement transférés vers la nouvelle salle. Autrement ils recevront une notification avec un bouton afin qu'ils &lt;i&gt;puissent&lt;/i&gt; aller dans la nouvelle salle. Les modérateurs de groupes de travail ont toujours la possibilité de gérer les groupes de travail et de passer de l'un à l'autre.</entry>
+  <entry key="1022">Gérer les groupes de travail</entry>
+  <entry key="1023">Vous pouvez ici passer d'un groupe de travail à l'autre pour lesquels vous êtes modérateur. Les utilisateurs dans les groupes de travail peuvent vous envoyer un message, par exemple pour vous demander de passer les aider. Vous pouvez également terminer un groupe de travil et tous les utilisateurs seront alors déconnectés.</entry>
+  <entry key="1024">Forcer utilisateur à passer dans un nouveau groupe de travail</entry>
+  <entry key="1025">Nom</entry>
+  <entry key="1026">Créé</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Utilisateurs disponibles</entry>
+  <entry key="1030">Ajouter un utilisateur avec le 'plus' à gauche ou le supprimer avec la croix à droite !</entry>
+  <entry key="1031">1) Paramètres du groupe de travail</entry>
+  <entry key="1032">2) Ajouter des utilisateurs au groupe de travail</entry>
+  <entry key="1033">Nom du groupe de travail</entry>
+  <entry key="1034">Groupe de travail</entry>
+  <entry key="1035">Aller dans la salle</entry>
+  <entry key="1036">Changer pour ce groupe de travail</entry>
+  <entry key="1037">Terminer le groupe de travail et déconnecter tous les utilisateurs</entry>
+  <entry key="1038">Nouveau groupe de travail</entry>
+  <entry key="1039">Il y a un nouveau groupe de travail disponible pour vous.</entry>
+  <entry key="1040">Aller dans le groupe de travail</entry>
+  <entry key="1041">Actions du groupe de travail</entry>
+  <entry key="1042">Vous pouvez réouvrir cette fenêtre via le menu principal dans la sedction "Actions" !</entry>
+  <entry key="1043">Envoyer un message au modérateur du groupe de travail</entry>
+  <entry key="1044">Nouveau groupe de travail</entry>
+  <entry key="1045">Il y a un nouveau groupe de travail disponible. Vous pouvez passer dans cette salle. Les groupes de travail sont des groupes restreints avec la possibilité de demander de l'aide au modérateur. Votre groupe de travail est également accessible dans la section 'Mes réunions'.</entry>
+  <entry key="1046">Aller au groupe de travail</entry>
+  <entry key="1047">Créé par :</entry>
+  <entry key="1048">Nom du groupe de travail :</entry>
+  <entry key="1049">Cette fenêtre restera ouverte même si vous quittez la salle !</entry>
+  <entry key="1050">Utilisateurs pour ce groupe de travail</entry>
+  <entry key="1051">3) Autres groupes de travail auxquels vous avez accès</entry>
+  <entry key="1052">Envoyer un message au modérateur du groupe de travail. Par exemple si vous devez modérer la salle ou si vous avez une question particulière.</entry>
+  <entry key="1053">Envoyer</entry>
+  <entry key="1054">2) Utilisateurs invités à ce groupe de travail</entry>
+  <entry key="1055">Est modérateur du groupe de travail</entry>
+  <entry key="1056">Voici tous les utilisateurs qui ont été invités à ce groupe de travail par le modérateur.</entry>
+  <entry key="1057">Il n'y a pas de modérateur connecté pour le moment !</entry>
+  <entry key="1058">Veuillez entrer un message</entry>
+  <entry key="1059">Veuillez venir nous aider, nous avons un problème dans notre groupe de travail !</entry>
+  <entry key="1060">Un utilisateur d'un groupe de travail a besoin de votre aide.</entry>
+  <entry key="1061">Groupe de travail demande de l'aide</entry>
+  <entry key="1062">Message :</entry>
+  <entry key="1063">De :</entry>
+  <entry key="1064">Vous n'êtes pour le moment dans aucun groupe de travail. Mais vous pouvez accéder ici à tous les groupes de travail auxquels vous avez accès.</entry>
+  <entry key="1065">Sauvegarder le système. La sauvegarde inclut toutes les données générées par les utilisateurs. La configuration n'est pas inclue ainsi que les étiquettes des langues car ces données sont importées avec l'installateur du système. Pour mettre votre système à jour, exportez votre système (1) réinstallez la nouvelle version dans une nouvelle base de données (2) et importez la sauvegarde (3). La sauvegarde devrait être importée avant de générer de nouvelles données avec le nouveau système.</entry>
+  <entry key="1066">Sauvegarde système</entry>
+  <entry key="1067">Permettre à l'utilisateur de partager/enregistrer son écran</entry>
+  <entry key="1068">Refuser à l'utilisateur de partager/enregistrer son écran</entry>
+  <entry key="1069">L'utilisateur est modérateur, il peut tout faire !</entry>
+  <entry key="1070">voudrait partager/enregistrer son écran.</entry>
+  <entry key="1071">Vous avez la permission de partager/enregistrer votre écran</entry>
+  <entry key="1072">Demander le droit de partager/enregistrer l'écran.</entry>
+  <entry key="1073">Autoriser/Refuser le droit de partager/enregistrer l'écran</entry>
+  <entry key="1074">Couper le son</entry>
+  <entry key="1075">Mettre le son</entry>
+  <entry key="1076">Salle audio seulement</entry>
+  <entry key="1077">Activez ce champ et les utilisateurs auront seulement l'option audio et non vidéo dans une salle de conférence. Ceci peut-être bon pour économiser de la bande passante.</entry>
+  <entry key="1078">Permettre le contrôle à distance (Durant un partage d'écran)</entry>
+  <entry key="1079">Refuser le contrôle à distance (Durant un partage d'écran)</entry>
+  <entry key="1080">Demander le droit de contrôler à distance (Durant un partage d'écran)</entry>
+  <entry key="1081">Vous avez le droit de contrôler à distance (Durant un partage d'écran)</entry>
+  <entry key="1082">souhaite contrôler à distance.</entry>
+  <entry key="1083">L'utilisateur est modérateur, il peut tout faire (Contôle du bureau à distance)</entry>
+  <entry key="1084">Autoriser/Refuser le droit au contrôle à distance (Durant un partage d'écran)</entry>
+  <entry key="1085">1) Pour copier et coller du texte de votre presse-papier vers l'écran du PC distant, cliquez sur l'écran, ensuite cliquez avec le bouton droit dans le champ de texte et choisissez "Insérer" du menu contextuel.&lt;br/&gt;&lt;br/&gt;2) Pour copier du texte depuis le PC distant vers le presse-papier de votre PC, mettez le texte en surbrillance sur l'écran du PC distant, ensuite cliquez avec le bouton droit et choisissez &lt;i&gt;Copier le texte en surbrillancet&lt;/i&gt;</entry>
+  <entry key="1086">Copier et coller du texte de votre PC vers un PC distant et vice-versa..</entry>
+  <entry key="1087">Copier le texte en surbrillance</entry>
+  <entry key="1088">Comment copier-coller</entry>
+  <entry key="1089">Qualité du partage d'écran :</entry>
+  <entry key="1090">très haute qualité</entry>
+  <entry key="1091">Haute qualité</entry>
+  <entry key="1092">Qualité moyenne</entry>
+  <entry key="1093">Basse qualité</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Clavier :</entry>
+  <entry key="1097">Fermer le Webinar !</entry>
+  <entry key="1098">Le Webinar est déjà fermé, vous allez être redirigé vers une offre intéressante dans</entry>
+  <entry key="1099">Fermer la salle</entry>
+  <entry key="1100">URL de sortie</entry>
+  <entry key="1101">Paramètres de fermeture</entry>
+  <entry key="1102">Si la salle est fermée les utilisateurs seront redirigés vers l'URL de sortie.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Nom</entry>
+  <entry key="1106">Fichier de configuration</entry>
+  <entry key="1107">Configuration Ldap</entry>
+  <entry key="1108">Nom</entry>
+  <entry key="1109">Activé</entry>
+  <entry key="1110">Inséré</entry>
+  <entry key="1111">Inséré par</entry>
+  <entry key="1112">Mis à jour</entry>
+  <entry key="1113">Mis à jour par</entry>
+  <entry key="1114">Les fichiers de configuration sont dans le répertoire webapps/openmeetings/conf. Vous devez charger manuellement les fichiers vers ce répertoire. Les modifications dans le fichier de configuration sont en ligne immédiatement.</entry>
+  <entry key="1115">Nom du fichier</entry>
+  <entry key="1116">Si vous activez "Ajouter le domaine au nom d'utilisateur" la veleur du champ "domaine" sera ajoutée à chaque login entré dans la fenêtre de login. Ceci peut-être utile si le login dans le Ldap est enregistré en incluant le nom de domaine. Par exemple : un utilisateur entre "hans" le domaine spécifié étant "localhost.com", le login vérifié avec Ldap sera : hans@localhost.com</entry>
+  <entry key="1117">Ajouter le domaine</entry>
+  <entry key="1118">Domaine</entry>
+  <entry key="1119">Insérer</entry>
+  <entry key="1120">Copier le texte en surbrillance</entry>
+  <entry key="1121">Texte du presse-papier distant</entry>
+  <entry key="1122">Montrer le presse-papier distant</entry>
+  <entry key="1123">Ne plus montrer</entry>
+  <entry key="1124">Copier le texte ici...</entry>
+  <entry key="1125">Vous devez avoir le droit de contôler à distance (ou avoir la modération) pour copier et coller du texte de ou vers l'écran distant.</entry>
+  <entry key="1126">Editer les paramètres par défaut...</entry>
+  <entry key="1127">Ne pas montrer la boite d'info dans le contrôle à distance à propos du copier-coller</entry>
+  <entry key="1128">Sauver</entry>
+  <entry key="1129">Enlever</entry>
+  <entry key="1130">Annuler</entry>
+  <entry key="1131">Inviter l'utilisateur dans la salle de conférence</entry>
+  <entry key="1132">Choisissez une salle de conférence. L'utilisateur invité recevra un message avec votre nom et un lien vers la salle.</entry>
+  <entry key="1133">Connecté depuis :</entry>
+  <entry key="1134">Entrer dans la salle après l'envoi de l'invitation</entry>
+  <entry key="1135">Inviter</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">souhaite vous inviter dans la salle de conférence :</entry>
+  <entry key="1138">Message d'invitation</entry>
+  <entry key="1139">Envoyer invitation</entry>
+  <entry key="1140">n'a &lt;b&gt;pas&lt;/b&gt; accepté votre invitation !</entry>
+  <entry key="1141">Accepter</entry>
+  <entry key="1142">Refuser</entry>
+  <entry key="1143">Fus. horaire</entry>
+  <entry key="1144">Détails de l'événement</entry>
+  <entry key="1145">Nom</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Créé par</entry>
+  <entry key="1148">Message du fus. hor.</entry>
+  <entry key="1149">Vérifiez "le message du fuseau horaire" pour transmettre aux utilisateurs un message la fois prochaine qu'ils se connectent.</entry>
+  <entry key="1150">Veuillez vérifier le fuseau horaire dans votre profil utilisateur.</entry>
+  <entry key="1151">Nouvelle conférence {0} :</entry>
+  <entry key="1152">Détails :</entry>
+  <entry key="1153">Début :</entry>
+  <entry key="1154">Fin :</entry>
+  <entry key="1155">Conférence {0} modifiée :</entry>
+  <entry key="1156">Organisateur :</entry>
+  <entry key="1157">Conférence {0} annulée :</entry>
+  <entry key="1158">Rappel conférence {0} :</entry>
+  <entry key="1159">Paramètres communautaires</entry>
+  <entry key="1160">Montrer les données de contact à tout le monde</entry>
+  <entry key="1161">Ajoutez des champs d'intérêt que vous avez ou que vous cherchez afin de trouver des partenaires intéressants pour une conférence. Séparez les termes par des virgules.</entry>
+  <entry key="1162">Mes intérêts</entry>
+  <entry key="1163">Je cherche</entry>
+  <entry key="1164">Nom</entry>
+  <entry key="1165">Fus. horaire</entry>
+  <entry key="1166">Centres d'intérêt</entry>
+  <entry key="1167">Information de contact</entry>
+  <entry key="1168">Montrer les données de contact aux contacts seulement</entry>
+  <entry key="1169">Ne montrer les données de contact à personne</entry>
+  <entry key="1170">Mon profil</entry>
+  <entry key="1171">Editer les paramètres</entry>
+  <entry key="1172">Chercher des utilisateurs</entry>
+  <entry key="1173">Voir votre profil comme les autres le voient</entry>
+  <entry key="1174">Editer vos paramètres, ajouter vos centres d'intérêts</entry>
+  <entry key="1175">Chercher d'autres utilisateurs et étendre votre réseau</entry>
+  <entry key="1176">Chercher</entry>
+  <entry key="1177">Utilisateur offre</entry>
+  <entry key="1178">Utilisateur cherche</entry>
+  <entry key="1179">Texte libre</entry>
+  <entry key="1180">Nom</entry>
+  <entry key="1181">Fus. horaire</entry>
+  <entry key="1182">Offres</entry>
+  <entry key="1183">Recherches</entry>
+  <entry key="1184">Résultat :</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Ajouter à vos contacts</entry>
+  <entry key="1187">Envoyer un message</entry>
+  <entry key="1188">Contacts et Messages</entry>
+  <entry key="1189">Contacts en attente</entry>
+  <entry key="1190">Accepter</entry>
+  <entry key="1191">Refuser</entry>
+  <entry key="1192">Bonjour,</entry>
+  <entry key="1193">souhaite vous ajouter à sa liste de contacts.</entry>
+  <entry key="1194">Vérifiez vos demandes de contact dans {0} ou cliquez sur les liens pour accepter ou refuser les demandes</entry>
+  <entry key="1195">cet utilisateur est déjà dans vos contacts ou a reçu une invitation à votre liste de contact à laquelle il n'a pas encore répondu.</entry>
+  <entry key="1196">Votre liste de contacts</entry>
+  <entry key="1197">Editez vos contacts et messages,&lt;br/&gt; gérez vos contacts en attente !</entry>
+  <entry key="1198">vous a confirmé comme contact !</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Afficher/Copier le journal du t'chat</entry>
+  <entry key="1201">Journal du t'chat</entry>
+  <entry key="1202">De</entry>
+  <entry key="1203">Sujet</entry>
+  <entry key="1204">Envoyer</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">Nouveau mail</entry>
+  <entry key="1208">Cliquez pour écrire un nouveau message à n'importe quel de vos contacts</entry>
+  <entry key="1209">Ecrire un nouveau message</entry>
+  <entry key="1210">A :</entry>
+  <entry key="1211">Sujet:</entry>
+  <entry key="1212">Activez le zoom 100% et le tableau blanc zoomera de telle sorte que tous les&lt;br/&gt;documents seront visibles suivant la résolution d'écran de chaque participant.</entry>
+  <entry key="1213">Ejecter l'utilisateur</entry>
+  <entry key="1214">Vous ne pouvez pas vous éjecter vous-même de la salle de conférence ! Si vous désirez sortir, fermez votre navigateur ou utilisez le bouton de sortie !</entry>
+  <entry key="1215">Voulez-vous vraiment déconnecter cet utilisateur de cette salle de conférence ?</entry>
+  <entry key="1216">Confirmez l'action...</entry>
+  <entry key="1217">Vous ne pouvez pas éjecter un super-modérateur d'une salle !</entry>
+  <entry key="1218">Réserver une salle de conférence</entry>
+  <entry key="1219">Début</entry>
+  <entry key="1220">Fin</entry>
+  <entry key="1221">Ajouter une requête opionnelle pour la réunion et créer la salle. L'événement sera alors copié dans le calendrier de chaque participant.</entry>
+  <entry key="1222">Boite de réception</entry>
+  <entry key="1223">Envoyé</entry>
+  <entry key="1224">Poubelle</entry>
+  <entry key="1225">C'est vous ! Vous ne pouvez pas vous ajouter vous-même à vos propres contacts.</entry>
+  <entry key="1226">L'utilisateur a déjà été refusé !</entry>
+  <entry key="1227">L'utilisateur a déjà été approuvé !</entry>
+  <entry key="1228">Le hachage de ce contact n'est pas valide !</entry>
+  <entry key="1229">Utilisateur ajouté à la liste de contact !</entry>
+  <entry key="1230">Utilisateur refusé comme contact et supprimé de la liste des contacts en attente !</entry>
+  <entry key="1231">Il n'y a pas un tel contact !</entry>
+  <entry key="1232">Vous voulez vraiment supprimer ce contact ?</entry>
+  <entry key="1233">Confirmez la suppression du contact</entry>
+  <entry key="1234">Supprimer le contact de la liste</entry>
+  <entry key="1235">Profil utilisateur</entry>
+  <entry key="1236">Afficher le profil utilisateur</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Chercher</entry>
+  <entry key="1239">Tout sélectionner</entry>
+  <entry key="1240">Sélectionner aucun</entry>
+  <entry key="1241">Sélectionner non lus</entry>
+  <entry key="1242">Sélectionner lus</entry>
+  <entry key="1243">Déplacer vers répertoire...</entry>
+  <entry key="1244">Ajouter nouveau répertoire...</entry>
+  <entry key="1245">Supprimer</entry>
+  <entry key="1246">Des mails effacés se trouvent toujours dans votre poubelle !</entry>
+  <entry key="1247">Marquer non lu</entry>
+  <entry key="1248">Marquer lu</entry>
+  <entry key="1249">Répondre</entry>
+  <entry key="1250">Répondre à tous</entry>
+  <entry key="1251">Faire suivre</entry>
+  <entry key="1252">Actions...</entry>
+  <entry key="1253">Envoyer un message privé</entry>
+  <entry key="1254">Rien de sélectionné !</entry>
+  <entry key="1255">Déplacer dans la boite de réception</entry>
+  <entry key="1256">Supprimer (final)</entry>
+  <entry key="1257">Cette action ne peut être annulée !</entry>
+  <entry key="1258">Créer dossier</entry>
+  <entry key="1259">Ajouter des dossiers et organiser vos messages !</entry>
+  <entry key="1260">Ajouter un dossier</entry>
+  <entry key="1261">Ajouter</entry>
+  <entry key="1262">Supprimer un dossier</entry>
+  <entry key="1263">Vous ne pouvez supprimer ce dossier, il contient toujours des messages ! Supprimez-les d'abord ou déplacez-les vers un autre dossier.</entry>
+  <entry key="1264">Editer le nom</entry>
+  <entry key="1265">Voulez-vous vraiment supprimer ce dossier ? Il n'est pas possible d'annuler cette action par la suite.</entry>
+  <entry key="1266">Votre demande a été envoyée à l'utilisateur. L'utilisateur va recevoir une notification pour accepter ou refuser votre demande. Bien évidemment, seules les demandes acceptées se trouvent dans vore liste de contacts !</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">L'utilisateur ne partage pas ses données personnelles de contact.</entry>
+  <entry key="1269">L'utilisateur ne partage ses données personnelles de contact qu'avec ses contacts.</entry>
+  <entry key="1270">Adresse &amp; tél.</entry>
+  <entry key="1271">Votre code d'invitation n'est pas valide, le code n'est valide que durant cette date et heure spécifiques :</entry>
+  <entry key="1272">Cet événement est connecté à plusieurs calendriers d'autres utilisateurs. Vos modifications seront également mises-à-jour dans leurs calendriers. Voulez*-vous vraiment mettre à jour l'événement ?</entry>
+  <entry key="1273">Confirmez la mise à jour</entry>
+  <entry key="1274">Permettre au contact de voir le calendrier (voir seulement)</entry>
+  <entry key="1275">Ne pas partager le calendrier</entry>
+  <entry key="1276">Calendriers des contacts</entry>
+  <entry key="1277">Vos contacts doivent vous approuver d'abord avant que vous ne puissiez voir leurs calendriers.</entry>
+  <entry key="1278">Vous ne pouvez pas enregistrer ou supprimer des événements d'un autre calendrier que le vôtre !</entry>
+  <entry key="1279">Montrer mon propre calendrier à nouveau !</entry>
+  <entry key="1280">Cet événement est connecté à plusieurs calendriers d'autres utilisateurs. Votre action va également supprimer l'événement de leurs calendriers. Voulez-vous vraiment supprimer cet événement ?</entry>
+  <entry key="1281">Confirmez l'action</entry>
+  <entry key="1282">Entrer dans la salle</entry>
+  <entry key="1283">Accéder à la salle de conférence</entry>
+  <entry key="1284">Il y a un événement et une salle de conférence liée à ce message privé.</entry>
+  <entry key="1285">Vous devez enregistrer l'événement d'abord !</entry>
+  <entry key="1286">Il n'y a pas de telle salle libre. L'événement dans le calendrier et de la salle associée a déjà été supprimé !</entry>
+  <entry key="1287">Choisissez votre pseudo</entry>
+  <entry key="1288">Prénom</entry>
+  <entry key="1289">Nom</entry>
+  <entry key="1290">E-mail</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Longueur minimum de 4 caractères pour le prénom et le nom.</entry>
+  <entry key="1293">Veuillez entrer un e-mail valide !</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Vous connecter avec votre login Facebook</entry>
+  <entry key="1296">Date inscr.</entry>
+  <entry key="1297">Vous êtes connecté avec votre compte Facebook. Vous devriez mettre à jour votre profil avec l'e-mail correct. Sans quoi vous ne recevrez pas les invitations et messages privés des autres utilisateurs.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Ne plus montrer le message de mise à jour du profil</entry>
+  <entry key="1300">plus d'options d'affichage...</entry>
+  <entry key="1301">Nouveau message privé :</entry>
+  <entry key="1302">Cliquez ici pour aller dans votre profil et voir le message complet...</entry>
+  <entry key="1303">Répondre</entry>
+  <entry key="1304">Salles et t'chats</entry>
+  <entry key="1305">Mes salles</entry>
+  <entry key="1306">Ma salle de conférence (pour 1-16 utilisateurs)</entry>
+  <entry key="1307">Ma salle webinar (pour 1-120 utilisateurs)</entry>
+  <entry key="1308">Id du propriétaire</entry>
+  <entry key="1309">Veuillez entrer un mot de passe</entry>
+  <entry key="1310">Vous devez avoir un compte de niveau Utilisateur, Modérateur ou Administrateur</entry>
+  <entry key="1311">Service-Web (accessible seulement via SOAP)</entry>
+  <entry key="1312">Charger directement sur le tableau blanc</entry>
+  <entry key="1313">Voulez-vous vraiment supprimer ce tableau blanc ? Cette action ne peut être annulée !</entry>
+  <entry key="1314">Charger sur le tableau blanc</entry>
+  <entry key="1315">N'oubliez pas de commencer l'enregistrement ! Un utilisateur par salle doit toujours le commencer si vous souhaitez avoir l'enregistrement par la suite.</entry>
+  <entry key="1316">Commencer l'enregistrement</entry>
+  <entry key="1317">Flèche</entry>
+  <entry key="1318">Cercle</entry>
+  <entry key="1319">Ligne</entry>
+  <entry key="1320">Carré</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Texte/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Dessin libre</entry>
+  <entry key="1325">Sélectionner/Déplacer</entry>
+  <entry key="1326">Dessiner Formes</entry>
+  <entry key="1327">Couper/Déplacer</entry>
+  <entry key="1328">Zoom +/-</entry>
+  <entry key="1329">Imprimer</entry>
+  <entry key="1330">Défaire</entry>
+  <entry key="1331">Poubelle</entry>
+  <entry key="1332">Ajouter Grille</entry>
+  <entry key="1333">Partager Fichier</entry>
+  <entry key="1334">Sélectionner Forme</entry>
+  <entry key="1335">Sélectionner Clipart</entry>
+  <entry key="1336">Copier</entry>
+  <entry key="1337">Couper</entry>
+  <entry key="1338">Coller</entry>
+  <entry key="1339">Effacer</entry>
+  <entry key="1340">Voulez-vous vraiment effacer le contenu entier du tableau blanc ?</entry>
+  <entry key="1341">Charger directement sur le tableau blanc</entry>
+  <entry key="1342">Participants</entry>
+  <entry key="1343">Gestionnaire de participants</entry>
+  <entry key="1344">Présent</entry>
+  <entry key="1345">Contrôle à distance</entry>
+  <entry key="1346">Ejecter</entry>
+  <entry key="1347">T'chat</entry>
+  <entry key="1348">Inviter Participants</entry>
+  <entry key="1349">Par e-mail</entry>
+  <entry key="1350">L'utilisateur est modérateur</entry>
+  <entry key="1351">L'utilisateur a sa webcam connectée</entry>
+  <entry key="1352">Désactiver le remplissage de forme</entry>
+  <entry key="1353">Activer le remplissage de forme</entry>
+  <entry key="1354">Aimanter à la grille</entry>
+  <entry key="1355">Autoriser l'enregistrement</entry>
+  <entry key="1356">Attendre l'enregistrement</entry>
+  <entry key="1357">Cacher la barre supérieure</entry>
+  <entry key="1358">Jouer la vidéo</entry>
+  <entry key="1359">Voulez-vous vraiment supprimer le contenu du document actif ?</entry>
+  <entry key="1360">Accepter et donner le droit à l'utilisateur</entry>
+  <entry key="1361">Refuser</entry>
+  <entry key="1362">Je</entry>
+  <entry key="1363">Activités et actions</entry>
+  <entry key="1364">Supprimer le tableau blanc</entry>
+  <entry key="1365">Vous devez avoir la modération ou le droit de dessiner sur le tableau blanc pour supprimer un tableau blanc !</entry>
+  <entry key="1366">Pas permis</entry>
+  <entry key="1367">a quitté la salle.</entry>
+  <entry key="1368">Icônes mathématiques</entry>
+  <entry key="1369">Pas de catégorie</entry>
+  <entry key="1370">Style de couleurs</entry>
+  <entry key="1371">Qualité</entry>
+  <entry key="1372">Domaine</entry>
+  <entry key="1373">Aller à</entry>
+  <entry key="1374">rouge-orange</entry>
+  <entry key="1375">vert océan</entry>
+  <entry key="1376">bleu acier</entry>
+  <entry key="1377">bleu acier clair</entry>
+  <entry key="1378">rouge doré</entry>
+  <entry key="1379">gris argent</entry>
+  <entry key="1380">défini par l'utilisateur</entry>
+  <entry key="1381">meilleur</entry>
+  <entry key="1382">charger/déposer</entry>
+  <entry key="1383">moyen</entry>
+  <entry key="1384">Couper le micro globalement</entry>
+  <entry key="1385">Activer le micro globalement</entry>
+  <entry key="1386">Couper le micro des autres</entry>
+  <entry key="1387">Votre micro a été globalement coupé par le modérateur. Vous ne pouvez pas l'activer vous-même !</entry>
+  <entry key="1388">Couper le micro globalement ?</entry>
+  <entry key="1389">Voulez-vous vraiment couper votre propre micro globalement ? Plus personne ne pourra plus vous entendre !</entry>
+  <entry key="1390">Couper le micro localement ?</entry>
+  <entry key="1391">Voulez-vous vraiment couper ce micro ? Vous ne pouvez le couper que localement sur votre écran. Cela n'a pas d'effet sur les autres utilisateurs. Seuls les modérateurs peuvent couper un micro globalement !</entry>
+  <entry key="1392">Couper le micro globalement ?</entry>
+  <entry key="1393">Voulez-vraiment couper le micro de cet utilisateur globalement ? Plus personne ne pourra l'entendre !</entry>
+  <entry key="1394">Votre micro est allumé. Cliquez ici pour envoyer un message au modérateur afin qu'il coupe votre micro globalement (dans toute la salle) !</entry>
+  <entry key="1395">Votre micro est coupé. Cliquez ici pour envoyer un message au modérateur afin qu'il active votre micro globalement (dans toute la salle) !</entry>
+  <entry key="1396">souhaite que le modérateur coupe mon micro globalement.</entry>
+  <entry key="1397">souhaite que le modérateur active mon micro globalement.</entry>
+  <entry key="1398">souhaite que le modérateur active son micro.</entry>
+  <entry key="1399">souhaite que le modérateur coupe son micro.</entry>
+  <entry key="1400">Activer micro. Cliquez ici pour couper son micro globalement !</entry>
+  <entry key="1401">Couper micro. Cliquez ici pour activer son micro globalement !</entry>
+  <entry key="1402">Le micro de cet utilisateur est coupé globalement par le modérateur. Vous ne pouvez pas l'activer !</entry>
+  <entry key="1403">Couper votre micro globalement</entry>
+  <entry key="1404">Activer votre micro globalement</entry>
+  <entry key="1405">Couper micro</entry>
+  <entry key="1406">Activer micro</entry>
+  <entry key="1407">Couper le micro globalement</entry>
+  <entry key="1408">Activer micro globalement</entry>
+  <entry key="1409">Seuls les modérateurs peuvent couper ou activer le micro d'un utilisateur globalement ! Pour couper votre propre micro : veuillez utiliser l'icône microphone sur votre fenêtre vidéo !</entry>
+  <entry key="1410">Nom du sondage</entry>
+  <entry key="1411">Vous</entry>
+  <entry key="1412">Sondages</entry>
+  <entry key="1413">actif</entry>
+  <entry key="1414">Simple graphique</entry>
+  <entry key="1415">Graphique camembert</entry>
+  <entry key="1416">Veuillez entrer e-mail</entry>
+  <entry key="1417">Nouveau(x) message(s)</entry>
+  <entry key="1418">Clôturer</entry>
+  <entry key="1419">Etes-vous sûr de vouloir clore ce sondage ? Plus personne ne pourra plus voter.</entry>
+  <entry key="1420">Supprimer</entry>
+  <entry key="1421">Etes-vous sûr de vouloir supprimer ce sondage ? Les résultats seront supprimés également.</entry>
+  <entry key="1422">Code IS de la langue</entry>
+  <entry key="1423">Autoriser/Refuser le droit de donner l'audio exclusif</entry>
+  <entry key="1424">Autoriser l'utilisateur à donner l'audio exclusif</entry>
+  <entry key="1425">Refuser à l'utilisateur de donner l'audio exclusif</entry>
+  <entry key="1426">souhaite avoir la permission d'avoir l'audio exclusif.</entry>
+  <entry key="1427">souhaite que le modérateur me donne la permission d'audio exclusif.</entry>
+  <entry key="1428">Donner une permission d'audio exclusif.</entry>
+  <entry key="1429">Résolution caméra</entry>
+  <entry key="1430">Changer la résolution affecte la bande passante, une image plus grande à besoin de plus de bande passante !</entry>
+  <entry key="1431">Vous n'avez pas l'autorisation de vous donner à vous ou aux autres l'audio exclusif. Vous devez demander cette autorisation au modérateur ou lui demander de le faire.</entry>
+  <entry key="1432">Je souhaite avoir le droit d'avoir l'audio exclusif</entry>
+  <entry key="1433">Me donne l'audio exclusif (alternativement cliquez sur votre fenêtre vidéo ou appuyez sur F12)</entry>
+  <entry key="1434">Microphone est allumé !</entry>
+  <entry key="1435">Microphone est coupé !</entry>
+  <entry key="1436">Cacher le t'chat</entry>
+  <entry key="1437">Cacher les activités</entry>
+  <entry key="1438">Cacher l'explorateur de fichiers</entry>
+  <entry key="1439">Cacher le menu actions</entry>
+  <entry key="1440">Cacher le partage d'écran</entry>
+  <entry key="1441">Cacher le tableau blanc</entry>
+  <entry key="1442">Afficher le statut du micro</entry>
+  <entry key="1443">Options de disposition</entry>
+  <entry key="1444">Nouvel événement</entry>
+  <entry key="1445">Les liens envoyés aux participants pour une conférence lorsque vous sauvez le calendrier sont protégés par mot de passe, pas la salle ! Cela signifie que si vous sauvez l'événement plusieurs fois avec un mot de passe différent, chaque participant recevra un nouveau lien avec un mot de passe différent. Les anciens liens sont toujours valables une fois envoyés !</entry>
+  <entry key="1446">Editer les détails</entry>
+  <entry key="1447">Afficher composeur SIP</entry>
+  <entry key="1448">Appeler</entry>
+  <entry key="1449">Afficher les événements du contact</entry>
+  <entry key="1450">Votre page d'accueil</entry>
+  <entry key="1451">Organiser les réunions</entry>
+  <entry key="1452">Regarder les enregistrements et les interviews</entry>
+  <entry key="1453">Choisir et démarrer une conférence</entry>
+  <entry key="1454">Gérer les utilisateurs et les droits</entry>
+  <entry key="1455">Gérer les connections et éjecter des utilisateurs</entry>
+  <entry key="1456">Gérer les groupes d'utilisateurs</entry>
+  <entry key="1457">Gérer les salles de conférences</entry>
+  <entry key="1458">Gérer les paramètres système</entry>
+  <entry key="1459">Gérer les étiquettes et les formulations</entry>
+  <entry key="1460">Gérer les configurations LDAP et ADS</entry>
+  <entry key="1461">Exporter/Importer les sauvegardes système</entry>
+  <entry key="1462">Vous devez être modérateur ou avoir le droit d'accéder au tableau blanc pour pouvoir déposer ou télécharger des fichiers ou pour ajouter ou supprimer des dossiers.</entry>
+  <entry key="1463">Editer texte</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publier</entry>
+  <entry key="1466">Commencer la diffusion</entry>
+  <entry key="1467">Arrêter la diffusion</entry>
+  <entry key="1468">Hôte</entry>
+  <entry key="1469">App</entry>
+  <entry key="1470">ID</entry>
+  <entry key="1471">Réduisez la largeur de l'écran avant de le déplacer</entry>
+  <entry key="1472">Réduisez la hauteur de l'écran avant de le déplacer</entry>
+  <entry key="1473">Réduisez 'x' avant d'agrandir</entry>
+  <entry key="1474">Réduisez 'y' avant d'agrandir</entry>
+  <entry key="1475">Complétez ces paramètres pour diffuser votre écran vers un site tiers.</entry>
+  <entry key="1476">Veuillez démarrer le partage d'écran pour pouvoir le diffuser</entry>
+  <entry key="1477">La permission du modérateur est requise pour enregistrer</entry>
+  <entry key="1478">Vous n'avez pas la permission de donner l'audio exclusif à un participant. Vous devez être modérateur ou avoir le droit de donner l'audio exclusif.</entry>
+  <entry key="1479">Charger un fichier</entry>
+  <entry key="1480">Ouvre la fenêtre des paramètres du partage d'écran</entry>
+  <entry key="1481">Un modérateur existant doit l'approuver</entry>
+  <entry key="1482">Demander au modérateur de pouvoir partager votre micro/caméra</entry>
+  <entry key="1483">Proposez aux utilisateurs de voter en répondant à un sondage</entry>
+  <entry key="1484">Les résultats graphiques des sondages</entry>
+  <entry key="1485">Voter s'il existe un sondage activé dans cette salle</entry>
+  <entry key="1486">Editer les paramètres de la caméra et du micro</entry>
+  <entry key="1487">Confirmer et quitter la salle</entry>
+  <entry key="1488">Appeler une personne extérieure via VoIP/SIP</entry>
+  <entry key="1489">Envoyer un mail avec un lien direct vers cette salle</entry>
+  <entry key="1490">Changer les paramètres de votre tableau blanc</entry>
+  <entry key="1491">Taille maximum</entry>
+  <entry key="1492">Demander au modérateur le droit de partager votre tableau blanc</entry>
+  <entry key="1493">Démarrer t'chat privé</entry>
+  <entry key="1494">Tous</entry>
+  <entry key="1495">Vous ne pouvez pas démarrer un t'chat privé avec vous-même.</entry>
+  <entry key="1496">Vous avez déjà démarré un t'chat privé avec ce participant.</entry>
+  <entry key="1497">Voulez-vous vraiment supprimer ce t'chat privé ?</entry>
+  <entry key="1498">Serveurs</entry>
+  <entry key="1499">Serveurs dans le groupe</entry>
+  <entry key="1500">Nom du serveur</entry>
+  <entry key="1501">Adresse du serveur</entry>
+  <entry key="1502">Détails du serveur</entry>
+  <entry key="1503">Envoyer SMS</entry>
+  <entry key="1504">Publier. Utilisateur :</entry>
+  <entry key="1505">Pour économiser du temps et de la bande passante vous pouvez utiliser la ligne de commande pour sauvegarder/restaurer/mettre à niveau votre système &lt;ol&gt; &lt;li&gt;Aller dans le répertoire d'installation d'OM (par ex. /opt/red5)&lt;/li&gt; &lt;li&gt;Arrêter OM (par ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/nom_du_backup.zip (créer la sauvegarde d'OM)&lt;/li&gt; &lt;li&gt;télécharger la nouvelle version d'OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (déplacer la version d'OM qui fonctionne par sécurité.)&lt;/li&gt; &lt;li&gt;extraire la nouvelle version d'OM dans /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (ou './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' dans le cas d'une BD qui n'est pas celle par défaut )&lt;/li&gt; &lt;li&gt;Démarrer OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Salles pour tous les utilisateurs</entry>
+  <entry key="1507">Salles pour les utilisateurs du groupe actuel</entry>
+  <entry key="1508">Salles de l'utilisateur</entry>
+  <entry key="1509">Créer/Modifier salle particulière</entry>
+  <entry key="1510">Vous pouvez entrer plusieurs adresses sous le format : prénom1 nom1 &lt;e-mail1&gt;,"prénom2 nom2" &lt;e-mail2&gt;,'prénom3 nom3' &lt;e-mail3&gt;, ...</entry>
+  <entry key="1511">Ajuster le volume</entry>
+  <entry key="1512">Ajuster le volume du micro</entry>
+  <entry key="1513">T'chat est-t-il modéré</entry>
+  <entry key="1514">Autoriser les messages</entry>
+  <entry key="1515">Panneau de t'chat ouvert par défaut</entry>
+  <entry key="1516">Panneau des fichiers ouvert par défaut</entry>
+  <entry key="1517">Dernier ping</entry>
+  <entry key="1518">Chaque 'esclave' envoie un ping au maitre toutes les 3 secondes (configurable). Le dernier ping doit être inférieur à 1 minute pour que le maitre utilise l'esclave.</entry>
+  <entry key="1519">Port HTTP</entry>
+  <entry key="1520">Utilisateur (Accès SOAP)</entry>
+  <entry key="1521">Mot de passe</entry>
+  <entry key="1522">Chemin vers Webapp</entry>
+  <entry key="1523">Protocole</entry>
+  <entry key="1524">Ping</entry>
+  <entry key="1525">Actif</entry>
+  <entry key="1526">Générer URL</entry>
+  <entry key="1527">Test réseau</entry>
+  <entry key="1528">Sélection auto de la fenêtre vidéo de l'interview</entry>
+  <entry key="1529">Souligné</entry>
+  <entry key="1530">Style de police</entry>
+  <entry key="1531">Autoriser les styles de police</entry>
+  <entry key="1532">Couleur de police</entry>
+  <entry key="1533">Hyperlien</entry>
+  <entry key="1534">Montrer les statistiques de session</entry>
+  <entry key="1535">Détails de session</entry>
+  <entry key="1536">Importer Système</entry>
+  <entry key="1537">Inclure les fichiers uploadés et les enregistrements dans le backup</entry>
+  <entry key="1538">Activer le transport SIP dans la salle</entry>
+  <entry key="1539">Voulez-vous vraiment donner l'audio exclusif à cet utilisateur ?</entry>
+  <entry key="1540">Veuillez spécifier votre fuseau horaire</entry>
+  <entry key="1541">conférence (1-25 utilisateurs)</entry>
+  <entry key="1542">restreint (1-150 utilisateurs)</entry>
+  <entry key="1543">interview (1:1 réunion avec enregistrement)</entry>
+  <entry key="1544">Une configuration avec cette clé existe déjà, veuillez spécifier une autre clé ou éditer la configuration existante</entry>
+  <entry key="1545">Sauvegarde, veuillez patienter.</entry>
+  <entry key="1546">Bienvenue</entry>
+  <entry key="1547">Widget affichant les infos de base des utilisateurs et les liens pour le support</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Activer l'upload et l'import d'images vers le tableau blanc<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Installez <strong>ImageMagick</strong> sur le serveur. Vous trouverez plus d'informations à l'adresse <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>.
+					Les instructions d'installation peuvent être trouvées ici <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>. Sur la majorité des systèmes linux vous pouvez le trouver via votre manager de paquets (apt-get).
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Activer l'import de fichiers PDF sur le tableau blanc<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Installez <strong>GhostScript</strong> sur le serveur. Vous trouverez plus d'information sur <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>. 
+					Sur la majorité des systèmes linux vous pouvez le trouver via votre manager de paquets (apt-get).
+				</li>
+				<li>Installez <strong>SWFTools</strong> sur le serveur. Vous trouverez plus d'informations sur <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>. 
+					Certaines distribution de Linux le possède déjà. Voir
+					<a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>).
+					La version recommandée de <strong>SWFTools</strong> est 0.9 - les versions précédentes ont un bug qui modifie les dimensions des objets sur le tableau blanc.
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Activer l'import de documents Office (.doc, .docx, .ppt, .pptx, etc.) sur le tableau blanc<a	href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>Le service OpenOffice</strong> doit être démarré et en écoute sur le port 8100.  Voir <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a> pour plus de détails.</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Activer l'enregistrement et l'import de fichiers vidéo (.avi, .flv, .mov und .mp4) sur le tableau blanc<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Installez <strong>FFmpeg</strong>. Vous devez obtenir la dernière version de FFMPEG ! Pour Windows vous pouvez la télécharger par exemple de <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a>. Pour Linux ou OSx vous devriez utiliser l'une des nombreuses instructions d'installation sur le web.  Vous devez activer libmp3lame !
+				</li>
+				<li>Installez <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					Vous devez installer la dernière version ! SoX 12.xx ne fonctionnera PAS !
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">Si vous avez plus de questions ou avez besoin d'aide pour l'installation ou l'hébergement :</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Support via la communauté OpenMeetings :</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Listes de diffusion</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Support commercial:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Support commercial</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation pour l'environnement de production<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			Par défaut {0} utilise la base de données {1}. Dans un environnement de production vous devriez opter pour
+			{2}, {3}, {4}, {5} or {6}.
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Données utilisateur</entry>
+	<entry key="install.wizard.params.step1.username">Nom d'utilisateur</entry>
+	<entry key="install.wizard.params.step1.username.title">Entrez un nom d'utilisateur</entry>
+	<entry key="install.wizard.params.step1.password">Mot de passe</entry>
+	<entry key="install.wizard.params.step1.password.title">Entrez un mot de passe</entry>
+	<entry key="install.wizard.params.step1.email">E-Mail</entry>
+	<entry key="install.wizard.params.step1.email.title">Entrez une adresse E-Mail</entry>
+	<entry key="install.wizard.params.step1.tz">Fuseau horaire</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domaines)</entry>
+	<entry key="install.wizard.params.step1.group">Nom</entry>
+	<entry key="install.wizard.params.step1.group.title">Entrez le nom de votre organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Autoriser les  nouveaux utilisateurs de s'enregistrer (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Envoyer un E-Mail aux nouveaux utilisateurs (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">Les nouveaux utilisateurs doivent vérifier leur adresse E-Mail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Installer toutes les salles par défaut</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Adresse mail du système (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Entrez l'adresse mail utilisaée par le système</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Entrez un  serveur SMTP</entry>
+	<entry key="install.wizard.params.step2.smtpPort">Port du serveur SMTP (Le port standard est 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Entrez le port du serveur SMTP Normalement 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">Nom d'utilisateur système SMTP (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Entrez le nom d'utilisateur mail du système</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">Mot de passe SMTP (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Entrez le mot de passe mail du système</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Activer TLS pour le serveur mail</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Inclure l'adresse mail de l'organisateur dans le champ des destinataires d'un E-Mail (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Langue par défaut</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Police par défaut pour l'export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Convertisseurs</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> Voir</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Veuillez indiquer le nombre de dpi que swftools devra utiliser lors de la conversion de PDF vers SWF.</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">Vous pouvez vérifier que swftools se trouve dans votre chemin système en tapant pdf2swf dans une ligne de commande. Indiquez combien de dpi swtools devra utiliser pour les conversions PDF vers SWF. (Par défaut : 100 dpi).</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools Qualité JPEG</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Entrez la qualité des images jpec incorporées. 0 étant la moins bonne et 100 la meilleure (par défaut : 85).</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Vous pouvez vérifier que swftools se trouve dans votre chemin système en tapant pdf2swf dans une ligne de commande. 
+						Indiquez la qualité pour les images jpeg. 0 est la moins bonne (taille plus petite), 100 est la meilleure (taille plus grande) (par défaut : 85).</entry>
+	<entry key="install.wizard.params.step3.swfPath">Chemin vers SWFTools</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Indiquez le chemin vers swftools,  par ex. C:/swftools (Windows), ou laissez vide si swftools se trouve déjà dans le chemin système.</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		Vous pouvez vérifier que swftools se trouve dans votre chemin système en tapant pdf2swf dans une ligne de commande. Si le résultat de cette commande vous montre une liste d'options, laissez ce champ vide, dans le cas contraire veuillez indiquer le chemin vers swftools.
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">Chemin vers ImageMagick</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Indiquez le chemin vers ImageMagick dans le cas où ImageMagick ne se trouve pas dans le chemin système.</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">Chemin vers FFMPEG</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Indiquez le chemin vers FFMPEG dans le cas où FFMPEG ne se trouve pas dans le chemin système.</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">Chemin vers SoX</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Indiquez le chemin vers SoX dans le cas où SoX ne se trouve pas dans le chemin système.</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">Chemin vers JOD</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">Chemin vers la bibliothèque JOD (http://code.google.com/p/jodconverter). Configurez le chemin pour pointer vers le répertoire lib de JOD qui contient également le fichier jodconverter-core-version.jar.</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">Chemin vers OpenOffice-/LibreOffice pour jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">Chemin vers OpenOffice/LibreOffice (optionnel). Indiquez le chemin réel dans le cas où jodconverter ne pourrait pas trouver l'installation de OpenOffice-/LibreOffice automatiquement.</entry>
+	<entry key="install.wizard.params.step3.officePath.text">Chemin vers OpenOffice/LibreOffice (optionnel). Indiquez le chemin réel dans le cas où jodconverter ne pourrait pas trouver l'installation de OpenOffice-/LibreOffice automatiquement.</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Type de cryptage</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Classe de cryptage</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Indiquez le nom de la classe de cryptage. NE MODIFIEZ PAS CECI SI VOUS N'ETES PAS SUR !</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		Vous pouvez utiliser ce cryptage par défaut qui est équivalent à la fonction MD5 de PHP ou style de cryptage BDS en utilisant : 
+		<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		Pour plus d'information ou pour écrire votre propre cryptage voir : <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a>. Vous pouvez éditer cette valeur plus tard MAIS les utilisateurs créés précédemment pourraient ne plus être utilisables. 
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">Configuration red5SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Activer SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Activer l'intégration red5SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">Préfix pour les salles SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Préfix pour le num. de tél. des salles de conférence</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">Contexte des extensions SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Contexte des extensions Asterisk</entry>
+
+	<entry key="install.wizard.install.desc">Veuillez cliquer sur "Finish" pour commencer l'installation !</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Entrer dans l'application</entry>
+	<entry key="install.wizard.congrats.port">Si votre serveur Red5 tourne sur un port différent ou sur un domaine différent</entry>
+	<entry key="install.wizard.congrats.config">modifiez la config du client</entry>
+	<entry key="install.wizard.congrats.mail">Liste de diffusion</entry>
+	<entry key="install.wizard.congrats.commercial">Il existe des sociétés
+		qui offrent un support commercial pour Apache OpenMeetings :</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_gl.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
new file mode 100644
index 0000000..ce8d21e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_gl.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Conferencia</entry>
+  <entry key="2">Xuntanza</entry>
+  <entry key="3">Eventos</entry>
+  <entry key="4">Axustes</entry>
+  <entry key="5">Perfíl</entry>
+  <entry key="6">Administración</entry>
+  <entry key="7">Parar</entry>
+  <entry key="8">Gravar</entry>
+  <entry key="9">Non hai ningín ficheiro dispoñíbel</entry>
+  <entry key="10">Gravado polo profesor</entry>
+  <entry key="11">Usuarios conectados:</entry>
+  <entry key="12">Iniciar unha conferencia</entry>
+  <entry key="13">O meu nome</entry>
+  <entry key="14">Vídeo conferencia</entry>
+  <entry key="15">Enviar un ficheiro</entry>
+  <entry key="16">Actualizar a lista</entry>
+  <entry key="17">Marcar como ficheiro principal</entry>
+  <entry key="18">Nova enquisa</entry>
+  <entry key="19">Nova enquisa para a conferencia</entry>
+  <entry key="20">Pregunta:</entry>
+  <entry key="21">Tipo de enquisa:</entry>
+  <entry key="22">Crear</entry>
+  <entry key="23">Información: Cada usuario conectado recibe unha mensaxe coa nova enquisa.</entry>
+  <entry key="24">Crear unha enquisa</entry>
+  <entry key="25">Cancelar</entry>
+  <entry key="26">Sí/Non</entry>
+  <entry key="27">Valor numérico 1-10</entry>
+  <entry key="28">Enquisa</entry>
+  <entry key="29">Precisase ser moderador para crear unha enquisa.</entry>
+  <entry key="30">O seu voto foi rexistrado</entry>
+  <entry key="31">Xa respostou á enquisa previamente</entry>
+  <entry key="32">Votar!</entry>
+  <entry key="33">A súa resposta:</entry>
+  <entry key="34">Sí</entry>
+  <entry key="35">Non</entry>
+  <entry key="36">desexa coñecer:</entry>
+  <entry key="37">Resultados da enquisa</entry>
+  <entry key="38">Pregunta:</entry>
+  <entry key="39">Resultados:</entry>
+  <entry key="40">Respostas:</entry>
+  <entry key="41">Non hai enquisas</entry>
+  <entry key="42">Votar!</entry>
+  <entry key="43">Reunión (max 4 postos)</entry>
+  <entry key="44">Conferencia (max 50 postos)</entry>
+  <entry key="45">Tipo</entry>
+  <entry key="46">Outros postos</entry>
+  <entry key="47">Xa foi seleccionado</entry>
+  <entry key="48">Entrar</entry>
+  <entry key="49">O moderador abandonou a reunión.</entry>
+  <entry key="50">Información do sistema</entry>
+  <entry key="51">Seleccionar un dispositivo</entry>
+  <entry key="52">Seleccionar a cámara:</entry>
+  <entry key="53">Seleccionar o micrófono:</entry>
+  <entry key="54">Aceptar</entry>
+  <entry key="55">Cancelar</entry>
+  <entry key="56">Precisa volverse conectar</entry>
+  <entry key="57">Editar a configuración</entry>
+  <entry key="58">Curso:</entry>
+  <entry key="59">Idioma:</entry>
+  <entry key="60">Aceptar</entry>
+  <entry key="61">Cancelar</entry>
+  <entry key="62">Borrar o taboleiro</entry>
+  <entry key="63">Desexa limpar o taboleiro antes de engadir outro gráfico?</entry>
+  <entry key="64">Non volver preguntar</entry>
+  <entry key="65">non</entry>
+  <entry key="66">Editar a configuración</entry>
+  <entry key="67">Requirir confirmación antes de limpar o taboleiro</entry>
+  <entry key="68">Información do usuario</entry>
+  <entry key="69">Limpar o taboleiro</entry>
+  <entry key="70">Desfacer</entry>
+  <entry key="71">Refacer</entry>
+  <entry key="72">Seleccionar un obxeto</entry>
+  <entry key="73">Texto</entry>
+  <entry key="74">Pintar</entry>
+  <entry key="75">Debuxar unha liña</entry>
+  <entry key="76">Debuxar un subraiado</entry>
+  <entry key="77">Rectángulo</entry>
+  <entry key="78">Elipse</entry>
+  <entry key="79">Frecha</entry>
+  <entry key="80">Borrar o elemento escollido</entry>
+  <entry key="81">Solicitar ser moderador</entry>
+  <entry key="82">Solicitar</entry>
+  <entry key="83">Cancelar</entry>
+  <entry key="84">Teño unha pregunta</entry>
+  <entry key="85">Pechar</entry>
+  <entry key="86">Cursiva</entry>
+  <entry key="87">Negriña</entry>
+  <entry key="88">ESPERANDO</entry>
+  <entry key="89">Un usuario desexa facerse moderador, pode concederlle acceso só ao taboleiro ou cambiar por completo o rol da moderación. Usuario:</entry>
+  <entry key="90">Aceptar</entry>
+  <entry key="91">Rexeitar</entry>
+  <entry key="92">Cancelar</entry>
+  <entry key="93">Enviando solicitudes aos seguintes usuarios</entry>
+  <entry key="94">Aceptado</entry>
+  <entry key="95">Rexeitado</entry>
+  <entry key="96">Cambiar de moderador</entry>
+  <entry key="97">Vostede non é moderador deste curso!</entry>
+  <entry key="98">Moderador:</entry>
+  <entry key="99">Sentimolo pero esta aula está completa. Ténteo máis tarde</entry>
+  <entry key="100">Elipse</entry>
+  <entry key="101">Pechado</entry>
+  <entry key="102">erro na entrada de datos</entry>
+  <entry key="103">o nome de usuario debe conter alo menos 4 caracteres</entry>
+  <entry key="104">o contrasinal de usuario debe conter alo menos 4 caracteres</entry>
+  <entry key="105">Este nome de usuario xa existe</entry>
+  <entry key="106">Este correo-e xa está rexistrado</entry>
+  <entry key="107">Erro do sistema, por favor contacte co administrador do sistema</entry>
+  <entry key="108">Inicio de sesión</entry>
+  <entry key="109">Usuario ou correo-e:</entry>
+  <entry key="110">Contrasinal:</entry>
+  <entry key="111">Idioma</entry>
+  <entry key="112">Conectarse</entry>
+  <entry key="113">Rexistrarse</entry>
+  <entry key="114">Usuario:</entry>
+  <entry key="115">Contrasinal:</entry>
+  <entry key="116">Contrasinal (de novo):</entry>
+  <entry key="117">Nome:</entry>
+  <entry key="118">Apelido(s):</entry>
+  <entry key="119">Correo Electrónico:</entry>
+  <entry key="120">País:</entry>
+  <entry key="121">Rexistrarse</entry>
+  <entry key="122">Cancelar</entry>
+  <entry key="123">Non está rexistrado?</entry>
+  <entry key="124">Inicio</entry>
+  <entry key="125">Usuarios</entry>
+  <entry key="126">Grupos</entry>
+  <entry key="127">Organizacións</entry>
+  <entry key="128">Salas de xuntanzas</entry>
+  <entry key="129">público</entry>
+  <entry key="130">Organización</entry>
+  <entry key="131">Entrar</entry>
+  <entry key="132">Inicio de sesión</entry>
+  <entry key="133">Contrasinal</entry>
+  <entry key="134">Contrasinal (de novo)</entry>
+  <entry key="135">Nome</entry>
+  <entry key="136">Apelido(s)</entry>
+  <entry key="137">Correo Electrónico</entry>
+  <entry key="138">Data de nacemento</entry>
+  <entry key="139">Enderezo</entry>
+  <entry key="140">Código postal</entry>
+  <entry key="141">País</entry>
+  <entry key="142">Información adicional</entry>
+  <entry key="143">Datos do usuario</entry>
+  <entry key="144">Gardar</entry>
+  <entry key="145">Gardar</entry>
+  <entry key="146">ID do usuario</entry>
+  <entry key="147">Inicio de sesión</entry>
+  <entry key="148">Nome</entry>
+  <entry key="149">Apelido(s)</entry>
+  <entry key="150">Mostrar o seguinte</entry>
+  <entry key="151">Mostrar o anterior</entry>
+  <entry key="152">Eliminar o rexistro</entry>
+  <entry key="153">Cancelar</entry>
+  <entry key="154">Eliminar</entry>
+  <entry key="155">Novo rexistro</entry>
+  <entry key="156">Actualizar o rexistro</entry>
+  <entry key="157">Eliminar o rexistro</entry>
+  <entry key="158">Estado</entry>
+  <entry key="159">desactivado</entry>
+  <entry key="160">activado</entry>
+  <entry key="161">Organizacións</entry>
+  <entry key="162">Calendario</entry>
+  <entry key="163">Pechar</entry>
+  <entry key="164">ID da organización</entry>
+  <entry key="165">Nome</entry>
+  <entry key="166">Usuario</entry>
+  <entry key="167">Moderador</entry>
+  <entry key="168">Administrador</entry>
+  <entry key="169">Nivel de usuario</entry>
+  <entry key="170">Organización</entry>
+  <entry key="171">nome</entry>
+  <entry key="172">Engadir unha organización</entry>
+  <entry key="173">Engadir unha organización</entry>
+  <entry key="174">Cancelar</entry>
+  <entry key="175">Engadir</entry>
+  <entry key="176">Eliminar unha organización</entry>
+  <entry key="177">Usuario</entry>
+  <entry key="178">Engadir un usuario</entry>
+  <entry key="179">Eliminar un usuario</entry>
+  <entry key="180">Engadir un usuario á organización</entry>
+  <entry key="181">Buscar un usuario</entry>
+  <entry key="182">Buscar</entry>
+  <entry key="183">Usuario</entry>
+  <entry key="184">Organización</entry>
+  <entry key="185">Entrar</entry>
+  <entry key="186">Salas de conferencias</entry>
+  <entry key="187">Salas de conferencia</entry>
+  <entry key="188">ID</entry>
+  <entry key="189">Nome</entry>
+  <entry key="190">pública</entry>
+  <entry key="191">Organizacións</entry>
+  <entry key="192">Salas de xuntanzas</entry>
+  <entry key="193">Nome</entry>
+  <entry key="194">Tipo</entry>
+  <entry key="195">Pública</entry>
+  <entry key="196">Comentario</entry>
+  <entry key="197">Gardar e exportar</entry>
+  <entry key="198">cargar</entry>
+  <entry key="199">Gardar como</entry>
+  <entry key="200">Nome do ficheiro</entry>
+  <entry key="201">nome do ficheiro</entry>
+  <entry key="202">Cancelar</entry>
+  <entry key="203">Gardar</entry>
+  <entry key="204">Erro</entry>
+  <entry key="205">Cargando</entry>
+  <entry key="206">Obxetos cargados</entry>
+  <entry key="207">Sincronizando, usuarios en espera:</entry>
+  <entry key="208">Cargando datos de imaxe</entry>
+  <entry key="209">Sincronizando, usuarios en espera:</entry>
+  <entry key="210">Limpar o taboleiro</entry>
+  <entry key="211">limpiar o taboleiro, perderase toda a información do taboleiro</entry>
+  <entry key="212">Confirmar antes de cargar un ficheiro</entry>
+  <entry key="213">Enviar convite</entry>
+  <entry key="214">Enviar convite</entry>
+  <entry key="215">Asunto</entry>
+  <entry key="216">Destinatario</entry>
+  <entry key="217">Mensaxe</entry>
+  <entry key="218">Enviar</entry>
+  <entry key="219">cancelar</entry>
+  <entry key="220">enviar</entry>
+  <entry key="221">Datos do usuario</entry>
+  <entry key="222">O seu alcume para esta conferencia</entry>
+  <entry key="223">Alcume</entry>
+  <entry key="224">Nome</entry>
+  <entry key="225">Apelido(s)</entry>
+  <entry key="226">Correo-e</entry>
+  <entry key="227">Idioma</entry>
+  <entry key="228">entrar</entry>
+  <entry key="229">Cargando</entry>
+  <entry key="230">Cargando datos, espere un momento</entry>
+  <entry key="231">Contrasinal incorrecto</entry>
+  <entry key="232">Por favor introduza dúas veces o mesmo contrasinal con un mínimo de 6 caracteres</entry>
+  <entry key="233">Correo incorrecto</entry>
+  <entry key="234">Vostede introduciu un enderezo de correo electrónico incorrecto</entry>
+  <entry key="235">O rexistro completouse satisfactoriamente</entry>
+  <entry key="236">A súa conta foi creada, a partires deste momento xa pode iniciar unha sesión</entry>
+  <entry key="237">Vostede non pode compartir o seu escritorio neste momento. Alguén está xa a compartir o seu escritorio neste momento.</entry>
+  <entry key="238">Compartición non permitida</entry>
+  <entry key="239">Compartir/gravar o seu escritorio</entry>
+  <entry key="240">Problemas de conexión: O seu largo de banda non é abondo e perderase información. Si a mensaxe se repite con frecuencia solicitelle ao moderador que reduza a calidade.</entry>
+  <entry key="241">Escritorio de:</entry>
+  <entry key="242">Debuxar</entry>
+  <entry key="243">Documento</entry>
+  <entry key="244">Conversa</entry>
+  <entry key="245">Ficheiros</entry>
+  <entry key="246">Membros</entry>
+  <entry key="247">Descargar o documento orixinal</entry>
+  <entry key="248">Descargar o documento en pdf</entry>
+  <entry key="249">Cargar unha presentación no taboleiro</entry>
+  <entry key="250">Configuración</entry>
+  <entry key="251">Arrastrar este obxecto</entry>
+  <entry key="252">Axustar o tamaño do obxecto</entry>
+  <entry key="253">%</entry>
+  <entry key="254">de</entry>
+  <entry key="255">Ir á primeira páxina</entry>
+  <entry key="256">Ir á páxina anterior</entry>
+  <entry key="257">Ir á páxina seguinte</entry>
+  <entry key="258">Ir á última páxina</entry>
+  <entry key="259">Diminuir Zoom</entry>
+  <entry key="260">Aumentar Zoom</entry>
+  <entry key="261">Sr.</entry>
+  <entry key="262">Sra.</entry>
+  <entry key="263">Configuración</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Chave</entry>
+  <entry key="266">Configuración</entry>
+  <entry key="267">Chave</entry>
+  <entry key="268">última actualización</entry>
+  <entry key="269">actualizado por</entry>
+  <entry key="270">comentar</entry>
+  <entry key="271">Valor</entry>
+  <entry key="272">de</entry>
+  <entry key="273">Usuarios</entry>
+  <entry key="274">Eliminar un usuario da organización</entry>
+  <entry key="275">E</entry>
+  <entry key="276">Este usuario xa é membro da organización</entry>
+  <entry key="277">Novas</entry>
+  <entry key="278">Ligazóns rápidas</entry>
+  <entry key="279">Ir á conferencia</entry>
+  <entry key="280">Ir ao auditorio</entry>
+  <entry key="281">Axuda e asistencia</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Informar dun fallo!</entry>
+  <entry key="285">máis</entry>
+  <entry key="286">Sitio web do proxecto (http://openmeetings.apache.org)</entry>
+  <entry key="287">Lista de correo do Proxecto (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Lembrar o inicio de sesión</entry>
+  <entry key="289">Contido</entry>
+  <entry key="290">A miña páxina de inicio</entry>
+  <entry key="291">As miñas xuntanzas programadas</entry>
+  <entry key="292">Os meus eventos programados</entry>
+  <entry key="293">Xuntanzas públicas</entry>
+  <entry key="294">Xuntanzas privadas</entry>
+  <entry key="295">Eventos públicos</entry>
+  <entry key="296">Eventos privados</entry>
+  <entry key="297">Contido público</entry>
+  <entry key="298">Contido privado</entry>
+  <entry key="299">Contido persoal</entry>
+  <entry key="300">...</entry>
+  <entry key="301">Moderación</entry>
+  <entry key="302">Teño unha pregunta</entry>
+  <entry key="303">Enquisas</entry>
+  <entry key="304">Seleccione un ficheiro</entry>
+  <entry key="305">Axustes</entry>
+  <entry key="306">Axustes de cámara e micrófono</entry>
+  <entry key="307">Configuración do taboleiro</entry>
+  <entry key="308">Saír</entry>
+  <entry key="309">Volver ás salas</entry>
+  <entry key="310">Saír</entry>
+  <entry key="311">Esqueceu o seu contrasinal?</entry>
+  <entry key="312">Restablecer o contrasinal</entry>
+  <entry key="313">Por correo-e</entry>
+  <entry key="314">Por inicio de sesión</entry>
+  <entry key="315">O seu correo-e</entry>
+  <entry key="316">O seu inicio de seción</entry>
+  <entry key="317">Enviar correo-e con ligazón de restablecemento</entry>
+  <entry key="318">Nose atopou o enderezo de correo electrónico. Asegúrese de introducir o mesmo enderezo de correo electrónico que utilizou para crear a súa conta.</entry>
+  <entry key="319">Escriba o seu correo-e ou o nome de usuario</entry>
+  <entry key="320">Non hai ningun usuario con este nome</entry>
+  <entry key="321">Enviouselle un correo-e cunha ligazón especial, revise a súa bandexa de entrada de correo. Se non atopa este correo revise a configuración de spam do seu servidor e reenvie o correo de confirmación.</entry>
+  <entry key="322">Erro</entry>
+  <entry key="323">Mensaxe</entry>
+  <entry key="324">Non se atopou ó usuario (hash incorrecto).</entry>
+  <entry key="325">Xerar contrasinal</entry>
+  <entry key="326">Inicio de sesión</entry>
+  <entry key="327">cambiar o contrasinal</entry>
+  <entry key="328">novo contrasinal</entry>
+  <entry key="329">volva a escribir o contrasinal</entry>
+  <entry key="330">Os contrasinais introducidos non son identicos.</entry>
+  <entry key="331">Escriba 4 ou máis caracteres. Diferéncianse as maiúsculas</entry>
+  <entry key="332">Cambiouse o contrasinal, agora pode a iniciar sesión.</entry>
+  <entry key="333">Aceptar</entry>
+  <entry key="334">Erro descoñecido. Informe ao administradores.</entry>
+  <entry key="335">Non se atopou o nome de usuario</entry>
+  <entry key="336">Contrasinal incorrecto</entry>
+  <entry key="337">Vostede saiu do sistema</entry>
+  <entry key="338">A ferramenta de rexistro está desactivada.</entry>
+  <entry key="339">Correo-e incorrecto</entry>
+  <entry key="340">nome de ficheiro duplicado, por favor elixa outro</entry>
+  <entry key="341">o nome de ficheiro é moi curto</entry>
+  <entry key="342">Non se puido gardar o enderezo</entry>
+  <entry key="343">O usuario foi engadido, máis deberá engadilo a unha organización, ou non poderá conectarse.</entry>
+  <entry key="344">Nova gravación</entry>
+  <entry key="345">Non se atopou un campo neste FieldId.</entry>
+  <entry key="346">Non se atopou unha etiqueta para este campo.</entry>
+  <entry key="347">Precisase autorización do administrador</entry>
+  <entry key="348">Editor de idioma.</entry>
+  <entry key="349">Idioma</entry>
+  <entry key="350">ID da etiqueta</entry>
+  <entry key="351">Nome da etiqueta</entry>
+  <entry key="352">Valor</entry>
+  <entry key="353">Valores do campo</entry>
+  <entry key="354">Nome da etiqueta</entry>
+  <entry key="355">Valor da etiqueta</entry>
+  <entry key="356">ID da etiqueta</entry>
+  <entry key="357">Vostede só eliminou a etiqueta pero NON o campo! Non se pode eliminar un campo, é probábel que existan etiquetas noutros idiomas.</entry>
+  <entry key="358">ID de etiqueta incorrecto. O seu FieldLanguagesvalues_Id non se atopou na base de datos.</entry>
+  <entry key="359">Vostede non pode eliminar este campo, só pode eliminar etiquetas, NON campos. Non hai unha etiqueta cargada polo momento, ou non hai ningún campo seleccionado, ou non é unha etiqueta para este idioma para o campo definido.</entry>
+  <entry key="360">exportar</entry>
+  <entry key="361">Precisa pechar a sesión para ver os cambio.</entry>
+  <entry key="362">Engadir un novo idioma</entry>
+  <entry key="363">eliminar un idioma</entry>
+  <entry key="364">Engadir un novo idioma</entry>
+  <entry key="365">Nome</entry>
+  <entry key="366">engadir un idioma</entry>
+  <entry key="367">Copia de seguranza</entry>
+  <entry key="368">ir ao inicio</entry>
+  <entry key="369">ir á anterior</entry>
+  <entry key="370">ir á seguinte</entry>
+  <entry key="371">ir ao final</entry>
+  <entry key="372">o usuario fala (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">acender ou apagar o son</entry>
+  <entry key="374">Sistema</entry>
+  <entry key="375">Os seus axustes</entry>
+  <entry key="376">ola!</entry>
+  <entry key="377">Editar o seu perfil</entry>
+  <entry key="378">Novas mensaxes:</entry>
+  <entry key="379">Cargar unha nova imaxe</entry>
+  <entry key="380">Datos do usuario - Exportar</entry>
+  <entry key="381">Todas as organizacións deben existir previamente!</entry>
+  <entry key="382">iniciar a exportación</entry>
+  <entry key="383">Por organización</entry>
+  <entry key="384">iniciar a exportación</entry>
+  <entry key="385">Datos do usuario - Importar</entry>
+  <entry key="386">elixa users.xml</entry>
+  <entry key="387">importar</entry>
+  <entry key="388">Exportar a XML - Estos ficheiros poden ser usados para:&lt;br/&gt; - Contribuir ao proxecto - Importalos a outro sistema&lt;br/&gt; - Copia de seguranza - Personalización&lt;br/&gt; - Colocalo no directorio de idiomas para a próxima instalación.</entry>
+  <entry key="389">Seleccione un ficheiro de idioma a importar. &lt;br/&gt;Seleccione correctamente o idioma no selector! &lt;br/&gt;non importa cal sexa o nome do ficheiro, &lt;br/&gt;será importado a ese idioma!</entry>
+  <entry key="390">importar - escoller ficheiro</entry>
+  <entry key="391">Gardar como...</entry>
+  <entry key="392">Nome:</entry>
+  <entry key="393">Comentario:</entry>
+  <entry key="394">gardar</entry>
+  <entry key="395">Gravacións</entry>
+  <entry key="396">Visor de gravacións</entry>
+  <entry key="397">Gravacións de salas públicas e privadas</entry>
+  <entry key="398">Usuarios:</entry>
+  <entry key="399">Unido:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Usuarios na sala:</entry>
+  <entry key="402">actualizar</entry>
+  <entry key="403">A sala está chea, por favor tenteo nuns minutos.</entry>
+  <entry key="404">prema nunha sala para ver os detalles</entry>
+  <entry key="405">Conversar cos usuarios desta sala:</entry>
+  <entry key="406">Sala:</entry>
+  <entry key="407">Usuarios nesta sala:</entry>
+  <entry key="408">desde:</entry>
+  <entry key="409">reproducir a gravación</entry>
+  <entry key="410">Duración:</entry>
+  <entry key="411">Data:</entry>
+  <entry key="412">Modo de gravación! Non pode cambiar ningún valor xa que se trata dun ficheiro gravado.</entry>
+  <entry key="413">Reproducir esta gravación</entry>
+  <entry key="414">Reproducir / Pausa</entry>
+  <entry key="415">Gravar esta xuntanza</entry>
+  <entry key="416">parar a gravación</entry>
+  <entry key="417">Gravación:</entry>
+  <entry key="418">Alguén esta a gravar agora esta xuntanza:</entry>
+  <entry key="419">Gravando! Polo usuario:</entry>
+  <entry key="420">cancelar</entry>
+  <entry key="421">A gravación será cancelada e non gardada.</entry>
+  <entry key="422">reanudar</entry>
+  <entry key="423">Pechar esta fiestra e reanudar a gravación</entry>
+  <entry key="424">Cambiar a liña de cor</entry>
+  <entry key="425">Seleccionar cor</entry>
+  <entry key="426">Desactivar / activar a liña de cor</entry>
+  <entry key="427">cambiar a cor de recheo</entry>
+  <entry key="428">Desactivar / activar o recheo de cor</entry>
+  <entry key="429">Cambiar o groso da liña</entry>
+  <entry key="430">Pechar</entry>
+  <entry key="431">cambiar tamaño de letra</entry>
+  <entry key="432">Eliminar a gravación</entry>
+  <entry key="433">Convidado</entry>
+  <entry key="434">Por:</entry>
+  <entry key="435">Nome</entry>
+  <entry key="436">Sala</entry>
+  <entry key="437">Data</entry>
+  <entry key="438">cancelar</entry>
+  <entry key="439">iniciar</entry>
+  <entry key="440">Nome</entry>
+  <entry key="441">Data</entry>
+  <entry key="442">Eliminar o rexistro da conversa no servidor</entry>
+  <entry key="443">Conversa</entry>
+  <entry key="444">enviar a mensaxe</entry>
+  <entry key="445">Emoticonas</entry>
+  <entry key="446">Emoticonas</entry>
+  <entry key="447">Escolla os dispositivos</entry>
+  <entry key="448">Són e vídeo</entry>
+  <entry key="449">Só son</entry>
+  <entry key="450">Só vídeo</entry>
+  <entry key="451">Sen son/vídeo (imáxe fixa)</entry>
+  <entry key="452">Non se enviará son/vídeo desde o seu computador, no seu lugar mostrarase a imáxe do seu perfil. Seleccione esta configuración se vostede tén problemas co seu largo de banda ou unha conexión de Internet lenta.</entry>
+  <entry key="453">LU</entry>
+  <entry key="454">MA</entry>
+  <entry key="455">ME</entry>
+  <entry key="456">XO</entry>
+  <entry key="457">VE</entry>
+  <entry key="458">SA</entry>
+  <entry key="459">DO</entry>
+  <entry key="460">Lúns</entry>
+  <entry key="461">Martes</entry>
+  <entry key="462">Mércores</entry>
+  <entry key="463">Xoves</entry>
+  <entry key="464">Venres</entry>
+  <entry key="465">Sábado</entry>
+  <entry key="466">Domingo</entry>
+  <entry key="467">S</entry>
+  <entry key="468">Número de semana do calendario</entry>
+  <entry key="469">Xaneiro</entry>
+  <entry key="470">Febreiro</entry>
+  <entry key="471">Marzo</entry>
+  <entry key="472">Abril</entry>
+  <entry key="473">Maio</entry>
+  <entry key="474">Xuño</entry>
+  <entry key="475">Xullo</entry>
+  <entry key="476">Agosto</entry>
+  <entry key="477">Setembro</entry>
+  <entry key="478">Outubro</entry>
+  <entry key="479">Novembro</entry>
+  <entry key="480">Decembro</entry>
+  <entry key="481">Calendario</entry>
+  <entry key="482">Participantes</entry>
+  <entry key="483">Mostrar os axustes de deseño</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Largo | Alto</entry>
+  <entry key="486">Contedor de video</entry>
+  <entry key="487">Contedor de moderación</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Contedor de taboleiro</entry>
+  <entry key="490">Activado</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Largo | Alto</entry>
+  <entry key="493">Contedor de ficheiros, conversas, participantes</entry>
+  <entry key="494">Activado</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Largo | Alto</entry>
+  <entry key="497">O moderador retirouse, polo que ninguén está a realizar unha presentación actualmente. Vostede pode agardar ou solicitar ser moderador.</entry>
+  <entry key="498">Non hai moderador nesta sala, pero si participantes. Vostede pode esperar ou solicitar ser moderador.</entry>
+  <entry key="499">Comentario de {0}</entry>
+  <entry key="500">{0} - Convite</entry>
+  <entry key="501">Mensaxe do usuario:</entry>
+  <entry key="502">Mensaxe:</entry>
+  <entry key="503">Prema nesta ligazón para poder participar na xuntanza:</entry>
+  <entry key="504">Prema aquí para entrar á sala</entry>
+  <entry key="505">Se ten problemas coa ligazón, suxerímoslle que copie e pegue o seguinte texto no seu navegador:</entry>
+  <entry key="506">{0}, rexistro</entry>
+  <entry key="507">Os seus datos de usuario:</entry>
+  <entry key="508">Iniciar sesión:</entry>
+  <entry key="509">Contrasinal:</entry>
+  <entry key="510">Correo-e:</entry>
+  <entry key="511">{0} - Equipo</entry>
+  <entry key="512">{0}, rexistro</entry>
+  <entry key="513">{0} - Restablecer o contrasinal</entry>
+  <entry key="514">Prema na seguiente ligazón para introducir un novo contrasinal:</entry>
+  <entry key="515">Prema aquí para introducir un novo contrasinal</entry>
+  <entry key="516">Se ten problemas coa ligazón, suxerimoslle que copie e pegue o seguinte texto no seu navegador:</entry>
+  <entry key="517">{0}, restablecer o contrasinal</entry>
+  <entry key="518">Por favor introduza unha data correcta no formato dd.mm.aaaa, p.ex. 24.12.2001</entry>
+  <entry key="519">Por favor introduza un enderezo de correo-e corecto</entry>
+  <entry key="520">Por favor introduza un número decimal, p.ex. 1.00 (use punto e non coma)</entry>
+  <entry key="521">Por favor introduza un número enteiro, p.ex. 100</entry>
+  <entry key="522">Por favor introduza un número de teléfono correcto, p.ex +34 999 111 111</entry>
+  <entry key="523">Por favor introduza unha hora válida no formato hh:mm, p.ex. 12:34</entry>
+  <entry key="524">Contrasinal protexido</entry>
+  <entry key="525">Contrasinal</entry>
+  <entry key="526">Período de validez</entry>
+  <entry key="527">Interminable</entry>
+  <entry key="528">Período</entry>
+  <entry key="529">Unha vez</entry>
+  <entry key="530">Válido desde:</entry>
+  <entry key="531">Válido até:</entry>
+  <entry key="532">Convite a {0}</entry>
+  <entry key="533">Non existe un convite dispoñíbel para este código.</entry>
+  <entry key="534">Este convite xa foi usado e non pode utilizarse de novo.</entry>
+  <entry key="535">O código do convite é incorrecto. O convite ao través de ligazón ten validez só no momento da xuntanza! vostede non pode acceder á sala antes ou despois da reunión a través desa ligazón!</entry>
+  <entry key="536">Contrasinal:</entry>
+  <entry key="537">Verificar o contrasinal</entry>
+  <entry key="538">Contrasinal incorrecto!</entry>
+  <entry key="539">Navegador</entry>
+  <entry key="540">Sincronizar son/vídeo</entry>
+  <entry key="541">O acceso é correcto, pero a sesión non está activa ou gardada no servidor.Vostede ten que conseguir un novo identificador de sesión e volver a acceder.</entry>
+  <entry key="542">O identificador de sesión non está iniciado ou non ten permisos de Administración. A pasarela SOAP precisa un usuario con dereitos de administrador para engadir novos usuarios.</entry>
+  <entry key="543">Esta sesión non ten datos do usuario remoto conectado. Quizais non chamou á pasarela SOAP antes de acceder ao aplicativo ou está usando un identificador de sesión incorrecto</entry>
+  <entry key="544">O gravador aínda está en fase Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">eixo-x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">eixo-y</entry>
+  <entry key="549">l</entry>
+  <entry key="550">largo</entry>
+  <entry key="551">a</entry>
+  <entry key="552">alto</entry>
+  <entry key="553">Cambiar transparencia</entry>
+  <entry key="554">Abrir o navegador</entry>
+  <entry key="555">Pechar o navegador</entry>
+  <entry key="556">Perdeuse a conexión co servidor. Vostede precisa reiniciar o aplicativo e/ou comprobar a súa rede.</entry>
+  <entry key="557">Punteiro</entry>
+  <entry key="558">Sincronizando</entry>
+  <entry key="559">Sincronizando, por favor agarde</entry>
+  <entry key="560">&lt;u&gt;Descargar como SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Descargar como PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Descargar como JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Descargar como PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Descargar como TIF&lt;/u&gt;</entry>
+  <entry key="565">Lembranza:</entry>
+  <entry key="566">Categoría:</entry>
+  <entry key="567">Repetición:</entry>
+  <entry key="568">nada</entry>
+  <entry key="569">Ubicación:</entry>
+  <entry key="570">Comeza</entry>
+  <entry key="571">Remata</entry>
+  <entry key="572">Título:</entry>
+  <entry key="573">Comentario:</entry>
+  <entry key="574">Convidar xente</entry>
+  <entry key="575">Diario</entry>
+  <entry key="576">Mensual</entry>
+  <entry key="577">Anual</entry>
+  <entry key="578">A data de fin é despois da data de comezo!</entry>
+  <entry key="579">Por favor, insira un título!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Active isto se vostede escribe nunha lingua de dereita a esquerda (orde inversa de palabras)</entry>
+  <entry key="582">Panel de control</entry>
+  <entry key="583">Ver eventos ou xuntanzas gravadas</entry>
+  <entry key="584">Xuntanza - Facer unha conferencia con 4 (ata 16) Usuarios&lt;br/&gt;todos terán acceso de son + vídeo</entry>
+  <entry key="585">Evento - Facer unha conferencia con ata 200 participantes&lt;br/&gt;Só o moderador terá son/video</entry>
+  <entry key="586">Crear usuarios, salas, organizacións&lt;br/&gt; + cambiar a configuración</entry>
+  <entry key="587">Usuarios nesta sala agora</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Inicio de sesión</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Cargando o documento. Por favor agarde ata que todos os clientes estean sincronizados.</entry>
+  <entry key="592">Carga completa, convertindo Documento ...</entry>
+  <entry key="593">Comezar carga</entry>
+  <entry key="594">Dialogo de cargar e importar. Por favor escolla un ficheiro do seu disco.</entry>
+  <entry key="595">Cancelar</entry>
+  <entry key="596">Seleccionar ficheiro</entry>
+  <entry key="597">Conexións</entry>
+  <entry key="598">Valor</entry>
+  <entry key="599">Identificador de fluxo</entry>
+  <entry key="600">Iniciar sesión</entry>
+  <entry key="601">Conectado desde</entry>
+  <entry key="602">Sala / Alcance</entry>
+  <entry key="603">Expulsar usuario</entry>
+  <entry key="604">Expulsar a un usuario</entry>
+  <entry key="605">Realmente quere expulsar este cliente da conexión?&lt;br/&gt; Isto só borra ao cliente da sala actual. O cliente pode volver a acceder de novo.</entry>
+  <entry key="606">A súa sesión foi pechada por un administrador ou un moderador.</entry>
+  <entry key="607">Teléfono</entry>
+  <entry key="608">O usuario é moderador desta sala</entry>
+  <entry key="609">O usuario está autorizado a escribir no taboleiro</entry>
+  <entry key="610">(Re)iniciar o son/vídeo ou cambiar a configuración dos dispositivos</entry>
+  <entry key="611">Autorizar a este usuario a debuxar no taboleiro</entry>
+  <entry key="612">Denegar o permiso a debuxar no taboleiro</entry>
+  <entry key="613">Usuarios</entry>
+  <entry key="614">Filtros</entry>
+  <entry key="615">Taboleiro</entry>
+  <entry key="616">Conversa</entry>
+  <entry key="617">A súa conta está asignada a multiples organizacións. Por favor escolla unha para esta sesión.</entry>
+  <entry key="618">Esta sala atópase completa neste momento. Por favor, ténteo de novo máis tarde.</entry>
+  <entry key="619">Tipo de sala</entry>
+  <entry key="620">Nomeado da sala</entry>
+  <entry key="621">Hora do servidor</entry>
+  <entry key="622">{0} - Lembranza</entry>
+  <entry key="623">Mensaxe do usuario:</entry>
+  <entry key="624">Mensaxe:</entry>
+  <entry key="625">Prema nesta ligazón para participar na xuntanza:</entry>
+  <entry key="626">Prema aquí para entrar na sala</entry>
+  <entry key="627">se ten problemas coa ligazón, por favor copie e pegue no seu navegador:</entry>
+  <entry key="628">busca interna</entry>
+  <entry key="629">Engadir externos</entry>
+  <entry key="630">Nome</entry>
+  <entry key="631">Apelido(s)</entry>
+  <entry key="632">Correo-e</entry>
+  <entry key="633">Confirme a saída</entry>
+  <entry key="634">Ten a certeza de querer saír agora?</entry>
+  <entry key="635">Acccións</entry>
+  <entry key="636">Sala de demostración</entry>
+  <entry key="637">Hora da demostración</entry>
+  <entry key="638">Horario da xuntanza</entry>
+  <entry key="639">Esta é unha sala de demostración. Para desactivar esta advertencia debería conseguir unha sala privada para o seu uso persoal ou obter un servidor propio. Será automaticamente redirixido dentro:</entry>
+  <entry key="640">Moderado</entry>
+  <entry key="641">Por favor, agarde ata que o moderador entre na sala. O moderador pode ser un profesor, administrador, ou o creador desta sala.</entry>
+  <entry key="642">Aceptar</entry>
+  <entry key="643">Recibindo o escritorio compartida</entry>
+  <entry key="644">Hai unha nova recepción de escritorio compartido do usuario:</entry>
+  <entry key="645">Iniciar a compartición do escritorio</entry>
+  <entry key="646">Engadir nova xuntanza</entry>
+  <entry key="647">Sala de xuntanzas</entry>
+  <entry key="648">Sala de eventos</entry>
+  <entry key="649">Moderación</entry>
+  <entry key="650">Moderar usuarios</entry>
+  <entry key="651">Moderar salas</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Desexa que este usuario se convirta en moderador desa organización?</entry>
+  <entry key="654">Por favor, escolla unha organización antes de tentar engadir un usuario a ela!</entry>
+  <entry key="655">Organización - Moderador</entry>
+  <entry key="656">Ten a certeza de que desexa eliminar este usuario da organización?</entry>
+  <entry key="657">Este usuario é moderador</entry>
+  <entry key="658">Este usuario non é moderador</entry>
+  <entry key="659">Desexa que este usuario non sexa moderador desta organización?</entry>
+  <entry key="660">Engadir ou eliminar usuarios ou salas na súa organización</entry>
+  <entry key="661">Desexa elmininar este rexistro?</entry>
+  <entry key="662">Relmente desexa eliminar este usuario da súa organización? Só eliminará a relación entre o usuario e a organización, para eliminar definitivamente ao usuario ten que entrar no menú de administración.</entry>
+  <entry key="663">Non pode eliminar o seu propio usuario!</entry>
+  <entry key="664">Para usar este método precisa dunha conta de administrador!</entry>
+  <entry key="665">Non hai unha sesión asociada con este ID.</entry>
+  <entry key="666">Esta é unha conta de administrador ou moderador. Só pode editar esta conta a través do panel de administración.</entry>
+  <entry key="667">Para completar o seu rexistro, por favor prema na seguinte ligazón. Ou copie o URL na barra de navegación do seu navegador.</entry>
+  <entry key="668">Prema para verificar o seu correo-e</entry>
+  <entry key="669">Non se atopou un usuario para este Hash.</entry>
+  <entry key="670">Este usuario xa está activado!</entry>
+  <entry key="671">A súa conta foi activada satisfactoriamente!</entry>
+  <entry key="672">Iniciar sesión agora</entry>
+  <entry key="673">A súa conta non está activada. Antes use a ligazón do correo-e que recebiu durante o rexistro.</entry>
+  <entry key="674">Rexistrouse correctamente. Enviamoslle un correo-e cun código de verificación. Por favor, comprobe a súa bandexa de entrada de correo.</entry>
+  <entry key="675">Eliminar o rol de moderador deste usuario</entry>
+  <entry key="676">Dar dereitos de moderador a este usuario</entry>
+  <entry key="677">Usuario</entry>
+  <entry key="678">Acceso ao taboleiro</entry>
+  <entry key="679">Moderador</entry>
+  <entry key="680">Moderación: Por favor escolla un usuario da lista para darlle acceso ao taboleiro, moderación ou video.</entry>
+  <entry key="681">Este usuario xa é moderador, ten automáticamente acceso para debuxar.</entry>
+  <entry key="682">Este é vostede! Non é posíbel quitarse dereitos de moderador a un mesmo.</entry>
+  <entry key="683">Permitir a este usuario enviar o seu son / vídeo</entry>
+  <entry key="684">Eliminar son/vídeo deste usuario</entry>
+  <entry key="685">Teño unha pregunta</entry>
+  <entry key="686">Gustarialle debuxar no taboleiro</entry>
+  <entry key="687">Gustarialle compartir o meu son/vídeo</entry>
+  <entry key="688">Vostede é moderador desta sala</entry>
+  <entry key="689">Vostede ten acceso a debuxar no taboleiro</entry>
+  <entry key="690">Non lle está permitido compartir o seu son/vídeo</entry>
+  <entry key="691">Mensaxe ao moderador</entry>
+  <entry key="692">O usuario</entry>
+  <entry key="693">gustarialle facer unha pregunta.&lt;br/&gt;&lt;br/&gt; &lt;i&gt;(Use as iconas de estado cerca do usuario na lista de usuarios para engadir ou eliminar dereitos de moderación.)&lt;7i&gt;</entry>
+  <entry key="694">gustarialle debuxar no taboleiro. Use as iconas de estado cerca do usuario na lista de usuarios para engadir ou eliminar dereitos de debuxo no taboleiro.</entry>
+  <entry key="695">gustarialle compartir o seu son/vídeo. Use os iconos de estado preto do usuario na lista de usuarios para dar ou quitar dereitos de Audio/vídeo para calquera usuario.</entry>
+  <entry key="696">Ten que agardar até que un moderador entre na sala.</entry>
+  <entry key="697">Cancelar</entry>
+  <entry key="698">Gardar</entry>
+  <entry key="699">Día</entry>
+  <entry key="700">Mes</entry>
+  <entry key="701">Ano</entry>
+  <entry key="702">Cargar un ficheiro</entry>
+  <entry key="703">Engadir un ficheiro</entry>
+  <entry key="704">Actualizar</entry>
+  <entry key="705">Lixo</entry>
+  <entry key="706">Meus ficheiros Files (Dispositivo personal)</entry>
+  <entry key="707">Ficheiros da sala (Dispositivo público)</entry>
+  <entry key="708">Engadir ficheiro</entry>
+  <entry key="709">Engadir cartafol</entry>
+  <entry key="710">Borrar cartafol</entry>
+  <entry key="711">Editar o nome</entry>
+  <entry key="712">Novo cartafol</entry>
+  <entry key="713">Ten a certeza de que desexa eliminar este elemento?</entry>
+  <entry key="714">Buscar</entry>
+  <entry key="715">Buscar</entry>
+  <entry key="716">Abrir o documento</entry>
+  <entry key="717">Mostrar todos os ficheiro (Vista en árbore)</entry>
+  <entry key="718">Pechar o documento</entry>
+  <entry key="719">Borrar o ficheiro</entry>
+  <entry key="720">Non ten permisos para escribir ou debujar no taboleiro. Debe ser moderador ou, alo menos, ter permisos de edición do taboleiro. Solicítello a un moderador.</entry>
+  <entry key="721">Propiedades do documento</entry>
+  <entry key="722">Iniciar Java</entry>
+  <entry key="723">Iniciar Flash</entry>
+  <entry key="724">Un usuario desexa compartir o seu escritorio. Quere visualizala?</entry>
+  <entry key="725">Actualmente está compartindo o seu escritorio. Para deixar de facelo, prema no botón Parar no cliente de compartición.</entry>
+  <entry key="726">Compartindo a sesión</entry>
+  <entry key="727">Xa está compartindo o seu escritorio!</entry>
+  <entry key="728">Visor de escritorio</entry>
+  <entry key="729">Parar a compartición</entry>
+  <entry key="730">Compartición de escritorio</entry>
+  <entry key="731">Pulse Iniciar para publicar o seu escritorio</entry>
+  <entry key="732">Iniciar a compartición</entry>
+  <entry key="733">Pausa na compartición</entry>
+  <entry key="734">Seleccione un área da pantalla:</entry>
+  <entry key="735">Cambiar a largura</entry>
+  <entry key="736">Rematou a sesión de compartición!</entry>
+  <entry key="737">Cambiar a altura</entry>
+  <entry key="738">Desprazamento-X</entry>
+  <entry key="739">Desprazamento-Y</entry>
+  <entry key="740">Largo:</entry>
+  <entry key="741">Alto:</entry>
+  <entry key="742">O servidor pechou a conexión</entry>
+  <entry key="743">Cancelar</entry>
+  <entry key="744">Iniciar Java</entry>
+  <entry key="745">Se pecha completamente esta sesión, non será posíbel reiniciar o visor durante esta sesión.</entry>
+  <entry key="746">Confirme o peche da sesión do visor</entry>
+  <entry key="747">Compartir escritorio</entry>
+  <entry key="748">Gravar a sesión</entry>
+  <entry key="749">Co-navegación</entry>
+  <entry key="750">Umm... Firefox en windows non mostra a co-navegación con claridade. Por favor, utilice outro navegador ou peche esta funcionalidade.</entry>
+  <entry key="751">Anterior</entry>
+  <entry key="752">Seguinte</entry>
+  <entry key="753">Recargar</entry>
+  <entry key="754">Inicio</entry>
+  <entry key="755">Cargar</entry>
+  <entry key="756">Engadir este sitio ao seu perfil como sitio predeterminado.</entry>
+  <entry key="757">Probar a configuración</entry>
+  <entry key="758">Comprobe a configuración do seu micrófono e/ou cámara antes de entrar na sala. Para el grave durante algúns segundos e reprodúzao, deberá escoitar a súa voz e ver a súa imaxe.</entry>
+  <entry key="759">Non volver a mostrar esta proba</entry>
+  <entry key="760">Cancelar</entry>
+  <entry key="761">Iniciar unha conferencia</entry>
+  <entry key="762">Non volver a preguntar</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Pode continuar sen facer a comprobación se non desexa publicar a imaxe e/ou o son. Os participantes sen son ou sen vídeo poden en todo caso utilizar o taboleiro, compartir o seu escritorio ou enviar mensaxes utilizando a liña de conversas.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Medidor de niveis</entry>
+  <entry key="768">Prema en Iniciar</entry>
+  <entry key="769">Iniciar a conferencia</entry>
+  <entry key="770">Iniciar o evento</entry>
+  <entry key="771">Elixir a sala</entry>
+  <entry key="772">Probar a config.</entry>
+  <entry key="773">Iniciar a conferencia</entry>
+  <entry key="774">Instruccións «Conferencia»:</entry>
+  <entry key="775">Iniciar a gravación</entry>
+  <entry key="776">Non mostrar a proba de son /vídeo antes de entrar nunha conferencia</entry>
+  <entry key="777">Salas públicas</entry>
+  <entry key="778">As salas públicas son accesíbeis para todos os usuarios.</entry>
+  <entry key="779">Salas privadas</entry>
+  <entry key="780">As salas privadas son accesíbeis só para os usuarios da mesma organización.</entry>
+  <entry key="781">As miñas salas</entry>
+  <entry key="782">As salas nesta sección son para uso persoal. Creanse utilizando o calendario e teñen unha data de inicio e de final. Só están listadas nesta sección durante o período de tempo en que teñen validez.</entry>
+  <entry key="783">Ten que ser moderador para poder facer isto.</entry>
+  <entry key="784">Solicitar a moderación</entry>
+  <entry key="785">Solicitar acceso ao taboleiro</entry>
+  <entry key="786">Solicitar acceso á cámara/micrófono</entry>
+  <entry key="787">A autenticación Hash desta sesión xa foi usada. Non pode facerse dúas veces.</entry>
+  <entry key="788">INICIAR</entry>
+  <entry key="789">SAÍR</entry>
+  <entry key="790">Ten a certeza de que desexa saír? Sería convinte que antes limpe os documentos cargados, o taboleiro e o historial de conversas.</entry>
+  <entry key="791">Saír da conferencia</entry>
+  <entry key="792">Salas</entry>
+  <entry key="793">Elixa unha sala para a xuntanza</entry>
+  <entry key="794">Hai un evento sen gardar no calendario. Gardeo ou elimineo.</entry>
+  <entry key="795">Engada, polo menos, un participante!</entry>
+  <entry key="796">Ten a certeza de que desexa eliminar este evento?</entry>
+  <entry key="797">Aviso</entry>
+  <entry key="798">Engadir un evento</entry>
+  <entry key="799">día</entry>
+  <entry key="800">semana</entry>
+  <entry key="801">mes</entry>
+  <entry key="802">Descrición</entry>
+  <entry key="803">Asistentes</entry>
+  <entry key="804">{0}, a súa Plataforma Web de Videoconferencia. Tan só ten que segir as instruccións, prema no botón para iniciar unha conferencia inmediatamente ou vaia ao calendario para planificar unha conferencia para o futuro.</entry>
+  <entry key="805">Planificar</entry>
+  <entry key="806">Para planificar unha conferencia, engada un novo evento no calendario. Para cada evento crearase automaticamente unha sala. Vostede e o resto de asistentes recibirán un correo-e cunha ligazón á sala.&lt;br/&gt;&lt;br/&gt;Pode escoller entre diferentes tipos de salas con diferentes deseños e sistemas de moderación. Tamén pode escoller entre diferentes tipos de notificación de correo-e que se envíen en cada evento do calendario.</entry>
+  <entry key="807">Necesita axuda?</entry>
+  <entry key="808">Restrinxido</entry>
+  <entry key="809">Buscar</entry>
+  <entry key="810">Engadir</entry>
+  <entry key="811">Non hai ningún usuario seleccionado. Seleccione primero un ítem da lista e prema en Engadir.</entry>
+  <entry key="812">Engadir un asistente</entry>
+  <entry key="813">Gardar</entry>
+  <entry key="814">Borar</entry>
+  <entry key="815">Detalles do evento</entry>
+  <entry key="816">Moderadores predeterminados</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Nome</entry>
+  <entry key="820">Correo-e</entry>
+  <entry key="821">Engadir novo moderador predeterminado</entry>
+  <entry key="822">É supermoderadorrator</entry>
+  <entry key="823">Se a sala está moderada, sexa quen sexa xa o moderador seguirá a selo. Se non desexa que sexa así, e quere que só determinado usuario sexa o moderador, utilice a opción de moderador predeterminado.</entry>
+  <entry key="824">Un supermoderador é sempre o moderador dunha sala cando entra nela. Ademáis, naide pode quitarlle a marca de moderación</entry>
+  <entry key="825">Aplicar a supermoderación ao usuario</entry>
+  <entry key="826">Eliminar a supermoderación ao usuario</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Se engade unha organización á sala, só os usuarios de dita organización terán acceso á mesma (isto só é así se a marca de Pública está configurada como falsa!)</entry>
+  <entry key="829">Moderación</entry>
+  <entry key="830">Limitacións</entry>
+  <entry key="831">Organización</entry>
+  <entry key="832">Ten certeza?</entry>
+  <entry key="833">Ten a certeza de que desexa borar este elemento? Ten que premer no botón Gardar para almacenar os cambios!</entry>
+  <entry key="834">Non hai ningún usuario seleccionado. Seleccióneo antes para engadilo!</entry>
+  <entry key="835">Engadir un novo moderaror predeterminado</entry>
+  <entry key="836">Ten a certeza de que desexa engadir unha marca de supermoderador a este usuario? Lembre que un supermoderador non só é o moderador dunha sala, senon que ademáis ningún outro moderador poderá borrar a marca de moderación. Necesita gardar o obxecto sala para almacenar estas configuracións!</entry>
+  <entry key="837">Ten a certeza de que desexa eliminar a marca de supermoderador a este usuario? Necesita gardar o obxecto sala para almacenar estas configuracións!</entry>
+  <entry key="838">Este usuario é supermoderador. Non pode quitarlle a marca de moderación a un supermoderador!</entry>
+  <entry key="839">Ten a certeza de que desexa borrar este ficheiro/cartafol?</entry>
+  <entry key="840">Borrar un ficheiro/cartafol?</entry>
+  <entry key="841">Dna.</entry>
+  <entry key="842">D.</entry>
+  <entry key="843">Propiedades</entry>
+  <entry key="844">Mostrar a posición do rato aos participantes</entry>
+  <entry key="845">Compartir o son co miniaplicativo SIP</entry>
+  <entry key="846">Compartir o son con SIP e o vídeo con Flash</entry>
+  <entry key="847">Pantalla completa</entry>
+  <entry key="848">Ver o escritorio</entry>
+  <entry key="849">O usuario</entry>
+  <entry key="850">desexa compartir o seu escritorio. Desexa visualizalo?</entry>
+  <entry key="851">Pechar</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">A sesión foi pechada por quen compartia o escritorio!</entry>
+  <entry key="854">Pausa</entry>
+  <entry key="855">Nona compartición de escritorio</entry>
+  <entry key="856">Minimizar</entry>
+  <entry key="857">Maximizar</entry>
+  <entry key="858">Vídeo</entry>
+  <entry key="859">Liña temporal da gravación</entry>
+  <entry key="860">As miñas gravacións</entry>
+  <entry key="861">Gravacións públicas</entry>
+  <entry key="862">Información</entry>
+  <entry key="863">Nome</entry>
+  <entry key="864">Lonxitude</entry>
+  <entry key="865">Data</entry>
+  <entry key="866">Por</entry>
+  <entry key="867">Descarga</entry>
+  <entry key="868">Principal - Vídeo</entry>
+  <entry key="869">Gravación</entry>
+  <entry key="870">Pode gravar e compartir o escritorio de vez. Para permitir que outros veaan o seu escritorio prema no botón Iniciar na parte superior. Para só gravar a sesión, é abondo que prema en Iniciar a grabación.</entry>
+  <entry key="871">Iniciar a gravación</entry>
+  <entry key="872">Parar a gravación</entry>
+  <entry key="873">Descargar o ficheiro FLV</entry>
+  <entry key="874">Sala</entry>
+  <entry key="875">Reproducir</entry>
+  <entry key="876">Parar</entry>
+  <entry key="877">O usuario ten o micrófono activado</entry>
+  <entry key="878">Parar a compartición</entry>
+  <entry key="879">Permitir as preguntas do usuario</entry>
+  <entry key="880">Desactive esta opción para evitar que calquera usuario o moleste nesta sala. Facendoo o boton para solicitar a moderación («Teño unha pregunta») non é visible.</entry>
+  <entry key="881">Permisos</entry>
+  <entry key="882">Descargar como AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Só son</entry>
+  <entry key="887">Houbo algún erro mentres de procesaba a gravación.</entry>
+  <entry key="888">La grabación no está aínda preparada para ver. Tenteo de novo dentro dun par de minutos.</entry>
+  <entry key="889">Rexistro:</entry>
+  <entry key="890">Mensaxe do gravador</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">O miniaplicativo SIP non está preparado</entry>
+  <entry key="893">Axustes da conta SIP</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_hu.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
new file mode 100644
index 0000000..47d0a99
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_hu.properties.xml
@@ -0,0 +1,1860 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Konferencia</entry>
+  <entry key="2">Találkozó</entry>
+  <entry key="3">Előadás</entry>
+  <entry key="4">Beállítások</entry>
+  <entry key="5">Beállítások</entry>
+  <entry key="6">Adminisztráció</entry>
+  <entry key="7">Állj</entry>
+  <entry key="8">Felvétel</entry>
+  <entry key="9">Nincs elérhető fájl</entry>
+  <entry key="10">Felvétel az előadónál</entry>
+  <entry key="11">Csatlakozott felhasználók:</entry>
+  <entry key="12">Konferencia indítása</entry>
+  <entry key="13">Nevem</entry>
+  <entry key="14">VideoKonferencia</entry>
+  <entry key="15">Fájl feltöltés</entry>
+  <entry key="16">Lista frissítése</entry>
+  <entry key="17">Filejaim</entry>
+  <entry key="18">új szavazás</entry>
+  <entry key="19">Új szavazás a konferencián.</entry>
+  <entry key="20">Kérdés:</entry>
+  <entry key="21">A szavazás típusa:</entry>
+  <entry key="22">Létrehoz</entry>
+  <entry key="23">Infó: Minden bejelentkezett felhasználó értesül az új szavazásról.</entry>
+  <entry key="24">Szavazás létrehozása</entry>
+  <entry key="25">Mégse</entry>
+  <entry key="26">Igen/Nem</entry>
+  <entry key="27">Szám 1-10</entry>
+  <entry key="28">Szavazás</entry>
+  <entry key="29">Előadónak kell lenned, hogy feltehess kérdést</entry>
+  <entry key="30">A szavazatot elfogadtuk.</entry>
+  <entry key="31">Erre a kérdésre már szavaztál.</entry>
+  <entry key="32">Szavazz !</entry>
+  <entry key="33">Válasz:</entry>
+  <entry key="34">Igen</entry>
+  <entry key="35">Nem</entry>
+  <entry key="36">Tudni akarja:</entry>
+  <entry key="37">Szavazás eredménye</entry>
+  <entry key="38">Kérdés:</entry>
+  <entry key="39">Eredmény:</entry>
+  <entry key="40">Válaszok:</entry>
+  <entry key="41">Nincs elindított szavazás.</entry>
+  <entry key="42">Szavazz!</entry>
+  <entry key="43">Találkozó (max. 4 férőőhely)</entry>
+  <entry key="44">Előadás (max. 50 férőhely)</entry>
+  <entry key="45">Típus</entry>
+  <entry key="46">Szabad helyek</entry>
+  <entry key="47">Foglalt helyek</entry>
+  <entry key="48">bevitel</entry>
+  <entry key="49">A előadó elhagyta a szobát.</entry>
+  <entry key="50">Rendszer információk</entry>
+  <entry key="51">Válassz eszközt</entry>
+  <entry key="52">Válassz webkamerát:</entry>
+  <entry key="53">Válassz mikrofont:</entry>
+  <entry key="54">Rendben</entry>
+  <entry key="55">Mégse</entry>
+  <entry key="56">Újra be kell jelentkezned.</entry>
+  <entry key="57">Beállítások módosítása.</entry>
+  <entry key="58">Téma:</entry>
+  <entry key="59">Nyelv:</entry>
+  <entry key="60">Rendben</entry>
+  <entry key="61">Mégse</entry>
+  <entry key="62">Tábla törlése</entry>
+  <entry key="63">Szeretnéd, hogy a tábla törölve legyen mielőtt új kép lesz hozzáadva?</entry>
+  <entry key="64">Ne kérdezd többször</entry>
+  <entry key="65">Nem</entry>
+  <entry key="66">Beállítások módosítása</entry>
+  <entry key="67">Megerősítés a tábla törlése előtt</entry>
+  <entry key="68">Felhasználói információ</entry>
+  <entry key="69">Rajzterület törlése</entry>
+  <entry key="70">Vissza</entry>
+  <entry key="71">Újra</entry>
+  <entry key="72">Válassz objektumot</entry>
+  <entry key="73">Szöveg</entry>
+  <entry key="74">Rajz</entry>
+  <entry key="75">Vonal</entry>
+  <entry key="76">Aláhúzás</entry>
+  <entry key="77">Négyszög</entry>
+  <entry key="78">Ellipszis</entry>
+  <entry key="79">Nyíl</entry>
+  <entry key="80">a kiválasztott elem törlése</entry>
+  <entry key="81">Jelentkezés előadónak</entry>
+  <entry key="82">beállít</entry>
+  <entry key="83">Mégse</entry>
+  <entry key="84">Előadóvá válni</entry>
+  <entry key="85">bezár</entry>
+  <entry key="86">dőlt</entry>
+  <entry key="87">félkövér</entry>
+  <entry key="88">VÁRAKOZIK</entry>
+  <entry key="89">A felhasználó előadónak jelentkezik:</entry>
+  <entry key="90">elfogad</entry>
+  <entry key="91">elutasít</entry>
+  <entry key="92">mégse</entry>
+  <entry key="93">Kérelem küldése felhasználóknak:</entry>
+  <entry key="94">Elfogadva</entry>
+  <entry key="95">Elutasítva</entry>
+  <entry key="96">Előadó változtatás</entry>
+  <entry key="97">Te nem moderálhatod ezt az előadást!</entry>
+  <entry key="98">Előadó:</entry>
+  <entry key="99">A terem tele van. Kérem próbálja később.</entry>
+  <entry key="100">Ellipszis</entry>
+  <entry key="101">bezár</entry>
+  <entry key="102">beviteli adathiba</entry>
+  <entry key="103">4 vagy több karakter; kis/nagybetű számít!</entry>
+  <entry key="104">a felhasználói jelszónak legalább 4 karakternek kell lennie</entry>
+  <entry key="105">A felhasználó már létezik</entry>
+  <entry key="106">Az e-mail cím már regisztrálva van</entry>
+  <entry key="107">Rendszerhiba, keresse fel a rendszergazdát.</entry>
+  <entry key="108">Bejelentkezés</entry>
+  <entry key="109">Felhasználó:</entry>
+  <entry key="110">Jelszó:</entry>
+  <entry key="111">Nyelv</entry>
+  <entry key="112">Bejelentkezés</entry>
+  <entry key="113">Bejelentkezni</entry>
+  <entry key="114">Felhasználó:</entry>
+  <entry key="115">Jelszó:</entry>
+  <entry key="116">Újra:</entry>
+  <entry key="117">Keresztnév:</entry>
+  <entry key="118">Családnév:</entry>
+  <entry key="119">E-mail:</entry>
+  <entry key="120">Ország:</entry>
+  <entry key="121">Regisztráció</entry>
+  <entry key="122">Mégse</entry>
+  <entry key="123">Regisztráció</entry>
+  <entry key="124">Nyitó oldal</entry>
+  <entry key="125">Felhasználók</entry>
+  <entry key="126">Csoportok</entry>
+  <entry key="127">Szervezet</entry>
+  <entry key="128">Előadás-szoba</entry>
+  <entry key="129">nyilvános</entry>
+  <entry key="130">Szervezet</entry>
+  <entry key="131">belépés</entry>
+  <entry key="132">Bejelentkezési név</entry>
+  <entry key="133">Jelszó</entry>
+  <entry key="134">Újra</entry>
+  <entry key="135">Keresztnév</entry>
+  <entry key="136">Családnév</entry>
+  <entry key="137">E-mail</entry>
+  <entry key="138">Születésnap</entry>
+  <entry key="139">Utca hsz.</entry>
+  <entry key="140">Ir.szám/Település</entry>
+  <entry key="141">Ország</entry>
+  <entry key="142">Megjegyzés</entry>
+  <entry key="143">Felhasználói adatok</entry>
+  <entry key="144">mentés</entry>
+  <entry key="145">Mentés</entry>
+  <entry key="146">USER-ID</entry>
+  <entry key="147">Bejelentkezés</entry>
+  <entry key="148">Keresztnév</entry>
+  <entry key="149">Családnév</entry>
+  <entry key="150">következő mutatása</entry>
+  <entry key="151">előző mutatása</entry>
+  <entry key="152">bejegyzés törlése</entry>
+  <entry key="153">mégse</entry>
+  <entry key="154">törlés</entry>
+  <entry key="155">új bejegyzés</entry>
+  <entry key="156">bejegyzés frissítése</entry>
+  <entry key="157">bejegyzés törlése</entry>
+  <entry key="158">státusz</entry>
+  <entry key="159">tiltott</entry>
+  <entry key="160">engedélyezett</entry>
+  <entry key="161">Szervezetek</entry>
+  <entry key="162">naptár</entry>
+  <entry key="163">bezár</entry>
+  <entry key="164">Szervezet-ID</entry>
+  <entry key="165">Név</entry>
+  <entry key="166">Felhasználó</entry>
+  <entry key="167">Előadó</entry>
+  <entry key="168">Adminisztrátor</entry>
+  <entry key="169">felhasználó szint</entry>
+  <entry key="170">Szervezet</entry>
+  <entry key="171">név</entry>
+  <entry key="172">szervezet hozzáadása</entry>
+  <entry key="173">szervezet hozzáadása</entry>
+  <entry key="174">mégse</entry>
+  <entry key="175">hozzáad</entry>
+  <entry key="176">szervezet törlése</entry>
+  <entry key="177">felhasználó</entry>
+  <entry key="178">felhasználó hozzáadása</entry>
+  <entry key="179">felhasználó törlése</entry>
+  <entry key="180">felhasználó hozzáadása</entry>
+  <entry key="181">felhasználó keresése</entry>
+  <entry key="182">keres</entry>
+  <entry key="183">felhasználó</entry>
+  <entry key="184">Szervezet</entry>
+  <entry key="185">Belépés</entry>
+  <entry key="186">Konferenciatermek</entry>
+  <entry key="187">Konferenciatermek</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Név</entry>
+  <entry key="190">nyilvános</entry>
+  <entry key="191">Szervezetek</entry>
+  <entry key="192">Találkozószobák</entry>
+  <entry key="193">Név</entry>
+  <entry key="194">Típus</entry>
+  <entry key="195">Nyilvános</entry>
+  <entry key="196">Megjegyzés</entry>
+  <entry key="197">mentés</entry>
+  <entry key="198">betölt</entry>
+  <entry key="199">mentés mint</entry>
+  <entry key="200">Fájlnév</entry>
+  <entry key="201">fájlnév</entry>
+  <entry key="202">mégse</entry>
+  <entry key="203">mentés</entry>
+  <entry key="204">hiba</entry>
+  <entry key="205">betöltés</entry>
+  <entry key="206">objektum betöltve</entry>
+  <entry key="207">kliensek szinkronizálása, várakozó kliensek:</entry>
+  <entry key="208">Képinformációk betöltése</entry>
+  <entry key="209">kliensek szinkronizálása, várakozó kliensek:</entry>
+  <entry key="210">rajzterület törlése</entry>
+  <entry key="211">rajzterület törlése, a tábla adatai elvesznek</entry>
+  <entry key="212">Megerősítés mielőtt a fájlt betöltené</entry>
+  <entry key="213">Meghívó küldése</entry>
+  <entry key="214">Meghívó küldése</entry>
+  <entry key="215">Tárgy</entry>
+  <entry key="216">Címzett</entry>
+  <entry key="217">Üzenet</entry>
+  <entry key="218">Elküld</entry>
+  <entry key="219">mégse</entry>
+  <entry key="220">elküld</entry>
+  <entry key="221">Felhasználói adat</entry>
+  <entry key="222">A beceneved ehhez a konferenciához</entry>
+  <entry key="223">Becenév</entry>
+  <entry key="224">Keresztnév</entry>
+  <entry key="225">Családnév</entry>
+  <entry key="226">Email</entry>
+  <entry key="227">Nyelv</entry>
+  <entry key="228">bevitel</entry>
+  <entry key="229">Betöltés</entry>
+  <entry key="230">Adatok betöltése, kérlek várj!</entry>
+  <entry key="231">Rossz jelszó</entry>
+  <entry key="232">Adj meg két megegyező legalább 6 karakter hosszú jelszót</entry>
+  <entry key="233">Hibás e-mail</entry>
+  <entry key="234">Hibás e-mail címet adtál meg</entry>
+  <entry key="235">A regisztráció megtörtént</entry>
+  <entry key="236">Az fiókod elkészült. Beléphetsz.</entry>
+  <entry key="237">A képernyődet nem oszthatod meg most. Valaki más már megosztotta az övét.</entry>
+  <entry key="238">Megosztás megtiltva</entry>
+  <entry key="239">Képernyőmegosztás</entry>
+  <entry key="240">Hibás sávszélesség: Nem lehetett szinkronizálni a képenyődet. El lesznak dobva képkockák. Ha sokszor jelenik meg ez a figyelmeztetés, kérd meg a előadót, hogy a minőséget vegye vissza.</entry>
+  <entry key="241">Képernyő:</entry>
+  <entry key="242">Rajz</entry>
+  <entry key="243">Dokumentum</entry>
+  <entry key="244">Csevej</entry>
+  <entry key="245">Fájlok</entry>
+  <entry key="246">Tagok</entry>
+  <entry key="247">Eredeti dokumentum letöltése</entry>
+  <entry key="248">pdf letöltése</entry>
+  <entry key="249">Bemutató betöltése a táblára</entry>
+  <entry key="250">Beállítások</entry>
+  <entry key="251">Objektum mozgatása</entry>
+  <entry key="252">Objektum átméretezése</entry>
+  <entry key="253">%</entry>
+  <entry key="254">-</entry>
+  <entry key="255">Ugrás az első oldalra</entry>
+  <entry key="256">Ugrás az előző oldalra</entry>
+  <entry key="257">Ugrás a következő oldalra</entry>
+  <entry key="258">Ugrás az utolsó oldalra</entry>
+  <entry key="259">Kicsinyít --</entry>
+  <entry key="260">Nagyít ++</entry>
+  <entry key="261">Úr</entry>
+  <entry key="262">Hölgy</entry>
+  <entry key="263">Beállítás</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Kulcs</entry>
+  <entry key="266">Beállítás</entry>
+  <entry key="267">Kulcs</entry>
+  <entry key="268">utolsó módosítás</entry>
+  <entry key="269">módosítva</entry>
+  <entry key="270">megjegyzés</entry>
+  <entry key="271">Érték</entry>
+  <entry key="272">-</entry>
+  <entry key="273">Felhasználók</entry>
+  <entry key="274">felhasználó törlése a szervezetből</entry>
+  <entry key="275">töröl</entry>
+  <entry key="276">Ez a felhasználó már tagja a szervezetnek.</entry>
+  <entry key="277">Hírek</entry>
+  <entry key="278">Gyorslinkek</entry>
+  <entry key="279">Konferenciára megyek</entry>
+  <entry key="280">Előadásra megyek</entry>
+  <entry key="281">Segítség</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Hibabejel.!</entry>
+  <entry key="285">tovább</entry>
+  <entry key="286">Projekt weboldala (http://openmeetings.apache.org)</entry>
+  <entry key="287">Felhasználói levelezőlista (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Bejelentkezés megjegyzése</entry>
+  <entry key="289">Tartalom</entry>
+  <entry key="290">Kezdőoldalam</entry>
+  <entry key="291">Találkozóim</entry>
+  <entry key="292">Eseményeim</entry>
+  <entry key="293">Nyilvános találkozók</entry>
+  <entry key="294">Zártkörű találkozók</entry>
+  <entry key="295">Nyilvános előadások</entry>
+  <entry key="296">Zártkörű előadások</entry>
+  <entry key="297">Nyilvános tartalmak</entry>
+  <entry key="298">Zártkörű tartalmak</entry>
+  <entry key="299">Személyes tartalmak</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderálás</entry>
+  <entry key="302">Jelentkezés előadónak</entry>
+  <entry key="303">Szavazás</entry>
+  <entry key="304">Fájl választás</entry>
+  <entry key="305">Beállítások</entry>
+  <entry key="306">Kamera és mikrofon beállítások</entry>
+  <entry key="307">Tábla beállítások</entry>
+  <entry key="308">Kilép</entry>
+  <entry key="309">Vissza a szobákhoz</entry>
+  <entry key="310">Kilépés</entry>
+  <entry key="311">Elfelejtetted a jelszavad?</entry>
+  <entry key="312">Jelszó törlése</entry>
+  <entry key="313">E-mail alapján</entry>
+  <entry key="314">Bejelentkezés alapján</entry>
+  <entry key="315">Az e-mail címed</entry>
+  <entry key="316">A bejelentkező neved</entry>
+  <entry key="317">Levél küldése (with reset link)</entry>
+  <entry key="318">Nem található az e-mail cím. Ellenőrizd, hogy ugyanazt az e-mail címet adtad meg amit a felhasználó létrehozásához használtál.</entry>
+  <entry key="319">Kérlek add meg az e-mail címet vagy felhasználói nevet.</entry>
+  <entry key="320">Nincs felhasználó ehhez a névhez.</entry>
+  <entry key="321">A levél, amit küldtünk neked, tartalmaz egy speciális linket, ellenőrizd a postafiókodat. Ha még nem kaptad meg a levelet, állítsd be a spamszűrődet és küldd újra a megerősítő e-mail-t.</entry>
+  <entry key="322">Hiba</entry>
+  <entry key="323">Üzenet</entry>
+  <entry key="324">Rossz Hash. A felhasználható nem található.</entry>
+  <entry key="325">Jelszó törlése</entry>
+  <entry key="326">Bejelentkező név</entry>
+  <entry key="327">Jelszóváltás</entry>
+  <entry key="328">Új jelszó</entry>
+  <entry key="329">Jelszó újra</entry>
+  <entry key="330">A begépelt jelszavak nem egyeznek meg.</entry>
+  <entry key="331">4 vagy több karakter; kis/nagybetű számít!</entry>
+  <entry key="332">Jelszó beállítva. Bejelentkezhetsz.</entry>
+  <entry key="333">Rendben</entry>
+  <entry key="334">Ismeretlen hiba. Írd meg a fejlesztőknek.</entry>
+  <entry key="335">Felhasználónév nem található</entry>
+  <entry key="336">Hibás jelszó</entry>
+  <entry key="337">Sikeres kijelentkezés</entry>
+  <entry key="338">Regisztráció letiltva.</entry>
+  <entry key="339">Hibás E-mail</entry>
+  <entry key="340">létező fájlnév, válassz mást</entry>
+  <entry key="341">a fájlnév túl rövid</entry>
+  <entry key="342">Cím nem menthető</entry>
+  <entry key="343">Felhasználó hozzáadva de hozzá kell rendelni Szervezethez, különben nem fog tudni bejelentkezni.</entry>
+  <entry key="344">Új bejegyzés</entry>
+  <entry key="345">Nincs ilyen mező azonosító.</entry>
+  <entry key="346">Nincs cimke ehhez a mezőhöz.</entry>
+  <entry key="347">Adminisztrátori jog szükséges</entry>
+  <entry key="348">Nyelv-szerkesztő</entry>
+  <entry key="349">Nyelv</entry>
+  <entry key="350">Cimke-ID</entry>
+  <entry key="351">Cimke-név</entry>
+  <entry key="352">Érték</entry>
+  <entry key="353">Mezőértékek</entry>
+  <entry key="354">Cimkenév</entry>
+  <entry key="355">Cimkeérték</entry>
+  <entry key="356">Cimke-ID</entry>
+  <entry key="357">Csak a cimke értékét törölheted és nem a mezőt! A mezőt nem törölheted, mert más nyelvben szükséges lehet.</entry>
+  <entry key="358">Hibás cimke-ID. A FieldLanguagesvalues_Id nem található az adatbázisban.</entry>
+  <entry key="359">Ez a mező nem törölhető. Csak a cimke értékét törölheted. Nincs betöltött cimke, vagy nincs kiválasztva vagy nincs definiálva ehhez a nyelvhez.</entry>
+  <entry key="360">exportálás</entry>
+  <entry key="361">Ki kell jelentkezned, hogy lásd a változásokat.</entry>
+  <entry key="362">Új nyelv hozzáadása</entry>
+  <entry key="363">Nyelv törlése</entry>
+  <entry key="364">Új nyelv hozzáadása</entry>
+  <entry key="365">Név</entry>
+  <entry key="366">nyelv hozzáadása</entry>
+  <entry key="367">Mentés</entry>
+  <entry key="368">ugrás az elsőre</entry>
+  <entry key="369">ugrás az előzőre</entry>
+  <entry key="370">ugrás a következőre</entry>
+  <entry key="371">ugrás az utolsóra</entry>
+  <entry key="372">a felhasználó beszél (Kattints ide a mikrofonja némításhoz, bekapcsoláshoz)</entry>
+  <entry key="373">hang ki/bekapcsolása</entry>
+  <entry key="374">Rendszer</entry>
+  <entry key="375">Beállításaid</entry>
+  <entry key="376">Üdv,</entry>
+  <entry key="377">Személyes adatok szerkesztése</entry>
+  <entry key="378">Új üzenetek:</entry>
+  <entry key="379">Új kép feltöltése</entry>
+  <entry key="380">Felh.adatok - mentés</entry>
+  <entry key="381">Minden szervezetnek léteznie kell!</entry>
+  <entry key="382">exportálás indítása</entry>
+  <entry key="383">Szervezetek szerint</entry>
+  <entry key="384">exportálás indítása</entry>
+  <entry key="385">Felh.adatok - betöltés</entry>
+  <entry key="386">válassz users.xml -t</entry>
+  <entry key="387">betöltés</entry>
+  <entry key="388">XML-be mentés - Ezek a fájlok felhasználhatók: - A projektnek felajánlható - Más rendszerbe betölthető - Mentés - Személyre szabható - Betehető a language könyvtárba telepítéshez</entry>
+  <entry key="389">Válassz ki egy betöltendő nyelvi fájlt. Válaszd ki a kívánt nyelvet a legördülő menüből! Mindegy, hogy a fájlnak mi a neve, a kiválasztott nyelvhez lesz mentve!</entry>
+  <entry key="390">betöltés - válassz fájlt</entry>
+  <entry key="391">Mentés mint</entry>
+  <entry key="392">Név:</entry>
+  <entry key="393">Megjegyzés:</entry>
+  <entry key="394">mentés</entry>
+  <entry key="395">Felvételek</entry>
+  <entry key="396">Felvételek megtekintése</entry>
+  <entry key="397">Nyilvános és zártkörű szobák felvételei</entry>
+  <entry key="398">Felhasználók :</entry>
+  <entry key="399">Csatlakozott:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Felhasználók ebben a szobában:</entry>
+  <entry key="402">frissítés</entry>
+  <entry key="403">A szoba megtelt. Próbálkozz pár perc múlva.</entry>
+  <entry key="404">kattints a szobára az információkér</entry>
+  <entry key="405">Csevegés a felhasználókkal a szobában:</entry>
+  <entry key="406">Szoba:</entry>
+  <entry key="407">Felhasználók a szobában:</entry>
+  <entry key="408">innentől:</entry>
+  <entry key="409">felvétel lejátszása</entry>
+  <entry key="410">Hossz:</entry>
+  <entry key="411">Dátum:</entry>
+  <entry key="412">Felvétel üzemmód! Nem változtatható meg egy érték sem, mert ez egy felvett fájl!</entry>
+  <entry key="413">A felvétel lejátszása</entry>
+  <entry key="414">Lejátszás / Megállítás</entry>
+  <entry key="415">Felvétel indítása</entry>
+  <entry key="416">Felvétel megállítása</entry>
+  <entry key="417">Felvétel:</entry>
+  <entry key="418">Már valaki felvételt készít:</entry>
+  <entry key="419">Felvétel! Felhasználó:</entry>
+  <entry key="420">mégse</entry>
+  <entry key="421">A felvétel meg lesz szakítva mentés nélkül.</entry>
+  <entry key="422">újraindít</entry>
+  <entry key="423">Zárd be az ablakot és indítsd újra a felvételt.</entry>
+  <entry key="424">Vonalszin változtatás</entry>
+  <entry key="425">Szin választás</entry>
+  <entry key="426">Ki / Bekapcsolja a vonalszint</entry>
+  <entry key="427">Kitöltőszin változtatás</entry>
+  <entry key="428">Ki / Bekapcsolja a kitöltésszint</entry>
+  <entry key="429">Vonalvastagság változtatás</entry>
+  <entry key="430">bezár</entry>
+  <entry key="431">Betűméret változtatás</entry>
+  <entry key="432">Felvétel törlés</entry>
+  <entry key="433">Vendég</entry>
+  <entry key="434">Kitől:</entry>
+  <entry key="435">Név</entry>
+  <entry key="436">Szoba</entry>
+  <entry key="437">Dátum</entry>
+  <entry key="438">mégse</entry>
+  <entry key="439">felvétel</entry>
+  <entry key="440">Név</entry>
+  <entry key="441">Dátum</entry>
+  <entry key="442">Szerver-csevegési napló törlés</entry>
+  <entry key="443">Csevegés</entry>
+  <entry key="444">üzenet küldése</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Válassz engedélyezett eszközt</entry>
+  <entry key="448">Hang és kép</entry>
+  <entry key="449">Csak hang</entry>
+  <entry key="450">Csak kép</entry>
+  <entry key="451">Hang és kép nélkül (álló kép)</entry>
+  <entry key="452">Sem hang sem kép nem kerül megosztásra a gépedről, hanem a felhasználói adataidból a feltöltött kép. Használd ezt, ha gondjaid vannak a sávszélességgel vagy nagyon lassú az Interneted.</entry>
+  <entry key="453">h</entry>
+  <entry key="454">k</entry>
+  <entry key="455">sz</entry>
+  <entry key="456">cs</entry>
+  <entry key="457">p</entry>
+  <entry key="458">szo</entry>
+  <entry key="459">v</entry>
+  <entry key="460">hétfő</entry>
+  <entry key="461">kedd</entry>
+  <entry key="462">szerda</entry>
+  <entry key="463">csütörtök</entry>
+  <entry key="464">péntek</entry>
+  <entry key="465">szombat</entry>
+  <entry key="466">vasárnap</entry>
+  <entry key="467">hsz</entry>
+  <entry key="468">Hetek száma</entry>
+  <entry key="469">január</entry>
+  <entry key="470">február</entry>
+  <entry key="471">március</entry>
+  <entry key="472">április</entry>
+  <entry key="473">május</entry>
+  <entry key="474">június</entry>
+  <entry key="475">július</entry>
+  <entry key="476">augusztus</entry>
+  <entry key="477">szeptember</entry>
+  <entry key="478">október</entry>
+  <entry key="479">november</entry>
+  <entry key="480">december</entry>
+  <entry key="481">Naptár</entry>
+  <entry key="482">Résztvevők</entry>
+  <entry key="483">Nézet beállítások megtekintése</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Szél. | Magasság</entry>
+  <entry key="486">Video-Ablak</entry>
+  <entry key="487">Előadói-Ablak</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Tábla-Ablak</entry>
+  <entry key="490">Engedélyezett</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Szél. | Magasság</entry>
+  <entry key="493">Fájlok,csevegés,résztvevők - Ablak</entry>
+  <entry key="494">Engedélyezett</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Szél. | Magasság</entry>
+  <entry key="497">Az előadó elhagyta a szobát. Jelenleg nincs előadó. Jelentkezhetsz előadónak vagy várhatsz.</entry>
+  <entry key="498">Nincs előadó a szobában, de vannak résztvevők. Jelentkezz előadónak vagy várj.</entry>
+  <entry key="499">{0} visszajelzés</entry>
+  <entry key="500">{0} - Meghívó</entry>
+  <entry key="501">Üzenet ettől a felhasználótól:</entry>
+  <entry key="502">Üzenet:</entry>
+  <entry key="503">Kattints erre a linkre a találkozókon való részvételhez:</entry>
+  <entry key="504">Kattints ide a szobába való belépéshez</entry>
+  <entry key="505">ha problémád adódik a linkkel akkor ezt másold a böngésző címsorába:</entry>
+  <entry key="506">{0} Regisztráció</entry>
+  <entry key="507">Felhasználói adataid:</entry>
+  <entry key="508">Bejel.név:</entry>
+  <entry key="509">Jelszó:</entry>
+  <entry key="510">EMail:</entry>
+  <entry key="511">{0}-Csapat</entry>
+  <entry key="512">{0} Regisztráció</entry>
+  <entry key="513">{0} - Jelszó csere</entry>
+  <entry key="514">Kattints erre a linkre a jelszó cseréhez:</entry>
+  <entry key="515">Kattints ide az új jelszó megadásához</entry>
+  <entry key="516">ha problémád adódna a linkkel, kérlek másold át ezt a böngésződ címsorába:</entry>
+  <entry key="517">{0} Jelszó váltás</entry>
+  <entry key="518">Kérlek adj meg egy érvényes dátumot, például 24.12.2001 (nn.hh.éééé)</entry>
+  <entry key="519">Kérlek adj meg egy érvényes e-mail címet, például name@mail.com</entry>
+  <entry key="520">Kérlek adj meg egy számot, például 1.00</entry>
+  <entry key="521">Kérlek egész számoz adj meg, például 100</entry>
+  <entry key="522">Kérlek érvényes telefonszámot adj meg, például ++49 0123 123123</entry>
+  <entry key="523">Kérlek érvényes időpontot adj meg, például 12:23 (óó:pp)</entry>
+  <entry key="524">Jelszóval védve</entry>
+  <entry key="525">Jelszó</entry>
+  <entry key="526">Érvényességi periódus</entry>
+  <entry key="527">Végtelen</entry>
+  <entry key="528">Időszak</entry>
+  <entry key="529">Egyszer használható</entry>
+  <entry key="530">Ettől érvényes:</entry>
+  <entry key="531">Eddig érvényes:</entry>
+  <entry key="532">Meghívás OpenMeetingre</entry>
+  <entry key="533">Nincs meghívás ehhez a meghívó kódhoz.</entry>
+  <entry key="534">A meghívás már használva volt. Ez a típusú meghívás nem használható fel többször.</entry>
+  <entry key="535">A meghívó kód nem érvényes.</entry>
+  <entry key="536">Jelszó:</entry>
+  <entry key="537">Jelszó ellenőrzés</entry>
+  <entry key="538">Hibás jelszó!</entry>
+  <entry key="539">Böngésző</entry>
+  <entry key="540">Hang/kép szinkronizáció</entry>
+  <entry key="541">A bejelentkezés helyes volt, de session vagy nem aktív vagy nincs a szerveren tárolva. Újra be kell jelentkezned.</entry>
+  <entry key="542">Ez a SessionId nincs bejelentkezve, vagy nincsen adminisztrátori joga. A SOAP átjárónak adminisztrátori jogokkal kell egy felhasználó új felhasználó beágyazásához.</entry>
+  <entry key="543">Ehhez a Session-höz nincs Remoteuser-Data kapcsolat. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">A felvételkészítő egyenlőre béta állapotú!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-méret</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-méret</entry>
+  <entry key="549">w</entry>
+  <entry key="550">szélesség</entry>
+  <entry key="551">h</entry>
+  <entry key="552">magasság</entry>
+  <entry key="553">Áttetszőre váltás</entry>
+  <entry key="554">Böngésző megnyitása</entry>
+  <entry key="555">Bömgésző bezárása</entry>
+  <entry key="556">A kapcsolat megszakadt a szerverrel. Ellenőrizze az internet kapcsolatát, majd lépjen be újra az alkalmazásba.</entry>
+  <entry key="557">Mutató</entry>
+  <entry key="558">Szinkronizálás</entry>
+  <entry key="559">Szinkronizálás a látogatókkal, kérem várjon</entry>
+  <entry key="560">&lt;u&gt;Letöltés mint SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Letöltés mint PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Letöltés mint JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Letöltés mint PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Letöltés mint TIF&lt;/u&gt;</entry>
+  <entry key="565">Emlékeztető:</entry>
+  <entry key="566">Kategória:</entry>
+  <entry key="567">Ismétlés:</entry>
+  <entry key="568">nincs</entry>
+  <entry key="569">Hely:</entry>
+  <entry key="570">Indul</entry>
+  <entry key="571">Vége</entry>
+  <entry key="572">Cím:</entry>
+  <entry key="573">Leírás:</entry>
+  <entry key="574">Személyek meghívása</entry>
+  <entry key="575">Napi</entry>
+  <entry key="576">Havi</entry>
+  <entry key="577">Évi</entry>
+  <entry key="578">Találkozó vége miután a találkozó elindult!</entry>
+  <entry key="579">Adja meg a címet!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Jelölje be, ha jobbról-balra író nyelvet akar használni (fordított irányú írás)</entry>
+  <entry key="582">Vezérlőpult</entry>
+  <entry key="583">Megtekintheti a rögzített felvételeket, eseményeket</entry>
+  <entry key="584">Előadás - Indítson konferenciát 4 (től max 16) felhasználóval&lt;br/&gt; mindenkinek audio+video lehetőséggel</entry>
+  <entry key="585">Előadás - Indítson konferenciát 200 látogatóig&lt;br/&gt;A moderátornak audio+video lehetősége van</entry>
+  <entry key="586">Felhasználó hozzáadása, konferenciaszoba, szervezet &lt;br/&gt; + beállítások változatása</entry>
+  <entry key="587">Látogató belépett a konferenciába</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Belépés</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Dokumentum betöltés. Kérjük várjon ameddig az összes kliens szinkronizálódik.</entry>
+  <entry key="592">Feltöltés kész, konverzió folyamatban ...</entry>
+  <entry key="593">Feltöltés indítása</entry>
+  <entry key="594">Feltöltő és importáló ablak. Válassza ki a file-t a meghajtóról.</entry>
+  <entry key="595">Megszakít</entry>
+  <entry key="596">File választása</entry>
+  <entry key="597">Kapcsolatok</entry>
+  <entry key="598">Érték</entry>
+  <entry key="599">Stream azonosító</entry>
+  <entry key="600">Belépés</entry>
+  <entry key="601">Csatlakozott</entry>
+  <entry key="602">Konferencia szoba / Nézet</entry>
+  <entry key="603">User kitiltása</entry>
+  <entry key="604">User kitiltása</entry>
+  <entry key="605">Biztosan kitiltja a látogatót?&lt;br/&gt; Csak a jelenlegi konferenciából kerül kitiltásra. A látogató vissza tud jelentkezni.</entry>
+  <entry key="606">Az Adminisztrátor,Moderátor kitiltotta a teremből.</entry>
+  <entry key="607">Telefon</entry>
+  <entry key="608">A látogató moderátor ebben a konferenciában.</entry>
+  <entry key="609">Látogatónak engedélyezi a táblára rajzolást.</entry>
+  <entry key="610">(Újra) Indítja az Audio/Video eszköz beállítását</entry>
+  <entry key="611">Ennek a látogatónak engedélyezi a táblára rajzolást.</entry>
+  <entry key="612">Visszaveszi a táblára rajzolás lehetőségét</entry>
+  <entry key="613">Látogatók</entry>
+  <entry key="614">Fileok</entry>
+  <entry key="615">Tábla</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Ön több szervezetnek is tagja, válassza ki a megfelelőt.</entry>
+  <entry key="618">Ez a terem megtelt, próbálkozzon később</entry>
+  <entry key="619">Terem típusa</entry>
+  <entry key="620">Talákozó szoba</entry>
+  <entry key="621">Szerver idő</entry>
+  <entry key="622">{0} - Emlékeztető</entry>
+  <entry key="623">Üzenet a felhasználótól:</entry>
+  <entry key="624">Üzenet:</entry>
+  <entry key="625">Kattintson a linkre az előadásba való belépéshez:</entry>
+  <entry key="626">Kattintson ide az előadásba való belépéshez</entry>
+  <entry key="627">ha problémája adódik a link megnyitásával, másolja ki és illessze be a böngésző címsorába:</entry>
+  <entry key="628">keresés belül</entry>
+  <entry key="629">külső felhasználók</entry>
+  <entry key="630">Előnév</entry>
+  <entry key="631">Név</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Kilépés jóváhagyása</entry>
+  <entry key="634">Kijelentkezik most?</entry>
+  <entry key="635">Eszközök</entry>
+  <entry key="636">Demo Terem</entry>
+  <entry key="637">Demo Idő</entry>
+  <entry key="638">Előadás ideje</entry>
+  <entry key="639">Ez Demo terem. Ön autómatikusan kiléptetésre kerül:</entry>
+  <entry key="640">Moderálja</entry>
+  <entry key="641">Várnia kell egy moderátor belépésére. Moderátor lehet előadó, a terem létrehozó előadója, vagy a rendszeradminisztrátor.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Bejövő képernyő megosztás</entry>
+  <entry key="644">Egy új képernyőmegosztás érkezett (küldő):</entry>
+  <entry key="645">Meosztás indítása</entry>
+  <entry key="646">Új előadás hozzáadása</entry>
+  <entry key="647">Előadó terem</entry>
+  <entry key="648">Esemény</entry>
+  <entry key="649">Moderálás</entry>
+  <entry key="650">Látogató moderálása</entry>
+  <entry key="651">Terem moderálása</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Ennek a szervezetnek a modárátoraihoz adja a felhasználót?</entry>
+  <entry key="654">Válassza ki a szervezetet, mielőtt hozzáadja a felhasználót!</entry>
+  <entry key="655">Szervezet - Moderator</entry>
+  <entry key="656">Valóban törli a felhsználót ebből a szervezetből?</entry>
+  <entry key="657">Ez a felhasználó moderátor</entry>
+  <entry key="658">Ez a felhasználó nem moderátor</entry>
+  <entry key="659">Azt akarja, hogy ez a felhasználó ne legyen moderátor ebben a szervezetben?</entry>
+  <entry key="660">Hozzáad/töröl felhasználót vagy konferencia szobát a szervezethez?</entry>
+  <entry key="661">Valóban törli ezt a felvételt?</entry>
+  <entry key="662">Valóban törli ezt a felhasználót a szervezetből? Csak a szervezettel való kapcsolat törlődik, a felhasználó tényleges törlését az admnisztrátori felületen tudja elvégezni.</entry>
+  <entry key="663">Ön nem törölheti ezt a felhasználót!</entry>
+  <entry key="664">Ehhez a tevékenységhez Adminisztrátori jog szükséges!</entry>
+  <entry key="665">Nem tartozik Session ehhez az ID-hez.</entry>
+  <entry key="666">Ez Adminisztrátori, Moderátori fiók. Ezt csak Adminisztrátori panelen szerkesztheti.</entry>
+  <entry key="667">A regisztráció aktiválásához kattintson a linkre, vagy másolja ki és illessze a böngésző címsorába.</entry>
+  <entry key="668">Kattintson az E-Mail megerősítéshez</entry>
+  <entry key="669">Nincs felhasználó ezzel a Hash azonosítóval.</entry>
+  <entry key="670">A felhasználó már aktiválásra került!</entry>
+  <entry key="671">Sikeresen aktiválta a felhasználói fiókját!</entry>
+  <entry key="672">Belépés most</entry>
+  <entry key="673">Hozzáférése nem aktív. Először aktiválja a regisztrációkor kapott megerősítő e-mail segítségével.</entry>
+  <entry key="674">Regisztráció kérését fogadtuk. Küldtünk egy megerősítést kérő linket a megadott e-mail címére, kérjük keresse fel az e-mail fiókját, a regisztrációs kérést vissza kell igazolnia!</entry>
+  <entry key="675">Moderációs jogok visszavétele a látogatótól</entry>
+  <entry key="676">Moderációs jog adása a látogatónak</entry>
+  <entry key="677">Látogató</entry>
+  <entry key="678">Hozzáférés a táblához</entry>
+  <entry key="679">Moderátor</entry>
+  <entry key="680">Moderáció: Válasszon a listából és adjon jogot a táblához, moderációhoz, videóhoz...stb való hozzáféréshez.</entry>
+  <entry key="681">Ez a látogató már moderátor</entry>
+  <entry key="682">Ez Ön! Nem veheti el a moderációs jogot.</entry>
+  <entry key="683">Bekapcsolja az Audio / Video lehetőséget a látogatónak</entry>
+  <entry key="684">Kikapcsolja az Audio/Video lehetőséget a látogatónál</entry>
+  <entry key="685">Moderátori jogot kérek</entry>
+  <entry key="686">Hozzáférést kérek a táblához</entry>
+  <entry key="687">Audio/Video hozzáférést kérek</entry>
+  <entry key="688">Moderátori jogot kaptál</entry>
+  <entry key="689">Hozzáférést kaptál a táblához</entry>
+  <entry key="690">Audio/Video hozzáférést kaptál</entry>
+  <entry key="691">Üzenet a Moderátornak</entry>
+  <entry key="692">A látogató</entry>
+  <entry key="693">moderáció megadásához. Kattintson a névre és a megfelelő ikonra a moderáció hozzáadásához, visszavételéhez.</entry>
+  <entry key="694">tábla használatához. Kattintson a névre és a rajztábla ikonra a tábla használatának hozzáadásához, visszavételéhez.</entry>
+  <entry key="695">Audio/Video hozzáféréséhez. Kattintson a nevére és a Mikrofon/Kamera ikonra a hozzászólás engedélyezéséhez, visszavételéhez.</entry>
+  <entry key="696">Várjon amég a Moderátor belép a terembe.</entry>
+  <entry key="697">Mégsem</entry>
+  <entry key="698">Ment</entry>
+  <entry key="699">Nap</entry>
+  <entry key="700">Hónap</entry>
+  <entry key="701">Év</entry>
+  <entry key="702">File feltöltése</entry>
+  <entry key="703">Könyvtár létrehozása</entry>
+  <entry key="704">Frissít</entry>
+  <entry key="705">Kuka (húzza bele a kiválasztott elemet)</entry>
+  <entry key="706">Saját fileok (Home Drive)</entry>
+  <entry key="707">Terem fileok (Public Drive)</entry>
+  <entry key="708">File hozzáadása</entry>
+  <entry key="709">Könyvtár létrehozása</entry>
+  <entry key="710">Könyvtár törlése</entry>
+  <entry key="711">Név szerkesztése</entry>
+  <entry key="712">Új könyvtár</entry>
+  <entry key="713">Biztosan törli ezt az elemet?</entry>
+  <entry key="714">Keresés</entry>
+  <entry key="715">Keresés</entry>
+  <entry key="716">Dokumentum megnyitása</entry>
+  <entry key="717">Összes mutatása (Fa nézet)</entry>
+  <entry key="718">Dokumentum bezárása</entry>
+  <entry key="719">File törlése</entry>
+  <entry key="720">Nem rajzolhat a táblára. Moderátornak kell lennie, vagy kérjen a moderátortól hozáférést.</entry>
+  <entry key="721">Dokumentum tulajdonságai</entry>
+  <entry key="722">Kliens indítása (külső)</entry>
+  <entry key="723">Kliens indítása (HTTP)</entry>
+  <entry key="724">A látogató megosztotta a képernyőjét. Megtekinti?</entry>
+  <entry key="725">A képernyőd meg van osztva. A képernyőmegosztás leállításához kattintson a kliensen a Leállítás gombra.</entry>
+  <entry key="726">Megosztás</entry>
+  <entry key="727">A képernyő már meg van osztva!</entry>
+  <entry key="728">Képernyő nézete</entry>
+  <entry key="729">Kilépés</entry>
+  <entry key="730">Képernyő megosztó</entry>
+  <entry key="731">Kattintson a Start-ra a képernyő megosztásához</entry>
+  <entry key="732">Megosztás indítása</entry>
+  <entry key="733">Megosztás leállítása</entry>
+  <entry key="734">Válassza ki a megosztandó területet:</entry>
+  <entry key="735">Szélesség megadása</entry>
+  <entry key="736">A megosztás befejeződött!</entry>
+  <entry key="737">Magasság megosztása</entry>
+  <entry key="738">X-eltolás</entry>
+  <entry key="739">Y-eltolás</entry>
+  <entry key="740">Szélesség:</entry>
+  <entry key="741">Magasság:</entry>
+  <entry key="742">A kapcsolat lezárult a szerverrel</entry>
+  <entry key="743">Mégse</entry>
+  <entry key="744">Indítás kívülről</entry>
+  <entry key="745">Ha bezárja ezt a nézetet, nem fogja tudni újraindítani ebben a munkamenetben.</entry>
+  <entry key="746">Megerősíti az aktuális nézet leállítását</entry>
+  <entry key="747">Képernyő megosztása</entry>
+  <entry key="748">Munkamenet rögzítése</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Előző</entry>
+  <entry key="752">Következő</entry>
+  <entry key="753">Újratölt</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Betöltés</entry>
+  <entry key="756">Adja hozzá alapértelmezett weboldalaként a profiljában.</entry>
+  <entry key="757">Teszt beállítás</entry>
+  <entry key="758">Teztelje a kameráját/mikrofonját pár másodperces felvétellel, mielőtt belépne a konferencia terembe. Visszajátszuk a felvételt, hogy ellenőrizhesse a működést.</entry>
+  <entry key="759">Ne mutassa ezt többet</entry>
+  <entry key="760">Mégsem</entry>
+  <entry key="761">Belépés a konferenciába</entry>
+  <entry key="762">Ne figyelmeztessen többet</entry>
+  <entry key="763">Felvétel</entry>
+  <entry key="764">Lejátszás</entry>
+  <entry key="765">Beléphet kamerát/mikrofon nélkül is. Látogatóként ezek nélkül is használhatja a rajztáblát, megoszthatja képernyőjét, írhat a Chat-be.</entry>
+  <entry key="766">MNegállít</entry>
+  <entry key="767">Jelerősség mérő</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Belépés akonferenciába</entry>
+  <entry key="770">Esemény indul</entry>
+  <entry key="771">Konferencia szoba választása</entry>
+  <entry key="772">Beállítás ellenőrzése</entry>
+  <entry key="773">Konferencia indítása</entry>
+  <entry key="774">Hogyan indíthat konferenciát</entry>
+  <entry key="775">Felvétel indítása</entry>
+  <entry key="776">Ne mutassa az Audio / Video tesztet (Recording) mikor belép akonferenciába.</entry>
+  <entry key="777">Nyilvános termek</entry>
+  <entry key="778">Nyilvános termekhez minden felhasználó hozzáfér.</entry>
+  <entry key="779">Zárt termek</entry>
+  <entry key="780">Zárt termekhez csak a szervezet felhasználói férhetnek hozzá.</entry>
+  <entry key="781">Saját termek</entry>
+  <entry key="782">Ezen szekció termeit csak a létrehozó személy éri el (moderátorként). Bejegyezheti az eseménynaptárba és megadhat kezdeti/vége időpontokat. Itt csak az érvényességi ideig jelenik meg a listában.</entry>
+  <entry key="783">Ennek a moderátorának kell lenned ehhez.</entry>
+  <entry key="784">Moderáció megadása</entry>
+  <entry key="785">Tábla használat megadása</entry>
+  <entry key="786">Kamera/mikrofon használat megadása</entry>
+  <entry key="787">Ezt a munkamenetet már használ(ja/ta). Nem használhatja többször.</entry>
+  <entry key="788">Indítás</entry>
+  <entry key="789">Kilépés</entry>
+  <entry key="790">Valóban kilép? Törlődni fognak a feltöltött dokumentumok, rajztábla, chat tartalma.</entry>
+  <entry key="791">Kilépé s konferenciából</entry>
+  <entry key="792">Termek</entry>
+  <entry key="793">Válassza ki a termet az előadáshoz</entry>
+  <entry key="794">Az esemény nincs mentve a naptárba. Kérjük mentse most, vagy távolítsa el.</entry>
+  <entry key="795">Kérjük adjon legalább egy látogatót az előadásához !</entry>
+  <entry key="796">Biztosan törli ezt az eseményt?</entry>
+  <entry key="797">Figyelmeztetés</entry>
+  <entry key="798">Esemény hozzáadása</entry>
+  <entry key="799">Nap</entry>
+  <entry key="800">Hét</entry>
+  <entry key="801">Hónap</entry>
+  <entry key="802">Leírás</entry>
+  <entry key="803">Látogatók</entry>
+  <entry key="804">{0}, az Ön webkonferencia platformja. Kövesse az utasításokat és gombnyomásra nyithat egy konferenciát, vagy bejegyezhet a naptárba és beállíthat egy előadást előre.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">A konferencia beállításához adja hozzá az eseményt a naptárhoz.</entry>
+  <entry key="807">Segítségre van szüksége?</entry>
+  <entry key="808">Fenntartott</entry>
+  <entry key="809">Keresés</entry>
+  <entry key="810">Hozzáad</entry>
+  <entry key="811">Nincs felhasználó kiválasztva. Vállasszon elemet a listából és adja hozzá.</entry>
+  <entry key="812">Látogató hozzáadása</entry>
+  <entry key="813">Mentés</entry>
+  <entry key="814">Törlés</entry>
+  <entry key="815">Esemény részletei</entry>
+  <entry key="816">Alapértelmezett Moderátor</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Név</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Új alapértelmezett moderátor hozzáadása</entry>
+  <entry key="822">Super Moderator</entry>
+  <entry key="823">Moderált terem, ha a felhasználó moderátor, vagy adminisztrátor, automatikusan moderátora lesz a teremnek. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator mindíg moderátora a teremnek, a többi moderátor jogait Ő szabályozhatja</entry>
+  <entry key="825">Super Moderátorrá teszi a felhasználót</entry>
+  <entry key="826">Super Moderator visszavétele a felhasználótól</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Ha szervezeteket rendel a teremhez, csak a szervezet tagjai érhetik el a termet (Ez csak a "Nyilvános" típusú termeknél értelmezett)</entry>
+  <entry key="829">Moderáció</entry>
+  <entry key="830">Limitációk</entry>
+  <entry key="831">Szervezet</entry>
+  <entry key="832">Megerősíti?</entry>
+  <entry key="833">Valóban törli ezt az elemet? Kattintson a mentés gomba a változások végrehajtásához!</entry>
+  <entry key="834">TNincs felhasználó kiválasztva. Kérjük előbb válassza ki és adja hozzá!</entry>
+  <entry key="835">Új alapértelmezett Moderátor hozzáadása</entry>
+  <entry key="836">Super Moderátorr-á teszi ezt a felhasználót? A Super Moderator nem csak moderátora a teremnek, elveheti a moderátori jogot másoktól. A beállítások alkalmazásához mentse azokat!</entry>
+  <entry key="837">Elveszi a Super Moderátor jogot a felhasználótól? A beállítások alkalmazásához mentse azokat!</entry>
+  <entry key="838">Ez a felhazsnáló Super-Moderator. Nem veheti el a Super-Moderator jogot!</entry>
+  <entry key="839">Biztosan törli ezt a filet/könyvtárat?</entry>
+  <entry key="840">File/Könyvtár törlése?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Tulajdonságok</entry>
+  <entry key="844">Mutasd az egér pozíciót a nézőknek</entry>
+  <entry key="845">Audio megosztása SIP alkalmazáson</entry>
+  <entry key="846">Audio megosztása SIP-n és video flash alatt</entry>
+  <entry key="847">Teljes méret</entry>
+  <entry key="848">Képernyő nézete</entry>
+  <entry key="849">A felhasználó</entry>
+  <entry key="850">megosztotta a képernyőjét. Megnézi?</entry>
+  <entry key="851">Bezár</entry>
+  <entry key="852">Nagyító</entry>
+  <entry key="853">A munkamenetet a felhasználó lezárta!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">Új képernyő megosztás</entry>
+  <entry key="856">Minimalizál</entry>
+  <entry key="857">Maximalizál</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Felvétel ideje</entry>
+  <entry key="860">Felvételeim</entry>
+  <entry key="861">Publikus felvételek</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Név</entry>
+  <entry key="864">Hossz</entry>
+  <entry key="865">Dátum</entry>
+  <entry key="866">By</entry>
+  <entry key="867">Lejátszás</entry>
+  <entry key="868">Videóm</entry>
+  <entry key="869">Felvétel</entry>
+  <entry key="870">Megoszthatja képernyőjét, rögzítheti az előadást. Hogy mások láthassák a képernyőjét, kattintson fent a megosztás gombra. Ha csak rögzíteni szeretné az előadást, kattintson a felvétel indítása gombra.</entry>
+  <entry key="871">Felvétel indítása</entry>
+  <entry key="872">Felvétel vége</entry>
+  <entry key="873">FLV-File letöltése</entry>
+  <entry key="874">Konferencia szoba</entry>
+  <entry key="875">Lejátszás</entry>
+  <entry key="876">Megállít</entry>
+  <entry key="877">A felhasználó mikrofonja aktív</entry>
+  <entry key="878">Megosztás leállítása</entry>
+  <entry key="879">Engedéylezi a felhasználók kérdését</entry>
+  <entry key="880">Kapcsolja ki, ha nem akarja, hogy kérdésekkel zavarják. A moderátor ilyenkor nem kapja a ("Kérdésem van") üzenetet.</entry>
+  <entry key="881">Rendben</entry>
+  <entry key="882">AVI-File letöltése</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Csak Audio</entry>
+  <entry key="887">Hiba történt a felvétel készítése közben.</entry>
+  <entry key="888">A felvétel még nem nézhewtő vissza. Kérjük próbálja ismét pár perc múlva.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Felvétel üzenet</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP alkalmazás nem áll készen</entry>
+  <entry key="893">SIP hozzáférés beállítása</entry>
+  <entry key="894">SIP beállítás a felhasználóknak. Kapcsolja be az SIP-t adminisztrátorként &gt; Beállítások (Key: enable_sip). Az SIP adat minden felhasználónak autómatikusan létrejön. Az újrageneráláshoz ellenőrizze "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-Felhasználó</entry>
+  <entry key="896">Sip-Jelszó</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">A bejelentkezés az SIP szerverre nem sikerült. Ellenőrizze az SIP hozzáférés adatait és az authentikációt az SIP szolgáltatójánál. Adminisztrátorként lépjen be és ellenőrizze a beállításokat. Felhasználók, Moderátorok nem módosíthatják a paramétereket.</entry>
+  <entry key="899">A bejelentkezés az SIP szerverre nem sikerült. Forduljon a szolgáltatóhoz!</entry>
+  <entry key="900">Bejelentkezés az SIP-Szerverre ...</entry>
+  <entry key="901">Bejelentkezés az SIP-Szerverre ...</entry>
+  <entry key="902">Log mutatása</entry>
+  <entry key="903">Log üzenet a rögzítő folyamattól</entry>
+  <entry key="904">SIP-Alkalmazás menedzsment</entry>
+  <entry key="905">Az SIP-Alkalmazás nem áll készem. Fogadja el az alkalmazást és próbálja újra!</entry>
+  <entry key="906">Moderációs lehetőséget kérek</entry>
+  <entry key="907">Bejegyzés változásainak mentése</entry>
+  <entry key="908">A bejegyzés megváltozotta. Menti a beállításokat? &lt;br/&gt;&lt;br/&gt;Minden látogató értesítést fog kapni e-mailben a változásokról (függ a figyelmeztetés típusától).</entry>
+  <entry key="909">Egyéb felvételetkhez való hozzáféréshez be kell jelentkeznie a {0} alkalmazásba.</entry>
+  <entry key="910">Felhasználó kiválasztotta ezt a videót</entry>
+  <entry key="911">Ezen a felületen elérhető felhasználók</entry>
+  <entry key="912">Moderátora vagy ennek az interjúnek. Döntsd el ki beszéljen ebben az interjúban, indítsd/állítsd meg a videó rögzítését.</entry>
+  <entry key="913">Felvétel indítása</entry>
+  <entry key="914">Felvétel megállítása</entry>
+  <entry key="915">A felvétel már folyamatban van.</entry>
+  <entry key="916">A felvétel megállításra került, vagy nem indítható most.</entry>
+  <entry key="917">Az interj felvétele sikeresen elindult!</entry>
+  <entry key="918">Mégsem</entry>
+  <entry key="919">A felvétel feldolgozása akár 5 perc is lehet 1 perces video esetén. A kiválasztott videó feldolgozása, kódolása:</entry>
+  <entry key="920">Írja be a jelszavát ismét, miután az SIP adatokat megadta</entry>
+  <entry key="921">Újra generált SIP adatok</entry>
+  <entry key="922">Nem helyezheti át ezt a filet/könyvtárat ebbe az alkönyvtárba!</entry>
+  <entry key="923">Privát meghajtó mérete</entry>
+  <entry key="924">Publikus meghajtó mérete</entry>
+  <entry key="925">Licenc beállítások</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Licenc ellenőrzése</entry>
+  <entry key="928">Terjedelem</entry>
+  <entry key="929">Lejárat dátuma</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Teljes idő</entry>
+  <entry key="932">A licence lejárt. Vásároljon idő hosszabbítást (Pay-per-minute) vagy feltöltést.</entry>
+  <entry key="933">Kattintson a vásárláshoz</entry>
+  <entry key="934">Rendelkezésre álló idő:</entry>
+  <entry key="935">Felhasználói licenc információk</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Bezár</entry>
+  <entry key="938">A licence lejárt. Vásároljon idő hosszabbítást (Pay-per-minute) vagy feltöltést.</entry>
+  <entry key="939">Licenc beállítások</entry>
+  <entry key="940">Vásároljon időhosszabbítást a konferenciához (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; vagy vásároljon feltöltést 3-12 hónapot.&lt;br/&gt;&lt;br/&gt;Küldjön meghívókat (direkt linkek a konferencia teremből) vagy készítsen webkonferenciákat a naptárral együtt a külső felhasználók csak előfizetéssel férhetnek hozzá!</entry>
+  <entry key="941">60 perc vásárlása 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">5 óra 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">3 hónap 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">6 hónap 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Perc alapú fizetés</entry>
+  <entry key="946">Feltöltés értékek</entry>
+  <entry key="947">Végtelen licencel rendelkezik</entry>
+  <entry key="948">Licence lejár:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Vásároljon új kreditet!</entry>
+  <entry key="951">Saját szervere van?</entry>
+  <entry key="952">Szeretné a szerverén az {0} alkalmazást telepíteni, integrálni a Moodle, SugarCRM, Weboldalalal, Internettel? Darabáras díj 500 Euro per telepítéstől!</entry>
+  <entry key="953">Vagy vegye fel a kapcsolatot</entry>
+  <entry key="954">Válaszra várok:</entry>
+  <entry key="955">Üzenete:</entry>
+  <entry key="956">Küldés</entry>
+  <entry key="957">Kattintson ide a kapcsolati és ár információk kéréséhez</entry>
+  <entry key="958">Kredit kártya adatok</entry>
+  <entry key="959">Vezetéknév</entry>
+  <entry key="960">Keresztnév</entry>
+  <entry key="961">Kredit kártya típusa</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Érvényességi idő</entry>
+  <entry key="968">Kártya ellenőrző száma (CVV)</entry>
+  <entry key="969">Fizetési cím</entry>
+  <entry key="970">Cím</entry>
+  <entry key="971"></entry>
+  <entry key="972">Város</entry>
+  <entry key="973">Ország</entry>
+  <entry key="974">Állam (Only US)</entry>
+  <entry key="975">Irányítószám</entry>
+  <entry key="976">Összeg</entry>
+  <entry key="977">Beküld</entry>
+  <entry key="978">1. lépés: {0} - Fizeti</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Kattintson a "Check out with Paypal" a fizetéshez.&lt;br/&gt; PayPal alkalmas VISA, MasterCard, Discover vagy American Express. &lt;br/&gt;Nem szükséges PayPal regisztrációval rendelkeznie. &lt;br/&gt;Németország területén direktben is fizethet (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Köszönjük, hogy az {0} vásárolta. &lt;br/&gt; &lt;br/&gt; A vásárlás lekönyvelésével aktivljuk az accountját.&lt;br/&gt; A számlát PDF-ként e-mailben kapja meg.&lt;br/&gt;A profiljában ellenőrizheti a tranzakció részleteit.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Zárja be a böngészőt, majd térjen vissza az {0} alkalmazásba.</entry>
+  <entry key="982">Beküld és vásárol!</entry>
+  <entry key="983">Kattints a vásárláshoz!</entry>
+  <entry key="984">3. lépés: {0} Vásárlás: ellenőrzés és fizetése!</entry>
+  <entry key="985">Név</entry>
+  <entry key="986">Befizetését fogadtuk!</entry>
+  <entry key="987">Hello,</entry>
+  <entry key="988">Megkaptuk a befizetését. A profilját frissítettük. Nézze meg a kapott számlát. A számla és minden egyéb igazolás a profiljából letölthető.</entry>
+  <entry key="989">Köszönjük, hogy az {0} használja!</entry>
+  <entry key="990">Befizetését feldolgoztuk {0} -</entry>
+  <entry key="991">Fizetési és tranzakciós állapot</entry>
+  <entry key="992">Tranzakció azonosító</entry>
+  <entry key="993">Perc</entry>
+  <entry key="994">Hónap</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Állapot</entry>
+  <entry key="997">Számla</entry>
+  <entry key="998"></entry>
+  <entry key="999">Előfizetésének feltöltése szükséges, hogy meghívót küldhessen, vagy használja a naptárat. Az {0} alkalmazáshoz csak fizetéssel férhet hozzá akár perc alapon is. A konferenciához nincs hozzáférése 3. személynek, alakalmazásnak.</entry>
+  <entry key="1000">Ezt az e-mail címet másik felhazsnáló már használja.</entry>
+  <entry key="1001">SIP-Beállítások</entry>
+  <entry key="1002">A konferencia száma és PIN kódja automatikusan létrehozva az OpenXG RPC-Átjáróval</entry>
+  <entry key="1003">SIP Azonosító</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Törli az objektumot a jelenelgi lapról!</entry>
+  <entry key="1006">Csak a státuszbárba beírt URL-t küldi a résztvevőknek!</entry>
+  <entry key="1007">Csoport szobát csinál [Breakout session]</entry>
+  <entry key="1008">Válasszon felhazsnálókat a csoport szobához!</entry>
+  <entry key="1009">Válassza ki a felhasználókat és lépjen velük át a csoport-szobába ("Team Room"). A választott felhazsnálók üzenetet kapnak és automatikusan átlépnek a csoport szobába. A csoport szoba moderátora(i) automatikusan megegyeznek a jelen szoba moderátora(i)val.</entry>
+  <entry key="1010">Felhasználónév</entry>
+  <entry key="1011">Belépés</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Felhasználók az új csoportszobában:</entry>
+  <entry key="1014">Csoportszoba létrehozása</entry>
+  <entry key="1015">Mégsem</entry>
+  <entry key="1016">Válasszon legalább egy résztvevőt a csoportszobába!</entry>
+  <entry key="1017">Felhasználó csoporthoz adása</entry>
+  <entry key="1018">Felhazsnáló elvétele a csoporttól</entry>
+  <entry key="1019">A felhasználó csoportszoba-moderátor (ezt szabályozni csak a csoportszobából tudja)</entry>
+  <entry key="1020">Szoba típusa</entry>
+  <entry key="1021">Ha be van állítva a "Felhasználók átléptetése az új csoportszobába" minden kiválasztott felhasználó átléptetésre kerül automatiksan az új csoportszobába. Egyébként csak figyelmeztető üzenetet kapnak az átlépéshez. A csoport-moderátorok mindíg szabadon választhatnak a csoportszobák közül.</entry>
+  <entry key="1022">Csoport-szobák kezelése</entry>
+  <entry key="1023">Válasszon a csoportszobák közül, ha csoportszoba-moderátor. A bent lévő felhasználóknak tud üzenetet küldeni, pl. hamarosan belép a szobába. Le tudja zárni a szobát és a bejelentkezett látogatók kiléptetésre kerülnek a szobából</entry>
+  <entry key="1024">Felhasználók átléptetése az új csoportszobába</entry>
+  <entry key="1025">Név</entry>
+  <entry key="1026">Létrehozva</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Elérhető felhasználók</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Csoportszoba beállítása</entry>
+  <entry key="1032">2) Felhasználük hozzáadása</entry>
+  <entry key="1033">Csoportszoba neve</entry>
+  <entry key="1034">Csoportszoba</entry>
+  <entry key="1035">Szoba változtatása</entry>
+  <entry key="1036">Váltás erre a csoportszobára</entry>
+  <entry key="1037">Csoportszoba bezárása, résztvevők kiléptetése</entry>
+  <entry key="1038">Új csoportszoba</entry>
+  <entry key="1039">Új csoportszoba érhető el.</entry>
+  <entry key="1040">Váltás a csoportszobára</entry>
+  <entry key="1041">Csoportszoba tevékenység</entry>
+  <entry key="1042">Nyissa meg újra ezt az ablakot, a menüben az "Akciók" alól!</entry>
+  <entry key="1043">Üzenet küldése s csoport-moderátornak</entry>
+  <entry key="1044">Új csoportszoba</entry>
+  <entry key="1045">Új csoportszoba érhető el. Váltson át a szobára. A munkacsoportban a szoport-moderátorhoz forduljon segítségért. A csoportsuobáit elérheti a "Előadásaim" szekcióban.</entry>
+  <entry key="1046">Váltás a csoportszobára</entry>
+  <entry key="1047">Készítette:</entry>
+  <entry key="1048">Csoportszoba neve:</entry>
+  <entry key="1049">Az ablak nyitvamarad, hakilép a csoportszobából!</entry>
+  <entry key="1050">Felhasználók ebben a szobában</entry>
+  <entry key="1051">3) vags válasszon másik csoportot és lépjen be</entry>
+  <entry key="1052">Küldhet üzenetet a csoport moderátorának. Pl.: ha segítségre van szüksége a moderátortól, vagy nézzen körül a topic-okban.</entry>
+  <entry key="1053">Küldés</entry>
+  <entry key="1054">2) felhasználó meghívott a csoportszobába</entry>
+  <entry key="1055">Csoportszoba moderátora</entry>
+  <entry key="1056">Minden felhasználót a moderátor hívot meg.</entry>
+  <entry key="1057">Nem vagy csoportmoderátor, várni kell a belépésre!</entry>
+  <entry key="1058">Írja ide üzenetét</entry>
+  <entry key="1059">Segítséget kérek, problémám akadt a csoportszobával!</entry>
+  <entry key="1060">A felhassnáló válasza a csoportszobából.</entry>
+  <entry key="1061">Csoportszoba segítség kérés</entry>
+  <entry key="1062">Üzenet:</entry>
+  <entry key="1063">Tól/Től:</entry>
+  <entry key="1064">Nem vagy benne egyik csoportban sem. Kattints ide a csoportszobákhoz való hozzáféréshez.</entry>
+  <entry key="1065">Rendszer mentése. A mentés minden felhazsnálói adatot ment. A konfiguráció és a nyelvek nincsenek benne. Because those values are imported with the System Installer. A rendszer frissítéséhez előbb nemtse el a régi adatokat(1) installálja újra az adatbázist is a telepítővel (2) végül importálja be a mentett adatokat (3). Az importálást elsőként hajtsa végre és csak után aadjon új adatokat a rendszerhez.</entry>
+  <entry key="1066">Rendszer mentése</entry>
+  <entry key="1067">Engedélyezi a felhasználónak a képernyő megosztást/rögzítést</entry>
+  <entry key="1068">Tiltja a felhasználónak a képernyő megosztást/rögzítést</entry>
+  <entry key="1069">A felhasználó moderátor, válasszon másikat!</entry>
+  <entry key="1070">szeretne képernyőt megosztíni/rögzíteni.</entry>
+  <entry key="1071">Heozzáférésed van a képernyő megosztáshoz/rögzítéshez</entry>
+  <entry key="1072">Alkalmazza a képernyő megosztáshoz/rögzítéshez.</entry>
+  <entry key="1073">Engedélyezi/Tiltja a kpernyő megosztását/rögzítését.</entry>
+  <entry key="1074">Hang kikapcsolása</entry>
+  <entry key="1075">Hang bekapcsolása</entry>
+  <entry key="1076">Csak Audio szoba</entry>
+  <entry key="1077">Kapcsolja be az opciót és a látogatók csak audio eszközt használhatnak, video-t nem. Jó megoldás alacsony sávszélesség esetén.</entry>
+  <entry key="1078">Távvezérlés engedélyezése (képernyőmegosztás alatt)</entry>
+  <entry key="1079">Távvezérlés tiltása (képernyőmegosztás alatt)</entry>
+  <entry key="1080">Alkalmazza a távvezérléshez (képernyőmegosztás alatt)</entry>
+  <entry key="1081">Engedélyezted a távvezérlést (képernyőmegosztás alatt)</entry>
+  <entry key="1082">szeretné használni a távvezérlést.</entry>
+  <entry key="1083">A látogató moderátor, bármt tehet! [Távvezérlés Alkalmazás]</entry>
+  <entry key="1084">Engedi/Tiltja a távvezérlést (képernyőmegosztás alatt)</entry>
+  <entry key="1085">1) PC-dtől a távoli PC-re: Másold a szöveget a vágólapra (Ctrl+C), majd távoli PCre küldéshez kattints a távoli gép képernyőjére. Kattints ajobb gombal a szövegmezőn és válaszd a "Beillesztés" menüpontot.&lt;br/&gt;&lt;br/&gt;2) Távoli PC-ről a Te PC-dre: Jelöld ki a szöveget (kiemelés) és kattints a jobb gombbel, majd válaszd a "Kijelölt másolása" menöpontot. Kattints aj obb gombal a saját PC-den a szövegmezőn és válaszd a "Beillesztés" menüpontot.</entry>
+  <entry key="1086">Másol és beilleszt szöveget a helyi PC-ről a távoli PC-re, vagy fordítva.</entry>
+  <entry key="1087">Kijelölt másolása</entry>
+  <entry key="1088">Hogyan kell másolni és beilleszteni</entry>
+  <entry key="1089">Képernyőmegosztás minősége:</entry>
+  <entry key="1090">Nagyon jó minőség</entry>
+  <entry key="1091">Jü minőség</entry>
+  <entry key="1092">Közepes minőség</entry>
+  <entry key="1093">Alacsony minőség</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Nillentyűzet:</entry>
+  <entry key="1097">Előadás lezárása!</entry>
+  <entry key="1098">Ez az előadás lezárásra került, átirányítás.</entry>
+  <entry key="1099">Szoba lezárása</entry>
+  <entry key="1100">Kilépő URL</entry>
+  <entry key="1101">Konferencia szoba bezárás beállításai</entry>
+  <entry key="1102">Ha a konferencia lezárásra kerül, alátogatókat átirányítja a kilépő URL-re.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Név</entry>
+  <entry key="1106">Konfigurációs file</entry>
+  <entry key="1107">Ldap konfiguráció</entry>
+  <entry key="1108">Név</entry>
+  <entry key="1109">Engedélyezve</entry>
+  <entry key="1110">Hozzáadva</entry>
+  <entry key="1111">Hozzáadta</entry>
+  <entry key="1112">Frissítve</entry>
+  <entry key="1113">Frissítette</entry>
+  <entry key="1114">A konfigurációs file helye webapps/openmeetings/conf. Manuálisan töltse fel ebbe a könyvtárba. A beállításokat online bármikor megváltoztathatja.</entry>
+  <entry key="1115">Konfigurációs file neve</entry>
+  <entry key="1116">Ha negedélyezi a "Tartomány hozzáadása a felhasználó névhez" a "Tartomány" (domain) mező értéke hozzáadódik minden bejelentkezéshez mikor a felhasználó belép. Használja ezt, ha az LDAP bejelentezés támogatja a tartomány kezelést. Pl.: Felhasználó belép "hans", tartomány meghatározva mint "localhost.com", a belpést az LDAP ellenőrzi mint: hans@localhost.com</entry>
+  <entry key="1117">Tartomány hozzáadása a felhasználó névhez</entry>
+  <entry key="1118">Tartomány</entry>
+  <entry key="1119">Beszúr</entry>
+  <entry key="1120">Kijelölt szöveg másolása</entry>
+  <entry key="1121">Távoli vágólap tartalma</entry>
+  <entry key="1122">Távoli vágólapot mutat</entry>
+  <entry key="1123">Nem mutathatja mégegyszer</entry>
+  <entry key="1124">Másolása ide ...</entry>
+  <entry key="1125">Távoli vezérlés használata szükséges (vagy moderátor) hogy aszöveget másolhasson a képernyőre/képernyőről.</entry>
+  <entry key="1126">Alap beállítások szerkesztése ...</entry>
+  <entry key="1127">Ne mutassa a Távvezérlés info dobozt a másolás/beillesztés közben.</entry>
+  <entry key="1128">Mentés</entry>
+  <entry key="1129">Eltávolítás</entry>
+  <entry key="1130">Mégsem</entry>
+  <entry key="1131">Felhasználó meghívása a konferenciába</entry>
+  <entry key="1132">Válasszon konferencia szobát. A meghívott felhasználó üzenetet kap a Nevével és a belépési linkkel.</entry>
+  <entry key="1133">Kapcsolódva:</entry>
+  <entry key="1134">Belépés a konferencia szobába a meghívó küldés után</entry>
+  <entry key="1135">Meghívás</entry>
+  <entry key="1136">Üzenet</entry>
+  <entry key="1137">szeretne meghívni a konferencia szobába:</entry>
+  <entry key="1138">Meghívó üzenet</entry>
+  <entry key="1139">Meghívó küldése</entry>
+  <entry key="1140">&lt;b&gt;nem&lt;/b&gt; fogadta el a meghívást!</entry>
+  <entry key="1141">Elfogad</entry>
+  <entry key="1142">Visszautasít</entry>
+  <entry key="1143">Időzóna</entry>
+  <entry key="1144">Esemény részletei</entry>
+  <entry key="1145">Név</entry>
+  <entry key="1146">Leírás</entry>
+  <entry key="1147">Létrehozta</entry>
+  <entry key="1148">Időzóna üzenet</entry>
+  <entry key="1149">Ellenőrizze az "TimeZone Message" a profiljában, amit a felhasználók a belépéskor látni fognak.</entry>
+  <entry key="1150">Ellenőrizze az időzóna beállítását a profiljában.</entry>
+  <entry key="1151">új {0} konferencia:</entry>
+  <entry key="1152">Részletek:</entry>
+  <entry key="1153">Kezdődik:</entry>
+  <entry key="1154">Vége:</entry>
+  <entry key="1155">Változás {0} konferencia:</entry>
+  <entry key="1156">Szervezet:</entry>
+  <entry key="1157">Törölt {0} konferencia:</entry>
+  <entry key="1158">{0} konferencia emlékeztető:</entry>
+  <entry key="1159">Közösség beállításai</entry>
+  <entry key="1160">Mindenkinek mutassa a kapcsolati adatokat</entry>
+  <entry key="1161">Adjon hozzá érdeklődési köröket, vagy keresési adatokat a mezőhöz, hogy az érdeklődők rákereshessenek az előadására. Vesszővel válassza el a felsorolt elemeket (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">Ajánlásaim</entry>
+  <entry key="1163">Érdeklődésem</entry>
+  <entry key="1164">Név</entry>
+  <entry key="1165">Időzóna</entry>
+  <entry key="1166">Érdeklődési terület</entry>
+  <entry key="1167">Kapcsolati információ</entry>
+  <entry key="1168">Kapcsolati adatokat csak a személyes kontakt listámon láthatják</entry>
+  <entry key="1169">Ne mutassa a kapcsolati adataimat</entry>
+  <entry key="1170">Profilom</entry>
+  <entry key="1171">Beállítások szerkesztés</entry>
+  <entry key="1172">Felhasználók keresése</entry>
+  <entry key="1173">Profilom megtekintése, ahogyan mésok látják</entry>
+  <entry key="1174">Szerkeszd a beállításaidat, add hozzá az érdeklődési körödhöz</entry>
+  <entry key="1175">Keress felhasználókat és add hozzá a hálózatodhoz</entry>
+  <entry key="1176">Keresés</entry>
+  <entry key="1177">Felhasználói ajánlatok</entry>
+  <entry key="1178">Felhasználó nézi ezt</entry>
+  <entry key="1179">Szabad szöveg</entry>
+  <entry key="1180">Név</entry>
+  <entry key="1181">Időzóna</entry>
+  <entry key="1182">Ajánl</entry>
+  <entry key="1183">Keresés</entry>
+  <entry key="1184">Keresési eredmények</entry>
+  <entry key="1185">Akciók</entry>
+  <entry key="1186">Kontaktlistához ad</entry>
+  <entry key="1187">Üzenet küldése</entry>
+  <entry key="1188">Kapcsolatok és üzenetek</entry>
+  <entry key="1189">Függő kapcsolat</entry>
+  <entry key="1190">Elfogad</entry>
+  <entry key="1191">Visszautasít</entry>
+  <entry key="1192">Hello,</entry>
+  <entry key="1193">szeretne kapcsolatként hozzáadni téged.</entry>
+  <entry key="1194">Ellenőrizze a felkérést a {0} alkalmazásban, vagy kattintson a megfelelő linkre az Elfogadáshoz/Visszautasításhoz.</entry>
+  <entry key="1195">A felhasználó már a kontaktlistádon van, vagy kapott egy meghívást a kapcsolatilistádra, amire nem adott még választ.</entry>
+  <entry key="1196">Kapcsolataid</entry>
+  <entry key="1197">Kapcsolatok és üzenetek szerkesztése,&lt;br/&gt; függő kapcsolatok kezelése!</entry>
+  <entry key="1198">hagyd jóvá a kapcsolatod!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Chat napló Mutat / Másol</entry>
+  <entry key="1201">Chat napló</entry>
+  <entry key="1202">Küldő</entry>
+  <entry key="1203">Tárgy</entry>
+  <entry key="1204">Küld</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Üzenet</entry>
+  <entry key="1207">Új email</entry>
+  <entry key="1208">Kattintson az új üzenet írásához a kapcsolatai számára</entry>
+  <entry key="1209">Új üzenet írása</entry>
+  <entry key="1210">Címzett:</entry>
+  <entry key="1211">Tárgy:</entry>
+  <entry key="1212">Engedélyezi a tábla teljes méretre igazítását&lt;br/&gt;a dokumentumot minden felhasználó a saját felbontása szerint látja.</entry>
+  <entry key="1213">Felhasználó kitiltása</entry>
+  <entry key="1214">Saját magát nem tilthatja ki a teremből! A szoba elhagyásához kattintson a kilépésre, zárja be az ablakot, vagy a böngészőt!</entry>
+  <entry key="1215">Biztosan leválasztja ezt a felhasználót a konferenciáról?</entry>
+  <entry key="1216">Megerősítés ...</entry>
+  <entry key="1217">A Super-Moderátort nem tilthatja ki a konferenciából!</entry>
+  <entry key="1218">Konferencia szoba kapcsolat lista</entry>
+  <entry key="1219">Kezdődik</entry>
+  <entry key="1220">Befejeződik</entry>
+  <entry key="1221">Adhat kérdéseket a konferencia üzenetéhez és létrehozza a konferenciát. Az esemény bekerül minden látogató naptárába.</entry>
+  <entry key="1222">Bejövő</entry>
+  <entry key="1223">Küldött</entry>
+  <entry key="1224">Kuka</entry>
+  <entry key="1225">Ez Te vagy! Nem adhatod magad a kontakt listához.</entry>
+  <entry key="1226">Ez a felhasználó tiltva van!</entry>
+  <entry key="1227">Ez a felhasználó már el van fogadva!</entry>
+  <entry key="1228">A felhasználó kapcsolata érvénytelen!</entry>
+  <entry key="1229">Felhasználó hozzáadva a kontakt listához!</entry>
+  <entry key="1230">A felhasználó kapcsolata tiltva van és folyamatban van a kontakt listáról levétele!</entry>
+  <entry key="1231">Ezzel nincs kapcsolat!</entry>
+  <entry key="1232">Biztosan eltávolítja ezt a kapcsolatot?</entry>
+  <entry key="1233">Eltávolítás megerősítése</entry>
+  <entry key="1234">Kapcsolat törlése a listáról</entry>
+  <entry key="1235">Felhasználói profil</entry>
+  <entry key="1236">Motasd a profilját</entry>
+  <entry key="1237">Üzenet</entry>
+  <entry key="1238">Keresés</entry>
+  <entry key="1239">Mind kijelöl</entry>
+  <entry key="1240">Kijelölés törlése</entry>
+  <entry key="1241">Olvasatlanok kijelölése</entry>
+  <entry key="1242">Olvasottak kijelölése</entry>
+  <entry key="1243">Könyvtárba áthelyez ...</entry>
+  <entry key="1244">Új könyvtár hozzáadása ...</entry>
+  <entry key="1245">Törlés</entry>
+  <entry key="1246">A törölt üzenetek a "Kukába" kerülnek!</entry>
+  <entry key="1247">Olvasatlannak jelöl</entry>
+  <entry key="1248">Olvasottnak jelöl</entry>
+  <entry key="1249">Válasz</entry>
+  <entry key="1250">Válasz mindenkinek</entry>
+  <entry key="1251">Továbbít</entry>
+  <entry key="1252">Művelet ...</entry>
+  <entry key="1253">Privát üzenet küldése</entry>
+  <entry key="1254">Nincs kiválasztva!</entry>
+  <entry key="1255">Bejövőbe áthelyez</entry>
+  <entry key="1256">Törlés (végleges)</entry>
+  <entry key="1257">A művelet sikertelen!</entry>
+  <entry key="1258">Küönyvtár hozzáadása</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Könyvtár hozzáadása</entry>
+  <entry key="1261">Hozzáad</entry>
+  <entry key="1262">Könyvtár törlése</entry>
+  <entry key="1263">Nem törölheti ezt a konyvtárat, üzenetek vannak benne! Először törölje, vagy helyezze át az üzeneteket.</entry>
+  <entry key="1264">Név szerkesztése</entry>
+  <entry key="1265">Biztosan törli ezt a könyvtárat? Később nem vonható vissza.</entry>
+  <entry key="1266">A felkérésed elküldtük a felhasználónak. Amint megkapja üzeneted, elfogadja/visszautasítja a felkérésed. Csak az elfogadottak kerülnek a kontaktlistára!</entry>
+  <entry key="1267">Üzenet</entry>
+  <entry key="1268">A felhasználó nem osztotta meg a privát kapcsolati adatait.</entry>
+  <entry key="1269">A felhasználó csak a kpcsolataival osztotta meg a privát kapcsolati adatait.</entry>
+  <entry key="1270">Cím &amp; Telefon</entry>
+  <entry key="1271">A meghívód érvénytelen, a meghívó csak az alábbi időben érvényes:</entry>
+  <entry key="1272">Ez az esemény több felhasználó, több naptár bejegyzéshez is kapcsolódik. A változás mindegyiket érinti. Valóban frissíted a bejegyzést?</entry>
+  <entry key="1273">Frissítés megerősítése</entry>
+  <entry key="1274">Engedélyezem a kapcsolataimnak a naptárat (csak nézet)</entry>
+  <entry key="1275">Nem osztja meg a naptárat</entry>
+  <entry key="1276">Kapcsolatok naptára</entry>
+  <entry key="1277">Előbb vetesse fel magát a kapcsolatlistára, hogy megnézhesse ezt a naptárbejegyzést.</entry>
+  <entry key="1278">Nem menthet, törölhet olyan eseményt, amit nem Ön hozott létre!!</entry>
+  <entry key="1279">Mutasd a naptáraimat ismét!</entry>
+  <entry key="1280">Ez az esemény több felhasználó, több naptár bejegyzéshez is kapcsolódik. A változás mindegyiket érinti. Valóban törli a bejegyzést?</entry>
+  <entry key="1281">Művelet megerősítése</entry>
+  <entry key="1282">Belépés a szobába</entry>
+  <entry key="1283">Hpzzáférés a konferencia szobához</entry>
+  <entry key="1284">A konferencia szoba és az esemény tárolva lett a privát bejegyzésekhez.</entry>
+  <entry key="1285">Először le kell tárolnia az eseményt!</entry>
+  <entry key="1286">Ez a szoba nem elérhető. Az esemény a naptárból és a konferencia szoba el lett távolítva !</entry>
+  <entry key="1287">Válasszon megjelenő felhasználó nevet</entry>
+  <entry key="1288">Vezetéknév</entry>
+  <entry key="1289">Keresztnév</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Legalább 4 karakter szükséges! Esetleg a vezeték és keresztnév.</entry>
+  <entry key="1293">Érvényes e-mail címet adjon meg!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Belépés Facebook azonosítóval</entry>
+  <entry key="1296">Felhasználói</entry>
+  <entry key="1297">Facebook azonosítóval lépett be. A profilban adja meg az e-mail címét. Ha nem adja meg az email címét, nem tud üzeneteket fogadni a bejegyzésekről, konferenciákról, más felhasználóktól.</entry>
+  <entry key="1298">Üzenet</entry>
+  <entry key="1299">Ne mutasa újra a profil frissítési üzenetet</entry>
+  <entry key="1300">mtovábbi opciók megjelenítése ...</entry>
+  <entry key="1301">Új privát üzenet:</entry>
+  <entry key="1302">Kattintson ide a profil megtekintéséhez ...</entry>
+  <entry key="1303">Válasz</entry>
+  <entry key="1304">Szobák és Chat</entry>
+  <entry key="1305">Saját szobák</entry>
+  <entry key="1306">Konferencia szobáim (1-16 résztvevő)</entry>
+  <entry key="1307">Webinárium szobáim (1-120 résztvevő)</entry>
+  <entry key="1308">Tulajdonos Id</entry>
+  <entry key="1309">Adjameg a jelszót</entry>
+  <entry key="1310">Szükséges jogosultsági szint (felhasználó,vagy moderátor, vagy admnisztrátor)</entry>
+  <entry key="1311">Web-Service (Csak SOAP hozzáférés)</entry>
+  <entry key="1312">Közvetlen betöltés a táblába</entry>
+  <entry key="1313">Valóban eltávolítja ezt a táblát? A művelet nem fordítható vissza!</entry>
+  <entry key="1314">Betöltés a táblába</entry>
+  <entry key="1315">Ne felejtse el a felvételt indítani! Legalább egy látogató belépése szükséges a felvétel elindításához.</entry>
+  <entry key="1316">Felvétel indítása</entry>
+  <entry key="1317">Nyíl</entry>
+  <entry key="1318">Kör</entry>
+  <entry key="1319">Vonal</entry>
+  <entry key="1320">Négyszög</entry>
+  <entry key="1321">Háromszög</entry>
+  <entry key="1322">Szöveg</entry>
+  <entry key="1323">Ikonok</entry>
+  <entry key="1324">Szabadkézi rajz</entry>
+  <entry key="1325">Kiválaszt/Mozgat</entry>
+  <entry key="1326">Terület rajzolása</entry>
+  <entry key="1327">Kivág/Mozgat</entry>
+  <entry key="1328">Nagyató</entry>
+  <entry key="1329">Nyomtat</entry>
+  <entry key="1330">Visszavon</entry>
+  <entry key="1331">Kuka</entry>
+  <entry key="1332">Rács hozzáadása</entry>
+  <entry key="1333">File megosztása</entry>
+  <entry key="1334">Kijelölő négyzet</entry>
+  <entry key="1335">Ikon választása</entry>
+  <entry key="1336">Másol</entry>
+  <entry key="1337">Kivág</entry>
+  <entry key="1338">Beilleszt</entry>
+  <entry key="1339">Töröl</entry>
+  <entry key="1340">Biztosan törli a tábla tartalmát?</entry>
+  <entry key="1341">Töltse be a táblába közvetlenül</entry>
+  <entry key="1342">Látogatók</entry>
+  <entry key="1343">Látogatók kezelése</entry>
+  <entry key="1344">Bemutat</entry>
+  <entry key="1345">Távoli vezérlés</entry>
+  <entry key="1346">Kiad</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Látogató meghívása</entry>
+  <entry key="1349">E-mailben</entry>
+  <entry key="1350">Felhasználó moderátor</entry>
+  <entry key="1351">Felhasználó webkamerájának bekapcsolása</entry>
+  <entry key="1352">Terület kitöltés be</entry>
+  <entry key="1353">Terület kitöltés ki</entry>
+  <entry key="1354">Ugrás a rácsra</entry>
+  <entry key="1355">Felvétel engedélyezése</entry>
+  <entry key="1356">Várakozás a felvételre</entry>
+  <entry key="1357">Felső menü elrejtése</entry>
+  <entry key="1358">Videó lejátszása</entry>
+  <entry key="1359">Valóban eltávolítja ezt a tartalmat a lapról?</entry>
+  <entry key="1360">Elfogadja és alkalmazza a felhasználónak ezt</entry>
+  <entry key="1361">Tilt</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Aktivitások és műveletek</entry>
+  <entry key="1364">Tábla eltávolítása</entry>
+  <entry key="1365">Moderátornak kell lennie, vagy engedéllyel kell rendelkeznie a tábla művletekhez!</entry>
+  <entry key="1366">Nem engedélyezett</entry>
+  <entry key="1367">kilépett a szobából.</entry>
+  <entry key="1368">Matematikai ikonok</entry>
+  <entry key="1369">Kategorizálatlan</entry>
+  <entry key="1370">Szín stílus</entry>
+  <entry key="1371">Minőség</entry>
+  <entry key="1372">Tartomány</entry>
+  <entry key="1373">meglátogat</entry>
+  <entry key="1374">narancsvörös</entry>
+  <entry key="1375">középzöld</entry>
+  <entry key="1376">sötétkék</entry>
+  <entry key="1377">világoskék</entry>
+  <entry key="1378">aranyvörös</entry>
+  <entry key="1379">ezüstszürke</entry>
+  <entry key="1380">egyéni</entry>
+  <entry key="1381">jobb</entry>
+  <entry key="1382">feltölt</entry>
+  <entry key="1383">közepes</entry>
+  <entry key="1384">Összes mikrofont némít</entry>
+  <entry key="1385">Összes mikrofont visszakapcsol</entry>
+  <entry key="1386">Mások mikrofonjának némítása</entry>
+  <entry key="1387">A moderátor lenémította a mikrofonját, nem kapcsolhatja vissza!</entry>
+  <entry key="1388">Összes mikrofont némítja?</entry>
+  <entry key="1389">Biztosan mindent elnémít? A hallgatók nem fogják hallani!</entry>
+  <entry key="1390">Mikrofon helyileg némítja?</entry>
+  <entry key="1391">Biztosan némítja a mikrofonját? Csak a helyi képernyőn némítja. Nincs hatással a többi hallgatóra, ők hallhatják továbbra is. Csak a moderátor némíthatja le globálisan!</entry>
+  <entry key="1392">Mikrofont globálisan némítja?</entry>
+  <entry key="1393">Globálisan némítja ezt a látogatót? Nem fogják tovább hallani!</entry>
+  <entry key="1394">A hangod be van kapcsolva. Kattints ide, hogy jelezd a moderátornak, ha kapcsolja ki!</entry>
+  <entry key="1395">A hangod ki van kapcsolva. Kattints ide, hogy jelezd a moderátornak, ka kapcsolja be</entry>
+  <entry key="1396">szeretném, hogy a moderátor némítsa mindenknél a hangomat.</entry>
+  <entry key="1397">szeretném, hogy a moderátor kapcsolja vissza mindenkinél a hangomat.</entry>
+  <entry key="1398">a moderátor visszakapcsolta a mikrofonját.</entry>
+  <entry key="1399">a moderátor némította a mikrofonját.</entry>
+  <entry key="1400">Hangja visszakapcsolva. Kattintson ide, ha globálisan némítani akarja!</entry>
+  <entry key="1401">Hangja némítva. Kattintson ide, ha globálisan vissza akarja kapcsolni!</entry>
+  <entry key="1402">A felhasználót a moderátor globálisan némította. Ön nem kapcsolhatja vissza!</entry>
+  <entry key="1403">Hangját mindenkinél némítja</entry>
+  <entry key="1404">Hangját mindenkinél visszakapcsolja</entry>
+  <entry key="1405">Mikrofont némít</entry>
+  <entry key="1406">Mikrofont visszakapcsol</entry>
+  <entry key="1407">Hangot mindenkinél némítja</entry>
+  <entry key="1408">Hangot mindenkinél visszakapcsolja</entry>
+  <entry key="1409">Csak amoderátor tudja globálisan némítani/visszaadni a hangot! A mikrofonja némításához: Kattintson a mikrofon ikonra a panelján!</entry>
+  <entry key="1410">Szavazás neve</entry>
+  <entry key="1411">Te</entry>
+  <entry key="1412">Régebbi szavazások</entry>
+  <entry key="1413">aktív</entry>
+  <entry key="1414">Egyszerű diagramm</entry>
+  <entry key="1415">Oszlop diagramm</entry>
+  <entry key="1416">Adja meg e-mail címét</entry>
+  <entry key="1417">Új üzenet(ek)</entry>
+  <entry key="1418">Szavazás lezárása</entry>
+  <entry key="1419">Biztosan lezárja a szavazást? Nem lehet később szavazni rá.</entry>
+  <entry key="1420">Szavazás törlése</entry>
+  <entry key="1421">Biztosan törli ezt a szavazást? Az eredmények is törlésre kerülnek.</entry>
+  <entry key="1422">Nyelv ISO kódja</entry>
+  <entry key="1423">Engedi/Tiltja az audio hozzászólást.</entry>
+  <entry key="1424">Engedélyezi a felhasználónak az audio hozzászólást</entry>
+  <entry key="1425">Tiltja a felhasználónak az audio hozzászólást</entry>
+  <entry key="1426">hozzá szeretne szólni, hang eszköz engedélyt kér.</entry>
+  <entry key="1427">a moderátor hozzászólási engedélyt adott.</entry>
+  <entry key="1428">Hozzászólási engedélyt kérek.</entry>
+  <entry key="1429">Kamera felbontás</entry>
+  <entry key="1430">Sávszélességének (Feltöltési irány) megfelelően válassza meg a felbontás. Nagyobb felbontás, nagyobb sávszélességet igényel!</entry>
+  <entry key="1431">Nincs engedélye az egyéni Audio/Video kapcsolathoz. Kérjen engedélyt a moderátortól, vagy figyelmeztesse, hogy kapcsolja be a hozzáférését.</entry>
+  <entry key="1432">Egyéni audio hozzáférést kérek a hozzászóláshoz!</entry>
+  <entry key="1433">Egyéni audio/video kapcsolat velem (kattintson a panelen, vagy F12)</entry>
+  <entry key="1434">Mikrofon aktív!</entry>
+  <entry key="1435">Mikrofon némítva</entry>
+  <entry key="1436">Chat elrejtése</entry>
+  <entry key="1437">Aktivitások elrejtése</entry>
+  <entry key="1438">File böngésző elrejtése</entry>
+  <entry key="1439">Akciók menü elrejtése</entry>
+  <entry key="1440">Képernyő megosztás elrejtése</entry>
+  <entry key="1441">Tábla elrejtése</entry>
+  <entry key="1442">Mutassa a mikrofon jelet a videó panelen</entry>
+  <entry key="1443">Felület tulajdonságai</entry>
+  <entry key="1444">Új esemény</entry>
+  <entry key="1445">Az eseményhez tartozó link jelszóval védett, a jelszó az eseményhez tartozik, nem a konferencia szobához! Az értesítő az eseményhez kapcsolt kontaktoknak szól és kerül kiküldésre! Amikor megváltoztatja az eseményt, minden alkalommal kiküldésre kerülnek az új linkek új jelszóval. A linkek csak egyszer működnek, a régi jelszók érvénytelenek!</entry>
+  <entry key="1446">Részletek szerkesztése</entry>
+  <entry key="1447">Mutasd a SIP számot</entry>
+  <entry key="1448">Hívás</entry>
+  <entry key="1449">Mutasd a kapcsolataim eseményeit</entry>
+  <entry key="1450">Főoldal!</entry>
+  <entry key="1451">Előadásai térképe</entry>
+  <entry key="1452">Felvételek, interjúk megnézése</entry>
+  <entry key="1453">Válassza kis és indítson Web-konferenciát</entry>
+  <entry key="1454">Felhasználók kezelése</entry>
+  <entry key="1455">Kapcsolatok kezelése, látogatók leválasztása</entry>
+  <entry key="1456">Csoportok kezelése</entry>
+  <entry key="1457">Konferencia szobák kezelése</entry>
+  <entry key="1458">Rendszer beállításainak kezelése</entry>
+  <entry key="1459">Cimkék és szavak kezelése</entry>
+  <entry key="1460">LDAP és ADS konfigurációs beállítások</entry>
+  <entry key="1461">Rendszer biztonsági mentés Export/Import</entry>
+  <entry key="1462">Moderátornak kell lenned, hogy létrehozhass, feltölthess, módosíthass, táblához adhass filet/könyvtárat.</entry>
+  <entry key="1463">Szöveg szerkezstése</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publikáció</entry>
+  <entry key="1466">Publikálás indítása</entry>
+  <entry key="1467">Publikáció befejezése</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publikációs alkalmazás</entry>
+  <entry key="1470">Publikációs Id</entry>
+  <entry key="1471">Csökkentse a megosztási kép szélességét mielőtt odébb húzza.</entry>
+  <entry key="1472">Csökkentse a megosztási magasságot, mielőtt lejebb húzza</entry>
+  <entry key="1473">Csökkenti a megoszási képernyő X méretét mielőtt megpróbálja szélesíteni</entry>
+  <entry key="1474">Csökkenti a megoszási képernyő Y méretét mielőtt megpróbálja magasítani</entry>
+  <entry key="1475">Töltse fel a meosztási streamet külső alkalmazásba(3rd.) pl.: justin.tv</entry>
+  <entry key="1476">Indítsa el a képernyőmegosztást a publikáláshoz</entry>
+  <entry key="1477">Moderátornak kell lennie a felvétel indításához</entry>
+  <entry key="1478">YNincs jogosultsága, hogy egyéni audoi/video kapcsolatot állítson be a látogatókkal. Moderátornak kell lennie, vagy több egyéni kapcsolatának, hogy egyéni mikrofonokat kapcsolhasson be.</entry>
+  <entry key="1479">Új file feltöltése</entry>
+  <entry key="1480">Megosztási beállítások megnyitása</entry>
+  <entry key="1481">Moderátor alkalmazhatja</entry>
+  <entry key="1482">Jelezzen a moderátornak, hogy ossza meg a kameráját/mikrofonját</entry>
+  <entry key="1483">Visszacsatolást gyűjt azáltal, hogy létrehoz egy szavazást</entry>
+  <entry key="1484">A régebbi és jelen szavazatok alapján az eredmények</entry>
+  <entry key="1485">Válaszol, ha a szavazás ehhez a konferenciához tartozik</entry>
+  <entry key="1486">Kamera/Mikrofon beállításai</entry>
+  <entry key="1487">Kilép az előadásból</entry>
+  <entry key="1488">Külső személy hívása VoIP/SIP</entry>
+  <entry key="1489">Direkt belépési link küldése ehhez a szobához</entry>
+  <entry key="1490">Rajztábla beállításainak változtatása</entry>
+  <entry key="1491">Maximális feltöltési méret</entry>
+  <entry key="1492">Moderátort kéri, hogy ossza meg a tábládat</entry>
+  <entry key="1493">Privát chat nyitása</entry>
+  <entry key="1494">Mindenki</entry>
+  <entry key="1495">Vele nem kezdhet privát chatet.</entry>
+  <entry key="1496">Már privát shatban van ezzel a felhasználóval.</entry>
+  <entry key="1497">DTörli ezt a privát chatet?</entry>
+  <entry key="1498">Szerverek</entry>
+  <entry key="1499">Szerver látogatói a kluszterben</entry>
+  <entry key="1500">Szerver neve</entry>
+  <entry key="1501">Szerver címe</entry>
+  <entry key="1502">Szerver adatai</entry>
+  <entry key="1503">SMS Küldése</entry>
+  <entry key="1504">Közzététel. Felhasználó:</entry>
+  <entry key="1505">Időt és adatforgalmat takarít meg ha a parancssori admint használja a mentésekhez backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;lépjen be az OM telepített könyvtárába (pl.: /opt/red5)&lt;/li&gt; &lt;li&gt;állítsa meg az OM-et (cmd: ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (backup készítése az aktuális OM -ről)&lt;/li&gt; &lt;li&gt;töltse le az új OM-et&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (A működő OM verziót őrizze meg :))&lt;/li&gt; &lt;li&gt;Csomagolja ki az új OM-et /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' adja meg, ha nem az alapértelmezett DB hozzáférést használja )&lt;/li&gt; &lt;li&gt;OM indítása&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Közös termek minden felhasználó számára</entry>
+  <entry key="1507">Közös termek a csoport felhasználói számára</entry>
+  <entry key="1508">A felhasználó termei</entry>
+  <entry key="1509">Speciális találkzó szoba étrehozás/módosítás</entry>
+  <entry key="1510">Több cím megadása az alábbiak szerint: vezetéknév1 keresztnév1 &lt;email1&gt;,"vezetéknév2 keresztnév2" &lt;email2&gt;,'vezetéknév3 keresztnév3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Stream hangerő változtatása</entry>
+  <entry key="1512">Mikrofon hangerő változtatása</entry>
+  <entry key="1513">A chat moderált</entry>
+  <entry key="1514">Üzenet engedélyezése</entry>
+  <entry key="1515">Chat panel alapértelmezésben nyitva</entry>
+  <entry key="1516">Fileok panel alapbértelmezésben nyitva</entry>
+  <entry key="1517">Utolsó ping</entry>
+  <entry key="1518">Minden slave küldi a pinget a masternek 3 másodpercenként (konfigurálható). Utolsó slave kevess mint 1 perce érkezett, a mastar használja a slave-t.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">Felhasználó (SOAP-Access)</entry>
+  <entry key="1521">Jelszó</entry>
+  <entry key="1522">Webapp útvonala</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Aktív</entry>
+  <entry key="1526">URL készítése</entry>
+  <entry key="1527">Hálózat tesztelése</entry>
+  <entry key="1528">Automatiksan kiválasztja az interjú video ablakot</entry>
+  <entry key="1529">Aláhúzott</entry>
+  <entry key="1530">Betükészlet</entry>
+  <entry key="1531">Alkalmazott betükészlet</entry>
+  <entry key="1532">Betü szín</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Session statisztika mutat</entry>
+  <entry key="1535">Session részletei</entry>
+  <entry key="1536">Rendszer import</entry>
+  <entry key="1537">Feltöltött fileok és felvételek betöltése a mentásből</entry>
+  <entry key="1538">SIP átvitel engedélyezése a szobában</entry>
+  <entry key="1539">Egyéni hangkapcsolatot kezdeményez ezzel a felhasználóval?</entry>
+  <entry key="1540">Adjameg az időzónáját</entry>
+  <entry key="1541">csoportmunka (n:n) konferencia (1-25 látogatóval)</entry>
+  <entry key="1542">moderált (1:n) konferencia (1-150 látogatóval)</entry>
+  <entry key="1543">interjú (1:1 megbeszélés felvétellel)</entry>
+  <entry key="1544">Konfigurációs beállító kulcs már létezik, válasszon másikat, vagy szerkessze a meglévőt</entry>
+  <entry key="1545">Tartalom mentése, kérem várjon...</entry>
+  <entry key="1546">Üdvözöljük</entry>
+  <entry key="1547">Widgeten megjelenő felhasználói adatok és linkek</entry>
+  <entry key="1548">Widgetek</entry>
+  <entry key="1549">Rólunk</entry>
+  <entry key="1550">Név</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Betöltés ...</entry>
+  <entry key="1555">ma</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">ne küldjön értesítést</entry>
+  <entry key="1569">egyszerű e-mail</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Képek feltöltése/importálása a prezentációs területbe<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Telepítse a <strong>ImageMagick</strong> program csomagot a szerverre. Telepítési útmutató és további információk itt 
+				<a target="_blank" href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+				<a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					Linux operációs rendszerben használja a beépített csomagkezelőt (apt-get it).
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>PDF fileok feltöltése a prezentációs területbe<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Telepítse a  <strong>GhostScript</strong> program csomagot a szerverre. Telepítési útmutató és további információk itt <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					Linux operációs rendszerben használja a beépített csomagkezelőt (apt-get it).
+				</li>
+				<li>Telepítse a <strong>SWFTools</strong> program csomagot a szerverre. Telepítési útmutató és további információk itt  <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					Több linux disztribúció csomagkezelőjében megtalálható <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					ajánlott verzió a <strong>SWFTools</strong> 0.9 egyéb verzió bugja miatt hibát okozhat a prezentációkban. 
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Dokumentumok importálása a prezentációs területrbe
+				.doc, .docx, .ppt, .pptx, ... stb (OpenOfice kompatibilis).<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Telepítse az <strong>OpenOffice / LibreOffice</strong> program csomagot a szerverre. Telepítési útmutató és további információk itt  <a target="_blank"
+					href="http://www.openoffice.org/" rel="nofollow">http://www.openoffice.org/</a>
+					<a target="_blank"
+					href="http://www.libreoffice.org/" rel="nofollow">http://www.libreffice.org/</a>
+					LibreOffice program csomag használata esetén rendelje hozzá szimbólikus linkként az OpenOffice könyvtárat.
+					<br />
+					ln -s /opt/libreoffice /opt/openoffice 
+				</li>
+				<li><strong>OpenOffice-Service</strong> automatikusan indul és elérhető a
+					8100 porton. Bővebb információ itt <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Videó felvétele és importálása .avi, .flv, .mov and .mp4 formátumokban a prezentációs területbe<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Telepítse az <strong>FFMpeg</strong> programcsomagot. Használja az FFMPEG aktuális, friss verzióját.
+				 	Windows rendszerekhez kiadások itt <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux, OSX rendszerkhez
+					többféle lehetőség érhető el, keresse meg a megfelelőt az interneten. 
+					Szükséges a libmp3lame kóder engedélyezése/implementálása!
+				</li>
+				<li>Telepítse a <strong>SoX</strong> programot innen: <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					A SoX friss verzióit használja! SoX 12.xx nem/hibásan működik!
+				</li>
+			</ul>
+		</li>
+	</ol>
+	
+	<b><span style="font-size: 1.2em">Közösségi-támogatás:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Levelező lista</a></span>
+	<br />
+	<br />
+	<br />
+    <b> <span style="font-size: 1.4em">Néhány cég, akik üzleti támogatást nyújthatnak Apache OpenMeetings:</span></b>
+	<br />
+	<br />
+    
+	<span style="font-size: 1.3em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">http://openmeetings.apache.org/commercial-support.html</a></span>
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Ajánlott környezeti beállítások<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			Az {0} alapértelmezette a beépített {1} adatbázist használja. 
+			További lehetőségként használható a {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Felhasználói adatok</entry>
+	<entry key="install.wizard.params.step1.username">Felhasználónév</entry>
+	<entry key="install.wizard.params.step1.username.title">Adja meg a felhasználói nevét</entry>
+	<entry key="install.wizard.params.step1.password">Jelszó</entry>
+	<entry key="install.wizard.params.step1.password.title">Adja meg a jelszavát</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Adja meg az e-mail címét</entry>
+	<entry key="install.wizard.params.step1.tz">Időzóna kiválasztása</entry>
+	<entry key="install.wizard.params.step1.groupdata">Szervezeti egység (Domain)</entry>
+	<entry key="install.wizard.params.step1.group">Név (domain)</entry>
+	<entry key="install.wizard.params.step1.group.title">Adja meg a nevet (domain)</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Beállítások</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Előregisztráció engedélyezése (megjelenik a belépő panelen)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Regisztrációs e-mail küldése</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">Regisztráció megerősítése e-mailben (megerősítő link küldése)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Alapértelmezett típusú konferencia szobák létrehozása</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Rendszer e-mail cím</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Rendszer e-mail megadása</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Szerver (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Szerver Port(alapértelmezett Smtp-Server Port 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Felhasználó név (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Adja meg a felhasználó nevet</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Felhasználó jelszó (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Adja meg a jelszót</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">TLS engedélyezése az authentikációhoz</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">A meghívó e-mail címének küldése és beállítása a válasz küldéshez (reply-to) fejlécben(inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Alapértelmezett nyelv</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Alapértelmezett betükészlet [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Konverterek</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> bővebben</entry>
+	<entry key="install.wizard.params.step3.installation">Telepítés</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Adja meg az SWFTools felbontását (dpi) amit a PDF2SWF konverziónál használ</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">
+		Ellenőrizze az swftools telepítését és elérését a rendszerútvonalon.
+		Nyisson egy parancssort és futtassa: pdf2swf. Paraméterként megadhatja a felbontást.
+		Alapértelmezett felbontás 100 dpi.
+	</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Minőség</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Adja meg a jpeg képek minőségi rátáját. 0 a gyengébb (kicsi), 100 a legjobb (nagy). (alapértelmezett:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">
+		Ellenőrizze az swftools telepítését és elérését a rendszerútvonalon.
+		Nyisson egy parancssort és futtassa: pdf2swf. Paraméterként megadhatja a 
+		a jpeg képek minőségét. 0 a gyengébb (kicsi),
+		100 a legjobb (nagy). (alapértelmezett:85).
+	</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools útvonala</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Adja meg az SWFTools elérési útvonalát C:/swftools (Windows) /usr/local/swftools (Linux) vagy hagyja üresen, ha elérhető a rendszerútvonalak közt</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		Ellenőrizze az swftools telepítését és elérését a rendszerútvonalon.
+		Nyisson egy parancssort és futtassa: pdf2swf. Hagyja üresen, ha nem ismeri, vagy ha elérhető a rendszerútvonalon. 
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick útvonala</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Adja meg a ImageMagick elérési útvonalát, hagyja üresen, ha az ImageMagick elérhető a rendszer útvonalak közt</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG útvonala</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Adja meg az FFMPEG alérési útvonalát, hagyja üresen, ha az FFMPEG elérhető a rendszer útvonalak közt</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX útvonala</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Adja meg a SoX elérési útvonalát, hagyja üresen, ha a SoX elérhető a rendszer útvonalak közt</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD útvonala</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">A JOD könyvtár útvonala (http://code.google.com/p/jodconverter), a JOD könyvtárban szükséges a jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice útvonala a jodconverterhez</entry>
+	<entry key="install.wizard.params.step3.officePath.title">Adja meg az OpenOffice/LibreOffice (optional) valós útvonalát, a OpenOffice/LibreOffice nem keresi automatikusan a jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.text">
+		Az OpenOffice/LibreOffice (optional) útvonalát a jodconverter nem találja autómatikusan, az abszolút elérési útvonal szükséges
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Titkosítás típusa</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Titkosító osztály</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Adja meg a titkosító osztály nevét (class). NE VÁLTOZTASSA, HA NEM BIZTOS BENNE!</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		Az alapértelmezetten beállított kódolás megfelel a 
+		PHP-MD5 kódolónak, vagy BSD-Stílusú kódoláshoz használja a:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		további kódolási/titkosítási eljárásokról itt olvashat bővebben: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Egyedi titkosítási mechanizmus </a> Ha a későbbiekben módosítja ezt a beállítást,
+		az előzőleg létrehozott adatok elérhetetlenné válnak, ami működési hibát okozhat a régebbi munkamenetek elérésében 
+		(pl. jelszó, hash kezelés).
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">Red5SIP Beállítása</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">SIP engedélyezése</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Red5SIP integráció engedélyezése</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP szoba prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Telefonszám prefixum beállítása a konferencia szobához</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP kiterjesztés leírása</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Leírás az Asterix konfigurálásához</entry>
+
+	<entry key="install.wizard.install.desc">Kattintson a "Befejezés" gombra a telepítés folytatásához</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Belépés az alkalmazásba</entry>
+	<entry key="install.wizard.congrats.port">Ha a Red5 szervert más porton, domainen, vagy más beállításokkal használja</entry>
+	<entry key="install.wizard.congrats.config">változtassa meg a kliens szükséges konfigurációit</entry>
+	<entry key="install.wizard.congrats.mail">Levelező lista</entry>
+	<entry key="install.wizard.congrats.commercial">Néhány cég, akik üzleti támogatást nyújthatnak Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_id.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_id.properties.xml
new file mode 100644
index 0000000..87c9e6c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_id.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Konferensi</entry>
+  <entry key="2">Rapat</entry>
+  <entry key="3">Event</entry>
+  <entry key="4">Seting</entry>
+  <entry key="5">Profil</entry>
+  <entry key="6">Administrasi</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Rekam</entry>
+  <entry key="9">File tidak tersedia</entry>
+  <entry key="10">Rekaman dr dosen</entry>
+  <entry key="11">Pengguna terkoneksi:</entry>
+  <entry key="12">Mulai Konferensi</entry>
+  <entry key="13">Nama Saya</entry>
+  <entry key="14">Video Konferensi</entry>
+  <entry key="15">Simpan File</entry>
+  <entry key="16">Panggil Ulang</entry>
+  <entry key="17">Ke File Utama</entry>
+  <entry key="18">Poling Baru</entry>
+  <entry key="19">Poling Baru untuk Konferensi.</entry>
+  <entry key="20">Pertanyaan:</entry>
+  <entry key="21">Model Poling:</entry>
+  <entry key="22">Buat</entry>
+  <entry key="23">Catatan: Setiap user terkoneksi akan menerima pesan dangan poling baru.</entry>
+  <entry key="24">Buat Poling</entry>
+  <entry key="25">Batal</entry>
+  <entry key="26">Ya/Tidak</entry>
+  <entry key="27">Angka dari 1-10</entry>
+  <entry key="28">Poling</entry>
+  <entry key="29">Hanya moderator yang bisa membuat pertanyaan</entry>
+  <entry key="30">Pilihan anda udah tercatat.</entry>
+  <entry key="31">Anda telah melakukan pilihan pada Poling ini.</entry>
+  <entry key="32">Pilih !</entry>
+  <entry key="33">Respon Anda:</entry>
+  <entry key="34">Ya</entry>
+  <entry key="35">Tidak</entry>
+  <entry key="36">Yang diinginkan:</entry>
+  <entry key="37">Hasil Poling</entry>
+  <entry key="38">Pertanyaan:</entry>
+  <entry key="39">Hasil:</entry>
+  <entry key="40">Jawaban:</entry>
+  <entry key="41">Belum ada poling yang dimulai.</entry>
+  <entry key="42">Pilih!</entry>
+  <entry key="43">Rapat (4 kursi maksimum)</entry>
+  <entry key="44">Konferensi (50 kursi maksimum)</entry>
+  <entry key="45">Tipe</entry>
+  <entry key="46">Kursi lainnya</entry>
+  <entry key="47">Sudah dipilih</entry>
+  <entry key="48">masuk</entry>
+  <entry key="49">Moderator meninggalkan rapat.</entry>
+  <entry key="50">Sistem informasi</entry>
+  <entry key="51">Pilih perangkat</entry>
+  <entry key="52">Pilih webcam:</entry>
+  <entry key="53">Pilih Mic:</entry>
+  <entry key="54">ok</entry>
+  <entry key="55">batal</entry>
+  <entry key="56">Anda harus konek kembali.</entry>
+  <entry key="57">Edit seting.</entry>
+  <entry key="58">Kursus:</entry>
+  <entry key="59">Bahasa:</entry>
+  <entry key="60">ok</entry>
+  <entry key="61">batal</entry>
+  <entry key="62">hapus whiteboard</entry>
+  <entry key="63">Anda ingin whitboard di bersihkan sebelum gambar baru ditambahkan?</entry>
+  <entry key="64">Jangan bertanya lagi</entry>
+  <entry key="65">Tidak</entry>
+  <entry key="66">Edit seting</entry>
+  <entry key="67">Diperlukan Konfirmasi sebelum membersihkan whiteboard.</entry>
+  <entry key="68">Info Pengguna</entry>
+  <entry key="69">bersihkan Area Gambar</entry>
+  <entry key="70">Batal</entry>
+  <entry key="71">Ulangi</entry>
+  <entry key="72">Pilih Objek</entry>
+  <entry key="73">Tulisan</entry>
+  <entry key="74">Gambar</entry>
+  <entry key="75">Gambar garis</entry>
+  <entry key="76">Gambar garis bawah</entry>
+  <entry key="77">Kotak</entry>
+  <entry key="78">Lonjong</entry>
+  <entry key="79">Panah</entry>
+  <entry key="80">Hapus item yg dipilih</entry>
+  <entry key="81">Tambahkan ke moderator</entry>
+  <entry key="82">Tambah</entry>
+  <entry key="83">batal</entry>
+  <entry key="84">Menjadi Moderator</entry>
+  <entry key="85">tutp</entry>
+  <entry key="86">cetak miring</entry>
+  <entry key="87">cetak tebal</entry>
+  <entry key="88">TUNGGU</entry>
+  <entry key="89">Peserta menginginkan masuk menjadi moderator:</entry>
+  <entry key="90">diterima</entry>
+  <entry key="91">ditolak</entry>
+  <entry key="92">batal</entry>
+  <entry key="93">Kirimkan permintaan ke beberapa peserta berikut</entry>
+  <entry key="94">Diterima</entry>
+  <entry key="95">Ditolak</entry>
+  <entry key="96">Ganti Moderator</entry>
+  <entry key="97">Anda bukan moderator dalam kursus ini!</entry>
+  <entry key="98">Moderator:</entry>
+  <entry key="99">Kelas penuh, coba lagi nanti.</entry>
+  <entry key="100">Bentuk Lonjong</entry>
+  <entry key="101">tutup</entry>
+  <entry key="102">entri data salah</entry>
+  <entry key="103">4 karakter atau lebih; hurup kapital semua!</entry>
+  <entry key="104">userpass harus lebih dari 4 karakter</entry>
+  <entry key="105">username sudah terpakai</entry>
+  <entry key="106">email sudah diregistrasi</entry>
+  <entry key="107">System error silahkan kontak Admin</entry>
+  <entry key="108">Login</entry>
+  <entry key="109">User:</entry>
+  <entry key="110">Pass:</entry>
+  <entry key="111">Bahasa</entry>
+  <entry key="112">Masuk</entry>
+  <entry key="113">Mendaftar</entry>
+  <entry key="114">User:</entry>
+  <entry key="115">Pass:</entry>
+  <entry key="116">Ulangi Pass:</entry>
+  <entry key="117">Nama Depan:</entry>
+  <entry key="118">Nama Belakang:</entry>
+  <entry key="119">Email:</entry>
+  <entry key="120">Negara:</entry>
+  <entry key="121">Daftar</entry>
+  <entry key="122">Batal</entry>
+  <entry key="123">Bukan anggota?</entry>
+  <entry key="124">Halaman Utama</entry>
+  <entry key="125">User</entry>
+  <entry key="126">Group</entry>
+  <entry key="127">Organisasi</entry>
+  <entry key="128">Ruang-Rapat</entry>
+  <entry key="129">publik</entry>
+  <entry key="130">organisasi</entry>
+  <entry key="131">masuk</entry>
+  <entry key="132">Login</entry>
+  <entry key="133">Password</entry>
+  <entry key="134">Ulangi Password</entry>
+  <entry key="135">Nama Depan</entry>
+  <entry key="136">Nama Belakang</entry>
+  <entry key="137">Email</entry>
+  <entry key="138">Ulang tahun</entry>
+  <entry key="139">Jalan/No</entry>
+  <entry key="140">Kodepos/Kota</entry>
+  <entry key="141">Negara</entry>
+  <entry key="142">Informasi alamat</entry>
+  <entry key="143">Data User</entry>
+  <entry key="144">simpan</entry>
+  <entry key="145">Simpan</entry>
+  <entry key="146">ID USER</entry>
+  <entry key="147">login</entry>
+  <entry key="148">nama depan</entry>
+  <entry key="149">nama belakang</entry>
+  <entry key="150">selanjutnya</entry>
+  <entry key="151">sebelumnya</entry>
+  <entry key="152">hapus rekot</entry>
+  <entry key="153">batal</entry>
+  <entry key="154">hapus</entry>
+  <entry key="155">rekot baru</entry>
+  <entry key="156">panggil ulang</entry>
+  <entry key="157">hapus rekot</entry>
+  <entry key="158">status</entry>
+  <entry key="159">abaikan</entry>
+  <entry key="160">aktifkan</entry>
+  <entry key="161">organisasi</entry>
+  <entry key="162">kalender</entry>
+  <entry key="163">tutup</entry>
+  <entry key="164">ID Organisasi</entry>
+  <entry key="165">nama</entry>
+  <entry key="166">user</entry>
+  <entry key="167">mod</entry>
+  <entry key="168">admin</entry>
+  <entry key="169">level user</entry>
+  <entry key="170">organisasi</entry>
+  <entry key="171">nama</entry>
+  <entry key="172">tambahkan organisasi</entry>
+  <entry key="173">tambahkan organisasi</entry>
+  <entry key="174">batal</entry>
+  <entry key="175">tambah</entry>
+  <entry key="176">hapus organisasi</entry>
+  <entry key="177">user</entry>
+  <entry key="178">tambah user</entry>
+  <entry key="179">hapus user</entry>
+  <entry key="180">tambah user</entry>
+  <entry key="181">cari user</entry>
+  <entry key="182">cari</entry>
+  <entry key="183">user</entry>
+  <entry key="184">organisasi</entry>
+  <entry key="185">masuk</entry>
+  <entry key="186">ruang konferensi</entry>
+  <entry key="187">Ruang Konferensi</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Nama</entry>
+  <entry key="190">publik</entry>
+  <entry key="191">organisasi</entry>
+  <entry key="192">Ruang Rapat</entry>
+  <entry key="193">nama</entry>
+  <entry key="194">tipe</entry>
+  <entry key="195">publik</entry>
+  <entry key="196">komentar</entry>
+  <entry key="197">simpan</entry>
+  <entry key="198">panggil</entry>
+  <entry key="199">simpan sebagai</entry>
+  <entry key="200">nama file</entry>
+  <entry key="201">nama file</entry>
+  <entry key="202">batal</entry>
+  <entry key="203">simpan</entry>
+  <entry key="204">salah</entry>
+  <entry key="205">panggil</entry>
+  <entry key="206">objek terpanggil</entry>
+  <entry key="207">sinkronasi klien, harap menunggu:</entry>
+  <entry key="208">Panggil data gambar</entry>
+  <entry key="209">sinkronasi klien, harap menunggu:</entry>
+  <entry key="210">bersihkan area gambar</entry>
+  <entry key="211">area gambar di bersihkan, semua data akan hilang</entry>
+  <entry key="212">Konfirmasi sebelum panggil file</entry>
+  <entry key="213">Kirim undangan</entry>
+  <entry key="214">Kirim undangan</entry>
+  <entry key="215">Judul</entry>
+  <entry key="216">Penerima</entry>
+  <entry key="217">Pesan</entry>
+  <entry key="218">Kirim</entry>
+  <entry key="219">Batal</entry>
+  <entry key="220">batal</entry>
+  <entry key="221">Data User</entry>
+  <entry key="222">Nama panggilan anda untuk konferensi ini</entry>
+  <entry key="223">Panggilan</entry>
+  <entry key="224">nama depan</entry>
+  <entry key="225">nama belakang</entry>
+  <entry key="226">email</entry>
+  <entry key="227">bahasa</entry>
+  <entry key="228">masuk</entry>
+  <entry key="229">Panggil</entry>
+  <entry key="230">Data sedang dipanggil, tunggu!</entry>
+  <entry key="231">Password salah</entry>
+  <entry key="232">Silahkan masukan dua password yang sama, minimal 6 karakter</entry>
+  <entry key="233">Email salah</entry>
+  <entry key="234">Alamat email yang anda masukan salah</entry>
+  <entry key="235">Registrasi Komplet</entry>
+  <entry key="236">Akun anda udah dibuat, silahkan login sekarang.</entry>
+  <entry key="237">Anda tidak dapat melakukan sharing layar anda, seseorang sedang melakukannya.</entry>
+  <entry key="238">Tidak diperbolekan melakukan Sharing</entry>
+  <entry key="239">Sharing layar anda</entry>
+  <entry key="240">Bandwidth kurang: Anda tidak dapat melakukan sinkronasi. Jika peringatan ini terjadi terus menerus, silahkan meminta moderator untuk menurunkan tingkat kualitas.</entry>
+  <entry key="241">Layar dari:</entry>
+  <entry key="242">Gambar</entry>
+  <entry key="243">Dokumen</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">File</entry>
+  <entry key="246">Anggota</entry>
+  <entry key="247">Ambil dokumen asli</entry>
+  <entry key="248">Ambil dokumen pdf</entry>
+  <entry key="249">Panggil presentasi ke dalam whiteboard</entry>
+  <entry key="250">Konfigurasi</entry>
+  <entry key="251">Drag Objek ini</entry>
+  <entry key="252">Atur ulang Objek ini</entry>
+  <entry key="253">%</entry>
+  <entry key="254">dari</entry>
+  <entry key="255">Ke halaman utama</entry>
+  <entry key="256">Ke halaman sebelumnya</entry>
+  <entry key="257">Ke halaman selanjutnya</entry>
+  <entry key="258">Ke halaman terakhir</entry>
+  <entry key="259">Kecilkan --</entry>
+  <entry key="260">Besarkan ++</entry>
+  <entry key="261">Tuan.</entry>
+  <entry key="262">Nyonya.</entry>
+  <entry key="263">Konfigurasi</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Kunci</entry>
+  <entry key="266">Konfigurasi</entry>
+  <entry key="267">Kunci</entry>
+  <entry key="268">update terakir</entry>
+  <entry key="269">diupdate oleh</entry>
+  <entry key="270">komentar</entry>
+  <entry key="271">kunci</entry>
+  <entry key="272">dari</entry>
+  <entry key="273">User</entry>
+  <entry key="274">hapus user dari organisasi</entry>
+  <entry key="275">hapus</entry>
+  <entry key="276">User ini udah teregistrasi dalam organisasi ini.</entry>
+  <entry key="277">Berita</entry>
+  <entry key="278">Jalan singkat</entry>
+  <entry key="279">ke Konferensi</entry>
+  <entry key="280">ke Auditorium</entry>
+  <entry key="281">Support dan Bantuan</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">laporkan bug!</entry>
+  <entry key="285">Selebihnya</entry>
+  <entry key="286">Website (http://openmeetings.apache.org)</entry>
+  <entry key="287">Mailing List (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Ingat saya</entry>
+  <entry key="289">Konten</entry>
+  <entry key="290">Home Page saya</entry>
+  <entry key="291">Jadwal Rapat</entry>
+  <entry key="292">Jadwal Acara</entry>
+  <entry key="293">Rapat Umum</entry>
+  <entry key="294">Rapat Tertutup</entry>
+  <entry key="295">Acara Umum</entry>
+  <entry key="296">Acara Khusus</entry>
+  <entry key="297">Konten Publik</entry>
+  <entry key="298">Konten Khusus</entry>
+  <entry key="299">Konten Personal</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderasi</entry>
+  <entry key="302">Tambahkan ke moderasi</entry>
+  <entry key="303">Poling</entry>
+  <entry key="304">Pilih file</entry>
+  <entry key="305">Seting</entry>
+  <entry key="306">Seting Kamera dan Mic</entry>
+  <entry key="307">Seting Whiteboard</entry>
+  <entry key="308">Keluar</entry>
+  <entry key="309">Kembali ke ruangan</entry>
+  <entry key="310">Keluar</entry>
+  <entry key="311">Lupa password?</entry>
+  <entry key="312">Ubah password</entry>
+  <entry key="313">Lewat Email</entry>
+  <entry key="314">Lewat Login</entry>
+  <entry key="315">Email Anda</entry>
+  <entry key="316">Login Anda</entry>
+  <entry key="317">Kirim email dengan alamat ubah password</entry>
+  <entry key="318">Email tidak ditemukan. Pastikan email tersebut anda gunakan saat membuat akun.</entry>
+  <entry key="319">Silahkan masukan alamat email yang lain atau Username</entry>
+  <entry key="320">Tidak ada User terkoneksi dengan Username ini</entry>
+  <entry key="321">Email yang berisi informasi alamat baru telah dikirim ke email anda, silahkan cek email anda. Jika anda belum mendapatkan email, pastikan pada baigan seting spaming pada konfigurasi email anda dan kirimkan email lagi.</entry>
+  <entry key="322">Salah</entry>
+  <entry key="323">Pesan</entry>
+  <entry key="324">Hash tidak valid. User tidak ditemukan.</entry>
+  <entry key="325">Isi Ulang Password Anda</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">ubah Password</entry>
+  <entry key="328">Password baru</entry>
+  <entry key="329">Tulis lagi Password anda</entry>
+  <entry key="330">Pasword berbeda, silahkan ulangi lagi.</entry>
+  <entry key="331">4 karakter atau lebih, huruf kapital bermasalah!</entry>
+  <entry key="332">Password sudah di seting. Anda dapat login sekarang.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Kesalahan belum terlacak. Silahkan laporkan ke Team Servis.</entry>
+  <entry key="335">Username tidak ditemukan</entry>
+  <entry key="336">Password tidak valid</entry>
+  <entry key="337">Sukses keluar dari sistem</entry>
+  <entry key="338">Halaman depan registrasi dimatikan.</entry>
+  <entry key="339">EMail tidak valid</entry>
+  <entry key="340">Duplikasi nama file, silahkan menggunakan nama lain</entry>
+  <entry key="341">nama file terlalu pendek</entry>
+  <entry key="342">Alamat tidak dapat disimpan</entry>
+  <entry key="343">User telah ditambahkan tetapi anda harus memasukan kedalam salah satu organisasi, jika tidak akan mengakibatkan gagal login.</entry>
+  <entry key="344">Rekot baru</entry>
+  <entry key="345">Tidak ditemukan Kolom dengan ID kolom ini.</entry>
+  <entry key="346">Tidak ditemukan Label untuk kolom tersebut.</entry>
+  <entry key="347">Dibutuhkan Autorisasi sebagai Admin</entry>
+  <entry key="348">Editor Bahasa</entry>
+  <entry key="349">Bahasa</entry>
+  <entry key="350">ID Label</entry>
+  <entry key="351">Nama Label</entry>
+  <entry key="352">Nilai</entry>
+  <entry key="353">Nilai Kolom</entry>
+  <entry key="354">Nama Label</entry>
+  <entry key="355">Nilai Label</entry>
+  <entry key="356">ID Label</entry>
+  <entry key="357">Anda hanya bisa hapus label bukan kolom! Anda tidak dapat menghapus kolom, mungkin ada label didalam bahasa yang lain.</entry>
+  <entry key="358">ID Label tidak valid. Kolom FieldLanguagesvalues_Id tidak dapat ditemukan dalam database.</entry>
+  <entry key="359">Anda tidak dapat menghapus kolom ini. Anda hanya dapat menghapus label bukan kolom. Tidak ada label yang dipanggil sekarang, Mungkin belum dipiliah salah satu kolom atau tidak ada definisi label untuk kolom yang dimaksud pada pilihan bahasa ini.</entry>
+  <entry key="360">expor</entry>
+  <entry key="361">Anda harus keluar dahulu untuk melihat perubahan.</entry>
+  <entry key="362">Tambah pilihan bahasa</entry>
+  <entry key="363">hapus pilihan bahasa</entry>
+  <entry key="364">Tambah pilihan bahasa</entry>
+  <entry key="365">Nama</entry>
+  <entry key="366">Tambah pilihan bahasa</entry>
+  <entry key="367">Buat Arsip</entry>
+  <entry key="368">awal</entry>
+  <entry key="369">sebelumnya</entry>
+  <entry key="370">selanjutnya</entry>
+  <entry key="371">akhir</entry>
+  <entry key="372">user yang berbicara (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">mode suara nyala/mati</entry>
+  <entry key="374">Sistem</entry>
+  <entry key="375">Setingan Anda</entry>
+  <entry key="376">Hola,</entry>
+  <entry key="377">Edit profil anda</entry>
+  <entry key="378">Pesan baru:</entry>
+  <entry key="379">Kirim Gambar baru</entry>
+  <entry key="380">Expor - Data User</entry>
+  <entry key="381">Semua organisasi harus sudah tersedia!</entry>
+  <entry key="382">mulai expor</entry>
+  <entry key="383">Berdasarkan organisasi</entry>
+  <entry key="384">mulai expor</entry>
+  <entry key="385">Ambil - Data User</entry>
+  <entry key="386">Pilih users.xml</entry>
+  <entry key="387">ambil</entry>
+  <entry key="388">Expor dalam XML - File ini dapat di gunakan untuk : - Kontribusi kedalam project - Kirim ke sistem lain - Arsip - Opsi pilihan - Simpan ke dalam direktori bahasa - direktori untuk instalasi berikutnya</entry>
+  <entry key="389">Pilih file bahasa yang akan di ambil. Pilih bahasa yang benar dari form pilihan! Apapun nama filenya, yang dipilih yang akan diambil kedalam pilihan bahasa ini!</entry>
+  <entry key="390">Ambil - pilih file</entry>
+  <entry key="391">Simpan sebagai</entry>
+  <entry key="392">Nama:</entry>
+  <entry key="393">komentar:</entry>
+  <entry key="394">simpan</entry>
+  <entry key="395">Proses rekam</entry>
+  <entry key="396">Proses rekam Tampilan</entry>
+  <entry key="397">Proses rekam dari Ruangan umum atau khusus</entry>
+  <entry key="398">Users :</entry>
+  <entry key="399">Terkoneksi:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Users dalam ruangan ini:</entry>
+  <entry key="402">panggil ulang</entry>
+  <entry key="403">Ruangan ini penuh, silahkan mencoba lagi dalam beberapa menit.</entry>
+  <entry key="404">Klik pada Judul ruangan untuk melihat detilnya</entry>
+  <entry key="405">Chat dengan user dalam ruangan ini:</entry>
+  <entry key="406">Ruangan:</entry>
+  <entry key="407">Users dalam ruangan ini::</entry>
+  <entry key="408">mulai sejak:</entry>
+  <entry key="409">Putar Rekaman</entry>
+  <entry key="410">Durasi:</entry>
+  <entry key="411">Tanggal:</entry>
+  <entry key="412">Modus Rekam! Anda tidak dapat melakukan perubahan. Ini adalah file hasil rekaman!</entry>
+  <entry key="413">Putar hasil rekam</entry>
+  <entry key="414">Play / Pause</entry>
+  <entry key="415">Mulai Rekam</entry>
+  <entry key="416">Stop Rekam</entry>
+  <entry key="417">Merekam:</entry>
+  <entry key="418">Seseorang sedang merekam sekarang :</entry>
+  <entry key="419">Sedang Rekam! Oleh:</entry>
+  <entry key="420">Batal</entry>
+  <entry key="421">Proses rekam dibatalkan dan tidak disimpan.</entry>
+  <entry key="422">lanjut</entry>
+  <entry key="423">Tutup jendela ini dan lanjut rekam</entry>
+  <entry key="424">Ubah warnagaris</entry>
+  <entry key="425">Pilih Warna</entry>
+  <entry key="426">Aktipkan / Matikan warnagaris</entry>
+  <entry key="427">Ubah isianwarna</entry>
+  <entry key="428">Aktipkan / Matikan isianwarna</entry>
+  <entry key="429">Ubah besaran garis</entry>
+  <entry key="430">tutup</entry>
+  <entry key="431">ubah ukuran huruf</entry>
+  <entry key="432">Hapus Rekaman</entry>
+  <entry key="433">Tamu</entry>
+  <entry key="434">Oleh:</entry>
+  <entry key="435">Nama</entry>
+  <entry key="436">Ruang</entry>
+  <entry key="437">Tanggal</entry>
+  <entry key="438">batal</entry>
+  <entry key="439">mulai</entry>
+  <entry key="440">Nama</entry>
+  <entry key="441">Tanggal</entry>
+  <entry key="442">Hapus Log chat di Server</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">kirim pesan</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Pilih Perangkat</entry>
+  <entry key="448">Audio dan Video</entry>
+  <entry key="449">Hanya Audio</entry>
+  <entry key="450">Hanya Video</entry>
+  <entry key="451">Tidak ada Audio/Video (gambar saja)</entry>
+  <entry key="452">Tidak ada Audio/Video dari PC anda, hanya akan menampilkan gambar anda dari profile. Kemungkinan anda mengalami gangguan koneksi internet atau koneksi internet anda lambat.</entry>
+  <entry key="453">Sn</entry>
+  <entry key="454">Sl</entry>
+  <entry key="455">Rb</entry>
+  <entry key="456">Km</entry>
+  <entry key="457">Jm</entry>
+  <entry key="458">Sb</entry>
+  <entry key="459">Mg</entry>
+  <entry key="460">Senin</entry>
+  <entry key="461">Selasa</entry>
+  <entry key="462">Rabu</entry>
+  <entry key="463">Kamis</entry>
+  <entry key="464">Jumat</entry>
+  <entry key="465">Sabtu</entry>
+  <entry key="466">Minggu</entry>
+  <entry key="467">CW</entry>
+  <entry key="468">Kelendar mingguan</entry>
+  <entry key="469">Januari</entry>
+  <entry key="470">Pebruari</entry>
+  <entry key="471">Maret</entry>
+  <entry key="472">April</entry>
+  <entry key="473">Mei</entry>
+  <entry key="474">Juni</entry>
+  <entry key="475">Juli</entry>
+  <entry key="476">Agustus</entry>
+  <entry key="477">September</entry>
+  <entry key="478">Oktober</entry>
+  <entry key="479">November</entry>
+  <entry key="480">Desember</entry>
+  <entry key="481">Kalendar</entry>
+  <entry key="482">Peserta</entry>
+  <entry key="483">Tampilkan Setingan Layout</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Lebar | Tinggi</entry>
+  <entry key="486">Jendela Video</entry>
+  <entry key="487">Jendela Moderation</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Jendela Whiteboard</entry>
+  <entry key="490">Fungsikan</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Lebar | Tinggi</entry>
+  <entry key="493">Jendela Files,Chat,Partizipants</entry>
+  <entry key="494">Fungsikan</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Lebar | Tinggi</entry>
+  <entry key="497">Moderator meninggalkan Ruang. Tidak ada moderator sekarang. Anda dapat menjadi moderator atau menunggu sebentar.</entry>
+  <entry key="498">Tidak ada moderator sekarang, tetapi ada beberapa peserta. Anda harus menjadi moderator atau tunggu.</entry>
+  <entry key="499">Komentar tentang {0}</entry>
+  <entry key="500">Undangan - {0}</entry>
+  <entry key="501">Pesan dari peserta:</entry>
+  <entry key="502">Pesan:</entry>
+  <entry key="503">Klik link berikut untuk bergabung dalam rapat :</entry>
+  <entry key="504">Klik disini untuk masuk ke rapat</entry>
+  <entry key="505">Jika anda mengalami kesulitan, silahkan copy dan paste link berikut ke browser :</entry>
+  <entry key="506">Daptar ke {0}</entry>
+  <entry key="507">Data anda:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Pass:</entry>
+  <entry key="510">Email:</entry>
+  <entry key="511">Tim - {0}</entry>
+  <entry key="512">Daftar ke {0}</entry>
+  <entry key="513">Seting ulang password -{0}</entry>
+  <entry key="514">Klik link berikut untuk menseting ulang password :</entry>
+  <entry key="515">Klik disini untuk isi password baru</entry>
+  <entry key="516">ika anda mengalami kesulitan dengan link, silahkan copy dan paste ke browser :</entry>
+  <entry key="517">Seting ulang password {0}</entry>
+  <entry key="518">Silahkan isi tanggal dengan benar, contoh 24-12-2001 (dd-mm-yyyy)</entry>
+  <entry key="519">Silahkan isi alamat email dengan benar, contoh nama@alamat.com</entry>
+  <entry key="520">Silahkan masukan angka pecahan, contoh 1,05</entry>
+  <entry key="521">Silahkan masukan angka, contoh 100</entry>
+  <entry key="522">Silahkan masukan nomor telepon, contoh +62 274 486883</entry>
+  <entry key="523">Silahkan masukan format jam, contoh 12:24 (hh:mm)</entry>
+  <entry key="524">Terproteksi dengan Password</entry>
+  <entry key="525">Password</entry>
+  <entry key="526">Periode Valid</entry>
+  <entry key="527">Terakhir</entry>
+  <entry key="528">Periode</entry>
+  <entry key="529">Sekali waktu</entry>
+  <entry key="530">Valid dari :</entry>
+  <entry key="531">Valid sampai dengan:</entry>
+  <entry key="532">Undangan ke {0}</entry>
+  <entry key="533">Tidak ada Undangan untu Kode undangan ini!</entry>
+  <entry key="534">Undangan sudah terpakai, tidak bisa dipergunakan lagi.</entry>
+  <entry key="535">Kode - Undangan tidak valid.</entry>
+  <entry key="536">Password:</entry>
+  <entry key="537">Periksa Password</entry>
+  <entry key="538">Password salah!</entry>
+  <entry key="539">audio_video</entry>
+  <entry key="540">Syncronize Audio/Video</entry>
+  <entry key="541">Login was correct, but the Session you tried is not active or stored on the Server. You have to get a new SessionId and retry login.</entry>
+  <entry key="542">The SessionId is not loggedin or has no Admin rights. The SOAP Gateway needs an User with Admin-Rights to embed new Users.</entry>
+  <entry key="543">This Session has no Remoteuser-Data connected. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">The recorder is currently Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">w</entry>
+  <entry key="550">width</entry>
+  <entry key="551">h</entry>
+  <entry key="552">height</entry>
+  <entry key="553">Change Transparency</entry>
+  <entry key="554">Browser Open</entry>
+  <entry key="555">Browser Close</entry>
+  <entry key="556">The Connection to the Server is lost. You need to reload the Application or/and check your Network.</entry>
+  <entry key="557">Pointer</entry>
+  <entry key="558">Synchronizing</entry>
+  <entry key="559">Synchronizing Users, please wait</entry>
+  <entry key="560">&lt;u&gt;Download as SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download as PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download as JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download as PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download as TIF&lt;/u&gt;</entry>
+  <entry key="565">Reminder:</entry>
+  <entry key="566">Category:</entry>
+  <entry key="567">Repetition:</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Location:</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">End</entry>
+  <entry key="572">Title:</entry>
+  <entry key="573">Comment:</entry>
+  <entry key="574">Invite People</entry>
+  <entry key="575">Daily</entry>
+  <entry key="576">Monthly</entry>
+  <entry key="577">Yearly</entry>
+  <entry key="578">Appointment-end is after of appointment-start!</entry>
+  <entry key="579">Please insert a title!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Activate this if you write in a right to left language (inverse word order)</entry>
+  <entry key="582">Dashboard</entry>
+  <entry key="583">Watch recorded Meetings or Events</entry>
+  <entry key="584">Meeting - Make a conference with 4 (up to 16) Users&lt;br/&gt;everybody will have audio + video access</entry>
+  <entry key="585">Event - Make a conference with up to 200 participents&lt;br/&gt;Only the Moderator will have audio/video</entry>
+  <entry key="586">Create users, rooms, organizations&lt;br/&gt; + change configuration</entry>
+  <entry key="587">Users in this Room now</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Loading Document. Please wait untill all Client have been synchronized.</entry>
+  <entry key="592">Upload complete, converting Document ...</entry>
+  <entry key="593">Start Upload</entry>
+  <entry key="594">Upload and Import Dialog. Please select a File from your Disk.</entry>
+  <entry key="595">Cancel</entry>
+  <entry key="596">Select File</entry>
+  <entry key="597">Connections</entry>
+  <entry key="598">Value</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connected since</entry>
+  <entry key="602">Room / Scope</entry>
+  <entry key="603">Kick User</entry>
+  <entry key="604">Kick User</entry>
+  <entry key="605">Do you really want to kick this Client from the Connection?&lt;br/&gt; This does only remove the Client from the current Room.The Client could re-login again.</entry>
+  <entry key="606">Your session has been closed by an Administrator or Moderator.</entry>
+  <entry key="607">Phone</entry>
+  <entry key="608">User is the Moderator of this Room</entry>
+  <entry key="609">User is allowed to draw on the Whiteboard</entry>
+  <entry key="610">(Re) Start Audio/Video or change Device Settings</entry>
+  <entry key="611">Allow this User to draw on the Whiteboard</entry>
+  <entry key="612">Remove ability to draw on whiteboard</entry>
+  <entry key="613">Users</entry>
+  <entry key="614">Files</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Your account is assigned to multiple Organizations. Please choose one for this Session.</entry>
+  <entry key="618">This room is full at the moment. Please try again later.</entry>
+  <entry key="619">Room Type</entry>
+  <entry key="620">Appointment Room</entry>
+  <entry key="621">Server Time</entry>
+  <entry key="622">{0} - Reminder</entry>
+  <entry key="623">Message from User:</entry>
+  <entry key="624">Message:</entry>
+  <entry key="625">Click this link to participate in the Meetings:</entry>
+  <entry key="626">Click here to enter room</entry>
+  <entry key="627">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="628">search intern</entry>
+  <entry key="629">extern users</entry>
+  <entry key="630">pre name</entry>
+  <entry key="631">name</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirm logout</entry>
+  <entry key="634">Are you sure you want to logout now?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Demo Room</entry>
+  <entry key="637">Demo Time</entry>
+  <entry key="638">Meeting Timer</entry>
+  <entry key="639">This Room is a Demo Room. To disable this warning you either should get a private meeting room for your personal usage or set up an own Server. You will be automatically logged off in:</entry>
+  <entry key="640">Moderated</entry>
+  <entry key="641">Please wait untill the Moderator has entered the Room. The Moderator can be either a Teacher, Admin or the creator of this Room.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Incoming Screen Sharing</entry>
+  <entry key="644">There is a new Screen Sharing incoming from the User:</entry>
+  <entry key="645">Start Sharing</entry>
+  <entry key="646">Add new Meeting</entry>
+  <entry key="647">Meeting Room</entry>
+  <entry key="648">Event Room</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderate Users</entry>
+  <entry key="651">Moderate Rooms</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Do you want to change this User to become a Moderator of that Organization?</entry>
+  <entry key="654">Please choose an Organization before you try to add a User to it!</entry>
+  <entry key="655">Organization - Moderator</entry>
+  <entry key="656">Do you really want to delete this User from the Organization?</entry>
+  <entry key="657">This User is Moderator</entry>
+  <entry key="658">This User is No-Moderator</entry>
+  <entry key="659">Do you want this User to be not a Moderator of this Organization?</entry>
+  <entry key="660">Add or delete Users or Rooms within your Organization</entry>
+  <entry key="661">Do you really want to delete this record?</entry>
+  <entry key="662">Do you really want to delete this user from your organization? You will only delete the connection between the user and your organization, to really delete the user itself you have to login into the Administration-Panel.</entry>
+  <entry key="663">You cannot delete your own User!</entry>
+  <entry key="664">This Method needs a Adminstration Account to be invoked!</entry>
+  <entry key="665">There was no Session associated with this ID.</entry>
+  <entry key="666">This is an Administrator or Moderator account. You can only edit this account through the Administration Panel.</entry>
+  <entry key="667">To complete your registration please click on the following link. Or copy the URL to your browser bar.</entry>
+  <entry key="668">Click to verify your E-Mail</entry>
+  <entry key="669">No user was found for this Hash.</entry>
+  <entry key="670">This user is already activated!</entry>
+  <entry key="671">You did successfully activate your account!</entry>
+  <entry key="672">Login Now</entry>
+  <entry key="673">Your account is not activated. First use the link in the Email you've received during registration.</entry>
+  <entry key="674">You successfully signed up. We've send an EMail with a verification Code to your Mail. Please check your Inbox.</entry>
+  <entry key="675">Remove Moderation Role from this User</entry>
+  <entry key="676">Grant Moderation Rights to this User</entry>
+  <entry key="677">User</entry>
+  <entry key="678">Access to whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Please choose any User on the List to grant him access to the Whiteboard, Moderation or Video.</entry>
+  <entry key="681">This User is already Moderator, so he has automatically the right to draw.</entry>
+  <entry key="682">This is you! You cannot remove the Moderation rights from yourself.</entry>
+  <entry key="683">Allow this User to Publish his Audio / Video</entry>
+  <entry key="684">Remove Audio/Video of this User</entry>
+  <entry key="685">I would like to get the moderation of this room</entry>
+  <entry key="686">I would like to draw on whiteboard</entry>
+  <entry key="687">I would like to share my Audio/Video</entry>
+  <entry key="688">You are moderator of this room</entry>
+  <entry key="689">You are allowed to draw on whiteboard</entry>
+  <entry key="690">You are allowed to share your Audio/Video</entry>
+  <entry key="691">Message to Moderator</entry>
+  <entry key="692">The User</entry>
+  <entry key="693">would like to get the Moderation. Use the status Icons next to the user in the List of Users to add or remove the Moderation.</entry>
+  <entry key="694">would like to draw on whiteboard. Use the status Icons next to the user in the List of Users to add or remove the right to draw anything on the whiteboard.</entry>
+  <entry key="695">would like to share his Audio/Video. Use the status Icons next to the user in the List of Users to add or remove the right to share Audio/Video for any User.</entry>
+  <entry key="696">You have to wait untill a Moderator enters the room.</entry>
+  <entry key="697">Cancel</entry>
+  <entry key="698">Save</entry>
+  <entry key="699">Day</entry>
+  <entry key="700">Month</entry>
+  <entry key="701">Year</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_it.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_it.properties.xml
new file mode 100644
index 0000000..fda8c8e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_it.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Conferenza</entry>
+  <entry key="2">Riunione</entry>
+  <entry key="3">Auditorium</entry>
+  <entry key="4">Impostazioni</entry>
+  <entry key="5">Utente</entry>
+  <entry key="6">Amministrazione</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Registra</entry>
+  <entry key="9">Nessun file disponibile</entry>
+  <entry key="10">Solo il docente</entry>
+  <entry key="11">Utenti connessi:</entry>
+  <entry key="12">Inizia una conferenza</entry>
+  <entry key="13">Il mio nome</entry>
+  <entry key="14">Video Conferenza</entry>
+  <entry key="15">Carica presentazione</entry>
+  <entry key="16">Aggiorna la lista</entry>
+  <entry key="17">All'archivio principale</entry>
+  <entry key="18">Nuovo sondaggio</entry>
+  <entry key="19">Un nuovo sondaggio per la conferenza.</entry>
+  <entry key="20">Domanda:</entry>
+  <entry key="21">Tipo di sondaggio:</entry>
+  <entry key="22">Crea</entry>
+  <entry key="23">Informazione: Ogni utente connesso riceve un messaggio con il nuovo sondaggio.</entry>
+  <entry key="24">Crea un sondaggio</entry>
+  <entry key="25">Cancella</entry>
+  <entry key="26">Si/No</entry>
+  <entry key="27">Numerico 1-10</entry>
+  <entry key="28">Sondaggio</entry>
+  <entry key="29">Devi essere moderatore per creare una domanda</entry>
+  <entry key="30">Il tuo voto è stato registrato.</entry>
+  <entry key="31">Hai già votato per questo sondaggio.</entry>
+  <entry key="32">Vota!</entry>
+  <entry key="33">La tua risposta:</entry>
+  <entry key="34">Si</entry>
+  <entry key="35">No</entry>
+  <entry key="36">Rispondi alle domande:</entry>
+  <entry key="37">Risultati del sondaggio</entry>
+  <entry key="38">Domanda:</entry>
+  <entry key="39">risultati:</entry>
+  <entry key="40">Risposte:</entry>
+  <entry key="41">Nessun sondaggio è attivo.</entry>
+  <entry key="42">Vota!</entry>
+  <entry key="43">Riunione</entry>
+  <entry key="44">Auditorium (massimo 200 partecipanti)</entry>
+  <entry key="45">Tipo</entry>
+  <entry key="46">Altri partecipanti</entry>
+  <entry key="47">Già scelto</entry>
+  <entry key="48">entra</entry>
+  <entry key="49">Il moderatore ha lasciato la riunione.</entry>
+  <entry key="50">Informazioni di sistema</entry>
+  <entry key="51">Scegli il dispositivo</entry>
+  <entry key="52">Scegli la webcam:</entry>
+  <entry key="53">Scegli il microfono:</entry>
+  <entry key="54">ok</entry>
+  <entry key="55">annulla</entry>
+  <entry key="56">Devi riconnetterti.</entry>
+  <entry key="57">Modifica le impostazioni.</entry>
+  <entry key="58">Corso:</entry>
+  <entry key="59">Lingua:</entry>
+  <entry key="60">ok</entry>
+  <entry key="61">annulla</entry>
+  <entry key="62">Cancella la lavagna</entry>
+  <entry key="63">Vuoi che la lavagna sia pulita prima di aggiungere una nuova immagine?</entry>
+  <entry key="64">Non chiedere ancora</entry>
+  <entry key="65">no</entry>
+  <entry key="66">Modifica impostazioni</entry>
+  <entry key="67">Richiesta di conferma prima di pulire la lavagna.</entry>
+  <entry key="68">Informazioni sull'utente</entry>
+  <entry key="69">Pulisci la lavagna</entry>
+  <entry key="70">Annulla le modifiche</entry>
+  <entry key="71">Ripristina le modifiche</entry>
+  <entry key="72">Seleziona un'oggetto</entry>
+  <entry key="73">Testo</entry>
+  <entry key="74">Disegna</entry>
+  <entry key="75">Disegna una linea</entry>
+  <entry key="76">Evidenziatore</entry>
+  <entry key="77">Rettangolo</entry>
+  <entry key="78">Ellisse</entry>
+  <entry key="79">Freccia</entry>
+  <entry key="80">Cancella l'oggetto selezionato</entry>
+  <entry key="81">Sottoponi al moderatore</entry>
+  <entry key="82">applica</entry>
+  <entry key="83">cancella</entry>
+  <entry key="84">Diventa moderatore</entry>
+  <entry key="85">chiudi</entry>
+  <entry key="86">corsivo</entry>
+  <entry key="87">grassetto</entry>
+  <entry key="88">ATTENDERE</entry>
+  <entry key="89">Un utente vuole sottoporre al moderatore:</entry>
+  <entry key="90">accetta</entry>
+  <entry key="91">rifiuta</entry>
+  <entry key="92">cancella</entry>
+  <entry key="93">Invia la richiesta agli utenti seguenti</entry>
+  <entry key="94">Accettata</entry>
+  <entry key="95">Rifiutata</entry>
+  <entry key="96">Cambia moderatore</entry>
+  <entry key="97">Non sei il moderatore per questo corso!</entry>
+  <entry key="98">Moderatore:</entry>
+  <entry key="99">La stanza è piena. Spiacenti riprovare più tardi.</entry>
+  <entry key="100">Ellisse</entry>
+  <entry key="101">chiudi</entry>
+  <entry key="102">errori nei dati inseriti</entry>
+  <entry key="103">Il nome utente deve essere di almeno 4 caratteri</entry>
+  <entry key="104">la password deve essere di almeno 4 caratteri</entry>
+  <entry key="105">Il nome utente è già in uso</entry>
+  <entry key="106">L'indirizzo email è già stato usato</entry>
+  <entry key="107">Errore di sistema, contattare l'amministratore</entry>
+  <entry key="108">Login</entry>
+  <entry key="109">Nome utente:</entry>
+  <entry key="110">Password:</entry>
+  <entry key="111">Lingua</entry>
+  <entry key="112">Entra</entry>
+  <entry key="113">Iscriviti</entry>
+  <entry key="114">Nome utente:</entry>
+  <entry key="115">Password:</entry>
+  <entry key="116">Riscrivere:</entry>
+  <entry key="117">Nome:</entry>
+  <entry key="118">Cognome:</entry>
+  <entry key="119">Email:</entry>
+  <entry key="120">Stato:</entry>
+  <entry key="121">Registrati</entry>
+  <entry key="122">Annulla</entry>
+  <entry key="123">Registrati</entry>
+  <entry key="124">home</entry>
+  <entry key="125">Utenti</entry>
+  <entry key="126">Gruppi</entry>
+  <entry key="127">Organizzazioni</entry>
+  <entry key="128">Stanze delle conferenze</entry>
+  <entry key="129">pubblico</entry>
+  <entry key="130">organizzazione</entry>
+  <entry key="131">entra</entry>
+  <entry key="132">Login</entry>
+  <entry key="133">Password</entry>
+  <entry key="134">Riscrivere</entry>
+  <entry key="135">Nome</entry>
+  <entry key="136">Cognome</entry>
+  <entry key="137">Email</entry>
+  <entry key="138">Data di nascita</entry>
+  <entry key="139">Indirizzo/civico</entry>
+  <entry key="140">C.A.P/Città</entry>
+  <entry key="141">Stato</entry>
+  <entry key="142">Informazioni</entry>
+  <entry key="143">Dati utente</entry>
+  <entry key="144">salva</entry>
+  <entry key="145">salva</entry>
+  <entry key="146">ID-Utente</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">nome</entry>
+  <entry key="149">cognome</entry>
+  <entry key="150">mostra prossimo</entry>
+  <entry key="151">mostra precedente</entry>
+  <entry key="152">Elimina il record</entry>
+  <entry key="153">annulla</entry>
+  <entry key="154">elimina</entry>
+  <entry key="155">nuovo record</entry>
+  <entry key="156">aggiorna record</entry>
+  <entry key="157">elimina record</entry>
+  <entry key="158">stato</entry>
+  <entry key="159">disabilitato</entry>
+  <entry key="160">abilitato</entry>
+  <entry key="161">organizzazioni</entry>
+  <entry key="162">calendario</entry>
+  <entry key="163">chiudi</entry>
+  <entry key="164">ID-organizzazione</entry>
+  <entry key="165">nome</entry>
+  <entry key="166">utente</entry>
+  <entry key="167">mod</entry>
+  <entry key="168">amministratore</entry>
+  <entry key="169">livello utente</entry>
+  <entry key="170">organizzazione</entry>
+  <entry key="171">nome</entry>
+  <entry key="172">aggiungi un'organizzazione</entry>
+  <entry key="173">aggiungi un'organizzazione</entry>
+  <entry key="174">annulla</entry>
+  <entry key="175">aggiungi</entry>
+  <entry key="176">rimuovi l'organizzazione</entry>
+  <entry key="177">utente</entry>
+  <entry key="178">aggiungi un'utente</entry>
+  <entry key="179">elimina l'utente</entry>
+  <entry key="180">aggiungi l'utente</entry>
+  <entry key="181">cerca un utente</entry>
+  <entry key="182">cerca</entry>
+  <entry key="183">utente</entry>
+  <entry key="184">organizzazione</entry>
+  <entry key="185">entra</entry>
+  <entry key="186">stanze delle conferenze</entry>
+  <entry key="187">stanze delle conferenze</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Nome</entry>
+  <entry key="190">pubblico</entry>
+  <entry key="191">organizzazioni</entry>
+  <entry key="192">stanze delle conferenze</entry>
+  <entry key="193">nome</entry>
+  <entry key="194">tipo</entry>
+  <entry key="195">pubblico</entry>
+  <entry key="196">commento</entry>
+  <entry key="197">salva</entry>
+  <entry key="198">carica</entry>
+  <entry key="199">salva con nome</entry>
+  <entry key="200">nome del file</entry>
+  <entry key="201">nome del file</entry>
+  <entry key="202">annulla</entry>
+  <entry key="203">salva</entry>
+  <entry key="204">errore</entry>
+  <entry key="205">caricamento</entry>
+  <entry key="206">oggetto caricato</entry>
+  <entry key="207">sincronizzazione con i client, attendere:</entry>
+  <entry key="208">Caricamento delle immagini</entry>
+  <entry key="209">sincronizzazione con i client, attendere:</entry>
+  <entry key="210">pulisci la lavagna</entry>
+  <entry key="211">pulisci la lavagna, tutte le informazioni su di essa saranno perse</entry>
+  <entry key="212">Conferma prima di caricare il file</entry>
+  <entry key="213">Invia un invito</entry>
+  <entry key="214">Invia un invito</entry>
+  <entry key="215">Soggetto</entry>
+  <entry key="216">Destinatario</entry>
+  <entry key="217">Messaggio</entry>
+  <entry key="218">Invia</entry>
+  <entry key="219">annulla</entry>
+  <entry key="220">invia</entry>
+  <entry key="221">dati utente</entry>
+  <entry key="222">Il tuo appellativo per la conferenza</entry>
+  <entry key="223">appellativo</entry>
+  <entry key="224">nome</entry>
+  <entry key="225">cognome</entry>
+  <entry key="226">Email</entry>
+  <entry key="227">lingua</entry>
+  <entry key="228">entra</entry>
+  <entry key="229">Caricamento</entry>
+  <entry key="230">Caricamento dati, attendere prego!</entry>
+  <entry key="231">Password sbagliata</entry>
+  <entry key="232">Inserisci due password identiche di minimo 6 caratteri</entry>
+  <entry key="233">Mail sbagliata</entry>
+  <entry key="234">Hai inserito una mail non valida</entry>
+  <entry key="235">Registrazione completata</entry>
+  <entry key="236">Il tuo profilo è stato creato correttamente. Puoi effettuare il login.</entry>
+  <entry key="237">Non è possibile condividere il tuo desktop in questo momento. Potrebbe essere in condivisione con qualcun'altro</entry>
+  <entry key="238">Condivisione non permessa</entry>
+  <entry key="239">Condivisione desktop</entry>
+  <entry key="240">larghezza di banda insufficiente: Non sei abilitato a sincronizzare le immagini. i Frames saranno lasciati. Se visualizzi questo messaggio chiedi al moderatore di abbassare la qualità.</entry>
+  <entry key="241">immagine di:</entry>
+  <entry key="242">Disegna</entry>
+  <entry key="243">Documento</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Files</entry>
+  <entry key="246">Membri</entry>
+  <entry key="247">Scarica il documento originale</entry>
+  <entry key="248">Scarica il documento PDF</entry>
+  <entry key="249">Carica la presentazione sulla lavagna</entry>
+  <entry key="250">Configurazione</entry>
+  <entry key="251">Muovi quest'oggetto</entry>
+  <entry key="252">Ripristina quest'oggetto</entry>
+  <entry key="253">%</entry>
+  <entry key="254">di</entry>
+  <entry key="255">Vai alla prima pagina</entry>
+  <entry key="256">Vai alla pagina precedente</entry>
+  <entry key="257">Vai alla prossima pagina</entry>
+  <entry key="258">Vai all'ultima pagina</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">sig.</entry>
+  <entry key="262">Sig.ra</entry>
+  <entry key="263">Configurazione</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Chiave</entry>
+  <entry key="266">Configurazione</entry>
+  <entry key="267">Chiave</entry>
+  <entry key="268">Ultimo aggiornamento</entry>
+  <entry key="269">aggiornato da</entry>
+  <entry key="270">commenti</entry>
+  <entry key="271">chiave</entry>
+  <entry key="272">di</entry>
+  <entry key="273">Utenti</entry>
+  <entry key="274">Cancella l'utente dall'organizzazione</entry>
+  <entry key="275">cancella</entry>
+  <entry key="276">Questo utente è già membro di questa organizzazione.</entry>
+  <entry key="277">News</entry>
+  <entry key="278">Link veloce</entry>
+  <entry key="279">Vai alla Riunione</entry>
+  <entry key="280">Vai all'Auditorium</entry>
+  <entry key="281">Aiuto e supporto</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Bug!</entry>
+  <entry key="285">Altre informazioni</entry>
+  <entry key="286">Sito web del progetto (http://openmeetings.apache.org)</entry>
+  <entry key="287">Mailing List utenti (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Ricorda utente</entry>
+  <entry key="289">Content</entry>
+  <entry key="290">Mia Home Page</entry>
+  <entry key="291">Mie conferenze fissate</entry>
+  <entry key="292">Miei eventi fissati</entry>
+  <entry key="293">Conferenze pubbliche</entry>
+  <entry key="294">Conferenze private</entry>
+  <entry key="295">Eventi pubblici</entry>
+  <entry key="296">Eventi privati</entry>
+  <entry key="297">Contenuti pubblici</entry>
+  <entry key="298">Contenuti privati</entry>
+  <entry key="299">Contenuti personali</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderatore</entry>
+  <entry key="302">Assegna moderatore</entry>
+  <entry key="303">Sondaggio</entry>
+  <entry key="304">Scegli un file</entry>
+  <entry key="305">Impostazioni</entry>
+  <entry key="306">Impostazioni Cam e Mic</entry>
+  <entry key="307">Impostazioni lavagna</entry>
+  <entry key="308">Esci</entry>
+  <entry key="309">Torna alle stanze</entry>
+  <entry key="310">Logout</entry>
+  <entry key="311">Visualizzatore desktop</entry>
+  <entry key="312">Avvia visualizzatore desktop</entry>
+  <entry key="313">Video e Audio</entry>
+  <entry key="314">Chat</entry>
+  <entry key="315">Lavagna</entry>
+  <entry key="316">Moderatore</entry>
+  <entry key="317">Files</entry>
+  <entry key="318">Utenti</entry>
+  <entry key="319">Sondaggio</entry>
+  <entry key="320">Non ci sono utenti collegati con questo Username</entry>
+  <entry key="321">Una mail, contenente un link, è stata inviata al tuo indirizzo email, controlla la tua posta. Se non hai ricevuto la mail, controlla il tuo filtro di spam e richiedi nuovamente la mail di conferma.</entry>
+  <entry key="322">Errore</entry>
+  <entry key="323">Messaggio</entry>
+  <entry key="324">Hash non valida. Utente non trovato.</entry>
+  <entry key="325">Resetta la tua password</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">cambia password</entry>
+  <entry key="328">nuova password</entry>
+  <entry key="329">ripeti la password</entry>
+  <entry key="330">Le password inserite non sono identiche.</entry>
+  <entry key="331">4 o più caratteri; sensibile alle maiuscole;</entry>
+  <entry key="332">Password impostata. Ora puoi collegarti.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Errore sconosciuto. Contatta il tuo amministratore.</entry>
+  <entry key="335">Username non trovato</entry>
+  <entry key="336">Password non valida</entry>
+  <entry key="337">Scollegamento effettuato</entry>
+  <entry key="338">Registrazioni disabilitate.</entry>
+  <entry key="339">EMail non valida</entry>
+  <entry key="340">nome del file duplicato, scegli un altro nome</entry>
+  <entry key="341">nome di file troppo corto</entry>
+  <entry key="342">Salvataggio di indirizzo non possibile</entry>
+  <entry key="343">Utente aggiunto, ma deve essere assegnato ad un'organizzazione, altrimenti non potrà collegarsi.</entry>
+  <entry key="344">Nuova registrazione</entry>
+  <entry key="345">Nessun testo trovato con questo ID.</entry>
+  <entry key="346">Nessun valore trovato per questo elemento.</entry>
+  <entry key="347">Permessi da amministratore richiesti</entry>
+  <entry key="348">Editor linguaggi</entry>
+  <entry key="349">Linguaggi</entry>
+  <entry key="350">Identificativo-ID</entry>
+  <entry key="351">Identificativo-Nome</entry>
+  <entry key="352">Valore</entry>
+  <entry key="353">Record</entry>
+  <entry key="354">Nome dell'identificativo</entry>
+  <entry key="355">Testo</entry>
+  <entry key="356">ID</entry>
+  <entry key="357">Puoi cancellare solo l'identificativo, non il record! Potrebbe essere utilizzato in altri linguaggi.</entry>
+  <entry key="358">ID non valido. l'identificativo del linguaggio non è presente nel database.</entry>
+  <entry key="359">Non puoi cancellare questo campo. Puoi solo cancellare il contenuto non il campo. Non ci sono dati contenuti caricati in questo momento, potrebbe non esser stato scelto un campo o non ci sono contenuti impostati per questo linguaggio.</entry>
+  <entry key="360">esporta</entry>
+  <entry key="361">Devi scollegarti per vedere i cambiamenti.</entry>
+  <entry key="362">Aggiungi un nuovo linguaggio</entry>
+  <entry key="363">cancella linguaggio</entry>
+  <entry key="364">Aggiungi nuovo linguaggio</entry>
+  <entry key="365">Nome</entry>
+  <entry key="366">aggiungi linguaggio</entry>
+  <entry key="367">Backup</entry>
+  <entry key="368">vai al primo</entry>
+  <entry key="369">vai al precedente</entry>
+  <entry key="370">vai al prossimo</entry>
+  <entry key="371">vai all'ultimo</entry>
+  <entry key="372">utente parla (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">suono on/off</entry>
+  <entry key="374">Sistema</entry>
+  <entry key="375">I tuoi settaggi</entry>
+  <entry key="376">ciao,</entry>
+  <entry key="377">Modifica il profilo</entry>
+  <entry key="378">Nuovi messaggi:</entry>
+  <entry key="379">Carica nuove immagini</entry>
+  <entry key="380">Esporta dati utente</entry>
+  <entry key="381">Le organizzazioni devono esistere tutte!</entry>
+  <entry key="382">Inizia esportazione</entry>
+  <entry key="383">Per organizzazione</entry>
+  <entry key="384">inizia esportazione</entry>
+  <entry key="385">Dati utente - Importazione</entry>
+  <entry key="386">scegli users.xml</entry>
+  <entry key="387">importa</entry>
+  <entry key="388">esporta in XML - Questi file possono essere usati per: - Contribuire al progetto - Importare in altro sistema - Backup - Personalizzazione - Inserire nella directoy dei linguaggi della tua prossima installazione</entry>
+  <entry key="389">Scegli un file di linguaggio da importare. Scegli il giusto linguaggio dalla combobox! Non importa il nome del file, esso sarà importato in questo linguaggio!</entry>
+  <entry key="390">importazione - file scelto</entry>
+  <entry key="391">Salva come</entry>
+  <entry key="392">Nome:</entry>
+  <entry key="393">Commento:</entry>
+  <entry key="394">save</entry>
+  <entry key="395">Registra</entry>
+  <entry key="396">Visualizzatore delle registrazioni</entry>
+  <entry key="397">Registrazioni di stanze private e pubbliche</entry>
+  <entry key="398">Utenti:</entry>
+  <entry key="399">Accedi:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Utenti nella stanza:</entry>
+  <entry key="402">ricarica</entry>
+  <entry key="403">Questa stanza è piena. Riprova fra qualche minuto.</entry>
+  <entry key="404">premi su una stanza per avere dettagli</entry>
+  <entry key="405">Parla con gli utenti nella stanza:</entry>
+  <entry key="406">Stanza:</entry>
+  <entry key="407">Utenti in questa stanza:</entry>
+  <entry key="408">fino:</entry>
+  <entry key="409">vedi registrazione</entry>
+  <entry key="410">Durata:</entry>
+  <entry key="411">Data:</entry>
+  <entry key="412">Registrazione! Non puoi cambiare nessuna impostazione, è una registrazione!</entry>
+  <entry key="413">Vedi questa registrazione</entry>
+  <entry key="414">Play / Pause</entry>
+  <entry key="415">Avvia registrazione</entry>
+  <entry key="416">ferma registrazione</entry>
+  <entry key="417">Registrazione:</entry>
+  <entry key="418">C'e' già qualcuno che sta registrando in questo momento:</entry>
+  <entry key="419">Registrazione! dall'utente:</entry>
+  <entry key="420">cancella</entry>
+  <entry key="421">La registrazione sarà cancellata e non salvata.</entry>
+  <entry key="422">recupera</entry>
+  <entry key="423">Chiudi questa finestra e recupera registrazione</entry>
+  <entry key="424">cambia colore della linea</entry>
+  <entry key="425">Scegli colore</entry>
+  <entry key="426">Disabilita / Abilita il colore della linea</entry>
+  <entry key="427">cambia il colore di riempimento</entry>
+  <entry key="428">Disabilita / abilita riempimento colore</entry>
+  <entry key="429">Cambia spessore linea</entry>
+  <entry key="430">chiudi</entry>
+  <entry key="431">cambia grandezza carattere</entry>
+  <entry key="432">Cancella registrazione</entry>
+  <entry key="433">Ospite</entry>
+  <entry key="434">Da:</entry>
+  <entry key="435">Nome</entry>
+  <entry key="436">Stanza</entry>
+  <entry key="437">Data</entry>
+  <entry key="438">cancella</entry>
+  <entry key="439">inizio</entry>
+  <entry key="440">Nome</entry>
+  <entry key="441">Data</entry>
+  <entry key="442">Cancella i log della chat sul server</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">invia messaggio</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Scegli i devices da pubblicare</entry>
+  <entry key="448">Audio e Video</entry>
+  <entry key="449">solo Audio</entry>
+  <entry key="450">solo Video</entry>
+  <entry key="451">no Audio/Video (immagine statica)</entry>
+  <entry key="452">Nessun Audio/Video del tuo PC saranno pubblicati, al loro posto sarà visualizzata l'immagine del tuo profilo. Scegli questa impostazione se hai problemi di banda o velocità di Internet.</entry>
+  <entry key="453">LU</entry>
+  <entry key="454">MA</entry>
+  <entry key="455">ME</entry>
+  <entry key="456">GI</entry>
+  <entry key="457">VE</entry>
+  <entry key="458">SA</entry>
+  <entry key="459">DO</entry>
+  <entry key="460">Lunedi</entry>
+  <entry key="461">Martedi</entry>
+  <entry key="462">Mercoledi</entry>
+  <entry key="463">Giovedi</entry>
+  <entry key="464">Venerdi</entry>
+  <entry key="465">Sabato</entry>
+  <entry key="466">Domenica</entry>
+  <entry key="467">CW</entry>
+  <entry key="468">Calendario settimane</entry>
+  <entry key="469">Gennaio</entry>
+  <entry key="470">Febbraio</entry>
+  <entry key="471">Marzo</entry>
+  <entry key="472">Aprile</entry>
+  <entry key="473">Maggio</entry>
+  <entry key="474">Giugno</entry>
+  <entry key="475">Luglio</entry>
+  <entry key="476">Agosto</entry>
+  <entry key="477">Settembre</entry>
+  <entry key="478">Ottobre</entry>
+  <entry key="479">Novembre</entry>
+  <entry key="480">Dicembre</entry>
+  <entry key="481">Calendario</entry>
+  <entry key="482">Partecipanti</entry>
+  <entry key="483">Mostra i settaggi del layout</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Larghezza | Altezza</entry>
+  <entry key="486">Video-Container</entry>
+  <entry key="487">Moderatore-Container</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Lavagna-Container</entry>
+  <entry key="490">Abilitato</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Larghezza | Altezza</entry>
+  <entry key="493">Files,Chat,Partecipanti - Container</entry>
+  <entry key="494">Abilitato</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Larghezza | Altezza</entry>
+  <entry key="497">Il moderatore ha lasciato la stanza. Nessuno è presente in questo momento. Tu puoi diventare moderatore o attendere.</entry>
+  <entry key="498">Non ci sono moderatori in questa stanza, ma ci sono dei partecipanti. Puoi diventare moderatore o attendere.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Invito</entry>
+  <entry key="501">Messaggio dall'utente:</entry>
+  <entry key="502">Messaggio:</entry>
+  <entry key="503">Clicca questo link per partecipare alla conferenza:</entry>
+  <entry key="504">Clicca qui per entrare nella stanza</entry>
+  <entry key="505">se hai problemi con il link, per favore copia e incolla questo sul browser:</entry>
+  <entry key="506">{0} SignUp</entry>
+  <entry key="507">I tuoi dati:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Pass:</entry>
+  <entry key="510">EMail:</entry>
+  <entry key="511">{0}-Team</entry>
+  <entry key="512">{0} Accesso</entry>
+  <entry key="513">{0} - Re-imposta password</entry>
+  <entry key="514">Clicca su questo link per inserire una nuova password:</entry>
+  <entry key="515">Clicca qui per inserire una nuova password</entry>
+  <entry key="516">se hai problemi con il link, per favore copia e incolla questo sul browser:</entry>
+  <entry key="517">Reset della password di {0}</entry>
+  <entry key="518">inserisci una data valida, per esempio 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">Inserisci un email valido, per esempio name@mail.com</entry>
+  <entry key="520">Inserisci un numero decimale, per esempio 1.00</entry>
+  <entry key="521">Inserisci un numero (Intero), per esempio 100</entry>
+  <entry key="522">Inserisci un numero di telefono valido, per esempio ++39 0461 123123</entry>
+  <entry key="523">Inserisci un orario valido, per esempio 12:23 (hh:mm)</entry>
+  <entry key="524">Protetto da password</entry>
+  <entry key="525">Password</entry>
+  <entry key="526">Periodo di validità</entry>
+  <entry key="527">Senza scadenza</entry>
+  <entry key="528">Periodo</entry>
+  <entry key="529">Una volta</entry>
+  <entry key="530">Valido da:</entry>
+  <entry key="531">Valido fino:</entry>
+  <entry key="532">Invito a {0}</entry>
+  <entry key="533">Nessun invito presente per questo codice.</entry>
+  <entry key="534">L'invito è già stato utilizzato. Questo tipo di invito non può essere riutilizzato.</entry>
+  <entry key="535">Il codice di invito non è valido.</entry>
+  <entry key="536">Password:</entry>
+  <entry key="537">Controlla password</entry>
+  <entry key="538">Password non valida!</entry>
+  <entry key="539">Browser</entry>
+  <entry key="540">Sincronizzazione Audio/video</entry>
+  <entry key="541">Accesso corretto, ma la sessione non è attiva o presente sul server. Sarà assegnato una nuova sessione e dovrà essere ripetuto l'accesso.</entry>
+  <entry key="542">La sessione non è collegata o non ha diritti di amministrazione. The SOAP Gateway necessita di un utente con diritti di amministrazione per creare un utente..</entry>
+  <entry key="543">La sessione non ha utenti remoti-dati connessi. Potrebbe esser stato chiamato il SOAP-Gateway prima di effettuare l'accesso all'applicazione o è stato utilizzato un id di sessione errato.</entry>
+  <entry key="544">La registrazione è in fase beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">w</entry>
+  <entry key="550">larghezza</entry>
+  <entry key="551">h</entry>
+  <entry key="552">altezza</entry>
+  <entry key="553">Cambia trasparenza</entry>
+  <entry key="554">Apri browser</entry>
+  <entry key="555">Chiudi browser</entry>
+  <entry key="556">La connessione al serve è stata persa. E' necessario ricollegarsi all'applicazione e/o controllare la rete.</entry>
+  <entry key="557">Puntatore</entry>
+  <entry key="558">Sincronizzazione</entry>
+  <entry key="559">Sincronizzazione utenti, attendere</entry>
+  <entry key="560">Scarica come SVG</entry>
+  <entry key="561">Scarica come PNG</entry>
+  <entry key="562">Scarica come JPG</entry>
+  <entry key="563">Scarica come PDF</entry>
+  <entry key="564">Scarica come TIF</entry>
+  <entry key="565">Promemoria:</entry>
+  <entry key="566">Categoria:</entry>
+  <entry key="567">Ripetizione:</entry>
+  <entry key="568">niente</entry>
+  <entry key="569">Località:</entry>
+  <entry key="570">Inizio</entry>
+  <entry key="571">Fine</entry>
+  <entry key="572">Titolo:</entry>
+  <entry key="573">Commento:</entry>
+  <entry key="574">Invita partecipanti</entry>
+  <entry key="575">Giornaliero</entry>
+  <entry key="576">Mensile</entry>
+  <entry key="577">Annuale</entry>
+  <entry key="578">La data di fine è dopo quella di inizio dell'appuntamento!</entry>
+  <entry key="579">Inserisci un titolo!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Attiva le la scrittura del tuo linguaggio va da destra a sinistra (inverte ordine parole)</entry>
+  <entry key="582">Cruscotto</entry>
+  <entry key="583">Guarda eventi e conferenze registrate</entry>
+  <entry key="584">Conferenza - Conferenze con 4 (fino a 16) utenti; tutti hanno accesso a audio e video</entry>
+  <entry key="585">Eventi - Conferenze fino a 200 utenti. Solo il moderatore ha audio e video</entry>
+  <entry key="586">Crea utenti, stanze, organizzazioni + cambia configurazione</entry>
+  <entry key="587">Utenti nella stanza ora</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Caricamento documento. Aspettare finché i client sono sincronizzati.</entry>
+  <entry key="592">Caricamento completato, conversione del documento in corso ...</entry>
+  <entry key="593">Inizia caricamento</entry>
+  <entry key="594">Carica e importa il dialogo. Scegli un file dal disco.</entry>
+  <entry key="595">Annulla</entry>
+  <entry key="596">Scelta file</entry>
+  <entry key="597">Connessioni</entry>
+  <entry key="598">Value</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connesso da</entry>
+  <entry key="602">Room / Scope</entry>
+  <entry key="603">Caccia utente</entry>
+  <entry key="604">Caccia utente</entry>
+  <entry key="605">Sei sicuro di voler chiudere la connessione a questo client? Il client sarà solamente rimosso dalla stanza corrente. Il client potrà ricollegarsi.</entry>
+  <entry key="606">La tua sessione è stata chiusa da un amministratore o moderatore</entry>
+  <entry key="607">Telefono</entry>
+  <entry key="608">L'utente è il moderatore di questa stanza</entry>
+  <entry key="609">L'utente è abilitato a disegnare sulla lavagna</entry>
+  <entry key="610">(Ri) attiva Audio/Video o cambia le impostazioni</entry>
+  <entry key="611">Abilita questo utente a disegnare sulla lavagna</entry>
+  <entry key="612">Rimuovi possibilità di disegnare sulla lavagna</entry>
+  <entry key="613">Utenti</entry>
+  <entry key="614">Files</entry>
+  <entry key="615">Lavagna</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Il tuo account è assegnato a più organizzazioni. Per favore scegline una per questa sessione.</entry>
+  <entry key="618">Questa stanza è piena al momento. Per favore riprova più tardi.</entry>
+  <entry key="619">Tipo stanza</entry>
+  <entry key="620">Stanza appuntamenti</entry>
+  <entry key="621">Ora del server</entry>
+  <entry key="622">Agenda</entry>
+  <entry key="623">Messaggio dall'utente:</entry>
+  <entry key="624">Messaggio:</entry>
+  <entry key="625">Clicca questo link per partecipare alla videoconferenza:</entry>
+  <entry key="626">Clicca qui per entrare nella stanza</entry>
+  <entry key="627">se hai problemi con il link, copia e incolla sul browser il seguente link:</entry>
+  <entry key="628">ricerca interna</entry>
+  <entry key="629">utente esterno</entry>
+  <entry key="630">titolo</entry>
+  <entry key="631">nome</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Conferma uscita</entry>
+  <entry key="634">Sei sicuro di voler uscire?</entry>
+  <entry key="635">Azioni</entry>
+  <entry key="636">Stanza demo</entry>
+  <entry key="637">Orario demo</entry>
+  <entry key="638">Orario meeting</entry>
+  <entry key="639">Questa stanza è una stanza demo. Per disabilitare questo avviso è necessario attivare una conferenza privata per uso ristretto o attivare un server dedicato. Sarai automaticamente sconnesso in:</entry>
+  <entry key="640">moderata</entry>
+  <entry key="641">Perfavore attendi finchè un moderatore si collega alla stanza. Il moderatore può essere un insegnante, un amministratore o il creatore della stanza.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Condivisione schermo in ingresso</entry>
+  <entry key="644">C'è una nuova condivisione di schermo in ingresso dall'utente:</entry>
+  <entry key="645">Inizia condivisione</entry>
+  <entry key="646">Aggiungi nuovo meeting</entry>
+  <entry key="647">Stanza meeting</entry>
+  <entry key="648">Stanza eventi</entry>
+  <entry key="649">Moderazione</entry>
+  <entry key="650">Utenti moderatori</entry>
+  <entry key="651">Stanze moderate</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Vuoi modificare questo utente a diventare moderatore dell'organizzazione?</entry>
+  <entry key="654">Perfavore scegli un organizzazione prima di aggiungere l'utente!</entry>
+  <entry key="655">Organizzazione - Moderatori</entry>
+  <entry key="656">Sei sicuro di cancellare questo utente dall'organizzazione?</entry>
+  <entry key="657">Questo utente è moderatore</entry>
+  <entry key="658">Questo utente non è moderatore</entry>
+  <entry key="659">Vuoi che questo utente non sia moderatore dell'organizzazione?</entry>
+  <entry key="660">Aggiungi o cancella utenti o stanze della tua organizzazione</entry>
+  <entry key="661">Sei sicuro di cancellare questo record?</entry>
+  <entry key="662">Sei sicuro di cancellare questo utente dall'organizzazione? Sarà cancellato il legame tra utente e organizzazione, per cancellare completamente l'utente devi collegarti al pannello di amministratore.</entry>
+  <entry key="663">Non puoi cancellare te stesso!</entry>
+  <entry key="664">Questo metodo ha bisogno di un account da amministratore per essere chiamato!</entry>
+  <entry key="665">Non ci sono sessioni collegate a questo ID.</entry>
+  <entry key="666">Questo utente è un amministratore o moderatore. Puoi editare questo account solo dal pannello di amministratore.</entry>
+  <entry key="667">Per completare la registrazione per favore clicca sul seguente link o copia l'url nel tuo browser.</entry>
+  <entry key="668">clicca per convalidare la tua e-mail</entry>
+  <entry key="669">Nessun utente è stato trovato per questo codice hash.</entry>
+  <entry key="670">Questo utente è già stato attivato!</entry>
+  <entry key="671">Hai attivato correttamente il tuo utente!</entry>
+  <entry key="672">Collegati ora</entry>
+  <entry key="673">Il tuo utente non è attivo. Per prima cosa clicca sul link presente nella mail ricevuta nel processo di registrazione</entry>
+  <entry key="674">Ti sei registrato correttamente. E' stata inviata una e-mail per la verifica dell'utente. Per favore controlla la tua posta in arrivo.</entry>
+  <entry key="675">Rimuovi il ruolo di moderatore da questo utente.</entry>
+  <entry key="676">Assegna i diritti di moderatore a questo utente.</entry>
+  <entry key="677">Utente</entry>
+  <entry key="678">Accesso alla lavagna virtuale</entry>
+  <entry key="679">Moderatore</entry>
+  <entry key="680">Moderazione: Per favore scegli dalla lista gli utenti a cui assegnare i diritti della lavagna virtuale, la moderazione o il video.</entry>
+  <entry key="681">Questo utente è già moderatore, ha automaticamente i diritti di disegno.</entry>
+  <entry key="682">Sei tu! Non puoi toglierti i diritti di amministratore.</entry>
+  <entry key="683">Abilita questo utente a pubblicare Video e Audio</entry>
+  <entry key="684">Rimuovi Audio e Video a questo utente</entry>
+  <entry key="685">Vorrei ricevere la moderazione di questa stanza.</entry>
+  <entry key="686">Vorrei disegnare sulla lavagna virtuale</entry>
+  <entry key="687">Vorrei condividere il mio Audio e Video</entry>
+  <entry key="688">Sei il moderatore della stanza</entry>
+  <entry key="689">Hai i diritti di disegnare sulla lavagna virtuale</entry>
+  <entry key="690">Sei abilitato a inviare il tuo Audio e Video</entry>
+  <entry key="691">Messaggio al moderatore</entry>
+  <entry key="692">L'utente</entry>
+  <entry key="693">vorrebbe diventare moderatore. Utilizza l'icona di stato vicino all'utente nella lista utenti per aggiungere e rimuovere i moderatori.</entry>
+  <entry key="694">vorrebbe disegnare sulla lavagna virtuale. Utilizza l'icona di stato vicino all'utente nella lista utenti per aggiungere e rimuovere i diritti di uso della lavagna virtuale.</entry>
+  <entry key="695">vorrebbe condividere i suoi Audio e Video. Utilizza l'icona di stato vicino all'utente nella lista utenti per aggiungere e rimuovere i diritti di condivisione Audio e Video.</entry>
+  <entry key="696">Devi attendere fino a quando un moderatore entra nella stanza.</entry>
+  <entry key="697">Annulla</entry>
+  <entry key="698">Salva</entry>
+  <entry key="699">Giorno</entry>
+  <entry key="700">Mese</entry>
+  <entry key="701">Anno</entry>
+  <entry key="702">Carica File</entry>
+  <entry key="703">Aggiungi directory</entry>
+  <entry key="704">Aggiorna</entry>
+  <entry key="705">Cestino</entry>
+  <entry key="706">Miei File (Spazio privato)</entry>
+  <entry key="707">Files della stanza (Spazio pubblico)</entry>
+  <entry key="708">Aggiungi File</entry>
+  <entry key="709">Aggiungi directory</entry>
+  <entry key="710">Cancella directory</entry>
+  <entry key="711">Modifica nome</entry>
+  <entry key="712">Nuova directory</entry>
+  <entry key="713">Sei sicuro di voler cancellare questo elemento?</entry>
+  <entry key="714">Ricerca</entry>
+  <entry key="715">Ricerca</entry>
+  <entry key="716">Apri documento</entry>
+  <entry key="717">Mostra tutti i file (Visualizzazione ad albero)</entry>
+  <entry key="718">Chiudi documento</entry>
+  <entry key="719">Cancella file</entry>
+  <entry key="720">Non sei autorizzato a disegnare sulla lavagna. Devi diventare moderatore o almeno ricevere i diritti per lavorare sulla lavagna. Chiedi al moderatore l'assegnazione di questi diritti.</entry>
+  <entry key="721">Proprietà documento</entry>
+  <entry key="722">Avvia Client (external)</entry>
+  <entry key="723">Avvia Client (HTTP)</entry>
+  <entry key="724">Un utente vuol condividere il suo schermo. Vuoi vederlo?</entry>
+  <entry key="725">Ora stai condividendo il tuo desktop. Per interrompere la sessione di condivisione, premi sul bottone di Stop nella finestra di condivisione.</entry>
+  <entry key="726">Condivisi sessione</entry>
+  <entry key="727">Stai già condividendo il tuo desktop!</entry>
+  <entry key="728">Visualizzatore Desktop</entry>
+  <entry key="729">Esci</entry>
+  <entry key="730">Condividi Desktop</entry>
+  <entry key="731">Clicca avvia per pubblicare il tuo video</entry>
+  <entry key="732">Avvia condivisione</entry>
+  <entry key="733">Ferma condivisione</entry>
+  <entry key="734">Scegli l'area del tuo schermo:</entry>
+  <entry key="735">Cambia larghezza</entry>
+  <entry key="736">La condivisione ha finito la sessione!</entry>
+  <entry key="737">Cambia altezza</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Larghezza:</entry>
+  <entry key="741">Altezza:</entry>
+  <entry key="742">Connessione chiusa dal Server!</entry>
+  <entry key="743">Annulla</entry>
+  <entry key="744">Avvia External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Condividi schermo</entry>
+  <entry key="748">Registra sessione</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Precedente</entry>
+  <entry key="752">Avanti</entry>
+  <entry key="753">Ricarica</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Carica</entry>
+  <entry key="756">Imposta questo sito come default nel tuo profilo.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Verifica le impostazioni del tuo microfono e della tua cam prima di entrare nella stanza, registrando qualche secondo. Potrai poi rivedere la registrazione per verificare l'audio e il video.</entry>
+  <entry key="759">Non mostrare più questo test</entry>
+  <entry key="760">Annulla</entry>
+  <entry key="761">Avvia conferenza</entry>
+  <entry key="762">Non richiedere ancora</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Puoi procedere senza verificare se hai intenzione di non condividere la tua voce e video. I partecipanti senza audio e video possono ugualmente utilizzare la lavagna, condividere il proprio desktop o scrivere messaggi in chat.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Premi Avvia</entry>
+  <entry key="769">Avvia conferenza</entry>
+  <entry key="770">Avvia evento</entry>
+  <entry key="771">Scegli la stanza</entry>
+  <entry key="772">Verifica impostazioni</entry>
+  <entry key="773">Avvia conferenza</entry>
+  <entry key="774">Come fare una videoconferenza:</entry>
+  <entry key="775">Avvia registrazione</entry>
+  <entry key="776">Non mostrate il test Audio/Video (registrazione) prima di entrare in una conferenza</entry>
+  <entry key="777">Stanze pubbliche</entry>
+  <entry key="778">Le stanze pubbliche sono accessibili da tutti gli utenti</entry>
+  <entry key="779">Stanze private</entry>
+  <entry key="780">Le stanze private sono accessibili solo dagli utenti della rispettiva organizzazione.</entry>
+  <entry key="781">Mie stanze</entry>
+  <entry key="782">Le stanze di questa sezione sono create per usi personali. Sono create attraverso il calendario e hanno una data di inizio e di fine. Sono visibili in questa sezione solo per la durata della loro validità.</entry>
+  <entry key="783">Devi essere moderatore per fare questa azione.</entry>
+  <entry key="784">Assegna moderatore</entry>
+  <entry key="785">Assegna accesso alla lavagna</entry>
+  <entry key="786">Assegna accesso a cam/microfono</entry>
+  <entry key="787">Questa hash di sessione è già in uso. Non puoi accedere contemporaneamente.</entry>
+  <entry key="788">INIZIO</entry>
+  <entry key="789">ESCI</entry>
+  <entry key="790">Sei sicuro di voler uscire? Potresti dover pulire i documenti caricati, la lavagna e la chat</entry>
+  <entry key="791">Esci conferenza</entry>
+  <entry key="792">Stanze</entry>
+  <entry key="793">Scegli la stanza per un meeting</entry>
+  <entry key="794">E' presente un evento non salvato nel calendario. Per favore salvalo o cancellalo.</entry>
+  <entry key="795">Si prega di aggiungere almeno un partecipante per la riunione!</entry>
+  <entry key="796">Sei sicuro di voler cancellare questo evento?</entry>
+  <entry key="797">Attenzione</entry>
+  <entry key="798">Aggiungi evento</entry>
+  <entry key="799">giorno</entry>
+  <entry key="800">settimana</entry>
+  <entry key="801">mese</entry>
+  <entry key="802">Descrizione</entry>
+  <entry key="803">Partecipanti</entry>
+  <entry key="804">{0}, la tua piattaforma di videoconferenza. Segui le istruzioni premendo il tasto inizio per cominciare subito una videoconferenza, o vai al calendario e pianifica una conferenza per il futuro.</entry>
+  <entry key="805">Pianifica una conferenza</entry>
+  <entry key="806">Per pianificare una conferenza tu puoi aggiungere un evento nel calendario. Per ogni evento sarà creata un apposita stanza. Tu e tutti gli invitati riceverete una mail con un link per accedere alla stanza.&lt;br/&gt;&lt;br/&gt;Puoi scegliere tra diverse tipologie di stanze con differenti tipologie di layout e mdoerazione. Puoi anche scegliere tra diversi tipi di notifica via email che avvisano dell'evento in calendario.</entry>
+  <entry key="807">Serve aiuto?</entry>
+  <entry key="808">Ristretto</entry>
+  <entry key="809">Cerca</entry>
+  <entry key="810">Aggiungi</entry>
+  <entry key="811">Non ci sono utenti selezionati. Si prega di scegliere un elemento dalla lista e poi premere aggiungi.</entry>
+  <entry key="812">Aggiungi partecipanti</entry>
+  <entry key="813">Salva</entry>
+  <entry key="814">Cancella</entry>
+  <entry key="815">Dettagli evento</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_ja.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
new file mode 100644
index 0000000..54d2b2f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_ja.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">会議室</entry>
+  <entry key="2">会議</entry>
+  <entry key="3">講演</entry>
+  <entry key="4">設定</entry>
+  <entry key="5">ユーザー</entry>
+  <entry key="6">管理</entry>
+  <entry key="7">停止</entry>
+  <entry key="8">録画</entry>
+  <entry key="9">利用可能なファイルがありません</entry>
+  <entry key="10">講師による録画</entry>
+  <entry key="11">接続済みユーザー:</entry>
+  <entry key="12">会議開始</entry>
+  <entry key="13">名前</entry>
+  <entry key="14">ビデオ会議</entry>
+  <entry key="15">アップロード</entry>
+  <entry key="16">ファイルリスト表示更新</entry>
+  <entry key="17">ファイルリストへ</entry>
+  <entry key="18">新規投票</entry>
+  <entry key="19">新規投票</entry>
+  <entry key="20">質問:</entry>
+  <entry key="21">投票タイプ:</entry>
+  <entry key="22">作成</entry>
+  <entry key="23">ヒント: 接続中の全参加者に対して、投票を促すメッセージを送信します</entry>
+  <entry key="24">投票の作成</entry>
+  <entry key="25">キャンセル</entry>
+  <entry key="26">はい/いいえ</entry>
+  <entry key="27">1~10の数字</entry>
+  <entry key="28">投票</entry>
+  <entry key="29">質問を作成するには司会者になる必要があります</entry>
+  <entry key="30">投票が登録されました</entry>
+  <entry key="31">投票済みです</entry>
+  <entry key="32">投票する</entry>
+  <entry key="33">あなたの回答:</entry>
+  <entry key="34">はい</entry>
+  <entry key="35">いいえ</entry>
+  <entry key="36">質問内容:</entry>
+  <entry key="37">投票結果閲覧</entry>
+  <entry key="38">質問:</entry>
+  <entry key="39">結果:</entry>
+  <entry key="40">回答:</entry>
+  <entry key="41">開始されている投票はありません</entry>
+  <entry key="42">投票</entry>
+  <entry key="43">ミーティング</entry>
+  <entry key="44">会議</entry>
+  <entry key="45">タイプ</entry>
+  <entry key="46">他の席</entry>
+  <entry key="47">既に選択されています</entry>
+  <entry key="48">入室</entry>
+  <entry key="49">司会者が退室しました</entry>
+  <entry key="50">システム情報</entry>
+  <entry key="51">デバイス選択</entry>
+  <entry key="52">Webカメラ:</entry>
+  <entry key="53">マイク:</entry>
+  <entry key="54">はい</entry>
+  <entry key="55">キャンセル</entry>
+  <entry key="56">再接続が必要です。</entry>
+  <entry key="57">デバイス設定の編集</entry>
+  <entry key="58">コース:</entry>
+  <entry key="59">言語:</entry>
+  <entry key="60">OK</entry>
+  <entry key="61">キャンセル</entry>
+  <entry key="62">ホワイトボードのクリア</entry>
+  <entry key="63">ホワイトボードをクリア</entry>
+  <entry key="64">次回から入力を省略</entry>
+  <entry key="65">いいえ</entry>
+  <entry key="66">設定の編集</entry>
+  <entry key="67">ホワイトボードをクリアする前に確認を要求</entry>
+  <entry key="68">ユーザー情報</entry>
+  <entry key="69">描画領域のクリア</entry>
+  <entry key="70">取り消し</entry>
+  <entry key="71">繰り返し</entry>
+  <entry key="72">オブジェクト選択</entry>
+  <entry key="73">文字列</entry>
+  <entry key="74">自由線</entry>
+  <entry key="75">直線</entry>
+  <entry key="76">下線</entry>
+  <entry key="77">四角形</entry>
+  <entry key="78">楕円</entry>
+  <entry key="79">矢印</entry>
+  <entry key="80">削除</entry>
+  <entry key="81">司会者になる</entry>
+  <entry key="82">適用</entry>
+  <entry key="83">キャンセル</entry>
+  <entry key="84">司会者になる</entry>
+  <entry key="85">閉じる</entry>
+  <entry key="86">イタリック</entry>
+  <entry key="87">ボールド</entry>
+  <entry key="88">待機中</entry>
+  <entry key="89">司会者希望のユーザー:</entry>
+  <entry key="90">許可</entry>
+  <entry key="91">拒否</entry>
+  <entry key="92">キャンセル</entry>
+  <entry key="93">次のユーザーにリクエストを送信</entry>
+  <entry key="94">許可されました</entry>
+  <entry key="95">拒否されました</entry>
+  <entry key="96">司会者の変更</entry>
+  <entry key="97">あなたは司会者ではありません。</entry>
+  <entry key="98">司会者:</entry>
+  <entry key="99">この会議室は満室です。</entry>
+  <entry key="100">楕円</entry>
+  <entry key="101">閉じる</entry>
+  <entry key="102">入力データエラー</entry>
+  <entry key="103">ユーザー名は最低4文字以上必要です</entry>
+  <entry key="104">パスワードは最低4文字以上必要です</entry>
+  <entry key="105">そのユーザー名は既に使われています</entry>
+  <entry key="106">そのメールアドレスは既に登録されています</entry>
+  <entry key="107">システムエラー。管理者に連絡してください。</entry>
+  <entry key="108">ログイン</entry>
+  <entry key="109">ユーザー:</entry>
+  <entry key="110">パスワード:</entry>
+  <entry key="111">言語</entry>
+  <entry key="112">ログイン</entry>
+  <entry key="113">サインアップ</entry>
+  <entry key="114">ユーザー:</entry>
+  <entry key="115">パスワード:</entry>
+  <entry key="116">パスワード再入力:</entry>
+  <entry key="117">名:</entry>
+  <entry key="118">姓:</entry>
+  <entry key="119">メールアドレス:</entry>
+  <entry key="120">国名:</entry>
+  <entry key="121">登録</entry>
+  <entry key="122">キャンセル</entry>
+  <entry key="123">登録</entry>
+  <entry key="124">ホーム</entry>
+  <entry key="125">ユーザー管理</entry>
+  <entry key="126">グループ</entry>
+  <entry key="127">組織管理</entry>
+  <entry key="128">会議室一覧</entry>
+  <entry key="129">公開</entry>
+  <entry key="130">組織</entry>
+  <entry key="131">入室</entry>
+  <entry key="132">ログイン名</entry>
+  <entry key="133">パスワード</entry>
+  <entry key="134">パスワード再入力</entry>
+  <entry key="135">名</entry>
+  <entry key="136">姓</entry>
+  <entry key="137">メールアドレス</entry>
+  <entry key="138">誕生日</entry>
+  <entry key="139">市町村/番地</entry>
+  <entry key="140">郵便番号/都道府県</entry>
+  <entry key="141">国名</entry>
+  <entry key="142">その他情報</entry>
+  <entry key="143">ユーザープロフィール</entry>
+  <entry key="144">保存</entry>
+  <entry key="145">保存</entry>
+  <entry key="146">ユーザーID</entry>
+  <entry key="147">ログイン名</entry>
+  <entry key="148">名</entry>
+  <entry key="149">姓</entry>
+  <entry key="150">次</entry>
+  <entry key="151">前</entry>
+  <entry key="152">削除</entry>
+  <entry key="153">キャンセル</entry>
+  <entry key="154">削除</entry>
+  <entry key="155">新規作成</entry>
+  <entry key="156">更新</entry>
+  <entry key="157">削除</entry>
+  <entry key="158">ステータス</entry>
+  <entry key="159">無効</entry>
+  <entry key="160">有効</entry>
+  <entry key="161">組織</entry>
+  <entry key="162">カレンダー</entry>
+  <entry key="163">閉じる</entry>
+  <entry key="164">組織-ID</entry>
+  <entry key="165">名前</entry>
+  <entry key="166">ユーザー</entry>
+  <entry key="167">司会者</entry>
+  <entry key="168">管理者</entry>
+  <entry key="169">ユーザーレベル</entry>
+  <entry key="170">組織</entry>
+  <entry key="171">名前</entry>
+  <entry key="172">組織の追加</entry>
+  <entry key="173">組織の追加</entry>
+  <entry key="174">キャンセル</entry>
+  <entry key="175">追加</entry>
+  <entry key="176">組織の削除</entry>
+  <entry key="177">ユーザー</entry>
+  <entry key="178">ユーザー追加</entry>
+  <entry key="179">ユーザー削除</entry>
+  <entry key="180">ユーザー追加</entry>
+  <entry key="181">ユーザー検索</entry>
+  <entry key="182">検索</entry>
+  <entry key="183">ユーザー</entry>
+  <entry key="184">組織</entry>
+  <entry key="185">入室</entry>
+  <entry key="186">会議室管理</entry>
+  <entry key="187">会議室</entry>
+  <entry key="188">id</entry>
+  <entry key="189">名前</entry>
+  <entry key="190">公開</entry>
+  <entry key="191">組織</entry>
+  <entry key="192">会議室</entry>
+  <entry key="193">名前</entry>
+  <entry key="194">タイプ</entry>
+  <entry key="195">公開</entry>
+  <entry key="196">コメント</entry>
+  <entry key="197">保存</entry>
+  <entry key="198">ロード</entry>
+  <entry key="199">名前を付けて保存</entry>
+  <entry key="200">ファイル名</entry>
+  <entry key="201">ファイル名</entry>
+  <entry key="202">キャンセル</entry>
+  <entry key="203">保存</entry>
+  <entry key="204">エラー</entry>
+  <entry key="205">ロード中</entry>
+  <entry key="206">オブジェクトがロードされました</entry>
+  <entry key="207">クライアント同期中、待機中のクライアント:</entry>
+  <entry key="208">イメージデータロード中</entry>
+  <entry key="209">クライアント同期中、待機中のクライアント:</entry>
+  <entry key="210">ホワイトボードクリア</entry>
+  <entry key="211">ホワイトボードの内容がクリアされます。</entry>
+  <entry key="212">ファイルロード前の確認</entry>
+  <entry key="213">招待メールを送信</entry>
+  <entry key="214">招待メールを送信</entry>
+  <entry key="215">件名</entry>
+  <entry key="216">相手</entry>
+  <entry key="217">メッセージ</entry>
+  <entry key="218">送信</entry>
+  <entry key="219">キャンセル</entry>
+  <entry key="220">発言</entry>
+  <entry key="221">ユーザーデータ</entry>
+  <entry key="222">この会議の別名</entry>
+  <entry key="223">別名</entry>
+  <entry key="224">名</entry>
+  <entry key="225">姓</entry>
+  <entry key="226">メールアドレス</entry>
+  <entry key="227">言語</entry>
+  <entry key="228">入室</entry>
+  <entry key="229">ロード中</entry>
+  <entry key="230">データロード中。お待ちください。</entry>
+  <entry key="231">パスワードが間違っています</entry>
+  <entry key="232">4文字以上の同一のパスワードを2回入力してください</entry>
+  <entry key="233">メールアドレスが間違っています</entry>
+  <entry key="234">メールアドレスが無効です</entry>
+  <entry key="235">登録完了</entry>
+  <entry key="236">アカウントが作成されました。ログイン可能です。</entry>
+  <entry key="237">ただいまデスクトップ共有ができません。誰かが既に共有しています。</entry>
+  <entry key="238">共有は許可されていません。</entry>
+  <entry key="239">画面の共有/録画</entry>
+  <entry key="240">帯域不良: 画面の同期ができません。フレームが落ちます。この警告が頻発する場合、品質を落とすように司会者に依頼してください。</entry>
+  <entry key="241">画面:</entry>
+  <entry key="242">ペイント</entry>
+  <entry key="243">ドキュメント</entry>
+  <entry key="244">チャット</entry>
+  <entry key="245">ファイル</entry>
+  <entry key="246">メンバー</entry>
+  <entry key="247">オリジナルドキュメントのダウンロード</entry>
+  <entry key="248">PDFドキュメントのダウンロード</entry>
+  <entry key="249">プレゼンテーションをホワイトボードにロード</entry>
+  <entry key="250">グローバル設定</entry>
+  <entry key="251">ドラッグ</entry>
+  <entry key="252">サイズ変更</entry>
+  <entry key="253">%</entry>
+  <entry key="254">/</entry>
+  <entry key="255">最初へ</entry>
+  <entry key="256">前へ</entry>
+  <entry key="257">次へ</entry>
+  <entry key="258">最後へ</entry>
+  <entry key="259">縮小</entry>
+  <entry key="260">拡大</entry>
+  <entry key="261">Mr.</entry>
+  <entry key="262">Ms.</entry>
+  <entry key="263">グローバル設定</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">キー</entry>
+  <entry key="266">設定</entry>
+  <entry key="267">キー</entry>
+  <entry key="268">最終更新日</entry>
+  <entry key="269">更新者</entry>
+  <entry key="270">コメント</entry>
+  <entry key="271">キー値</entry>
+  <entry key="272">/</entry>
+  <entry key="273">ユーザー</entry>
+  <entry key="274">組織からユーザーを削除</entry>
+  <entry key="275">削除</entry>
+  <entry key="276">このユーザーは既にこの組織のメンバーです。</entry>
+  <entry key="277">ニュース</entry>
+  <entry key="278">リンク</entry>
+  <entry key="279">会議室リスト</entry>
+  <entry key="280">講演室リスト</entry>
+  <entry key="281">ヘルプ・サポート</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://mail-archives.apache.org/mod_mbox/openmeetings-user/</entry>
+  <entry key="284">バグ報告</entry>
+  <entry key="285">続き・・・</entry>
+  <entry key="286">プロジェクトWebサイト</entry>
+  <entry key="287">ユーザーメーリングリスト</entry>
+  <entry key="288">次回から入力を省略</entry>
+  <entry key="289">コンテンツ</entry>
+  <entry key="290">ダッシュボード</entry>
+  <entry key="291">カレンダー</entry>
+  <entry key="292">スケジュール済みイベント</entry>
+  <entry key="293">パブリック会議</entry>
+  <entry key="294">プライベート会議</entry>
+  <entry key="295">パブリックイベント</entry>
+  <entry key="296">プライベートイベント</entry>
+  <entry key="297">パブリックコンテンツ</entry>
+  <entry key="298">プライベートコンテンツ</entry>
+  <entry key="299">パーソナルコンテンツ</entry>
+  <entry key="300"></entry>
+  <entry key="301">司会者</entry>
+  <entry key="302">質問があります</entry>
+  <entry key="303">投票</entry>
+  <entry key="304">フィル選択</entry>
+  <entry key="305">設定</entry>
+  <entry key="306">カメラとマイクの設定</entry>
+  <entry key="307">ホワイトボード設定</entry>
+  <entry key="308">退室する</entry>
+  <entry key="309">会議室一覧に戻る</entry>
+  <entry key="310">ログアウト</entry>
+  <entry key="311">パスワードを忘れた</entry>
+  <entry key="312">パスワードのリセット</entry>
+  <entry key="313">メールでリセット</entry>
+  <entry key="314">ログインでリセット</entry>
+  <entry key="315">メールアドレス</entry>
+  <entry key="316">ログイン名</entry>
+  <entry key="317">パスワード・リセット用リンクを含むメールを送信する</entry>
+  <entry key="318">指定されたメール・アドレスが見つかりません。アカウント作成時に指定したメール・アドレスを指定してください。</entry>
+  <entry key="319">メール・アドレスまたはユーザー名を入力してください。</entry>
+  <entry key="320">このユーザー名で接続するユーザーはありません。</entry>
+  <entry key="321">専用リンクを含むメールをあなたのメール・アドレスに対して送信しました。メール受信箱をご確認ください。もし受信できない場合は、スパムとして除外されている可能性があります。その場合はスパム設定を見直し、再度、確認メールを送信してください。</entry>
+  <entry key="322">エラー</entry>
+  <entry key="323">メッセージ</entry>
+  <entry key="324">ハッシュ値が不正です。ユーザーが見つかりません。</entry>
+  <entry key="325">パスワードのリセット</entry>
+  <entry key="326">ログイン</entry>
+  <entry key="327">パスワード変更</entry>
+  <entry key="328">新しいパスワード</entry>
+  <entry key="329">パスワード再入力</entry>
+  <entry key="330">パスワードが合っていません。</entry>
+  <entry key="331">4文字以上必要です。大文字小文字の区別があります。</entry>
+  <entry key="332">パスワードが設定されました。ログイン可能です。</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">未知のエラーです。管理者に報告してください。</entry>
+  <entry key="335">ユーザー名が見つかりません。</entry>
+  <entry key="336">パスワードが無効です。</entry>
+  <entry key="337">ログアウト完了</entry>
+  <entry key="338">フロントエンド登録は無効です。</entry>
+  <entry key="339">無効なメールアドレスです。</entry>
+  <entry key="340">ファイル名が重複しています。別の名前にしてください。</entry>
+  <entry key="341">ファイル名が短すぎます。</entry>
+  <entry key="342">アドレスが保存できませんでした。</entry>
+  <entry key="343">ユーザーは追加されました。このユーザーは少なくとも一つの組織に所属させる必要があります。</entry>
+  <entry key="344">新規作成</entry>
+  <entry key="345">このフィールドIDのフィールドが見つかりません。</entry>
+  <entry key="346">このフィールドのラベルが見つかりません。</entry>
+  <entry key="347">管理者権限が必要です。</entry>
+  <entry key="348">言語エディタ</entry>
+  <entry key="349">言語</entry>
+  <entry key="350">ラベルID</entry>
+  <entry key="351">ラベル名</entry>
+  <entry key="352">値</entry>
+  <entry key="353">フィールド値</entry>
+  <entry key="354">ラベル名</entry>
+  <entry key="355">値</entry>
+  <entry key="356">ラベルID</entry>
+  <entry key="357">ラベルを削除しました。</entry>
+  <entry key="358">ラベルIDが無効です。</entry>
+  <entry key="359">このフィールドは削除不可です。</entry>
+  <entry key="360">エクスポート</entry>
+  <entry key="361">変更結果を反映するには再ログインが必要です。</entry>
+  <entry key="362">新しい言語の追加</entry>
+  <entry key="363">言語の削除</entry>
+  <entry key="364">新しい言語の追加</entry>
+  <entry key="365">名前</entry>
+  <entry key="366">言語の追加</entry>
+  <entry key="367">バックアップ</entry>
+  <entry key="368">最初へ</entry>
+  <entry key="369">前へ</entry>
+  <entry key="370">次へ</entry>
+  <entry key="371">最後へ</entry>
+  <entry key="372">ユーザーが話し中(マイク権の与奪をするにはここをクリック)</entry>
+  <entry key="373">音声オン/オフ</entry>
+  <entry key="374">システム</entry>
+  <entry key="375">設定</entry>
+  <entry key="376">ユーザー:</entry>
+  <entry key="377">プロフィール編集</entry>
+  <entry key="378">新しいメッセージ:</entry>
+  <entry key="379">画像アップロード</entry>
+  <entry key="380">ユーザーのエクスポート</entry>
+  <entry key="381">すべてのユーザーをエクスポートします。</entry>
+  <entry key="382">全ユーザーエクスポート</entry>
+  <entry key="383">ユーザーを組織ごとにエクスポートします:</entry>
+  <entry key="384">組織別ユーザーのエクスポート</entry>
+  <entry key="385">ユーザーのインポート</entry>
+  <entry key="386">インポートファイル(users.xml)の選択</entry>
+  <entry key="387">インポート</entry>
+  <entry key="388">XMLファイルにエクスポート 主な用途: - プロジェクトへのコントリビュート - 他のシステムへのインポート - バックアップ - カスタマイズ languagesディレクトリにコピーして、 再インストールした後に反映されます</entry>
+  <entry key="389">インポートする言語ファイルを選択してください。 ファイル名に関わらず選択したものがインポートされます。</entry>
+  <entry key="390">インポート - ファイル選択</entry>
+  <entry key="391">名前を付けて保存</entry>
+  <entry key="392">名前:</entry>
+  <entry key="393">コメント:</entry>
+  <entry key="394">保存</entry>
+  <entry key="395">録画</entry>
+  <entry key="396">録画ファイル</entry>
+  <entry key="397">パブリック/プライベート会議室の録画ファイル</entry>
+  <entry key="398">入室者数:</entry>
+  <entry key="399">参加者数:</entry>
+  <entry key="400">会議室リスト</entry>
+  <entry key="401">会議室内のユーザー:</entry>
+  <entry key="402">更新</entry>
+  <entry key="403">この会議室は満員です。</entry>
+  <entry key="404">詳細表示</entry>
+  <entry key="405">会議室内のユーザーとチャット:</entry>
+  <entry key="406">会議室:</entry>
+  <entry key="407">会議室にいるユーザー:</entry>
+  <entry key="408">入室時刻:</entry>
+  <entry key="409">録画ファイルの再生</entry>
+  <entry key="410">長さ:</entry>
+  <entry key="411">日付:</entry>
+  <entry key="412">再生中です。画面上では何も変更できません。これは録画ファイルです。</entry>
+  <entry key="413">録画ファイルの再生</entry>
+  <entry key="414">再生 / 一時停止</entry>
+  <entry key="415">録画開始</entry>
+  <entry key="416">録画停止</entry>
+  <entry key="417">録画:</entry>
+  <entry key="418">現在、他の人が録画中です。</entry>
+  <entry key="419">録画中です。実行ユーザーは:</entry>
+  <entry key="420">キャンセル</entry>
+  <entry key="421">録画はキャンセルされ、保存されません。</entry>
+  <entry key="422">再開</entry>
+  <entry key="423">このウィンドウを閉じ、録画を再開します</entry>
+  <entry key="424">線の色</entry>
+  <entry key="425">色選択</entry>
+  <entry key="426">線の色変更の有効/無効</entry>
+  <entry key="427">塗りつぶし</entry>
+  <entry key="428">塗りつぶし色変更の有効/無効</entry>
+  <entry key="429">線の太さ</entry>
+  <entry key="430">閉じる</entry>
+  <entry key="431">フォントサイズ変更</entry>
+  <entry key="432">録画ファイルの削除</entry>
+  <entry key="433">ゲスト</entry>
+  <entry key="434">作成者:</entry>
+  <entry key="435">名前</entry>
+  <entry key="436">会議室</entry>
+  <entry key="437">日付</entry>
+  <entry key="438">キャンセル</entry>
+  <entry key="439">開始</entry>
+  <entry key="440">名前</entry>
+  <entry key="441">日付</entry>
+  <entry key="442">チャット記録の削除</entry>
+  <entry key="443">チャット</entry>
+  <entry key="444">メッセージ送信</entry>
+  <entry key="445">顔文字</entry>
+  <entry key="446">顔文字</entry>
+  <entry key="447">デバイスの選択</entry>
+  <entry key="448">音声/映像</entry>
+  <entry key="449">音声のみ</entry>
+  <entry key="450">映像のみ</entry>
+  <entry key="451">音声/映像なし(静止画像)</entry>
+  <entry key="452">このPCから音声も映像も送信されません。代わりにユーザープロフィールの画像が表示されます。 このオプションは、ネットワーク帯域に問題がある場合や、インターネット接続が著しく遅い場合に選択してください。</entry>
+  <entry key="453">月</entry>
+  <entry key="454">火</entry>
+  <entry key="455">水</entry>
+  <entry key="456">木</entry>
+  <entry key="457">金</entry>
+  <entry key="458">土</entry>
+  <entry key="459">日</entry>
+  <entry key="460">月曜</entry>
+  <entry key="461">火曜</entry>
+  <entry key="462">水曜</entry>
+  <entry key="463">木曜</entry>
+  <entry key="464">金曜</entry>
+  <entry key="465">土曜</entry>
+  <entry key="466">日曜</entry>
+  <entry key="467">週番</entry>
+  <entry key="468">週番号</entry>
+  <entry key="469">1月</entry>
+  <entry key="470">2月</entry>
+  <entry key="471">3月</entry>
+  <entry key="472">4月</entry>
+  <entry key="473">5月</entry>
+  <entry key="474">6月</entry>
+  <entry key="475">7月</entry>
+  <entry key="476">8月</entry>
+  <entry key="477">9月</entry>
+  <entry key="478">10月</entry>
+  <entry key="479">11月</entry>
+  <entry key="480">12月</entry>
+  <entry key="481">カレンダー</entry>
+  <entry key="482">定員</entry>
+  <entry key="483">レイアウト設定の表示</entry>
+  <entry key="484">横(x) | 縦(y)</entry>
+  <entry key="485">幅 | 高さ</entry>
+  <entry key="486">動画画面ブロック</entry>
+  <entry key="487">司会者ブロック</entry>
+  <entry key="488">X</entry>
+  <entry key="489">ホワイトボードブロック</entry>
+  <entry key="490">有効</entry>
+  <entry key="491">横(x) | 縦(y)</entry>
+  <entry key="492">幅 | 高さ</entry>
+  <entry key="493">チャット、ファイル、メンバーブロック</entry>
+  <entry key="494">有効</entry>
+  <entry key="495">横(x) | 縦(y)</entry>
+  <entry key="496">幅 | 高さ</entry>
+  <entry key="497">司会者は退室しましたので主催者が不在です。司会者になるか他の人が司会者になるのをお待ちください。</entry>
+  <entry key="498">この会議室には、参加者はいますが司会者がいません。司会者になるか他の人が司会者になるのをお待ちください。</entry>
+  <entry key="499">{0} フィードバック</entry>
+  <entry key="500">{0} - 会議参加依頼</entry>
+  <entry key="501">宛先ユーザー:</entry>
+  <entry key="502">メッセージ:</entry>
+  <entry key="503">会議に参加するには:</entry>
+  <entry key="504">会議室に入室するにはここをクリックしてください。</entry>
+  <entry key="505">リンクが動作しない場合、ブラウザに下記URLをコピー&amp;ペーストしてください。:</entry>
+  <entry key="506">{0} サインアップ</entry>
+  <entry key="507">あなたの情報:</entry>
+  <entry key="508">ログイン名:</entry>
+  <entry key="509">パスワード:</entry>
+  <entry key="510">メールアドレス:</entry>
+  <entry key="511">{0}-チーム</entry>
+  <entry key="512">{0} サインアップ</entry>
+  <entry key="513">{0} - パスワードリセット</entry>
+  <entry key="514">新しいパスワードを入力するにはこのリンクをクリックしてください:</entry>
+  <entry key="515">新しいパスワードを入力するにはここをクリックしてください。</entry>
+  <entry key="516">リンクが動作しない場合、ブラウザにコピー&amp;ペーストしてください。:</entry>
+  <entry key="517">{0} パスワードリセット</entry>
+  <entry key="518">正しいフォーマットで日付を入力してください。(例)24.12.2001 (日.月.年)</entry>
+  <entry key="519">正しいメールアドレスを入力してください。(例) name@mail.com</entry>
+  <entry key="520">実数を入力してください。(例) 1.00</entry>
+  <entry key="521">整数を入力してください。(例) 100</entry>
+  <entry key="522">正しい電話番号を入力してください。(例) ++81 0123 123123</entry>
+  <entry key="523">正しい時刻を入力してください。(例)12:23 (時:分)</entry>
+  <entry key="524">パスワード保護する</entry>
+  <entry key="525">パスワード</entry>
+  <entry key="526">利用期間</entry>
+  <entry key="527">エンドレス</entry>
+  <entry key="528">期間指定</entry>
+  <entry key="529">ワンタイム</entry>
+  <entry key="530">開始:</entry>
+  <entry key="531">終了:</entry>
+  <entry key="532">{0} 会議参加依頼</entry>
+  <entry key="533">この招待コードで利用可能な招待はありません。</entry>
+  <entry key="534">その招待はすでに使われています。このタイプの招待は再利用ができません。</entry>
+  <entry key="535">この招待コードは無効です。</entry>
+  <entry key="536">パスワード:</entry>
+  <entry key="537">パスワードチェック</entry>
+  <entry key="538">パスワードが間違っています。</entry>
+  <entry key="539">ブラウザ</entry>
+  <entry key="540">音声/ビデオの同期処理</entry>
+  <entry key="541">ログインには成功しましたが、セッションの取得に失敗しました。新しいセッションを取得するために再度ログインしてください。</entry>
+  <entry key="542">このセッションでは操作できません。SOAP Gatewayはアドミン権限が必要です。</entry>
+  <entry key="543">このセッションはもう有効ではありません。アプリケーションにアクセスする前にSOAP-Gatewayを呼び出したか、使っているセッションIDが正しくないようです。</entry>
+  <entry key="544">この機能はベータ版です</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x軸</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y軸</entry>
+  <entry key="549">w</entry>
+  <entry key="550">幅</entry>
+  <entry key="551">h</entry>
+  <entry key="552">高さ</entry>
+  <entry key="553">透過率変更</entry>
+  <entry key="554">ブラウザ開く</entry>
+  <entry key="555">ブラウザ閉じる</entry>
+  <entry key="556">サーバへの接続が切断されました。アプリケーションの再ロードを行うか、またはネットワーク接続を確認してください。</entry>
+  <entry key="557">ポインタ</entry>
+  <entry key="558">同期しています</entry>
+  <entry key="559">ユーザーを同期しています。しばらくお待ちください。</entry>
+  <entry key="560">&lt;u&gt;SVGとしてダウンロード&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;PNGとしてダウンロード&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;JPGとしてダウンロード&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;PDFとしてダウンロード&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;TIFとしてダウンロード&lt;/u&gt;</entry>
+  <entry key="565">リマインダ:</entry>
+  <entry key="566">カテゴリ:</entry>
+  <entry key="567">繰り返し:</entry>
+  <entry key="568">無し</entry>
+  <entry key="569">場所:</entry>
+  <entry key="570">開始</entry>
+  <entry key="571">終了</entry>
+  <entry key="572">タイトル:</entry>
+  <entry key="573">備考:</entry>
+  <entry key="574">参加者</entry>
+  <entry key="575">毎日</entry>
+  <entry key="576">毎月</entry>
+  <entry key="577">毎年</entry>
+  <entry key="578">開始時刻は終了時刻よりも前でなければなりません。</entry>
+  <entry key="579">タイトルを入力してください!</entry>
+  <entry key="580">右から左方向へ書く言語</entry>
+  <entry key="581">右から左方向へ書く言語の場合</entry>
+  <entry key="582">ダッシュボード</entry>
+  <entry key="583">録画済みのミーティング/イベントを視聴する</entry>
+  <entry key="584">ミーティング - 4名(最大16名)までの会議&lt;br/&gt;参加者全員が音声+ビデオを利用できます</entry>
+  <entry key="585">イベント - 最大200名までの会議&lt;br/&gt;司会者だけが音声/ビデオを利用できます</entry>
+  <entry key="586">ユーザー、会議室、組織を作成する&lt;br/&gt; + 構成を変更する</entry>
+  <entry key="587">この会議室に入室中のユーザー</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">ログイン</entry>
+  <entry key="590">D</entry>
+  <entry key="591">ドキュメントをロードしています。全クライアントの同期が完了するまでしばらくお待ちください。</entry>
+  <entry key="592">アップロード完了。ドキュメントを変換しています...</entry>
+  <entry key="593">アップロードを開始する</entry>
+  <entry key="594">アップロード/インポートを行います。ローカル・ディスク上のファイルを選択してください。</entry>
+  <entry key="595">キャンセル</entry>
+  <entry key="596">ファイルを選択する</entry>
+  <entry key="597">接続</entry>
+  <entry key="598">値</entry>
+  <entry key="599">ストリームID</entry>
+  <entry key="600">ログイン</entry>
+  <entry key="601">接続開始時刻</entry>
+  <entry key="602">会議室 / スコープ</entry>
+  <entry key="603">ユーザー追放</entry>
+  <entry key="604">ユーザーを追放</entry>
+  <entry key="605">本当にこのユーザーを追い出してよろしいですか?&lt;br/&gt; 追い出したとしても、ユーザーは単にこの会議室から追い出されるだけです。ユーザーは、再度ログインすることができます。</entry>
+  <entry key="606">管理者または司会者によって、セッションが切断されました。</entry>
+  <entry key="607">電話</entry>
+  <entry key="608">会議室の司会進行権限</entry>
+  <entry key="609">ホワイトボードの利用可否</entry>
+  <entry key="610">音声/ビデオを開始(再開)する、またはデバイス設定を変更する</entry>
+  <entry key="611">ホワイトボードの利用を許可する</entry>
+  <entry key="612">ホワイトボードの利用を禁止する</entry>
+  <entry key="613">ユーザー</entry>
+  <entry key="614">ファイル</entry>
+  <entry key="615">ホワイトボード</entry>
+  <entry key="616">チャット</entry>
+  <entry key="617">あなたのアカウントは複数の組織に所属しています。このセッションで使用する組織を選択してください。</entry>
+  <entry key="618">会議室は現在満室です。間を置いて再入室してください。</entry>
+  <entry key="619">会議室タイプ</entry>
+  <entry key="620">会議室</entry>
+  <entry key="621">サーバ時刻</entry>
+  <entry key="622">{0} - リマインダ</entry>
+  <entry key="623">メッセージ送信者:</entry>
+  <entry key="624">メッセージ:</entry>
+  <entry key="625">ミーティングに参加するには、このリンクをクリックしてください:</entry>
+  <entry key="626">入室するにはこのリンクをクリックしてください</entry>
+  <entry key="627">リンクが機能しない場合は、下記URLをブラウザにコピー・ペーストしてください:</entry>
+  <entry key="628">内部ユーザー検索</entry>
+  <entry key="629">外部ユーザー</entry>
+  <entry key="630">名</entry>
+  <entry key="631">姓</entry>
+  <entry key="632">メール・アドレス</entry>
+  <entry key="633">ログアウトの確認</entry>
+  <entry key="634">ログアウトしてよろしいですか?</entry>
+  <entry key="635">アクション</entry>
+  <entry key="636">デモ・ルーム</entry>
+  <entry key="637">デモ時間</entry>
+  <entry key="638">Meeting Timer</entry>
+  <entry key="639">この会議室は、デモ用です。この警告を非表示にするためには、個人使用向けにプライベート会議室を用意するか、新たにミーティング・サーバーを設置する必要があります。自動的に退室します:</entry>
+  <entry key="640">司会権保持者が仕切る</entry>
+  <entry key="641">司会者が入室するまでしばらくお待ちください。司会者は本会議室の管理者/作成者/講師になります。</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">新規画面共有</entry>
+  <entry key="644">新着の画面共有があります。送信者:</entry>
+  <entry key="645">共有を開始する</entry>
+  <entry key="646">新規ミーティングを追加する</entry>
+  <entry key="647">ミーティング・ルーム</entry>
+  <entry key="648">イベント・ルーム</entry>
+  <entry key="649">管理</entry>
+  <entry key="650">ユーザー管理</entry>
+  <entry key="651">会議室管理</entry>
+  <entry key="652">M</entry>
+  <entry key="653">このユーザーを所属組織の司会者に設定してよろしいですか?</entry>
+  <entry key="654">所属組織を指定してください。</entry>
+  <entry key="655">組織 - 司会者</entry>
+  <entry key="656">このユーザーを所属組織から除外してよろしいですか?</entry>
+  <entry key="657">このユーザーは司会者です</entry>
+  <entry key="658">このユーザーは司会者ではありません</entry>
+  <entry key="659">このユーザーを所属組織の司会者から除外してよろしいですか?</entry>
+  <entry key="660">所属組織内にユーザーまたは会議室を追加・削除する</entry>
+  <entry key="661">削除してよろしいですか?</entry>
+  <entry key="662">このユーザーをあなたの所属組織から除外してよろしいですか?この操作は、ユーザーを所属する組織から除外するだけです。このユーザーをシステムから削除するためには、管理者パネルにログインする必要があります。</entry>
+  <entry key="663">あなた自身を削除することはできません!</entry>
+  <entry key="664">管理者でなければ実行できません!</entry>
+  <entry key="665">このIDに紐付くセッションがありませんでした。</entry>
+  <entry key="666">このユーザーは管理者、または司会者アカウントです。このアカウントは、管理者パネル上でしか変更できません。</entry>
+  <entry key="667">登録を完了するためには、下記のリンクをクリックしてください。あるいは下記URLをブラウザにコピー・ペーストしてください。</entry>
+  <entry key="668">メールを確認するにはここをクリックしてください</entry>
+  <entry key="669">このハッシュは無効です</entry>
+  <entry key="670">ユーザーは既に有効化されています!</entry>
+  <entry key="671">アカウントの有効化が完了しました。</entry>
+  <entry key="672">ログインしてください</entry>
+  <entry key="673">アカウントが有効化されていません。アカウント登録時に受信したメール中のリンクをクリックしてアカウントを有効化してください。</entry>
+  <entry key="674">サインアップが完了しました。登録メールアドレスに対して確認コードを送付しましたので、メール受信箱をご確認ください。</entry>
+  <entry key="675">司会者権限を剥奪する</entry>
+  <entry key="676">司会者権限を付与する</entry>
+  <entry key="677">ユーザー</entry>
+  <entry key="678">ホワイトボード・アクセス</entry>
+  <entry key="679">司会者</entry>
+  <entry key="680">ホワイトボード使用権限、司会者権限、ビデオ共有権限を付与するユーザーを選択してください。</entry>
+  <entry key="681">このユーザーは既に司会者権限を有するため、ホワイトボード使用権限を有しています。</entry>
+  <entry key="682">自分自身から司会者権限を剥奪することはできません。</entry>
+  <entry key="683">ビデオ共有権限を付与する</entry>
+  <entry key="684">ビデオ共有権限を剥奪する</entry>
+  <entry key="685">質問があります</entry>
+  <entry key="686">ホワイトボードを使いたい</entry>
+  <entry key="687">ビデオ・音声を共有したい</entry>
+  <entry key="688">あなたは司会者です</entry>
+  <entry key="689">ホワイトボードの使用を許可されています</entry>
+  <entry key="690">ビデオ・音声の共有を許可されました</entry>
+  <entry key="691">司会者へメッセージを送信</entry>
+  <entry key="692"></entry>
+  <entry key="693">さんが、司会者(話者)権限を要求しています。ユーザー一覧のユーザー名右側にあるステータス・アイコンを使って司会者権限の与奪を行います。</entry>
+  <entry key="694">さんが、ホワイトボードの使用を要求しています。ユーザー一覧のユーザー名右側にあるステータス・アイコンを使ってホワイトボード使用権限の与奪を行います。</entry>
+  <entry key="695">さんが、ビデオ・音声の共有を要求しています。ユーザー一覧のユーザー名右側にあるステータス・アイコンを使ってビデオ共有権限の与奪を行います。</entry>
+  <entry key="696">司会者が入室するまでしばらくお待ちください。</entry>
+  <entry key="697">キャンセル</entry>
+  <entry key="698">保存</entry>
+  <entry key="699">日</entry>
+  <entry key="700">月</entry>
+  <entry key="701">年</entry>
+  <entry key="702">ファイルをアップロードする</entry>
+  <entry key="703">フォルダを追加する</entry>
+  <entry key="704">リフレッシュ</entry>
+  <entry key="705">ゴミ箱 (アイテムをここにドラッグ&amp;ドロップ)</entry>
+  <entry key="706">私のファイル (ホーム・ドライブ)</entry>
+  <entry key="707">会議室のファイル (パブリック・ドライブ)</entry>
+  <entry key="708">ファイルを追加する</entry>
+  <entry key="709">フォルダを追加する</entry>
+  <entry key="710">ファイル/フォルダを消去する</entry>
+  <entry key="711">名前を編集する</entry>
+  <entry key="712">新規フォルダ</entry>
+  <entry key="713">このアイテムを消去してよろしいですか?</entry>
+  <entry key="714">検索</entry>
+  <entry key="715">検索</entry>
+  <entry key="716">ドキュメントを開く</entry>
+  <entry key="717">全てのファイルを表示する (ツリー・ビュー)</entry>
+  <entry key="718">ドキュメントを閉じる</entry>
+  <entry key="719">ファイルを消去する</entry>
+  <entry key="720">ホワイトボードに対する書き込みが許可されていません。書き込みをするには、司会者になるか、書き込み権限を付与してもらう必要があります。司会者に権限付与を依頼してください。</entry>
+  <entry key="721">ドキュメント・プロパティ</entry>
+  <entry key="722">クライアントを開始 (外部プログラム使用)</entry>
+  <entry key="723">クライアントを開始 (HTTP)</entry>
+  <entry key="724">ユーザーがデスクトップ共有を提供しています。画面を閲覧しますか?</entry>
+  <entry key="725">現在、あなたのデスクトップは共有されています。デスクトップ共有を停止する際は、共有クライアント上の停止ボタンを押してください。</entry>
+  <entry key="726">セッション共有</entry>
+  <entry key="727">あなたのデスクトップは既に共有されています!</entry>
+  <entry key="728">デスクトップ・ビューア</entry>
+  <entry key="729">終了</entry>
+  <entry key="730">デスクトップ共有</entry>
+  <entry key="731">開始をクリックして画面を共有します</entry>
+  <entry key="732">共有を開始する</entry>
+  <entry key="733">共有を停止する</entry>
+  <entry key="734">共有する画面領域を選択してください:</entry>
+  <entry key="735">幅を変更する</entry>
+  <entry key="736">画面共有提供者がセッションを終了しました。</entry>
+  <entry key="737">高さを変更する</entry>
+  <entry key="738">X オフセット</entry>
+  <entry key="739">Y オフセット</entry>
+  <entry key="740">幅:</entry>
+  <entry key="741">高さ:</entry>
+  <entry key="742">サーバによって接続が切断されました。</entry>
+  <entry key="743">キャンセル</entry>
+  <entry key="744">外部ビューアを開始</entry>
+  <entry key="745">ビューアを完全に閉じてしまうと、本セッション中はビューアを再開することができません。</entry>
+  <entry key="746">ビューア終了確認</entry>
+  <entry key="747">画面を共有する</entry>
+  <entry key="748">録画する</entry>
+  <entry key="749">並行ブラウジング</entry>
+  <entry key="750">Windows版Firefoxでは並行ブラウジング機能をクリアに表示することができません。他のブラウザをご利用ください。</entry>
+  <entry key="751">前へ</entry>
+  <entry key="752">次へ</entry>
+  <entry key="753">リロード</entry>
+  <entry key="754">ホーム</entry>
+  <entry key="755">ロード</entry>
+  <entry key="756">このウェブサイトをあなたのデフォルト・ウェブサイトに設定する。</entry>
+  <entry key="757">設定のテスト</entry>
+  <entry key="758">入室する前に、マイクとカメラの設定を確認してください。まず録画・録音を数秒間実施してください。続いてそれを再生し、録画・録音状態が適正であることをご確認ください。</entry>
+  <entry key="759">以降このテスト画面を表示しない</entry>
+  <entry key="760">キャンセル</entry>
+  <entry key="761">会議を開始する</entry>
+  <entry key="762">以降表示しない</entry>
+  <entry key="763">録画</entry>
+  <entry key="764">再生</entry>
+  <entry key="765">音声・画像を送信する予定が無い場合はテストを省略することができます。音声・画像を利用しない参加者も、ホワイトボード、デスクトップ共有、チャットを利用することは可能です。</entry>
+  <entry key="766">停止</entry>
+  <entry key="767">レベル・メータ</entry>
+  <entry key="768">「開始」を押してください</entry>
+  <entry key="769">会議を開始する</entry>
+  <entry key="770">イベントを開始する</entry>
+  <entry key="771">会議室を選択する</entry>
+  <entry key="772">設定を確認する</entry>
+  <entry key="773">会議を開始する</entry>
+  <entry key="774">使用方法:</entry>
+  <entry key="775">録画/録音品質のテスト</entry>
+  <entry key="776">入室の際に音声/ビデオのテスト画面を表示しない</entry>
+  <entry key="777">パブリック会議室</entry>
+  <entry key="778">パブリック会議室はだれでもアクセスすることができます。</entry>
+  <entry key="779">プライベート会議室</entry>
+  <entry key="780">プライベート会議室は、同じ組織に所属する参加者のみ入室することができます。</entry>
+  <entry key="781">私の会議室</entry>
+  <entry key="782">このセクションの会議室は個人使用(または少人数使用)目的です。開始・終了時刻を指定して作成します。会議室が有効である期間、カレンダーに表示されます。</entry>
+  <entry key="783">司会者以外の方は実行できません。</entry>
+  <entry key="784">司会者権限を許可</entry>
+  <entry key="785">ホワイトボードへのアクセスを許可</entry>
+  <entry key="786">カメラ・マイクへのアクセスを許可</entry>
+  <entry key="787">このセッションは既に使用済です</entry>
+  <entry key="788">開始</entry>
+  <entry key="789">終了</entry>
+  <entry key="790">終了してよろしいですか? 終了しても、アップロード済みのドキュメント、ホワイトボード、チャット内容は消去されずに残ることにご注意ください。</entry>
+  <entry key="791">終了確認</entry>
+  <entry key="792">会議室</entry>
+  <entry key="793">会議室を選択してください。</entry>
+  <entry key="794">未保存のイベントがあります。保存するか、削除してください。</entry>
+  <entry key="795">最低一人以上の参加者を選択してください!</entry>
+  <entry key="796">このイベントを削除してよろしいですか?</entry>
+  <entry key="797">警告</entry>
+  <entry key="798">イベントを追加する</entry>
+  <entry key="799">日表示</entry>
+  <entry key="800">週表示</entry>
+  <entry key="801">月表示</entry>
+  <entry key="802">概要</entry>
+  <entry key="803">参加者</entry>
+  <entry key="804">{0} (オープン・ミーティングス) ウェブ会議プラットホーム</entry>
+  <entry key="805">会議を予約する</entry>
+  <entry key="806">イベントをカレンダーに追加して会議を設定します。イベントのそれぞれについて会議室が自動生成されます。</entry>
+  <entry key="807">お困りですか?</entry>
+  <entry key="808">大人数向け会議室</entry>
+  <entry key="809">検索</entry>
+  <entry key="810">追加</entry>
+  <entry key="811">ユーザーが選択されていません。一覧から選択して「追加」を押してください。</entry>
+  <entry key="812">参加者を追加</entry>
+  <entry key="813">保存</entry>
+  <entry key="814">削除</entry>
+  <entry key="815">イベント詳細</entry>
+  <entry key="816">デフォルト司会者</entry>
+  <entry key="817">特権</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">姓名</entry>
+  <entry key="820">Eメール</entry>
+  <entry key="821">デフォルト司会者を追加</entry>
+  <entry key="822">は特権司会者です</entry>
+  <entry key="823">この項目が選択されている場合、司会進行権保持者(または管理者)は入室によって自動的に司会者権限を与えられます。会議の際、特定のユーザーを司会者に指定したい場合は、この項目を選択しないでください。</entry>
+  <entry key="824">特別司会進行権保持者は、入室によって自動的に司会者権限を与えられます(他のユーザーがこのユーザーから司会者権限を奪い取ることはできません)。</entry>
+  <entry key="825">このユーザーに特別司会進行権を付与する</entry>
+  <entry key="826">このユーザーの特別司会進行権を剥奪する</entry>
+  <entry key="827">D</entry>
+  <entry key="828">組織を会議室に登録すると、登録された組織に所属するユーザーのみがその会議室に入室することができます。(「公開」が選択されていない場合(つまり非公開の場合)のみ適用)</entry>
+  <entry key="829">司会進行</entry>
+  <entry key="830">制限</entry>
+  <entry key="831">組織</entry>
+  <entry key="832">よろしいですか?</entry>
+  <entry key="833">選択された項目を削除してよろしいですか?変更した内容は、保存する必要があります。続いて保存ボタンを押してください。</entry>
+  <entry key="834">ユーザーが選択されていません。追加するユーザーを選択してください。</entry>
+  <entry key="835">司会者を追加する</entry>
+  <entry key="836">このユーザーに特別司会進行権を付与しますか?特別司会進行権保持者は、会議室の司会者になることができます(他のユーザーは特別司会進行権保持者から司会権限を奪い取ることはできません)。変更した内容は、保存する必要があります。続いて保存ボタンを押してください。</entry>
+  <entry key="837">このユーザーの特別司会進行権を剥奪しますか?変更した内容は、保存する必要があります。続いて保存ボタンを押してください。</entry>
+  <entry key="838">この参加者は、特別司会進行権を付与されています。あなたは、特別司会進行権保持者から当該権利を剥奪することはできません。</entry>
+  <entry key="839">このファイル/フォルダを削除してよろしいですか?</entry>
+  <entry key="840">ファイル/フォルダを削除しますか?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">プロパティ</entry>
+  <entry key="844">ビューア上でマウス・ポインタを表示する</entry>
+  <entry key="845">SIPアプレットと音声を共有する</entry>
+  <entry key="846">SIPと音声を、Flashと画像を共有する</entry>
+  <entry key="847">画面サイズに合わせる</entry>
+  <entry key="848">デスクトップを表示する</entry>
+  <entry key="849">ユーザー「</entry>
+  <entry key="850">」さんがデスクトップ共有を要求してます。表示しますか?</entry>
+  <entry key="851">閉じる</entry>
+  <entry key="852">ズーム</entry>
+  <entry key="853">画面が共有ユーザーによって閉じられました!</entry>
+  <entry key="854">一時停止</entry>
+  <entry key="855">新規画面共有</entry>
+  <entry key="856">最小化</entry>
+  <entry key="857">最大化</entry>
+  <entry key="858">ビデオ</entry>
+  <entry key="859">タイムライン</entry>
+  <entry key="860">私の録画</entry>
+  <entry key="861">パブリック録画</entry>
+  <entry key="862">備考</entry>
+  <entry key="863">名称</entry>
+  <entry key="864">全長</entry>
+  <entry key="865">日時</entry>
+  <entry key="866">作成者</entry>
+  <entry key="867">再生</entry>
+  <entry key="868">メイン - ビデオ</entry>
+  <entry key="869">録画</entry>
+  <entry key="870">デスクトップの共有だけでなく録画もできます。デスクトップを公開するためには「共有を開始する」ボタンを押してください。録画をするためには「録画を開始する」をクリックしてください。</entry>
+  <entry key="871">録画を開始する</entry>
+  <entry key="872">録画を停止する</entry>
+  <entry key="873">FLV形式でダウンロードする</entry>
+  <entry key="874">会議室</entry>
+  <entry key="875">再生</entry>
+  <entry key="876">停止</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">共有を停止する</entry>
+  <entry key="879">質疑を許可する</entry>
+  <entry key="880">質疑を許可すると、「質問があります」ボタンが表示されます。</entry>
+  <entry key="881">権限</entry>
+  <entry key="882">AVI形式でダウンロードする</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw スクリーン・ビデオ</entry>
+  <entry key="886">音声のみ</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">録画視聴の準備がまだ整っていません。数分後に再実行してください。</entry>
+  <entry key="889">ログ:</entry>
+  <entry key="890">作成者メッセージ</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIPアプレットの準備が完了していません。</entry>
+  <entry key="893">SIP アカウント設定</entry>
+  <entry key="894">ユーザー毎にSIPを設定します。</entry>
+  <entry key="895">SIP ユーザー</entry>
+  <entry key="896">Sip パスワード</entry>
+  <entry key="897">Sip 認証ID</entry>
+  <entry key="898">SIPゲートウェイにログインできませんでした。SIPプロバイダの認証情報、および各ユーザーのSIPアカウント情報を確認してください。管理者でログインして、構成を確認してください。(一般ユーザーはブロックされます)</entry>
+  <entry key="899">SIPゲートウェイにログインできませんでした。サービス管理者にお問い合わせください。</entry>
+  <entry key="900">SIPゲートウェイにログインしています ...</entry>
+  <entry key="901">SIPゲートウェイにログインしています ...</entry>
+  <entry key="902">ログを表示する</entry>
+  <entry key="903">録画終了時の変換処理のログ</entry>
+  <entry key="904">SIP-アプレット・メッセージ</entry>
+  <entry key="905">SIPアプレットの準備が完了していません。アプレットを承認してOKボタンを押してください。</entry>
+  <entry key="906">司会者になる</entry>
+  <entry key="907">予定の変更を保存する</entry>
+  <entry key="908">予定が変更されました。変更を保存しますか?</entry>
+  <entry key="909">他の録画を見るためには、{0}にログインする必要があります。</entry>
+  <entry key="910">ビデオ表示するユーザーを選択</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">あなたはこのインタビューの司会者です。あなたは、話者を選択したり、録画・録音の開始・停止をすることができます。</entry>
+  <entry key="913">録画・録音を開始</entry>
+  <entry key="914">録画・録音を停止</entry>
+  <entry key="915">インタビュー録画は既に開始されています。</entry>
+  <entry key="916">インタビュー録画は既に停止しているか、まだ開始されていません。</entry>
+  <entry key="917">インタビュー録画は既に開始されています。!</entry>
+  <entry key="918">キャンセル</entry>
+  <entry key="919">インタビュー終了時の変換処理には、インタビュー1分あたり5分を要します。現在の処理の進捗は:</entry>
+  <entry key="920">SIPデータを生成するためには、パスワードを再入力してください</entry>
+  <entry key="921">SIPデータを再生成する</entry>
+  <entry key="922">このファイル/フォルダを、それ自身のサブフォルダに移動することはできません。</entry>
+  <entry key="923">ホーム・ドライブ使用量</entry>
+  <entry key="924">パブリック・ドライブ使用量</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">各ユーザーにライセンスを付与する際、使用期限を設定するか、最大使用量制限(分で指定)を設定することができます。</entry>
+  <entry key="927">ライセンスを検証する</entry>
+  <entry key="928">使い放題コース</entry>
+  <entry key="929">有効期限</entry>
+  <entry key="930">残り秒数</entry>
+  <entry key="931">合計時間</entry>
+  <entry key="932">ライセンスの有効期限が切れました。新たにライセンスを購入してください。(分単位ライセンス、または「使い放題コース」ライセンスがあります)</entry>
+  <entry key="933">購入する</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">ユーザー・ライセンス情報</entry>
+  <entry key="936">情報</entry>
+  <entry key="937">閉じる</entry>
+  <entry key="938">ライセンスの有効期限が切れました。新たにライセンスを購入してください。(分単位ライセンス、または「使い放題コース」ライセンスがあります)</entry>
+  <entry key="939">ライセンス設定</entry>
+  <entry key="940">分単位でウェブ会議の利用権を購入することが出来ます。&lt;br/&gt;&lt;br/&gt; または、3~12ヶ月の定額利用権を購入することが出来ます。&lt;br/&gt;&lt;br/&gt;招待状(会議室に直接入室可能なリンク)の送付、および外部の参加者をともなう、カレンダーからの会議室作成機能は、定額利用権でのみ提供されます。</entry>
+  <entry key="941">60分利用権 9.99€(分当り16セント)を購入</entry>
+  <entry key="942">5時間利用権 19.99€(分当り6セント)を購入</entry>
+  <entry key="943">3ヶ月利用権 29.99€(月当り9.99セント)を購入</entry>
+  <entry key="944">6ヶ月利用権 39.99€(月当り6.66セント)を購入</entry>
+  <entry key="945">分単位利用権</entry>
+  <entry key="946">定額利用権</entry>
+  <entry key="947">無制限ライセンス</entry>
+  <entry key="948">ライセンス有効期限:</entry>
+  <entry key="949">分単位利用権を購入済みです。残り:</entry>
+  <entry key="950">新しいライセンスを購入してください。</entry>
+  <entry key="951">専用ミーティング・サーバーをお考えですか?</entry>
+  <entry key="952">{0}のインストール、あるいはMoodle/SugraCRM、ウェブサイトやイントラネットとの統合をお考えなら、Prizingsへご相談を!インストール当り500ユーロから承ります。</entry>
+  <entry key="953">メッセージを送信</entry>
+  <entry key="954">返信先:</entry>
+  <entry key="955">メッセージ:</entry>
+  <entry key="956">送信</entry>
+  <entry key="957">Prizings コンタクト先はこちら。</entry>
+  <entry key="958">クレジットカード詳細</entry>
+  <entry key="959">名</entry>
+  <entry key="960">姓</entry>
+  <entry key="961">クレジットカードタイプ</entry>
+  <entry key="962">VISAカード</entry>
+  <entry key="963">マスターカード</entry>
+  <entry key="964">ディスカバーカード</entry>
+  <entry key="965">アメリカン・エクスプレス</entry>
+  <entry key="966">クレジットカード番号</entry>
+  <entry key="967">有効期限</entry>
+  <entry key="968">カード確認番号</entry>
+  <entry key="969">請求先</entry>
+  <entry key="970">住所</entry>
+  <entry key="971"></entry>
+  <entry key="972">市区町村</entry>
+  <entry key="973">国</entry>
+  <entry key="974">州 (米国のみ)</entry>
+  <entry key="975">郵便番号</entry>
+  <entry key="976">数量</entry>
+  <entry key="977">送信</entry>
+  <entry key="978">ステップ1: {0} - 支払いフォーム</entry>
+  <entry key="979">Eメール</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">送信して購入</entry>
+  <entry key="983">クリックして購入</entry>
+  <entry key="984">ステップ3:{0} 支払い - 内容をご確認ください</entry>
+  <entry key="985">お名前</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">{0}のご利用ありがとうございました!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">分</entry>
+  <entry key="994">月</entry>
+  <entry key="995">ユーロ</entry>
+  <entry key="996">状態</entry>
+  <entry key="997">納品書</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">このメール・アドレスは既に他のユーザーに使用されています。</entry>
+  <entry key="1001">SIP設定</entry>
+  <entry key="1002">会議番号、およびPINは、OpenXG RPCゲートウェイ経由で自動生成されます。</entry>
+  <entry key="1003">SIP番号</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">現在表示中のスライド内のオブジェクトだけを消去!</entry>
+  <entry key="1006">ステータス・バーに入力されたURLのみが参加者に送付されます!</entry>
+  <entry key="1007">チーム・ルームの作成 [Breakout session]</entry>
+  <entry key="1008">作成するチーム・ルームに所属させるユーザーを選択してください。</entry>
+  <entry key="1009">メンバーを指定して、新しい小会議室 (チーム・ルーム) に移動することができます。指定されたメンバーは、強制的にチーム・ルームに移動させられるか、あるいは、通知メッセージが送信されます。また、チーム・ルーム室長(管理者)には、加えて、管理下のチーム・ルーム一覧が表示され、室長は必要に応じて各チーム・ルームの応援に駆けつけることができます。</entry>
+  <entry key="1010">ユーザー名</entry>
+  <entry key="1011">ログイン</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">ユーザー一覧 チーム・ルーム:</entry>
+  <entry key="1014">チーム・ルームを作成する</entry>
+  <entry key="1015">キャンセル</entry>
+  <entry key="1016">最低ひとり以上のユーザーをチームに登録する必要があります。</entry>
+  <entry key="1017">ユーザーをチームに追加する</entry>
+  <entry key="1018">ユーザーをチームから削除する</entry>
+  <entry key="1019">ユーザーは、チーム・ルーム室長です。(室長は、チーム・ルームの管理者です。メンバーはいつでも室長をチーム・ルームに呼び出すことができます)</entry>
+  <entry key="1020">ルーム・タイプ</entry>
+  <entry key="1021">「メンバーを新規チーム・ルームに強制移動する」を選択した場合、選択されたメンバーはチーム・ルームに自動的に移動します。強制移動を選択しなかった場合、各メンバーには通知メッセージが送付されます。通知メッセージには、チーム・ルームに&lt;i&gt;移動することができる&lt;i&gt;ボタンがあり、それを押すことによってチーム・ルームに移動することができます。</entry>
+  <entry key="1022">チーム・ルーム管理</entry>
+  <entry key="1023">あなたは、あなたが管理するチーム・ルーム(あなたが室長のチーム・ルーム)の間を自由に行き来できます。管理下のチーム・メンバーは、あなたにいつでも応援要請メッセージを送信することができます。また、あなたは管理するチーム・ルームをいつでも閉鎖することもできます。</entry>
+  <entry key="1024">メンバーを新規チーム・ルームに強制移動する</entry>
+  <entry key="1025">チーム名</entry>
+  <entry key="1026">作成日時</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">追加するメンバー</entry>
+  <entry key="1030">メンバーを追加するには「+」を、削除するには「-」を押してください!</entry>
+  <entry key="1031">1) チーム・ルームの設定</entry>
+  <entry key="1032">2) チーム・メンバーの追加</entry>
+  <entry key="1033">チーム・ルーム名</entry>
+  <entry key="1034">チーム・ルーム</entry>
+  <entry key="1035">会議室変更</entry>
+  <entry key="1036">このチーム・ルームに移動する</entry>
+  <entry key="1037">チーム・ルームを終了し、全メンバーをログアウトさせる</entry>
+  <entry key="1038">新規チーム・ルーム</entry>
+  <entry key="1039">新規チーム・ルームがあります。</entry>
+  <entry key="1040">チーム・ルームに移動</entry>
+  <entry key="1041">チーム・ルーム・アクション</entry>
+  <entry key="1042">再度このウィンドウを開く場合は、「アクション」から行ってください。</entry>
+  <entry key="1043">チーム・ルーム室長にメッセージを送信する</entry>
+  <entry key="1044">新規チーム・ルーム</entry>
+  <entry key="1045">新規チーム・ルームがあります。あなたは、そのチーム・ルームに入室することができます。チーム・ルームは、言わば「ワークショップ・グループ」のようなものです。あなたのチーム・ルームには、「私の会議室」からも入室できます。</entry>
+  <entry key="1046">チーム・ルームに移動</entry>
+  <entry key="1047">作成者:</entry>
+  <entry key="1048">チーム・ルーム名:</entry>
+  <entry key="1049">このウィンドウは、あなたの退室後も開いたままになります!</entry>
+  <entry key="1050">チーム・ルームのメンバー</entry>
+  <entry key="1051">3) あなたが移動することができる、チーム・ルーム</entry>
+  <entry key="1052">チーム・ルーム室長にメッセージを送信します。例えば、討論中の件で何か質問したいことができ、室長に応援を依頼したいときなど。</entry>
+  <entry key="1053">送信</entry>
+  <entry key="1054">2) このチーム・ルームに参加要請したメンバー</entry>
+  <entry key="1055">さんは、チーム・ルーム室長です。</entry>
+  <entry key="1056">参加要請したメンバー全員が揃いました。</entry>
+  <entry key="1057">チーム・ルーム室長がいません!</entry>
+  <entry key="1058">メッセージを入力してください。</entry>
+  <entry key="1059">私たちのチームが問題を抱えているので、応援をお願いします!</entry>
+  <entry key="1060">チームが、あなたの応援を要請しています。</entry>
+  <entry key="1061">チーム・ルームから応援要請</entry>
+  <entry key="1062">メッセージ:</entry>
+  <entry key="1063">送信者:</entry>
+  <entry key="1064">あなたは現在、どのチーム・ルームにも入室していませんが、過去に入室したことのあるチーム・ルームに入室することができます。</entry>
+  <entry key="1065">システムをバックアップします。バックアップには、ユーザーが生成した、あらゆるデータが含まれます。サーバ設定、および各言語ラベルはバックアップされません。システムをより新しいバージョンにアップデートする場合は、&lt;br&gt;(1)まずバックアップ・ファイルにエクスポートし、&lt;br&gt;(2)新規に作成したデータベース上にアプリケーションを再インストールし、&lt;br&gt;(3)バックアップ・ファイルをインポート、してください。バックアップ・ファイルのインポートは、新システム上で最初に行う必要があります。</entry>
+  <entry key="1066">システム・バックアップ</entry>
+  <entry key="1067">ユーザーに対し画面共有/録画を許可する</entry>
+  <entry key="1068">ユーザーに対し画面共有/録画を拒否する</entry>
+  <entry key="1069">このユーザーは司会者であるため全ての権限を与えられています!</entry>
+  <entry key="1070">さんが画面の共有/録画を要求しています。</entry>
+  <entry key="1071">あなたは画面の共有/録画をする権限を与えられています</entry>
+  <entry key="1072">画面の共有/録画を行う権限を適用する。</entry>
+  <entry key="1073">画面/録画の共有を行うことを許可/拒否する</entry>
+  <entry key="1074">サウンドをオフ</entry>
+  <entry key="1075">サウンドをオン</entry>
+  <entry key="1076">音声のみの会議室</entry>
+  <entry key="1077">このフラッグをオンにすると、ユーザーは会議室で音声のみ使用できるようになります(ビデオ無し)。これにより、ネットワーク帯域を節約することができます。</entry>
+  <entry key="1078">リモート制御を許可 (デスクトップ共有中)</entry>
+  <entry key="1079">リモート制御を拒否 (デスクトップ共有中)</entry>
+  <entry key="1080">リモート制御権限を適用する (デスクトップ共有中)</entry>
+  <entry key="1081">あなたは、リモート画面の制御を許可されています(デスクトップ共有時)</entry>
+  <entry key="1082">さんがリモート画面の制御権限を要求しています。</entry>
+  <entry key="1083">ユーザーは司会者です。司会者はすべてのアクションを行うことができます! [リモート・デスクトップ制御]</entry>
+  <entry key="1084">デスクトップ共有中のリモート・コントロールを許可/拒否する</entry>
+  <entry key="1085">1) あなたのPCからリモートPCへ: あなたのPCのクリップボードからリモートPC画面にテキストをコピーするには、画面をクリックし続いてテキスト上で右クリックしてメニューを表示して「挿入」を選択します。&lt;br/&gt;&lt;br/&gt;2) リモートPCからあなたのPCへ: リモートPCからあなたのPCのクリップボードにテキストをコピーするには、リモート画面上のテキスト上でテキストをハイライト選択し、リモート画面上で右クリックしてメニューを表示し「&lt;i&gt;ハイライトされたテキストをコピー&amp;lt;/i&gt;」を選択します。</entry>
+  <entry key="1086">あなたのPCとリモートPCの間で相互にテキストのコピー&amp;ペーストを行うには</entry>
+  <entry key="1087">ハイライトされたテキストをコピー</entry>
+  <entry key="1088">コピー&amp;ペースト手順</entry>
+  <entry key="1089">画面共有の品質:</entry>
+  <entry key="1090">超高品質</entry>
+  <entry key="1091">高品質</entry>
+  <entry key="1092">中品質</entry>
+  <entry key="1093">低品質</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">キーボード:</entry>
+  <entry key="1097">ウェビナーを閉じる</entry>
+  <entry key="1098">ウェビナーは既に終了しています。</entry>
+  <entry key="1099">会議室を閉鎖する</entry>
+  <entry key="1100">終了URL</entry>
+  <entry key="1101">閉鎖設定</entry>
+  <entry key="1102">会議室を閉鎖すると、ユーザーは終了URLにリダイレクトされます。</entry>
+  <entry key="1103">LDAP</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">識別名</entry>
+  <entry key="1106">設定ファイル</entry>
+  <entry key="1107">LDAP設定</entry>
+  <entry key="1108">識別名</entry>
+  <entry key="1109">有効化</entry>
+  <entry key="1110">登録日時</entry>
+  <entry key="1111">登録者</entry>
+  <entry key="1112">更新日時</entry>
+  <entry key="1113">更新者</entry>
+  <entry key="1114">設定ファイルは、フォルダ 'webapps/openmeetings/conf' に置かれている必要があります。前もって手動アップロードしておいてください。設定ファイルに対する変更は逐次オンライン反映されます。</entry>
+  <entry key="1115">設定ファイル名</entry>
+  <entry key="1116">「ドメインをユーザー名に付加する」を選択すると、指定したドメインが、ログイン画面で指定したログイン名に自動的に付加されます。もしLDAPに、ドメイン名付きのログイン名が保存されている場合に利用してください。例: ログイン名「hans」、ドメイン名「localhost.com」の場合、「hans@localhost.com」でLDAP認証を行います。</entry>
+  <entry key="1117">ドメインをユーザー名に付加する</entry>
+  <entry key="1118">ドメイン</entry>
+  <entry key="1119">挿入</entry>
+  <entry key="1120">ハイライトされたテキストをコピー</entry>
+  <entry key="1121">リモートPCのクリップボード・テキスト</entry>
+  <entry key="1122">リモートPCのクリップボードを表示する</entry>
+  <entry key="1123">次回は表示しない</entry>
+  <entry key="1124">テキストをここにコピーする ...</entry>
+  <entry key="1125">リモート画面との間でコピー&amp;ペーストするためには、リモート制御(またはモデーレーション)権限が必要です。</entry>
+  <entry key="1126">デフォルト設定を編集する ...</entry>
+  <entry key="1127">リモート・コントロールでコピー&amp;ペーストについての情報ボックスを表示しない</entry>
+  <entry key="1128">保存</entry>
+  <entry key="1129">削除</entry>
+  <entry key="1130">キャンセル</entry>
+  <entry key="1131">ユーザーを会議室に招待する</entry>
+  <entry key="1132">会議室を選択してください。参加依頼を受けるユーザーには、あなたの名前、メッセージとともに会議室へのリンクが発行されます。</entry>
+  <entry key="1133">ログイン日時:</entry>
+  <entry key="1134">参加依頼の送信後に入室する</entry>
+  <entry key="1135">参加を依頼する</entry>
+  <entry key="1136">メッセージ</entry>
+  <entry key="1137">会議への参加を依頼されています。依頼者=</entry>
+  <entry key="1138">参加依頼メッセージ</entry>
+  <entry key="1139">参加依頼を送信する</entry>
+  <entry key="1140">さんは、あなたからの参加依頼をdid &lt;b&gt;拒否&lt;/b&gt;しました!</entry>
+  <entry key="1141">承認</entry>
+  <entry key="1142">拒否</entry>
+  <entry key="1143">タイムゾーン</entry>
+  <entry key="1144">イベント詳細</entry>
+  <entry key="1145">名称</entry>
+  <entry key="1146">概要</entry>
+  <entry key="1147">作成者</entry>
+  <entry key="1148">タイムゾーン設定を勧奨</entry>
+  <entry key="1149">次回ログイン時にタイムゾーン設定を行うことを進めるメッセージを表示する場合にチェックを入れてください。</entry>
+  <entry key="1150">ユーザー・プロフィールのタイムゾーン設定を確認してください。</entry>
+  <entry key="1151">{0}会議が設定されました:</entry>
+  <entry key="1152">詳細:</entry>
+  <entry key="1153">開始時刻:</entry>
+  <entry key="1154">終了時刻:</entry>
+  <entry key="1155">{0}会議が更新されました:</entry>
+  <entry key="1156">主催者:</entry>
+  <entry key="1157">{0}会議がキャンセルされました:</entry>
+  <entry key="1158">{0}会議リマインダ:</entry>
+  <entry key="1159">コミュニティ設定</entry>
+  <entry key="1160">コンタクト・データを全員に公開する</entry>
+  <entry key="1161">あなたのお勧めや、興味あるものを指定します。これらはパートナーを検索する際に利用されます。複数項目を指定する場合は、各項目をコンマで区切って指定してください。(例: 医療サービス, 健康保険, ...)</entry>
+  <entry key="1162">私のお勧め</entry>
+  <entry key="1163">私の関心</entry>
+  <entry key="1164">姓名</entry>
+  <entry key="1165">タイムゾーン</entry>
+  <entry key="1166">興味・関心</entry>
+  <entry key="1167">コンタクト情報</entry>
+  <entry key="1168">コンタクト・データをコンタクトにのみ公開する</entry>
+  <entry key="1169">コンタクト・データを非公開にする</entry>
+  <entry key="1170">プロフィール</entry>
+  <entry key="1171">設定</entry>
+  <entry key="1172">ユーザー検索</entry>
+  <entry key="1173">他のユーザーが見るのと同じ表示形態であなたのプロフィールを表示します</entry>
+  <entry key="1174">プロフィールを設定します。関心事項を設定して他のユーザーが検索できるようにできます</entry>
+  <entry key="1175">ユーザーを検索して、あなたのネットワークを広げましょう</entry>
+  <entry key="1176">検索</entry>
+  <entry key="1177">お勧め</entry>
+  <entry key="1178">ユーザー名</entry>
+  <entry key="1179">検索テキスト</entry>
+  <entry key="1180">姓名</entry>
+  <entry key="1181">タイムゾーン</entry>
+  <entry key="1182">お勧め</entry>
+  <entry key="1183">関心</entry>
+  <entry key="1184">検索結果</entry>
+  <entry key="1185">アクション</entry>
+  <entry key="1186">コンタクトを追加する</entry>
+  <entry key="1187">メッセージを送信する</entry>
+  <entry key="1188">コンタクトとメッセージ</entry>
+  <entry key="1189">承認待ちコンタクト</entry>
+  <entry key="1190">承認</entry>
+  <entry key="1191">拒否</entry>
+  <entry key="1192">こちらは{0}です。</entry>
+  <entry key="1193">さんが、あたなをコンタクトに加えることを希望しています。</entry>
+  <entry key="1194">{0}のコンタクト要求を確認するか、承認/拒否のリンクのいずれかをクリックしてください。</entry>
+  <entry key="1195">このユーザーは既にコンタクト・リストに登録済みか、未回答のコンタクト追加要請メッセージを受信済みです。</entry>
+  <entry key="1196">コンタクト・リスト</entry>
+  <entry key="1197">コンタクトとメッセージを編集したり,&lt;br/&gt; 承認待ちコンタクトの処理を行います</entry>
+  <entry key="1198">さんが、あなたをコンタクトとして承認しました!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">チャット・ログを表示/コピーする</entry>
+  <entry key="1201">チャット・ログ</entry>
+  <entry key="1202">送信者</entry>
+  <entry key="1203">件名</entry>
+  <entry key="1204">送信</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">メッセージ</entry>
+  <entry key="1207">新規メール</entry>
+  <entry key="1208">コンタクトに送信するメッセージを新規に作成します</entry>
+  <entry key="1209">新規メッセージ</entry>
+  <entry key="1210">宛先:</entry>
+  <entry key="1211">件名:</entry>
+  <entry key="1212">各ユーザーの画面解像度に合うようにホワイトボードとドキュメントのサイズを変更する。</entry>
+  <entry key="1213">ユーザーを追い出す</entry>
+  <entry key="1214">あなた自身を会議室から追い出すことはできません! 退出する場合は、終了ボタンをクリックするかブラウザを閉じてください!</entry>
+  <entry key="1215">このユーザーを会議室から切断してよろしいですか?</entry>
+  <entry key="1216">アクションの確認 ...</entry>
+  <entry key="1217">特権司会者を会議室から追い出すことはできません!</entry>
+  <entry key="1218">会議室を予約する</entry>
+  <entry key="1219">開始</entry>
+  <entry key="1220">終了</entry>
+  <entry key="1221">ミーティングをスケジュールします。全てのミーティング参加予定者のカレンダーにイベントが追加されます。</entry>
+  <entry key="1222">受信箱</entry>
+  <entry key="1223">送信</entry>
+  <entry key="1224">ゴミ箱</entry>
+  <entry key="1225">あなた自身をコンタクトに加えることはできません。</entry>
+  <entry key="1226">ユーザーは既に拒否されています!</entry>
+  <entry key="1227">ユーザーは既に承認されています!</entry>
+  <entry key="1228">コンタクト・ハッシュが不正です!</entry>
+  <entry key="1229">コンタクト・リストに追加されました!</entry>
+  <entry key="1230">ユーザーは拒否されました。承認待ちリストからも削除されました。</entry>
+  <entry key="1231">該当するコンタクトがありません!</entry>
+  <entry key="1232">コンタクトを削除してよろしいですか?</entry>
+  <entry key="1233">コンタクト削除の確認</entry>
+  <entry key="1234">コンタクトを一覧から削除する</entry>
+  <entry key="1235">ユーザー・プロフィール</entry>
+  <entry key="1236">ユーザー・プロフィールを表示する</entry>
+  <entry key="1237">メッセージ</entry>
+  <entry key="1238">検索</entry>
+  <entry key="1239">全てを選択</entry>
+  <entry key="1240">選択を解除</entry>
+  <entry key="1241">未読を選択</entry>
+  <entry key="1242">既読を選択</entry>
+  <entry key="1243">フォルダに移動 ...</entry>
+  <entry key="1244">新規フォルダを追加 ...</entry>
+  <entry key="1245">削除</entry>
+  <entry key="1246">削除したメールは、ゴミ箱の中にまだ残されています!</entry>
+  <entry key="1247">未読にする</entry>
+  <entry key="1248">既読にする</entry>
+  <entry key="1249">回答</entry>
+  <entry key="1250">全員に回答</entry>
+  <entry key="1251">フォワード</entry>
+  <entry key="1252">アクション ...</entry>
+  <entry key="1253">プライベート・メッセージを送信する</entry>
+  <entry key="1254">選択がありません</entry>
+  <entry key="1255">受信箱に移動する</entry>
+  <entry key="1256">削除する (最終)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">新規フォルダ</entry>
+  <entry key="1259">フォルダを追加してメッセージを整理します</entry>
+  <entry key="1260">新規フォルダ</entry>
+  <entry key="1261">追加</entry>
+  <entry key="1262">フォルダを削除する</entry>
+  <entry key="1263">フォルダを削除できません。フォルダ内にメッセージが存在します! あらかじめメッセージを削除するか、他のフォルダに移動してください。</entry>
+  <entry key="1264">姓名を編集する</entry>
+  <entry key="1265">フォルダを削除してよろしいですか? 削除されたフォルダは復元できないことにご注意ください。</entry>
+  <entry key="1266">承認依頼が送信されました。承認されたユーザーのみがコンタクト・リストに追加されます。</entry>
+  <entry key="1267">メッセージ</entry>
+  <entry key="1268">ユーザーは個人コンタクト・データを共有していません。</entry>
+  <entry key="1269">ユーザーは個人コンタクト・データをコンタクトとのみ共有しています。</entry>
+  <entry key="1270">住所 &amp; 電話番号</entry>
+  <entry key="1271">参加依頼コードが無効です。参加依頼コードは一定期間のみ有効です。</entry>
+  <entry key="1272">このイベントは他のユーザーのカレンダーにリンクしています。イベントを更新すると、他のユーザーのカレンダーにも更新が反映されます。イベントを更新してよろしいですか?</entry>
+  <entry key="1273">更新の確認</entry>
+  <entry key="1274">コンタクトに私のカレンダーを公開する (書き込みはできません)</entry>
+  <entry key="1275">カレンダーを共有しない</entry>
+  <entry key="1276">コンタクトのカレンダー</entry>
+  <entry key="1277">コンタクトのカレンダーを見るためには、コンタクトの承認が必要です。</entry>
+  <entry key="1278">他のユーザーのカレンダーからイベントを削除/保存することはできません!</entry>
+  <entry key="1279">カレンダーを再表示する!</entry>
+  <entry key="1280">このイベントは他のユーザーのカレンダーにリンクしています。イベントを削除すると、他のユーザーのカレンダーからも削除されます。イベントを削除してよろしいですか?</entry>
+  <entry key="1281">アクションの確認</entry>
+  <entry key="1282">入室</entry>
+  <entry key="1283">会議室にアクセスする</entry>
+  <entry key="1284">プライベート・メッセージ付き会議室/イベントがあります。</entry>
+  <entry key="1285">あらかじめイベントを保存してください!</entry>
+  <entry key="1286">指定された会議室が見つかりません。イベントおよび会議室は既に削除されています!</entry>
+  <entry key="1287">ニックネームを選択してください</entry>
+  <entry key="1288">名</entry>
+  <entry key="1289">姓</entry>
+  <entry key="1290">Eメール</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">姓・名ともに4文字以上の長さが必要です。</entry>
+  <entry key="1293">Eメール・アドレスが無効です!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Facebookアカウントでログインする</entry>
+  <entry key="1296">登録日</entry>
+  <entry key="1297">Facebookアカウントでログインしました。プロフィールに適切なEメール・アドレスを設定してください。さもないと、参加依頼やプライベート・メッセージを受信することができません。</entry>
+  <entry key="1298">メッセージ</entry>
+  <entry key="1299">プロフィール更新についてのメッセージを今後表示しない</entry>
+  <entry key="1300">詳細表示オプション ...</entry>
+  <entry key="1301">新規プライベート・メッセージ:</entry>
+  <entry key="1302">メッセージ全体を見るにはここをクリックしてください ...</entry>
+  <entry key="1303">再生</entry>
+  <entry key="1304">会議室とチャット</entry>
+  <entry key="1305">私の会議室</entry>
+  <entry key="1306">私の会議室 (ユーザー数 1-16 向け)</entry>
+  <entry key="1307">ウェビナー (ユーザー数 1-120 向け)</entry>
+  <entry key="1308">会議室の管理者(室長)</entry>
+  <entry key="1309">パスワードを入力してください</entry>
+  <entry key="1310">ユーザー・レベル、司会者、または管理者権限を有するアカウントが必要です。</entry>
+  <entry key="1311">ウェブ・サービス (SOAPでのみ適用)</entry>
+  <entry key="1312">ホワイトボードに直接ロードする</entry>
+  <entry key="1313">ホワイトボードを削除してよろしいですか? 注意:削除したホワイトボードは元に戻せません!!</entry>
+  <entry key="1314">ホワイトボードにロードする</entry>
+  <entry key="1315">録画する必要がある場合は、録画を開始してください。だれかが録画を開始しない限り、会議の録画はされません。</entry>
+  <entry key="1316">録画を開始</entry>
+  <entry key="1317">矢印</entry>
+  <entry key="1318">円</entry>
+  <entry key="1319">線</entry>
+  <entry key="1320">四角形</entry>
+  <entry key="1321">三角形</entry>
+  <entry key="1322">テキスト・注釈</entry>
+  <entry key="1323">クリップアート</entry>
+  <entry key="1324">フリーライン</entry>
+  <entry key="1325">選択・移動</entry>
+  <entry key="1326">図形描画</entry>
+  <entry key="1327">切り取り・移動</entry>
+  <entry key="1328">ズーム・イン/アウト</entry>
+  <entry key="1329">印刷</entry>
+  <entry key="1330">元に戻す</entry>
+  <entry key="1331">ゴミ箱</entry>
+  <entry key="1332">グリッド線を表示</entry>
+  <entry key="1333">ファイル共有</entry>
+  <entry key="1334">図形を選択</entry>
+  <entry key="1335">クリップアートを選択</entry>
+  <entry key="1336">コピー</entry>
+  <entry key="1337">切り取り</entry>
+  <entry key="1338">貼り付け</entry>
+  <entry key="1339">削除</entry>
+  <entry key="1340">ホワイトボードの内容を全て削除してよろしいですか?</entry>
+  <entry key="1341">ホワイトボードに直接ロードする</entry>
+  <entry key="1342">参加者</entry>
+  <entry key="1343">参加者マネージャ</entry>
+  <entry key="1344">在席</entry>
+  <entry key="1345">リモートコントロール</entry>
+  <entry key="1346">追い出す</entry>
+  <entry key="1347">チャット</entry>
+  <entry key="1348">参加者を招待する</entry>
+  <entry key="1349">メール使用</entry>
+  <entry key="1350">ユーザーは司会者です</entry>
+  <entry key="1351">ユーザーはウェブカメラをオンラインにしました</entry>
+  <entry key="1352">塗りつぶしを無効にする</entry>
+  <entry key="1353">塗りつぶしを有効にする</entry>
+  <entry key="1354">グリッドに位置を合わせる</entry>
+  <entry key="1355">録画を許可する</entry>
+  <entry key="1356">録画開始まで待機する</entry>
+  <entry key="1357">トップバーを隠す</entry>
+  <entry key="1358">録画を再生する</entry>
+  <entry key="1359">表示中のスライドの内容を削除してよろしいですか?</entry>
+  <entry key="1360">ユーザー権限を許可する</entry>
+  <entry key="1361">メッセージを拒否して削除する</entry>
+  <entry key="1362">私</entry>
+  <entry key="1363">アクティビティ/アクション</entry>
+  <entry key="1364">ホワイトボードを削除する</entry>
+  <entry key="1365">ホワイトボードを削除したり、書き込んだりするためには権限または許可が必要です。</entry>
+  <entry key="1366">許可されていません</entry>
+  <entry key="1367">さんは会議室から退室しました</entry>
+  <entry key="1368">数式アイコン</entry>
+  <entry key="1369">カテゴリ無し</entry>
+  <entry key="1370">カラー・スタイル</entry>
+  <entry key="1371">回線品質</entry>
+  <entry key="1372">ドメイン</entry>
+  <entry key="1373">プロジェクト</entry>
+  <entry key="1374">レッドオレンジ</entry>
+  <entry key="1375">海緑色</entry>
+  <entry key="1376">暗青灰色</entry>
+  <entry key="1377">青灰色</entry>
+  <entry key="1378">ゴールデンレッド</entry>
+  <entry key="1379">銀白色</entry>
+  <entry key="1380">ユーザー定義</entry>
+  <entry key="1381">最高</entry>
+  <entry key="1382">アップロード</entry>
+  <entry key="1383">中位</entry>
+  <entry key="1384">マイクを無効にする</entry>
+  <entry key="1385">マイクを有効にする</entry>
+  <entry key="1386">他の参加者のマイクを無効にして私のマイクだけを有効にする (F12)</entry>
+  <entry key="1387">あなたのマイクは、司会者によって無効化されています。あなた自身の手でマイクを有効化することはできません。</entry>
+  <entry key="1388">あなたのマイクを無効にしますか?</entry>
+  <entry key="1389">あなたのマイクを無効にしてよろしいですか?無効にすると、他の参加者はだれも、あなたの音声を聞くことができなくなります。</entry>
+  <entry key="1390">消音してよろしいですか?</entry>
+  <entry key="1391">この参加者のマイクからの音声を消音してよろしいですか?この操作は、あなたの端末上で消音するだけであって、他の参加者は指定のマイクからの音声を引き続き聞くことができます。司会者だけが、全参加者のマイクの有効化・無効化を行うことができます。</entry>
+  <entry key="1392">マイクを無効にしてよろしいですか?</entry>
+  <entry key="1393">この参加者のマイクを無効化してよろしいですか?他の参加者はだれも、この参加者の音声を聞くことができなくなります。</entry>
+  <entry key="1394">あなたのマイクは有効です。ここをクリックして、司会者にマイクの無効化を依頼することができます。</entry>
+  <entry key="1395">あなたのマイクは無効です。ここをクリックして、司会者にマイクの有効化を依頼することができます。</entry>
+  <entry key="1396">は、マイクの無効化を依頼します。</entry>
+  <entry key="1397">は、マイクの有効化を依頼します。</entry>
+  <entry key="1398">さんが、参加者のマイクの有効化を依頼しています。</entry>
+  <entry key="1399">さんが、参加者のマイクの無効化を依頼しています。</entry>
+  <entry key="1400">マイクを有効化する</entry>
+  <entry key="1401">マイクを無効化する</entry>
+  <entry key="1402">この参加者は、司会者によってマイクを無効にされています。あなたの手で有効化することはできません。</entry>
+  <entry key="1403">あなたのマイクを無効化します</entry>
+  <entry key="1404">あなたのマイクを有効化します</entry>
+  <entry key="1405">マイクを無効にする</entry>
+  <entry key="1406">マイクを有効にする</entry>
+  <entry key="1407">マイクを無効にする</entry>
+  <entry key="1408">マイクを有効にする</entry>
+  <entry key="1409">司会者だけが各参加者のマイクの有効・無効を設定できます。あなた自身のマイクを消音したい場合は、あなたのビデオ画面中のマイク・アイコンを使ってください。</entry>
+  <entry key="1410">投票名</entry>
+  <entry key="1411">あなた</entry>
+  <entry key="1412">過去の投票</entry>
+  <entry key="1413">実施中の投票</entry>
+  <entry key="1414">シンプル・チャート</entry>
+  <entry key="1415">パイ・チャート</entry>
+  <entry key="1416">メールアドレスを入力してください</entry>
+  <entry key="1417">新着メッセージ</entry>
+  <entry key="1418">投票を締め切る</entry>
+  <entry key="1419">投票を締め切ってよろしいですか?</entry>
+  <entry key="1420">投票を削除する</entry>
+  <entry key="1421">この投票を削除してよろしいですか?同時に投票結果も削除されます。</entry>
+  <entry key="1422">ISO言語コード</entry>
+  <entry key="1423">単独話者になることを許可・拒否する</entry>
+  <entry key="1424">単独話者になることを許可する</entry>
+  <entry key="1425">単独話者になることを拒否する</entry>
+  <entry key="1426">は、単独話者になることを希望します。</entry>
+  <entry key="1427">さんが、単独話者になることを希望しています。</entry>
+  <entry key="1428">単独話者になることを許可する。</entry>
+  <entry key="1429">カメラ解像度</entry>
+  <entry key="1430">解像度の変更はネットワーク帯域に影響します。高解像度のビデオ画像は、より多くのネットワーク帯域を必要とします。</entry>
+  <entry key="1431">あなたは、あなた自身を、あるいは他の参加者を単独話者にする権限を持っていません。司会者に権限を付与してもらうか、司会者に単独話者の指定を依頼してください。</entry>
+  <entry key="1432">私は、単独話者になることができる権限の付与を依頼します。</entry>
+  <entry key="1433">あなたは、自分自身の手で単独話者になることができます。単独話者になるには、ここをクリックしてください。(または、あなたのビデオ画面でクリック、あるいはF12押下でも可能です)</entry>
+  <entry key="1434">マイクは有効です!</entry>
+  <entry key="1435">マイクは消音(無効)です</entry>
+  <entry key="1436">チャットを隠す</entry>
+  <entry key="1437">アクティビティを隠す</entry>
+  <entry key="1438">ファイル・エクスプローラを隠す</entry>
+  <entry key="1439">アクション・メニューを隠す</entry>
+  <entry key="1440">画面共有を隠す</entry>
+  <entry key="1441">ホワイトボードを隠す</entry>
+  <entry key="1442">ビデオにマイク状態を表示する</entry>
+  <entry key="1443">レイアウト・オプション</entry>
+  <entry key="1444">新規イベント</entry>
+  <entry key="1445">カレンダー・イベントを保存時にパスワードを設定する場合、パスワードは、参加者に対して送付される会議室リンクに対して設定されます。会議室にパスワードが設定されるわけではありません。したがって、一つのイベントを、異なるパスワードで複数回保存したような場合、参加者は、異なるパスワードの会議室リンクを受け取ることになります。また、一旦送付されたリンクは、古いパスワードの会議室リンクであっても有効のまま残ります。</entry>
+  <entry key="1446">詳細を編集</entry>
+  <entry key="1447">SIPダイアラーを表示</entry>
+  <entry key="1448">発呼</entry>
+  <entry key="1449">コンタクトのカレンダー・イベントを表示する</entry>
+  <entry key="1450">あなたのホーム!</entry>
+  <entry key="1451">会議予定を作成する</entry>
+  <entry key="1452">録画を視聴する</entry>
+  <entry key="1453">ウェブ会議を選択・開始する</entry>
+  <entry key="1454">ユーザーと権限を管理する</entry>
+  <entry key="1455">接続を管理する/ユーザーを追い出す</entry>
+  <entry key="1456">ユーザー・グループを管理する</entry>
+  <entry key="1457">会議室を管理する</entry>
+  <entry key="1458">システム設定を管理する</entry>
+  <entry key="1459">画面上のラベルを管理する</entry>
+  <entry key="1460">LDAP/ADS構成を管理する</entry>
+  <entry key="1461">システム・バックアップをエクスポート/インポートする</entry>
+  <entry key="1462">ファイル/フォルダのアップロード/追加/削除/ロードを行うためには、司会者であるか、あるいはホワイトボード描画権限が必要です。</entry>
+  <entry key="1463">テキストを編集</entry>
+  <entry key="1464">教授</entry>
+  <entry key="1465">共有画面公開</entry>
+  <entry key="1466">共有画面を公開開始</entry>
+  <entry key="1467">共有画面を公開終了</entry>
+  <entry key="1468">ホスト</entry>
+  <entry key="1469">公開アプリ</entry>
+  <entry key="1470">公開ID</entry>
+  <entry key="1471">共有画面を左に移動するには、共有画面幅を縮小してください。</entry>
+  <entry key="1472">共有画面を下に移動するには、共有画面高を縮小してください。</entry>
+  <entry key="1473">共有画面の幅を拡大するためには、共有画面を左に移動してください。</entry>
+  <entry key="1474">共有画面の高さを拡大するためには、共有画面を上に移動してください。</entry>
+  <entry key="1475">外部プロバイダー向けストリーミングのための設定を行ってください。</entry>
+  <entry key="1476">画面を公開するには、画面共有を開始してください。</entry>
+  <entry key="1477">録画を開始するには、司会者権限が必要です。</entry>
+  <entry key="1478">単独話者権限がありません。司会者権限または単独話者権限が必要です。</entry>
+  <entry key="1479">ファイルをファイル・エクスプローラにアップロード</entry>
+  <entry key="1480">共有設定画面を開く</entry>
+  <entry key="1481">司会者による許可が必要</entry>
+  <entry key="1482">カメラ/マイクの共有を司会者に要求</entry>
+  <entry key="1483">投票によるフィードバック収集</entry>
+  <entry key="1484">投票結果のチャート表示</entry>
+  <entry key="1485">この会議室に投票にあれば投票する</entry>
+  <entry key="1486">カメラ/マイクを設定する</entry>
+  <entry key="1487">退室する</entry>
+  <entry key="1488">外部参加者をVoIP/SIP経由で招待する</entry>
+  <entry key="1489">この会議室へのリンクをEメールで送信する</entry>
+  <entry key="1490">ホワイトボードを設定する</entry>
+  <entry key="1491">最大アップロード・サイズ</entry>
+  <entry key="1492">ホワイトボードの共有を司会者に要求する</entry>
+  <entry key="1493">プライベート・チャットを開始する</entry>
+  <entry key="1494">すべて</entry>
+  <entry key="1495">自分自身とのプライベート・チャットを開始することは出来ません。</entry>
+  <entry key="1496">指定された参加者とのプライベート・チャットは既に開始されています。</entry>
+  <entry key="1497">このプライベート・チャットを削除してよろしいですか?</entry>
+  <entry key="1498">サーバー</entry>
+  <entry key="1499">クラスター参加済みサーバー</entry>
+  <entry key="1500">サーバー名</entry>
+  <entry key="1501">サーバー・アドレス</entry>
+  <entry key="1502">サーバー詳細</entry>
+  <entry key="1503">SMSを送信</entry>
+  <entry key="1504">公開中。ユーザー:</entry>
+  <entry key="1505">バックアップ/リストア/アップグレードを行なう際にコマンドライン・ツールを利用すると、時間とインターネット・トラフィックを節約することができます: &lt;ol&gt; &lt;li&gt;オープンミーティングスのインストール・ディレクトリに移動する (例:/opt/red5)&lt;/li&gt; &lt;li&gt;オープン・ミーティングスを停止する(例: ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (オープン・ミーティングスの現状バックアップを作成する)&lt;/li&gt; &lt;li&gt;オープン・ミーティングスの最新アーカイブをダウンロードする&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (必要に応じて、現環境を移動しておく)&lt;/li&gt; &lt;li&gt;/opt/red5 にダウンロードしたアーカイブを展開する&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip&lt;br/&gt; (デフォルトのデータベースを使用していない場合は './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass')&lt;/li&gt; &lt;li&gt;オープン・ミーティングスを起動する&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">全ユーザーに供用される会議室</entry>
+  <entry key="1507">現ユーザー・グループに供用される会議室</entry>
+  <entry key="1508">現ユーザーの会議室</entry>
+  <entry key="1509">イベント専用会議室を作成/編集する</entry>
+  <entry key="1510">複数のアドレスを書式に含めることができます: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">ストリーミング音量を調整する</entry>
+  <entry key="1512">マイク音量を調整する</entry>
+  <entry key="1513">チャットを制限</entry>
+  <entry key="1514">メッセージを許可</entry>
+  <entry key="1515">チャット画面をデフォルトで表示</entry>
+  <entry key="1516">ファイル画面をデフォルトで表示</entry>
+  <entry key="1517">最終ピング</entry>
+  <entry key="1518">全スレーブは3秒毎(設定可)にピング信号を送信します。マスターがスレーブを利用するためには、最終ピング値は1分未満である必要があります。</entry>
+  <entry key="1519">HTTP ポート</entry>
+  <entry key="1520">ユーザー(SOAP経由)</entry>
+  <entry key="1521">パスワード</entry>
+  <entry key="1522">ウェブ・アプリ・パス</entry>
+  <entry key="1523">プロトコル</entry>
+  <entry key="1524">ピング実行中</entry>
+  <entry key="1525">アクティブ</entry>
+  <entry key="1526">URLを生成</entry>
+  <entry key="1527">ネットワーク・テスト</entry>
+  <entry key="1528">インタビュー用ビデオ・カメラを自動選択</entry>
+  <entry key="1529">下線</entry>
+  <entry key="1530">フォント・スタイル</entry>
+  <entry key="1531">フォント・スタイルを許可</entry>
+  <entry key="1532">フォント色</entry>
+  <entry key="1533">ハイパーリンク</entry>
+  <entry key="1534">セッション統計を表示</entry>
+  <entry key="1535">セッション詳細</entry>
+  <entry key="1536">システム・インポート</entry>
+  <entry key="1537">バックアップにアップロード済みファイルと録音・録画を含める</entry>
+  <entry key="1538">会議室のSIPトランスポートを有効にする</entry>
+  <entry key="1539">このユーザーに単独話者権限を付与してよろしいですか?</entry>
+  <entry key="1540">タイムゾーンを指定してください</entry>
+  <entry key="1541">会議(ユーザー数:1〜25)</entry>
+  <entry key="1542">大人数向け会議(ユーザー数:1〜150)</entry>
+  <entry key="1543">インタビュー(1対1のミーティング;録画付き)</entry>
+  <entry key="1544">指定されたキーの構成は既に存在しています。別のキーを指定するか、既存の構成を編集してください。</entry>
+  <entry key="1545">保存中です。しばらくお待ちください。</entry>
+  <entry key="1546">ようこそ</entry>
+  <entry key="1547">ユーザー基本情報/サポート・リンク ウィジェット</entry>
+  <entry key="1548">ウィジェット</entry>
+  <entry key="1549">について</entry>
+  <entry key="1550">名称</entry>
+  <entry key="1551">バージョン</entry>
+  <entry key="1552">リビジョン</entry>
+  <entry key="1553">ビルド日時</entry>
+  <entry key="1554">ロード中 ...</entry>
+  <entry key="1555">今日</entry>
+  <entry key="1556">1月</entry>
+  <entry key="1557">2月</entry>
+  <entry key="1558">3月</entry>
+  <entry key="1559">4月</entry>
+  <entry key="1560">5月</entry>
+  <entry key="1561">6月</entry>
+  <entry key="1562">7月</entry>
+  <entry key="1563">8月</entry>
+  <entry key="1564">9月</entry>
+  <entry key="1565">10月</entry>
+  <entry key="1566">11月</entry>
+  <entry key="1567">12月</entry>
+  <entry key="1568">リマインダーを送信しない</entry>
+  <entry key="1569">Eメール</entry>
+  <entry key="1570">iCal Eメール</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">OAuth2設定</entry>
+  <entry key="1573">名前</entry>
+  <entry key="1574">有効</entry>
+  <entry key="1575">アイコンURL</entry>
+  <entry key="1576">クライアントID</entry>
+  <entry key="1577">クライアント秘密鍵</entry>
+  <entry key="1578">鍵のURL</entry>
+  <entry key="1579">リクエストトークンURL</entry>
+  <entry key="1580">リクエスト情報URL</entry>
+  <entry key="1581">OAuth2設定</entry>
+  <entry key="1582">ログイン名</entry>
+  <entry key="1583">Email</entry>
+  <entry key="1584">姓</entry>
+  <entry key="1585">名</entry>
+  <entry key="1586">トークン属性値</entry>
+  <entry key="1587">リダイレクトURI</entry>
+  <entry key="1588">Emailアドレスを入力します: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">通信切断時の処理</entry>
+  <entry key="1590">表示</entry>
+  <entry key="1591">アカウントが作成されました。メールを送信しましたのでご確認ください。すぐにログインできます。</entry>
+  <entry key="1592">終了日をご確認ください</entry>
+  <entry key="1593">終了値</entry>
+  <entry key="1594">変換メッセージ</entry>
+  <entry key="1595">録音データがみつかりません</entry>
+  <entry key="1596">ホワイトボード追加</entry>
+  <entry key="1597">Emailアドレスを入力: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">セキュリティ</entry>
+  <entry key="1599">この会議室へは入れません</entry>
+  <entry key="1600">再録音開始</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_ko.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
new file mode 100644
index 0000000..84c13a8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_ko.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">회의</entry>
+  <entry key="2">모임</entry>
+  <entry key="3">교실</entry>
+  <entry key="4">세딩</entry>
+  <entry key="5">유저</entry>
+  <entry key="6">관리</entry>
+  <entry key="7">정지</entry>
+  <entry key="8">기록</entry>
+  <entry key="9">유효한 파일 없음</entry>
+  <entry key="10">교사 기록</entry>
+  <entry key="11">연결된 유저:</entry>
+  <entry key="12">회의 시작</entry>
+  <entry key="13">본인 이름</entry>
+  <entry key="14">비데오 회의</entry>
+  <entry key="15">가지고온 기획안</entry>
+  <entry key="16">새로운 목록</entry>
+  <entry key="17">메인파일에</entry>
+  <entry key="18">새 선거</entry>
+  <entry key="19">새 선거의장</entry>
+  <entry key="20">질문:</entry>
+  <entry key="21">선거 종류:</entry>
+  <entry key="22">창안하다</entry>
+  <entry key="23">Info: Each connected user receives a message with the new poll.</entry>
+  <entry key="24">선거를 만드셨습니다.</entry>
+  <entry key="25">무효</entry>
+  <entry key="26">네/아니오</entry>
+  <entry key="27">숫자 1-10</entry>
+  <entry key="28">투표</entry>
+  <entry key="29">질문을 만들기 위해서 의장이 되어야합니다.</entry>
+  <entry key="30">당신의 투표가 등록 되었습니다.</entry>
+  <entry key="31">이번 선거에 벌써 투표하셨습니다.</entry>
+  <entry key="32">투표 !</entry>
+  <entry key="33">당신의 응답:</entry>
+  <entry key="34">네</entry>
+  <entry key="35">아니오</entry>
+  <entry key="36">will wissen:</entry>
+  <entry key="37">선거 결과:</entry>
+  <entry key="38">질문:</entry>
+  <entry key="39">결과:</entry>
+  <entry key="40">대답:</entry>
+  <entry key="41">시작된 선거가 없습니다.</entry>
+  <entry key="42">선거!</entry>
+  <entry key="43">미딩 (최고 4 자리까지)</entry>
+  <entry key="44">회의 (최고 50 자리까지)</entry>
+  <entry key="45">종류</entry>
+  <entry key="46">다른 자리</entry>
+  <entry key="47">이미 선택 하셨습니다.</entry>
+  <entry key="48">들어가다.</entry>
+  <entry key="49">의장이 미딩에서 나가셨습니다</entry>
+  <entry key="50">시스템 설명</entry>
+  <entry key="51">디바이스를 선택하십시요.</entry>
+  <entry key="52">웹카메라를 선택해 주십시요:</entry>
+  <entry key="53">마이크를 선택해 주십시요:</entry>
+  <entry key="54">네</entry>
+  <entry key="55">무효</entry>
+  <entry key="56">다시 연결이 필요했습니다.</entry>
+  <entry key="57">셋업 편집</entry>
+  <entry key="58">진행:</entry>
+  <entry key="59">언어:</entry>
+  <entry key="60">네</entry>
+  <entry key="61">무효</entry>
+  <entry key="62">칠판 지우기</entry>
+  <entry key="63">새로운 그림을 넣기전에 칠판을 지우길 원하십니까?</entry>
+  <entry key="64">다시 질문을 해주시마십시요</entry>
+  <entry key="65">아니오</entry>
+  <entry key="66">셋업 편집2</entry>
+  <entry key="67">칠판지우시전 확인 요청.</entry>
+  <entry key="68">유저 정보</entry>
+  <entry key="69">그리는 자리 지움</entry>
+  <entry key="70">원래대로 돌려놓다.</entry>
+  <entry key="71">다시하다</entry>
+  <entry key="72">물건을 선택해주십시요.</entry>
+  <entry key="73">원문</entry>
+  <entry key="74">페인트</entry>
+  <entry key="75">선 긋기</entry>
+  <entry key="76">밑줄 긋기</entry>
+  <entry key="77">직사각형</entry>
+  <entry key="78">타원형</entry>
+  <entry key="79">화살표</entry>
+  <entry key="80">선택한 항목 삭제</entry>
+  <entry key="81">알맞게 신청하십시요.</entry>
+  <entry key="82">신청하다.</entry>
+  <entry key="83">삭제</entry>
+  <entry key="84">사회자가 돼다</entry>
+  <entry key="85">닫다</entry>
+  <entry key="86">italic</entry>
+  <entry key="87">굵은 체</entry>
+  <entry key="88">기다림</entry>
+  <entry key="89">유저가 사회자 신청을 원합니다:</entry>
+  <entry key="90">받아들이다.</entry>
+  <entry key="91">거부하다.</entry>
+  <entry key="92">삭제</entry>
+  <entry key="93">밑의 유져들에가 요청을 보냄</entry>
+  <entry key="94">확임이 됩습니다.</entry>
+  <entry key="95">거부가됩습니다.</entry>
+  <entry key="96">사회자로 바끰</entry>
+  <entry key="97">You are not moderating this course!</entry>
+  <entry key="98">사회자:</entry>
+  <entry key="99">이방 정원은 꽉 찾습니다. 죄송합니다. 다음에 오십시요.</entry>
+  <entry key="100">타원</entry>
+  <entry key="101">닫다</entry>
+  <entry key="102">데이다 오류 입력</entry>
+  <entry key="103">유저 이름은 최소 4 문자가 돼어야합니다.</entry>
+  <entry key="104">유저 비밀번호는 최소 4 문자가 돼여야합니다.</entry>
+  <entry key="105">똑같은 유저이름이 존재합니다.</entry>
+  <entry key="106">똑같은 이메일 주소가 이미 등록돼어 있습니다.</entry>
+  <entry key="107">시스템 오류가 생겼습니다. 시스템 관리자에 연락주십시요.</entry>
+  <entry key="108">로긴</entry>
+  <entry key="109">유저:</entry>
+  <entry key="110">패스:</entry>
+  <entry key="111">언어</entry>
+  <entry key="112">로긴</entry>
+  <entry key="113">등록</entry>
+  <entry key="114">유저:</entry>
+  <entry key="115">패스:</entry>
+  <entry key="116">다시타임:</entry>
+  <entry key="117">이름:</entry>
+  <entry key="118">성:</entry>
+  <entry key="119">주소:</entry>
+  <entry key="120">나라:</entry>
+  <entry key="121">등록</entry>
+  <entry key="122">취소</entry>
+  <entry key="123">등록</entry>
+  <entry key="124">집</entry>
+  <entry key="125">유저</entry>
+  <entry key="126">다체</entry>
+  <entry key="127">조직</entry>
+  <entry key="128">회의실</entry>
+  <entry key="129">공공장소</entry>
+  <entry key="130">조직</entry>
+  <entry key="131">들어가다</entry>
+  <entry key="132">로긴</entry>
+  <entry key="133">비밀번호</entry>
+  <entry key="134">다시 타이프 치다.</entry>
+  <entry key="135">이름</entry>
+  <entry key="136">성</entry>
+  <entry key="137">주소</entry>
+  <entry key="138">생일</entry>
+  <entry key="139">길이름/번호</entry>
+  <entry key="140">우편번호/동네</entry>
+  <entry key="141">나라</entry>
+  <entry key="142">주소 인호</entry>
+  <entry key="143">유져데이다</entry>
+  <entry key="144">저장</entry>
+  <entry key="145">저장</entry>
+  <entry key="146">USER-ID</entry>
+  <entry key="147">로긴</entry>
+  <entry key="148">이름</entry>
+  <entry key="149">성</entry>
+  <entry key="150">다음으로 보여주다</entry>
+  <entry key="151">먼저 보여줌.</entry>
+  <entry key="152">기록을 지우다.</entry>
+  <entry key="153">삭제</entry>
+  <entry key="154">삭제</entry>
+  <entry key="155">새로운 기록</entry>
+  <entry key="156">기록을 다시 재생하다</entry>
+  <entry key="157">기록을 지우다</entry>
+  <entry key="158">상태</entry>
+  <entry key="159">무력하게 하다</entry>
+  <entry key="160">권한을 주다</entry>
+  <entry key="161">조직</entry>
+  <entry key="162">달력</entry>
+  <entry key="163">닫다</entry>
+  <entry key="164">조직 번호</entry>
+  <entry key="165">이름</entry>
+  <entry key="166">유저</entry>
+  <entry key="167">바끰</entry>
+  <entry key="168">관리자</entry>
+  <entry key="169">유저높이</entry>
+  <entry key="170">조직</entry>
+  <entry key="171">이름</entry>
+  <entry key="172">조직 추가</entry>
+  <entry key="173">조직 추가</entry>
+  <entry key="174">삭제</entry>
+  <entry key="175">추가하다</entry>
+  <entry key="176">조직 추가</entry>
+  <entry key="177">유저</entry>
+  <entry key="178">유저추가</entry>
+  <entry key="179">유저 지우기</entry>
+  <entry key="180">유저 추가</entry>
+  <entry key="181">유저 찾기</entry>
+  <entry key="182">찾기</entry>
+  <entry key="183">유저</entry>
+  <entry key="184">조직</entry>
+  <entry key="185">입력</entry>
+  <entry key="186">회의실</entry>
+  <entry key="187">회의실</entry>
+  <entry key="188">아이디</entry>
+  <entry key="189">이름</entry>
+  <entry key="190">공공장소</entry>
+  <entry key="191">조직</entry>
+  <entry key="192">회의실</entry>
+  <entry key="193">이름</entry>
+  <entry key="194">종류</entry>
+  <entry key="195">공공장소</entry>
+  <entry key="196">의견</entry>
+  <entry key="197">저장</entry>
+  <entry key="198">입력</entry>
+  <entry key="199">..와 같이 저장 하다</entry>
+  <entry key="200">파일이름</entry>
+  <entry key="201">파일이름</entry>
+  <entry key="202">삭제</entry>
+  <entry key="203">저장</entry>
+  <entry key="204">오류</entry>
+  <entry key="205">장전</entry>
+  <entry key="206">물체 장전</entry>
+  <entry key="207">snychronizing clients, clients to wait:</entry>
+  <entry key="208">이미지데이다 로딩</entry>
+  <entry key="209">snychronizing clients, clients to wait:</entry>
+  <entry key="210">그리는 곳 지우기</entry>
+  <entry key="211">그리는 곳 지우기 칠판위에 모든 데이다가 없어집니다.</entry>
+  <entry key="212">파일이 로딩돼기전에 확인해주십시요.</entry>
+  <entry key="213">초대장을 보내다.</entry>
+  <entry key="214">초대장을 보내다.</entry>
+  <entry key="215">주제</entry>
+  <entry key="216">수령인</entry>
+  <entry key="217">메세지</entry>
+  <entry key="218">보내기</entry>
+  <entry key="219">삭제</entry>
+  <entry key="220">보내기</entry>
+  <entry key="221">유저데이다</entry>
+  <entry key="222">이번 회의의 니크네임</entry>
+  <entry key="223">nick</entry>
+  <entry key="224">이름</entry>
+  <entry key="225">성</entry>
+  <entry key="226">이메일</entry>
+  <entry key="227">언어</entry>
+  <entry key="228">입력</entry>
+  <entry key="229">로딩</entry>
+  <entry key="230">데이다로딩, 기다려주십시요!</entry>
+  <entry key="231">잘못된 패스워드</entry>
+  <entry key="232">최소 4 개 문자로된 두개의 똑같은 패스워드를 입력시켜주십시요</entry>
+  <entry key="233">다른 메일</entry>
+  <entry key="234">잘못된 이멜주소를 입력하였습니다.</entry>
+  <entry key="235">등록이 됬습니다.</entry>
+  <entry key="236">당신의 어카운트가 생겼습니다. 지금 로긴이돼어 있습니다.</entry>
+  <entry key="237">당신의 스크린을 지금 공유할수 없습니다. 다른사람이 이미 스크린을 공유하고 있습니다.</entry>
+  <entry key="238">공유금지</entry>
+  <entry key="239">당신의 스크린을 공유하다.</entry>
+  <entry key="240">Bad Bandwidth: You have not been able to syncronize the Screen. Frames will be dropped. If this Warning is shown often you could ask the moderator to reduce the Quality.</entry>
+  <entry key="241">Screen of:</entry>
+  <entry key="242">Paint</entry>
+  <entry key="243">Document</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Files</entry>
+  <entry key="246">Members</entry>
+  <entry key="247">Download original document</entry>
+  <entry key="248">Download pdf document</entry>
+  <entry key="249">Load Presentation to whiteboard</entry>
+  <entry key="250">Configuration</entry>
+  <entry key="251">Drag this Object</entry>
+  <entry key="252">Resize this Object</entry>
+  <entry key="253">%</entry>
+  <entry key="254">of</entry>
+  <entry key="255">Go to first Page</entry>
+  <entry key="256">Go to previous Page</entry>
+  <entry key="257">Go to next Page</entry>
+  <entry key="258">Go to last Page</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">Mr.</entry>
+  <entry key="262">Ms.</entry>
+  <entry key="263">Configuration</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Key</entry>
+  <entry key="266">Configuration</entry>
+  <entry key="267">Key</entry>
+  <entry key="268">last update</entry>
+  <entry key="269">updatedby</entry>
+  <entry key="270">comment</entry>
+  <entry key="271">key</entry>
+  <entry key="272">of</entry>
+  <entry key="273">Users</entry>
+  <entry key="274">delete user from organisation</entry>
+  <entry key="275">delete</entry>
+  <entry key="276">This user is already member of this organisation.</entry>
+  <entry key="277">News</entry>
+  <entry key="278">Quicklinks</entry>
+  <entry key="279">Goto Conference</entry>
+  <entry key="280">Goto Auditorium</entry>
+  <entry key="281">Help and Support</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Report a bug!</entry>
+  <entry key="285">more</entry>
+  <entry key="286">Project Website (http://openmeetings.apache.org)</entry>
+  <entry key="287">User Mailing List (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Remember Login</entry>
+  <entry key="289">Content</entry>
+  <entry key="290">My Home Page</entry>
+  <entry key="291">My Scheduled Meetings</entry>
+  <entry key="292">My Scheduled Events</entry>
+  <entry key="293">Public Meetings</entry>
+  <entry key="294">Private Meetings</entry>
+  <entry key="295">Public Events</entry>
+  <entry key="296">Private Events</entry>
+  <entry key="297">Public Content</entry>
+  <entry key="298">Private Content</entry>
+  <entry key="299">Personal Content</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderation</entry>
+  <entry key="302">Apply for Moderation</entry>
+  <entry key="303">Polls</entry>
+  <entry key="304">Choose a file</entry>
+  <entry key="305">Settings</entry>
+  <entry key="306">Cam and Mic Settings</entry>
+  <entry key="307">Whiteboard Settings</entry>
+  <entry key="308">Exit</entry>
+  <entry key="309">Back to Rooms</entry>
+  <entry key="310">Logout</entry>
+  <entry key="311">Desktop Viewer</entry>
+  <entry key="312">start Desktop Viewer</entry>
+  <entry key="313">Video and Audio</entry>
+  <entry key="314">Chat</entry>
+  <entry key="315">Whiteboard</entry>
+  <entry key="316">Moderation</entry>
+  <entry key="317">Files</entry>
+  <entry key="318">Users</entry>
+  <entry key="319">Polls</entry>
+  <entry key="320">There is no User connected to this Username</entry>
+  <entry key="321">The email containing a special link has been sent to your email address, please check your mailbox. If you still have not received a email, please adjust your email spam settings and resend confirmation email.</entry>
+  <entry key="322">Error</entry>
+  <entry key="323">Message</entry>
+  <entry key="324">Invalid Hash. No User found.</entry>
+  <entry key="325">Reset Your Password</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">change Password</entry>
+  <entry key="328">new Password</entry>
+  <entry key="329">re-enter Password</entry>
+  <entry key="330">The Passwords you entered weren't identical.</entry>
+  <entry key="331">4 or more characters; capitalization matters!</entry>
+  <entry key="332">Password set. You can login now.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Unkown Error. Please report this to your Service-Team.</entry>
+  <entry key="335">Username not found</entry>
+  <entry key="336">Invalid Password</entry>
+  <entry key="337">Successfully Logged out</entry>
+  <entry key="338">Frontend Registration disabled.</entry>
+  <entry key="339">Invalid EMail</entry>
+  <entry key="340">duplicate filename, please choose another filename</entry>
+  <entry key="341">filename too short</entry>
+  <entry key="342">Could not save Address</entry>
+  <entry key="343">User added but you need to assign this User to an Organisation, otherwise he won't be able to sign-in.</entry>
+  <entry key="344">New Record</entry>
+  <entry key="345">No Field found with this FieldId.</entry>
+  <entry key="346">No Label found for that Field.</entry>
+  <entry key="347">Admin Authorization required</entry>
+  <entry key="348">Language-Editor</entry>
+  <entry key="349">Language</entry>
+  <entry key="350">Label-ID</entry>
+  <entry key="351">Label-Name</entry>
+  <entry key="352">Value</entry>
+  <entry key="353">Fieldvalues</entry>
+  <entry key="354">LabelName</entry>
+  <entry key="355">LabelValue</entry>
+  <entry key="356">Label-ID</entry>
+  <entry key="357">You did only delete the Label NOT the Field! You cannot delete the Field, it may has Labels in other Languages.</entry>
+  <entry key="358">Invalid Labelid. The FieldLanguagesvalues_Id cannot be found in the database.</entry>
+  <entry key="359">You cannot delete this Field. You can only delete Labels NOT Fields. There is no Label loaded at the moment, wether it is not selected any Field or there is no Label for this Language for that Field defined.</entry>
+  <entry key="360">export</entry>
+  <entry key="361">You need to logout to see any changes.</entry>
+  <entry key="362">Add new language</entry>
+  <entry key="363">delete language</entry>
+  <entry key="364">Add new language</entry>
+  <entry key="365">Name</entry>
+  <entry key="366">add language</entry>
+  <entry key="367">Backup</entry>
+  <entry key="368">goto first</entry>
+  <entry key="369">goto previous</entry>
+  <entry key="370">goto next</entry>
+  <entry key="371">goto last</entry>
+  <entry key="372">user speaks (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">turn sound on/off</entry>
+  <entry key="374">System</entry>
+  <entry key="375">Your Settings</entry>
+  <entry key="376">hi,</entry>
+  <entry key="377">Edit your profile</entry>
+  <entry key="378">New Messages:</entry>
+  <entry key="379">Upload new Image</entry>
+  <entry key="380">Userdata - Export</entry>
+  <entry key="381">All organisations must be already existing!</entry>
+  <entry key="382">start export</entry>
+  <entry key="383">By organisation</entry>
+  <entry key="384">start export</entry>
+  <entry key="385">Userdata - Import</entry>
+  <entry key="386">choose users.xml</entry>
+  <entry key="387">import</entry>
+  <entry key="388">Export to XML - These files can be used to: - Contribute to the project - Import into another System - Backup - Customization - Put it into the language-directory for your next installation</entry>
+  <entry key="389">Choose a language file to import. Choose the right Langauge from the Combobox! No matter what the name of the file is, it will be imported into this language!</entry>
+  <entry key="390">import - choose file</entry>
+  <entry key="391">Save as</entry>
+  <entry key="392">Name:</entry>
+  <entry key="393">Comment:</entry>
+  <entry key="394">save</entry>
+  <entry key="395">Recordings</entry>
+  <entry key="396">Recordings Viewer</entry>
+  <entry key="397">Recordings of public and private Rooms</entry>
+  <entry key="398">Users :</entry>
+  <entry key="399">Joined:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Users in this Room:</entry>
+  <entry key="402">refresh</entry>
+  <entry key="403">This Room is Full. Try again in a few minutes.</entry>
+  <entry key="404">click on a room to get details</entry>
+  <entry key="405">Chat with the users in this Room:</entry>
+  <entry key="406">Room:</entry>
+  <entry key="407">Users in this room:</entry>
+  <entry key="408">since:</entry>
+  <entry key="409">play recording</entry>
+  <entry key="410">Length:</entry>
+  <entry key="411">Date:</entry>
+  <entry key="412">Recorder Mode! You cannot change any values, this is a recorded File!</entry>
+  <entry key="413">Play this recording</entry>
+  <entry key="414">Play / Pause</entry>
+  <entry key="415">Start recording</entry>
+  <entry key="416">stop recording</entry>
+  <entry key="417">Recording:</entry>
+  <entry key="418">There is already somebody recording at the moment:</entry>
+  <entry key="419">Recording! By User:</entry>
+  <entry key="420">cancel</entry>
+  <entry key="421">Recording will be canceled and not saved.</entry>
+  <entry key="422">resume</entry>
+  <entry key="423">Close this window and resume recording</entry>
+  <entry key="424">change Linecolor</entry>
+  <entry key="425">Choose Color</entry>
+  <entry key="426">Disable / Enable Linecolor</entry>
+  <entry key="427">change Fillcolor</entry>
+  <entry key="428">Disable / Enable Fillcolor</entry>
+  <entry key="429">Change Linewidth</entry>
+  <entry key="430">close</entry>
+  <entry key="431">change Fontsize</entry>
+  <entry key="432">Delete Recording</entry>
+  <entry key="433">Guest</entry>
+  <entry key="434">By:</entry>
+  <entry key="435">Name</entry>
+  <entry key="436">Room</entry>
+  <entry key="437">Date</entry>
+  <entry key="438">cancel</entry>
+  <entry key="439">start</entry>
+  <entry key="440">Name</entry>
+  <entry key="441">Date</entry>
+  <entry key="442">Delete Server-Chatlog</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">send message</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Choose Published Devices</entry>
+  <entry key="448">Audio and Video</entry>
+  <entry key="449">Audio only</entry>
+  <entry key="450">Video only</entry>
+  <entry key="451">no Audio/Video (static Image)</entry>
+  <entry key="452">No Audio/Video from your PC will be published, instead of that a picture from your profile will be shown. Choose these settings if you have problems with your bandwidth or a very slow Internet connection.</entry>
+  <entry key="453">MO</entry>
+  <entry key="454">TU</entry>
+  <entry key="455">WE</entry>
+  <entry key="456">TH</entry>
+  <entry key="457">FR</entry>
+  <entry key="458">SA</entry>
+  <entry key="459">SU</entry>
+  <entry key="460">Monday</entry>
+  <entry key="461">Tuesday</entry>
+  <entry key="462">Wednesday</entry>
+  <entry key="463">Thursday</entry>
+  <entry key="464">Friday</entry>
+  <entry key="465">Saturday</entry>
+  <entry key="466">Sunday</entry>
+  <entry key="467">CW</entry>
+  <entry key="468">Calendar week</entry>
+  <entry key="469">January</entry>
+  <entry key="470">February</entry>
+  <entry key="471">March</entry>
+  <entry key="472">April</entry>
+  <entry key="473">May</entry>
+  <entry key="474">June</entry>
+  <entry key="475">July</entry>
+  <entry key="476">August</entry>
+  <entry key="477">September</entry>
+  <entry key="478">October</entry>
+  <entry key="479">November</entry>
+  <entry key="480">December</entry>
+  <entry key="481">Calendar</entry>
+  <entry key="482">Participants</entry>
+  <entry key="483">Show Layout Settings</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Width | Height</entry>
+  <entry key="486">Video-Container</entry>
+  <entry key="487">Moderation-Container</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Whiteboard-Container</entry>
+  <entry key="490">Enabled</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Width | Height</entry>
+  <entry key="493">Files,Chat,Partizipants - Container</entry>
+  <entry key="494">Enabled</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Width | Height</entry>
+  <entry key="497">The Moderator has left the Room. No one is presenting at the Moment. You could apply for Moderation or wait.</entry>
+  <entry key="498">There is no Moderator in this Room, but there are some Participants. You have to apply for Moderation or wait.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Invitation</entry>
+  <entry key="501">Message from User:</entry>
+  <entry key="502">Message:</entry>
+  <entry key="503">Click this link to participate in the Meetings:</entry>
+  <entry key="504">Click here to enter room</entry>
+  <entry key="505">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="506">{0} SignUp</entry>
+  <entry key="507">Your userdata:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Pass:</entry>
+  <entry key="510">EMail:</entry>
+  <entry key="511">{0}-Team</entry>
+  <entry key="512">{0} Sign-Up</entry>
+  <entry key="513">{0} - Reset Password</entry>
+  <entry key="514">Click on this link to enter a new password:</entry>
+  <entry key="515">Click here to enter a new Password</entry>
+  <entry key="516">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="517">{0} Password Reset</entry>
+  <entry key="518">Please enter a valid Date, for example 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">Please enter a valid EMail, for example name@mail.com</entry>
+  <entry key="520">Please enter a Float-Number, for example 1.00</entry>
+  <entry key="521">Please enter a Number (Integer), for example 100</entry>
+  <entry key="522">Please enter a valid Phone number, for example ++49 0123 123123</entry>
+  <entry key="523">Please enter a valid time, for example 12:23 (hh:mm)</entry>
+  <entry key="524">Passwort protected</entry>
+  <entry key="525">Password</entry>
+  <entry key="526">Validity period</entry>
+  <entry key="527">Endless</entry>
+  <entry key="528">Period</entry>
+  <entry key="529">One-Time</entry>
+  <entry key="530">Valid From:</entry>
+  <entry key="531">Valid to:</entry>
+  <entry key="532">Invitation To {0}</entry>
+  <entry key="533">Not Invitation availible for this Invitation-Code</entry>
+  <entry key="534">The Invitation was already used. This type of Invitation cannot be re-used.</entry>
+  <entry key="535">This Invitation-Code is not valid.</entry>
+  <entry key="536">Password:</entry>
+  <entry key="537">Check Password</entry>
+  <entry key="538">Invalid Password!</entry>
+  <entry key="539">Browser</entry>
+  <entry key="540">Syncronize Audio/Video</entry>
+  <entry key="541">Login was correct, but the Session you tried is not active or stored on the Server. You have to get a new SessionId and retry login.</entry>
+  <entry key="542">The SessionId is not loggedin or has no Admin rights. The SOAP Gateway needs an User with Admin-Rights to embed new Users.</entry>
+  <entry key="543">This Session has no Remoteuser-Data connected. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">The recorder is currently Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">w</entry>
+  <entry key="550">width</entry>
+  <entry key="551">h</entry>
+  <entry key="552">height</entry>
+  <entry key="553">Change Transparency</entry>
+  <entry key="554">Browser Open</entry>
+  <entry key="555">Browser Close</entry>
+  <entry key="556">The Connection to the Server is lost. You need to reload the Application or/and check your Network.</entry>
+  <entry key="557">Pointer</entry>
+  <entry key="558">Synchronizing</entry>
+  <entry key="559">Synchronizing Users, please wait</entry>
+  <entry key="560">&lt;u&gt;Download as SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download as PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download as JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download as PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download as TIF&lt;/u&gt;</entry>
+  <entry key="565">Reminder:</entry>
+  <entry key="566">Category:</entry>
+  <entry key="567">Repetition:</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Location:</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">End</entry>
+  <entry key="572">Title:</entry>
+  <entry key="573">Comment:</entry>
+  <entry key="574">Invite People</entry>
+  <entry key="575">Daily</entry>
+  <entry key="576">Monthly</entry>
+  <entry key="577">Yearly</entry>
+  <entry key="578">Appointment-end is after of appointment-start!</entry>
+  <entry key="579">Please insert a title!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Activate this if you write in a right to left language (inverse word order)</entry>
+  <entry key="582">Dashboard</entry>
+  <entry key="583">Watch recorded Meetings or Events</entry>
+  <entry key="584">Meeting - Make a conference with 4 (up to 16) Users&lt;br/&gt;everybody will have audio + video access</entry>
+  <entry key="585">Event - Make a conference with up to 200 participents&lt;br/&gt;Only the Moderator will have audio/video</entry>
+  <entry key="586">Create users, rooms, organizations&lt;br/&gt; + change configuration</entry>
+  <entry key="587">Users in this Room now</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Loading Document. Please wait untill all Client have been synchronized.</entry>
+  <entry key="592">Upload complete, converting Document ...</entry>
+  <entry key="593">Start Upload</entry>
+  <entry key="594">Upload and Import Dialog. Please select a File from your Disk.</entry>
+  <entry key="595">Cancel</entry>
+  <entry key="596">Select File</entry>
+  <entry key="597">Connections</entry>
+  <entry key="598">Value</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connected since</entry>
+  <entry key="602">Room / Scope</entry>
+  <entry key="603">Kick User</entry>
+  <entry key="604">Kick User</entry>
+  <entry key="605">Do you really want to kick this Client from the Connection?&lt;br/&gt; This does only remove the Client from the current Room.The Client could re-login again.</entry>
+  <entry key="606">Your session has been closed by an Administrator or Moderator.</entry>
+  <entry key="607">Phone</entry>
+  <entry key="608">User is the Moderator of this Room</entry>
+  <entry key="609">User is allowed to draw on the Whiteboard</entry>
+  <entry key="610">(Re) Start Audio/Video or change Device Settings</entry>
+  <entry key="611">Allow this User to draw on the Whiteboard</entry>
+  <entry key="612">Remove ability to draw on whiteboard</entry>
+  <entry key="613">Users</entry>
+  <entry key="614">Files</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Your account is assigned to multiple Organizations. Please choose one for this Session.</entry>
+  <entry key="618">This room is full at the moment. Please try again later.</entry>
+  <entry key="619">Room Type</entry>
+  <entry key="620">Appointment Room</entry>
+  <entry key="621">Server Time</entry>
+  <entry key="622">{0} - Reminder</entry>
+  <entry key="623">Message from User:</entry>
+  <entry key="624">Message:</entry>
+  <entry key="625">Click this link to participate in the Meetings:</entry>
+  <entry key="626">Click here to enter room</entry>
+  <entry key="627">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="628">search intern</entry>
+  <entry key="629">extern users</entry>
+  <entry key="630">pre name</entry>
+  <entry key="631">name</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirm logout</entry>
+  <entry key="634">Are you sure you want to logout now?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Demo Room</entry>
+  <entry key="637">Demo Time</entry>
+  <entry key="638">Meeting Timer</entry>
+  <entry key="639">This Room is a Demo Room. To disable this warning you either should get a private meeting room for your personal usage or set up an own Server. You will be automatically logged off in:</entry>
+  <entry key="640">Moderated</entry>
+  <entry key="641">Please wait untill the Moderator has entered the Room. The Moderator can be either a Teacher, Admin or the creator of this Room.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Incoming Screen Sharing</entry>
+  <entry key="644">There is a new Screen Sharing incoming from the User:</entry>
+  <entry key="645">Start Sharing</entry>
+  <entry key="646">Add new Meeting</entry>
+  <entry key="647">Meeting Room</entry>
+  <entry key="648">Event Room</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderate Users</entry>
+  <entry key="651">Moderate Rooms</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Do you want to change this User to become a Moderator of that Organization?</entry>
+  <entry key="654">Please choose an Organization before you try to add a User to it!</entry>
+  <entry key="655">Organization - Moderator</entry>
+  <entry key="656">Do you really want to delete this User from the Organization?</entry>
+  <entry key="657">This User is Moderator</entry>
+  <entry key="658">This User is No-Moderator</entry>
+  <entry key="659">Do you want this User to be not a Moderator of this Organization?</entry>
+  <entry key="660">Add or delete Users or Rooms within your Organization</entry>
+  <entry key="661">Do you really want to delete this record?</entry>
+  <entry key="662">Do you really want to delete this user from your organization? You will only delete the connection between the user and your organization, to really delete the user itself you have to login into the Administration-Panel.</entry>
+  <entry key="663">You cannot delete your own User!</entry>
+  <entry key="664">This Method needs a Adminstration Account to be invoked!</entry>
+  <entry key="665">There was no Session associated with this ID.</entry>
+  <entry key="666">This is an Administrator or Moderator account. You can only edit this account through the Administration Panel.</entry>
+  <entry key="667">To complete your registration please click on the following link. Or copy the URL to your browser bar.</entry>
+  <entry key="668">Click to verify your E-Mail</entry>
+  <entry key="669">No user was found for this Hash.</entry>
+  <entry key="670">This user is already activated!</entry>
+  <entry key="671">You did successfully activate your account!</entry>
+  <entry key="672">Login Now</entry>
+  <entry key="673">Your account is not activated. First use the link in the Email you've received during registration.</entry>
+  <entry key="674">You successfully signed up. We've send an EMail with a verification Code to your Mail. Please check your Inbox.</entry>
+  <entry key="675">Remove Moderation Role from this User</entry>
+  <entry key="676">Grant Moderation Rights to this User</entry>
+  <entry key="677">User</entry>
+  <entry key="678">Access to whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Please choose any User on the List to grant him access to the Whiteboard, Moderation or Video.</entry>
+  <entry key="681">This User is already Moderator, so he has automatically the right to draw.</entry>
+  <entry key="682">This is you! You cannot remove the Moderation rights from yourself.</entry>
+  <entry key="683">Allow this User to Publish his Audio / Video</entry>
+  <entry key="684">Remove Audio/Video of this User</entry>
+  <entry key="685">I would like to get the moderation of this room</entry>
+  <entry key="686">I would like to draw on whiteboard</entry>
+  <entry key="687">I would like to share my Audio/Video</entry>
+  <entry key="688">You are moderator of this room</entry>
+  <entry key="689">You are allowed to draw on whiteboard</entry>
+  <entry key="690">You are allowed to share your Audio/Video</entry>
+  <entry key="691">Message to Moderator</entry>
+  <entry key="692">The User</entry>
+  <entry key="693">would like to get the Moderation. Use the status Icons next to the user in the List of Users to add or remove the Moderation.</entry>
+  <entry key="694">would like to draw on whiteboard. Use the status Icons next to the user in the List of Users to add or remove the right to draw anything on the whiteboard.</entry>
+  <entry key="695">would like to share his Audio/Video. Use the status Icons next to the user in the List of Users to add or remove the right to share Audio/Video for any User.</entry>
+  <entry key="696">You have to wait untill a Moderator enters the room.</entry>
+  <entry key="697">Cancel</entry>
+  <entry key="698">Save</entry>
+  <entry key="699">Day</entry>
+  <entry key="700">Month</entry>
+  <entry key="701">Year</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_nl.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
new file mode 100644
index 0000000..8617cb6
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_nl.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Overleg</entry>
+  <entry key="2">Afspraak</entry>
+  <entry key="3">Evenementen</entry>
+  <entry key="4">Instellingen</entry>
+  <entry key="5">Profiel</entry>
+  <entry key="6">Beheer</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Opnemen</entry>
+  <entry key="9">Geen bestand beschikbaar</entry>
+  <entry key="10">Opnamen door Presentator</entry>
+  <entry key="11">Aanwezige gebruikers:</entry>
+  <entry key="12">Start een overleg</entry>
+  <entry key="13">Mijn Naam</entry>
+  <entry key="14">Video Overleg</entry>
+  <entry key="15">Bestand Importeren</entry>
+  <entry key="16">Lijst vernieuwen</entry>
+  <entry key="17">Naar hoofd bestand</entry>
+  <entry key="18">nieuwe stembus</entry>
+  <entry key="19">Een nieuwe stembus.</entry>
+  <entry key="20">Vraag:</entry>
+  <entry key="21">Soort stembus:</entry>
+  <entry key="22">Aanmaken</entry>
+  <entry key="23">Informatie: Iedere gebruiker krijgt een bericht over de stembus.</entry>
+  <entry key="24">Stembus aanmaken</entry>
+  <entry key="25">Annuleren</entry>
+  <entry key="26">Ja/Nee</entry>
+  <entry key="27">Getal 1-10</entry>
+  <entry key="28">Stembus</entry>
+  <entry key="29">Je moet een organisator zijn om een vraag aan te maken</entry>
+  <entry key="30">Jouw stem is geregistreerd.</entry>
+  <entry key="31">Je hebt al gestemd op deze stembus.</entry>
+  <entry key="32">Stem!</entry>
+  <entry key="33">Jouw Antwoord:</entry>
+  <entry key="34">Ja</entry>
+  <entry key="35">Nee</entry>
+  <entry key="36">Wil weten:</entry>
+  <entry key="37">Stembus resultaat</entry>
+  <entry key="38">Vraag:</entry>
+  <entry key="39">Resultaat:</entry>
+  <entry key="40">Antwoorden:</entry>
+  <entry key="41">Er is geen stembus.</entry>
+  <entry key="42">Stem!</entry>
+  <entry key="43">Overleg (max 4 plekken)</entry>
+  <entry key="44">Overleg (max 50 plekken)</entry>
+  <entry key="45">Soort</entry>
+  <entry key="46">Andere plekken</entry>
+  <entry key="47">Reeds gekozen</entry>
+  <entry key="48">deelnemen</entry>
+  <entry key="49">De organisator heeft het overleg verlaten.</entry>
+  <entry key="50">Systeem informatie</entry>
+  <entry key="51">Gekozen apparaat</entry>
+  <entry key="52">Gekozen webcam:</entry>
+  <entry key="53">Gekozen microfoon:</entry>
+  <entry key="54">OK</entry>
+  <entry key="55">Annuleren</entry>
+  <entry key="56">Je moet opnieuw verbinding maken.</entry>
+  <entry key="57">Wijzig instellingen.</entry>
+  <entry key="58">Cursus:</entry>
+  <entry key="59">Taal:</entry>
+  <entry key="60">OK</entry>
+  <entry key="61">Annuleren</entry>
+  <entry key="62">Tekenbord schoonmaken</entry>
+  <entry key="63">Wil je dat het tekenbord schoon wordt gemaakt bij het toevoegen van een nieuw plaatje?</entry>
+  <entry key="64">Niet weer vragen</entry>
+  <entry key="65">Nee</entry>
+  <entry key="66">Wijzig instellingen</entry>
+  <entry key="67">Bevestiging vragen voor het schoonmaken van het tekenbord.</entry>
+  <entry key="68">Gebruikers Informatie</entry>
+  <entry key="69">Tekenbord schoonmaken</entry>
+  <entry key="70">Ongedaan maken</entry>
+  <entry key="71">Opnieuw maken</entry>
+  <entry key="72">Selecteer een object</entry>
+  <entry key="73">Tekst</entry>
+  <entry key="74">Verf</entry>
+  <entry key="75">Lijn Trekken</entry>
+  <entry key="76">Onderstrepen</entry>
+  <entry key="77">Rechthoek</entry>
+  <entry key="78">Ellipse</entry>
+  <entry key="79">Pijl</entry>
+  <entry key="80">Verwijder het geselecteerde object</entry>
+  <entry key="81">Toepassen voor aanpassing</entry>
+  <entry key="82">Toepassen</entry>
+  <entry key="83">Annuleren</entry>
+  <entry key="84">Organisator worden</entry>
+  <entry key="85">Afsluiten</entry>
+  <entry key="86">italic</entry>
+  <entry key="87">bold</entry>
+  <entry key="88">WACHTEN</entry>
+  <entry key="89">Een gebruiker wil organisator worden, je kunt hem toegang geven tot het whiteboard of ook organisator maken. Gebruiker:</entry>
+  <entry key="90">Accepteren</entry>
+  <entry key="91">Afwijzen</entry>
+  <entry key="92">Annuleren</entry>
+  <entry key="93">Verstuur verzoek naar de volgende gebruikers</entry>
+  <entry key="94">Geaccepteerd</entry>
+  <entry key="95">Afgewezen</entry>
+  <entry key="96">Verander organisator</entry>
+  <entry key="97">Je bent geen organisator!</entry>
+  <entry key="98">Organisator:</entry>
+  <entry key="99">Dit overleg is vol. Probeer het later nogmaals.</entry>
+  <entry key="100">Ellipse</entry>
+  <entry key="101">Sluiten</entry>
+  <entry key="102">input data foutmelding</entry>
+  <entry key="103">Gebruikersnaam moet minimaal 4 karakters zijn en is hoofdletter gevoelig!</entry>
+  <entry key="104">Wachtwoord moet minimaal 4 karakters zijn</entry>
+  <entry key="105">Deze gebruikersnaam is al gebruikt</entry>
+  <entry key="106">Dit e-mail adres is al geregistreerd</entry>
+  <entry key="107">Systeem fout neem contact op met een Systeem beheerder</entry>
+  <entry key="108">Inloggen</entry>
+  <entry key="109">Inlognaam/E-mail</entry>
+  <entry key="110">Wachtwoord</entry>
+  <entry key="111">Taal</entry>
+  <entry key="112">Inloggen</entry>
+  <entry key="113">Inschrijven</entry>
+  <entry key="114">Inlognaam</entry>
+  <entry key="115">Wachtwoord</entry>
+  <entry key="116">Nogmaals</entry>
+  <entry key="117">Voornaam</entry>
+  <entry key="118">Achternaam</entry>
+  <entry key="119">E-mail</entry>
+  <entry key="120">Land</entry>
+  <entry key="121">Registreer</entry>
+  <entry key="122">Annuleren</entry>
+  <entry key="123">Geen lid?</entry>
+  <entry key="124">Start</entry>
+  <entry key="125">Gebruikers</entry>
+  <entry key="126">Groepen</entry>
+  <entry key="127">Organisaties</entry>
+  <entry key="128">Vergaderruimtes</entry>
+  <entry key="129">Openbaar</entry>
+  <entry key="130">Organisatie</entry>
+  <entry key="131">Deelnemen</entry>
+  <entry key="132">Inlognaam</entry>
+  <entry key="133">Wachtwoord</entry>
+  <entry key="134">Wachtwoord</entry>
+  <entry key="135">Voornaam</entry>
+  <entry key="136">Achternaam</entry>
+  <entry key="137">E-mail</entry>
+  <entry key="138">Geboortedatum</entry>
+  <entry key="139">Straat en nummer</entry>
+  <entry key="140">Postcode en Plaats</entry>
+  <entry key="141">Land</entry>
+  <entry key="142">Meer gegevens</entry>
+  <entry key="143">Gebruikersgegevens</entry>
+  <entry key="144">Opslaan</entry>
+  <entry key="145">Opslaan</entry>
+  <entry key="146">USER-ID</entry>
+  <entry key="147">Loginnaam</entry>
+  <entry key="148">Voornaam</entry>
+  <entry key="149">Achternaam</entry>
+  <entry key="150">Volgende tonen</entry>
+  <entry key="151">Vorige tonen</entry>
+  <entry key="152">Verwijder</entry>
+  <entry key="153">Annuleren</entry>
+  <entry key="154">Verwijderen</entry>
+  <entry key="155">Toevoegen</entry>
+  <entry key="156">Vernieuwen</entry>
+  <entry key="157">Verwijderen</entry>
+  <entry key="158">Status</entry>
+  <entry key="159">Blokkeren</entry>
+  <entry key="160">Vrijgeven</entry>
+  <entry key="161">Organisatie(s)</entry>
+  <entry key="162">Kalender</entry>
+  <entry key="163">Sluiten</entry>
+  <entry key="164">ID</entry>
+  <entry key="165">Naam</entry>
+  <entry key="166">Gebruiker</entry>
+  <entry key="167">Organisator</entry>
+  <entry key="168">Beheerder</entry>
+  <entry key="169">Toegangsniveau</entry>
+  <entry key="170">Organisatie</entry>
+  <entry key="171">Naam</entry>
+  <entry key="172">Organisatie toevoegen</entry>
+  <entry key="173">Organisatie toevoegen</entry>
+  <entry key="174">Annuleren</entry>
+  <entry key="175">Toevoegen</entry>
+  <entry key="176">Verwijder organisatie</entry>
+  <entry key="177">Gebruiker</entry>
+  <entry key="178">Gebruiker toevoegen</entry>
+  <entry key="179">Gebruiker verwijderen</entry>
+  <entry key="180">Gebruiker aan organisatie toevoegen</entry>
+  <entry key="181">Zoek gebruiker</entry>
+  <entry key="182">Zoek</entry>
+  <entry key="183">Gebruiker</entry>
+  <entry key="184">Organisatie</entry>
+  <entry key="185">Deelnemen</entry>
+  <entry key="186">Kamers</entry>
+  <entry key="187">Kamer</entry>
+  <entry key="188">ID</entry>
+  <entry key="189">Naam</entry>
+  <entry key="190">Openbaar</entry>
+  <entry key="191">Organisaties</entry>
+  <entry key="192">Kamers</entry>
+  <entry key="193">Naam</entry>
+  <entry key="194">Soort</entry>
+  <entry key="195">Openbaar</entry>
+  <entry key="196">Toelichting</entry>
+  <entry key="197">Opslaan en exporteren</entry>
+  <entry key="198">laden</entry>
+  <entry key="199">Opslaan als</entry>
+  <entry key="200">Bestandsnaam</entry>
+  <entry key="201">bestandsnaam</entry>
+  <entry key="202">Annuleren</entry>
+  <entry key="203">Opslaan</entry>
+  <entry key="204">Foutmelding</entry>
+  <entry key="205">Laden</entry>
+  <entry key="206">Objecten geladen</entry>
+  <entry key="207">Wachten op synchronisatie van gebruikers:</entry>
+  <entry key="208">Laden van afbeelding</entry>
+  <entry key="209">Wachten op synchronisatie van gebruikers:</entry>
+  <entry key="210">Tekenbord Leegmaken</entry>
+  <entry key="211">Tekenbord leegmaken, gegevens op tekenbord gaan verloren</entry>
+  <entry key="212">Bevestiging voor het laden van een bestand</entry>
+  <entry key="213">Uitnodiging versturen</entry>
+  <entry key="214">Verstuur uitnodiging</entry>
+  <entry key="215">Onderwerp</entry>
+  <entry key="216">E-mail geadresseerde</entry>
+  <entry key="217">Bericht</entry>
+  <entry key="218">Verstuur</entry>
+  <entry key="219">annuleren</entry>
+  <entry key="220">Verstuur</entry>
+  <entry key="221">Gebruikersgegevens</entry>
+  <entry key="222">Je naam voor dit overleg</entry>
+  <entry key="223">Naam</entry>
+  <entry key="224">Voornaam</entry>
+  <entry key="225">Achternaam</entry>
+  <entry key="226">E-mail</entry>
+  <entry key="227">Taal</entry>
+  <entry key="228">deelnemen</entry>
+  <entry key="229">Laden</entry>
+  <entry key="230">Laden, even wachten aub!</entry>
+  <entry key="231">Verkeerde wachtwoord</entry>
+  <entry key="232">Please enter two identical passwords with at least 6 characters</entry>
+  <entry key="233">Foutmelding</entry>
+  <entry key="234">Dit is geen geldig E-mail adres</entry>
+  <entry key="235">Registratie Afgerond</entry>
+  <entry key="236">Je gebruikersaccount is nu aangemaakt. Je nu kunt inloggen.</entry>
+  <entry key="237">Je kunt je scherm op dit moment niet delen. Iemand anders is al een scherm aan het delen.</entry>
+  <entry key="238">Delen is verboden</entry>
+  <entry key="239">Delen van scherm</entry>
+  <entry key="240">Slechts netwerk: Synchronisatie van het scherm lukt niet. Als je deze melding vaker krijgt, kun je de beheerder vragen of hij de quality van beeld wil verminderen.</entry>
+  <entry key="241">Scherm van:</entry>
+  <entry key="242">Verf</entry>
+  <entry key="243">Document</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Bestanden</entry>
+  <entry key="246">Leden</entry>
+  <entry key="247">Orginele document downloaden</entry>
+  <entry key="248">PDF document downloaden</entry>
+  <entry key="249">Zet presentatie op tekenbord</entry>
+  <entry key="250">Instellingen</entry>
+  <entry key="251">Verplaats dit object</entry>
+  <entry key="252">Verander de grote</entry>
+  <entry key="253">%</entry>
+  <entry key="254">van</entry>
+  <entry key="255">Na naar de eerste pagina</entry>
+  <entry key="256">Ga naar de vorige pagina</entry>
+  <entry key="257">Na gaan de volgende pagina</entry>
+  <entry key="258">Ga naar de laatste pagina</entry>
+  <entry key="259">Uitzoomen</entry>
+  <entry key="260">Inzoomen</entry>
+  <entry key="261">Dhr.</entry>
+  <entry key="262">Mevr.</entry>
+  <entry key="263">Instellingen</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Instelling</entry>
+  <entry key="266">Instellingen</entry>
+  <entry key="267">Instelling</entry>
+  <entry key="268">Laatste update</entry>
+  <entry key="269">Bijwerkt door</entry>
+  <entry key="270">Toelichting</entry>
+  <entry key="271">Waarde</entry>
+  <entry key="272">van</entry>
+  <entry key="273">Gebruikers</entry>
+  <entry key="274">haal gebruiker uit organisatie</entry>
+  <entry key="275">D</entry>
+  <entry key="276">Deze gebruiker zit al in deze organisatie.</entry>
+  <entry key="277">Nieuws</entry>
+  <entry key="278">Snelkoppelingen</entry>
+  <entry key="279">Ga naar overleg</entry>
+  <entry key="280">Ga luisteren</entry>
+  <entry key="281">Help en Hulp</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Meld probleem!</entry>
+  <entry key="285">meer</entry>
+  <entry key="286">Project Webside (http://openmeetings.apache.org)</entry>
+  <entry key="287">User Mailing List (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Inloggegevens onthouden</entry>
+  <entry key="289">Inhoud</entry>
+  <entry key="290">Mijn Start Pagina</entry>
+  <entry key="291">Mijn geplande overleggen</entry>
+  <entry key="292">Mijn geplande evenementen</entry>
+  <entry key="293">Openbare overleggen</entry>
+  <entry key="294">Prive overleggen</entry>
+  <entry key="295">Openbare evenementen</entry>
+  <entry key="296">Prive evenementen</entry>
+  <entry key="297">Openbare inhoud</entry>
+  <entry key="298">Prive inhoud</entry>
+  <entry key="299">Persoonlijke inhoud</entry>
+  <entry key="300"></entry>
+  <entry key="301">Nakijken</entry>
+  <entry key="302">Nalaten kijken</entry>
+  <entry key="303">Stembussen</entry>
+  <entry key="304">Kies een bestand</entry>
+  <entry key="305">Instellingen</entry>
+  <entry key="306">Beeld/Geluid instellingen</entry>
+  <entry key="307">Tekenbord instellingen</entry>
+  <entry key="308">Verlaten</entry>
+  <entry key="309">Terug naar kamers</entry>
+  <entry key="310">Uitloggen</entry>
+  <entry key="311">Wachtwoord vergeten?</entry>
+  <entry key="312">Wachtwoord opnieuw instellen</entry>
+  <entry key="313">Via E-mail</entry>
+  <entry key="314">Via inlognaam</entry>
+  <entry key="315">Je E-mail</entry>
+  <entry key="316">Je loginnaam</entry>
+  <entry key="317">Verstuur E-mail met een Link</entry>
+  <entry key="318">Dit E-mail adres is niet gevonden. Geeft E-mail adres waar ook het account mee gemaakt is.</entry>
+  <entry key="319">Geeft inlognaam of E-mail adres</entry>
+  <entry key="320">Er is geen gebruiker met deze inlognaam</entry>
+  <entry key="321">Een E-mail met een link is naar je toegestuurd, controller je Postvak-In. Als je dan nog steeds niets hebt ontvangen bekijk je E-mail spam instellingen.</entry>
+  <entry key="322">Foutmelding</entry>
+  <entry key="323">Bericht</entry>
+  <entry key="324">Er is geen gebruiker met deze gegevens.</entry>
+  <entry key="325">Wachtwoord opnieuw instellen</entry>
+  <entry key="326">Inlognaam</entry>
+  <entry key="327">Verander wachtwoord</entry>
+  <entry key="328">wachtwoord invoeren</entry>
+  <entry key="329">wachtwoord opnieuw invoeren</entry>
+  <entry key="330">De wachtwoorden zijn niet gelijk.</entry>
+  <entry key="331">Minimaal 4 karakters en hoofdlettergevoelig!</entry>
+  <entry key="332">Wachtwoord ingesteld. Je kunt nu inloggen.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Onbekende Foutmelding. Geef dit door aan de beheerder.</entry>
+  <entry key="335">Inlognaam niet gevonden</entry>
+  <entry key="336">Verkeerd wachtwoord</entry>
+  <entry key="337">U bent uitgelogd</entry>
+  <entry key="338">Registratie is uitgezet.</entry>
+  <entry key="339">Verkeerd E-mail adres</entry>
+  <entry key="340">een bestand met deze naam is al aanwezig, kies een andere naam</entry>
+  <entry key="341">bestandsnaam te kort</entry>
+  <entry key="342">Kan bestand niet opslaan</entry>
+  <entry key="343">Gebruiker toegevoegd. Account moet nog wel worden toegevoegd aan een organisatie.</entry>
+  <entry key="344">Nieuw item</entry>
+  <entry key="345">Geen veld gevonden met dit veld ID.</entry>
+  <entry key="346">Geen label gevonden voor dat veld.</entry>
+  <entry key="347">Beheer authorisatie is vereist.</entry>
+  <entry key="348">Taal Bewerker</entry>
+  <entry key="349">Taal</entry>
+  <entry key="350">Label-ID</entry>
+  <entry key="351">Label naam</entry>
+  <entry key="352">Label tekst</entry>
+  <entry key="353">Display tekst</entry>
+  <entry key="354">Label naam</entry>
+  <entry key="355">Label tekst</entry>
+  <entry key="356">Label-ID</entry>
+  <entry key="357">Je hebt alleen het label verwijderd en niet het veld! Je kunt dit veld niet verwijderen omdat het gebruikt worden in andere talen.</entry>
+  <entry key="358">Onjuist Label-ID. De 'FieldLanguagesvalues_Id' kan niet worden gevonden in de database.</entry>
+  <entry key="359">Je kunt alleen labels verwijderen en geen velden.</entry>
+  <entry key="360">Exporteren</entry>
+  <entry key="361">Je moet opnieuw aanmelden om de veranderingen te zien.</entry>
+  <entry key="362">Nieuwe taal toevoegen</entry>
+  <entry key="363">Taal verwijderen</entry>
+  <entry key="364">Nieuwe taal toevoegen</entry>
+  <entry key="365">Naam</entry>
+  <entry key="366">Taal toevoegen</entry>
+  <entry key="367">Backup</entry>
+  <entry key="368">ga naar het begin</entry>
+  <entry key="369">vorige</entry>
+  <entry key="370">volgende</entry>
+  <entry key="371">ga naar de laatste</entry>
+  <entry key="372">Gebruiker spreekt (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">Geluid aan/uit</entry>
+  <entry key="374">Systeem</entry>
+  <entry key="375">Jouw instellingen</entry>
+  <entry key="376">Hallo,</entry>
+  <entry key="377">Profiel bijwerken</entry>
+  <entry key="378">Nieuw bericht:</entry>
+  <entry key="379">Pasfoto uploaden</entry>
+  <entry key="380">Gebruikersdata exporteren</entry>
+  <entry key="381">Om per organisatie een backup te maken, moeten organisatie aanwezig zijn.</entry>
+  <entry key="382">Backup</entry>
+  <entry key="383">Backup een organisatie</entry>
+  <entry key="384">Backup</entry>
+  <entry key="385">Gebruikersdata importeren</entry>
+  <entry key="386">Restore</entry>
+  <entry key="387">Importeren</entry>
+  <entry key="388">Exporteren naar XML - Deze bestanden kunnen gebruikt worden voor:&lt;br/&gt; - Bijdrage aan het project - Importeren in een ander systeem&lt;br/&gt; - Backup - Optimalisatie&lt;br/&gt; - Plaats het in de 'openmeeting/language' directory voor de volgende installatie</entry>
+  <entry key="389">Kies een taal bestand om te importeren. &lt;br/&gt;Opletten! Kies de juiste taal uit de selectie lijst! &lt;br/&gt;Het maakt niet uit wat de naam van het bestand is, &lt;br/&gt;het zal worden geimporteerd in deze taal!</entry>
+  <entry key="390">importeren - kies een bestand</entry>
+  <entry key="391">Opslaan als</entry>
+  <entry key="392">Naam:</entry>
+  <entry key="393">Toelichting:</entry>
+  <entry key="394">Opslaan</entry>
+  <entry key="395">Opnames</entry>
+  <entry key="396">Opnames bekijken</entry>
+  <entry key="397">Opnames van openbare en prive kamers</entry>
+  <entry key="398">Gebruikers:</entry>
+  <entry key="399">Aanwezig:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Active deelnemers:</entry>
+  <entry key="402">vernieuwen</entry>
+  <entry key="403">Dit overleg is vol. Probeer het later nogmaals.</entry>
+  <entry key="404">Klik op een kamer voor meer informatie</entry>
+  <entry key="405">Chat met deelnemers:</entry>
+  <entry key="406">Overleg:</entry>
+  <entry key="407">Active deelnemers:</entry>
+  <entry key="408">Vanaf:</entry>
+  <entry key="409">Bekijk opname</entry>
+  <entry key="410">Duur:</entry>
+  <entry key="411">Datum:</entry>
+  <entry key="412">Opname bekijken! Je kunt niets wijzigen. Dit is een opgenomen overleg!</entry>
+  <entry key="413">Start deze opname</entry>
+  <entry key="414">Play / Pause</entry>
+  <entry key="415">Neem dit overleg op</entry>
+  <entry key="416">Stop opname</entry>
+  <entry key="417">Opname:</entry>
+  <entry key="418">Dit overleg wordt al opgenomen door een andere gebruiker!</entry>
+  <entry key="419">Opgenomen! Door gebruiker:</entry>
+  <entry key="420">Annuleren</entry>
+  <entry key="421">De opname wordt gestopt en wordt niet bewaard.</entry>
+  <entry key="422">hetvatten</entry>
+  <entry key="423">Sluit dit scherm en blijf opnemen</entry>
+  <entry key="424">Verander lijnkleur</entry>
+  <entry key="425">Kies een kleur</entry>
+  <entry key="426">Uizetten/Aanzetten lijnkleur</entry>
+  <entry key="427">Verander opvulkleur</entry>
+  <entry key="428">Uitzetten/Aanzetten opvulkleur</entry>
+  <entry key="429">Verander lijn dikte</entry>
+  <entry key="430">Afsluiten</entry>
+  <entry key="431">Verander lettertype</entry>
+  <entry key="432">Verwijder opname</entry>
+  <entry key="433">Gast</entry>
+  <entry key="434">Door:</entry>
+  <entry key="435">Naam</entry>
+  <entry key="436">Overleg</entry>
+  <entry key="437">Datum</entry>
+  <entry key="438">Annuleren</entry>
+  <entry key="439">Start</entry>
+  <entry key="440">Naam</entry>
+  <entry key="441">Datum</entry>
+  <entry key="442">Verwijder Server-Chatlog</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">Verstuur bericht</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Choose Published Devices</entry>
+  <entry key="448">Beeld en Geluid</entry>
+  <entry key="449">Alleen geluid</entry>
+  <entry key="450">Alleen beeld</entry>
+  <entry key="451">Geen beeld/geluid (pasfoto afbeelden)</entry>
+  <entry key="452">Als er netwerk problemen zijn, kies dan voor pasfoto afbeelden. Je profiel pasfoto wordt hiervoor gebruikt.</entry>
+  <entry key="453">Ma</entry>
+  <entry key="454">Di</entry>
+  <entry key="455">Wo</entry>
+  <entry key="456">Do</entry>
+  <entry key="457">Vr</entry>
+  <entry key="458">Za</entry>
+  <entry key="459">Zo</entry>
+  <entry key="460">Maandag</entry>
+  <entry key="461">Dinsdag</entry>
+  <entry key="462">Woensdag</entry>
+  <entry key="463">Donderdag</entry>
+  <entry key="464">Vrijdag</entry>
+  <entry key="465">Zaterdag</entry>
+  <entry key="466">Zondag</entry>
+  <entry key="467">WK</entry>
+  <entry key="468">Kalender Week</entry>
+  <entry key="469">Januari</entry>
+  <entry key="470">Februari</entry>
+  <entry key="471">Maart</entry>
+  <entry key="472">April</entry>
+  <entry key="473">Mei</entry>
+  <entry key="474">Juni</entry>
+  <entry key="475">Juli</entry>
+  <entry key="476">Augustus</entry>
+  <entry key="477">September</entry>
+  <entry key="478">Oktober</entry>
+  <entry key="479">November</entry>
+  <entry key="480">December</entry>
+  <entry key="481">Kalender</entry>
+  <entry key="482">Aantal Deelnemers</entry>
+  <entry key="483">Toon opmaak instellingen</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Breedte | Hoogte</entry>
+  <entry key="486">Beeld-Container</entry>
+  <entry key="487">Organisator-Container</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Tekenbord-Container</entry>
+  <entry key="490">Aanzetten</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Breedte | Hoogte</entry>
+  <entry key="493">Bestanden, chat en deelnemers - Container</entry>
+  <entry key="494">Aanzetten</entry>
+  <entry key="495">X | Y</entry>
+  <entry key="496">Breedte | Hoogte</entry>
+  <entry key="497">De organisator heeft het overleg verlaten. Niemand is aan het presenteren. Je kunt organisator worden of wachten.</entry>
+  <entry key="498">Er zijn deelnemers maar nog geen organisator. Je kunt Organisator worden of wachten.</entry>
+  <entry key="499">Terugkoppeling {0}</entry>
+  <entry key="500">{0} - Uitnodiging</entry>
+  <entry key="501">Bericht van gebruiker:</entry>
+  <entry key="502">Bericht:</entry>
+  <entry key="503">Klik op deze link om deel te nemen aan dit overleg:</entry>
+  <entry key="504">Klik hier om deel te nemen aan dit overleg</entry>
+  <entry key="505">Als je problemen ondervindt met de link, kopieer en plak deze in een internet browser:</entry>
+  <entry key="506">{0} registeren</entry>
+  <entry key="507">Je gebruikersgegevens:</entry>
+  <entry key="508">Inlognaam:</entry>
+  <entry key="509">Wachtwoord:</entry>
+  <entry key="510">E-mail:</entry>
+  <entry key="511">{0}-Team</entry>
+  <entry key="512">{0} Registeren</entry>
+  <entry key="513">{0} - Wachtwoord Reset</entry>
+  <entry key="514">Klik op deze link voor een nieuw wachtwoord:</entry>
+  <entry key="515">Klik hier voor een nieuw wachtwoord</entry>
+  <entry key="516">Als je problemen ondervindt met de link, kopieer en plak deze in een internet browser:</entry>
+  <entry key="517">{0} wachtwoord reset</entry>
+  <entry key="518">Geef een juiste datum (dd.mm.yyyy)</entry>
+  <entry key="519">Geef een juist E-mail adres (voorbeeld naam@domein.nl)</entry>
+  <entry key="520">Geef een Float-Number (voorbeeld 1.00)</entry>
+  <entry key="521">Geef een Integer (voorbeeld 100)</entry>
+  <entry key="522">Geef een juist telefoonnummer (voorbeeld +31 0123 456789</entry>
+  <entry key="523">Geef een juiste tijd (hh:mm)</entry>
+  <entry key="524">Beveiligd door wachtwoord</entry>
+  <entry key="525">Wachtwoord</entry>
+  <entry key="526">Geldigheidsduur</entry>
+  <entry key="527">Altijd</entry>
+  <entry key="528">Periode</entry>
+  <entry key="529">Eenmalig</entry>
+  <entry key="530">Geldig van:</entry>
+  <entry key="531">Geldig tot:</entry>
+  <entry key="532">Uitnodiging van {0}</entry>
+  <entry key="533">Geen uitnodiging beschikbaar met deze code</entry>
+  <entry key="534">Deze is uitnodiging is eenmalig en al eens gebruikt.</entry>
+  <entry key="535">Deze uitnodigingscode is onjuist.</entry>
+  <entry key="536">Wachtwoord:</entry>
+  <entry key="537">Controleer wachtwoord</entry>
+  <entry key="538">Verkeerd wachtwoord!</entry>
+  <entry key="539">Beeld_Geluid</entry>
+  <entry key="540">Synchronisatie van beeld en geluid</entry>
+  <entry key="541">Login was correct, but the Session you tried is not active or stored on the Server. You have to get a new SessionId and retry login.</entry>
+  <entry key="542">The SessionId is not loggedin or has no Admin rights. The SOAP Gateway needs an User with Admin-Rights to embed new Users.</entry>
+  <entry key="543">This Session has no Remoteuser-Data connected. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">De recorder functie is Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-as</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-as</entry>
+  <entry key="549">b</entry>
+  <entry key="550">breedte</entry>
+  <entry key="551">h</entry>
+  <entry key="552">hoogte</entry>
+  <entry key="553">Verander doorzichtigheid</entry>
+  <entry key="554">Open browser</entry>
+  <entry key="555">Sluit browser</entry>
+  <entry key="556">De is geen verbinding met de server meer. Start de applicatie opnieuw of controleer je netwerk verbinding.</entry>
+  <entry key="557">Aanwijzer</entry>
+  <entry key="558">Synchronisatie</entry>
+  <entry key="559">Aan het synchroniseren. Even geduld aub</entry>
+  <entry key="560">&lt;u&gt;Opslaan als SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Opslaan als PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Opslaan als JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Opslaan als PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Opslaan als TIF&lt;/u&gt;</entry>
+  <entry key="565">Herinnering:</entry>
+  <entry key="566">Categorie:</entry>
+  <entry key="567">Herhaling:</entry>
+  <entry key="568">Geen</entry>
+  <entry key="569">Lokatie:</entry>
+  <entry key="570">Begin</entry>
+  <entry key="571">Einde</entry>
+  <entry key="572">Onderwerp:</entry>
+  <entry key="573">Toelichting:</entry>
+  <entry key="574">Gebruikers uitnodigen</entry>
+  <entry key="575">Dagelijks</entry>
+  <entry key="576">Maandelijks</entry>
+  <entry key="577">Jaarlijks</entry>
+  <entry key="578">Opmerking: Het einde van het overleg moet altijd later zijn dan het begin!</entry>
+  <entry key="579">Geef een onderwerp!</entry>
+  <entry key="580">RnL</entry>
+  <entry key="581">Zet deze functie aan als je taal van Rechts naar Links wordt geschreven</entry>
+  <entry key="582">Instrumentenbord</entry>
+  <entry key="583">Bekijk opgenomen overleg of evenement</entry>
+  <entry key="584">Overleg - Organiseer een overleg met 4 tot 16 personen.&lt;br/&gt;Iedereen heeft mogelijkheid tot beeld en geluid.</entry>
+  <entry key="585">Evenement - Organiseer een overleg met maximaal 200 personen.&lt;br/&gt;Alleen de organisator heeft beeld en geluid.</entry>
+  <entry key="586">Beheer gebruikers, kamers, organisaties&lt;br/&gt; of verander de instellingen</entry>
+  <entry key="587">Active deelnemers</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Inlognaam</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Document aan het laden. Even wachten tot alle gebruikers zijn gesynchroniseerd.</entry>
+  <entry key="592">Importeren gelukt, nu aan het converteren...</entry>
+  <entry key="593">Begin importeren</entry>
+  <entry key="594">Importeer scherm. Zoek en selecteer een bestand.</entry>
+  <entry key="595">Annuleren</entry>
+  <entry key="596">Selecteer bestand</entry>
+  <entry key="597">Active sessies</entry>
+  <entry key="598">Waarde</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Inlognaam</entry>
+  <entry key="601">Verbonden sinds</entry>
+  <entry key="602">Kamer / bereik</entry>
+  <entry key="603">Uitloggen</entry>
+  <entry key="604">Uitloggen</entry>
+  <entry key="605">Weet je zeker dat je deze gebruiker wilt uitloggen?&lt;br/&gt;De gebruiker zal uit dit overleg worden gehaald. De gebruiker kan wel weer opnieuw deelnemen.</entry>
+  <entry key="606">Je bent door een organisator of beheerder uit het overleg gehaald.</entry>
+  <entry key="607">Telefoon</entry>
+  <entry key="608">Gebruiker is organisator in dit overleg</entry>
+  <entry key="609">Gebruiker mag tekenen op het tekenbord</entry>
+  <entry key="610">(Her) Start beeld/geluid of verander instellingen</entry>
+  <entry key="611">Geef gebruiker toestemming om op het tekenbord te tekenen</entry>
+  <entry key="612">Ontneem gebruiker toestemming om op het tekenbord te tekenen</entry>
+  <entry key="613">Gebruikers</entry>
+  <entry key="614">Bestanden</entry>
+  <entry key="615">Tekenbord</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Jouw account heeft meerdere organsiaties toegewezen gekregen. Selecteer een organisatie voor dit overleg.</entry>
+  <entry key="618">Dit overleg is vol. Probeer het later nogmaals.</entry>
+  <entry key="619">Kamer soort</entry>
+  <entry key="620">Afspraak kamer</entry>
+  <entry key="621">Server tijd</entry>
+  <entry key="622">{0} - herinnering</entry>
+  <entry key="623">Bericht van:</entry>
+  <entry key="624">Bericht:</entry>
+  <entry key="625">Klik op deze link om deel te nemen aan dit overleg:</entry>
+  <entry key="626">Klik om deel te nemen aan dit overleg</entry>
+  <entry key="627">Als je problemen ondervindt met de link, kopieer en plak deze in een internet browser:</entry>
+  <entry key="628">Zoek intern</entry>
+  <entry key="629">Externe toevoegen</entry>
+  <entry key="630">Voornaam</entry>
+  <entry key="631">Achternaam</entry>
+  <entry key="632">E-mail adres</entry>
+  <entry key="633">Uitloggen bevestigen</entry>
+  <entry key="634">Weet je zeker dat je wilt uitloggen?</entry>
+  <entry key="635">Acties</entry>
+  <entry key="636">Demo kamer</entry>
+  <entry key="637">Demo tijd (sec)</entry>
+  <entry key="638">Overleg tijd</entry>
+  <entry key="639">Dit is een demonstratie kamer. Je wordt automatisch uitlogd in :</entry>
+  <entry key="640">Toezichthouder</entry>
+  <entry key="641">De organisator, beheerder of planner van dit overleg is nog niet aanwezig. Even wachten aub.</entry>
+  <entry key="642">OK</entry>
+  <entry key="643">Scherm delen</entry>
+  <entry key="644">Er wordt een scherm gedeelte door gebruiker:</entry>
+  <entry key="645">Start met delen</entry>
+  <entry key="646">Nieuw overleg toevoegen</entry>
+  <entry key="647">Kamers</entry>
+  <entry key="648">Evenement kamer</entry>
+  <entry key="649">Organisator</entry>
+  <entry key="650">Beheer de gebruikers</entry>
+  <entry key="651">Beheer de kamers</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Wil je deze gebruiker organisator maken van deze organisatie?</entry>
+  <entry key="654">Je kunt pas een gebruiker toevoegen als je een organisatie hebt gekozen!</entry>
+  <entry key="655">Organisatie - organisatoren</entry>
+  <entry key="656">Wil je deze gebruiker echt uit deze organisatie halen?</entry>
+  <entry key="657">Deze gebruiker is organisator</entry>
+  <entry key="658">Deze gebruiker is geen organisator</entry>
+  <entry key="659">Deze gebruiker geen organisator?</entry>
+  <entry key="660">Toevoegen of verwijderen van gebruikers of kamers in je organisatie</entry>
+  <entry key="661">Wil je dit item echt verwijderen?</entry>
+  <entry key="662">Wil je deze gebruiker echt uit je organisatie verwijderen? Het gebruikersaccount blijft wel bestaan.</entry>
+  <entry key="663">Je kunt je eigen gebruikersaccount niet verwijderen!</entry>
+  <entry key="664">Dit kan alleen een beheerder doen!</entry>
+  <entry key="665">Er zijn geen sessie gekoppeld aan dit ID.</entry>
+  <entry key="666">Dit is een beheeraccount. Je kunt dit account bewerken in het beheer Beheer/Gebruikers gedeelte.</entry>
+  <entry key="667">Klik op de link om de registratie af te ronden. Mocht dit niet lukken, kopieer en plak deze in een internet browser.</entry>
+  <entry key="668">Klik om je E-mail adres te controleren</entry>
+  <entry key="669">Er is geen gebruiker met deze gegevens.</entry>
+  <entry key="670">Deze gebruiker is al actief!</entry>
+  <entry key="671">Het account is succesvol geactiveerd!</entry>
+  <entry key="672">Nu inloggen</entry>
+  <entry key="673">Het account is nog niet actief. Gebruik eerste de link in de E-mail die je hebt gekregen tijdens de registratie.</entry>
+  <entry key="674">In inschrijven is nu volledig. Er is een E-mail gestuurd met een verificatie link. Controlleer je Postvak-In.</entry>
+  <entry key="675">Verwijder organisator rol van gebruiker</entry>
+  <entry key="676">Geef organisator rol aan deze gebruiker</entry>
+  <entry key="677">Gebruiker</entry>
+  <entry key="678">Toegang tot tekenbord</entry>
+  <entry key="679">Organisator</entry>
+  <entry key="680">Moderation: Selecteer een gebruiker om deze tekenbord en/of organisator toegang te geven.</entry>
+  <entry key="681">Deze gebruiker is al organisator en heeft dus toegang tot het tekenbord.</entry>
+  <entry key="682">Dit ben je zelf! Je kunt jezelf geen organisator rechten ontnemen.</entry>
+  <entry key="683">Geef deze gebruiker beeld en geluid</entry>
+  <entry key="684">Ontneem deze gebruiker beeld en geluid</entry>
+  <entry key="685">Ik zou graag organisator van dit overleg worden</entry>
+  <entry key="686">Ik zou graag willen tekenen op het tekenbord</entry>
+  <entry key="687">Ik zou graag mijn beeld en geluid delen</entry>
+  <entry key="688">Je bent organisator van deze kamer</entry>
+  <entry key="689">Je mag tekenen op het tekenbord</entry>
+  <entry key="690">Je mag je beeld en geluid delen</entry>
+  <entry key="691">Bericht van de organisator</entry>
+  <entry key="692">De gebruiker</entry>
+  <entry key="693">wil graag organisator worden. Gebruik de status iconen naast de gebruiker om dit in te stellen.</entry>
+  <entry key="694">wil graag tekenen op het tekenbord. Gebruik de status iconen naast de gebruiker om dit in te stellen.</entry>
+  <entry key="695">wil graag beeld en geluid delen. Gebruik de status iconen naast de gebruiker om dit in te stellen.</entry>
+  <entry key="696">Je moet wachten totdat de organisator er is.</entry>
+  <entry key="697">Annuleren</entry>
+  <entry key="698">Opslaan</entry>
+  <entry key="699">Dag</entry>
+  <entry key="700">Maand</entry>
+  <entry key="701">Jaar</entry>
+  <entry key="702">Bestand uploaden</entry>
+  <entry key="703">Directory toevoegen</entry>
+  <entry key="704">Vernieuwen</entry>
+  <entry key="705">Vuilnisbak</entry>
+  <entry key="706">Mijn bestanden</entry>
+  <entry key="707">Bestanden in de kamer</entry>
+  <entry key="708">Bestand toevoegen</entry>
+  <entry key="709">Directory toevoegen</entry>
+  <entry key="710">Directory verwijderen</entry>
+  <entry key="711">Naam wijzigen</entry>
+  <entry key="712">Nieuwe directory</entry>
+  <entry key="713">Weet je zeker dat je dit wilt verwijderen?</entry>
+  <entry key="714">Zoek</entry>
+  <entry key="715">Zoek</entry>
+  <entry key="716">Open document</entry>
+  <entry key="717">Toon alle bestanden (Tree View)</entry>
+  <entry key="718">Sluit Document</entry>
+  <entry key="719">Verwijder bestand</entry>
+  <entry key="720">Je mag niet tekenen op het tekenbord. Je dient organisator te zijn of toestemming hiervoor te krijgen. Je kunt de organisator vragen voor toestemming.</entry>
+  <entry key="721">Document eigenschappen</entry>
+  <entry key="722">Start Java</entry>
+  <entry key="723">Start Flash</entry>
+  <entry key="724">Een gebruiker wil een scherm met je delen. Wil je deze zien?</entry>
+  <entry key="725">Op dit momenn deel je een scherm. Klik op de Stop knop om dit te beeidingen.</entry>
+  <entry key="726">Gegevens delen</entry>
+  <entry key="727">Je scherm wordt al getoond aan andere gebruikers!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Stop Delen</entry>
+  <entry key="730">Scherm deler</entry>
+  <entry key="731">Klik op Start om je scherm te delen</entry>
+  <entry key="732">Start delen</entry>
+  <entry key="733">Pause delen</entry>
+  <entry key="734">Selecteer het gebied op je scherm:</entry>
+  <entry key="735">Breedte veranderen</entry>
+  <entry key="736">Het scherm delen is beindigd!</entry>
+  <entry key="737">Hoogte veranderen</entry>
+  <entry key="738">X-afstand</entry>
+  <entry key="739">Y-afstand</entry>
+  <entry key="740">Breedte:</entry>
+  <entry key="741">Hoogte:</entry>
+  <entry key="742">Verbinding is beindigd door de server</entry>
+  <entry key="743">Annuleren</entry>
+  <entry key="744">Start Java</entry>
+  <entry key="745">Als je deze sessie volledig beindigd, kun je hem niet opnieuw bekijken.</entry>
+  <entry key="746">Bevestiging van het sluiten van deze sessie</entry>
+  <entry key="747">Deel scherm</entry>
+  <entry key="748">Neem sessie op</entry>
+  <entry key="749">Samen browsen</entry>
+  <entry key="750">Firefox op Windows geeft soms problemen met samen browsen.</entry>
+  <entry key="751">Vorige</entry>
+  <entry key="752">Volgende</entry>
+  <entry key="753">Opnieuw laden</entry>
+  <entry key="754">Begin</entry>
+  <entry key="755">Laden</entry>
+  <entry key="756">Maak deze website je default website.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Test beeld en geluid voordat je aan een overleg begint.</entry>
+  <entry key="759">Laat deze test niet weer zien</entry>
+  <entry key="760">Annuleren</entry>
+  <entry key="761">Start Overleg</entry>
+  <entry key="762">Niet opnieuw vragen</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Wil je doorgaan zonder test? Je bent dan nog steeds in staan om te chatten en te teken op het tekenbord.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Niveau meter</entry>
+  <entry key="768">Kies Begin</entry>
+  <entry key="769">Begin direct een overleg</entry>
+  <entry key="770">Begin evenement</entry>
+  <entry key="771">Kies Kamer</entry>
+  <entry key="772">Wijzig Instellingen</entry>
+  <entry key="773">Begin Overleg</entry>
+  <entry key="774">Start wizard:</entry>
+  <entry key="775">Start Opname</entry>
+  <entry key="776">Beeld en geluid iedere keer testen</entry>
+  <entry key="777">Openbare kamers</entry>
+  <entry key="778">Openbare kamers zijn toegankelijk voor alle gebruikers!</entry>
+  <entry key="779">Prive kamers</entry>
+  <entry key="780">Prive kamers zijn alleen toegankelijk voor gebruikers van dezelfde organisatie.</entry>
+  <entry key="781">Mijn kamers</entry>
+  <entry key="782">Deze kamers zijn voor persoonlijk gebruik en aangemaakt middels de kalender. Ze hebben een start en eind datum. Ze staan hier zolang ze nog geldig zijn.</entry>
+  <entry key="783">Je dient organisator te zijn om dit te doen.</entry>
+  <entry key="784">Toegang aanvragen</entry>
+  <entry key="785">Toegang aanvragen</entry>
+  <entry key="786">Vragen voor beeld en geluid deelname</entry>
+  <entry key="787">Deze sessie is al gebruikt en kun je niet nogmaals gebruiken.</entry>
+  <entry key="788">BEGIN</entry>
+  <entry key="789">EINDE</entry>
+  <entry key="790">Wil je dit overleg echt verlaten? Het is raadzaam bestanden, tekenbord en chat historie op te schonen!</entry>
+  <entry key="791">Verlaat overleg</entry>
+  <entry key="792">Kamers</entry>
+  <entry key="793">Kies een kamer voor een overleg</entry>
+  <entry key="794">Er is een niet opgeslagen evenement in de kalender. Bewaar of verwijder deze.</entry>
+  <entry key="795">Je dient minimaal 1 persooon uit te nodigen!</entry>
+  <entry key="796">Weet je zeker of je dit evenement wilt verwijderen?</entry>
+  <entry key="797">Waarschuwing</entry>
+  <entry key="798">Evenement toevoegen</entry>
+  <entry key="799">dag</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">maand</entry>
+  <entry key="802">Omschrijving</entry>
+  <entry key="803">Deelnemers</entry>
+  <entry key="804">Kies voor BEGIN om meteen een overleg te starten of ga naar de kalendar om iets te plannen.</entry>
+  <entry key="805">Plan een overleg</entry>
+  <entry key="806">Om een overleg te plannen, dien je een evenement aan de kalender toe te voegen. Voor ieder evenement zal automatisch een kamer aangemaakt worden. Iedere deelnemer zal E-mail ontvangen met een link naar de kamer.&lt;br/&gt;&lt;br/&gt;Er is keuze in verschillende soorten kamers. Tevens kan iedere kamer een eigen layout krijgen.</entry>
+  <entry key="807">Hulp nodig?</entry>
+  <entry key="808">Beperkt</entry>
+  <entry key="809">Zoek</entry>
+  <entry key="810">Toevoegen</entry>
+  <entry key="811">Er is geen gebruiker geselecteerd. Kies eerst een item en klik dan op toevoegen.</entry>
+  <entry key="812">Nieuwe deelnemer</entry>
+  <entry key="813">Opslaan</entry>
+  <entry key="814">Verwijderen</entry>
+  <entry key="815">Evenement details</entry>
+  <entry key="816">Standaard organisators</entry>
+  <entry key="817">Hoofd</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Naam</entry>
+  <entry key="820">E-mail adres</entry>
+  <entry key="821">Nieuwe standaard organisator toevoegen</entry>
+  <entry key="822">Is hoofd-organisator</entry>
+  <entry key="823">Als de kamer voorzien is van organisatoren, worden gebruikers met deze rol automatisch organisator als ze het overleg betreden. Als je dit niet wilt, stel dan een standaard organisator in.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Geef hoofd-organisator rol</entry>
+  <entry key="826">Ontneem hoofd-organisator rol</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Als je een organisatie toevoegd aan een kamer, kunnen alleen gebruikers van die organisatie de kamer betreden (letop: dat de kamer niet openbaar is!)</entry>
+  <entry key="829">Organisatoren</entry>
+  <entry key="830">Conditie</entry>
+  <entry key="831">Organisatie</entry>
+  <entry key="832">Weet je het zeker?</entry>
+  <entry key="833">Weet je zeker dat je dit object wilt verwijderen? Kies voor opslaan om dit te bewaren!</entry>
+  <entry key="834">Er is geen gebruiker geselecteerd!</entry>
+  <entry key="835">Nieuwe standaard organisator toevoegen</entry>
+  <entry key="836">Wil je deze gebruiker hoofd-organisator maken? Een hoofd-organisator is organisator en niemand kan deze organisator rol terugdraaienn. Kies voor opslaan om dit te bewaren!</entry>
+  <entry key="837">Wil je de rol hoofd-organisator weghalen voor de gebruiker? Kies kamer opslaan om dit door te voeren!</entry>
+  <entry key="838">Dit een een hoofd-organisator. Je kunt een organisator rol niet verwijderen van een hoofd-organisator!</entry>
+  <entry key="839">Weet je zeker dat dit bestand/directory verwijder kan worden?</entry>
+  <entry key="840">Verwijder bestand/directory?</entry>
+  <entry key="841">Mevrouw</entry>
+  <entry key="842">Meneer</entry>
+  <entry key="843">Eigenschappen</entry>
+  <entry key="844">Toon muis positie aan kijkers</entry>
+  <entry key="845">Deel geluid middels SIP</entry>
+  <entry key="846">Deel geluid middels SIP en beeld via flash</entry>
+  <entry key="847">Beeldvullend</entry>
+  <entry key="848">Toon scherm</entry>
+  <entry key="849">De gebruiker</entry>
+  <entry key="850">wil zijn scherm delen, wil je dit zien?</entry>
+  <entry key="851">Sluiten</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">Deze sessie is beindigd door de gebruiker die aan het delen was!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">Opnieuw scherm delen</entry>
+  <entry key="856">Minimaliseren</entry>
+  <entry key="857">Maximaliseren</entry>
+  <entry key="858">Beeld</entry>
+  <entry key="859">Opname tijdlijn</entry>
+  <entry key="860">Mijn opnames</entry>
+  <entry key="861">Openbare opnames</entry>
+  <entry key="862">Informatie</entry>
+  <entry key="863">Naam</entry>
+  <entry key="864">Lengte</entry>
+  <entry key="865">Datum</entry>
+  <entry key="866">Door</entry>
+  <entry key="867">Download</entry>
+  <entry key="868">Hoofd - Beeld</entry>
+  <entry key="869">Opnemen</entry>
+  <entry key="870">Opnemen en scherm delen kan op hetzelfde moment. Om je scherm te delen, kies voor scherm delen.</entry>
+  <entry key="871">Begin opnemen</entry>
+  <entry key="872">Stop opnemen</entry>
+  <entry key="873">Download FLV-bestand</entry>
+  <entry key="874">Kamer</entry>
+  <entry key="875">Afspelen</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">Gebruiker heeft de microfoon aan</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_pl.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
new file mode 100644
index 0000000..2cf8149
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_pl.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Konferencja</entry>
+  <entry key="2">Spotkania</entry>
+  <entry key="3">Wykłady</entry>
+  <entry key="4">Ustawienia</entry>
+  <entry key="5">Profil</entry>
+  <entry key="6">Administracja</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Nagrywanie</entry>
+  <entry key="9">Brak pliku</entry>
+  <entry key="10">Nagrywanie przez wykładowcę</entry>
+  <entry key="11">Podłaczeni użytkownicy:</entry>
+  <entry key="12">Rozpocznij konferencję</entry>
+  <entry key="13">Moje imię</entry>
+  <entry key="14">Wideokonferencja</entry>
+  <entry key="15">Przesłanie pliku</entry>
+  <entry key="16">Odświeżenie listy</entry>
+  <entry key="17">Do pliku głównego</entry>
+  <entry key="18">nowe głosowanie</entry>
+  <entry key="19">Nowe głosowanie.</entry>
+  <entry key="20">Pytanie:</entry>
+  <entry key="21">Rodzaj głosowania:</entry>
+  <entry key="22">Utwórz</entry>
+  <entry key="23">Uwaga: Każdy połączony użytkownik otrzyma wiadomość z nowym głosowaniem.</entry>
+  <entry key="24">Utwórz głosowanie.</entry>
+  <entry key="25">Anuluj</entry>
+  <entry key="26">Tak/Nie</entry>
+  <entry key="27">Liczba 1-10</entry>
+  <entry key="28">Głosowanie</entry>
+  <entry key="29">Musisz być moderatorem aby utworzyć pytanie</entry>
+  <entry key="30">Twój głos został zarejestrowany.</entry>
+  <entry key="31">Już głosowałeś w tym głosowaniu..</entry>
+  <entry key="32">Głosuj !</entry>
+  <entry key="33">Twoja odpowiedź:</entry>
+  <entry key="34">Tak</entry>
+  <entry key="35">Nie</entry>
+  <entry key="36">chciał(a)by wiedzieć:</entry>
+  <entry key="37">Wyniki głosowania</entry>
+  <entry key="38">Pytanie:</entry>
+  <entry key="39">Wyniki:</entry>
+  <entry key="40">Odpowiedzi:</entry>
+  <entry key="41">Nie rozpoczęto żadnego głosowania.</entry>
+  <entry key="42">Głosuj !</entry>
+  <entry key="43">Spotkanie (maks. 4 miejsca)</entry>
+  <entry key="44">Konferencja (maks. 50 miejsc)</entry>
+  <entry key="45">Rodzaj</entry>
+  <entry key="46">Pozostałe miejsca</entry>
+  <entry key="47">Już wybrano</entry>
+  <entry key="48">wejdź</entry>
+  <entry key="49">Moderator wyszedł ze spotkania.</entry>
+  <entry key="50">Informacja systemowa</entry>
+  <entry key="51">Wybierz urządzenie</entry>
+  <entry key="52">Wybierz kamerę:</entry>
+  <entry key="53">Wybierz mikrofon:</entry>
+  <entry key="54">ok</entry>
+  <entry key="55">anuluj</entry>
+  <entry key="56">Połącz się powtórnie.</entry>
+  <entry key="57">Edytuj ustawienia.</entry>
+  <entry key="58">Kurs:</entry>
+  <entry key="59">Język:</entry>
+  <entry key="60">ok</entry>
+  <entry key="61">anuluj</entry>
+  <entry key="62">Wyczyść tablicę</entry>
+  <entry key="63">Czy chcesz wyczyściń tablicę przed dodaniem nowego obrazka?</entry>
+  <entry key="64">Nie pytaj więcej</entry>
+  <entry key="65">nie</entry>
+  <entry key="66">Edytuj ustawienia</entry>
+  <entry key="67">Proszę potwierdziś zmazanie tablicy.</entry>
+  <entry key="68">Informacje o użytkowniku</entry>
+  <entry key="69">Wyczyść obszar rysowania</entry>
+  <entry key="70">Cofnij</entry>
+  <entry key="71">Powrtórz</entry>
+  <entry key="72">Wskaż obiekt</entry>
+  <entry key="73">Tekst</entry>
+  <entry key="74">Malowanie</entry>
+  <entry key="75">Rysuj linię</entry>
+  <entry key="76">Podkreśl</entry>
+  <entry key="77">Prostokąt</entry>
+  <entry key="78">Elipsa</entry>
+  <entry key="79">Strzałka</entry>
+  <entry key="80">Skasuj wskazany obiekt</entry>
+  <entry key="81">Złóż wniosek o moderację</entry>
+  <entry key="82">złóż</entry>
+  <entry key="83">anuluj</entry>
+  <entry key="84">Zostań moderatorem</entry>
+  <entry key="85">zamknij</entry>
+  <entry key="86">kursywa</entry>
+  <entry key="87">pogrubiony</entry>
+  <entry key="88">CZEKAM</entry>
+  <entry key="89">Użytkownik prosi o prawa moderatora. Możesz nadać mu tylko dostęp do tablicy, albo pełne prawa moderatorskie. Użytkownik:</entry>
+  <entry key="90">akceptuj</entry>
+  <entry key="91">odrzuć</entry>
+  <entry key="92">anuluj</entry>
+  <entry key="93">Wysyłam prośbę do następujących użytkowników:</entry>
+  <entry key="94">Przyjęte</entry>
+  <entry key="95">Odrzucone</entry>
+  <entry key="96">Zmień moderatora</entry>
+  <entry key="97">Nie jesteś tutaj moderatorem!</entry>
+  <entry key="98">Moderator:</entry>
+  <entry key="99">Ten pokój jest pełny. Zajrzyj później.</entry>
+  <entry key="100">Elipsa</entry>
+  <entry key="101">zamknij</entry>
+  <entry key="102">błąd w danych wejściowych</entry>
+  <entry key="103">4 lub więcej znaków; duże i małe litery mają znaczenie!</entry>
+  <entry key="104">Hasło musi składać się przynajmniej z 4 znaków</entry>
+  <entry key="105">Ta nazwa użytkownika jest już zajęta</entry>
+  <entry key="106">Ten adres e-mail jest już zarejestrowany</entry>
+  <entry key="107">Błąd systemu. Skontaktuj się z administratorem.</entry>
+  <entry key="108">Logowanie</entry>
+  <entry key="109">Użytkownik:</entry>
+  <entry key="110">Hasło:</entry>
+  <entry key="111">Język</entry>
+  <entry key="112">Zapisz się</entry>
+  <entry key="113">Zapisz się</entry>
+  <entry key="114">Użytkownik:</entry>
+  <entry key="115">Hasło:</entry>
+  <entry key="116">Powtórz:</entry>
+  <entry key="117">Imię:</entry>
+  <entry key="118">Nazwisko:</entry>
+  <entry key="119">e-mail:</entry>
+  <entry key="120">Kraj:</entry>
+  <entry key="121">Zarejestruj</entry>
+  <entry key="122">Anuluj</entry>
+  <entry key="123">Nie zapisałeś się jeszcze?</entry>
+  <entry key="124">Strona startowa</entry>
+  <entry key="125">Użytkownicy</entry>
+  <entry key="126">Grupy</entry>
+  <entry key="127">Organizacje</entry>
+  <entry key="128">Pokoje spotkań</entry>
+  <entry key="129">publiczne</entry>
+  <entry key="130">Organizacja</entry>
+  <entry key="131">Wejdź</entry>
+  <entry key="132">Login</entry>
+  <entry key="133">Hasło</entry>
+  <entry key="134">Powtórz</entry>
+  <entry key="135">Imię</entry>
+  <entry key="136">Nazwisko</entry>
+  <entry key="137">e-mail</entry>
+  <entry key="138">Urodziny</entry>
+  <entry key="139">Ulica/Numer</entry>
+  <entry key="140">Kod/Miasto</entry>
+  <entry key="141">Kraj</entry>
+  <entry key="142">Informacje adesowe</entry>
+  <entry key="143">Dane użytkownika</entry>
+  <entry key="144">Zapisz</entry>
+  <entry key="145">Zapisz</entry>
+  <entry key="146">ID-użytkownika</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">Imię</entry>
+  <entry key="149">Nazwisko</entry>
+  <entry key="150">Pokaż następny</entry>
+  <entry key="151">Pokaż poprzedni</entry>
+  <entry key="152">Skasuj wpis</entry>
+  <entry key="153">Anuluj</entry>
+  <entry key="154">Skasuj</entry>
+  <entry key="155">Nowy wpis</entry>
+  <entry key="156">Odświerz wpis</entry>
+  <entry key="157">Skasuj wpis</entry>
+  <entry key="158">Status</entry>
+  <entry key="159">zablokowany</entry>
+  <entry key="160">odblokowany</entry>
+  <entry key="161">Organizacje</entry>
+  <entry key="162">Kalendarz</entry>
+  <entry key="163">zamknij</entry>
+  <entry key="164">ID-organizacji</entry>
+  <entry key="165">Nazwa</entry>
+  <entry key="166">Użytkownik</entry>
+  <entry key="167">Moderator</entry>
+  <entry key="168">Administrator</entry>
+  <entry key="169">Prawa użytkownika</entry>
+  <entry key="170">Organizacja</entry>
+  <entry key="171">nazwa</entry>
+  <entry key="172">Dodaj organizację</entry>
+  <entry key="173">Dodaj organizację</entry>
+  <entry key="174">Anuluj</entry>
+  <entry key="175">Dodaj</entry>
+  <entry key="176">skasuj organizację</entry>
+  <entry key="177">Użytkownik</entry>
+  <entry key="178">dodaj użytkownika</entry>
+  <entry key="179">skasuj użytkownika</entry>
+  <entry key="180">Dodaj uzytkownika do organizacji</entry>
+  <entry key="181">Wyszukaj użytkownika</entry>
+  <entry key="182">Wyszukaj</entry>
+  <entry key="183">Użytkownik</entry>
+  <entry key="184">Organizacja</entry>
+  <entry key="185">Wprowadź</entry>
+  <entry key="186">Pokoje konferencyjne</entry>
+  <entry key="187">Pokoje konferencyjne</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Nazwa</entry>
+  <entry key="190">publiczny</entry>
+  <entry key="191">Organizacje</entry>
+  <entry key="192">Pokoje spotkań</entry>
+  <entry key="193">Nazwa</entry>
+  <entry key="194">Rodzaj</entry>
+  <entry key="195">Publiczny</entry>
+  <entry key="196">Komentarz</entry>
+  <entry key="197">zapisz i eksportuj</entry>
+  <entry key="198">wczytaj</entry>
+  <entry key="199">zapisz jako</entry>
+  <entry key="200">Nazwa pliku</entry>
+  <entry key="201">nazwa pliku</entry>
+  <entry key="202">anuluj</entry>
+  <entry key="203">zapisz</entry>
+  <entry key="204">Błąd</entry>
+  <entry key="205">wczytuję</entry>
+  <entry key="206">wczytane obiekty</entry>
+  <entry key="207">synchronizuję klientów; klienci oczekujący:</entry>
+  <entry key="208">Wczytuję obrazek</entry>
+  <entry key="209">synchronizuję klientów; klienci oczekujący:</entry>
+  <entry key="210">wyczyść obszar rysowania</entry>
+  <entry key="211">wyczyść obszar rysowania - znikną wszystkie informacje z tablicy</entry>
+  <entry key="212">Potwierdź zanim wczytam plik</entry>
+  <entry key="213">Wyślij zaproszenie</entry>
+  <entry key="214">Wyślij zaproszenie</entry>
+  <entry key="215">Temat</entry>
+  <entry key="216">Do</entry>
+  <entry key="217">Treść zaproszenia</entry>
+  <entry key="218">Wyślij</entry>
+  <entry key="219">anuluj</entry>
+  <entry key="220">wyślij</entry>
+  <entry key="221">Dane użytkownika</entry>
+  <entry key="222">Twój pseudonim na potrzeby tej konferencji</entry>
+  <entry key="223">Pseudonim</entry>
+  <entry key="224">Imię</entry>
+  <entry key="225">Nazwisko</entry>
+  <entry key="226">e-mail</entry>
+  <entry key="227">Język</entry>
+  <entry key="228">wejdź</entry>
+  <entry key="229">Wczytuję</entry>
+  <entry key="230">Wczytywanie danych, proszę czekać!</entry>
+  <entry key="231">Niepoprawne haslo</entry>
+  <entry key="232">Proszę wprowadzić dwa identyczne hasła o długości przynajmniej 6 znaków.</entry>
+  <entry key="233">Niepoprawny e-mail</entry>
+  <entry key="234">Wprowadziłe(a)ś niepoprawny adres e-mail</entry>
+  <entry key="235">Rejestracja zakończona</entry>
+  <entry key="236">Konto utworzone. Możesz się zalogować.</entry>
+  <entry key="237">Nie możesz teraz pokazać swojego ekranu. Ktoś inny pokazuje teraz swój ekran.</entry>
+  <entry key="238">Pokazywanie ekranu nie jest teraz dopuszczalne</entry>
+  <entry key="239">Pokaż swój ekran</entry>
+  <entry key="240">Zbyt niska przepustowość łącza: synchronizacja nie powiodła się. Pominięto kilka ramek. Jeśli ten komunikat powtarza się często poproś moderatora o obniżenie jakości transmisji.</entry>
+  <entry key="241">Ekran użytkownika:</entry>
+  <entry key="242">Obraz</entry>
+  <entry key="243">Dokument</entry>
+  <entry key="244">Czat</entry>
+  <entry key="245">Pliki</entry>
+  <entry key="246">Uczestnicy</entry>
+  <entry key="247">Pobierz oryginalny dokument</entry>
+  <entry key="248">Pobierz dokument jako PDF</entry>
+  <entry key="249">Pokaż prezentację na tablicy</entry>
+  <entry key="250">Konfiguracja</entry>
+  <entry key="251">Przesuń obiekt</entry>
+  <entry key="252">Skaluj obiekt</entry>
+  <entry key="253">%</entry>
+  <entry key="254">z</entry>
+  <entry key="255">Przejdź do pierwszej strony</entry>
+  <entry key="256">Przejdź do poprzedniej strony</entry>
+  <entry key="257">Przejdź do następnej strony</entry>
+  <entry key="258">Przejdź do ostatniej strony</entry>
+  <entry key="259">Zmniejsz</entry>
+  <entry key="260">Powiększ</entry>
+  <entry key="261">Pan</entry>
+  <entry key="262">Pani</entry>
+  <entry key="263">Konfiguracja</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Klucz</entry>
+  <entry key="266">Konfiguracja</entry>
+  <entry key="267">Klucz</entry>
+  <entry key="268">ostatnio aktualizowane</entry>
+  <entry key="269">aktualizowane przez</entry>
+  <entry key="270">komentarz</entry>
+  <entry key="271">Wartość</entry>
+  <entry key="272">z</entry>
+  <entry key="273">Użytkownicy</entry>
+  <entry key="274">usuń użytkownika z organizacji</entry>
+  <entry key="275">Sk.</entry>
+  <entry key="276">Użytkownik już należy to tej organizacji.</entry>
+  <entry key="277">Wiadomości</entry>
+  <entry key="278">Łącza</entry>
+  <entry key="279">Przejdź do konferencji</entry>
+  <entry key="280">Przejdź do sali wykładowej</entry>
+  <entry key="281">Pomoc i wsparcie</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Zgłoś błąd!</entry>
+  <entry key="285">więcej</entry>
+  <entry key="286">Witryna projektu (http://openmeetings.apache.org)</entry>
+  <entry key="287">Lista mailingowa użytkowników (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Zapamiętaj login i hasło</entry>
+  <entry key="289">Zawartość</entry>
+  <entry key="290">Moja strona startowa</entry>
+  <entry key="291">Moje zaplanowane spotkania</entry>
+  <entry key="292">Moje zaplanowane wykłady</entry>
+  <entry key="293">Publiczne spotkania</entry>
+  <entry key="294">Prywatne spotkania</entry>
+  <entry key="295">Publiczne wykłady</entry>
+  <entry key="296">Prywatne wykłady</entry>
+  <entry key="297">Public Content</entry>
+  <entry key="298">Prywatna zawartość</entry>
+  <entry key="299">Osobista zawartość</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderacja</entry>
+  <entry key="302">Poproś o moderację</entry>
+  <entry key="303">Głosowania</entry>
+  <entry key="304">Wybierz plik</entry>
+  <entry key="305">Ustawienia</entry>
+  <entry key="306">Ustawienia kamery</entry>
+  <entry key="307">Ustawienia tablicy</entry>
+  <entry key="308">Wyjście</entry>
+  <entry key="309">Wróć do listy pokojów</entry>
+  <entry key="310">Wyloguj</entry>
+  <entry key="311">Zapomniałe(a)ś hasła?</entry>
+  <entry key="312">Ustaw nowe hasło</entry>
+  <entry key="313">Według maila</entry>
+  <entry key="314">Według loginu</entry>
+  <entry key="315">Twój adres e-mail</entry>
+  <entry key="316">Twój login</entry>
+  <entry key="317">Wyślij e-mail z prośbą o potwierdzenie zmiany hasła</entry>
+  <entry key="318">Nie znaleziono adresu. Upewnij się, że wpisałe(a)ś ten sam adres, jaki podałe(a)ś przy zakładaniu konta.</entry>
+  <entry key="319">Proszę podać e-mail lub nazwę użytkownika.</entry>
+  <entry key="320">Nie ma użytkownika o takiej nazwie</entry>
+  <entry key="321">E-mail zawierający specjalne łącze (link) został wysłany na twój adres. Sprawdź swoją pocztę. Jeśli nie otrzymałe(a)ś listu, sprawdź/zmień ustawienia antyspamowe swojej skrzynki i ponownie wygeneruj mail potwierdzający zmianę hasła.</entry>
+  <entry key="322">Informacja</entry>
+  <entry key="323">Błąd</entry>
+  <entry key="324">Niepoprawny kod. Nie ma takiego użytkownika.</entry>
+  <entry key="325">Ustaw nowe hasło.</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">zmień hasło</entry>
+  <entry key="328">nowe hasło</entry>
+  <entry key="329">powtórz hasło</entry>
+  <entry key="330">Hasła, które wpisałe(a)ś nie były identyczne.</entry>
+  <entry key="331">4 lub więcej znaków; małe i duże litery mają znaczenie!</entry>
+  <entry key="332">Hasło ustawione. Możesz się zalogować.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Nieznany błąd. Proszę poinformować administratora.</entry>
+  <entry key="335">Nie ma takiego użytkownika</entry>
+  <entry key="336">Niepoprawne hasło</entry>
+  <entry key="337">Poprawnie wylogowano.</entry>
+  <entry key="338">Samodzielna rejestracja nie jest możliwa.</entry>
+  <entry key="339">Niepoprawny e-mail</entry>
+  <entry key="340">plik o tej nazwie istnieje, proszę wybrac inną nazwę pliku</entry>
+  <entry key="341">nazwa pliku za krótka</entry>
+  <entry key="342">Nie mogłem zapisać adresu</entry>
+  <entry key="343">Dodano użytkownika, ale należy go przypisać do organizacji, bo w innym przypadku nie będzie mógł się zalogować.</entry>
+  <entry key="344">Nowy wpis</entry>
+  <entry key="345">Nie ma pola o takim identyfikatorze.</entry>
+  <entry key="346">To pole nie ma etykiety.</entry>
+  <entry key="347">Potrzebne zezwolenie administratora</entry>
+  <entry key="348">Edytor języka</entry>
+  <entry key="349">Język</entry>
+  <entry key="350">ID-etykiety</entry>
+  <entry key="351">Nazwa etykiety</entry>
+  <entry key="352">Wartość</entry>
+  <entry key="353">Wartości pola</entry>
+  <entry key="354">Nazwa etykiety</entry>
+  <entry key="355">Wartość etykiety</entry>
+  <entry key="356">ID-etykiety</entry>
+  <entry key="357">Skasowałeś tylko etykietę, a nie pole! Nie możesz skasować pola, może mieć etykiety w innych językach.</entry>
+  <entry key="358">Niepoprawne ID etykiety. FieldLanguagesvalues_Id nie zostało znalezione w bazie.</entry>
+  <entry key="359">Nie można skasować tego pola. Można kasować tylko etykiety, a nie pola. Obecnie brak etykiety. Albo nie wskazano żadnego pola, albo to pole nie ma etykiety w języku, któty edytujesz.</entry>
+  <entry key="360">eksport</entry>
+  <entry key="361">Musisz się przelogować, aby zobaczyć zmiany.</entry>
+  <entry key="362">Dodaj nowy język</entry>
+  <entry key="363">skasuj język</entry>
+  <entry key="364">Dodaj nowy język</entry>
+  <entry key="365">Nazwa</entry>
+  <entry key="366">dodaj język</entry>
+  <entry key="367">Kopia zapasowa</entry>
+  <entry key="368">pierwszy</entry>
+  <entry key="369">poprzedni</entry>
+  <entry key="370">następny</entry>
+  <entry key="371">ostatni</entry>
+  <entry key="372">użytkownik mówi (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">włącz/wyłącz dźwięk</entry>
+  <entry key="374">System</entry>
+  <entry key="375">Twoje ustawienia</entry>
+  <entry key="376">cześć,</entry>
+  <entry key="377">Edytuj swój profil</entry>
+  <entry key="378">Nowe wiadomości:</entry>
+  <entry key="379">Prześlij nowy obrazek</entry>
+  <entry key="380">Dane użytkowników - eksport</entry>
+  <entry key="381">Wszystkie organizacje muszą już istnieć!</entry>
+  <entry key="382">rozpocznij eksport</entry>
+  <entry key="383">wg organizacji</entry>
+  <entry key="384">rozpocznij eksport</entry>
+  <entry key="385">Dane użytkowników - import</entry>
+  <entry key="386">wskaż users.xml</entry>
+  <entry key="387">importuj</entry>
+  <entry key="388">Eksport do XML-a. Te pliki mogą być użyte:&lt;br/&gt; - jako twój wkład do projektu - do zaimportowania do innego systemu&lt;br/&gt; - jako kopia zapasowa - do dostosowania komunikatów do swoich potrzeb&lt;br/&gt; - do umieszczenia w katalogu z plikami językowymi przed kolejną instalacją</entry>
+  <entry key="389">Wskaż plik językowy do zaimportowania. &lt;br/&gt;Wybierz język z listy! &lt;br/&gt;Nie ważne jaka jest nazwa pliku, &lt;br/ &gt;zostanie on zaimportowany do tego języka!</entry>
+  <entry key="390">import - wskaż plik</entry>
+  <entry key="391">Zapisz jako</entry>
+  <entry key="392">Nazwa:</entry>
+  <entry key="393">Komentarz:</entry>
+  <entry key="394">zapisz</entry>
+  <entry key="395">Nagrania</entry>
+  <entry key="396">Przeglądarka nagrań</entry>
+  <entry key="397">Nagrania z pokojów publicznych i prywatnych</entry>
+  <entry key="398">Użytkownicy:</entry>
+  <entry key="399">Dołączyli:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Użytkownicy w tym pokoju:</entry>
+  <entry key="402">odśwież</entry>
+  <entry key="403">Pokój jest pełny. Zajrzyj za parę minut.</entry>
+  <entry key="404">kliknij na pokój, aby zobaczyć szczegóły</entry>
+  <entry key="405">Czatuj z użytkownikami tego pokoju:</entry>
+  <entry key="406">Pokój:</entry>
+  <entry key="407">Użytkownicy w tym pokoju:</entry>
+  <entry key="408">od:</entry>
+  <entry key="409">odtwórz nagranie</entry>
+  <entry key="410">Długość:</entry>
+  <entry key="411">Data:</entry>
+  <entry key="412">Nie możesz tu nic zmieniać. To jest nagranie!</entry>
+  <entry key="413">Odtwarzaj to nagranie</entry>
+  <entry key="414">Odtwarzaj / Pauza</entry>
+  <entry key="415">Rozpocznij nagrywanie</entry>
+  <entry key="416">zakończ nagrywanie</entry>
+  <entry key="417">Nagrywanie:</entry>
+  <entry key="418">Już ktoś to w tej chwili nagrywa:</entry>
+  <entry key="419">Nagrywane przez użytkownika:</entry>
+  <entry key="420">anuluj</entry>
+  <entry key="421">Nagrywanie zostanie anulowane i nie będzie zapisane.</entry>
+  <entry key="422">kontynuuj</entry>
+  <entry key="423">Zamknij to okno i powróć do nagrywania</entry>
+  <entry key="424">zmień kolor linii</entry>
+  <entry key="425">Wybierz kolor</entry>
+  <entry key="426">Wyłącz / Włącz kolor linii</entry>
+  <entry key="427">zmień kolor wypełnienia</entry>
+  <entry key="428">Wyłącz / Włącz kolor wypełnienia</entry>
+  <entry key="429">Zmień grubość linii</entry>
+  <entry key="430">zamknij</entry>
+  <entry key="431">zmień rozmiar czcionki</entry>
+  <entry key="432">Skasuj nagranie</entry>
+  <entry key="433">Gość</entry>
+  <entry key="434">Przez:</entry>
+  <entry key="435">Nazwa</entry>
+  <entry key="436">Pokój</entry>
+  <entry key="437">Data</entry>
+  <entry key="438">anuluj</entry>
+  <entry key="439">start</entry>
+  <entry key="440">Nazwa</entry>
+  <entry key="441">Data</entry>
+  <entry key="442">Skasuj transkrypt czatu</entry>
+  <entry key="443">Czat</entry>
+  <entry key="444">wyślij wiadomość</entry>
+  <entry key="445">Emotikony</entry>
+  <entry key="446">Emotikony</entry>
+  <entry key="447">Wybierz udostępniane urządzenia</entry>
+  <entry key="448">Dźwięk and Wideo</entry>
+  <entry key="449">Tylko dźwięk</entry>
+  <entry key="450">Tylko obraz</entry>
+  <entry key="451">bez transmisji Audio/Wideo (statyczny obrazek)</entry>
+  <entry key="452">Nie będzie transmisji audio/wideo z twojego komputera. Zamiast tego zostanie pokazany obrazek (awatar) z twojego profilu. Wybierz te ustawienia, jeśli masz problemy z przepustowością lub bardzo wolne łącze internetowe.</entry>
+  <entry key="453">PO</entry>
+  <entry key="454">WT</entry>
+  <entry key="455">ŚR</entry>
+  <entry key="456">CZ</entry>
+  <entry key="457">PT</entry>
+  <entry key="458">SO</entry>
+  <entry key="459">ND</entry>
+  <entry key="460">Poniedziałek</entry>
+  <entry key="461">Wtorek</entry>
+  <entry key="462">Środa</entry>
+  <entry key="463">Czwartek</entry>
+  <entry key="464">Piątek</entry>
+  <entry key="465">Sobota</entry>
+  <entry key="466">Niedziela</entry>
+  <entry key="467">TY</entry>
+  <entry key="468">Tydzień kalendarzowy</entry>
+  <entry key="469">Styczeń</entry>
+  <entry key="470">Luty</entry>
+  <entry key="471">Marzec</entry>
+  <entry key="472">Kwiecień</entry>
+  <entry key="473">Maj</entry>
+  <entry key="474">Czerwiec</entry>
+  <entry key="475">Lipiec</entry>
+  <entry key="476">Sierpień</entry>
+  <entry key="477">Wrzesień</entry>
+  <entry key="478">Październik</entry>
+  <entry key="479">Listopad</entry>
+  <entry key="480">Grudzień</entry>
+  <entry key="481">Kalendarz</entry>
+  <entry key="482">Uczetnicy</entry>
+  <entry key="483">Pokaż ustawienia wyglądu</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Szerokość | Wysokość</entry>
+  <entry key="486">Kontener wideo</entry>
+  <entry key="487">Kontener moderacji</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Kontener tablicy</entry>
+  <entry key="490">Włączony</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Szerokość | Wysokość</entry>
+  <entry key="493">Kontener plików, czatu, uczestników</entry>
+  <entry key="494">Włączony</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Szerokość | Wysokość</entry>
+  <entry key="497">Moderator wyszedł z pokoju. Nikt obecnie nie przeprowadza prezentacji. Możesz wystąpić z wnioskiem o zostanie moderatorem, albo poczekać.</entry>
+  <entry key="498">W pokoju nie ma moderatora, ale są uczestnicy. Możesz wystąpić z wnioskiem o zostanie moderatorem, albo poczekać.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Zaproszenie</entry>
+  <entry key="501">Wiadomość od użytkownika:</entry>
+  <entry key="502">Wiadomość:</entry>
+  <entry key="503">Kliknij na link, aby wziąć udział w spotkaniu:</entry>
+  <entry key="504">Kliknij tu, any wejść do pokoju</entry>
+  <entry key="505">jeśli masz kłopot z linkiem, skopiuj go i wklej do paska adresu w przeglądarce:</entry>
+  <entry key="506">{0} Zapisy</entry>
+  <entry key="507">Twoje dane użytkownika:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Hasło:</entry>
+  <entry key="510">e-mail:</entry>
+  <entry key="511">Zespół {0}</entry>
+  <entry key="512">{0} Zapisy</entry>
+  <entry key="513">{0} - zmiana hasła</entry>
+  <entry key="514">Kliknij na ten link, aby wprowadzić nowe hasło:</entry>
+  <entry key="515">Kliknij tutaj, aby wprowadzić nowe hasło</entry>
+  <entry key="516">jeśli masz kłopot z linkiem, skopiuj go i wklej do paska adresu w przeglądarce:</entry>
+  <entry key="517">{0} Zmiana hasła</entry>
+  <entry key="518">Proszę wprowadzić poprawną datę, np. 24.12.2001 (dd.mm.rrrr)</entry>
+  <entry key="519">Proszę wprowadzić poprawny adres e-mail, np. name@mail.com</entry>
+  <entry key="520">Proszę wpisać liczbę dziesiętną, np. 1.00</entry>
+  <entry key="521">Proszę wpisać liczbę całkowitą, np. 100</entry>
+  <entry key="522">Proszę wpisać poprawny numer telefonu, np. +48 12 1234567</entry>
+  <entry key="523">Proszę wpisać poprawny czas, np. 12:23 (gg:mm)</entry>
+  <entry key="524">Zabezpieczone hasłem</entry>
+  <entry key="525">Hasło</entry>
+  <entry key="526">Okres ważności</entry>
+  <entry key="527">Nieskończony</entry>
+  <entry key="528">Okres</entry>
+  <entry key="529">Jednorazowe</entry>
+  <entry key="530">Ważne od:</entry>
+  <entry key="531">Ważne do:</entry>
+  <entry key="532">Zaproszenie do {0}</entry>
+  <entry key="533">Nie ma zaproszenia z takim kodem</entry>
+  <entry key="534">To zaproszenie było już uzyte. Ten rodzaj zaproszenia nie może być wykorzystany powtórnie.</entry>
+  <entry key="535">Ten kod zaproszenia jest nieważny.</entry>
+  <entry key="536">Hasło:</entry>
+  <entry key="537">Sprawdź hasło</entry>
+  <entry key="538">Niepoprawne hasło!</entry>
+  <entry key="539">Audio_Wideo</entry>
+  <entry key="540">Synchronizuj Audio/Wideo</entry>
+  <entry key="541">Zalogowanie było poprawne, ale podana sesja nie jest aktywna lub przechowywana na serwerze. Musisz otrzymać nowy identyfikator sesji i potórzyć logowanie.</entry>
+  <entry key="542">Ten identyfikator sesji nie jest zalogowany, albo nie ma uprawnień administratorskich. Brama SOAP wymaga użytkownika o uprawnieniach administratora do zamieszczania nowych użytkowników.</entry>
+  <entry key="543">Ta sesja nie ma przyłaczonych danych użytkownika. Albo nie wuwołałeś poprawnie bramy SOAP przed dostępem do aplikacji, albo używasz niewłaściwego identyfikatora sesji.</entry>
+  <entry key="544">Nagrywanie jest obecnie w fazie BETA testów!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">oś-x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">oś-y</entry>
+  <entry key="549">s</entry>
+  <entry key="550">szerokość</entry>
+  <entry key="551">w</entry>
+  <entry key="552">wysokość</entry>
+  <entry key="553">Zmień przezroczystość</entry>
+  <entry key="554">Otwórz przeglądarkę</entry>
+  <entry key="555">Zamknij przeglądarkę</entry>
+  <entry key="556">Utracono połączenie z serwerem. Przeładuj aplikację lub sprawdź swoje połaczenie sieciowe.</entry>
+  <entry key="557">Wskaźnik</entry>
+  <entry key="558">Synchronizuję</entry>
+  <entry key="559">Synchronizuję użytkowników, proszę czekać</entry>
+  <entry key="560">&lt;u&gt;Pobierz jako SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Pobierz jako PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Pobierz jako JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Pobierz jako PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Pobierz jako TIF&lt;/u&gt;</entry>
+  <entry key="565">Typ zaproszenia:</entry>
+  <entry key="566">Kategoria:</entry>
+  <entry key="567">Powtarzanie:</entry>
+  <entry key="568">brak</entry>
+  <entry key="569">lokalizacja:</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">Koniec</entry>
+  <entry key="572">Tytuł:</entry>
+  <entry key="573">Komentarz:</entry>
+  <entry key="574">Zaproś ludzi</entry>
+  <entry key="575">Codziennie</entry>
+  <entry key="576">Co miesiąc</entry>
+  <entry key="577">Co roku</entry>
+  <entry key="578">Koniec okresu jest przed jego początkiem!</entry>
+  <entry key="579">Proszę podać tytuł!</entry>
+  <entry key="580">PDL</entry>
+  <entry key="581">Włącz to, jeśli piszesz od prawej do lewej</entry>
+  <entry key="582">Tablica rozdzielcza</entry>
+  <entry key="583">Oglądaj nagrane spotkavia i wykłady</entry>
+  <entry key="584">Spotkanie - konferencja z 4 (do 16) użytkownikami&lt;br/ &gt;każdy ma możliwość nadawania audio/wideo</entry>
+  <entry key="585">Wykład - konferencja do 200 uczestników&lt;br/&gt;Tylko moderator może nadawać audio/wideo</entry>
+  <entry key="586">Utwórz użytkowników, pokoje, organizacje&lt;br/&gt; + zmień konfigurację</entry>
+  <entry key="587">Użytkownicy w tym pokoju</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Wczytuję dokument. Proszę czekać na zsynchronizowanie stacji klienckich.</entry>
+  <entry key="592">Przesyłanie zakończone, przeprowadzam konwersję dokumentu ...</entry>
+  <entry key="593">Zacznij przesyłanie</entry>
+  <entry key="594">Przesyłanie i import. Proszę wybrać plik z dysku.</entry>
+  <entry key="595">Anuluj</entry>
+  <entry key="596">Wybierz plik</entry>
+  <entry key="597">Połączenia</entry>
+  <entry key="598">Wartość</entry>
+  <entry key="599">ID strumienia</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Połączony od</entry>
+  <entry key="602">Pokój / zakres</entry>
+  <entry key="603">Wyrzuć użytkownika</entry>
+  <entry key="604">Wyrzuć użytkownika</entry>
+  <entry key="605">Czy chcesz wyrzucić (rozłączyć) połączenie tego użytkownika? &lt;br/&gt; Wyrzucisz użytkownika z pokoju, ale może on się powtórnie zalogować.</entry>
+  <entry key="606">Połączenie przerwane przez administratora lub moderatora.</entry>
+  <entry key="607">Telefon</entry>
+  <entry key="608">Użytkownik jest moderatorem tego pokoju</entry>
+  <entry key="609">Użytkownik ma prawo do rysowania na tablicy</entry>
+  <entry key="610">(Re)startuj Audio/Wideo zmień ustawienia urządzeń</entry>
+  <entry key="611">Pozwól temu użytkownikowi rysować na tablicy</entry>
+  <entry key="612">Zabierz temu użytkownikowi prawo do rysowania na tablicy</entry>
+  <entry key="613">Użytkownicy</entry>
+  <entry key="614">Pliki</entry>
+  <entry key="615">Tablica</entry>
+  <entry key="616">Czat</entry>
+  <entry key="617">Twoje konto jest przypisane do kilku organizacji. Proszę wybrać jedną z nich na potrzeby bieżącej sesji.</entry>
+  <entry key="618">Ten pokój jest chwilowo pełny. Zajrzyj później.</entry>
+  <entry key="619">Rodzaj pokoju</entry>
+  <entry key="620">Pokój spotkań</entry>
+  <entry key="621">Czas serwera</entry>
+  <entry key="622">{0} - przypomnienie</entry>
+  <entry key="623">Wiadomość od użytkownika:</entry>
+  <entry key="624">Wiadomość:</entry>
+  <entry key="625">Kliknij na ten link, aby wziąć udział w spotkaniu:</entry>
+  <entry key="626">Kliknij tutaj, aby wejść do pokoju</entry>
+  <entry key="627">jeśli masz kłopot z linkiem, skopiuj go i wklej do paska adresu w przeglądarce:</entry>
+  <entry key="628">wyszukiwanie wewnętrzne</entry>
+  <entry key="629">zewnętrzni użytkownicy</entry>
+  <entry key="630">pre-nazwa</entry>
+  <entry key="631">nazwa</entry>
+  <entry key="632">e-mail</entry>
+  <entry key="633">potwierdź wylogowanie</entry>
+  <entry key="634">Wylogowanie. Jesteś pewien?</entry>
+  <entry key="635">Działania</entry>
+  <entry key="636">Pokój demo</entry>
+  <entry key="637">Czas demonstracji</entry>
+  <entry key="638">Zegar spotkania</entry>
+  <entry key="639">Ten pokój jest pokojem demo. Aby wyłączyć to ostrzeżenie utwórz prywatny pokój spotkań, dla własnego użytku, albo postaw własny serwer. Zostaniesz wylogowany automatycznie za:</entry>
+  <entry key="640">Moderowany</entry>
+  <entry key="641">Poczekaj, aż moderator wejdzie do pokoju. Moderatorem może być wykładowca, administrator lub twórca tego pokoju.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Pojawia się udostępniony ekran</entry>
+  <entry key="644">Pojawia się nowy ekran udostępniony przez:</entry>
+  <entry key="645">Rozpocznij udostępnianie</entry>
+  <entry key="646">Dodaj nowe spotkanie</entry>
+  <entry key="647">Pokój spotkań</entry>
+  <entry key="648">Sala wykładowa</entry>
+  <entry key="649">Moderacja</entry>
+  <entry key="650">Moderuj użytkowników</entry>
+  <entry key="651">Moderuj pokoje</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Czy chcesz aby użytkownik został moderatorem tej organizacji?</entry>
+  <entry key="654">Proszę wskazać organizację, zanim spróbujesz przypisać do niej użytkownika!</entry>
+  <entry key="655">Organizacja - Moderator</entry>
+  <entry key="656">Czy rzeczywiście chcesz usunąć użytkownika z organizacji?</entry>
+  <entry key="657">Ten użytkownik jest moderatorem</entry>
+  <entry key="658">Ten użytkownik nie jest moderatorem</entry>
+  <entry key="659">Czy chcesz aby użytkownik nie był moderatorem tej organizacji?</entry>
+  <entry key="660">Dodawaj i kasuj użytkowników i pokoje w swojej organizacji</entry>
+  <entry key="661">Czy rzeczywiście chcesz skasować ten wpis?</entry>
+  <entry key="662">Czy rzeczywiście chcesz usunąć użytkownika z organizacji? Usuniesz tylko powiązanie użytkownika z tą organizacją. Aby rzeczywiście usunąć samego użytkownika, musisz zalogować się do panelu administratorskiego.</entry>
+  <entry key="663">Nie możesz usunąć samego siebie!</entry>
+  <entry key="664">Ta metoda wymaga użycia konta administratorskiego!</entry>
+  <entry key="665">Nie ma sesji powiązanym z tym ID.</entry>
+  <entry key="666">To jest konto administratora lub moderatora. Możesz etdytować to konto tylko poprzez panel administracyjny.</entry>
+  <entry key="667">Aby dokończyć rejestrację proszę kliknąć na link, albo skopiować URL do paska adresu w przeglądarce internetowej.</entry>
+  <entry key="668">Kliknij tu, aby potwierdzić e-mail</entry>
+  <entry key="669">Nie znaleziono użytkownika dla tego kodu.</entry>
+  <entry key="670">Ten użytkownik już jest zaktywowany!</entry>
+  <entry key="671">Poprawnie aktywowałe(a)ś swoje konto!</entry>
+  <entry key="672">Zaloguj się</entry>
+  <entry key="673">Twoje konto nie zostało aktywowane. Najpierw musisz kliknąć na link w e-mailu, który otrzymałeś podczas rejestracji.</entry>
+  <entry key="674">Poprawnie się zapisałe(a)ś. Wysłaliśmy Ci e-mail z kodem potwierdzającym. Proszę sprawdź swoją skrzynkę.</entry>
+  <entry key="675">Zabierz prawa moderatora temu użytkownikowi</entry>
+  <entry key="676">Nadaj prawa moderatora temu użytkownikowi</entry>
+  <entry key="677">Użytkownik</entry>
+  <entry key="678">Dostęp do tablicy</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderacja: Proszę wybrać użytkownika z listy, aby nadać mu prawa dostępu do tablicy, moderacji lub przesyłania wideo.</entry>
+  <entry key="681">Ten użytkownik jest już moderatorem, więc automatycznie ma prawa do rysowania na tablicy.</entry>
+  <entry key="682">To ty! Nie możesz odebrać praw moderatora samemu sobie.</entry>
+  <entry key="683">Zezwól użytkownikowi przesyłać jego głos i obraz wideo</entry>
+  <entry key="684">Usuń głos i wideo tego użytkownika</entry>
+  <entry key="685">Chciał(a)bym otrzymać prawa moderatora tego pokoju</entry>
+  <entry key="686">Chciał(a)bym otrzymać prawo do rysowania na tablicy</entry>
+  <entry key="687">Cciał(a)bym przesyłać głos i obraz wideo</entry>
+  <entry key="688">Jesteś moderatorem tego pokoju</entry>
+  <entry key="689">Masz prawo rysować na tablicy</entry>
+  <entry key="690">Możesz transmitować dźwięk i obraz wideo</entry>
+  <entry key="691">Wiadomość dla moderatora</entry>
+  <entry key="692">Użytkownik</entry>
+  <entry key="693">chciałby otrzymać prawa moderatorskie. Użyj ikonki statusu przy użytkowniku na liście, aby dać lub odebrać mu prawo moderacji.</entry>
+  <entry key="694">rysować na tablicy. Użyj ikonki statusu przy użytkowniku na liście, aby dać lub odebrać mu prawo do rysowania na tablicy.</entry>
+  <entry key="695">chciałby transmitować swój głos i obraz wideo. Użyj ikonki statusu przy użytkowniku na liście, aby dać lub odebrać mu prawo do transmitowania głosu i obrazu wideo.</entry>
+  <entry key="696">Musisz poczekać, aż moderator wejdzie do pokoju.</entry>
+  <entry key="697">Anuluj</entry>
+  <entry key="698">Zapisz</entry>
+  <entry key="699">Dzień</entry>
+  <entry key="700">Miesiąc</entry>
+  <entry key="701">Rok</entry>
+  <entry key="702">Prześlij plik</entry>
+  <entry key="703">Nowy filder</entry>
+  <entry key="704">Odśwież</entry>
+  <entry key="705">Śmietnik</entry>
+  <entry key="706">Moje pliki</entry>
+  <entry key="707">Pliki publiczne (dla pokoju)</entry>
+  <entry key="708">Nowy plik</entry>
+  <entry key="709">Nowy folder</entry>
+  <entry key="710">Skasuj folder</entry>
+  <entry key="711">Zmień nazwę</entry>
+  <entry key="712">Nowy folder</entry>
+  <entry key="713">Jesteś pewien, że chcesz to skasować?</entry>
+  <entry key="714">Szukaj</entry>
+  <entry key="715">Szukaj</entry>
+  <entry key="716">Otwórz dokument</entry>
+  <entry key="717">Pokarz pliki (widok drzewa)</entry>
+  <entry key="718">Zamknij dokument</entry>
+  <entry key="719">Skasuj plik</entry>
+  <entry key="720">Testy</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_pt.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
new file mode 100644
index 0000000..06f4233
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_pt.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Conferência</entry>
+  <entry key="2">Reunião</entry>
+  <entry key="3">Auditório</entry>
+  <entry key="4">Configurações</entry>
+  <entry key="5">Usuário</entry>
+  <entry key="6">Administração</entry>
+  <entry key="7">Parar</entry>
+  <entry key="8">Gravar</entry>
+  <entry key="9">Nenhum arquivo disponível</entry>
+  <entry key="10">Admissão disponível apenas para professores</entry>
+  <entry key="11">Usuários conectados:</entry>
+  <entry key="12">Iniciar uma conferência</entry>
+  <entry key="13">Meu nome:</entry>
+  <entry key="14">VideoConferência</entry>
+  <entry key="15">Importar apresentação</entry>
+  <entry key="16">Atualizar lista</entry>
+  <entry key="17">Zum Hauptverzeichnis</entry>
+  <entry key="18">nova enquete</entry>
+  <entry key="19">Uma nova enquete para conferência.</entry>
+  <entry key="20">Pergunta:</entry>
+  <entry key="21">Tipo de enquete:</entry>
+  <entry key="22">Criar</entry>
+  <entry key="23">Info: Cada usuário conectado recebe uma menssagem com a nova enquete.</entry>
+  <entry key="24">Criar uma enquete</entry>
+  <entry key="25">Cancelar</entry>
+  <entry key="26">Sim/Não</entry>
+  <entry key="27">Numérico 1-10</entry>
+  <entry key="28">Enquete</entry>
+  <entry key="29">Eles podem ser moderadores/professores nessa área de enquetes</entry>
+  <entry key="30">Seu voto foi registrado.</entry>
+  <entry key="31">Você já votou nessa enquete.</entry>
+  <entry key="32">Votar !</entry>
+  <entry key="33">Sua resposta:</entry>
+  <entry key="34">Sim</entry>
+  <entry key="35">Não</entry>
+  <entry key="36">Quer saber:</entry>
+  <entry key="37">Resultados da enquete</entry>
+  <entry key="38">Pergunta:</entry>
+  <entry key="39">Resultados:</entry>
+  <entry key="40">Respostas:</entry>
+  <entry key="41">Nenhuma enquete foi iniciada.</entry>
+  <entry key="42">Votar!</entry>
+  <entry key="43">Reunião (máximo 4 assentos)</entry>
+  <entry key="44">Conference (máximo 50 assentos)</entry>
+  <entry key="45">Tipo</entry>
+  <entry key="46">Outros assentos</entry>
+  <entry key="47">Já escolhido</entry>
+  <entry key="48">entrar</entry>
+  <entry key="49">O moderaror saiu da reunião.</entry>
+  <entry key="50">Informações do sistema</entry>
+  <entry key="51">Escolher dispositívo</entry>
+  <entry key="52">Escolher webcam:</entry>
+  <entry key="53">Escolher microfone:</entry>
+  <entry key="54">ok</entry>
+  <entry key="55">cancelar</entry>
+  <entry key="56">Você precisa reconectar.</entry>
+  <entry key="57">Editar configurações.</entry>
+  <entry key="58">Curso:</entry>
+  <entry key="59">Idioma:</entry>
+  <entry key="60">ok</entry>
+  <entry key="61">cancelar</entry>
+  <entry key="62">Limpar a lousa.</entry>
+  <entry key="63">Você quer que a lousa seja apagada antes que uma figura seja adicionada ?</entry>
+  <entry key="64">Não perguntar de novo.</entry>
+  <entry key="65">Não</entry>
+  <entry key="66">Editar configurações</entry>
+  <entry key="67">Confirmação de requisição antes de limpar a lousa.</entry>
+  <entry key="68">Informações do usuário</entry>
+  <entry key="69">Limpar área de desenho</entry>
+  <entry key="70">Desfazer</entry>
+  <entry key="71">Refazer</entry>
+  <entry key="72">Selecionar um objeto</entry>
+  <entry key="73">Texto</entry>
+  <entry key="74">Pintura</entry>
+  <entry key="75">Desenhar linha</entry>
+  <entry key="76">Desenhar sublinha</entry>
+  <entry key="77">Retângulo</entry>
+  <entry key="78">Elipse</entry>
+  <entry key="79">Seta</entry>
+  <entry key="80">excluir ítem selecionado</entry>
+  <entry key="81">Aplicar para moderação</entry>
+  <entry key="82">Aplicar</entry>
+  <entry key="83">fechar</entry>
+  <entry key="84">Tornar-se moderador</entry>
+  <entry key="85">fechar</entry>
+  <entry key="86">italic</entry>
+  <entry key="87">negrito</entry>
+  <entry key="88">AGUARDANDO</entry>
+  <entry key="89">Um usuário quer se tornar moderador:</entry>
+  <entry key="90">aceitar</entry>
+  <entry key="91">rejeitar</entry>
+  <entry key="92">cancelar</entry>
+  <entry key="93">Enviando requisição para os seguintes usuários</entry>
+  <entry key="94">Aceito</entry>
+  <entry key="95">Rejeitado</entry>
+  <entry key="96">Mudar moderador</entry>
+  <entry key="97">Você não está moderando este curso!</entry>
+  <entry key="98">Moderador:</entry>
+  <entry key="99">A sala está lotada. Por favor tente novamente mais tarde.</entry>
+  <entry key="100">Elipse</entry>
+  <entry key="101">fechar</entry>
+  <entry key="102">erro na entrada de dados</entry>
+  <entry key="103">nome do usuårio deve ter no mínimo 4 letras</entry>
+  <entry key="104">senha deve ter no mínimo 4 letras</entry>
+  <entry key="105">Nome de usuário já existente</entry>
+  <entry key="106">O email já foi registrado.</entry>
+  <entry key="107">Erro no sistema, por favor, contacte os administradores.</entry>
+  <entry key="108">Login</entry>
+  <entry key="109">Usuário:</entry>
+  <entry key="110">Senha:</entry>
+  <entry key="111">idioma</entry>
+  <entry key="112">Login</entry>
+  <entry key="113">Sign Up</entry>
+  <entry key="114">Usuário:</entry>
+  <entry key="115">Senha:</entry>
+  <entry key="116">Re-digite:</entry>
+  <entry key="117">Primeiro nome:</entry>
+  <entry key="118">Último nome:</entry>
+  <entry key="119">E-Mail:</entry>
+  <entry key="120">País:</entry>
+  <entry key="121">Registrar</entry>
+  <entry key="122">cancelar</entry>
+  <entry key="123">Registrar</entry>
+  <entry key="124">home</entry>
+  <entry key="125">Usuários</entry>
+  <entry key="126">Grupos</entry>
+  <entry key="127">Organizações</entry>
+  <entry key="128">Salas de Conferência</entry>
+  <entry key="129">público</entry>
+  <entry key="130">organização</entry>
+  <entry key="131">entrar</entry>
+  <entry key="132">Login</entry>
+  <entry key="133">Senha</entry>
+  <entry key="134">Re-digite</entry>
+  <entry key="135">Primeiro nome</entry>
+  <entry key="136">Último nome</entry>
+  <entry key="137">E-Mail</entry>
+  <entry key="138">Aniversário</entry>
+  <entry key="139">Rua/No</entry>
+  <entry key="140">CEP/Cidade</entry>
+  <entry key="141">País</entry>
+  <entry key="142">Endereço</entry>
+  <entry key="143">Dados do usuário</entry>
+  <entry key="144">salvar</entry>
+  <entry key="145">Salvar</entry>
+  <entry key="146">ID DO USUÁRIO</entry>
+  <entry key="147">login</entry>
+  <entry key="148">primeiro nome</entry>
+  <entry key="149">último nome</entry>
+  <entry key="150">mostrar próximo</entry>
+  <entry key="151">mostrar anterior</entry>
+  <entry key="152">excluir registro</entry>
+  <entry key="153">cancelar</entry>
+  <entry key="154">excluir</entry>
+  <entry key="155">novo registro</entry>
+  <entry key="156">atualizar registro</entry>
+  <entry key="157">excluir registro</entry>
+  <entry key="158">status</entry>
+  <entry key="159">desabilitado</entry>
+  <entry key="160">habilitado</entry>
+  <entry key="161">organizações</entry>
+  <entry key="162">calendário</entry>
+  <entry key="163">fechar</entry>
+  <entry key="164">ID da Organização</entry>
+  <entry key="165">nome</entry>
+  <entry key="166">usuário</entry>
+  <entry key="167">mod</entry>
+  <entry key="168">admin</entry>
+  <entry key="169">nível do usuário</entry>
+  <entry key="170">organização</entry>
+  <entry key="171">nome</entry>
+  <entry key="172">adicionar organização</entry>
+  <entry key="173">adicionar organização</entry>
+  <entry key="174">cancelar</entry>
+  <entry key="175">adicionar</entry>
+  <entry key="176">remover organização</entry>
+  <entry key="177">usuário</entry>
+  <entry key="178">adicionar usuário</entry>
+  <entry key="179">excluir usuário</entry>
+  <entry key="180">adicionar usuário</entry>
+  <entry key="181">procurar usuário</entry>
+  <entry key="182">procurar</entry>
+  <entry key="183">usuário</entry>
+  <entry key="184">organização</entry>
+  <entry key="185">entrar</entry>
+  <entry key="186">salas de conferência</entry>
+  <entry key="187">Salas de conferência</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Nome</entry>
+  <entry key="190">público</entry>
+  <entry key="191">organizações</entry>
+  <entry key="192">Salas de conferência</entry>
+  <entry key="193">nome</entry>
+  <entry key="194">tipo</entry>
+  <entry key="195">público</entry>
+  <entry key="196">comentário</entry>
+  <entry key="197">salvar</entry>
+  <entry key="198">abrir</entry>
+  <entry key="199">salvar como</entry>
+  <entry key="200">nome do arquivo</entry>
+  <entry key="201">nome do arquivo</entry>
+  <entry key="202">cancelar</entry>
+  <entry key="203">salvar</entry>
+  <entry key="204">erro</entry>
+  <entry key="205">carregando</entry>
+  <entry key="206">objetos carregados</entry>
+  <entry key="207">sincronizando clientes, clientes a esperar:</entry>
+  <entry key="208">Carregando imagem</entry>
+  <entry key="209">sincronizando clientes, clientes a esperar:</entry>
+  <entry key="210">limpar área de desenho</entry>
+  <entry key="211">limpar área de desenho, todos os dados da lousa serão perdidos</entry>
+  <entry key="212">Confirme antes de carregar o arquivo</entry>
+  <entry key="213">Enviar convite</entry>
+  <entry key="214">Enviar convite</entry>
+  <entry key="215">Assunto</entry>
+  <entry key="216">Destinatário</entry>
+  <entry key="217">Mensagem</entry>
+  <entry key="218">Enviar</entry>
+  <entry key="219">cancelar</entry>
+  <entry key="220">enviar</entry>
+  <entry key="221">Dados do usuário</entry>
+  <entry key="222">Seu apelido para essa conferência</entry>
+  <entry key="223">apelido</entry>
+  <entry key="224">primeiro nome</entry>
+  <entry key="225">último nome</entry>
+  <entry key="226">email</entry>
+  <entry key="227">idioma</entry>
+  <entry key="228">entrar</entry>
+  <entry key="229">Carregando</entry>
+  <entry key="230">Carregando dados, por favor aguarde!</entry>
+  <entry key="231">Senha Incorreta</entry>
+  <entry key="232">Por favor digite dois passwords idênticos com pelo menos 6 caracteres</entry>
+  <entry key="233">Email Incorreto</entry>
+  <entry key="234">Voê digitou um endereço de email inválido.</entry>
+  <entry key="235">Cadastro completo</entry>
+  <entry key="236">Sua conta foi criada. Você pode fazer o login agora.</entry>
+  <entry key="237">Você não pode compartilhar sua tela agora. Alguem já compartilhou a tela.</entry>
+  <entry key="238">Compartilhamento perdido</entry>
+  <entry key="239">Compartilhe sua tela</entry>
+  <entry key="240">Falha na transmissão: Você não está apto a sincronizar a tela. Frames serão perdidos. Caso esse aviso tenha sido mostrado cedo você pode pedir ao moderador para reduzir a qualidade.</entry>
+  <entry key="241">Tela de:</entry>
+  <entry key="242">Desenhar</entry>
+  <entry key="243">Documento</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Arquivos</entry>
+  <entry key="246">Membros</entry>
+  <entry key="247">Download do documeto original</entry>
+  <entry key="248">Download do pdf</entry>
+  <entry key="249">Carregar apresentação no quadro</entry>
+  <entry key="250">Configuração</entry>
+  <entry key="251">Arrastar esse objeto</entry>
+  <entry key="252">Redimensionar esse objeto</entry>
+  <entry key="253">%</entry>
+  <entry key="254">de</entry>
+  <entry key="255">Ir para primeira página</entry>
+  <entry key="256">Ir para página anterior</entry>
+  <entry key="257">Ir para a próxima página</entry>
+  <entry key="258">Ir para a última página</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">Sr.</entry>
+  <entry key="262">Sra.</entry>
+  <entry key="263">Configuração</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Chave</entry>
+  <entry key="266">Configuração</entry>
+  <entry key="267">Chave</entry>
+  <entry key="268">última atualização</entry>
+  <entry key="269">atualizado por</entry>
+  <entry key="270">comentário</entry>
+  <entry key="271">chave</entry>
+  <entry key="272">de</entry>
+  <entry key="273">Usuários</entry>
+  <entry key="274">excluir usuário da compania</entry>
+  <entry key="275">excluir</entry>
+  <entry key="276">Este usuário já é membro desta companhia.</entry>
+  <entry key="277">Notícias</entry>
+  <entry key="278">Links Rápidos</entry>
+  <entry key="279">Ir para conferência</entry>
+  <entry key="280">Ir para auditório</entry>
+  <entry key="281">Ajuda e suporte</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Reportar um bug!</entry>
+  <entry key="285">mais</entry>
+  <entry key="286">Website do projeto (http://openmeetings.apache.org)</entry>
+  <entry key="287">Lista de emails (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Relembrar Login</entry>
+  <entry key="289">Conteúdo</entry>
+  <entry key="290">Minha Home Page</entry>
+  <entry key="291">My Reuniões Agendadas</entry>
+  <entry key="292">My Eventos Agendados</entry>
+  <entry key="293">Reuniões Públicas</entry>
+  <entry key="294">Reuniões Privadas</entry>
+  <entry key="295">Eventos Públicos</entry>
+  <entry key="296">Eventos Privados</entry>
+  <entry key="297">Conteúdo Público</entry>
+  <entry key="298">Conteúdo Privado</entry>
+  <entry key="299">Conteúdo Pessoal</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderação</entry>
+  <entry key="302">Aplicar para Moderação</entry>
+  <entry key="303">Conjuntos</entry>
+  <entry key="304">Escolha um arquivo</entry>
+  <entry key="305">Configurações</entry>
+  <entry key="306">Configurações de Cam e Mic</entry>
+  <entry key="307">Configurações da lousa</entry>
+  <entry key="308">Sair</entry>
+  <entry key="309">Voltar para salas</entry>
+  <entry key="310">Logout</entry>
+  <entry key="311">Visão Desktop</entry>
+  <entry key="312">iniciar visão Desktop</entry>
+  <entry key="313">Vídeo e Áudio</entry>
+  <entry key="314">Chat</entry>
+  <entry key="315">Lousa</entry>
+  <entry key="316">Moderação</entry>
+  <entry key="317">Arquivos</entry>
+  <entry key="318">Usuários</entry>
+  <entry key="319">Conjuntos</entry>
+  <entry key="320">Não existe usuário conectado a este nome</entry>
+  <entry key="321">Um email contendo um link foi enviado a seu endereço de email, por favor confira sua caixa postal. Se você ainda não tiver recebido um email, por favor ajuste as configurações de spam e remande a confirmação de email.</entry>
+  <entry key="322">Erro</entry>
+  <entry key="323">Mensagem</entry>
+  <entry key="324">Hash inválido. Nenhum usuáio encontrado.</entry>
+  <entry key="325">Reset sua senha</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">alterar senha</entry>
+  <entry key="328">nova senha</entry>
+  <entry key="329">redigite a senha</entry>
+  <entry key="330">As senhas que você digitou não são iguais.</entry>
+  <entry key="331">4 ou mais caracteres; maiúsculas e minúsculas são diferentes!</entry>
+  <entry key="332">Senha configurada. Você pode se logar agora.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Erro desconhecido. Por favor informe isso ao Service-Team.</entry>
+  <entry key="335">Username não encontrado</entry>
+  <entry key="336">Senha inválida</entry>
+  <entry key="337">Desconectado com sucesso</entry>
+  <entry key="338">Cadastro do frontend desabilitado.</entry>
+  <entry key="339">EMail inválido</entry>
+  <entry key="340">nome de arquivo duplicado, por favor escolha outro nome</entry>
+  <entry key="341">nome de arquivo muito curto</entry>
+  <entry key="342">Não foi possível salvar o endereço</entry>
+  <entry key="343">Usuário adicionado mas você precisa associar esse usuário a uma organização, se não ele não estará apto a se associar.</entry>
+  <entry key="344">Novo Registro</entry>
+  <entry key="345">Nenhum campo encontrado com esse id.</entry>
+  <entry key="346">Nenhum Label encontrado para este campo.</entry>
+  <entry key="347">Necessário perfil de administrador</entry>
+  <entry key="348">Editor de idiomas</entry>
+  <entry key="349">Idioma</entry>
+  <entry key="350">Label-ID</entry>
+  <entry key="351">Label-Nome</entry>
+  <entry key="352">Valor</entry>
+  <entry key="353">Fieldvalues</entry>
+  <entry key="354">LabelName</entry>
+  <entry key="355">LabelValue</entry>
+  <entry key="356">Label-ID</entry>
+  <entry key="357">Você apenas deletou o Label NÂO o Field! Você não pode deletar esse Field, podem existir Labels em outros idiomas.</entry>
+  <entry key="358">Labelid inválido. O FieldLanguagesvalues_Id não pode ser encontrado na base de dados.</entry>
+  <entry key="359">Você não pode deletar esse Field. Você pode apenas deletar Labels NÂO Fields. Não existe Label carregado no momento, se nenhum Field for selecionado ou não existir Label para esse idioma para esse Field definido.</entry>
+  <entry key="360">exportar</entry>
+  <entry key="361">Você precisa fazer login novamente para ver as mudanças.</entry>
+  <entry key="362">Adicionar novo idioma</entry>
+  <entry key="363">excluir idioma</entry>
+  <entry key="364">Adicionar novo idioma</entry>
+  <entry key="365">Nome</entry>
+  <entry key="366">adicionar idioma</entry>
+  <entry key="367">Backup</entry>
+  <entry key="368">ir ao primeiro</entry>
+  <entry key="369">ir ao anterior</entry>
+  <entry key="370">ir ao próximo</entry>
+  <entry key="371">ir ao último</entry>
+  <entry key="372">palestras do usuário (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">desligar/ligar som</entry>
+  <entry key="374">Sistema</entry>
+  <entry key="375">Suas configurações</entry>
+  <entry key="376">olá,</entry>
+  <entry key="377">Editar seu perfil</entry>
+  <entry key="378">Novas Mensagens:</entry>
+  <entry key="379">Upload de nova imagem</entry>
+  <entry key="380">Dados do Usuário - Exportar</entry>
+  <entry key="381">Todas as organizações já devem existir!</entry>
+  <entry key="382">começar a exportar</entry>
+  <entry key="383">Por organização</entry>
+  <entry key="384">começar a exportar</entry>
+  <entry key="385">Dados do Usuário - Importar</entry>
+  <entry key="386">escolha users.xml</entry>
+  <entry key="387">importar</entry>
+  <entry key="388">Exportar para XML - Esses arquivos podem ser usados para: - Contribua com o projeto - Importe em outro sistema - Backup - Customização - Coloque no diretório de idiomas para sua próxima instalação</entry>
+  <entry key="389">Escolha um arquivo de idioma para importar. Escolha o idioma correto no Combobox! Não importa o nome do arquivo, ele será importado nesse idioma!</entry>
+  <entry key="390">importar - escolha o arquivo</entry>
+  <entry key="391">Salvar como</entry>
+  <entry key="392">Nome:</entry>
+  <entry key="393">Comentário:</entry>
+  <entry key="394">salvar</entry>
+  <entry key="395">Gravações</entry>
+  <entry key="396">Vizualizador de Gravações</entry>
+  <entry key="397">Gravações de salas públicas e privadas</entry>
+  <entry key="398">Usuários :</entry>
+  <entry key="399">Entrou:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Usuários nessa sala:</entry>
+  <entry key="402">atualizar</entry>
+  <entry key="403">Essa sala está cheia. Tente novamente em alguns instântes.</entry>
+  <entry key="404">clique em uma sala para ver os detalhes</entry>
+  <entry key="405">Chat com os usuários dessa sala:</entry>
+  <entry key="406">Sala:</entry>
+  <entry key="407">Usuários nessa sala:</entry>
+  <entry key="408">desde:</entry>
+  <entry key="409">mostrar a gravação</entry>
+  <entry key="410">Tamanho:</entry>
+  <entry key="411">Data:</entry>
+  <entry key="412">Modo Gravação! Você não pode mudar nenhum valor, este é um arquivo gravado!</entry>
+  <entry key="413">Mostrar essa gravação</entry>
+  <entry key="414">Play / Pause</entry>
+  <entry key="415">Começar gravação</entry>
+  <entry key="416">parar gravação</entry>
+  <entry key="417">Gravação:</entry>
+  <entry key="418">Já existe alguém gravando nesse momento:</entry>
+  <entry key="419">Gravando! Pelo usuário:</entry>
+  <entry key="420">cancelar</entry>
+  <entry key="421">Gravação será cancelada e não será salva.</entry>
+  <entry key="422">continuar</entry>
+  <entry key="423">Fechar essa janela e continuar a gravação.</entry>
+  <entry key="424">mudar cor da linha</entry>
+  <entry key="425">Mudar Cor</entry>
+  <entry key="426">Disabilitar / Habilitar cor da linha</entry>
+  <entry key="427">mudar Fillcolor</entry>
+  <entry key="428">Disabilitar / Habilitar Fillcolor</entry>
+  <entry key="429">Mudar tamanho da linha</entry>
+  <entry key="430">fechar</entry>
+  <entry key="431">mudar tamanho da fonte</entry>
+  <entry key="432">Deletar Gravação</entry>
+  <entry key="433">Convidado</entry>
+  <entry key="434">Por:</entry>
+  <entry key="435">Nome</entry>
+  <entry key="436">Sala</entry>
+  <entry key="437">Data</entry>
+  <entry key="438">cancelar</entry>
+  <entry key="439">start</entry>
+  <entry key="440">Nome</entry>
+  <entry key="441">Data</entry>
+  <entry key="442">Deletar Server-Chatlog</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">enviar mensagem</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Escolher adaptadores publicados</entry>
+  <entry key="448">Áudio e Vídeo</entry>
+  <entry key="449">Áudio somente</entry>
+  <entry key="450">Vídeo somente</entry>
+  <entry key="451">sem Áudio/Vídeo (Image estática)</entry>
+  <entry key="452">Nenhum Áudio/Vídeo do seu PC será publicado, ao invés disso uma figura do seu perfil será mostrada. Escolha essas configurações se você tem problemas com sua conexão ou uma conexão de Internet lenta.</entry>
+  <entry key="453">SEG</entry>
+  <entry key="454">TER</entry>
+  <entry key="455">QUA</entry>
+  <entry key="456">QUI</entry>
+  <entry key="457">SEX</entry>
+  <entry key="458">SAB</entry>
+  <entry key="459">DOM</entry>
+  <entry key="460">Segunda</entry>
+  <entry key="461">Terça</entry>
+  <entry key="462">Quarta</entry>
+  <entry key="463">Quinta</entry>
+  <entry key="464">Sexta</entry>
+  <entry key="465">Sabado</entry>
+  <entry key="466">Domingo</entry>
+  <entry key="467">CS</entry>
+  <entry key="468">Calendário da semana</entry>
+  <entry key="469">Janeiro</entry>
+  <entry key="470">Fevereiro</entry>
+  <entry key="471">Março</entry>
+  <entry key="472">Abril</entry>
+  <entry key="473">Maio</entry>
+  <entry key="474">Junho</entry>
+  <entry key="475">Julho</entry>
+  <entry key="476">Augosto</entry>
+  <entry key="477">Setembro</entry>
+  <entry key="478">Outubro</entry>
+  <entry key="479">Novembro</entry>
+  <entry key="480">Dezembro</entry>
+  <entry key="481">Calendário</entry>
+  <entry key="482">Participantes</entry>
+  <entry key="483">Mostrar configurações de layout</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Largura | Altura</entry>
+  <entry key="486">Video-Container</entry>
+  <entry key="487">Moderação-Container</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Lousa-Container</entry>
+  <entry key="490">Habilitado</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Largura | Altura</entry>
+  <entry key="493">Arquivos,Chat,Participantes - Container</entry>
+  <entry key="494">Habilitado</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Largura | Altura</entry>
+  <entry key="497">O moderador saiu da sala. Nenhum está presente no momento. Você pode se candidatar para moderação ou esperar.</entry>
+  <entry key="498">Não existe nenhum moderador nessa sala, mas existem alguns participantes. Você deve se candidatar a moderação ou esperar.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Convite</entry>
+  <entry key="501">Mensagem do Usuário:</entry>
+  <entry key="502">Mensagem:</entry>
+  <entry key="503">Click neste link para participar das reuniões:</entry>
+  <entry key="504">Click aqui para entrar na sala</entry>
+  <entry key="505">se você tem problemas com o link, por favor copie e cole isso no seu browser:</entry>
+  <entry key="506">{0} SignUp</entry>
+  <entry key="507">Seus dados:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Senha:</entry>
+  <entry key="510">EMail:</entry>
+  <entry key="511">{0}-Team</entry>
+  <entry key="512">{0} Sign-Up</entry>
+  <entry key="513">{0} - Reset Password</entry>
+  <entry key="514">Clique neste link para criar uma nova senha:</entry>
+  <entry key="515">Click aqui para criar umanova senha</entry>
+  <entry key="516">se você tiver problemas com o link, por favor copie e cole isso em seu browser:</entry>
+  <entry key="517">{0} Senha Reset</entry>
+  <entry key="518">Por favor informe uma data válida, por exemplo 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">Por favor informe um email válido, por exemplo name@mail.com</entry>
+  <entry key="520">Por favor informe um número de ponto flutuante, por exemplo 1.00</entry>
+  <entry key="521">Por favor informe um número (Inteiro), por exemplo 100</entry>
+  <entry key="522">Por favor informe um número de telefone válido, por exemplo ++49 1234 1234</entry>
+  <entry key="523">Por favor informe um horário válido, por exemplo 12:23 (hh:mm)</entry>
+  <entry key="524">Senha protegida</entry>
+  <entry key="525">Senha</entry>
+  <entry key="526">Período de validade</entry>
+  <entry key="527">Final</entry>
+  <entry key="528">Período</entry>
+  <entry key="529">Uma vez</entry>
+  <entry key="530">Valido de:</entry>
+  <entry key="531">Valido até:</entry>
+  <entry key="532">Convite para o {0}</entry>
+  <entry key="533">Nenhum convite disponível para esse código</entry>
+  <entry key="534">O convite já foi utilizado. Esse tipo de convite não pode ser reutilizado.</entry>
+  <entry key="535">Esse código de convite não é válido.</entry>
+  <entry key="536">Senha:</entry>
+  <entry key="537">Verificar senha</entry>
+  <entry key="538">Senha Inválida!</entry>
+  <entry key="539">Browser</entry>
+  <entry key="540">Syncronize Audio/Video</entry>
+  <entry key="541">Login was correct, but the Session you tried is not active or stored on the Server. You have to get a new SessionId and retry login.</entry>
+  <entry key="542">The SessionId is not loggedin or has no Admin rights. The SOAP Gateway needs an User with Admin-Rights to embed new Users.</entry>
+  <entry key="543">This Session has no Remoteuser-Data connected. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">The recorder is currently Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">w</entry>
+  <entry key="550">width</entry>
+  <entry key="551">h</entry>
+  <entry key="552">height</entry>
+  <entry key="553">Change Transparency</entry>
+  <entry key="554">Browser Open</entry>
+  <entry key="555">Browser Close</entry>
+  <entry key="556">The Connection to the Server is lost. You need to reload the Application or/and check your Network.</entry>
+  <entry key="557">Pointer</entry>
+  <entry key="558">Synchronizing</entry>
+  <entry key="559">Synchronizing Users, please wait</entry>
+  <entry key="560">&lt;u&gt;Download as SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download as PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download as JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download as PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download as TIF&lt;/u&gt;</entry>
+  <entry key="565">Reminder:</entry>
+  <entry key="566">Category:</entry>
+  <entry key="567">Repetition:</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Location:</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">End</entry>
+  <entry key="572">Title:</entry>
+  <entry key="573">Comment:</entry>
+  <entry key="574">Invite People</entry>
+  <entry key="575">Daily</entry>
+  <entry key="576">Monthly</entry>
+  <entry key="577">Yearly</entry>
+  <entry key="578">Appointment-end is after of appointment-start!</entry>
+  <entry key="579">Please insert a title!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Activate this if you write in a right to left language (inverse word order)</entry>
+  <entry key="582">Dashboard</entry>
+  <entry key="583">Watch recorded Meetings or Events</entry>
+  <entry key="584">Meeting - Make a conference with 4 (up to 16) Users&lt;br/&gt;everybody will have audio + video access</entry>
+  <entry key="585">Event - Make a conference with up to 200 participents&lt;br/&gt;Only the Moderator will have audio/video</entry>
+  <entry key="586">Create users, rooms, organizations&lt;br/&gt; + change configuration</entry>
+  <entry key="587">Users in this Room now</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Loading Document. Please wait untill all Client have been synchronized.</entry>
+  <entry key="592">Upload complete, converting Document ...</entry>
+  <entry key="593">Start Upload</entry>
+  <entry key="594">Upload and Import Dialog. Please select a File from your Disk.</entry>
+  <entry key="595">Cancel</entry>
+  <entry key="596">Select File</entry>
+  <entry key="597">Connections</entry>
+  <entry key="598">Value</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connected since</entry>
+  <entry key="602">Room / Scope</entry>
+  <entry key="603">Kick User</entry>
+  <entry key="604">Kick User</entry>
+  <entry key="605">Do you really want to kick this Client from the Connection?&lt;br/&gt; This does only remove the Client from the current Room.The Client could re-login again.</entry>
+  <entry key="606">Your session has been closed by an Administrator or Moderator.</entry>
+  <entry key="607">Phone</entry>
+  <entry key="608">User is the Moderator of this Room</entry>
+  <entry key="609">User is allowed to draw on the Whiteboard</entry>
+  <entry key="610">(Re) Start Audio/Video or change Device Settings</entry>
+  <entry key="611">Allow this User to draw on the Whiteboard</entry>
+  <entry key="612">Remove ability to draw on whiteboard</entry>
+  <entry key="613">Users</entry>
+  <entry key="614">Files</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Your account is assigned to multiple Organizations. Please choose one for this Session.</entry>
+  <entry key="618">This room is full at the moment. Please try again later.</entry>
+  <entry key="619">Room Type</entry>
+  <entry key="620">Appointment Room</entry>
+  <entry key="621">Server Time</entry>
+  <entry key="622">{0} - Reminder</entry>
+  <entry key="623">Message from User:</entry>
+  <entry key="624">Message:</entry>
+  <entry key="625">Click this link to participate in the Meetings:</entry>
+  <entry key="626">Click here to enter room</entry>
+  <entry key="627">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="628">search intern</entry>
+  <entry key="629">extern users</entry>
+  <entry key="630">pre name</entry>
+  <entry key="631">name</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirm logout</entry>
+  <entry key="634">Are you sure you want to logout now?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Demo Room</entry>
+  <entry key="637">Demo Time</entry>
+  <entry key="638">Meeting Timer</entry>
+  <entry key="639">This Room is a Demo Room. To disable this warning you either should get a private meeting room for your personal usage or set up an own Server. You will be automatically logged off in:</entry>
+  <entry key="640">Moderated</entry>
+  <entry key="641">Please wait untill the Moderator has entered the Room. The Moderator can be either a Teacher, Admin or the creator of this Room.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Incoming Screen Sharing</entry>
+  <entry key="644">There is a new Screen Sharing incoming from the User:</entry>
+  <entry key="645">Start Sharing</entry>
+  <entry key="646">Add new Meeting</entry>
+  <entry key="647">Meeting Room</entry>
+  <entry key="648">Event Room</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderate Users</entry>
+  <entry key="651">Moderate Rooms</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Do you want to change this User to become a Moderator of that Organization?</entry>
+  <entry key="654">Please choose an Organization before you try to add a User to it!</entry>
+  <entry key="655">Organization - Moderator</entry>
+  <entry key="656">Do you really want to delete this User from the Organization?</entry>
+  <entry key="657">This User is Moderator</entry>
+  <entry key="658">This User is No-Moderator</entry>
+  <entry key="659">Do you want this User to be not a Moderator of this Organization?</entry>
+  <entry key="660">Add or delete Users or Rooms within your Organization</entry>
+  <entry key="661">Do you really want to delete this record?</entry>
+  <entry key="662">Do you really want to delete this user from your organization? You will only delete the connection between the user and your organization, to really delete the user itself you have to login into the Administration-Panel.</entry>
+  <entry key="663">You cannot delete your own User!</entry>
+  <entry key="664">This Method needs a Adminstration Account to be invoked!</entry>
+  <entry key="665">There was no Session associated with this ID.</entry>
+  <entry key="666">This is an Administrator or Moderator account. You can only edit this account through the Administration Panel.</entry>
+  <entry key="667">To complete your registration please click on the following link. Or copy the URL to your browser bar.</entry>
+  <entry key="668">Click to verify your E-Mail</entry>
+  <entry key="669">No user was found for this Hash.</entry>
+  <entry key="670">This user is already activated!</entry>
+  <entry key="671">You did successfully activate your account!</entry>
+  <entry key="672">Login Now</entry>
+  <entry key="673">Your account is not activated. First use the link in the Email you've received during registration.</entry>
+  <entry key="674">You successfully signed up. We've send an EMail with a verification Code to your Mail. Please check your Inbox.</entry>
+  <entry key="675">Remove Moderation Role from this User</entry>
+  <entry key="676">Grant Moderation Rights to this User</entry>
+  <entry key="677">User</entry>
+  <entry key="678">Access to whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Please choose any User on the List to grant him access to the Whiteboard, Moderation or Video.</entry>
+  <entry key="681">This User is already Moderator, so he has automatically the right to draw.</entry>
+  <entry key="682">This is you! You cannot remove the Moderation rights from yourself.</entry>
+  <entry key="683">Allow this User to Publish his Audio / Video</entry>
+  <entry key="684">Remove Audio/Video of this User</entry>
+  <entry key="685">I would like to get the moderation of this room</entry>
+  <entry key="686">I would like to draw on whiteboard</entry>
+  <entry key="687">I would like to share my Audio/Video</entry>
+  <entry key="688">You are moderator of this room</entry>
+  <entry key="689">You are allowed to draw on whiteboard</entry>
+  <entry key="690">You are allowed to share your Audio/Video</entry>
+  <entry key="691">Message to Moderator</entry>
+  <entry key="692">The User</entry>
+  <entry key="693">would like to get the Moderation. Use the status Icons next to the user in the List of Users to add or remove the Moderation.</entry>
+  <entry key="694">would like to draw on whiteboard. Use the status Icons next to the user in the List of Users to add or remove the right to draw anything on the whiteboard.</entry>
+  <entry key="695">would like to share his Audio/Video. Use the status Icons next to the user in the List of Users to add or remove the right to share Audio/Video for any User.</entry>
+  <entry key="696">You have to wait untill a Moderator enters the room.</entry>
+  <entry key="697">Cancel</entry>
+  <entry key="698">Save</entry>
+  <entry key="699">Day</entry>
+  <entry key="700">Month</entry>
+  <entry key="701">Year</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
new file mode 100644
index 0000000..7ddb7a8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_pt_BR.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Conferência</entry>
+  <entry key="2">Reunião</entry>
+  <entry key="3">Auditório</entry>
+  <entry key="4">Configurações</entry>
+  <entry key="5">Usuário</entry>
+  <entry key="6">Administração</entry>
+  <entry key="7">Parar</entry>
+  <entry key="8">Gravar</entry>
+  <entry key="9">Nenhum arquivo disponível</entry>
+  <entry key="10">Admissão disponível apenas para professores</entry>
+  <entry key="11">Usuários conectados:</entry>
+  <entry key="12">Iniciar uma conferência</entry>
+  <entry key="13">Meu nome:</entry>
+  <entry key="14">VideoConferência</entry>
+  <entry key="15">Importar apresentação</entry>
+  <entry key="16">Atualizar lista</entry>
+  <entry key="17">Voltar ao índice principal</entry>
+  <entry key="18">nova enquete</entry>
+  <entry key="19">Uma nova enquete para conferência.</entry>
+  <entry key="20">Pergunta:</entry>
+  <entry key="21">Tipo de enquete:</entry>
+  <entry key="22">Criar</entry>
+  <entry key="23">Info: Cada usuário conectado recebe uma menssagem com a nova enquete.</entry>
+  <entry key="24">Criar uma enquete</entry>
+  <entry key="25">Cancelar</entry>
+  <entry key="26">Sim/Não</entry>
+  <entry key="27">Numérico 1-10</entry>
+  <entry key="28">Enquete</entry>
+  <entry key="29">Eles podem ser moderadores/professores nessa área de enquetes</entry>
+  <entry key="30">Seu voto foi registrado.</entry>
+  <entry key="31">Você já votou nessa enquete.</entry>
+  <entry key="32">Votar !</entry>
+  <entry key="33">Sua resposta:</entry>
+  <entry key="34">Sim</entry>
+  <entry key="35">Não</entry>
+  <entry key="36">Quer saber:</entry>
+  <entry key="37">Resultados da enquete</entry>
+  <entry key="38">Pergunta:</entry>
+  <entry key="39">Resultados:</entry>
+  <entry key="40">Respostas:</entry>
+  <entry key="41">Nenhuma enquete foi iniciada.</entry>
+  <entry key="42">Votar!</entry>
+  <entry key="43">Reunião (todos se vêem)</entry>
+  <entry key="44">Conference (um ou mais falam para milhares)</entry>
+  <entry key="45">Tipo</entry>
+  <entry key="46">Outros participantes</entry>
+  <entry key="47">Já escolhido</entry>
+  <entry key="48">entrar</entry>
+  <entry key="49">O moderaror saiu da reunião.</entry>
+  <entry key="50">Informações do sistema</entry>
+  <entry key="51">Escolher dispositivo</entry>
+  <entry key="52">Escolher webcam:</entry>
+  <entry key="53">Escolher microfone:</entry>
+  <entry key="54">ok</entry>
+  <entry key="55">Cancelar</entry>
+  <entry key="56">Você precisa reconectar.</entry>
+  <entry key="57">Editar configurações.</entry>
+  <entry key="58">Curso:</entry>
+  <entry key="59">Idioma:</entry>
+  <entry key="60">Ok</entry>
+  <entry key="61">Cancelar</entry>
+  <entry key="62">Limpar a lousa.</entry>
+  <entry key="63">Você quer que a lousa seja apagada antes que uma figura seja adicionada ?</entry>
+  <entry key="64">Não perguntar de novo.</entry>
+  <entry key="65">Não</entry>
+  <entry key="66">Editar configurações</entry>
+  <entry key="67">Confirmação de requisição antes de limpar a lousa.</entry>
+  <entry key="68">Informações do usuário</entry>
+  <entry key="69">Limpar a lousa</entry>
+  <entry key="70">Desfazer</entry>
+  <entry key="71">Refazer</entry>
+  <entry key="72">Selecionar um objeto</entry>
+  <entry key="73">Texto</entry>
+  <entry key="74">Pintura</entry>
+  <entry key="75">Desenhar linha</entry>
+  <entry key="76">Desenhar sublinha</entry>
+  <entry key="77">Retângulo</entry>
+  <entry key="78">Elipse</entry>
+  <entry key="79">Seta</entry>
+  <entry key="80">excluir ítem selecionado</entry>
+  <entry key="81">Aplicar para moderação</entry>
+  <entry key="82">Aplicar</entry>
+  <entry key="83">fechar</entry>
+  <entry key="84">Tornar-se moderador</entry>
+  <entry key="85">fechar</entry>
+  <entry key="86">italic</entry>
+  <entry key="87">negrito</entry>
+  <entry key="88">AGUARDANDO</entry>
+  <entry key="89">Um usuário quer se tornar moderador:</entry>
+  <entry key="90">aceitar</entry>
+  <entry key="91">rejeitar</entry>
+  <entry key="92">cancelar</entry>
+  <entry key="93">Enviando requisição para os seguintes usuários</entry>
+  <entry key="94">Aceito</entry>
+  <entry key="95">Rejeitado</entry>
+  <entry key="96">Mudar moderador</entry>
+  <entry key="97">Você não está moderando este curso!</entry>
+  <entry key="98">Moderador:</entry>
+  <entry key="99">A sala está cheia. Por favor tente novamente mais tarde.</entry>
+  <entry key="100">Elipse</entry>
+  <entry key="101">fechar</entry>
+  <entry key="102">erro na entrada de dados</entry>
+  <entry key="103">Nome do usuário deve ter no mínimo 4 letras</entry>
+  <entry key="104">senha deve ter no mínimo 4 letras</entry>
+  <entry key="105">Nome de usuário já existente</entry>
+  <entry key="106">O email já foi registrado.</entry>
+  <entry key="107">Erro no sistema, por favor, contacte os administradores.</entry>
+  <entry key="108">Login</entry>
+  <entry key="109">Usuário:</entry>
+  <entry key="110">Senha:</entry>
+  <entry key="111">idioma</entry>
+  <entry key="112">Login</entry>
+  <entry key="113">Inscreva-se</entry>
+  <entry key="114">Usuário:</entry>
+  <entry key="115">Senha:</entry>
+  <entry key="116">Re-digite:</entry>
+  <entry key="117">Primeiro nome:</entry>
+  <entry key="118">Último nome:</entry>
+  <entry key="119">E-Mail:</entry>
+  <entry key="120">País:</entry>
+  <entry key="121">Registrar</entry>
+  <entry key="122">cancelar</entry>
+  <entry key="123">Registrar</entry>
+  <entry key="124">Início</entry>
+  <entry key="125">Usuários</entry>
+  <entry key="126">Grupos</entry>
+  <entry key="127">Organizações</entry>
+  <entry key="128">Salas de Conferência</entry>
+  <entry key="129">público</entry>
+  <entry key="130">organização</entry>
+  <entry key="131">entrar</entry>
+  <entry key="132">Login</entry>
+  <entry key="133">Senha</entry>
+  <entry key="134">Re-digite</entry>
+  <entry key="135">Primeiro nome</entry>
+  <entry key="136">Último nome</entry>
+  <entry key="137">E-Mail</entry>
+  <entry key="138">Aniversário</entry>
+  <entry key="139">Rua/Nro.</entry>
+  <entry key="140">CEP/Cidade</entry>
+  <entry key="141">País</entry>
+  <entry key="142">Endereço</entry>
+  <entry key="143">Dados do usuário</entry>
+  <entry key="144">salvar</entry>
+  <entry key="145">Salvar</entry>
+  <entry key="146">ID</entry>
+  <entry key="147">login</entry>
+  <entry key="148">primeiro nome</entry>
+  <entry key="149">Ùltimo nome</entry>
+  <entry key="150">Mostrar próximo</entry>
+  <entry key="151">mostrar anterior</entry>
+  <entry key="152">excluir registro</entry>
+  <entry key="153">cancelar</entry>
+  <entry key="154">excluir</entry>
+  <entry key="155">novo registro</entry>
+  <entry key="156">atualizar registro</entry>
+  <entry key="157">excluir registro</entry>
+  <entry key="158">Estado</entry>
+  <entry key="159">Desabilitado</entry>
+  <entry key="160">Habilitado</entry>
+  <entry key="161">organizações</entry>
+  <entry key="162">CALENDÁRIO</entry>
+  <entry key="163">fechar</entry>
+  <entry key="164">ID da Organização</entry>
+  <entry key="165">nome</entry>
+  <entry key="166">usuário</entry>
+  <entry key="167">Moderador</entry>
+  <entry key="168">Admin</entry>
+  <entry key="169">Nível do usuário</entry>
+  <entry key="170">organização</entry>
+  <entry key="171">nome</entry>
+  <entry key="172">Adicionar organização</entry>
+  <entry key="173">Adicionar organização</entry>
+  <entry key="174">cancelar</entry>
+  <entry key="175">adicionar</entry>
+  <entry key="176">Remover organização</entry>
+  <entry key="177">usuário</entry>
+  <entry key="178">adicionar usuário</entry>
+  <entry key="179">excluir usuário</entry>
+  <entry key="180">adicionar usuário</entry>
+  <entry key="181">procurar usuário</entry>
+  <entry key="182">procurar</entry>
+  <entry key="183">usuário</entry>
+  <entry key="184">organização</entry>
+  <entry key="185">entrar</entry>
+  <entry key="186">Salas de Conferência</entry>
+  <entry key="187">Salas de conferência</entry>
+  <entry key="188">id</entry>
+  <entry key="189">Nome</entry>
+  <entry key="190">público</entry>
+  <entry key="191">organizações</entry>
+  <entry key="192">Salas de conferência</entry>
+  <entry key="193">nome</entry>
+  <entry key="194">tipo</entry>
+  <entry key="195">público</entry>
+  <entry key="196">comentário</entry>
+  <entry key="197">salvar</entry>
+  <entry key="198">abrir</entry>
+  <entry key="199">salvar como</entry>
+  <entry key="200">nome do arquivo</entry>
+  <entry key="201">nome do arquivo</entry>
+  <entry key="202">cancelar</entry>
+  <entry key="203">salvar</entry>
+  <entry key="204">erro</entry>
+  <entry key="205">carregando</entry>
+  <entry key="206">objetos carregados</entry>
+  <entry key="207">sincronizando clientes... aguarde:</entry>
+  <entry key="208">Carregando imagem</entry>
+  <entry key="209">sincronizando clientes... aguarde:</entry>
+  <entry key="210">limpar área de desenho</entry>
+  <entry key="211">limpar área de desenho, todos os dados da lousa serão perdidos</entry>
+  <entry key="212">Confirme antes de carregar o arquivo</entry>
+  <entry key="213">Enviar convite</entry>
+  <entry key="214">Enviar convite</entry>
+  <entry key="215">Assunto</entry>
+  <entry key="216">Destinatário</entry>
+  <entry key="217">Mensagem</entry>
+  <entry key="218">Enviar</entry>
+  <entry key="219">cancelar</entry>
+  <entry key="220">enviar</entry>
+  <entry key="221">Dados do usuário</entry>
+  <entry key="222">Seu apelido para essa conferência</entry>
+  <entry key="223">apelido</entry>
+  <entry key="224">primeiro nome</entry>
+  <entry key="225">último nome</entry>
+  <entry key="226">email</entry>
+  <entry key="227">idioma</entry>
+  <entry key="228">entrar</entry>
+  <entry key="229">Carregando</entry>
+  <entry key="230">Carregando dados, por favor aguarde!</entry>
+  <entry key="231">Senha Incorreta</entry>
+  <entry key="232">Por favor digite duas senhas iguais com pelo menos 6 caracteres</entry>
+  <entry key="233">Email Incorreto</entry>
+  <entry key="234">Voê digitou um endereço de email inválido.</entry>
+  <entry key="235">Usuário registrado com sucesso</entry>
+  <entry key="236">Sua conta foi criada. Você pode fazer o login agora.</entry>
+  <entry key="237">Você não pode compartilhar sua tela agora. Alguem já compartilhou a tela.</entry>
+  <entry key="238">Compartilhamento perdido</entry>
+  <entry key="239">Compartilhe sua tela</entry>
+  <entry key="240">Falha na transmissão: Você não está apto a sincronizar a tela. Quadros serão perdidos. Caso esse aviso tenha sido mostrado cedo você pode pedir ao moderador para reduzir a qualidade.</entry>
+  <entry key="241">Tela de:</entry>
+  <entry key="242">Desenhar</entry>
+  <entry key="243">Documento</entry>
+  <entry key="244">Conversar</entry>
+  <entry key="245">Arquivos</entry>
+  <entry key="246">Membros</entry>
+  <entry key="247">Download do documeto original</entry>
+  <entry key="248">Download do pdf</entry>
+  <entry key="249">Carregar apresentação no quadro</entry>
+  <entry key="250">Configuração</entry>
+  <entry key="251">Arrastar esse objeto</entry>
+  <entry key="252">Redimensionar esse objeto</entry>
+  <entry key="253">%</entry>
+  <entry key="254">de</entry>
+  <entry key="255">Ir para primeira página</entry>
+  <entry key="256">Ir para página anterior</entry>
+  <entry key="257">Ir para a próxima página</entry>
+  <entry key="258">Ir para a última página</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">Sr.</entry>
+  <entry key="262">Sra.</entry>
+  <entry key="263">Configuração</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Chave</entry>
+  <entry key="266">Configuração</entry>
+  <entry key="267">Chave</entry>
+  <entry key="268">última atualização</entry>
+  <entry key="269">atualizado por</entry>
+  <entry key="270">comentário</entry>
+  <entry key="271">chave</entry>
+  <entry key="272">de</entry>
+  <entry key="273">Usuários</entry>
+  <entry key="274">excluir usuário da Organização</entry>
+  <entry key="275">excluir</entry>
+  <entry key="276">Este usuário já é membro desta organização.</entry>
+  <entry key="277">Notícias</entry>
+  <entry key="278">Links Rápidos</entry>
+  <entry key="279">Ir para conferência</entry>
+  <entry key="280">Ir para auditório</entry>
+  <entry key="281">Ajuda e suporte</entry>
+  <entry key="282">http://www.tvqweb.com.br</entry>
+  <entry key="283">http://www.tvqweb.com.br</entry>
+  <entry key="284">Suporte</entry>
+  <entry key="285">mais</entry>
+  <entry key="286">http://www.tvqweb.com.br</entry>
+  <entry key="287">http://www.tvqweb.com.br</entry>
+  <entry key="288">Relembrar Login</entry>
+  <entry key="289">Conteúdo</entry>
+  <entry key="290">Minha Home Page</entry>
+  <entry key="291">Calendário</entry>
+  <entry key="292">Eventos Agendados</entry>
+  <entry key="293">Reuniões Públicas</entry>
+  <entry key="294">Reuniões Privadas</entry>
+  <entry key="295">Eventos Públicos</entry>
+  <entry key="296">Eventos Privados</entry>
+  <entry key="297">Conteúdo Público</entry>
+  <entry key="298">Conteúdo Privado</entry>
+  <entry key="299">Conteúdo Pessoal</entry>
+  <entry key="300">Conteúdo</entry>
+  <entry key="301">Moderação</entry>
+  <entry key="302">Aplicar para Moderação</entry>
+  <entry key="303">Conjuntos</entry>
+  <entry key="304">Escolha um arquivo</entry>
+  <entry key="305">Configurações</entry>
+  <entry key="306">Configurações de Cam e Mic</entry>
+  <entry key="307">Configurações da lousa</entry>
+  <entry key="308">Sair</entry>
+  <entry key="309">Voltar para salas</entry>
+  <entry key="310">Sair</entry>
+  <entry key="311">Esqueceu sua senha?</entry>
+  <entry key="312">Redefinir a senha</entry>
+  <entry key="313">Usando o endereço de e-mail</entry>
+  <entry key="314">Using login</entry>
+  <entry key="315">Seu email</entry>
+  <entry key="316">Seu login</entry>
+  <entry key="317">Enviar e-mail com um link para redefinição</entry>
+  <entry key="318">Nenhum endereço de e-mail foi encontrado. Verifique se você digitou o endereço de email que você usou para criar sua conta.</entry>
+  <entry key="319">Por favor, indique um endereço de e-mail ou um nome de usuário</entry>
+  <entry key="320">Não existe usuário conectado com este nome</entry>
+  <entry key="321">Um email contendo um link foi enviado a seu endereço de email, por favor confira sua caixa postal. Se você ainda não tiver recebido um email, por favor ajuste as configurações de spam e re-envie a confirmação de email.</entry>
+  <entry key="322">Erro</entry>
+  <entry key="323">Mensagem</entry>
+  <entry key="324">Hash inválido. Nenhum usuário encontrado.</entry>
+  <entry key="325">Redefina sua senha</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">alterar senha</entry>
+  <entry key="328">nova senha</entry>
+  <entry key="329">redigite a senha</entry>
+  <entry key="330">As senhas que você digitou não são iguais.</entry>
+  <entry key="331">4 ou mais caracteres; maiúsculas e minúsculas são diferentes!</entry>
+  <entry key="332">Senha configurada. Você pode acessar agora.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Erro desconhecido. Por favor informe isso ao Administrador.</entry>
+  <entry key="335">Username não encontrado</entry>
+  <entry key="336">Senha inválida</entry>
+  <entry key="337">Desconectado com sucesso</entry>
+  <entry key="338">Cadastro do frontend desabilitado.</entry>
+  <entry key="339">Email inválido</entry>
+  <entry key="340">nome de arquivo duplicado, por favor escolha outro nome</entry>
+  <entry key="341">nome de arquivo muito curto</entry>
+  <entry key="342">Não foi possível salvar o endereço</entry>
+  <entry key="343">Usuário adicionado mas você precisa associar esse usuário a uma organização, se não ele não estará apto a se associar.</entry>
+  <entry key="344">Novo Registro</entry>
+  <entry key="345">Nenhum campo encontrado com esse id.</entry>
+  <entry key="346">Nenhum valor encontrado para este campo.</entry>
+  <entry key="347">Necessário perfil de administrador</entry>
+  <entry key="348">Editor de idiomas</entry>
+  <entry key="349">Idioma</entry>
+  <entry key="350">Campo-ID</entry>
+  <entry key="351">Campo-Nome</entry>
+  <entry key="352">Valor</entry>
+  <entry key="353">Valores dos campos</entry>
+  <entry key="354">Nome do campo</entry>
+  <entry key="355">Valor do campo</entry>
+  <entry key="356">ID</entry>
+  <entry key="357">Você apenas deletou o campo NÂO o Field! Você não pode excluir esse Field, podem existir campo em outros idiomas.</entry>
+  <entry key="358">campoid inválido. O FieldLanguagesvalues_Id não pode ser encontrado na base de dados.</entry>
+  <entry key="359">Você não pode excluir esse Field. Você pode apenas excluir Labels NÂO Fields. Não existe Label carregado no momento, se nenhum Field for selecionado ou não existir Label para esse idioma para esse Field definido.</entry>
+  <entry key="360">exportar</entry>
+  <entry key="361">Você precisa fazer login novamente para visualizar as mudanças.</entry>
+  <entry key="362">Adicionar novo idioma</entry>
+  <entry key="363">excluir idioma</entry>
+  <entry key="364">Adicionar novo idioma</entry>
+  <entry key="365">Nome</entry>
+  <entry key="366">adicionar idioma</entry>
+  <entry key="367">Backup</entry>
+  <entry key="368">ir para o primeiro</entry>
+  <entry key="369">ir para o anterior</entry>
+  <entry key="370">ir para o próximo</entry>
+  <entry key="371">ir para o último</entry>
+  <entry key="372">palestras do usuário</entry>
+  <entry key="373">desligar/ligar som</entry>
+  <entry key="374">Sistema</entry>
+  <entry key="375">Suas configurações</entry>
+  <entry key="376">Olá,</entry>
+  <entry key="377">Editar meu perfil</entry>
+  <entry key="378">Novas Mensagens:</entry>
+  <entry key="379">Nova imagem</entry>
+  <entry key="380">Dados do Usuário - Exportar</entry>
+  <entry key="381">Todas as organizações já devem existir!</entry>
+  <entry key="382">começar a exportar</entry>
+  <entry key="383">Por organização</entry>
+  <entry key="384">começar a exportar</entry>
+  <entry key="385">Dados do Usuário - Importar</entry>
+  <entry key="386">escolha users.xml</entry>
+  <entry key="387">importar</entry>
+  <entry key="388">Exportar para XML - Esses arquivos podem ser usados para: - Contribua com o projeto - Importe em outro sistema - Backup - Customização - Coloque no diretório de idiomas para sua próxima instalação</entry>
+  <entry key="389">Escolha um arquivo de idioma para importar. Escolha o idioma correto no Combobox! Não importa o nome do arquivo, ele será importado nesse idioma!</entry>
+  <entry key="390">importar - escolha o arquivo</entry>
+  <entry key="391">Salvar como</entry>
+  <entry key="392">Nome:</entry>
+  <entry key="393">Comentário:</entry>
+  <entry key="394">salvar</entry>
+  <entry key="395">Gravações</entry>
+  <entry key="396">Vizualizador de Gravações</entry>
+  <entry key="397">Gravações de salas públicas e privadas</entry>
+  <entry key="398">Usuários :</entry>
+  <entry key="399">Entrou:</entry>
+  <entry key="400">Entrou:</entry>
+  <entry key="401">Usuários nessa sala:</entry>
+  <entry key="402">atualizar</entry>
+  <entry key="403">Essa sala está cheia. Tente novamente em alguns instântes.</entry>
+  <entry key="404">clique em uma sala para ver os detalhes</entry>
+  <entry key="405">Chat com os usuários dessa sala:</entry>
+  <entry key="406">Sala:</entry>
+  <entry key="407">Usuários nessa sala:</entry>
+  <entry key="408">desde:</entry>
+  <entry key="409">mostrar a gravação</entry>
+  <entry key="410">Tamanho:</entry>
+  <entry key="411">Data:</entry>
+  <entry key="412">Modo Gravação! Você não pode mudar nenhum valor, este é um arquivo gravado!</entry>
+  <entry key="413">Mostrar essa gravação</entry>
+  <entry key="414">Reproduzir / Parar</entry>
+  <entry key="415">Começar gravação</entry>
+  <entry key="416">parar gravação</entry>
+  <entry key="417">Gravação:</entry>
+  <entry key="418">Já existe alguém gravando nesse momento:</entry>
+  <entry key="419">Gravando! Pelo usuário:</entry>
+  <entry key="420">cancelar</entry>
+  <entry key="421">Gravação será cancelada e não será salva.</entry>
+  <entry key="422">continuar</entry>
+  <entry key="423">Fechar essa janela e continuar a gravação.</entry>
+  <entry key="424">mudar cor da linha</entry>
+  <entry key="425">Mudar Cor</entry>
+  <entry key="426">Disabilitar / Habilitar cor da linha</entry>
+  <entry key="427">mudar Fillcolor</entry>
+  <entry key="428">Disabilitar / Habilitar Fillcolor</entry>
+  <entry key="429">Mudar tamanho da linha</entry>
+  <entry key="430">fechar</entry>
+  <entry key="431">mudar tamanho da fonte</entry>
+  <entry key="432">excluir Gravação</entry>
+  <entry key="433">Convidado</entry>
+  <entry key="434">Por:</entry>
+  <entry key="435">Nome</entry>
+  <entry key="436">Sala</entry>
+  <entry key="437">Data</entry>
+  <entry key="438">cancelar</entry>
+  <entry key="439">start</entry>
+  <entry key="440">Nome</entry>
+  <entry key="441">Data</entry>
+  <entry key="442">excluir Server-Chatlog</entry>
+  <entry key="443">Bate-papo</entry>
+  <entry key="444">enviar mensagem</entry>
+  <entry key="445">Emoticons</entry>
+  <entry key="446">Emoticons</entry>
+  <entry key="447">Escolher adaptadores publicados</entry>
+  <entry key="448">Áudio e Vídeo</entry>
+  <entry key="449">Áudio somente</entry>
+  <entry key="450">Vídeo somente</entry>
+  <entry key="451">sem Áudio/Vídeo (Image estática)</entry>
+  <entry key="452">Nenhum Áudio/Vídeo do seu PC será publicado, ao invés disso uma figura do seu perfil será mostrada. Escolha essas configurações se você tem problemas com sua conexão ou uma conexão de Internet lenta.</entry>
+  <entry key="453">SEG</entry>
+  <entry key="454">TER</entry>
+  <entry key="455">QUA</entry>
+  <entry key="456">QUI</entry>
+  <entry key="457">SEX</entry>
+  <entry key="458">SAB</entry>
+  <entry key="459">DOM</entry>
+  <entry key="460">Segunda</entry>
+  <entry key="461">Terça</entry>
+  <entry key="462">Quarta</entry>
+  <entry key="463">Quinta</entry>
+  <entry key="464">Sexta</entry>
+  <entry key="465">Sabado</entry>
+  <entry key="466">Domingo</entry>
+  <entry key="467">CS</entry>
+  <entry key="468">Calendário da semana</entry>
+  <entry key="469">Janeiro</entry>
+  <entry key="470">Fevereiro</entry>
+  <entry key="471">Março</entry>
+  <entry key="472">Abril</entry>
+  <entry key="473">Maio</entry>
+  <entry key="474">Junho</entry>
+  <entry key="475">Julho</entry>
+  <entry key="476">Augosto</entry>
+  <entry key="477">Setembro</entry>
+  <entry key="478">Outubro</entry>
+  <entry key="479">Novembro</entry>
+  <entry key="480">Dezembro</entry>
+  <entry key="481">Calendário</entry>
+  <entry key="482">Participantes</entry>
+  <entry key="483">Mostrar configurações de layout</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Largura | Altura</entry>
+  <entry key="486">Video-Container</entry>
+  <entry key="487">Moderação-Container</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Lousa-Container</entry>
+  <entry key="490">Habilitado</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Largura | Altura</entry>
+  <entry key="493">Arquivos,Chat,Participantes - Container</entry>
+  <entry key="494">Habilitado</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Largura | Altura</entry>
+  <entry key="497">O moderador saiu da sala. Nenhum está presente no momento. Você pode se candidatar para moderação ou esperar.</entry>
+  <entry key="498">Não existe nenhum moderador nessa sala, mas existem alguns participantes. Você pode se candidatar a moderação ou esperar.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Convite</entry>
+  <entry key="501">Mensagem do Usuário:</entry>
+  <entry key="502">Mensagem:</entry>
+  <entry key="503">Click neste link para participar das reuniões:</entry>
+  <entry key="504">Clique aqui para entrar na sala</entry>
+  <entry key="505">se você tiver problemas com o link, por favor copie e cole isso no seu browser:</entry>
+  <entry key="506">{0} Inscrição</entry>
+  <entry key="507">Seus dados:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Senha:</entry>
+  <entry key="510">Email:</entry>
+  <entry key="511">TVQWEB - Equipe</entry>
+  <entry key="512">TVQWEB - Inscrição</entry>
+  <entry key="513">TVQWEB - Redefinição de Senha</entry>
+  <entry key="514">Clique neste link para criar uma nova senha:</entry>
+  <entry key="515">Click aqui para criar umanova senha</entry>
+  <entry key="516">se você tiver problemas com o link, por favor copie e cole isso em seu browser:</entry>
+  <entry key="517">TVQWEB - Redefinição de Senha</entry>
+  <entry key="518">Por favor informe uma data válida, por exemplo 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">Por favor informe um email válido, por exemplo nome@mail.com</entry>
+  <entry key="520">Por favor informe um número de ponto flutuante, por exemplo 1.00</entry>
+  <entry key="521">Por favor informe um número (Inteiro), por exemplo 100</entry>
+  <entry key="522">Por favor informe um número de telefone válido, por exemplo ++49 1234 1234</entry>
+  <entry key="523">Por favor informe um horário válido, por exemplo 12:23 (hh:mm)</entry>
+  <entry key="524">Proteger com senha</entry>
+  <entry key="525">Senha</entry>
+  <entry key="526">Período de validade</entry>
+  <entry key="527">Final</entry>
+  <entry key="528">Período</entry>
+  <entry key="529">Uma vez</entry>
+  <entry key="530">Valido de:</entry>
+  <entry key="531">Valido até:</entry>
+  <entry key="532">Convite para reunião instantânea no TVQWEB</entry>
+  <entry key="533">Nenhum convite disponível para esse código</entry>
+  <entry key="534">O convite já foi utilizado. Esse tipo de convite não pode ser reutilizado.</entry>
+  <entry key="535">Esse código de convite não é válido.</entry>
+  <entry key="536">Senha:</entry>
+  <entry key="537">Verificar senha</entry>
+  <entry key="538">Senha Inválida!</entry>
+  <entry key="539">Navegador</entry>
+  <entry key="540">Sincronizar Audio/Video</entry>
+  <entry key="541">Seu login estava correto, porém sua sessão expirou ou não está ativa no servidor. Por favor faça login novamente.</entry>
+  <entry key="542">O SessionID não está logado ou não tem privilégios de admin. O SOAP Gateway precisa de um usuário com privilégios de administrador para criar novos usuários.</entry>
+  <entry key="543">This Session has no Remoteuser-Data connected. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">O gravador atualmente é Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">w</entry>
+  <entry key="550">largura</entry>
+  <entry key="551">h</entry>
+  <entry key="552">altura</entry>
+  <entry key="553">Alterar transparência</entry>
+  <entry key="554">Abrir Navegador</entry>
+  <entry key="555">Fechar o Navegador</entry>
+  <entry key="556">A conexão com o servidor foi perdida. Você precisa reiniciar a aplicação e/ou verificar sua conexão com a internet.</entry>
+  <entry key="557">Ponteiro</entry>
+  <entry key="558">Sincronizando</entry>
+  <entry key="559">Sincronizando usuários, aguarde.</entry>
+  <entry key="560">&lt;u&gt;Download como SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download como PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download como JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download como PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download como TIF&lt;/u&gt;</entry>
+  <entry key="565">Lembrete:</entry>
+  <entry key="566">Categoria:</entry>
+  <entry key="567">Repetição:</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Localização:</entry>
+  <entry key="570">Inicio</entry>
+  <entry key="571">Fim</entry>
+  <entry key="572">Título:</entry>
+  <entry key="573">Comentário:</entry>
+  <entry key="574">Convidar pessoas</entry>
+  <entry key="575">Diário</entry>
+  <entry key="576">Mensal</entry>
+  <entry key="577">Anual</entry>
+  <entry key="578">O fim do encontro marcado é antes do início!</entry>
+  <entry key="579">Por favor, insira um título!</entry>
+  <entry key="580">Escrever da direita para a esquerda</entry>
+  <entry key="581">Ative isso se você escrever em uma linguagem de esquerda para a direita</entry>
+  <entry key="582">Painel</entry>
+  <entry key="583">Assista reuniões ou eventos gravados</entry>
+  <entry key="584">Meeting - Faça uma conferência com vários usuários&lt;br/&gt;Todos terão acesso a áudio e vídeo</entry>
+  <entry key="585">Evento - Faça uma conferência com milhares de participantes&lt;br/&gt;Somente o Moderador terá acesso ao áudio e vídeo</entry>
+  <entry key="586">Criar usuários, salas, organizações&lt;br/&gt; acesso as configurações</entry>
+  <entry key="587">Usuários nessa sala agora</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Carregando Documento. Por favor aguarde enquanto todos os clientes são sincronizados.</entry>
+  <entry key="592">Upload completo, convertendo documento...</entry>
+  <entry key="593">Inicia Upload</entry>
+  <entry key="594">Upload e Importação. Por favor, selecione um arquivo do seu disco.</entry>
+  <entry key="595">Cancela</entry>
+  <entry key="596">Seleciona arquivo</entry>
+  <entry key="597">Conexões</entry>
+  <entry key="598">Valor</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Conectado desde</entry>
+  <entry key="602">Sala / Escopo</entry>
+  <entry key="603">Desconectar usuário</entry>
+  <entry key="604">Desconectar usuário</entry>
+  <entry key="605">Tem certeza que deseja desconectar esse cliente dessa conexão?&lt;br/&gt; Isso somente remove o cliente da sala atual. O cliente pode reconectar-se novamente.</entry>
+  <entry key="606">Sua sessão foi terminada por um Administrador ou Moderador.</entry>
+  <entry key="607">Telefone</entry>
+  <entry key="608">O usuário é o moderador desta sala</entry>
+  <entry key="609">O usuário está autorizado a desenhar na lousa</entry>
+  <entry key="610">(Re) Inicie áudio/vídeo ou modifique as configurações de dispositivos</entry>
+  <entry key="611">Permitir que esse usuário a desenhar na lousa</entry>
+  <entry key="612">Remover a capacidade de desenhar na lousa</entry>
+  <entry key="613">Usuários</entry>
+  <entry key="614">Arquivos</entry>
+  <entry key="615">Lousa</entry>
+  <entry key="616">Bate-papo</entry>
+  <entry key="617">Sua conta está associada a várias organizações. Por favor escolha uma para essa sessão.</entry>
+  <entry key="618">Esta sala está cheia nesse momento. Por favor tente mais tarde.</entry>
+  <entry key="619">Tipo de sala</entry>
+  <entry key="620">Sala designada</entry>
+  <entry key="621">Hora do servidor</entry>
+  <entry key="622">TVQWEB - Lembrete</entry>
+  <entry key="623">Mensagem do usuário:</entry>
+  <entry key="624">Mensagem:</entry>
+  <entry key="625">Click nesse link para participar nas reuniões:</entry>
+  <entry key="626">Click aqui para entrar na sala</entry>
+  <entry key="627">se você estiver com problemas nesse link, copie e cole este endereço em seu navegador:</entry>
+  <entry key="628">busca interna</entry>
+  <entry key="629">usuários externos</entry>
+  <entry key="630">Nome</entry>
+  <entry key="631">Sobrenome</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirmar Saida</entry>
+  <entry key="634">Tem certeza que quer fazer logout?</entry>
+  <entry key="635">Ações</entry>
+  <entry key="636">Sala Demo</entry>
+  <entry key="637">Demo Time</entry>
+  <entry key="638">Tempo de Reunião</entry>
+  <entry key="639">Está é uma sala de demonstração. Para desligar esse aviso você deve entrar em reunião privada,ou configurar um servidor próprio. Você será desconectado em:</entry>
+  <entry key="640">Moderado</entry>
+  <entry key="641">Por favor, aguarde até que o moderador tenha entrado na sala. O moderador pode ser um Professor, Admin ou o criador dessa sala.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Entrada do compartilhamento de tela</entry>
+  <entry key="644">Há um novo compartilhamento de tela do usuário:</entry>
+  <entry key="645">Inicia compartilhamento</entry>
+  <entry key="646">Adiciona nova reunião</entry>
+  <entry key="647">Sala de Reunião</entry>
+  <entry key="648">Sala de Evento</entry>
+  <entry key="649">Moderação</entry>
+  <entry key="650">Moderar usuários</entry>
+  <entry key="651">Moderar salas</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Você quer alterar esse usuário para se tornar um moderador dessa organização?</entry>
+  <entry key="654">Por favor, escolha uma organização antes de tentar adicionar um usuário para ele!</entry>
+  <entry key="655">Organização - Moderador</entry>
+  <entry key="656">Tem certeza que deseha excluir esse usuário dessa organização?</entry>
+  <entry key="657">Este usuário é o moderador</entry>
+  <entry key="658">Este usuário não é o moderador</entry>
+  <entry key="659">Você deseja que esse usuário não seja moderador dessa organização?</entry>
+  <entry key="660">Adiciona ou exlui usuários ou senhas dentro de usa organização</entry>
+  <entry key="661">Tem certeza que quer excluir esse registro?</entry>
+  <entry key="662">Tem certeza que quer excluir esse usuário da sua organização? Você irá excluir somente a conexão do usuário entre a organização. Para excluir o usuário do sistema, vá para o painel de administração.</entry>
+  <entry key="663">Você não pode excluir seu próprio usuário!</entry>
+  <entry key="664">Este método necessita de uma conta administrativa a ser invocada!</entry>
+  <entry key="665">Não existe uma sessão associada com esse ID.</entry>
+  <entry key="666">Está é uma conta de administrador ou moderador. Você pode editar esta conta no painel de administração.</entry>
+  <entry key="667">Para completar seu registro, clique no link ou cole a URL no seu navegador.</entry>
+  <entry key="668">Clique para verificar seu e-mail</entry>
+  <entry key="669">Nenhum usuário encontrado para esse Hash.</entry>
+  <entry key="670">Este usuário já está ativado!</entry>
+  <entry key="671">Você ativou com sucesso sua conta!</entry>
+  <entry key="672">Logar agora</entry>
+  <entry key="673">Sua conta não está ativa. Use o link fornecido que foi enviado para seu e-mail durante o processo de registro.</entry>
+  <entry key="674">Cadastro efetuado com sucesso. Enviaremos um e-mail com um código de verificação. Por favor, verifique seu e-mail.</entry>
+  <entry key="675">Remove regras de moderação para esse usuário</entry>
+  <entry key="676">Dá direitos de moderação para esse usuário</entry>
+  <entry key="677">Usuário</entry>
+  <entry key="678">Acesso a lousa</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderação: Escolha um usuário da lista para conceder acesso a lousa, moderação ou video.</entry>
+  <entry key="681">Esse usuário já é moderador, então ele tem já tem direitos de desenhar na lousa.</entry>
+  <entry key="682">Esse é você! Não é possível remover seu próprio direito de moderador.</entry>
+  <entry key="683">Permite esse usuário publicar seu Audio / Video</entry>
+  <entry key="684">Remove ádio/Vídeo desse usuário</entry>
+  <entry key="685">Eu tenho uma pergunta.</entry>
+  <entry key="686">Gostaria de desenhar na lousa</entry>
+  <entry key="687">Gostaria de compartilhar meu áudio/vídeo</entry>
+  <entry key="688">Você é o moderador dessa sala</entry>
+  <entry key="689">Você está autorizado a desenhar na lousa</entry>
+  <entry key="690">Você está autorizado a compartilhar seu áudio/vídeo</entry>
+  <entry key="691">Mensagem do moderador</entry>
+  <entry key="692">O usuário</entry>
+  <entry key="693">gostaria de fazer uma pergunta.</entry>
+  <entry key="694">gostaria de desenhar na lousa.</entry>
+  <entry key="695">gostaria de compartilhar meu áudio / vídeo</entry>
+  <entry key="696">Você tem que aguardar enquanto o moderador entra na sala.</entry>
+  <entry key="697">Cancela</entry>
+  <entry key="698">Salva</entry>
+  <entry key="699">Dia</entry>
+  <entry key="700">Mês</entry>
+  <entry key="701">Ano</entry>
+  <entry key="702">Upload de arquivo</entry>
+  <entry key="703">Adiciona pasta</entry>
+  <entry key="704">Atualiza</entry>
+  <entry key="705">Lixeira</entry>
+  <entry key="706">Meus Arquivos (Home Drive)</entry>
+  <entry key="707">Arquivos da sala (Public Drive)</entry>
+  <entry key="708">Adiciona arquivo</entry>
+  <entry key="709">Adiciona pasta</entry>
+  <entry key="710">Deleta pasta</entry>
+  <entry key="711">Edita Nome</entry>
+  <entry key="712">Nova pasta</entry>
+  <entry key="713">Tem certeza que quer excluir esse item?</entry>
+  <entry key="714">Busca</entry>
+  <entry key="715">Busca</entry>
+  <entry key="716">Abre documento</entry>
+  <entry key="717">Mostra todos os arquivos (Tree View)</entry>
+  <entry key="718">Fecha Documento</entry>
+  <entry key="719">Deleta arquivo</entry>
+  <entry key="720">Você não está autorizado a desenhar nada na lousa. Você precisa tornar-se moderador ou conseguir o direito. Você pode pedir esse direito a um moderador.</entry>
+  <entry key="721">Propriedade do documento</entry>
+  <entry key="722">Inicia cliente (external)</entry>
+  <entry key="723">Inicia cliente (HTTP)</entry>
+  <entry key="724">Um usuário deseja compartilhar sua tela. Quer ver isso?</entry>
+  <entry key="725">Você está compartilhando seu desktop. Para parar, pressione o botão Stop no cliente de compartilhamento.</entry>
+  <entry key="726">Compartilhar sessão</entry>
+  <entry key="727">Você já está compartilhando seu desktop!</entry>
+  <entry key="728">Visualisador de Desktop</entry>
+  <entry key="729">Sai</entry>
+  <entry key="730">Compartilhador de Desktop</entry>
+  <entry key="731">Clique em iniciar para publicar sua tela</entry>
+  <entry key="732">Inicia compartilhamento</entry>
+  <entry key="733">Para compartilhamento</entry>
+  <entry key="734">Seleciona a área de sua tela:</entry>
+  <entry key="735">Troca largura</entry>
+  <entry key="736">O compartilhamento foi finalizado nessa sessão!</entry>
+  <entry key="737">Troca largura</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Largura:</entry>
+  <entry key="741">Altura:</entry>
+  <entry key="742">A conexão foi terminada pelo servidor</entry>
+  <entry key="743">Cancelar</entry>
+  <entry key="744">Iniciar externo</entry>
+  <entry key="745">Se você fechar essa sessão completamente, você não será capaz de reiniciar o visualizador para essa sessão.</entry>
+  <entry key="746">Confirme o fechamento do visualizador de sessão</entry>
+  <entry key="747">Compartilha Tela</entry>
+  <entry key="748">Grava sessão</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Melhor visualizado no Internet Explorer.</entry>
+  <entry key="751">Anterior</entry>
+  <entry key="752">Próximo</entry>
+  <entry key="753">Recarregar</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Carrega</entry>
+  <entry key="756">Adiciona esse site como site padrão do seu perfil.</entry>
+  <entry key="757">Teste as conf.</entry>
+  <entry key="758">Verifique se o microfone e a camera antes de entrar em uma sala .</entry>
+  <entry key="759">Não mostre esse teste novamente</entry>
+  <entry key="760">Cancela</entry>
+  <entry key="761">Iniciar conferência</entry>
+  <entry key="762">Não pergunte novamente</entry>
+  <entry key="763">GRAVA</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Você pode continuar sem o teste, se você não pretente publicar sua imagem ou voz. Participantes sem audio e video podem usar a lousa, compartilhar o desktop ou usar o chat.</entry>
+  <entry key="766">PARAR</entry>
+  <entry key="767">Intensidade</entry>
+  <entry key="768">Pressione inicia</entry>
+  <entry key="769">Inicia Conferencia</entry>
+  <entry key="770">Iniciar Evento</entry>
+  <entry key="771">Selecione a sala</entry>
+  <entry key="772">Verifique a configuração</entry>
+  <entry key="773">Inicie a Conferência</entry>
+  <entry key="774">Passos para a conferência:</entry>
+  <entry key="775">Iniciar Gravação</entry>
+  <entry key="776">Não mostrar Áudio/Vídeo teste (gravação) antes de entrar em uma conferência</entry>
+  <entry key="777">Salas públicas</entry>
+  <entry key="778">Salas públicas são acessiveis por todos os usuários.</entry>
+  <entry key="779">Salas privadas</entry>
+  <entry key="780">Salas privadas são acessiveis somente por usuários da mesma organização.</entry>
+  <entry key="781">Minha sala</entry>
+  <entry key="782">Salas criadas nessa seção são de uso pessoal. Elas são criadas através do calendário e tem um início e uma data final. Elas só estão listadas nesta seção durante sua validade.</entry>
+  <entry key="783">Você tem que ser o moderador para fazer isso.</entry>
+  <entry key="784">Pedir moderação</entry>
+  <entry key="785">Pedir acesso para a lousa</entry>
+  <entry key="786">Pedir acesso para camera/microfone</entry>
+  <entry key="787">Esse hash já foi usado. Você não pode utiliza-lo duas vezes.</entry>
+  <entry key="788">INICIA</entry>
+  <entry key="789">SAIR</entry>
+  <entry key="790">Tem certeza que quer sair? Você deve limpar os documentos, lousa, e histórico do chat.</entry>
+  <entry key="791">Deixar a conferência</entry>
+  <entry key="792">Salas</entry>
+  <entry key="793">Escolha uma sala para a reunião</entry>
+  <entry key="794">Existe um evento não salvo no calendário. Por favor salve ou exclua.</entry>
+  <entry key="795">Por favor, adicionar pelo menos um participante para a reunião!</entry>
+  <entry key="796">Tem certeza que quer excluir esse evento?</entry>
+  <entry key="797">Aviso</entry>
+  <entry key="798">Adiciona evento</entry>
+  <entry key="799">dia</entry>
+  <entry key="800">semana</entry>
+  <entry key="801">mês</entry>
+  <entry key="802">Descrição</entry>
+  <entry key="803">Participantes</entry>
+  <entry key="804">{0}, sua plataforma de conferência web. Você pode seguir os passos 1-2-3 para entrar em uma sala de conferência diretamente ou selecione a opcão calendário para planejar uma reunião.</entry>
+  <entry key="805">Planejar Reunião</entry>
+  <entry key="806">Para configurar uma conferência você pode adicionar um novo evento ao calendário</entry>
+  <entry key="807">Precisa de ajuda?</entry>
+  <entry key="808">Restrito</entry>
+  <entry key="809">busca</entry>
+  <entry key="810">Adiciona</entry>
+  <entry key="811">Não há nenhum usuário selecionado, Por favor selecione um item da lista, e depois clique em adicionar.</entry>
+  <entry key="812">Adicionar Participante</entry>
+  <entry key="813">Salva</entry>
+  <entry key="814">Exclui</entry>
+  <entry key="815">Detalhes do evento</entry>
+  <entry key="816">Moderadores padrão</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Nome</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Adiciona o moderador padrão</entry>
+  <entry key="822">É um Super Moderator</entry>
+  <entry key="823">Se a sala é moderada, usuários com permissão de Moderador ou Administrador são automaticamente Moderadores quando entram na sala. Se você não quer espeficificar e só deseja que um determinado usuário torne-se moderador use a opção Moderador Padrão.</entry>
+  <entry key="824">Um Super Moderador é sempre um Moderador quando entra na sala, e ninguem pode remover seu privilégio de moderação.</entry>
+  <entry key="825">Aplica Super-Moderação para o usuário</entry>
+  <entry key="826">Remove Super-Moderação do usuário</entry>
+  <entry key="827">D</entry>
+  <entry key="828">Se você adicionar uma Organização para a sala apenas usuários dessa organização têm acesso a ela (esta opção só é válido se a opção Público não estiver selecionada!)</entry>
+  <entry key="829">Moderação</entry>
+  <entry key="830">Limitações</entry>
+  <entry key="831">Organização</entry>
+  <entry key="832">Tem certeza?</entry>
+  <entry key="833">Tem certeza que quer excluir esse item? Você precisa pressionar o botao Salvar para fazer as mudanças!</entry>
+  <entry key="834">Nenhum usuário selecionado. Por favor selecione um depois adicione isso!</entry>
+  <entry key="835">Adiciona um novo moderador padrão</entry>
+  <entry key="836">Quer adicionar a permissão de Super-moderador para esse usuário? Um super-moderador não é moderador somente da sala, e nenhum outro moderador pode remover a permissão de moderação dele. Você precisa salvar para que as configurações tenham efeito.</entry>
+  <entry key="837">Tem certeza que quer remover a permissão de Super-moderador para esse usuário? Você precisa salvar para que as configurações tenham efeito.</entry>
+  <entry key="838">É um Super-moderador. Você não pode remover a permissão de Moderação de um Super-moderador!</entry>
+  <entry key="839">Tem certeza que quer exclurir esse Arquivo/Diretório?</entry>
+  <entry key="840">Excluir Arquivo/Diretório?</entry>
+  <entry key="841">Sr.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Propriedades</entry>
+  <entry key="844">Mostra a posição do mouse para os espectadores</entry>
+  <entry key="845">Compartilhar Audio com o SIP Applet</entry>
+  <entry key="846">Compartilhar Áudio e Vídeo via SIP com Flash</entry>
+  <entry key="847">Ajuste</entry>
+  <entry key="848">Ver Tela</entry>
+  <entry key="849">O Usuário</entry>
+  <entry key="850">quer compartihar sua tela. Você quer ver?</entry>
+  <entry key="851">Fecha</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">A sessão foi fechada pelo usuário que compartilhava!</entry>
+  <entry key="854">Pausa</entry>
+  <entry key="855">Novo compartilhamento de tela</entry>
+  <entry key="856">Minimiza</entry>
+  <entry key="857">Maximiza</entry>
+  <entry key="858">Vídeo</entry>
+  <entry key="859">Linha do tempo</entry>
+  <entry key="860">Minhas Gravações</entry>
+  <entry key="861">Gravações Públicas</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Nome</entry>
+  <entry key="864">Duração</entry>
+  <entry key="865">Data</entry>
+  <entry key="866">Por</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Vídeo - Principal</entry>
+  <entry key="869">Gravando</entry>
+  <entry key="870">Você pode gravar e compartilhar a qualquer momento. Para que outros usuários consigam ver sua tela, clique no botão Iniciar no topo da tela. Para somente gravar, clique no botão Inicia Gravação.</entry>
+  <entry key="871">Inicia gravando</entry>
+  <entry key="872">Para a gravação</entry>
+  <entry key="873">Download o arquivo FLV</entry>
+  <entry key="874">Sala</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Parar</entry>
+  <entry key="877">O microfone do usuário está ligado</entry>
+  <entry key="878">Interromper o compartilhamento</entry>
+  <entry key="879">Permitir perguntas dos usuários</entry>
+  <entry key="880">Desligue isso para evitar que qualquer usuário perturbe você nessa sala. O botão para pedir a moderação ("Eu tenho uma pergunta") fica invisível.</entry>
+  <entry key="881">Direitos</entry>
+  <entry key="882">Download como AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Somente Audio</entry>
+  <entry key="887">Os erros aconteceram no processo de gravação.</entry>
+  <entry key="888">A visualização da gravação ainda não está pronta. Por favor tente novamente em alguns minutos.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Gravador de mensagem</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">O Applet SIP não está pronto</entry>
+  <entry key="893">Configurações da conta SIP</entry>
+  <entry key="894">Definições SIP para cada usuário. Você pode ligar ou desligar o SIP via Administração &gt; Configuração (Chave: enable_sip). Os dados SIP para cada usuário deve ser criados automaticamente.</entry>
+  <entry key="895">Usuário do SIP</entry>
+  <entry key="896">Senha do SIP</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">O Login no Gateway SIP falhou. Você deve conferir seus dados de autenticação do seu provedor SIP. Como administrador, você ainda poderá fazer o login e verificar a configuração. Como usuário ou moderador, você será bloqueado a partir de qualquer iteração.</entry>
+  <entry key="899">O Login no Gateway SIP falhou, entre em contato com o suporte do serviço!</entry>
+  <entry key="900">Logando no SIP-Gateway ...</entry>
+  <entry key="901">Logando no SIP-Gateway ...</entry>
+  <entry key="902">Mostra Log</entry>
+  <entry key="903">Log de mensagem do processo de gravação</entry>
+  <entry key="904">Mensagem do Applet SIP</entry>
+  <entry key="905">O Applet SIP não está pronto. Aceite o applet e clique em ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">Para acessar outras gravações que você tem para fazer login no aplicativo {0}.</entry>
+  <entry key="910">Escolha o usuário para este vídeo</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">Você é um moderador nessa entrevista. Você pode decidir quem está falando nesta entrevista e pode iniciar / parar a gravação da Sessão.</entry>
+  <entry key="913">Iniciar gravação</entry>
+  <entry key="914">Parar gravação</entry>
+  <entry key="915">A gravação da entrevista já foi iniciada.</entry>
+  <entry key="916">A gravação está parada ou não foi iniciada ainda.</entry>
+  <entry key="917">A gravação desta entrevista já começou!</entry>
+  <entry key="918">Cancelar</entry>
+  <entry key="919">O processamento de uma entrevista demora 5 minutos por 1 minutos de entrevista. O progresso atual da transcodificacao da entrevista e processamento é a seguinte:</entry>
+  <entry key="920">Você tem que digitar sua senha novamente para criar automaticamente os dados SIP</entry>
+  <entry key="921">Re-generar SIP Data</entry>
+  <entry key="922">Você não pode mover o arquivo ou pasta em sua própria pasta!</entry>
+  <entry key="923">Tamanho da unidade</entry>
+  <entry key="924">Tamanho do HD público</entry>
+  <entry key="925">Propriedades da licença</entry>
+  <entry key="926">Você pode vincular o usuário a uma data de expiração ou a um número máximo de minutos, quando você ativar o licenciamento.</entry>
+  <entry key="927">Verifique licença</entry>
+  <entry key="928">Aquisição de volume</entry>
+  <entry key="929">Data de expiração</entry>
+  <entry key="930">Segundos restantes</entry>
+  <entry key="931">Tempo total</entry>
+  <entry key="932">Sua licença expirou. Você precisa comprar novos minutos (pagar por minuto) ou uma base fixa de consumo / volume.</entry>
+  <entry key="933">Clique e compre</entry>
+  <entry key="934">Tempo restante em sua conta</entry>
+  <entry key="935">Informações de Licença de Usuário</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Fechar</entry>
+  <entry key="938">Sua licença expirou. Você precisa comprar novos minutos (pagar por minuto) ou uma base fixa de consumo / volume.</entry>
+  <entry key="939">Propriedades da licença</entry>
+  <entry key="940">Você pode optar por comprar minutos para fazer videoconferências (pagar por minuto)&lt;br/&gt;&lt;br/&gt; Ou adquirir um plano de 3 a 12 meses&lt;br/&gt;&lt;br/&gt;Envio de convites (links diretos para salas de conferências) ou a criação de salas de conferências via o calendário com usuários externos só é permitido com uma base fixa de volume!</entry>
+  <entry key="941">Compre 60 minutos: R$...</entry>
+  <entry key="942">Compre 5 horas: R$...</entry>
+  <entry key="943">Compre 3 meses R$...</entry>
+  <entry key="944">Compre 6 meses R$...</entry>
+  <entry key="945">Pagar por minute</entry>
+  <entry key="946">Aquisição de volume</entry>
+  <entry key="947">Você tem licença ilimitada</entry>
+  <entry key="948">Sua licença expira em:</entry>
+  <entry key="949">Você adquiriu o plano por minuto e ainda tem:</entry>
+  <entry key="950">Compre mais créditos!</entry>
+  <entry key="951">Quer seu prórpio serviço personalizado de videoconferências?</entry>
+  <entry key="952">Você gostaria de ter o nome de seu aplicativo instalado em seu servidor ou integrado em seu Moodle, SugarCRM, site ou Intranet? Preços a partir de xxx reais por instalação!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Responder a:</entry>
+  <entry key="955">Mensagem:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Clique aqui para informações de condições e contato</entry>
+  <entry key="958">Detalhes do cartão de crédito</entry>
+  <entry key="959">Nome</entry>
+  <entry key="960">Sobrenome</entry>
+  <entry key="961">Tipo de Cartão</entry>
+  <entry key="962">Cartão VISA</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Descobrir</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Número do Cartão</entry>
+  <entry key="967">Data de Validade</entry>
+  <entry key="968">Número de verificação do cartão</entry>
+  <entry key="969">Endereço de Cobrança</entry>
+  <entry key="970">Endereço</entry>
+  <entry key="971">Endereço</entry>
+  <entry key="972">Cidade</entry>
+  <entry key="973">País</entry>
+  <entry key="974">Estado (somente US)</entry>
+  <entry key="975">CEP</entry>
+  <entry key="976">Quantidade</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Passo 1: {0} - Forma de Pagamento</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Clique"Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Obrigado por comprar o {0}. &lt;br/&gt; Tão logo recebermos o pagamento sua conta será atualizada. &lt;br/&gt; Você receberá um email com a sua factura em formato PDF. &lt;br/&gt; Você também pode verificar as transações atuais e passadas em seu configurações do perfil. &lt;br/&gt; &lt;br/&gt; Você pode fechar esta janela do navegador / guia agora e voltar para {0}.</entry>
+  <entry key="982">Confirme e compre!</entry>
+  <entry key="983">Clique e compre!</entry>
+  <entry key="984">Passo 3: Pagamento {0} - Confira a ordem e compre!</entry>
+  <entry key="985">Nome</entry>
+  <entry key="986">Pagamento recebido!</entry>
+  <entry key="987">Olá,</entry>
+  <entry key="988">Nós recebemos o seu pagamento. Seu perfil de usuário está atualizado agora. Veja anexo a sua fatura. As Notas Fiscais Futura e passada também podem ser baixadas em seu perfil de usuário.</entry>
+  <entry key="989">Obrigado por utilizar o {0}!</entry>
+  <entry key="990">{0} Pagamento Recebido -</entry>
+  <entry key="991">Estado de pagamento e transações</entry>
+  <entry key="992">Código de transação</entry>
+  <entry key="993">Minutos</entry>
+  <entry key="994">Meses</entry>
+  <entry key="995">R$</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Fatura</entry>
+  <entry key="998">Fatura</entry>
+  <entry key="999">Você necessita pagar uma taxa para ser capaz de enviar convites ou criar encontros através do calendário. Com pagamento por minuto só é possível para você acessar o {0}. Você não pode permitir a terceiros o acesso a uma reunião.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Configurações</entry>
+  <entry key="1002">O número de conferência e PIN é criado automaticamente através do OpenXG RPC-Gateway</entry>
+  <entry key="1003">Número SIP</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Limpar objetos desenhados na lousa!</entry>
+  <entry key="1006">Somente a URL digitada na barra de status é enviada para os participantes!</entry>
+  <entry key="1007">Faça salas de equipe [Breakout session]</entry>
+  <entry key="1008">Escolha usuários para a sala de equipe</entry>
+  <entry key="1009">Você pode escolher usuários aqui e criar uma nova sala de conferência ("Equipe da Sala") para eles. Os usuários escolhidos irão automaticamente para a nova equipe da sala ou recebem uma notificação. Equipe da sala-Moderadores recebem ainda uma lista de salas atuais, para que possam mudar de sala, se houver a necessidade de um moderador.</entry>
+  <entry key="1010">Usuário</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012">Login</entry>
+  <entry key="1013">Usuários para a nova sala de equipe:</entry>
+  <entry key="1014">Criar equipe da sala</entry>
+  <entry key="1015">Cancelar</entry>
+  <entry key="1016">Escolha pelo menos um usuário para a equipe da sala!</entry>
+  <entry key="1017">Adicionar usuário a equipe</entry>
+  <entry key="1018">Remover usuário da sala de equipe</entry>
+  <entry key="1019">Usuário é moderador. Ele pode gerenciar outros usuários</entry>
+  <entry key="1020">Tipo de sala</entry>
+  <entry key="1021">Se você ticar "Forçar usuario a mudar para nova Sala" todos os usuários escolhidos irão automaticamente para a recém-criada sala. Caso contrário, receberão uma notificação que eles &lt;i&gt;podem&lt;/ i&gt; mudar para a nova sala. Equipe de Moderadores sempre tem a livre escolha para gerir as Salas e alternar entre elas.</entry>
+  <entry key="1022">Gerencias salas de equipe</entry>
+  <entry key="1023">Você pode alternar entre aqui todas as salas de equipe que são atribuídas como moderador de sala de equipe. Usuários dentro da sala de equipe, você podem lhe enviar uma mensagem, por exemplo, pedindo para vir para a sua sala de reunião e ajudá-los. Você também pode encerrar a sala de equipe e todos os usuários serão desconectados.</entry>
+  <entry key="1024">Forçar usuário a mudar para nova sala</entry>
+  <entry key="1025">Nome</entry>
+  <entry key="1026">Criado por</entry>
+  <entry key="1027">Criado por</entry>
+  <entry key="1028">Criado por</entry>
+  <entry key="1029">Usuários disponíveis</entry>
+  <entry key="1030">Adicionar um usuário com o "-" da esquerda ou removê-lo com o "+" da direita!</entry>
+  <entry key="1031">1) Configurações de salas de equipe</entry>
+  <entry key="1032">2) Adicionar usuários à sala de equipe</entry>
+  <entry key="1033">Nome da sala de equipe</entry>
+  <entry key="1034">Sala de equipe</entry>
+  <entry key="1035">Mudar para a sala</entry>
+  <entry key="1036">Mudar para essa sala de equipe</entry>
+  <entry key="1037">Encerrar sala de equipe e desconectar todos os usuários!</entry>
+  <entry key="1038">Nova sala de equipe</entry>
+  <entry key="1039">Há uma nova sala de equipe disponível para você!</entry>
+  <entry key="1040">Mudar para uma sala de equipe</entry>
+  <entry key="1041">Ações da sala de equipe</entry>
+  <entry key="1042">Você pode reabrir esta janela através do menu principal &gt;&gt;&gt; ações</entry>
+  <entry key="1043">Enviar mensagem ao moderador da sala de equipe</entry>
+  <entry key="1044">Nova sala de equipe</entry>
+  <entry key="1045">Há uma nova sala de equipe deisponível.Você pode mudar para essa sala. Salas de euipe são como grupos de trabalho com possibilidades de pedir ajuda ao moderador. Suas salas de equipe também estão disponíveis na seção "minhas reuniões".</entry>
+  <entry key="1046">Mudar para a sala de equipe</entry>
+  <entry key="1047">Criada por:</entry>
+  <entry key="1048">Nome da sala de equipe</entry>
+  <entry key="1049">Esta janela permanecerá aberta mesmo que você deixe a sala!</entry>
+  <entry key="1050">Usuários para esta sala de equipe</entry>
+  <entry key="1051">3) Outras sala de equipe para as quais você pode se mudar:</entry>
+  <entry key="1052">Deixe uma mensagem para o moderador da sala de equipe.</entry>
+  <entry key="1053">Enviar</entry>
+  <entry key="1054">2) Usuário convidados para esta sala de equipe</entry>
+  <entry key="1055">É moderador da sala de equipe</entry>
+  <entry key="1056">Estes são todos os usuários que o moderador convidou para a sala de equipe</entry>
+  <entry key="1057">Não há moderador da equipe logado no momento!</entry>
+  <entry key="1058">Por favor insira uma mensagem</entry>
+  <entry key="1059">Por favor, nos ajude!</entry>
+  <entry key="1060">Um usuário de uma sala de equipe precisa de sua ajuda!</entry>
+  <entry key="1061">Equipe da sala solicita ajuda</entry>
+  <entry key="1062">Mensagem:</entry>
+  <entry key="1063">De:</entry>
+  <entry key="1064">Você não está atualmente em qualquer equipe da sala. Mas você pode mudar aqui para todas as salas as quais você tem acesso.</entry>
+  <entry key="1065">Faça o backup do sistema. O backup inclui todos os dados de usuários. A configuração não está incluído, bem como as etiquetas de idiomas. Porque esses valores são importados com o instalador de sistema. Para atualizar seu sistema, exportar seu antigo sistema (1) re-instalar em um novo banco de dados um novo pacote (2) e importar o arquivo de backup novamente (3). O backup deve ser importado antes de gerar os dados no sistema recém-instalado.</entry>
+  <entry key="1066">Backup do sistema</entry>
+  <entry key="1067">Permitir ao usuário Compartilhar/Gravar a tela</entry>
+  <entry key="1068">Negar ao usuário compartilhar tela/Gravar</entry>
+  <entry key="1069">Usuário é Moderador, ele pode fazer qualquer coisa!</entry>
+  <entry key="1070">gostaria de compartilhar/gravar a tela.</entry>
+  <entry key="1071">Você está autorizado a compartilhar/gravar a tela</entry>
+  <entry key="1072">Aplicar para direito de compartilhar/gravar a tela</entry>
+  <entry key="1073">Permitir/Negar direito de compartilhar/gravar tela</entry>
+  <entry key="1074">Desligar o som</entry>
+  <entry key="1075">Ligar o som</entry>
+  <entry key="1076">Sala só com áudio</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Permitir controle remoto (Durante o Compartilhamento de Tela)</entry>
+  <entry key="1079">Negar Controle Remoto (Durante o Compartilhamento de Tela)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">Você está autorizado a controlar remotamente a tela (Durante o Compartilhamento de Tela)</entry>
+  <entry key="1082">gostaria de controlar remotamente a tela.</entry>
+  <entry key="1083">Usuário é Moderador, ele pode fazer qualquer coisa! [Remote Desktop Control]</entry>
+  <entry key="1084">Permitir/Negar direito de acesso de controlar remotamente a tela (Durante o Compartilhamento de Tela)</entry>
+  <entry key="1085">1) Seu PC para o PC remoto: Para copiar e colar texto de sua área de transferência para a tela controlada remotamente, clique na tela, clique com o botão direito no campo de texto e escolha "insert" do menu.&lt;br/&gt;&lt;br/&gt;2) Do PC remoto para seu PC: Para copiar texto do PC remoto para o seu, destaque (clique e arraste sobre as palavras) o texto com o mouse na tela remota, clique com o botão direito e escolha a opção &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copiar e colar texto do seu PC para o PC remoto e vice versa.</entry>
+  <entry key="1087">Copiar o texto realçado</entry>
+  <entry key="1088">Como copiar e colar</entry>
+  <entry key="1089">Qualidade do compartilhamento de tela:</entry>
+  <entry key="1090">Qualidade muito alta</entry>
+  <entry key="1091">Qualidade alta</entry>
+  <entry key="1092">Qualidade média</entry>
+  <entry key="1093">Qualidade baixa</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Teclado:</entry>
+  <entry key="1097">Feche conferência!</entry>
+  <entry key="1098">a conferência terminou. Você será direcionado para assuntos interessantes em</entry>
+  <entry key="1099">Fechar a sala</entry>
+  <entry key="1100">Fechar endereço eletrônico</entry>
+  <entry key="1101">Configurações de terminação da sala</entry>
+  <entry key="1102">Se a sala estiver encerrada, usuários serão redirecionados para o endereço eletrônico</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Nome</entry>
+  <entry key="1106">Arquivo de configuração</entry>
+  <entry key="1107">Configuração LDAP</entry>
+  <entry key="1108">Nome</entry>
+  <entry key="1109">Habilitado</entry>
+  <entry key="1110">Inserido</entry>
+  <entry key="1111">Inserido por</entry>
+  <entry key="1112">Atualizado</entry>
+  <entry key="1113">Atualizado por</entry>
+  <entry key="1114">Os arquivos de configuração estão na pasta webapps/openmeetings/conf. Você precisa carregar manualmente os arquivos para esta pasta. As alterações no arquivo de configuração estarão imediatamente online.</entry>
+  <entry key="1115">Nome de arquivo de configuração</entry>
+  <entry key="1116">Se você escolheu "Adicionar domínio para nome de usuário" o valor no campo "domínio" é adicionado para cada login que o usuário digitar no box de login. Isso é útil se o login no LDAP é salvo incluindo o nome do domínio. Exemplo: Usuário entra com "Maria" especificado como "localhost.com". O login que é verificado em relação ao LDAP é maria@localhost.com</entry>
+  <entry key="1117">Adicionar Domínio ao usuário</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Inserir</entry>
+  <entry key="1120">Copiar o texto realçado</entry>
+  <entry key="1121">Texto da área de transferência remota</entry>
+  <entry key="1122">Mostrar área de transferência remota</entry>
+  <entry key="1123">Não mostrar novamente</entry>
+  <entry key="1124">Copiar o texto aqui ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Editar configurações padrão ...</entry>
+  <entry key="1127">Não mostrar caixa de informação no controle remoto sobre Copiar e Colar</entry>
+  <entry key="1128">Salvar</entry>
+  <entry key="1129">Remover</entry>
+  <entry key="1130">Cancelar</entry>
+  <entry key="1131">Convidar usuário a sala de conferência</entry>
+  <entry key="1132">Escolha uma sala de conferência. O usuário convidado irá receber uma mensagem com seu nome e um link para a sala.</entry>
+  <entry key="1133">Conectado desde:</entry>
+  <entry key="1134">Entre na sala após o envio de convite</entry>
+  <entry key="1135">Convidar</entry>
+  <entry key="1136">Mensagem</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Mensagem convite</entry>
+  <entry key="1139">Enviar convite</entry>
+  <entry key="1140">&lt;b&gt;não&lt;/b&gt; aceitou seu convite!</entry>
+  <entry key="1141">Aceitar</entry>
+  <entry key="1142">Aceitar</entry>
+  <entry key="1143">Fuso horário</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Descrição</entry>
+  <entry key="1147">Criado por</entry>
+  <entry key="1148">Mensagem Fuso Horário</entry>
+  <entry key="1149">Marque a opção "Mensagem do Fuso Horário" para apresentar aos usuários uma mensagem na próxima vez entrarem para atualizar o perfil.</entry>
+  <entry key="1150">Por favor, verifique o fuso horário no seu perfil de usuário.</entry>
+  <entry key="1151">Nova conferência {0}</entry>
+  <entry key="1152">Detalhes:</entry>
+  <entry key="1153">Inicio:</entry>
+  <entry key="1154">Fim:</entry>
+  <entry key="1155">Conferência {0} Modificada:</entry>
+  <entry key="1156">Organizador:</entry>
+  <entry key="1157">Conferência {0} Cancelada:</entry>
+  <entry key="1158">{0} Lenbrete de conferência:</entry>
+  <entry key="1159">Definições comunitárias</entry>
+  <entry key="1160">Mostrar dados de contato para todos.</entry>
+  <entry key="1161">Adicionar campos de interesse que você tem a oferecer ou que você está procurando, para encontrar parceiros interessantes para uma conferência. Vírgula separa os termos (por exemplo: serviço médico, garantia de saúde, ...)</entry>
+  <entry key="1162">Minhas ofertas</entry>
+  <entry key="1163">Meus interesses</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Fuso horário</entry>
+  <entry key="1166">Áreas de interesse</entry>
+  <entry key="1167">Informações para contato</entry>
+  <entry key="1168">Mostrar dados de contato apenas para os contatos</entry>
+  <entry key="1169">Não mostrar dados de contato</entry>
+  <entry key="1170">Meu Perfil</entry>
+  <entry key="1171">Editar configurações</entry>
+  <entry key="1172">Pesquisar usuários</entry>
+  <entry key="1173">Veja o seu perfil como outro o vêem</entry>
+  <entry key="1174">Edite suas configurações, adicionar os seus interesses para ser encontrado</entry>
+  <entry key="1175">Pesquisar outros usuários e ampliar sua rede</entry>
+  <entry key="1176">Pesquisar</entry>
+  <entry key="1177">Usuário oferece</entry>
+  <entry key="1178">Usuário procura</entry>
+  <entry key="1179">Texto livre</entry>
+  <entry key="1180">Nome</entry>
+  <entry key="1181">Fuso Horário</entry>
+  <entry key="1182">Oferece</entry>
+  <entry key="1183">Busca</entry>
+  <entry key="1184">Resultado da pesquisa</entry>
+  <entry key="1185">Ações</entry>
+  <entry key="1186">Adicionar aos contatos</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contatos e Mensagens</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Aceitar</entry>
+  <entry key="1191">Negar</entry>
+  <entry key="1192">Olá,</entry>
+  <entry key="1193">gostaria de adicioná-lo como contato.</entry>
+  <entry key="1194">Verifique os seus pedidos de contacto em {0} ou clique sobre os links para aceitar ou negar o pedido</entry>
+  <entry key="1195">Este usuário já está em sua lista de contatos ou recebeu um convite para sua lista de contatos que não foi respondida ainda.</entry>
+  <entry key="1196">Sua lista de contatos</entry>
+  <entry key="1197">Edite seu contato e mensagens, &lt;br/&gt; gerencie seus contatos pendentes!</entry>
+  <entry key="1198">confirmou você como contato!</entry>
+  <entry key="1199">Informação de chat</entry>
+  <entry key="1200">Mostrar / Copiar log do chat</entry>
+  <entry key="1201">Log do chat</entry>
+  <entry key="1202">De</entry>
+  <entry key="1203">Assunto</entry>
+  <entry key="1204">Enviar</entry>
+  <entry key="1205">Enviar</entry>
+  <entry key="1206">Menssagens</entry>
+  <entry key="1207">Novo email</entry>
+  <entry key="1208">Clique para escrever uma nova mensagem para quaquer um de seus contatos</entry>
+  <entry key="1209">Escrever nova mensagem</entry>
+  <entry key="1210">Para:</entry>
+  <entry key="1211">Assunto:</entry>
+  <entry key="1212">Ative ajuste e a lousa irá ampliar na tela inteira, então &lt;br/&gt; documentos estarão visíveis de acordo com a resolução da tela de cada participante.</entry>
+  <entry key="1213">Expulsar usuário</entry>
+  <entry key="1214">Você não pode expulsar a si mesmo da sala de conferência! Se você quiser sair da sala feche o navegador!</entry>
+  <entry key="1215">Você realmente deseja desconectar este usuário da sala de conferência?</entry>
+  <entry key="1216">Confirme ação ...</entry>
+  <entry key="1217">Você não pode expulsar um Super-Moderador de uma sala!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Iniciar</entry>
+  <entry key="1220">Fim</entry>
+  <entry key="1221">Adicionar uma solicitação de reunião opcional para a mensagem e criar uma sala de conferência. O evento é copiado no calendário de cada participante.</entry>
+  <entry key="1222">Caixa de Entrada</entry>
+  <entry key="1223">Enviado</entry>
+  <entry key="1224">Lixo</entry>
+  <entry key="1225">Este é você! Você não pode adicionar a si mesmo como contato.</entry>
+  <entry key="1226">O usuário já está negado!</entry>
+  <entry key="1227">O usuário já está aprovado!</entry>
+  <entry key="1228">Este hash de contato do usuário é inválido!</entry>
+  <entry key="1229">Usuário adicionado à lista de contatos!</entry>
+  <entry key="1230">Usuário negado como contato e removido da lista de contatos pendentes!</entry>
+  <entry key="1231">Não há esse contato!</entry>
+  <entry key="1232">Será que você realmente deseja remover o contato?</entry>
+  <entry key="1233">Confirmar remoção de contato</entry>
+  <entry key="1234">Deletar contato da lisa</entry>
+  <entry key="1235">Perfil de usuário</entry>
+  <entry key="1236">Mostrar o perfil do usuário</entry>
+  <entry key="1237">Mensagens</entry>
+  <entry key="1238">Pesquisar</entry>
+  <entry key="1239">Selecionar todos</entry>
+  <entry key="1240">Desmarcar</entry>
+  <entry key="1241">Selecionar não lidas</entry>
+  <entry key="1242">Selecione ler</entry>
+  <entry key="1243">Mover para pasta ...</entry>
+  <entry key="1244">Adicionar nova pasta ...</entry>
+  <entry key="1245">Excluir</entry>
+  <entry key="1246">e-mails deletados ainda permanecem na sua lixeira!</entry>
+  <entry key="1247">Marcar não lidas</entry>
+  <entry key="1248">Marcar lidas</entry>
+  <entry key="1249">Responder</entry>
+  <entry key="1250">Responder a todos</entry>
+  <entry key="1251">Para frente</entry>
+  <entry key="1252">Ações ...</entry>
+  <entry key="1253">Enviar mensagem privada</entry>
+  <entry key="1254">Nada selecionado!</entry>
+  <entry key="1255">Mover para Caixa de Entrada</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">Essa ação não pode ser desfeita!</entry>
+  <entry key="1258">Adicionar pasta</entry>
+  <entry key="1259">Adicionar pastas e organizar suas mensagens!</entry>
+  <entry key="1260">Adicionar pasta</entry>
+  <entry key="1261">Adicionar</entry>
+  <entry key="1262">excluir pasta</entry>
+  <entry key="1263">Você não pode excluir esta pasta, ainda existem nela! Excluir primeiro as mensagens ou movê-los para outra pasta.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Você realmente quer apagar esta pasta? Não há maneira de desfazer isso.</entry>
+  <entry key="1266">O seu pedido foi enviado para o usuário. O usuário receberá uma notificação para aceitar ou negar o seu pedido. Apenas os pedidos aceitos estão em sua lista de contatos, é claro!</entry>
+  <entry key="1267">Mensagem</entry>
+  <entry key="1268">O usuário não compartilha seus dados de contato pessoal.</entry>
+  <entry key="1269">O usuário não compartilha seus dados pessoais de contacto só para contatos.</entry>
+  <entry key="1270">Endereço &amp; Telefone</entry>
+  <entry key="1271">Seu código de convite não é válido, o código só é válido durante esta data e hora específicas:</entry>
+  <entry key="1272">Este evento está ligado a vários calendários de outros usuários. Sua alteração irá também atualizar o calendário deles. Será que você realmente gostaria de atualizar o evento?</entry>
+  <entry key="1273">Confirme atualização</entry>
+  <entry key="1274">Permitir que contato veja meu calendário (somente visualização)</entry>
+  <entry key="1275">Não compartilhe o calendário</entry>
+  <entry key="1276">Calendário de contatos</entry>
+  <entry key="1277">Seus contatos devem aprová-lo primeiro para poder ver seu calendário.</entry>
+  <entry key="1278">Você não pode armazenar ou excluir eventos de outros calendários. Somente do seu!</entry>
+  <entry key="1279">Mostrar o meu calendário de novo!</entry>
+  <entry key="1280">Este evento está ligado a vários calendários de outros usuários. Sua ação também irá apagar o evento do calendario deles. Será que você realmente deseja apagar o evento?</entry>
+  <entry key="1281">Confirme ação</entry>
+  <entry key="1282">Entre na sala</entry>
+  <entry key="1283">Acesse a sala de conferência</entry>
+  <entry key="1284">Há uma sala de conferências e evento reservados com esta mensagem privada.</entry>
+  <entry key="1285">Você precisa armazenar o evento primeiro!</entry>
+  <entry key="1286">Não há sala disponível. O evento no calendário para esta sala já foi apagado!</entry>
+  <entry key="1287">Escolha seu apelido</entry>
+  <entry key="1288">Primeiro nome</entry>
+  <entry key="1289">Último nome</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Tamanho mínimo 4 caracteres! Tanto Nome e Sobrenome</entry>
+  <entry key="1293">Por favor, entre com email válido!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Entrar com sua conta do Facebook</entry>
+  <entry key="1296">Membro desde</entry>
+  <entry key="1297">Você conectado com sua conta do Facebook. Você deve atualizar seu perfil com o e-mail correto. Caso contrário, você não receberá convites e mensagens privadas de outros usuários.</entry>
+  <entry key="1298">Mensagem</entry>
+  <entry key="1299">Não mostrar mensagem de atualização de perfil novamente</entry>
+  <entry key="1300">mais opções de tela ...</entry>
+  <entry key="1301">Nova mensagem privada:</entry>
+  <entry key="1302">Clique aqui para visitar o seu perfil para ver a mensagem completa ...</entry>
+  <entry key="1303">Responder</entry>
+  <entry key="1304">Salas e bate-papo</entry>
+  <entry key="1305">Minhas salas</entry>
+  <entry key="1306">Minha sala de conferência (de 1-16 usuários)</entry>
+  <entry key="1307">Minha sala de seminário (Webinar) (de 1-120 usuários)</entry>
+  <entry key="1308">ID do dono</entry>
+  <entry key="1309">Digite uma senha</entry>
+  <entry key="1310">Você precisa de uma conta com nível de Usuário, Moderador ou Admin</entry>
+  <entry key="1311">Web-Service (acesso apenas através via SOAP)</entry>
+  <entry key="1312">Carregar diretamente na lousa</entry>
+  <entry key="1313">Você realmente deseja remover esta lousa? Essa ação não pode ser desfeita!</entry>
+  <entry key="1314">Carregar para a lousa</entry>
+  <entry key="1315">Não se esqueça de "Iniciar gravação", se você quiser ter a reunião gravada.</entry>
+  <entry key="1316">Iniciar gravação</entry>
+  <entry key="1317">Seta</entry>
+  <entry key="1318">Circulo</entry>
+  <entry key="1319">Linha</entry>
+  <entry key="1320">Quadrado</entry>
+  <entry key="1321">Triangulo</entry>
+  <entry key="1322">Texto/Nota</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Desenho livre</entry>
+  <entry key="1325">Selecionar/Mover</entry>
+  <entry key="1326">Desenhar uma forma</entry>
+  <entry key="1327">Cortar/Mover</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Imprimir</entry>
+  <entry key="1330">Desfazer</entry>
+  <entry key="1331">Lixo</entry>
+  <entry key="1332">Adicionar Grade</entry>
+  <entry key="1333">Compartilhar Arquivo</entry>
+  <entry key="1334">Selecionar Forma</entry>
+  <entry key="1335">Selecionar Clipart</entry>
+  <entry key="1336">Copiar</entry>
+  <entry key="1337">Recortar</entry>
+  <entry key="1338">Colar</entry>
+  <entry key="1339">Excluir</entry>
+  <entry key="1340">Você realmente deseja excluir todo o conteúdo da lousa?</entry>
+  <entry key="1341">Carregar directamente para a lousa</entry>
+  <entry key="1342">Participantes</entry>
+  <entry key="1343">Gerente de participantes</entry>
+  <entry key="1344">Presente</entry>
+  <entry key="1345">Controle remoto</entry>
+  <entry key="1346">Ejetar</entry>
+  <entry key="1347">Bate-papo</entry>
+  <entry key="1348">Convidar Participantes</entry>
+  <entry key="1349">Por Email</entry>
+  <entry key="1350">É moderador</entry>
+  <entry key="1351">Webcam do usuário ligada</entry>
+  <entry key="1352">Desativar preenchimento de formulário</entry>
+  <entry key="1353">Ativar preenchimento de formulário</entry>
+  <entry key="1354">Ajustar ao grid</entry>
+  <entry key="1355">Permitir gravação</entry>
+  <entry key="1356">Espere para gravação</entry>
+  <entry key="1357">Ocultar barra superior</entry>
+  <entry key="1358">Reproduzir vídeo</entry>
+  <entry key="1359">Você realmente deseja excluir objetos desenhados na tela atual?</entry>
+  <entry key="1360">Aceitar e conceder direito de usuário</entry>
+  <entry key="1361">Negar</entry>
+  <entry key="1362">Eu</entry>
+  <entry key="1363">Atividades e ações</entry>
+  <entry key="1364">Remover a lousa</entry>
+  <entry key="1365">Você precisa da moderação ou o direito de desenhar no quadro branco para remover quadros!</entry>
+  <entry key="1366">Não é permitido</entry>
+  <entry key="1367">saiu da sala.</entry>
+  <entry key="1368">Ícones de Matemática</entry>
+  <entry key="1369">Nenhuma categoria</entry>
+  <entry key="1370">Cor-Estilo</entry>
+  <entry key="1371">Qualidade</entry>
+  <entry key="1372">Domínio</entry>
+  <entry key="1373">visitar</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">Verde mar médio</entry>
+  <entry key="1376">azul celeste</entry>
+  <entry key="1377">Azul escuro</entry>
+  <entry key="1378">Amarelo ouro</entry>
+  <entry key="1379">Prata</entry>
+  <entry key="1380">definicao do usuário</entry>
+  <entry key="1381">o melhor</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medio</entry>
+  <entry key="1384">Fechar o microfone</entry>
+  <entry key="1385">Ativar microfone globalmente</entry>
+  <entry key="1386">Microfone dos outros mudo</entry>
+  <entry key="1387">Você está globalmente silenciado pelo moderador. Você não pode reativar!</entry>
+  <entry key="1388">Silenciar o microfone totalmente?</entry>
+  <entry key="1389">Você realmente quer silenciar-se globalmente? Nenhum outro usuário vai ouvir você!</entry>
+  <entry key="1390">Silenciar microfone localmente?</entry>
+  <entry key="1391">Você realmente quer silenciar este microfone? Você só pode silenciá-lo localmente em sua tela. Não tem nenhum efeito para outros usuários. Apenas os moderadores podem desligá-lo globalmente!</entry>
+  <entry key="1392">Silenciar microfone globalmente?</entry>
+  <entry key="1393">Você realmente quer para silenciar este usuário globalmente? Nenhum outro usuário vai ouvi-lo mais!</entry>
+  <entry key="1394">Seu som está ligado. Clique aqui para enviar mensagem ao moderador para silenciar seu microfone (para toda sala de conferência)!</entry>
+  <entry key="1395">Seu som está desligado. Clique aqui para enviar mensagem ao moderador para ativar seu microfone (para todos na sala de conferência)!</entry>
+  <entry key="1396">gostaria que o moderador silenciasse meu microfone.</entry>
+  <entry key="1397">gostaria que o moderador habilitasse microfone globalmente.</entry>
+  <entry key="1398">gostaria que o moderador habilitasse o microfone dele/dela.</entry>
+  <entry key="1399">gostaria que o moderador desabilite o microfone dele/dela.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Microfone mudo. Clique aqui para ativar o microfone seu / dela!</entry>
+  <entry key="1402">Este usuário foi silenciado pelo moderador. Você não pode ativa-lo!</entry>
+  <entry key="1403">Silenciar o microfone</entry>
+  <entry key="1404">Ativar o microfone para toda a sala</entry>
+  <entry key="1405">Microfone mudo</entry>
+  <entry key="1406">Ativar microfone</entry>
+  <entry key="1407">Silenciar microfone</entry>
+  <entry key="1408">Ativar microfone para toda a sala</entry>
+  <entry key="1409">Somente moderadores podem silenciar ou ativar um usuário! Para silenciar o microfone próprio: Por favor, use o ícone de microfone na caixa de vídeo!</entry>
+  <entry key="1410">Nome da enquete</entry>
+  <entry key="1411">Você</entry>
+  <entry key="1412">Enquetes arquivadas</entry>
+  <entry key="1413">ativo</entry>
+  <entry key="1414">Gráfico simples</entry>
+  <entry key="1415">Gráfico de pizza</entry>
+  <entry key="1416">Por favor, indique e-mail</entry>
+  <entry key="1417">Nova(s) mensagem(s)</entry>
+  <entry key="1418">Encerrar enquete</entry>
+  <entry key="1419">Tem certeza que deseja encerrar esta enquete? Ninguém será capaz de votar após isto.</entry>
+  <entry key="1420">Excluir Enquete</entry>
+  <entry key="1421">Tem certeza de que deseja excluir esta enquete? Os resultados serão excluídos.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Permitir/Negar o direito de dar áudio exclusivo.</entry>
+  <entry key="1424">Permitir ao usuário dar áudio exclusivo</entry>
+  <entry key="1425">Negar usuário dar áudio exclusivo</entry>
+  <entry key="1426">gostaria de obter uma permissão para áudio exclusivo.</entry>
+  <entry key="1427">gostaria de obter permissão para áudio exclusivo.</entry>
+  <entry key="1428">dar permissão para áudio exclusivo.</entry>
+  <entry key="1429">Resolução da camera</entry>
+  <entry key="1430">Alterar a resolução afeta a largura de banda, foto maior precisa de mais largura de banda!</entry>
+  <entry key="1431">Você não tem permissão conceder audio exclusivo a si mesmo ou outras pessoas. Você precisa ter permissao do moderador ou pedir ao moderador para lhe dar áudio exclusivo.</entry>
+  <entry key="1432">Gostaria de obter o direito exclusivo para áudio</entry>
+  <entry key="1433">Dê áudio exclusivo para mim (em alternativa clique sobre o vídeo pod ou pressione F12)</entry>
+  <entry key="1434">Microfone está ligado!</entry>
+  <entry key="1435">Microfone está mudo</entry>
+  <entry key="1436">Ocultar bate-papo</entry>
+  <entry key="1437">Ocultar atividades</entry>
+  <entry key="1438">Ocultar o explorador de arquivos</entry>
+  <entry key="1439">Ocultar menu de ações</entry>
+  <entry key="1440">Ocultar o compartilhamento de tela</entry>
+  <entry key="1441">Ocultar a lousa</entry>
+  <entry key="1442">Mostrar status de microfone no vídeo</entry>
+  <entry key="1443">Opções de layout</entry>
+  <entry key="1444">Novo Evento</entry>
+  <entry key="1445">Protegido por senha são os links para a conferência que são enviados para os participants quando você salvar o calendário de eventos, e não a sala! Isso significa que se você salvar o evento várias vezes, mas com senhas diferentes, cada participent recebe um novo link que tem uma senha diferente. Mas os links antigos ainda funcionam uma vez enviados!</entry>
+  <entry key="1446">Editar detalhes</entry>
+  <entry key="1447">Mostrar discador SIP</entry>
+  <entry key="1448">Chamar</entry>
+  <entry key="1449">Mostrar eventos de calendário de contato</entry>
+  <entry key="1450">Página inicial!</entry>
+  <entry key="1451">Planeje suas reuniões</entry>
+  <entry key="1452">Assista a gravação e entrevistas</entry>
+  <entry key="1453">Escolha e inicie uma web-conferência</entry>
+  <entry key="1454">Gerencie usuários e direitos</entry>
+  <entry key="1455">Gerencie conexões e expulse usuários</entry>
+  <entry key="1456">Gerencie grupos de usuários</entry>
+  <entry key="1457">Gerenciar salas de conferência</entry>
+  <entry key="1458">Gerenciar as configurações do sistema</entry>
+  <entry key="1459">Gerenciar rótulos e redação</entry>
+  <entry key="1460">Gerenciar LDAP e configurações de ADS</entry>
+  <entry key="1461">Exportar/Importar Backups do Sistema</entry>
+  <entry key="1462">Você precisa ser um moderador ou ter direitos para "desenhar na lousa", adicionar, excluir ou carregar arquivos e pastas.</entry>
+  <entry key="1463">Editar texto</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publicar</entry>
+  <entry key="1466">Iniciar Publicação</entry>
+  <entry key="1467">Parar Publicação</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Contexto</entry>
+  <entry key="1470">Id da Publicação</entry>
+  <entry key="1471">Reduza a largura do compartilhamento de tela antes de tentar mover isto para esquerda</entry>
+  <entry key="1472">Reduzir a altura da tela compartilhada antes de tentar movê-lo para o fundo</entry>
+  <entry key="1473">Reduzir o x da tela compartilhada antes de tentar torná-la mais ampla</entry>
+  <entry key="1474">Reduzir o y da tela compartilhada antes de tentar torná-la maior</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Favor iniciar o compartilhamento de tela para publicar isto</entry>
+  <entry key="1477">É necessária permissão de moderador para iniciar a gravação</entry>
+  <entry key="1478">Você não tem permissão para habilitar áudio exclusiva para qualquer participante. Você precisa de direitos de moderação ou o direito exclusivo de áudio para habilitar qualquer microfone em modo exclusivo..</entry>
+  <entry key="1479">Carregar novo arquivo para a pasta de arquivos</entry>
+  <entry key="1480">Abra nova caixa de diálogo com as configurações de compartilhamento</entry>
+  <entry key="1481">Um moderador existente tem que aprovar isto</entry>
+  <entry key="1482">Pergunte moderador para compartilhar sua webcam/micro</entry>
+  <entry key="1483">Reúna comentários, criando uma enquete</entry>
+  <entry key="1484">Resultados da enquete corrente e passada como gráfico</entry>
+  <entry key="1485">Votar se houver uma enquete para esta sala de conferência</entry>
+  <entry key="1486">Editar configurações de câmara e microfone</entry>
+  <entry key="1487">Confirmar e sair da sala</entry>
+  <entry key="1488">Ligue para pessoas externas via VoIP/SIP</entry>
+  <entry key="1489">Envie um email com um link direto para esta sala</entry>
+  <entry key="1490">Alterar as configurações de sua lousa</entry>
+  <entry key="1491">Tamanho máximo de upload</entry>
+  <entry key="1492">Pergunte ao moderador para compartilhar sua lousa</entry>
+  <entry key="1493">Começar bate-papo particular / privado</entry>
+  <entry key="1494">Todos / tudo</entry>
+  <entry key="1495">Você não pode iniciar um bate-papo consigo mesmo!</entry>
+  <entry key="1496">Você já iniciou um bate-papo com este participante!</entry>
+  <entry key="1497">Você realmente quer apagar esse bate-papo?</entry>
+  <entry key="1498">Servidores</entry>
+  <entry key="1499">Servidores em cluster</entry>
+  <entry key="1500">Nome do servidor</entry>
+  <entry key="1501">Endereço do servidor</entry>
+  <entry key="1502">Detalhes do servidor</entry>
+  <entry key="1503">Enviar SMS</entry>
+  <entry key="1504">Publicando...usuário</entry>
+  <entry key="1505">Para ganhar tempo e economizar tráfego na internet você pode usar "command line admin" para backupear / restaurar / atualizar / upgrade:\n 1) Vá ao diretório instalador TVQWEB (por ex. /opt/red5) \n 2) pare o TVQWEB (por ex. ./red5-shutdown.sh)\n 3) ./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)\n 4) download archive with new OM\n 5) mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))\n 6) extract downloaded OM to the /opt/red5\n 7) ./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )\n 8) start OM\n</entry>
+  <entry key="1506">Salas comuns a todos os usuários</entry>
+  <entry key="1507">Salas comuns ao atual grupo de usuários</entry>
+  <entry key="1508">Salas do atual usuário</entry>
+  <entry key="1509">Crie / modifique sala especial de reunião</entry>
+  <entry key="1510">Você pode entrar com endereços múltiplos no formato : firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Ajuste volume da transmissão</entry>
+  <entry key="1512">Ajuste volume do microfone</entry>
+  <entry key="1513">É moderada por chat</entry>
+  <entry key="1514">Permite mensagens</entry>
+  <entry key="1515">Painel de bate-papo aberto por definição</entry>
+  <entry key="1516">Painel de arquivos aberto por definição</entry>
+  <entry key="1517">Último ping</entry>
+  <entry key="1518">Todo escravo envia um ping para o mestre a cada 3 segundos (configurável). O último ping do escravo precisa ser menor que 1 minuto para que o mestre use o escravo.</entry>
+  <entry key="1519">Porta HTTP</entry>
+  <entry key="1520">Usuário (SOAP-Access)</entry>
+  <entry key="1521">Senha</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocolo</entry>
+  <entry key="1524">Ping em andamento</entry>
+  <entry key="1525">Ativar</entry>
+  <entry key="1526">Gerar convite</entry>
+  <entry key="1527">Teste de conexão</entry>
+  <entry key="1528">Auto selecionar sala de entrevista</entry>
+  <entry key="1529">Sublinhar</entry>
+  <entry key="1530">Estilo da fonte</entry>
+  <entry key="1531">Permitir estilos de fonte</entry>
+  <entry key="1532">Cor da fonte</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Mostrar estatísticas de sessão</entry>
+  <entry key="1535">Detalhes da sessão</entry>
+  <entry key="1536">Importação de sistema</entry>
+  <entry key="1537">Incluir arquivos armazenados e gravações no backup</entry>
+  <entry key="1538">Permitir "SIP transport" na sala</entry>
+  <entry key="1539">Dar exclusividade de áudio a este usuário?</entry>
+  <entry key="1540">Por favor, especifique seu fuso horário / timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Salvando conteúdo. Por favor, aguarde!</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_ru.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
new file mode 100644
index 0000000..ad0d144
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_ru.properties.xml
@@ -0,0 +1,1885 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Конференция</entry>
+  <entry key="2">Совещания</entry>
+  <entry key="3">Лекции</entry>
+  <entry key="4">Установки</entry>
+  <entry key="5">Профиль</entry>
+  <entry key="6">Администрирование</entry>
+  <entry key="7">Пауза</entry>
+  <entry key="8">Запись</entry>
+  <entry key="9">Нет данных</entry>
+  <entry key="10">Функция записи только для лекторов</entry>
+  <entry key="11">Связанный пользователь:</entry>
+  <entry key="12">Начать конференцию</entry>
+  <entry key="13">Мое имя</entry>
+  <entry key="14">Видеоконференция</entry>
+  <entry key="15">Загрузить файл</entry>
+  <entry key="16">Заново загрузить список</entry>
+  <entry key="17">К списку документов</entry>
+  <entry key="18">Новый опрос</entry>
+  <entry key="19">Новый опрос для конференции</entry>
+  <entry key="20">Вопрос:</entry>
+  <entry key="21">Вид опроса:</entry>
+  <entry key="22">Создать</entry>
+  <entry key="23">Информация: каждый подключённый участник получает сообщение с новым опросом.</entry>
+  <entry key="24">Создать опрос</entry>
+  <entry key="25">Отменить</entry>
+  <entry key="26">Да/Нет</entry>
+  <entry key="27">Число 1 - 10</entry>
+  <entry key="28">Опрос</entry>
+  <entry key="29">Для создания опроса Вы должны быть модератором/лектором в этой комнате.</entry>
+  <entry key="30">Вы проголосовали.</entry>
+  <entry key="31">Вы уже проголосовали в данном опросе.</entry>
+  <entry key="32">Проголосовать!</entry>
+  <entry key="33">Ваш ответ:</entry>
+  <entry key="34">Да</entry>
+  <entry key="35">Нет</entry>
+  <entry key="36">хочу знать:</entry>
+  <entry key="37">Результаты опроса</entry>
+  <entry key="38">Вопрос:</entry>
+  <entry key="39">Ответы:</entry>
+  <entry key="40">Результат:</entry>
+  <entry key="41">В настоящее время опроса не существует.</entry>
+  <entry key="42">Проголосовать!</entry>
+  <entry key="43">Совещание (макс. 4 места)</entry>
+  <entry key="44">Конференция (макс. 50 мест)</entry>
+  <entry key="45">Тип</entry>
+  <entry key="46">Оставшиеся места</entry>
+  <entry key="47">Уже присвоено</entry>
+  <entry key="48">Вхождения</entry>
+  <entry key="49">Модератор/лектор этой комнаты покидает совещание.</entry>
+  <entry key="50">Системное сообщение</entry>
+  <entry key="51">Выбор устройства</entry>
+  <entry key="52">Выбрать камеру:</entry>
+  <entry key="53">Выбрать микрофон:</entry>
+  <entry key="54">OK</entry>
+  <entry key="55">Отменить</entry>
+  <entry key="56">Чтобы активировать изменения, войдите заново</entry>
+  <entry key="57">Изменить установки</entry>
+  <entry key="58">Курс:</entry>
+  <entry key="59">Язык курса:</entry>
+  <entry key="60">OK</entry>
+  <entry key="61">Отменить</entry>
+  <entry key="62">Очистить доску</entry>
+  <entry key="63">Очистить доску перед добавлением нового изображения</entry>
+  <entry key="64">Больше не спрашивать</entry>
+  <entry key="65">нет</entry>
+  <entry key="66">Редактировать установки</entry>
+  <entry key="67">Запросить подтверждение перед очисткой доски</entry>
+  <entry key="68">Информация о пользователе</entry>
+  <entry key="69">Очистить область рисования</entry>
+  <entry key="70">Отмена</entry>
+  <entry key="71">Восстановление</entry>
+  <entry key="72">Выбрать объект</entry>
+  <entry key="73">Текст</entry>
+  <entry key="74">Рисование</entry>
+  <entry key="75">Провести линию</entry>
+  <entry key="76">Подчеркнуть</entry>
+  <entry key="77">Прямоугольник</entry>
+  <entry key="78">Эллипс</entry>
+  <entry key="79">Стрелка</entry>
+  <entry key="80">Удалить выбранный элемент</entry>
+  <entry key="81">Запрос функции модератора</entry>
+  <entry key="82">Запрос</entry>
+  <entry key="83">Отменить</entry>
+  <entry key="84">Запросить ф-ции модератора</entry>
+  <entry key="85">Закрыть</entry>
+  <entry key="86">Курсив</entry>
+  <entry key="87">Жирный шрифт</entry>
+  <entry key="88">Ожидание</entry>
+  <entry key="89">Участник желает запросить функцию модератора:</entry>
+  <entry key="90">Согласие</entry>
+  <entry key="91">Отклонение</entry>
+  <entry key="92">Отменить</entry>
+  <entry key="93">Отсылка запроса следующему участнику</entry>
+  <entry key="94">Выдано согласие</entry>
+  <entry key="95">Отклонено</entry>
+  <entry key="96">Замена модератора</entry>
+  <entry key="97">Вы не являетесь модератором данного курса!</entry>
+  <entry key="98">Модератор:</entry>
+  <entry key="99">В этой комнате нет мест. Извините, попробуйте еще раз через некоторое время.</entry>
+  <entry key="100">Эллипс</entry>
+  <entry key="101">Закрыть</entry>
+  <entry key="102">Ошибка при вводе</entry>
+  <entry key="103">Имя пользователя должно состоять минимум из 4 знаков</entry>
+  <entry key="104">Пароль должен состоять минимум из 4 знаков</entry>
+  <entry key="105">Это имя пользователя уже занято</entry>
+  <entry key="106">Электронный адрес уже зарегистрирован</entry>
+  <entry key="107">Выдается ошибка, просьба связаться с административной группой</entry>
+  <entry key="108">Вход</entry>
+  <entry key="109">Пользователь:</entry>
+  <entry key="110">Пароль:</entry>
+  <entry key="111">Язык</entry>
+  <entry key="112">Войти</entry>
+  <entry key="113">Подписка</entry>
+  <entry key="114">Пользователь:</entry>
+  <entry key="115">Пароль:</entry>
+  <entry key="116">Повторить:</entry>
+  <entry key="117">Имя:</entry>
+  <entry key="118">Фамилия:</entry>
+  <entry key="119">E-Mail:</entry>
+  <entry key="120">Страна:</entry>
+  <entry key="121">Регистрировать</entry>
+  <entry key="122">Отменить</entry>
+  <entry key="123">Регистрация</entry>
+  <entry key="124">На главную</entry>
+  <entry key="125">Пользователи</entry>
+  <entry key="126">Группы</entry>
+  <entry key="127">Организации</entry>
+  <entry key="128">Комнаты совещаний</entry>
+  <entry key="129">Публично</entry>
+  <entry key="130">Организация</entry>
+  <entry key="131">Вход</entry>
+  <entry key="132">Логин</entry>
+  <entry key="133">Пароль</entry>
+  <entry key="134">Повторить</entry>
+  <entry key="135">Имя</entry>
+  <entry key="136">Фамилия</entry>
+  <entry key="137">E-Mail</entry>
+  <entry key="138">Дата рождения</entry>
+  <entry key="139">Улица/№ дома</entry>
+  <entry key="140">Индекс/город</entry>
+  <entry key="141">Страна</entry>
+  <entry key="142">Информация</entry>
+  <entry key="143">Данные пользователя</entry>
+  <entry key="144">Сохранить</entry>
+  <entry key="145">Процесс сохранения</entry>
+  <entry key="146">Идент. № пользователя</entry>
+  <entry key="147">Логин</entry>
+  <entry key="148">Имя</entry>
+  <entry key="149">Фамилия</entry>
+  <entry key="150">вперед</entry>
+  <entry key="151">назад</entry>
+  <entry key="152">Удалить запись</entry>
+  <entry key="153">Отменить</entry>
+  <entry key="154">Удалить</entry>
+  <entry key="155">Создать запись</entry>
+  <entry key="156">Заново загрузить запись</entry>
+  <entry key="157">Удалить запись</entry>
+  <entry key="158">Статус</entry>
+  <entry key="159">заблокировано</entry>
+  <entry key="160">активно</entry>
+  <entry key="161">Организации</entry>
+  <entry key="162">Календарь</entry>
+  <entry key="163">Закрыть</entry>
+  <entry key="164">Идент. № орг-ии</entry>
+  <entry key="165">Имя</entry>
+  <entry key="166">Пользователь</entry>
+  <entry key="167">Модератор</entry>
+  <entry key="168">Администратор</entry>
+  <entry key="169">Роль пользов-ля</entry>
+  <entry key="170">Организация</entry>
+  <entry key="171">Имя</entry>
+  <entry key="172">Добавить организацию</entry>
+  <entry key="173">Добавить организацию</entry>
+  <entry key="174">Отменить</entry>
+  <entry key="175">Добавить</entry>
+  <entry key="176">Удалить организацию</entry>
+  <entry key="177">Пользователь</entry>
+  <entry key="178">Добавить пользователя</entry>
+  <entry key="179">Удалить пользователя</entry>
+  <entry key="180">Добавить пользователя</entry>
+  <entry key="181">Поиск пользоват-я</entry>
+  <entry key="182">Искать</entry>
+  <entry key="183">Пользователь</entry>
+  <entry key="184">Организация</entry>
+  <entry key="185">Выбрать</entry>
+  <entry key="186">Комнаты совещаний</entry>
+  <entry key="187">Комнаты совещаний</entry>
+  <entry key="188">Идент. №</entry>
+  <entry key="189">Имя</entry>
+  <entry key="190">Публичная комната</entry>
+  <entry key="191">Организации</entry>
+  <entry key="192">Комнаты совещаний</entry>
+  <entry key="193">Имя</entry>
+  <entry key="194">Тип</entry>
+  <entry key="195">публично</entry>
+  <entry key="196">Комментарий</entry>
+  <entry key="197">Сохранить</entry>
+  <entry key="198">Открыть</entry>
+  <entry key="199">Сохранить как</entry>
+  <entry key="200">Имя файла</entry>
+  <entry key="201">Имя файла</entry>
+  <entry key="202">Отменить</entry>
+  <entry key="203">Сохранить</entry>
+  <entry key="204">Ошибка</entry>
+  <entry key="205">Загрузить</entry>
+  <entry key="206">Объект загружен</entry>
+  <entry key="207">Синхронизация клиентов. Оставшиеся клиенты:</entry>
+  <entry key="208">Загрузка графических данных</entry>
+  <entry key="209">Синхронизация клиентов. Оставшиеся клиенты:</entry>
+  <entry key="210">Очистить область рисования</entry>
+  <entry key="211">Очистить область рисования, при этом все изменения будут утеряны!</entry>
+  <entry key="212">Перед загрузкой файла запросить подтверждение</entry>
+  <entry key="213">Отправить приглашение</entry>
+  <entry key="214">Отправить приглашение</entry>
+  <entry key="215">Тема</entry>
+  <entry key="216">Адрес получателя</entry>
+  <entry key="217">Сообщение</entry>
+  <entry key="218">Отправить</entry>
+  <entry key="219">Отменить</entry>
+  <entry key="220">Отправить</entry>
+  <entry key="221">Данные пользователя</entry>
+  <entry key="222">Ник для данной конференции</entry>
+  <entry key="223">Ник/псевдоним</entry>
+  <entry key="224">Имя</entry>
+  <entry key="225">Фамилия</entry>
+  <entry key="226">E-Mail</entry>
+  <entry key="227">Язык</entry>
+  <entry key="228">Отправить</entry>
+  <entry key="229">Загружается...</entry>
+  <entry key="230">Даные загружаются, подождите!</entry>
+  <entry key="231">Неверный пароль</entry>
+  <entry key="232">Пожалуйста, введите два раза один и тот же пароль длиной не менее 6 символов</entry>
+  <entry key="233">Неверный E-Mail</entry>
+  <entry key="234">Вы ввели неверный E-Mail</entry>
+  <entry key="235">Регистрация завершена</entry>
+  <entry key="236">Ваш аккаунт создан. Теперь вы можете войти под своим именем.</entry>
+  <entry key="237">Сейчас вы не можете сделать ваш экран общим. Сейчас другой пользователь сделал свой экран общим.</entry>
+  <entry key="238">Запрещено делать ваш экран общим</entry>
+  <entry key="239">Сделать экран общим</entry>
+  <entry key="240">Неверная ширина канала: невозможно синхронизовать экран. Некоторые кадры будут пропущены. Если это сообщение появляется слишком часто, Вы можете попросить модератора ухудшить качество соединения.</entry>
+  <entry key="241">Экран пользователя:</entry>
+  <entry key="242">Рисование</entry>
+  <entry key="243">Документ</entry>
+  <entry key="244">Чат</entry>
+  <entry key="245">Файл</entry>
+  <entry key="246">Юзеры</entry>
+  <entry key="247">Загрузить первоначальный документ</entry>
+  <entry key="248">Загрузить документ pdf</entry>
+  <entry key="249">Поместить документ на доску</entry>
+  <entry key="250">Конфигурация</entry>
+  <entry key="251">Перетащить этот объект</entry>
+  <entry key="252">Изменить размеры объекта</entry>
+  <entry key="253">%</entry>
+  <entry key="254">из</entry>
+  <entry key="255">На первую страницу</entry>
+  <entry key="256">На предыдущую страницу</entry>
+  <entry key="257">На следующую страницу</entry>
+  <entry key="258">На последнюю страницу</entry>
+  <entry key="259">Уменьшение</entry>
+  <entry key="260">Увеличение</entry>
+  <entry key="261">Г-н</entry>
+  <entry key="262">Г-жа</entry>
+  <entry key="263">Конфигурация</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Ключ</entry>
+  <entry key="266">Конфигурация</entry>
+  <entry key="267">Ключ:</entry>
+  <entry key="268">Дата обновления</entry>
+  <entry key="269">Обновлено:</entry>
+  <entry key="270">Описание:</entry>
+  <entry key="271">Значение:</entry>
+  <entry key="272">из</entry>
+  <entry key="273">Пользователи</entry>
+  <entry key="274">Удалить пользователя из организации</entry>
+  <entry key="275">Удалить</entry>
+  <entry key="276">Этот пользователь уже входит в эту организацию.</entry>
+  <entry key="277">Новости</entry>
+  <entry key="278">Быстрый переход</entry>
+  <entry key="279">Перейти к совещанию</entry>
+  <entry key="280">Перейти к лекции</entry>
+  <entry key="281">Помощь и поддержка</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Ошибка?</entry>
+  <entry key="285">еще</entry>
+  <entry key="286">Вебсайт проекта (http://openmeetings.apache.org)</entry>
+  <entry key="287">Список электронных адресов пользователей (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Запомнить вход в систему</entry>
+  <entry key="289">Контент</entry>
+  <entry key="290">Моя домашняя страница</entry>
+  <entry key="291">Мои совещания</entry>
+  <entry key="292">Мои запланированные лекции</entry>
+  <entry key="293">Публичные совещания</entry>
+  <entry key="294">Личные совещания</entry>
+  <entry key="295">Публичные лекции</entry>
+  <entry key="296">Личные лекции</entry>
+  <entry key="297">Публичный контент</entry>
+  <entry key="298">Приватный контент</entry>
+  <entry key="299">Персональный контент</entry>
+  <entry key="300"></entry>
+  <entry key="301">Модерация</entry>
+  <entry key="302">Запросить ф-ции модера</entry>
+  <entry key="303">Опросы</entry>
+  <entry key="304">Выбор файла</entry>
+  <entry key="305">Установки</entry>
+  <entry key="306">Установки камеры и микрофона</entry>
+  <entry key="307">Установки доски</entry>
+  <entry key="308">Выход</entry>
+  <entry key="309">Выход (к комнатам)</entry>
+  <entry key="310">Выход</entry>
+  <entry key="311">Забыли пароль?</entry>
+  <entry key="312">Восстановление пароля</entry>
+  <entry key="313">По e-mail</entry>
+  <entry key="314">По имени пользователя</entry>
+  <entry key="315">Ваша почта</entry>
+  <entry key="316">Ваш логин</entry>
+  <entry key="317">Послать линк на e-mail</entry>
+  <entry key="318">Такой e-mail не найден. Убедитесь, что вы ввели верный e-mail</entry>
+  <entry key="319">Введите e-mail или имя пользователя</entry>
+  <entry key="320">Никто больше не подключился с таким именем пользователя</entry>
+  <entry key="321">Письмо, содержащее специальную ссылку, выслано на ваш e-mail, пожалуйста, проверьте ваш почтовый ящик. Если вы все еще не получили письмо, проверьте анти-спам фильтры и пошлите еще раз подтверждающее письмо.</entry>
+  <entry key="322">Информация</entry>
+  <entry key="323">Сообщение</entry>
+  <entry key="324">Неверный хэш. Пользователь не найден.</entry>
+  <entry key="325">Переустановить ваш пароль</entry>
+  <entry key="326">Логин</entry>
+  <entry key="327">изменить пароль</entry>
+  <entry key="328">новый пароль</entry>
+  <entry key="329">повторите пароль</entry>
+  <entry key="330">Вы ввели неидентичные пароли.</entry>
+  <entry key="331">4 или более знаков. Регистр имеет значение!</entry>
+  <entry key="332">Пароль установлен. Теперь можно логиниться.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Неизвестная ошибка. Пожалуйста, сообщите в вашу сервисную службу.</entry>
+  <entry key="335">Имя пользователя не найдено</entry>
+  <entry key="336">Неверный пароль</entry>
+  <entry key="337">Вы успешно вышли</entry>
+  <entry key="338">Frontend Registration disabled.</entry>
+  <entry key="339">Неверный e-mail</entry>
+  <entry key="340">неуникальное имя файла, выберите другое имя файла</entry>
+  <entry key="341">слишком короткое имя файла</entry>
+  <entry key="342">Не могу сохранить Адрес</entry>
+  <entry key="343">Пользователь добавлен, но нужно назначить этому пользователю организацию, иначе он не сможет войти.</entry>
+  <entry key="344">Новая запись</entry>
+  <entry key="345">Поле с таким ID не найдено.</entry>
+  <entry key="346">Метка для этого поля не найдена.</entry>
+  <entry key="347">Требуется авторизация администратора</entry>
+  <entry key="348">Редактор языков</entry>
+  <entry key="349">Язык</entry>
+  <entry key="350">ID метки</entry>
+  <entry key="351">Имя метки</entry>
+  <entry key="352">Значение</entry>
+  <entry key="353">Значения полей</entry>
+  <entry key="354">Имя метки</entry>
+  <entry key="355">Значение метки</entry>
+  <entry key="356">ID метки</entry>
+  <entry key="357">Вы можете лишь удалить метку, но не само поле! Нельзя удалить поле, у него могут быть метки на других языках.</entry>
+  <entry key="358">Неверный ID метки. Невозможно найти FieldLanguagesvalues_Id в базе данных.</entry>
+  <entry key="359">Нельзя удалить это поле! Можно лишь удалить метку, но не само поле Метка сейчас не загружена. Либо не выбрано ни одно поле, либо не определена метка на этом языке (для этого поля)</entry>
+  <entry key="360">Экспорт</entry>
+  <entry key="361">Вам нужно выйти, чтобы увидеть изменения.</entry>
+  <entry key="362">Добавить новый язык</entry>
+  <entry key="363">удалить язык</entry>
+  <entry key="364">Добавить новый язык</entry>
+  <entry key="365">Имя</entry>
+  <entry key="366">добавить язык</entry>
+  <entry key="367">Резервное копирование</entry>
+  <entry key="368">к первому</entry>
+  <entry key="369">к предыдущему</entry>
+  <entry key="370">к следующему</entry>
+  <entry key="371">к последнему</entry>
+  <entry key="372">Участник говорит (Нажимая здесь Вы предоставляете этому участнику эксклюзивный микрофон / выключая микрофоны остальных участников)</entry>
+  <entry key="373">Включить/выключить звук</entry>
+  <entry key="374">Система</entry>
+  <entry key="375">Ваши установки</entry>
+  <entry key="376">Привет,</entry>
+  <entry key="377">Ваш профиль</entry>
+  <entry key="378">Новые сообщения:</entry>
+  <entry key="379">Изображение</entry>
+  <entry key="380">Экспорт пользовательских данных</entry>
+  <entry key="381">Организации уже должны существовать!</entry>
+  <entry key="382">начать экспорт</entry>
+  <entry key="383">По организации</entry>
+  <entry key="384">начать экспорт</entry>
+  <entry key="385">Польз. данные - импорт</entry>
+  <entry key="386">выбрать users.xml</entry>
+  <entry key="387">Импорт</entry>
+  <entry key="388">Экспорт в XML - эти файлы можно использовать для: - Внесения в проект - Импорта в другую систему - Резервного копирования - Кастомизации - Помещения в директорию "language" при следующей инсталляции</entry>
+  <entry key="389">Выберите файл языка для импорта. Выберите язык в выпадающем списке. Неважно, какое имя у этого файла, он будет импортирован в этот язык!</entry>
+  <entry key="390">импорт - выберите файл</entry>
+  <entry key="391">Сохранить как</entry>
+  <entry key="392">Имя:</entry>
+  <entry key="393">Описание:</entry>
+  <entry key="394">сохранить</entry>
+  <entry key="395">Записи</entry>
+  <entry key="396">Просмотр записей</entry>
+  <entry key="397">Записи публичных и приватных комнат</entry>
+  <entry key="398">Участники :</entry>
+  <entry key="399">Присоединившиеся:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Участники в этой комнате:</entry>
+  <entry key="402">обновить</entry>
+  <entry key="403">Эта комната полна. Попробуйте через несколько минут.</entry>
+  <entry key="404">Нажмите на комнату для деталей</entry>
+  <entry key="405">Чат с пользователями этой комнаты:</entry>
+  <entry key="406">Комната:</entry>
+  <entry key="407">Участники в этой комнате:</entry>
+  <entry key="408">с:</entry>
+  <entry key="409">проиграть записи</entry>
+  <entry key="410">Длина:</entry>
+  <entry key="411">Дата:</entry>
+  <entry key="412">Режим воспроизведения! Вы не можете менять параметры.</entry>
+  <entry key="413">Проиграть эту запись</entry>
+  <entry key="414">Играть / Пауза</entry>
+  <entry key="415">Начать запись</entry>
+  <entry key="416">остановить запись</entry>
+  <entry key="417">Запись:</entry>
+  <entry key="418">Кто-то уже записывает в данный момент:</entry>
+  <entry key="419">Идет запись! Участник:</entry>
+  <entry key="420">отмена</entry>
+  <entry key="421">Запись будет отменена и не будет записана.</entry>
+  <entry key="422">продолжить</entry>
+  <entry key="423">Закрыть окно и продолжить запись</entry>
+  <entry key="424">изменить цвет линий</entry>
+  <entry key="425">Выбор цвета</entry>
+  <entry key="426">Запретить/разрешить цвет линий</entry>
+  <entry key="427">изменить цвет заливки</entry>
+  <entry key="428">Запретить/разрешить заливки</entry>
+  <entry key="429">Изменить ширину линий</entry>
+  <entry key="430">закрыть</entry>
+  <entry key="431">изменить размер шрифта</entry>
+  <entry key="432">Удалить запись</entry>
+  <entry key="433">Гость</entry>
+  <entry key="434">По:</entry>
+  <entry key="435">Имя</entry>
+  <entry key="436">Комната</entry>
+  <entry key="437">Дата</entry>
+  <entry key="438">отменить</entry>
+  <entry key="439">старт</entry>
+  <entry key="440">Имя</entry>
+  <entry key="441">Дата</entry>
+  <entry key="442">Удалить лог чата на сервере</entry>
+  <entry key="443">Чат</entry>
+  <entry key="444">послать сообщение</entry>
+  <entry key="445">Иконки эмоций</entry>
+  <entry key="446">Иконки эмоций</entry>
+  <entry key="447">Изменить публичные устройства</entry>
+  <entry key="448">Аудио и видео</entry>
+  <entry key="449">Только аудио</entry>
+  <entry key="450">Только видео</entry>
+  <entry key="451">без аудио и видео (статическое изобр.)</entry>
+  <entry key="452">Аудио/видео с вашего компьютера не будет опубликовано, опубликована будет только картинка из вашего профиля. Выберите эту установку, если вы испытываете проблемы с шириной канала или если у вас медленное соединение с Интернетом</entry>
+  <entry key="453">ПН</entry>
+  <entry key="454">ВТ</entry>
+  <entry key="455">СР</entry>
+  <entry key="456">ЧТ</entry>
+  <entry key="457">ПТ</entry>
+  <entry key="458">СБ</entry>
+  <entry key="459">ВС</entry>
+  <entry key="460">Понедельник</entry>
+  <entry key="461">Вторник</entry>
+  <entry key="462">Среда</entry>
+  <entry key="463">Четверг</entry>
+  <entry key="464">Пятница</entry>
+  <entry key="465">Суббота</entry>
+  <entry key="466">Воскресенье</entry>
+  <entry key="467">КН</entry>
+  <entry key="468">Календарная неделя</entry>
+  <entry key="469">Январь</entry>
+  <entry key="470">Февраль</entry>
+  <entry key="471">Март</entry>
+  <entry key="472">Апрель</entry>
+  <entry key="473">Май</entry>
+  <entry key="474">Июнь</entry>
+  <entry key="475">Июль</entry>
+  <entry key="476">Август</entry>
+  <entry key="477">Сентябрь</entry>
+  <entry key="478">Октябрь</entry>
+  <entry key="479">Ноябрь</entry>
+  <entry key="480">Декабрь</entry>
+  <entry key="481">Календарь</entry>
+  <entry key="482">Участники</entry>
+  <entry key="483">Показать установки Layout</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Ширина | Высота</entry>
+  <entry key="486">Видео-контейнер</entry>
+  <entry key="487">Модерация-контейнер</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Доска-контейнер</entry>
+  <entry key="490">Разрешено</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Ширина | Высота</entry>
+  <entry key="493">файлы,чат,участники - контейнер</entry>
+  <entry key="494">Разрешено</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Ширина | Высота</entry>
+  <entry key="497">Модератор покидает комнату. Сейчас нет модераторов. Вы можете запросить функции модератора, либо подождать.</entry>
+  <entry key="498">В этой комнате нет модератора, но есть участники. Вы можете запросить функции модератора или подождать</entry>
+  <entry key="499">Обратная связь {0}</entry>
+  <entry key="500">{0}: Приглашение</entry>
+  <entry key="501">Сообщение от участника:</entry>
+  <entry key="502">Текст сообщения:</entry>
+  <entry key="503">Для того, чтобы принять участие в совещании, нажмите на следую ссылку:</entry>
+  <entry key="504">Нажмите здесь для того, чтобы войти в комнату совещаний</entry>
+  <entry key="505">Если не удаётся перейти по ссылке, скопируйте этот URL в браузер:</entry>
+  <entry key="506">{0} регистрация</entry>
+  <entry key="507">Ваши пользовательские данные:</entry>
+  <entry key="508">Логин:</entry>
+  <entry key="509">Пароль:</entry>
+  <entry key="510">e-mail:</entry>
+  <entry key="511">{0}-Команда</entry>
+  <entry key="512">Регистрация в {0}</entry>
+  <entry key="513">{0}: Переустановить пароль</entry>
+  <entry key="514">Кликните на этот линк и введите новый пароль:</entry>
+  <entry key="515">Кликните здесь, и введите новый пароль</entry>
+  <entry key="516">Если не удаётся перейти по ссылке, скопируйте этот URL в браузер:</entry>
+  <entry key="517">Переустановка пароля {0}</entry>
+  <entry key="518">Пожалуйста, введите дату, например 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">Пожалуйста, введите e-mail, например name@mail.com</entry>
+  <entry key="520">Пожалуйста, введите вещественное число, например 1.00</entry>
+  <entry key="521">Пожалуйста, введите целое число, например 100</entry>
+  <entry key="522">Пожалуйста, введите телефонный номер, например ++49 0123 123123</entry>
+  <entry key="523">Пожалуйста, введите время, например 12:23 (hh:mm)</entry>
+  <entry key="524">Защитить паролем</entry>
+  <entry key="525">Пароль</entry>
+  <entry key="526">Период действия</entry>
+  <entry key="527">Бесконечно</entry>
+  <entry key="528">Период</entry>
+  <entry key="529">Однократно</entry>
+  <entry key="530">Действует от:</entry>
+  <entry key="531">Действует до:</entry>
+  <entry key="532">Приглашение в {0}</entry>
+  <entry key="533">Для этого кода приглашения нет доступных приглашений</entry>
+  <entry key="534">Это приглашение уже использовано. Приглашение этого типа не может быть переиспользовано.</entry>
+  <entry key="535">Этот код приглашения недействителен.</entry>
+  <entry key="536">Пароль:</entry>
+  <entry key="537">Проверить пароль</entry>
+  <entry key="538">Неверный пароль!</entry>
+  <entry key="539">Браузер</entry>
+  <entry key="540">Синхронизовать аудио/видео</entry>
+  <entry key="541">Корректный логин, но эта сессия неактивна или не записана на сервере. Вам нужно получит новый ID сессии и перелогиниться</entry>
+  <entry key="542">SessionId не залогинен или не имеет прав администратора. Чтобы встраивать новых пользователей, SOAP Gateway'ю нужен пользователь с правами администратора.</entry>
+  <entry key="543">У этой сессии нет connected Remoteuser-Data. Либо вы не вызвали SOAP-Gateway перед доступом к приложению, либо используете неверный ID сессии.</entry>
+  <entry key="544">У этого рекордера - Beta-версия</entry>
+  <entry key="545">x</entry>
+  <entry key="546">ось x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">ось y</entry>
+  <entry key="549">w</entry>
+  <entry key="550">ширина</entry>
+  <entry key="551">h</entry>
+  <entry key="552">высота</entry>
+  <entry key="553">Изменить прозрачность</entry>
+  <entry key="554">Браузер открыть</entry>
+  <entry key="555">Браузер закрыть</entry>
+  <entry key="556">Потеряно соединение с сервером. Загрузите заново приложение, либо проверьте вашу сеть.</entry>
+  <entry key="557">Указатель</entry>
+  <entry key="558">Синхронизация</entry>
+  <entry key="559">Синхронизация участников, подождите</entry>
+  <entry key="560"></entry>
+  <entry key="561"></entry>
+  <entry key="562"></entry>
+  <entry key="563"></entry>
+  <entry key="564"></entry>
+  <entry key="565">Напоминатель:</entry>
+  <entry key="566">Категория:</entry>
+  <entry key="567">Повторение:</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Место:</entry>
+  <entry key="570">Начало</entry>
+  <entry key="571">Конец</entry>
+  <entry key="572">Название</entry>
+  <entry key="573">Комментарий</entry>
+  <entry key="574">Приглашения</entry>
+  <entry key="575">Ежедневно</entry>
+  <entry key="576">Ежемесячно</entry>
+  <entry key="577">Ежегодно</entry>
+  <entry key="578">Конец совещания после начала совещания!</entry>
+  <entry key="579">Пожалуйста, вставьте заголовок!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Активируйте это, если на вашем языке пишут справа налево</entry>
+  <entry key="582">информационная панель</entry>
+  <entry key="583">Посмотреть записанные совещания и лекции</entry>
+  <entry key="584">Совещание - проведите конференцию с 4 участниками (число участников может доходить до 16)у каждого будет аудио/видео</entry>
+  <entry key="585">Лекция - проведите конференцию с участниками, число которых – до 200. Аудио/видео будет только у модератора</entry>
+  <entry key="586">Создание пользователей, комнат, организаций + изменить конфигурацию</entry>
+  <entry key="587">Сейчас участников в этой комнате</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Логин</entry>
+  <entry key="590">x</entry>
+  <entry key="591">Загрузка документа. Подождите, пока клиент синхронизируется.</entry>
+  <entry key="592">Загружено, конвертация документа</entry>
+  <entry key="593">Начать</entry>
+  <entry key="594">Импорт файла. Выберите файл на вашем компьютере.</entry>
+  <entry key="595">Отмена</entry>
+  <entry key="596">Выбрать файл</entry>
+  <entry key="597">Соединения</entry>
+  <entry key="598">Значение</entry>
+  <entry key="599">ID потока</entry>
+  <entry key="600">Логин</entry>
+  <entry key="601">Соединено с</entry>
+  <entry key="602">Комната/Кол-во</entry>
+  <entry key="603">Отключить</entry>
+  <entry key="604">Отключить</entry>
+  <entry key="605">Вы действительно хотите отключит этого клиента? Клиент может залогиниться вновь</entry>
+  <entry key="606">Ваша сессия завершена администратором или модератором.</entry>
+  <entry key="607">Телефон</entry>
+  <entry key="608">Этот пользователь - модератор в этой комнате</entry>
+  <entry key="609">Участнику разрешено рисовать на доске</entry>
+  <entry key="610">(Ре)старт аудио/видео или изменение установок устройства</entry>
+  <entry key="611">Разрешить этому участнику рисовать на доске</entry>
+  <entry key="612">Запретить рисовать на доске</entry>
+  <entry key="613">Участники</entry>
+  <entry key="614">Документы</entry>
+  <entry key="615">Доска</entry>
+  <entry key="616">Чат</entry>
+  <entry key="617">Вашей учетной записи соответствует несколько организаций. Пожалуйста, выберите одну организацию для данной сессии.</entry>
+  <entry key="618">Эта комната заполнена. Попробуйте попозже.</entry>
+  <entry key="619">Тип комнаты</entry>
+  <entry key="620">Комната назначений</entry>
+  <entry key="621">Время сервера</entry>
+  <entry key="622">{0}: Напоминание</entry>
+  <entry key="623">Сообщение от пользователя:</entry>
+  <entry key="624">Текст сообщения:</entry>
+  <entry key="625">Для того, чтобы принять участие в совещании, кликните на ссылку:</entry>
+  <entry key="626">Нажмите здесь для того, чтобы войти в комнату совещаний</entry>
+  <entry key="627">Если не удаётся перейти по ссылке, скопируйте этот URL в браузер:</entry>
+  <entry key="628">имеющиеся пользователи</entry>
+  <entry key="629">пригласить других</entry>
+  <entry key="630">Имя</entry>
+  <entry key="631">Фамилия</entry>
+  <entry key="632">e-mail</entry>
+  <entry key="633">Подтверждение выхода</entry>
+  <entry key="634">Вы уверены, что хотите выйти?</entry>
+  <entry key="635">Действия</entry>
+  <entry key="636">Демо комната</entry>
+  <entry key="637">Время демонстрации</entry>
+  <entry key="638">Таймер совещания</entry>
+  <entry key="639">Это - демо комната. Чтобы отключить это сообщение, либо создайте личную комнату, либо установите собственный сервер. Вы автоматически будете отключены от комнаты через:</entry>
+  <entry key="640">Модерируется</entry>
+  <entry key="641">Подождите, пока модератор зайдёт в комнату. Модератором может быть лектор, администратор, либо создатель этой комнаты.</entry>
+  <entry key="642">ОК</entry>
+  <entry key="643">Другой участник делает экран общим</entry>
+  <entry key="644">Участник делает экран общим:</entry>
+  <entry key="645">Сделать экран общим</entry>
+  <entry key="646">Добавить новое совещание</entry>
+  <entry key="647">Комната совещаний</entry>
+  <entry key="648">Комната лекций</entry>
+  <entry key="649">Модерация</entry>
+  <entry key="650">Модерировать участников</entry>
+  <entry key="651">Модерировать комнаты</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Хотите сделать этого пользователя модератором этой организации?</entry>
+  <entry key="654">Выберите организации перед тем, как добавлять в неё пользователей</entry>
+  <entry key="655">Модератор организации</entry>
+  <entry key="656">Вы действительно хотите удалить пользователя из этой организации</entry>
+  <entry key="657">Этот пользователь - модератор</entry>
+  <entry key="658">Этот пользователь - не модератор</entry>
+  <entry key="659">Хотите, чтобы пользователь не был модератором в этой организации?</entry>
+  <entry key="660">Добавление или удаление польз-ля/комнаты, относящихся к вашейорганизации</entry>
+  <entry key="661">Вы действительно хотите удалить эту запись?</entry>
+  <entry key="662">Вы действительно хотите удалить этого польз-ля из вашей организации? В этом случае вы лишь удалите пользователем из организации, а для полного удаления пользователя нужно зайти на панель администрирования.</entry>
+  <entry key="663">Вы не можете удалить себя</entry>
+  <entry key="664">Этот метод можно вызвать, только используя аккаунт администратора.</entry>
+  <entry key="665">Не было сессии, ассоциирующийся с этим ID.</entry>
+  <entry key="666">Это - аккаунт администратора или модератора. Вы можете редактировать его только через панель адмиинистрирования.</entry>
+  <entry key="667">Для завершения регистрации кликните на эту ссылку или скопируйте URL в окно браузера.</entry>
+  <entry key="668">Нажмите для проверки вашего e-mail.</entry>
+  <entry key="669">Для этого Хеша не найдено пользователей.</entry>
+  <entry key="670">Этот пользователь уже активирован!</entry>
+  <entry key="671">Вы успешно активировали ваш аккаунт</entry>
+  <entry key="672">Входите сейчас</entry>
+  <entry key="673">Ваш аккаунт не активирован. Сначала перейдите по ссылке, полученной в письме, которое вы получили при регистрации.</entry>
+  <entry key="674">Вы успешно зарегистрировались. Вам отправлено письмо с кодом проверки. Проверьте вашу почту.</entry>
+  <entry key="675">Снять роль модератора у этого пользователя</entry>
+  <entry key="676">Дать пользователю права модерации</entry>
+  <entry key="677">Пользователь</entry>
+  <entry key="678">Доступ к доске</entry>
+  <entry key="679">Модератор</entry>
+  <entry key="680">Модерация: Выберите поль-ля из списка для того, чтобы дать ему доступ к доске, модерации или видео.</entry>
+  <entry key="681">Этот пользователь уже модератор, поэтому он автоматически имеет право рисовать.</entry>
+  <entry key="682">Это вы! Вы не можете удалить права модерации у себя.</entry>
+  <entry key="683">Разрешить этому пользователю публиковать своё Аудио/Видео</entry>
+  <entry key="684">Удалить Аудио/Видео этого пользователя</entry>
+  <entry key="685">Я хочу получить права модерации в этой комнате</entry>
+  <entry key="686">Я хочу рисовать на доске</entry>
+  <entry key="687">Я хочу сделать моё Аудио/Видео общим</entry>
+  <entry key="688">Вы - модератор в этой комнате</entry>
+  <entry key="689">Вам разрешено рисовать на доске</entry>
+  <entry key="690">Вам разрешено сделать ваше Аудио/Видео общим</entry>
+  <entry key="691">Сообщение модератору</entry>
+  <entry key="692">Пользователь</entry>
+  <entry key="693">желает стать модератором. Для того, чтобы разрешить или запретить функцию модерации, используйте иконки статуса рядом с именами в списке участников.</entry>
+  <entry key="694">желает рисовать на доске. Для того, чтобы разрешить или запретить рисовать на доске, используйте иконки статуса рядом с именами в списке участников.</entry>
+  <entry key="695">желает сделать своё Аудио/Видео общим. Для того, чтобы разрешить или запретить участникам делать Аудио/Видео общим, используйте иконки статуса рядом с именами в списке участников.</entry>
+  <entry key="696">Нужно подождать, пока модератор войдёт в комнату.</entry>
+  <entry key="697">Отменить</entry>
+  <entry key="698">Сохранить</entry>
+  <entry key="699">День</entry>
+  <entry key="700">Месяц</entry>
+  <entry key="701">Год</entry>
+  <entry key="702">Загрузить файл</entry>
+  <entry key="703">Добавить папку</entry>
+  <entry key="704">Обновить</entry>
+  <entry key="705">Корзина</entry>
+  <entry key="706">Мои файлы (Локальное устройство)</entry>
+  <entry key="707">Файлы из комнаты (Общее устройство)</entry>
+  <entry key="708">Добавить файл</entry>
+  <entry key="709">Добавить папку</entry>
+  <entry key="710">Удалить папку</entry>
+  <entry key="711">Редактировать имя</entry>
+  <entry key="712">Новая папка</entry>
+  <entry key="713">Вы уверены, что хотите удалить этот пункт?</entry>
+  <entry key="714">Поиск</entry>
+  <entry key="715">Поиск</entry>
+  <entry key="716">Открыть документ</entry>
+  <entry key="717">Показать все файлы (в виде дерева)</entry>
+  <entry key="718">Закрыть документ</entry>
+  <entry key="719">Удалить файл</entry>
+  <entry key="720">Вы не можете рисовать на доске. Вам нужно либо стать модератором, либо получить от модератора право на рисование. Вы можете попросить модератора предоставить вам такое право.</entry>
+  <entry key="721">Свойства документа</entry>
+  <entry key="722">Запустить клиент (внешний)</entry>
+  <entry key="723">Запустить клиент (HTTP)</entry>
+  <entry key="724">Пользователь хочет сделать свой экран общим. Хотите увидеть его экран?</entry>
+  <entry key="725">В данный момент вы публикуете ваш экран. Чтобы прекратить публикацию, нажмите кнопку "Stop" клиента</entry>
+  <entry key="726">Сессия публикации экрана</entry>
+  <entry key="727">Вы уже опубликовали ваш экран</entry>
+  <entry key="728">Просмотрщик рабочего стола</entry>
+  <entry key="729">Выйти</entry>
+  <entry key="730">Публикатор экрана</entry>
+  <entry key="731">Нажмите, чтобы открыть общий доступ к вашему экрану</entry>
+  <entry key="732">Открыть доступ</entry>
+  <entry key="733">Приостановить доступ</entry>
+  <entry key="734">Выберите область экрана</entry>
+  <entry key="735">Изменить ширину</entry>
+  <entry key="736">Участник закончил публиковать свой рабочий стол</entry>
+  <entry key="737">Изменить высоту</entry>
+  <entry key="738">Смещение X</entry>
+  <entry key="739">Смещение Y</entry>
+  <entry key="740">Ширина:</entry>
+  <entry key="741">Высота:</entry>
+  <entry key="742">Соединение завершено сервером</entry>
+  <entry key="743">Отмена</entry>
+  <entry key="744">Запустить внешний</entry>
+  <entry key="745">Полностью закрыв сессию, вы не сможете больше перезапустить просмотрщик для неё</entry>
+  <entry key="746">Подтвердите закрытие сессии просмотрщика</entry>
+  <entry key="747">Сделать экран общим</entry>
+  <entry key="748">Сессия записи</entry>
+  <entry key="749">Совместный просмотр</entry>
+  <entry key="750">К сожалению, Firefox на ОС Windows не поддерживает совместный просмотр. Используйте другой браузер.</entry>
+  <entry key="751">Предыдущая</entry>
+  <entry key="752">Следующая</entry>
+  <entry key="753">Перегрузить</entry>
+  <entry key="754">Домашняя страница</entry>
+  <entry key="755">Загрузить</entry>
+  <entry key="756">Добавить в ваш профиль эту веб-страницу как страницу по умолчанию</entry>
+  <entry key="757">Настройки теста</entry>
+  <entry key="758">Проверьте установки микрофона и камеры перед тем, как войти в комнату. Запишите 5-секундное тестовое видео. После записи можно проиграть видео и проверить качество картинки и звука.</entry>
+  <entry key="759">Больше не показывать этот текст</entry>
+  <entry key="760">Отмена</entry>
+  <entry key="761">К конференции</entry>
+  <entry key="762">Больше не спрашивать</entry>
+  <entry key="763">ЗАПИСЬ</entry>
+  <entry key="764">ПРОИГРАТЬ</entry>
+  <entry key="765">Можно продолжить без тестирования, если не планируете публиковать ваш голос и видео. Участники без аудио и видео могут использовать доску, публиковать свой экран, а также участвовать в чате.</entry>
+  <entry key="766">СТОП</entry>
+  <entry key="767">Уровень звука</entry>
+  <entry key="768">Старт</entry>
+  <entry key="769">Участвуйте в конференции</entry>
+  <entry key="770">Начните лекцию</entry>
+  <entry key="771">Выбор комнаты</entry>
+  <entry key="772">Настройки</entry>
+  <entry key="773">К конференции</entry>
+  <entry key="774">Как участвовать в конференции:</entry>
+  <entry key="775">Начать запись</entry>
+  <entry key="776">Не показывать окно проверки аудио/записи видео при входе в конференцию</entry>
+  <entry key="777">Публичные комнаты</entry>
+  <entry key="778">Публичными комнатами могут пользоваться все пользователи</entry>
+  <entry key="779">Приватные комнаты</entry>
+  <entry key="780">Приватными комнатами могут пользоваться только пользователи из той же организации</entry>
+  <entry key="781">Мои комнаты</entry>
+  <entry key="782">Комнаты этой секции - для персонального использования. Они созданы через календарь, у них есть начало и конец жизни. Эти комнаты перечислены здесь только то время, пока ими можно пользоваться.</entry>
+  <entry key="783">Для этого действия вы должны быть модератором</entry>
+  <entry key="784">Подать заявку на модерацию</entry>
+  <entry key="785">Подать заявку на доступ к доске</entry>
+  <entry key="786">Подать заявку на доступ к камере и микрофону</entry>
+  <entry key="787">Хеш-код этой сессии уже использован. Нельзя использовать его дважды.</entry>
+  <entry key="788">СТАРТ</entry>
+  <entry key="789">ВЫХОД</entry>
+  <entry key="790">Вы на самом деле хотите выйти? Возможно, вам нужно удалить загруженные документы, очистить доску и историю чата.</entry>
+  <entry key="791">Выйти из конференции</entry>
+  <entry key="792">Комнаты</entry>
+  <entry key="793">Выберите комнату для совещания</entry>
+  <entry key="794">В календаре есть несохранённые события. Сохраните их или удалите.</entry>
+  <entry key="795">Добавьте хотя бы одного участника в совещание</entry>
+  <entry key="796">Вы действительно хотите удалить это событие?</entry>
+  <entry key="797">Предупреждение</entry>
+  <entry key="798">Добавить событие</entry>
+  <entry key="799">День</entry>
+  <entry key="800">Неделя</entry>
+  <entry key="801">Месяц</entry>
+  <entry key="802">Описание</entry>
+  <entry key="803">Участники</entry>
+  <entry key="804">{0} - платформа ваших веб-конференций. Вы можете 1) следуя инструкциям, нажать кнопку "Старт" и участвовать в конференции или 2) перейти в календарь и назначить время.</entry>
+  <entry key="805">Запланировать</entry>
+  <entry key="806">Чтобы назначить конференцию, добавьте новое событие в календарь.</entry>
+  <entry key="807">Нужна помощь?</entry>
+  <entry key="808">Ограниченная</entry>
+  <entry key="809">Поиск</entry>
+  <entry key="810">Добавить</entry>
+  <entry key="811">Ни один пользователь не выбран. Выберите его из списка, а затем нажмите "Добавить".</entry>
+  <entry key="812">Добавить участника</entry>
+  <entry key="813">Сохранить</entry>
+  <entry key="814">Удалить</entry>
+  <entry key="815">Детали события</entry>
+  <entry key="816">Модератор по умолчанию</entry>
+  <entry key="817">Супер</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Имя</entry>
+  <entry key="820">e-mail</entry>
+  <entry key="821">Добавить нового модератора по умолчанию</entry>
+  <entry key="822">Является супермодератором</entry>
+  <entry key="823">Если комната модерируется, пользователь с правами модератора или администратора автоматически становится модератором при входе. Если вам это не нужно, а Вы лишь хотите, чтобы определённый польз-ль стал модератором, используйте опцию "модератор по умолчанию".</entry>
+  <entry key="824">Супермодератор всегда становится модератором при входе в комнату. У него нельзя снять флаг модерации.</entry>
+  <entry key="825">Сделать польз-ля супермодератором</entry>
+  <entry key="826">Снять флаг супермодерации с польз-ля</entry>
+  <entry key="827">x</entry>
+  <entry key="828">Если для комнаты вы добавите организацию, только пользователи этой организации будут иметь доступ к ней (действительно только если флаг isPublic не установлен)</entry>
+  <entry key="829">Модерация</entry>
+  <entry key="830">Ограничения</entry>
+  <entry key="831">Организация</entry>
+  <entry key="832">Вы уверены?</entry>
+  <entry key="833">Вы действительно хотите удалить запись?</entry>
+  <entry key="834">Пользователь не выбран. Пожалуйста, выберите пользователя</entry>
+  <entry key="835">Добавить модератора по умолчанию</entry>
+  <entry key="836">Хотите добавить флаг супермодератора этому пользователю? Чтобы сохранить это, сохраните объект комнаты.</entry>
+  <entry key="837">Вы действительно хотите удалить флаг супермодератора у пользователя? Чтобы сохранить это, сохраните объект комнаты.</entry>
+  <entry key="838">Этот польз-ль - супермодератор. Вы не можете удалить флаг модератора у него.</entry>
+  <entry key="839">Вы действительно хотите удалить этот файл/папку?</entry>
+  <entry key="840">Удалить этот файл/папку?</entry>
+  <entry key="841">Г-жа</entry>
+  <entry key="842">Д-р</entry>
+  <entry key="843">Свойства</entry>
+  <entry key="844">Показывать позицию мыши зрителям</entry>
+  <entry key="845">Совместно использовать аудио и SIP</entry>
+  <entry key="846">Совмистно использовать аудио с SIP и видео с флеш</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">Смотреть экран</entry>
+  <entry key="849">Пользователь</entry>
+  <entry key="850">хочет сделать экран общим. Хотите видеть его?</entry>
+  <entry key="851">Закрыть</entry>
+  <entry key="852">Масштаб</entry>
+  <entry key="853">Сессия была закрыта хозяином экрана!</entry>
+  <entry key="854">Пауза</entry>
+  <entry key="855">Новый общий экран</entry>
+  <entry key="856">Минимизировать</entry>
+  <entry key="857">Максимизировать</entry>
+  <entry key="858">Видео</entry>
+  <entry key="859">Сроки записи</entry>
+  <entry key="860">Мои записи</entry>
+  <entry key="861">Публичные записи</entry>
+  <entry key="862">Инфо</entry>
+  <entry key="863">Имя</entry>
+  <entry key="864">Длина</entry>
+  <entry key="865">Дата</entry>
+  <entry key="866">От</entry>
+  <entry key="867">ИГРАТЬ</entry>
+  <entry key="868">Главное - видео</entry>
+  <entry key="869">Запись</entry>
+  <entry key="870">Вы можете записывать и делать экран общим одновременно. Чтобы сделать экран общим, нажмите кнопку “Открыть доступ” сверху. Чтобы только записывать сессию, нажмите "Начать запись".</entry>
+  <entry key="871">Начать запись</entry>
+  <entry key="872">Остановить запись</entry>
+  <entry key="873">Загрузить файл FLV</entry>
+  <entry key="874">Комната</entry>
+  <entry key="875">Играть</entry>
+  <entry key="876">Стоп</entry>
+  <entry key="877">Микрофон польз-ля включен</entry>
+  <entry key="878">Закрыть доступ</entry>
+  <entry key="879">Разрешить вопросы</entry>
+  <entry key="880">Выключите, чтобы участники в комнате вам не мешали.</entry>
+  <entry key="881">Права</entry>
+  <entry key="882">Загрузить как AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Необработанное видео</entry>
+  <entry key="886">Только аудио</entry>
+  <entry key="887">При обработке записи возникли ошибки.</entry>
+  <entry key="888">Запись ещё не готова. Попробуйте снова через пару минут.</entry>
+  <entry key="889">Лог:</entry>
+  <entry key="890">Сообщение рекордера</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">Апплет SIP не готов</entry>
+  <entry key="893">Установки аккаунта SIP</entry>
+  <entry key="894">Установки SIP для каждого пользователя.</entry>
+  <entry key="895">Польз-ль SIP</entry>
+  <entry key="896">Пароль Sip</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">Неправильный логин к шлюзу SIP. Проверьте данные ауфентикациивашего провайдера SIP и данные аккаунта SIP для каждого польз-ля. Администратор может сделать проверку через пункт меню Конфигурация. Пользователи и модераторы заблокированы от любых взаимодействий.</entry>
+  <entry key="899">Неправильный логин для шлюза SIP. Обратитесь в службу поддержки!</entry>
+  <entry key="900">Войти в шлюз SIP</entry>
+  <entry key="901">Войти в шлюз SIP</entry>
+  <entry key="902">Показать лог</entry>
+  <entry key="903">Лог процесса записи</entry>
+  <entry key="904">Сообщения апплета SIP</entry>
+  <entry key="905">Апплет SIP не готов. Примите апплет и нажмите ok!</entry>
+  <entry key="906">Стать модератором</entry>
+  <entry key="907">Сохранить изменения назначения</entry>
+  <entry key="908">Назначение было изменено. Сохранить изменения? Все участники получат мейл с изменённой датой и временем (в зависимости от типа нотификаций этого назначения).</entry>
+  <entry key="909">Для доступа к другим записям войдите в приложение {0}.</entry>
+  <entry key="910">Выберите пользователя для этого видео</entry>
+  <entry key="911">Доступные пользователи для этого Pod</entry>
+  <entry key="912">Вы модератор этого интервью. Вы можете решать, кому говорить, и можете начинать / останавливать запись</entry>
+  <entry key="913">Начать запись</entry>
+  <entry key="914">Остановить запись</entry>
+  <entry key="915">Запись интервью уже начата.</entry>
+  <entry key="916">Запись уже остановлена или ещё не начата.</entry>
+  <entry key="917">Запись этого интервью уже начата!</entry>
+  <entry key="918">Отменить</entry>
+  <entry key="919">Обработка интервью занимает 5 минут на каждую минуту интервью. Текущий прогресс обработки:</entry>
+  <entry key="920">Введите пароль снова, чтобы автоматически создать данные SIP</entry>
+  <entry key="921">Авто-генерация SIP</entry>
+  <entry key="922">Вы не можете переместить этот файл или папку в его собственную подпапку!</entry>
+  <entry key="923">Размер домашнего накопителя</entry>
+  <entry key="924">Размер публичного накопителя</entry>
+  <entry key="925">Лицензионные установки</entry>
+  <entry key="926">Вы можете либо назначить дату конца срока действия, либо макс. число минут срока действия лицензии.</entry>
+  <entry key="927">Проверить лицензию</entry>
+  <entry key="928">Единая ставка</entry>
+  <entry key="929">Дата конца срока действия</entry>
+  <entry key="930">Осталось секунд</entry>
+  <entry key="931">Общее время</entry>
+  <entry key="932">Ваша лицензия истекла. Вам нужно купить новые минуты либо заплатить по единой ставке.</entry>
+  <entry key="933">Нажмите и купите</entry>
+  <entry key="934">Оставшееся время вашего аккаунта:</entry>
+  <entry key="935">Информация о лицензии</entry>
+  <entry key="936">Информация</entry>
+  <entry key="937">Закрыть</entry>
+  <entry key="938">Ваша лицензия истекла. Вам необходимо купить новые минуты либо заплатить по единой ставке.</entry>
+  <entry key="939">Установки лицензии</entry>
+  <entry key="940">Вы можете купить минуты для того, чтобы проводить веб-конференции. Или заплатите по единой ставке за 3-12 месяцев.Посылка приглашений (прямые ссылки на комнаты) или создание конференций с внешними польз-лями через календарь возможны только в случае оплаты по единой ставке!</entry>
+  <entry key="941">Купить 60 минут за 9,99 евро (16 центов за минуту)</entry>
+  <entry key="942">Купить 5 часов за 19,99 евро (6 центов за минуту)</entry>
+  <entry key="943">Купить 3 месяца за 29,99 евро (9,99 евро за месяц)</entry>
+  <entry key="944">Купить 6 месяцев за 39,99 евро (6,66 евро за месяц)</entry>
+  <entry key="945">Платить поминутно</entry>
+  <entry key="946">Единая ставка</entry>
+  <entry key="947">У вас неограниченная лицензия</entry>
+  <entry key="948">Ваша лицензия истекает:</entry>
+  <entry key="949">Вы купили поминутную лицензию. У вас есть:</entry>
+  <entry key="950">Купите новый кредит</entry>
+  <entry key="951">Хотите свой собственный сервер?</entry>
+  <entry key="952">Вы хотите установить {0} на ваш сервер или интегрироваться с Moodle, SugarCRM, веб-сайтом или внутренней сетью? Цены начинаются с 500 евро за инстолляцию!</entry>
+  <entry key="953">или послать сообщение</entry>
+  <entry key="954">Ответить:</entry>
+  <entry key="955">Сообщение:</entry>
+  <entry key="956">Послать</entry>
+  <entry key="957">Нажмите здесь, чтобы получить контактную информацию и прайс-лист</entry>
+  <entry key="958">Кредитная карта</entry>
+  <entry key="959">Имя</entry>
+  <entry key="960">Фамилия</entry>
+  <entry key="961">Тип карты</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Номер карты</entry>
+  <entry key="967">Срок окончания действия</entry>
+  <entry key="968">Номер для верификации карты</entry>
+  <entry key="969">Платёжный адрес</entry>
+  <entry key="970">Адрес</entry>
+  <entry key="971"></entry>
+  <entry key="972">Город</entry>
+  <entry key="973">Страна</entry>
+  <entry key="974">Штат (Только US)</entry>
+  <entry key="975">Индекс</entry>
+  <entry key="976">Кол-во</entry>
+  <entry key="977">Послать</entry>
+  <entry key="978">Шаг 1: {0} - Платёжная форма</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Нажмите "Послать через PayPal" чтобы заплатить. Paypal принимает VISA, MasterCard, Discover или American Express. PaypAL не требует подписи.Граждене Германии могут также платить с дебетовой карты (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Спасибо за покупку {0}. Как только мы получим ваш платёж, ваш аккаунт будет изменён. Вы поллучите письмо с вашим счётом в формате PDF.Вы также можете проверять текущие и прошлые операции в вашем профайле.Сейчас вы можете закрыть ваше окно браузера и вернуться к {0}.</entry>
+  <entry key="982">Отправьте и купите!</entry>
+  <entry key="983">нажмите и купите!</entry>
+  <entry key="984">Шаг 3: Платёж за {0} - проверьте заявку и купите!</entry>
+  <entry key="985">Имя</entry>
+  <entry key="986">Платёж получен!</entry>
+  <entry key="987">Здравствуйте,</entry>
+  <entry key="988">Мы получили ваш платёж. Ваш профайл изменён. Смотрите прикреплённый счёт. Этот и все предыдущие счета могут также быть загружены в ваш профайл.</entry>
+  <entry key="989">Спасибо за использование {0}!</entry>
+  <entry key="990">Платёж получен {0} -</entry>
+  <entry key="991">Статус платежа и транзакции</entry>
+  <entry key="992">Хэш транзакций</entry>
+  <entry key="993">Минуты</entry>
+  <entry key="994">Месяцы</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Статус</entry>
+  <entry key="997">Счёт</entry>
+  <entry key="998"></entry>
+  <entry key="999">Для того, чтобы посылать приглашения или создавать митинги через календарь, Вы должны платить по единой ставке. Для поминутной тарификации возможен только доступп к {0}. Вы не можете разрешить сторонним участникам доступ к митингу.</entry>
+  <entry key="1000">Этот email уже используется другим пользователем.</entry>
+  <entry key="1001">Установки SIP</entry>
+  <entry key="1002">Номер конференции и PIN автоматически созданы через шлюз OpenXG RPC</entry>
+  <entry key="1003">Номер SIP</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Очистить объекты только на текущем слайде!</entry>
+  <entry key="1006">Только введённый в строке состояния URL посылается участникам!</entry>
+  <entry key="1007">Сделать групповые комнаты [Breakout session]</entry>
+  <entry key="1008">Выберите пользователей для групповой комнаты!</entry>
+  <entry key="1009">Здесь вы можете выбрать пользователей и создать новую групповую комнату для конференций для них. Выбранные пользователи будут автоматически перемещены в новую комнату или получат сообщение. Модераторы получат список текущих комнат так, чтобы они могли переключаться на каждую комнату, если нужно.</entry>
+  <entry key="1010">Имя пользователя</entry>
+  <entry key="1011">Логин</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Пользователи в новой групповой комнате:</entry>
+  <entry key="1014">Создать групповую комнату</entry>
+  <entry key="1015">Отмена</entry>
+  <entry key="1016">Выберите хотя бы одного пользователя для комнаты!</entry>
+  <entry key="1017">Добавить пользователя в группу</entry>
+  <entry key="1018">Удалить пользователя из комнаты</entry>
+  <entry key="1019">Пользователь - модератор групповой комнаты (Он может управлять комнатами и пользователи комнаты могут просить его прийти)</entry>
+  <entry key="1020">Тип комнаты</entry>
+  <entry key="1021">Если вы выберете "Переключить пользователя на новую групповую комнату" все выбранные пользователи будут автоматически переключены на новую комнату. Иначе они получат нотификацию с кнопкой, которой они переключиться на новую комнату. Модераторы всегда имеют выбор в управлении комнатами и переключении между ними.</entry>
+  <entry key="1022">Управление групповыми комнатами</entry>
+  <entry key="1023">Вы можете переключаться между всеми групповыми комнатами, в которых вы модератор. Пользователи внутри комнаты могут посылать вам сообщения, например просить вас зайти в икомнату и помочь. Вы можете также прервать комнату, и все пользователи будут выведены оттуда.</entry>
+  <entry key="1024">Переместить пользователя в новую комнату</entry>
+  <entry key="1025">Имя</entry>
+  <entry key="1026">Создано</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Доступные пользователи</entry>
+  <entry key="1030">Добавьте польз-ля плюсом слева или удалите крестиком справа!</entry>
+  <entry key="1031">1) Установки групповой комнаты</entry>
+  <entry key="1032">2) Добавить пользователя в групповую комнату</entry>
+  <entry key="1033">Название групповой комнаты</entry>
+  <entry key="1034">Групповая комната</entry>
+  <entry key="1035">Изменить для комнаты</entry>
+  <entry key="1036">Переключиться на эту групповую комнату</entry>
+  <entry key="1037">Прервать групповую комнату и заставить всех пользователей выйти</entry>
+  <entry key="1038">Новая групповая комната</entry>
+  <entry key="1039">Есть новая групповая комната, доступная для вас.</entry>
+  <entry key="1040">Переключиться на групповую комнату</entry>
+  <entry key="1041">Действия групповой комнаты</entry>
+  <entry key="1042">Вы можете переоткрыть это окно через пункт Действия меню!</entry>
+  <entry key="1043">Послать сообщение модератору групповой комнаты</entry>
+  <entry key="1044">Новая групповая комната</entry>
+  <entry key="1045">Есть новая доступная групповая комната. Вы можете переключиться на неё. Групповые комнаты похожи на "рабочие" с дополнительной возможностью задавать вопросы модератору. Ваши комнаты также доступны в разделе "Мои Митинги".</entry>
+  <entry key="1046">Перейти в групповую комнату</entry>
+  <entry key="1047">Создано:</entry>
+  <entry key="1048">Название групповой комнаты:</entry>
+  <entry key="1049">Это окно останется открытым даже если вы выйдете из комнаты!</entry>
+  <entry key="1050">Польз-ли этой групповой комнаты</entry>
+  <entry key="1051">3) Другие групповые комнаты, к которым вы можете перейти</entry>
+  <entry key="1052">Послать сообщение модераторам групповой комнаты. Например, если вам нужна помощь в модерации или у вас есть вопрос по теме.</entry>
+  <entry key="1053">Послать</entry>
+  <entry key="1054">2) Пользователи, приглашённые в эту комнату</entry>
+  <entry key="1055">Модератор групповой комнаты</entry>
+  <entry key="1056">Это - люди, которых модератор пригласил в эту групповую комнату.</entry>
+  <entry key="1057">Сейчас в этой комнате нет залогиненных модераторов!</entry>
+  <entry key="1058">Пожалуйста, введите сообщение</entry>
+  <entry key="1059">Помогите, в нашей групповой комнате проблемы!</entry>
+  <entry key="1060">Пользователь из групповой уомнаты просит помощи.</entry>
+  <entry key="1061">Запрос групповой комнаты для помощи</entry>
+  <entry key="1062">Сообщение:</entry>
+  <entry key="1063">От:</entry>
+  <entry key="1064">Сейчас вы не находитесь ни в какой групповой комнате. Но можете преключиться на комнаты, к котоым имеете доступ, здесь.</entry>
+  <entry key="1065">Бэкап системы. Включает все данные, сгенерированные пользователем. Не включается конфигурация и метки языка, потому что они импортируются системным инстоллятором. Для апдейта, сэкспортируйте вашу старую систему (1) преустановите новые пакеты для новой базы данных (2) и симпортируйте файл бэкапа снова (3). Бэкап должен быть симпортирован перед генерацией данных в новой системе.</entry>
+  <entry key="1066">Системный бэкап</entry>
+  <entry key="1067">Позволить пользователю делать его экран/запись общим</entry>
+  <entry key="1068">Запретить пользователю делать его экран/запись общим</entry>
+  <entry key="1069">Пользователь-модератор, и может делать что угодно!</entry>
+  <entry key="1070">хотел бы сделать его экран/запись общим.</entry>
+  <entry key="1071">Вам разрешается оделать экран/запись общим</entry>
+  <entry key="1072">Применить права для общих экрана и записи.</entry>
+  <entry key="1073">Позволить или запретить делать экран или запись общими.</entry>
+  <entry key="1074">Выключить звук</entry>
+  <entry key="1075">Включить звук</entry>
+  <entry key="1076">Только с аудио</entry>
+  <entry key="1077">Установите этот флаг, и польз-ли будут иметь только звук опции без видео в комнате для конференций. Полезно для уменьшения нагрузки сети.</entry>
+  <entry key="1078">Позволить удалённый контроль (для общего экрана)</entry>
+  <entry key="1079">Запретить удалённый контроль (для общего экрана)</entry>
+  <entry key="1080">Применить к правам удалённого контроля (для общего экрана)</entry>
+  <entry key="1081">У вас нет прав на удалённый контроль (для общего экрана)</entry>
+  <entry key="1082">хочет удалённый контроль для общего экрана.</entry>
+  <entry key="1083">Пользователь - модератор он может делать всё</entry>
+  <entry key="1084">Позволить тлт запретить удалённый контроль (для общего экрана)</entry>
+  <entry key="1085">1) ваш PC удалённому PC: Чтобы скопировать и вставить текст из вашего буфера обмена в удалённый экран, нажмите на экран, потом кликните в текстовом поле и выберите "Вставить" из контекстного меню.2) С удалённого PC на ваш PC: Чтобы скопировать текст с удалённого PC в ваш буфер обмена, выделите текст на удалённом, кликните и выберите</entry>
+  <entry key="1086">Скопировать и вставить текст с вашего PC на удалённый PC и наоборот.</entry>
+  <entry key="1087">Скопировать выделенный текст</entry>
+  <entry key="1088">Как скопировать и вставить</entry>
+  <entry key="1089">Качество общего доступа:</entry>
+  <entry key="1090">Очень высокое качество</entry>
+  <entry key="1091">Высокое качество</entry>
+  <entry key="1092">Среднее качество</entry>
+  <entry key="1093">Низкое качество</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Клавиатура:</entry>
+  <entry key="1097">Закрыть вебинар!</entry>
+  <entry key="1098">Вебинар уже закрыт, вы будете перенаправлены в</entry>
+  <entry key="1099">Закрыть комнату</entry>
+  <entry key="1100">Переадресация</entry>
+  <entry key="1101">Установки выхода из комнаты</entry>
+  <entry key="1102">Если комната закрыта, пользователь будет переадресован на указанный URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Имя</entry>
+  <entry key="1106">Конфигурационный файл</entry>
+  <entry key="1107">Конфигурация Ldap</entry>
+  <entry key="1108">Название</entry>
+  <entry key="1109">Включено</entry>
+  <entry key="1110">Вставлено</entry>
+  <entry key="1111">Вставлено</entry>
+  <entry key="1112">Изменено</entry>
+  <entry key="1113">Изменено</entry>
+  <entry key="1114">Конфигурационные файлы в той же папке, что и webapps/openmeetings/conf. Загрузите файлы в папку вручную. Изменения конфиг-файлов происходят немедленно онлайн.</entry>
+  <entry key="1115">Имя конфиг-файла</entry>
+  <entry key="1116">Если вы включите "добавить домен к имени", значение поля "домен" добавится к каждому логину, который вводится при входе в систему. Это удобно, если логин в Ldap запоминается с доменным именем. Например: пользователь вводит "hans", домен установлен в "localhost.com", логин, который проверяется для Ldap будет: hans@localhost.com</entry>
+  <entry key="1117">Добавить домен к имени</entry>
+  <entry key="1118">Домен</entry>
+  <entry key="1119">Вставить</entry>
+  <entry key="1120">Скопировать выделенный текст</entry>
+  <entry key="1121">Удалть текст из буфера обмена</entry>
+  <entry key="1122">Показать удалённый буфер обмена</entry>
+  <entry key="1123">Не показывать снова</entry>
+  <entry key="1124">Скопировать текст здесь.</entry>
+  <entry key="1125">Вам нужны права для удалённого контроля (или модерация), чтобы скопировать и вставить текст в или из удалённого экрана.</entry>
+  <entry key="1126">Установки по умолчанию</entry>
+  <entry key="1127">Не показывать информацию о копировании и вставке в удалённом доступе</entry>
+  <entry key="1128">Сохранить</entry>
+  <entry key="1129">Удалить</entry>
+  <entry key="1130">Отменить</entry>
+  <entry key="1131">Пригласить польз-ля в комнату для конференций</entry>
+  <entry key="1132">Выбрать комнату для конференций. Приглашённый участник получит сообщение с вашим именем и ссылку на комнату.</entry>
+  <entry key="1133">Присоединён с:</entry>
+  <entry key="1134">Войдите в комнату после отправки приглашения</entry>
+  <entry key="1135">Пригласить</entry>
+  <entry key="1136">Сообщение</entry>
+  <entry key="1137">хотелось бы пригласить вас в комнату для конференций:</entry>
+  <entry key="1138">Приглашение</entry>
+  <entry key="1139">Послать приглашение</entry>
+  <entry key="1140">принял ваше приглашение!</entry>
+  <entry key="1141">Принять</entry>
+  <entry key="1142">Отказать</entry>
+  <entry key="1143">Таймзона</entry>
+  <entry key="1144">Детали события</entry>
+  <entry key="1145">Имя</entry>
+  <entry key="1146">Описание</entry>
+  <entry key="1147">Создано</entry>
+  <entry key="1148">Сообщение в ТЗ</entry>
+  <entry key="1149">Включите "Сообщение в таймзоне", чтобы попросить пользователя сменить свой профайл при след. логине.</entry>
+  <entry key="1150">пожалуйста проверьте таймзону в вашем профайле.</entry>
+  <entry key="1151">Новая конференция {0}:</entry>
+  <entry key="1152">Детали:</entry>
+  <entry key="1153">Старт:</entry>
+  <entry key="1154">Конец:</entry>
+  <entry key="1155">Изменённая конференция {0}:</entry>
+  <entry key="1156">Организатор:</entry>
+  <entry key="1157">Отменённая конференция {0}:</entry>
+  <entry key="1158">Напоминание конференции {0}:</entry>
+  <entry key="1159">Общие установки</entry>
+  <entry key="1160">Показывать контактные данные всем</entry>
+  <entry key="1161">Добавить поля ваших интересов или интересов ваших партнёров в конференцию. Запятая разделяет термины (например: медицинские услуги, забота о здоровье, ...)</entry>
+  <entry key="1162">Мои предложения</entry>
+  <entry key="1163">Мои интересы</entry>
+  <entry key="1164">Имя</entry>
+  <entry key="1165">Таймзона</entry>
+  <entry key="1166">Области интересов</entry>
+  <entry key="1167">Контактная информация</entry>
+  <entry key="1168">Показывать контактные данные только контактам</entry>
+  <entry key="1169">Не показывать контактные данные никому</entry>
+  <entry key="1170">Мой профайл</entry>
+  <entry key="1171">Редактировать установки</entry>
+  <entry key="1172">Искать пользователей</entry>
+  <entry key="1173">Посмотреть ваш профайл, как его видят другие</entry>
+  <entry key="1174">Редактировать ваши установки, добавить интересы для поиска</entry>
+  <entry key="1175">Искать других пользователей и расширить вашу сеть</entry>
+  <entry key="1176">Искать</entry>
+  <entry key="1177">Польз-ль предлагает</entry>
+  <entry key="1178">Польз-ль ищет</entry>
+  <entry key="1179">Свободный текст</entry>
+  <entry key="1180">Имя</entry>
+  <entry key="1181">Таймзона</entry>
+  <entry key="1182">Предложения</entry>
+  <entry key="1183">Поиски</entry>
+  <entry key="1184">Результаты поиска</entry>
+  <entry key="1185">Действия</entry>
+  <entry key="1186">Добавить в контакты</entry>
+  <entry key="1187">Послать сообщение</entry>
+  <entry key="1188">Контакты и сообщения</entry>
+  <entry key="1189">Ожидающие контакты</entry>
+  <entry key="1190">Принять</entry>
+  <entry key="1191">Запретить</entry>
+  <entry key="1192">Здравствуйте,</entry>
+  <entry key="1193">хочет добавить вас в список контактов.</entry>
+  <entry key="1194">Проверьте запросы вашего контакта в {0} или пойдите по этой ссылке, чтобы on принять или отклонить запрос</entry>
+  <entry key="1195">Этот пользователь уже в вашем списке контактов или получил приглашение добавиться в список, но не ответил.</entry>
+  <entry key="1196">Ваш список контактов</entry>
+  <entry key="1197">Редактируйте ваши контакты и сообщения, управляйте ожидающими контактами!</entry>
+  <entry key="1198">подтвердил вас как контакт!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Показать или скопировать лог</entry>
+  <entry key="1201">Лог чата</entry>
+  <entry key="1202">От</entry>
+  <entry key="1203">Тема</entry>
+  <entry key="1204">Послать</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Сообщения</entry>
+  <entry key="1207">Новый мейл</entry>
+  <entry key="1208">Нажмите, чтобы написать сообщение вашему контакту</entry>
+  <entry key="1209">Напишите новое сообщение</entry>
+  <entry key="1210">Кому:</entry>
+  <entry key="1211">Тема:</entry>
+  <entry key="1212">Включиите full fit и доска будет масштабироваться так, чтобы все документы становились видимыми в соответствии с разрешением экрана каждого участника.</entry>
+  <entry key="1213">Исключить участника</entry>
+  <entry key="1214">Вы не можете удалить сами себя из комнаты!Если вы хотите покинуть её, закройте окно браузера или используйте кнопку Выход!</entry>
+  <entry key="1215">Вы действительно хотите исключить этого участника из комнаты?</entry>
+  <entry key="1216">Подтвердите действие ...</entry>
+  <entry key="1217">Вы не можете исключить супер-модератора из комнаты!</entry>
+  <entry key="1218">Зарезервировать комнату</entry>
+  <entry key="1219">Старт</entry>
+  <entry key="1220">Конец</entry>
+  <entry key="1221">Добавьте дополнительный запрос для митинга и создайте комнату для конференций. Событие скопируется в календарь каждого участника.</entry>
+  <entry key="1222">Входящие</entry>
+  <entry key="1223">Посланные</entry>
+  <entry key="1224">Корзина</entry>
+  <entry key="1225">Это вы! Вы не можете добавить себя в свои контакты.</entry>
+  <entry key="1226">Пользователь уже отклонён!</entry>
+  <entry key="1227">Пользователь уже подтверждён!</entry>
+  <entry key="1228">Хеш контактов этого пользователя невалиден!</entry>
+  <entry key="1229">Пользователь добавлен в список контактов!</entry>
+  <entry key="1230">Пользователь отклонён как контакт и удалён из списка ожидающих!</entry>
+  <entry key="1231">Нет такого контакта!</entry>
+  <entry key="1232">Вы действительно хотите удалить этот контакт?</entry>
+  <entry key="1233">Подтвердите удаление контакта</entry>
+  <entry key="1234">Удалить контакт из списка</entry>
+  <entry key="1235">Профайл пользователя</entry>
+  <entry key="1236">Показать профайл пользователя</entry>
+  <entry key="1237">Сообщения</entry>
+  <entry key="1238">Поиск</entry>
+  <entry key="1239">Все</entry>
+  <entry key="1240">Никто</entry>
+  <entry key="1241">Непрочит.</entry>
+  <entry key="1242">Прочитанные</entry>
+  <entry key="1243">К папке ...</entry>
+  <entry key="1244">Новая папка ...</entry>
+  <entry key="1245">Удалить</entry>
+  <entry key="1246">Удалённый мейл всё ещё в корзине!</entry>
+  <entry key="1247">Непрочит.</entry>
+  <entry key="1248">Прочитанное</entry>
+  <entry key="1249">Ответить</entry>
+  <entry key="1250">Ответить всем</entry>
+  <entry key="1251">Переслать</entry>
+  <entry key="1252">Действия ...</entry>
+  <entry key="1253">Послать приватное сообщение</entry>
+  <entry key="1254">Ничего не выбрано!</entry>
+  <entry key="1255">Во входящие</entry>
+  <entry key="1256">Удалить (навсегда)</entry>
+  <entry key="1257">Действие не может быть отменено!</entry>
+  <entry key="1258">Новая папка</entry>
+  <entry key="1259">Добавить папки и упорядочить сообщения!</entry>
+  <entry key="1260">Добавить папку</entry>
+  <entry key="1261">Добавить</entry>
+  <entry key="1262">Удалить папку</entry>
+  <entry key="1263">Вы не можете удалить эту папку, там есть сообщения! Удалите их или переместите их в другую папку.</entry>
+  <entry key="1264">Редактировать имя</entry>
+  <entry key="1265">Вы действительно хотите удалить эту папку? Её нельзя восстановить.</entry>
+  <entry key="1266">Ваш запрос был послан пользователю. Пользователь получит нотификацию о подтверждении или отклонении. Только подтверждённые запросы могут быть в вашем списке контактов!</entry>
+  <entry key="1267">Сообщение</entry>
+  <entry key="1268">Пользователь не дал совместного доступа к его персональным данным.</entry>
+  <entry key="1269">Пользователь разрешил доступ к своим персональным данным только контактам.</entry>
+  <entry key="1270">Адрес и телефон</entry>
+  <entry key="1271">Код вашего приглашения невалиден, он действует только в определённый период времени.</entry>
+  <entry key="1272">Это событие связано с несколькими календарями других пользователей. Ваши изменения также изменят их календари. Выхотите изменить событие?</entry>
+  <entry key="1273">Подтвердите изменение</entry>
+  <entry key="1274">Позволить контакту видеть мой календарь (только просмотр)</entry>
+  <entry key="1275">Не давать доступа к календарю</entry>
+  <entry key="1276">Календарь контактов</entry>
+  <entry key="1277">Ваши контакты должны разрешить вам доступ, прежде чем вы сможете видеть их календари.</entry>
+  <entry key="1278">Вы не можете сохранить или удалить события из чужих календарей!</entry>
+  <entry key="1279">Показать мой календарь снова!</entry>
+  <entry key="1280">Это событие связано с календарями других пользователей. Ваши действия также удалят сообытие из этих календарей. Вы хотите удалить событие?</entry>
+  <entry key="1281">Подтвердите действие</entry>
+  <entry key="1282">Войти в комнату</entry>
+  <entry key="1283">Доступ к комнате</entry>
+  <entry key="1284">К этому приватному сообщению зарезервированы комната и событие.</entry>
+  <entry key="1285">Сперва соххраните событие!</entry>
+  <entry key="1286">Нет таких доступных комнат. Событиея в календаре и присоединённая комната уже удалены!</entry>
+  <entry key="1287">Выберите ваш ник</entry>
+  <entry key="1288">Имя</entry>
+  <entry key="1289">Фамилия</entry>
+  <entry key="1290">Мейл</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Мин. длина - 4 символа для имени и фамилии вместе!.</entry>
+  <entry key="1293">Введите валидный мейл</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Войти как Facebook аккаунт</entry>
+  <entry key="1296">Записан с</entry>
+  <entry key="1297">Вы зашли с аккаунта Facebook. Вам необходимо прописать правильный мейл в профайл, иначе вы не сможете получать приглашения и приватные сообщения.</entry>
+  <entry key="1298">Сообщение</entry>
+  <entry key="1299">Больше не показывать сообщение об изменении профайла</entry>
+  <entry key="1300">Ещё настройки дисплея ...</entry>
+  <entry key="1301">Новое приватное сообщение:</entry>
+  <entry key="1302">Нажмите сюда, чтобы перейти к профайлу и прочитать сообщение ...</entry>
+  <entry key="1303">Ответить</entry>
+  <entry key="1304">Комнаты и чаты</entry>
+  <entry key="1305">Мои комнаты</entry>
+  <entry key="1306">Моя комната для конференций(до 16 участников)</entry>
+  <entry key="1307">Моя комната для вебинаров (до 120 участников)</entry>
+  <entry key="1308">Id владельца</entry>
+  <entry key="1309">Введите пароль</entry>
+  <entry key="1310">Вам нужен аккаунт уровня пользователя, модератора или админа</entry>
+  <entry key="1311">Web-сервис (только через SOAP)</entry>
+  <entry key="1312">Напрямую загрузите на доску</entry>
+  <entry key="1313">Вы действительно хотите удалить эту доску? Это действие не может быть отменено!</entry>
+  <entry key="1314">Загрузить на доску</entry>
+  <entry key="1315">Не забудьте начать запись! 1 участник в комнате хочет начать её.</entry>
+  <entry key="1316">Начать запись</entry>
+  <entry key="1317">Стрелка</entry>
+  <entry key="1318">Круг</entry>
+  <entry key="1319">Линия</entry>
+  <entry key="1320">Квадрат</entry>
+  <entry key="1321">Треугольник</entry>
+  <entry key="1322">Текст</entry>
+  <entry key="1323">Фигуры</entry>
+  <entry key="1324">Рисовать</entry>
+  <entry key="1325">Выделить/Переместить</entry>
+  <entry key="1326">Рисовть форму</entry>
+  <entry key="1327">Вырезать или Переместить</entry>
+  <entry key="1328">Масштаб</entry>
+  <entry key="1329">Печать</entry>
+  <entry key="1330">Отмена</entry>
+  <entry key="1331">Корзина</entry>
+  <entry key="1332">Добавить решётку</entry>
+  <entry key="1333">Сделать файл общим</entry>
+  <entry key="1334">Выбрать форму</entry>
+  <entry key="1335">Выбрать фигуру</entry>
+  <entry key="1336">Скопировать</entry>
+  <entry key="1337">Вырезать</entry>
+  <entry key="1338">Вставить</entry>
+  <entry key="1339">Удалить</entry>
+  <entry key="1340">Вы действительно хотите удалить контент с доски?</entry>
+  <entry key="1341">Загрузить прямо на доску</entry>
+  <entry key="1342">Участники</entry>
+  <entry key="1343">Менеджер участников</entry>
+  <entry key="1344">Присутствуют</entry>
+  <entry key="1345">Удалённый контроль</entry>
+  <entry key="1346">Извлечь</entry>
+  <entry key="1347">Чат</entry>
+  <entry key="1348">Пригласить участников</entry>
+  <entry key="1349">По eMail</entry>
+  <entry key="1350">Пользователь - модератор</entry>
+  <entry key="1351">У пользователя включена камера</entry>
+  <entry key="1352">Деактивировать заполнение формы</entry>
+  <entry key="1353">Активировать заполнение формы</entry>
+  <entry key="1354">Привязять к решётке</entry>
+  <entry key="1355">Разрешить запись</entry>
+  <entry key="1356">Подождать запись</entry>
+  <entry key="1357">Скрыть панель инстр.</entry>
+  <entry key="1358">Играть видео</entry>
+  <entry key="1359">Вы действительно хотите удалить содержание текущего слайда?</entry>
+  <entry key="1360">Принять и назначить пользовательские права</entry>
+  <entry key="1361">Отклонить</entry>
+  <entry key="1362">Я</entry>
+  <entry key="1363">Активность и действия</entry>
+  <entry key="1364">Удалить доску</entry>
+  <entry key="1365">Вы должны быть модератором или иметь права на рисование на доске, чтобы удалить доску!</entry>
+  <entry key="1366">Не разрешено</entry>
+  <entry key="1367">покидает комнату.</entry>
+  <entry key="1368">Основные иконки</entry>
+  <entry key="1369">Без категории</entry>
+  <entry key="1370">Цвет-стиль</entry>
+  <entry key="1371">Качество</entry>
+  <entry key="1372">Домен</entry>
+  <entry key="1373">посетить</entry>
+  <entry key="1374">красно-оранжевый</entry>
+  <entry key="1375">цвет морской волны</entry>
+  <entry key="1376">Стальной</entry>
+  <entry key="1377">светлосероголубой</entry>
+  <entry key="1378">золотистый</entry>
+  <entry key="1379">серебряно-серый</entry>
+  <entry key="1380">пользовательский</entry>
+  <entry key="1381">лучший</entry>
+  <entry key="1382">загрузка</entry>
+  <entry key="1383">средний</entry>
+  <entry key="1384">Выключить микр. глобально</entry>
+  <entry key="1385">Включить микр. глобально</entry>
+  <entry key="1386">Дать слово</entry>
+  <entry key="1387">Микрофон был откл. модератором. Вы не можете вкл. микр. сами!</entry>
+  <entry key="1388">Выкл. микрофон глобально?</entry>
+  <entry key="1389">Вы действительно хотите отключит микрофон? Другие участники не смогут вас слышать!</entry>
+  <entry key="1390">Отключить микрофон локально?</entry>
+  <entry key="1391">Вы действительно хотите откл. этот микрофон? Этот микрофон можно отключить только на вашем компьютере. Данное действие не повлияет на то, как остальные участники будут слышать этого пользователя. Только модератор может отключить микрофон глобально!</entry>
+  <entry key="1392">Отключить микрофон глобально?</entry>
+  <entry key="1393">Вы действительно хотите отключить этого участника? Больше никто не будет слышать его!</entry>
+  <entry key="1394">Ваш звук включен. Нажмите сюда, чтобы послать модератору сообщение о выключении микрофона глобально (в заполненной комнате)!</entry>
+  <entry key="1395">Ваш звук выключен. Нажмите сюда, чтобы послать модератору сообщение о включении микрофона глобально (в заполненной комнате)!</entry>
+  <entry key="1396">хотел бы, чтобы модератор выключил мой микрофон глобально.</entry>
+  <entry key="1397">хотел бы, чтобы модератор включил мой микрофон глобально.</entry>
+  <entry key="1398">хочет, чтобы модератор включил его/её микрофон.</entry>
+  <entry key="1399">хочет, чтобы модератор выключил его/её микрофон.</entry>
+  <entry key="1400">Включенный микрофон. Нажмите, чтобы выключить его/её микрофон глобально.</entry>
+  <entry key="1401">Выключенный микрофон. Нажмите, чтобы включить его/её микрофон глобально!</entry>
+  <entry key="1402">Этот участник глобально выключен модератором. Вы не можете включить его!</entry>
+  <entry key="1403">Выключить ваш микрофон глобально</entry>
+  <entry key="1404">Включить ваш микрофон глобально</entry>
+  <entry key="1405">Выключить микрофон</entry>
+  <entry key="1406">Включить микрофон</entry>
+  <entry key="1407">Выключить микрофон глобально</entry>
+  <entry key="1408">Включить микрофон глобально</entry>
+  <entry key="1409">Только модераторы могут включать или выключать участников глобально! Чтобы выключить ваш микрофон, используйте иконку микрофона!</entry>
+  <entry key="1410">Название опроса</entry>
+  <entry key="1411">Вы</entry>
+  <entry key="1412">Заархивированные голосования</entry>
+  <entry key="1413">активные</entry>
+  <entry key="1414">Простая диаграмма</entry>
+  <entry key="1415">Круговая диаграмма</entry>
+  <entry key="1416">Введите е-мейл</entry>
+  <entry key="1417">Новые сообщения</entry>
+  <entry key="1418">Закрытый опрос</entry>
+  <entry key="1419">Уверены, что хотите закрыть опрос? Больше никто не сможет голосовать.</entry>
+  <entry key="1420">Удалить опрос</entry>
+  <entry key="1421">Хотите удалить этот опрос? Результаты тоже будут удалены.</entry>
+  <entry key="1422">Код ISO языка</entry>
+  <entry key="1423">Разрешить/запретить права на эксклюзивный звук.</entry>
+  <entry key="1424">Позволить участнику эксклюзивный звук</entry>
+  <entry key="1425">Запретить эксклюзивный звук для участника</entry>
+  <entry key="1426">хотел бы получить разрешение на эксклюзивный звук.</entry>
+  <entry key="1427">хочу, чтобы модератор разрешил мне эксклюзивный звук.</entry>
+  <entry key="1428">Разрешить эксклюзивный звук.</entry>
+  <entry key="1429">Разрешение камеры</entry>
+  <entry key="1430">Изменение разрешения влияет на пропускную способность сети, увеличенная картинка требует больше разрешения.</entry>
+  <entry key="1431">У вас нет прав разрешать себе или другим эксклюзивное аудио. Попросите у модератора эти права или пусть он разрешит вам эксклюзивный звук сам.</entry>
+  <entry key="1432">Я хотел бы получить разрешение на эксклюзивный звук.</entry>
+  <entry key="1433">Дать мне эксклюзивный звук (как альтернатива, кликните на ваш экран или нажмите F12)</entry>
+  <entry key="1434">Микрофон включён!</entry>
+  <entry key="1435">Микрофон выключен</entry>
+  <entry key="1436">Скрыть чат</entry>
+  <entry key="1437">Скрыть панель действий</entry>
+  <entry key="1438">Скрыть панель файлов</entry>
+  <entry key="1439">Скрыть меню действий</entry>
+  <entry key="1440">Скрыть общий экран</entry>
+  <entry key="1441">Скрыть доску</entry>
+  <entry key="1442">Показать статус микрофона в видео</entry>
+  <entry key="1443">Параметры расположения</entry>
+  <entry key="1444">Новое событие</entry>
+  <entry key="1445">Ссылки, защищённые паролем - это ссылки на комнаты, которые посылаются участникам при сохранении события в календаре, не в комнате! Это значит, что если вы сохраняете событие несколько раз с разными паролями, участники каждый раз получают новые ссылки с разными паролями. Но ссылки, посланные ранее, тоже работают!</entry>
+  <entry key="1446">Редактировать</entry>
+  <entry key="1447">Номеронабиратель SIP</entry>
+  <entry key="1448">Позвонить</entry>
+  <entry key="1449">Показать события календаря для контакта</entry>
+  <entry key="1450">Ваш дом!</entry>
+  <entry key="1451">Планировать митинги</entry>
+  <entry key="1452">Смотреть записи и интервью</entry>
+  <entry key="1453">Выбрать и начать конференцию</entry>
+  <entry key="1454">Управлять пользователями и правами</entry>
+  <entry key="1455">Управлять связями и исключать участников</entry>
+  <entry key="1456">Управлять группами пользователей</entry>
+  <entry key="1457">Управлять комнатами конференций</entry>
+  <entry key="1458">Управлять свойствами системы</entry>
+  <entry key="1459">Управлять метками и текстом</entry>
+  <entry key="1460">Конфигурировать LDAP и ADS</entry>
+  <entry key="1461">Экспорт/импорт системных бэкапов</entry>
+  <entry key="1462">Вам нужны права модератора или права на рисование на доске, загрузку, выгрузку, добавление и удаление файлов и папок.</entry>
+  <entry key="1463">Редактировать текст</entry>
+  <entry key="1464">Проф-р</entry>
+  <entry key="1465">Опубликовать</entry>
+  <entry key="1466">Начать публикацию</entry>
+  <entry key="1467">Остановить</entry>
+  <entry key="1468">Сервер публикации</entry>
+  <entry key="1469">Домен публикации</entry>
+  <entry key="1470">Имя публикации</entry>
+  <entry key="1471">Уменьшать ширину общего экрана при перемещении его влево</entry>
+  <entry key="1472">Уменьшать высоту общего экрана при перемещении его вниз</entry>
+  <entry key="1473">Уменьшать смещение x общего экрана при увеличении его ширины</entry>
+  <entry key="1474">Уменьшать смещение y общего экрана при увеличении его высоты</entry>
+  <entry key="1475">Настройки для трансляции видео конференции на другие сервисы:</entry>
+  <entry key="1476">Пожалуйста, сделайте экран общим для того, чтобы опубликовать его</entry>
+  <entry key="1477">Для того, чтобы начать запись, необходимо разрешение модератора</entry>
+  <entry key="1478">Вам необходимо разрешение на предоставление эксклюзивного аудио любому участнику, для этого вам необходимо быть модератором или иметь эксклюзивные права на вкл/выкл микрофонов.</entry>
+  <entry key="1479">Загрузить новый файл</entry>
+  <entry key="1480">Открыть настройки общего экрана в новом окне</entry>
+  <entry key="1481">Запросить подтверждение модератора</entry>
+  <entry key="1482">Запросить разрешение модератора на доступ к камере/микрофону</entry>
+  <entry key="1483">Получение обратной связи посредством опроса</entry>
+  <entry key="1484">Прошлые и текущие результаты опросов в виде графиков</entry>
+  <entry key="1485">Проголосовать, если существует опрос для этой комнаты</entry>
+  <entry key="1486">Изменить настройки камеры и микрофона</entry>
+  <entry key="1487">Подтвердить и покинуть комнату</entry>
+  <entry key="1488">Позвонить внешним участникам при помощи VoIP/SIP</entry>
+  <entry key="1489">Отправить приглашение с прямой ссылкой на эту комнату</entry>
+  <entry key="1490">Изменить настройки доски</entry>
+  <entry key="1491">Максимальный размер загружаемого файла</entry>
+  <entry key="1492">Запросить разрешение модератора на доступ к доске</entry>
+  <entry key="1493">Начать приватный чат</entry>
+  <entry key="1494">Все</entry>
+  <entry key="1495">Вы не можете начать приватный чат с собой.</entry>
+  <entry key="1496">Вы уже начали приватный чат с этим участником.</entry>
+  <entry key="1497">Вы действительно хотите удалить этот приватный чат?</entry>
+  <entry key="1498">Сервера</entry>
+  <entry key="1499">Сервера кластера</entry>
+  <entry key="1500">Имя Сервера</entry>
+  <entry key="1501">Адрес Сервера</entry>
+  <entry key="1502">Описание Сервера</entry>
+  <entry key="1503">СМС</entry>
+  <entry key="1504">Сообщение. Пользователю:</entry>
+  <entry key="1505">Что бы уменьшить время и интернет траффик вы можете воспользоватся командной строкой admin для копирования/восстановления/обновления: &lt;ol&gt; &lt;li&gt;войдите в установочную папку OM (например /opt/red5)&lt;/li&gt; &lt;li&gt;остановите OM (./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;выполняем ./admin.sh -b -file ~/today_om_backup.zip (создает резервную копию OM)&lt;/li&gt; &lt;li&gt;загрузите новый дистрибутив OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (перемещаем рабочую версию OM :))&lt;/li&gt; &lt;li&gt;распаковываем дистрибутив OM в папку /opt/red5&lt;/li&gt; &lt;li&gt;запускаем ./admin.sh -i -file ~/today_om_backup.zip (или './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' в случае когда база данных отличается от базы по умолчанию )&lt;/li&gt; &lt;li&gt;запускаем OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Общие комнаты для всех пользователей</entry>
+  <entry key="1507">Общие комнаты для текущей группы пользователей</entry>
+  <entry key="1508">Комнаты данного пользователя</entry>
+  <entry key="1509">Создать/редактировать комнату для этого события</entry>
+  <entry key="1510">Вы можете ввести несколько адресов в формате: Имя1 Фамилия1 &lt;адрес1&gt;,"Имя2 Фамилия2" &lt;адрес2&gt;,'Имя3 Фамилия3' &lt;адрес3&gt;, ...</entry>
+  <entry key="1511">Регулировать поток</entry>
+  <entry key="1512">Регулировать микрфон</entry>
+  <entry key="1513">Премодерируемый чат</entry>
+  <entry key="1514">Опубликовать сообщение</entry>
+  <entry key="1515">Открывать панель чата по умолчанию</entry>
+  <entry key="1516">Открывать панель файлов по умолчанию</entry>
+  <entry key="1517">Прошлый запрос</entry>
+  <entry key="1518">Каждый подчиненный сервер посылает запрос главному через 3 секунды (задается в конфигурации). Параметр lastPing дожен быть менше 1 минуты так, чтобы главный сервер использовал подчиненные сервера.</entry>
+  <entry key="1519">HTTP Порт</entry>
+  <entry key="1520">SOAP Админ</entry>
+  <entry key="1521">Пароль</entry>
+  <entry key="1522">Путь к приложению</entry>
+  <entry key="1523">Протокол</entry>
+  <entry key="1524">Исполняемый запрос</entry>
+  <entry key="1525">Активный</entry>
+  <entry key="1526">Сгенерировать URL</entry>
+  <entry key="1527">Тестирование сети</entry>
+  <entry key="1528">Автоматически определять видео окно</entry>
+  <entry key="1529">Подчёркнутый шрифт</entry>
+  <entry key="1530">Стиль шрифта</entry>
+  <entry key="1531">Разрешить использование стилей в чате</entry>
+  <entry key="1532">Цвет шрифта</entry>
+  <entry key="1533">Гиперссылка</entry>
+  <entry key="1534">Показать статистику сессии</entry>
+  <entry key="1535">Детализация сессии</entry>
+  <entry key="1536">Системный импорт</entry>
+  <entry key="1537">Включать загруженные файлы и записи в бэкап</entry>
+  <entry key="1538">Разрешить SIP транспорт в комнате</entry>
+  <entry key="1539">Вы действительно хотите дать слово этому участнику?</entry>
+  <entry key="1540">Укажите Ваш часовой пояс</entry>
+  <entry key="1541">конференц зал (1-25 участников)</entry>
+  <entry key="1542">ограниченная (1-150 участников)</entry>
+  <entry key="1543">интервью (1:1 встреча с записью)</entry>
+  <entry key="1544">Конфигурация с этим ключем уже существует, пожалуйста укажите другой ключ или измените существующий</entry>
+  <entry key="1545">Сохранение данных, подождите пожалуйста.</entry>
+  <entry key="1546">Добро пожаловать</entry>
+  <entry key="1547">Виджет, содержащий основную информацию о пользователе и ссылки на сайты поддержки</entry>
+  <entry key="1548">Виджеты</entry>
+  <entry key="1549">О программе</entry>
+  <entry key="1550">Наименование</entry>
+  <entry key="1551">Версия</entry>
+  <entry key="1552">Ревизия</entry>
+  <entry key="1553">Дата билда</entry>
+  <entry key="1554">Загрузка ...</entry>
+  <entry key="1555">сегодня</entry>
+  <entry key="1556">Янв</entry>
+  <entry key="1557">Фев</entry>
+  <entry key="1558">Март</entry>
+  <entry key="1559">Апр</entry>
+  <entry key="1560">Май</entry>
+  <entry key="1561">Июнь</entry>
+  <entry key="1562">Июль</entry>
+  <entry key="1563">Авг</entry>
+  <entry key="1564">Сен</entry>
+  <entry key="1565">Окт</entry>
+  <entry key="1566">Ноя</entry>
+  <entry key="1567">Дек</entry>
+  <entry key="1568">не посылать уведомление</entry>
+  <entry key="1569">обычный e-майл</entry>
+  <entry key="1570">iCal e-майл</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Конфигурировать OAuth2</entry>
+  <entry key="1573">Название</entry>
+  <entry key="1574">Активен</entry>
+  <entry key="1575">URL значка</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">URL запроса ключа</entry>
+  <entry key="1579">URL запроса токена</entry>
+  <entry key="1580">URL запроса данных</entry>
+  <entry key="1581">Настройка OAuth2</entry>
+  <entry key="1582">Имя пар-ра "логин"</entry>
+  <entry key="1583">Имя пар-ра "email"</entry>
+  <entry key="1584">Имя параметра "имя"</entry>
+  <entry key="1585">Имя пар-ра "фамилия"</entry>
+  <entry key="1586">Атрибуты запроса токена</entry>
+  <entry key="1587">Uri возврата</entry>
+  <entry key="1588">Вы можете ввести адрес в формате: Имя1 Фамилия1 &lt;адрес1&gt; или "Имя2 Фамилия2" &lt;адрес2&gt; или 'Имя3 Фамилия3' &lt;адрес3&gt; или адрес</entry>
+  <entry key="1589">Сообщить об отключении</entry>
+  <entry key="1590">Показать</entry>
+  <entry key="1591">Ваш аккаунт создан. Письмо с подтверждение было выслано. Теперь вы можете войти под своим именем.</entry>
+  <entry key="1592">Введенная дата начала раньше даты окончания.</entry>
+  <entry key="1593">Код выхода</entry>
+  <entry key="1594">Сообщения конвертации</entry>
+  <entry key="1595">Файл записи не найден</entry>
+  <entry key="1596">Добавить доску</entry>
+  <entry key="1597">Вы можете ввести адрес в формате: Имя1 Фамилия1 &lt;адрес1&gt; ИЛИ "Имя2 Фамилия2" &lt;адрес2&gt; ИЛИ 'Имя3 Фамилия3' &lt;адрес3&gt;</entry>
+  <entry key="1598">Безопасность</entry>
+  <entry key="1599">Доступ запрещён. У вас нет прав для входа в эту комнату.</entry>
+  <entry key="1600">Пересоздать</entry>
+  <entry key="1601">Подать заявку на доступ к микрофону</entry>
+  <entry key="1602">Запросить разрешение модератора на доступ к микрофону</entry>
+  <entry key="1603">желает сделать своё Аудио общим. Для того, чтобы разрешить или запретить участникам делать Аудио общим, используйте иконки статуса рядом с именами в списке участников.</entry>
+  <entry key="1604">Разрешить этому пользователю публиковать своё Аудио</entry>
+  <entry key="1605">Удалить Аудио этого пользователя</entry>
+  <entry key="1606">Я хочу сделать моё Аудио общим</entry>
+  <entry key="1607">Вам разрешено сделать ваше Аудио общим</entry>
+	<entry key="install.wizard.install.header">Установка</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Для возможности
+				загрузки и импорта изображений на доску<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Установите <strong>ImageMagick</strong> на Ваш сервер, более
+					подробную информацию касающуюся установки можно посмотреть тут <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					Инструкцию по установке Вы можете найти здесь
+					<a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					однако в большинстве систем Линукс Вы можете установить его через Ваш 
+					менеджер пакетов (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Для возможности
+				импорта PDF файлов на доску<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Установите <strong>GhostScript</strong> на Ваш сервер, более подробную
+					информацию Вы можете посмотреть на сайте <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					Инструкции по установке Вы можете
+					найти здесь, однако в большинстве систем Линукс Вы можете установить его через Ваш 
+					менеджер пакетов (apt-get it).
+				</li>
+				<li>Установите <strong>SWFTools</strong> на Ваш сервер, более подробную информацию
+					можно найти на сайте <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					Некоторые дистрибутивы Линукс уже включают его
+					в свои менеджеры пакетов, посмотреть можно здесь <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					для установки рекомендуется <strong>SWFTools</strong> версии 0.9 так как 
+					предыдущая версия содержит баг который приводил к ошибке отображения размеров объекта 
+					на доске
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Для возможности
+				импорта файлов .doc, .docx, .ppt, .pptx, ... и прочих документов на
+				доску<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> запускается и прослушивает
+					порт 8100, подробности можно посмотреть здесь <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Для возможности
+				записи и импорта файлов .avi, .flv, .mov и .mp4 на доску<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Установите <strong>FFMpeg</strong>. Вы должны получить последнюю версию
+					FFMPEG! Для Windows Вы можете скачать программу с этого
+					сайта <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Пользователи Linux 
+					или OSx могут использовать одну из различных
+					Инструкций по установке из Сети. Вы должны установить libmp3lame!
+				</li>
+				<li>Установите <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_blank">http://sox.sourceforge.net/</a>.
+					Вы должны установить последнюю версию SoX! SoX 12.xx не будет
+					работать!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">Если у Вас остались
+			вопросы или Вам требуется поддержка по установке или хостингу:</span></b>
+	
+	<br />
+	<br />
+	<b><span style="font-size: 1.2em">Поддержка сообщества:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Список рассылки</a></span>
+	<br />
+    <br />
+	<br />
+    <b> <span style="font-size: 1.4em">Это компании,
+        которые также оказывают коммерческую поддержку Apache OpenMeetings:</span></b>
+	<br />
+	<br />
+    
+	<span style="font-size: 1.3em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">http://openmeetings.apache.org/commercial-support.html</a></span>
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Рекомендации
+			для настроек продукта<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			По умолчанию {0} использует интегрированную базу данных {1}. В 
+			продакшине Вы должны задуматься об использовании таких баз, как {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">Конфигурация базы данных</entry>
+	<entry key="install.wizard.db.step.dbtype">Выберите тип БД</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Укажите имя сервера БД</entry>
+	<entry key="install.wizard.db.step.port">Укажите порт БД</entry>
+	<entry key="install.wizard.db.step.dbname">Укажите имя базы данных</entry>
+	<entry key="install.wizard.db.step.user">Укажите пользователя БД</entry>
+	<entry key="install.wizard.db.step.pass">Укажите пароль БД</entry>
+	<entry key="install.wizard.db.step.check">Проверка</entry>
+	<entry key="install.wizard.db.step.errorprops">Невозможно взять конфигурацию</entry>
+	<entry key="install.wizard.db.step.nodriver">Невозможно загрузить требуемый драйвер БД, пожалуйста скачайте нужный архив jar, и перегрузите ОМ. Инструкции: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Ошибка проверки БД</entry>
+	<entry key="install.wizard.db.step.error.patch">Неожиданная ошибка при обновлении файла persistence.xml: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Проверка БД прошла успешно</entry>
+	<entry key="install.wizard.params.step1.userdata">Пользовательские данные</entry>
+	<entry key="install.wizard.params.step1.username">Логин</entry>
+	<entry key="install.wizard.params.step1.username.title">Введите логин пользователя</entry>
+	<entry key="install.wizard.params.step1.password">Пароль</entry>
+	<entry key="install.wizard.params.step1.password.title">Введите пароль</entry>
+	<entry key="install.wizard.params.step1.email">Электронная почта</entry>
+	<entry key="install.wizard.params.step1.email.title">Введите адрес электронной почты</entry>
+	<entry key="install.wizard.params.step1.tz">Часовой пояс пользователя</entry>
+	<entry key="install.wizard.params.step1.groupdata">Организация(Домен)</entry>
+	<entry key="install.wizard.params.step1.group">Наименование</entry>
+	<entry key="install.wizard.params.step1.group.title">Введите организацию по умолчанию</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Конфигурация</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Разрешить саморегистрацию (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Посылать сообщения новым пользователям (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">Новые пользователи должны подтвердить свой Email (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">По умолчанию создать комнаты всех типов</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Электронная почта рассылки (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Введите адрес электронной почты с которой будет отправляться информация</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Сервер (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Введите адрес SMTP-Сервера</entry>
+	<entry key="install.wizard.params.step2.smtpPort">Порт SMTP-сервера (по умолчению 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Введите порт SMTP-Сервера, обычно 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Пользователь (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Введите логин для электронной почты</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Пароль пользователя (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Введите пароль для электронной почты</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Включить проверку TLS на почтовом сервере</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Устанавливать адрес электронной
+					почты организатора, как адрес ответа на приглашения  (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Язык по умолчанию</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Шрифт для экспорта по умолчанию [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Конвертеры</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> смотрите также</entry>
+	<entry key="install.wizard.params.step3.installation">Установка</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools масштабирование</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Укажите разрешение (dpi), которое вы будите использовать для конвертации PDF в SWF</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">
+		DPI которое swftools будет использовать для конвертации PDF в SWF. По умолчанию 100 dpi.
+	</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Качество</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Укажите качество встроенного jpeg изображения. 0 плохое (маленькое), 100 высокое (большое). (по умолчанию:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">
+		Качество встроенного jpeg изображения. 0 плохое (маленькое),
+		100 высокое (большое). (по умолчанию:85)
+	</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Путь</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Укажите путь к swftools например C:/swftools (Windows) или или не заполняйте данное поле если путь к swftools задан в системных путях</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		Вы можете проверить, настроен ли запуск swftools на Вашей системе
+		с помошью командной строки или shell или cmd-prompt набрав команду pdf2swf. Если будет показан
+		список опций оставьте это поле пустым, в противном случае вы должны
+		указать путь к pdf2swf на Вашей системе,
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Путь</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Укажите путь к ImageMagick, или не заполняйте данное поле если ImageMagick установлен в путях Вашей системы</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Путь</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Укажите путь к FFMPEG, или не заполняйте данное поле если FFMPEG установлен в путях Вашей системы</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Путь</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Укажите путь к SoX, или не заполняйте данное поле если SoX установлен в путях Вашей системы</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Путь</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">Путь к библиотеке JOD (http://code.google.com/p/jodconverter), сконфигурируйте путь, указываюший на папку библиотеки JOD, которая содержит jodconverter-core-version.jar файл</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Путь для jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">Путь к OpenOffice/LibreOffice (не обязательный) пожалуйста установите этот путь в случае когда jodconverter не в состоянии найти автоматически путь к  установленному OpenOffice/LibreOffice</entry>
+	<entry key="install.wizard.params.step3.officePath.text">
+		Путь к OpenOffice/LibreOffice (не обязательный) пожалуйста установите этот путь
+		в случае когда jodconverter не в состоянии найти
+		путь к установленному OpenOffice/LibreOffice
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Тип шифрования</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Класс шифрования</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Укажите имя класса для шифрования. НЕ ИЗМЕНЯЙТЕ УКАЗАННЫЙ КЛАСС ЕСЛИ ВЫ В ЭТОМ НЕ УВЕРЕНЫ</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		Вы можете использовать заданный по умолчанию тип шифрования, который соответствует
+		функционалу PHP-MD5 или BSD-Style шифрованию, используя:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>.
+		Дополнительную информацию или описание создания собственного класса шифрования смотрите тут: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Пользовательский механизм шифрования</a> Вы можете изменить это
+		значение позже, НО созданные ранее Пользователи и Сессии могут быть
+		не доступны в дальнейшем
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">Конфигурация red5SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Разрешить SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Разрешить интеграцию с red5SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">Префикс дла комнат SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Префикс для номеров телефонов для входа в комнаты</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">Окружение расширений SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Окружение расширений Asterisk</entry>
+
+	<entry key="install.wizard.install.desc">Пожалуйста нажмите кнопку "Закончить" для запуска установки!</entry>
+	<entry key="install.wizard.install.started">Пожалуйста подождите, идёт установка</entry>
+	<entry key="install.wizard.install.failed">Ошибка установки</entry>
+
+	<entry key="install.wizard.congrats.enter">Вход в приложение</entry>
+	<entry key="install.wizard.congrats.port">Если Ваш Red5-сервер запущен на другом порту или на другом домене</entry>
+	<entry key="install.wizard.congrats.config">измените конфигурацию клиента</entry>
+	<entry key="install.wizard.congrats.mail">Список рассылки</entry>
+	<entry key="install.wizard.congrats.commercial">Это компании,
+		которые так же оказывают коммерческую поддержку Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_sk.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
new file mode 100644
index 0000000..87285da
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_sk.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Konferencia</entry>
+  <entry key="2">Stretnutie</entry>
+  <entry key="3">Podujatia</entry>
+  <entry key="4">Nastavenia</entry>
+  <entry key="5">Profil</entry>
+  <entry key="6">Administrácia</entry>
+  <entry key="7">Stop</entry>
+  <entry key="8">Nahrávanie</entry>
+  <entry key="9">Žiadny súbor nie je k dispozícií</entry>
+  <entry key="10">Nahrávanie</entry>
+  <entry key="11">Pripojení používatelia</entry>
+  <entry key="12">Začať konferenciu</entry>
+  <entry key="13">Moje meno</entry>
+  <entry key="14">Videokonferencia</entry>
+  <entry key="15">Nahrať súbor</entry>
+  <entry key="16">Načítať znovu zoznam</entry>
+  <entry key="17">K hlavnému súboru</entry>
+  <entry key="18">Nové hlasovanie</entry>
+  <entry key="19">Nové hlasovanie pre konferenciu</entry>
+  <entry key="20">Otázka</entry>
+  <entry key="21">Typ hlasovania</entry>
+  <entry key="22">Vytvoriť</entry>
+  <entry key="23">Všetci pripojení používatelia prijímajú správu s novým hlasovaním</entry>
+  <entry key="24">Vytvoriť hlasovanie</entry>
+  <entry key="25">Zrušiť</entry>
+  <entry key="26">Áno/Nie</entry>
+  <entry key="27">Čísla 1-10</entry>
+  <entry key="28">Hlasovanie</entry>
+  <entry key="29">Musíte byť moderátor pre vytvorenie otázky</entry>
+  <entry key="30">Váš hlas bol zaznamenaný</entry>
+  <entry key="31">V tomto prieskume ste už hlasovali</entry>
+  <entry key="32">Hlasovať</entry>
+  <entry key="33">Vaša odpoveď</entry>
+  <entry key="34">Áno</entry>
+  <entry key="35">Nie</entry>
+  <entry key="36">chce vedieť</entry>
+  <entry key="37">Výsledky hlasovania</entry>
+  <entry key="38">Otázka</entry>
+  <entry key="39">Výsledky</entry>
+  <entry key="40">Odpovede</entry>
+  <entry key="41">Žiadne hlasovanie nebolo vytvorené</entry>
+  <entry key="42">Hlasovať</entry>
+  <entry key="43">Stretnutie(max 6 miest)</entry>
+  <entry key="44">Konferencia(max 25 miest)</entry>
+  <entry key="45">Typ</entry>
+  <entry key="46">Ostatné miesta</entry>
+  <entry key="47">Už vybrané</entry>
+  <entry key="48">vstup</entry>
+  <entry key="49">Moderátor opustil stretnutie</entry>
+  <entry key="50">Systémové informácie</entry>
+  <entry key="51">Vybrať zariadenie</entry>
+  <entry key="52">Vybrať webkameru</entry>
+  <entry key="53">Vybrať mikrofón</entry>
+  <entry key="54">OK</entry>
+  <entry key="55">Zrušiť</entry>
+  <entry key="56">Musíte sa znovu pripojiť</entry>
+  <entry key="57">Upraviť nastavenia</entry>
+  <entry key="58">Kurz</entry>
+  <entry key="59">Jazyk</entry>
+  <entry key="60">OK</entry>
+  <entry key="61">Zrušiť</entry>
+  <entry key="62">Zmazať tabuľu</entry>
+  <entry key="63">Chcete zmazať tabuľu pred vložením nového obrázka?</entry>
+  <entry key="64">Nepýtať sa ma znova</entry>
+  <entry key="65">Nie</entry>
+  <entry key="66">Zmeniť nastavenia</entry>
+  <entry key="67">Potvrdiť žiadosť na zmazanie tabule</entry>
+  <entry key="68">Informácie o používateľovi</entry>
+  <entry key="69">Zmazať tabuľu</entry>
+  <entry key="70">Zrušiť</entry>
+  <entry key="71">Prerobiť</entry>
+  <entry key="72">Vybrať objekt</entry>
+  <entry key="73">Text</entry>
+  <entry key="74">Farba</entry>
+  <entry key="75">Nakresliť čiaru</entry>
+  <entry key="76">Podčiarknuť</entry>
+  <entry key="77">Obdĺžnik</entry>
+  <entry key="78">Elipsa</entry>
+  <entry key="79">Šípka</entry>
+  <entry key="80">Zmazať vybranú položku</entry>
+  <entry key="81">Požiadať o moderáciu</entry>
+  <entry key="82">Aplikovať</entry>
+  <entry key="83">Zrušiť</entry>
+  <entry key="84">Nemám otázku</entry>
+  <entry key="85">Zatvoriť</entry>
+  <entry key="86">ležatý</entry>
+  <entry key="87">hrubý</entry>
+  <entry key="88">ČAKÁM</entry>
+  <entry key="89">Používateľ požiadal o moderáciu. Môžte mu sprístupniť len prístup k tabuli, alebo plnú moderáciu. Používateľ:</entry>
+  <entry key="90">Prijať</entry>
+  <entry key="91">Odmietnuť</entry>
+  <entry key="92">Zrušiť</entry>
+  <entry key="93">Posielanie žiadosti nasledovným používateľom</entry>
+  <entry key="94">Potvrdené</entry>
+  <entry key="95">Odmietnuté</entry>
+  <entry key="96">Zmeniť moderátora</entry>
+  <entry key="97">Nie ste moderátorom</entry>
+  <entry key="98">Moderátor</entry>
+  <entry key="99">Táto miestnosť je už obsadená</entry>
+  <entry key="100">Elipsa</entry>
+  <entry key="101">Zatvoriť</entry>
+  <entry key="102">chyba vstupných údajov</entry>
+  <entry key="103">Rozlíšujte veľké a malé písmena a minimálne 4 znaky</entry>
+  <entry key="104">Heslo musí mať aspoň 4 znaky</entry>
+  <entry key="105">Používateľské meno už existuje</entry>
+  <entry key="106">Email už je zaregistrovaný</entry>
+  <entry key="107">Systémová chyba, kontaktujte administrátora</entry>
+  <entry key="108">Prihlásenie</entry>
+  <entry key="109">Meno a email</entry>
+  <entry key="110">Heslo</entry>
+  <entry key="111">Jazyk</entry>
+  <entry key="112">Prihlásiť sa</entry>
+  <entry key="113">Zaregistrovať sa</entry>
+  <entry key="114">Používateľské meno</entry>
+  <entry key="115">Heslo</entry>
+  <entry key="116">Znova heslo</entry>
+  <entry key="117">Meno</entry>
+  <entry key="118">Priezvisko</entry>
+  <entry key="119">Email</entry>
+  <entry key="120">Krajina</entry>
+  <entry key="121">Registrovať</entry>
+  <entry key="122">Zrušiť</entry>
+  <entry key="123">Nie ste členom?</entry>
+  <entry key="124">Domov</entry>
+  <entry key="125">Používatelia</entry>
+  <entry key="126">Skupiny</entry>
+  <entry key="127">Spoločnosti</entry>
+  <entry key="128">Miestnosti</entry>
+  <entry key="129">Verejnosť</entry>
+  <entry key="130">Spoločnosť</entry>
+  <entry key="131">Vstup</entry>
+  <entry key="132">Prihlásenie</entry>
+  <entry key="133">Heslo</entry>
+  <entry key="134">Znova heslo</entry>
+  <entry key="135">Titul/Meno</entry>
+  <entry key="136">Priezvisko</entry>
+  <entry key="137">Email</entry>
+  <entry key="138">Narodeniny</entry>
+  <entry key="139">Ulica/Číslo</entry>
+  <entry key="140">PSČ/Mesto</entry>
+  <entry key="141">Krajina</entry>
+  <entry key="142">Adresa</entry>
+  <entry key="143">Údaje používateľa</entry>
+  <entry key="144">Uložiť</entry>
+  <entry key="145">Uložiť</entry>
+  <entry key="146">ID používateľa</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">Meno</entry>
+  <entry key="149">Priezvisko</entry>
+  <entry key="150">Ďalšie</entry>
+  <entry key="151">Predchádzajúce</entry>
+  <entry key="152">Zmazať nahrávku</entry>
+  <entry key="153">Zrušiť</entry>
+  <entry key="154">Zmazať</entry>
+  <entry key="155">Nové nahrávanie</entry>
+  <entry key="156">Obnoviť nahrávanie</entry>
+  <entry key="157">Zmazať nahrávku</entry>
+  <entry key="158">Status</entry>
+  <entry key="159">Zablokované</entry>
+  <entry key="160">Povolené</entry>
+  <entry key="161">Spoločnosti</entry>
+  <entry key="162">Kalendár</entry>
+  <entry key="163">Zatvoriť</entry>
+  <entry key="164">ID spoločnosti</entry>
+  <entry key="165">Meno</entry>
+  <entry key="166">Používateľ</entry>
+  <entry key="167">Moderátor</entry>
+  <entry key="168">Administrátor</entry>
+  <entry key="169">User level</entry>
+  <entry key="170">Spoločnosť</entry>
+  <entry key="171">Meno</entry>
+  <entry key="172">Pridať organizáciu</entry>
+  <entry key="173">Pridať organizáciu</entry>
+  <entry key="174">Zrušiť</entry>
+  <entry key="175">Pridať</entry>
+  <entry key="176">Odstrániť organizáciu</entry>
+  <entry key="177">Používateľ</entry>
+  <entry key="178">Pridať používateľa</entry>
+  <entry key="179">Zmazať používateľa</entry>
+  <entry key="180">Pridať používateľa do spoločnosti</entry>
+  <entry key="181">Hľadať používateľa</entry>
+  <entry key="182">Hľadať</entry>
+  <entry key="183">Používateľ</entry>
+  <entry key="184">Spoločnosť</entry>
+  <entry key="185">Zadať</entry>
+  <entry key="186">Miestnosť</entry>
+  <entry key="187">Miestnosti</entry>
+  <entry key="188">ID</entry>
+  <entry key="189">Meno</entry>
+  <entry key="190">Verejné</entry>
+  <entry key="191">Spoločnosti</entry>
+  <entry key="192">Miestnosti</entry>
+  <entry key="193">Meno</entry>
+  <entry key="194">Typ</entry>
+  <entry key="195">Verejné</entry>
+  <entry key="196">Komentovať</entry>
+  <entry key="197">Uložiť a exportovať</entry>
+  <entry key="198">Nahrať</entry>
+  <entry key="199">Uložiť ako</entry>
+  <entry key="200">Meno súboru</entry>
+  <entry key="201">Meno súboru</entry>
+  <entry key="202">Zrušiť</entry>
+  <entry key="203">Uložiť</entry>
+  <entry key="204">Chyba</entry>
+  <entry key="205">Nahrávanie</entry>
+  <entry key="206">Objekty nahrávané</entry>
+  <entry key="207">Synchronizujem, prosím čakajte</entry>
+  <entry key="208">Nahrávanie súboru</entry>
+  <entry key="209">Synchronizujem, prosím čakajte</entry>
+  <entry key="210">Zmazať tabuľu</entry>
+  <entry key="211">Zmazať tabuľu, všetky objektu budú vymazané</entry>
+  <entry key="212">Potvrdiť pred nahratím súboru</entry>
+  <entry key="213">Zaslať pozvanie</entry>
+  <entry key="214">Zaslať pozvanie</entry>
+  <entry key="215">Predmet</entry>
+  <entry key="216">Príjemca</entry>
+  <entry key="217">Správa</entry>
+  <entry key="218">Poslať</entry>
+  <entry key="219">Zrušiť</entry>
+  <entry key="220">Poslať</entry>
+  <entry key="221">Informácie o používateľovi</entry>
+  <entry key="222">Vaša prezývka pre túto miestnosť</entry>
+  <entry key="223">Prezývka</entry>
+  <entry key="224">Meno</entry>
+  <entry key="225">Priezvisko</entry>
+  <entry key="226">Email</entry>
+  <entry key="227">Jazyk</entry>
+  <entry key="228">Zadať</entry>
+  <entry key="229">Nahrávanie</entry>
+  <entry key="230">Nahrávanie dát, prosím čakajte</entry>
+  <entry key="231">Nesprávne heslo</entry>
+  <entry key="232">Zadajte 2 rovnaké heslá</entry>
+  <entry key="233">Nesprávne heslo</entry>
+  <entry key="234">Zadali ste nesprávny email</entry>
+  <entry key="235">Registrácia kompletná</entry>
+  <entry key="236">Vaše konto bolo vytvorené. Môžte sa prihlásiť.</entry>
+  <entry key="237">Niekto už zdieľa svoju plochu</entry>
+  <entry key="238">Zdieľanie zakázané</entry>
+  <entry key="239">Zdieľať/nahrávať plochu</entry>
+  <entry key="240">Nemožné synchronizovať plochu. Požiadajte moderátora o zníženie kvality.</entry>
+  <entry key="241">Plocha:</entry>
+  <entry key="242">Kreslenie</entry>
+  <entry key="243">Dokument</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Súbory</entry>
+  <entry key="246">Členovia</entry>
+  <entry key="247">Stiahnuť pôvodný dokument</entry>
+  <entry key="248">Stiahnuť PDF dokument</entry>
+  <entry key="249">Nahrať prezentáciu na tabuľu</entry>
+  <entry key="250">Konfigurácia</entry>
+  <entry key="251">Ťahať tento objekt</entry>
+  <entry key="252">Zmeniť veľkosť objektu</entry>
+  <entry key="253">%</entry>
+  <entry key="254"></entry>
+  <entry key="255">Prvá strana</entry>
+  <entry key="256">Predchádzajúca strana</entry>
+  <entry key="257">Ďalšia strana</entry>
+  <entry key="258">Posledná strana</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">Pán</entry>
+  <entry key="262">Pani</entry>
+  <entry key="263">Nastavenie</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Kľúč</entry>
+  <entry key="266">Nastavenie</entry>
+  <entry key="267">Kľúč</entry>
+  <entry key="268">Posledná zmena</entry>
+  <entry key="269">Obnovené</entry>
+  <entry key="270">Komentovať</entry>
+  <entry key="271">Hodnota</entry>
+  <entry key="272"></entry>
+  <entry key="273">Použivatelia</entry>
+  <entry key="274">Zmazať používateľa zo spoločnosti</entry>
+  <entry key="275">D</entry>
+  <entry key="276">Tento používateľ je už členom tejto spoločnosti</entry>
+  <entry key="277">Správy</entry>
+  <entry key="278">Rýchle odkazy</entry>
+  <entry key="279">Choď do miestnosti</entry>
+  <entry key="280">Choď do miestnosti</entry>
+  <entry key="281">Pomoc a podpora</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Nahlásiť chybu</entry>
+  <entry key="285">viac</entry>
+  <entry key="286">Stránka projektu (http://openmeetings.apache.org)</entry>
+  <entry key="287">Zoznam používateľov (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Zapamätať prihlásenie</entry>
+  <entry key="289">Obsah</entry>
+  <entry key="290">My home page</entry>
+  <entry key="291">My scheduled meetings</entry>
+  <entry key="292">My scheduled events</entry>
+  <entry key="293">Public meetings</entry>
+  <entry key="294">Private meetings</entry>
+  <entry key="295">Public events</entry>
+  <entry key="296">Private events</entry>
+  <entry key="297">Public content</entry>
+  <entry key="298">Private content</entry>
+  <entry key="299">Personal content</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderácia</entry>
+  <entry key="302">Mám otázku</entry>
+  <entry key="303">Hlasovania</entry>
+  <entry key="304">Vybrať súbor</entry>
+  <entry key="305">Nastavenia</entry>
+  <entry key="306">Nastavenie mikrofónu a kamery</entry>
+  <entry key="307">Nastavenie tabuli</entry>
+  <entry key="308">Východ</entry>
+  <entry key="309">Späť k miestnostiam</entry>
+  <entry key="310">Odhlásiť</entry>
+  <entry key="311">Zabudli ste heslo?</entry>
+  <entry key="312">Resetovať heslo</entry>
+  <entry key="313">Using email address</entry>
+  <entry key="314">Using login</entry>
+  <entry key="315">Váš email</entry>
+  <entry key="316">Vaše prihlásenie</entry>
+  <entry key="317">Poslať email s reštartovacím odkazom</entry>
+  <entry key="318">Žiadny takýto email neexistuje. Uistite sa, že ste zadali rovnaký email ako pri registrácií.</entry>
+  <entry key="319">Prosím zadajte email alebo používateľské meno</entry>
+  <entry key="320">There is no user connected to this username</entry>
+  <entry key="321">Email bol zaslaný</entry>
+  <entry key="322">Chyba</entry>
+  <entry key="323">Správa</entry>
+  <entry key="324">Používateľ sa nenašiel</entry>
+  <entry key="325">Resetovať vaše heslo</entry>
+  <entry key="326">Prihlásenie</entry>
+  <entry key="327">Zmeniť heslo</entry>
+  <entry key="328">Nové heslo</entry>
+  <entry key="329">Znova zadajte heslo</entry>
+  <entry key="330">Vami zadané heslo nie je identické</entry>
+  <entry key="331">Rozlišujte veľké/malé písmená a viac ako 4 znaky</entry>
+  <entry key="332">Heslo nastavené. Môžte sa prihlásiť.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Chyba. Kontaktujte administrátora.</entry>
+  <entry key="335">Používateľské meno sa nenašlo</entry>
+  <entry key="336">Nesprávne heslo</entry>
+  <entry key="337">Úspešne odhlásený</entry>
+  <entry key="338">Registrácia nemožná</entry>
+  <entry key="339">Chybný email</entry>
+  <entry key="340">Duplikátny názov súboru, prosí, zadajte iný</entry>
+  <entry key="341">Názov súboru príliš krátky</entry>
+  <entry key="342">Nemožno uložiť adresu</entry>
+  <entry key="343">Používateľ pridaný, ale je nutné priradiť ho k spoločnosti.</entry>
+  <entry key="344">Nový záznam</entry>
+  <entry key="345">No field found for the ID</entry>
+  <entry key="346">No label found</entry>
+  <entry key="347">Autorízácia administrátorom sa vyžaduje</entry>
+  <entry key="348">Jazykový editor</entry>
+  <entry key="349">Jazyk</entry>
+  <entry key="350">Label ID</entry>
+  <entry key="351">Label name</entry>
+  <entry key="352">Value</entry>
+  <entry key="353">Field values</entry>
+  <entry key="354">Label name</entry>
+  <entry key="355">Label value</entry>
+  <entry key="356">Label ID</entry>
+  <entry key="357">You have deleted the label</entry>
+  <entry key="358">Invalid label ID</entry>
+  <entry key="359">Nemôžte zmazať toto pole</entry>
+  <entry key="360">Export</entry>
+  <entry key="361">Musíte sa odhlásiť pre uloženie zmien.</entry>
+  <entry key="362">Add new language</entry>
+  <entry key="363">Delete language</entry>
+  <entry key="364">Add new language</entry>
+  <entry key="365">Name</entry>
+  <entry key="366">Add language</entry>
+  <entry key="367">Backup</entry>
+  <entry key="368">prvý</entry>
+  <entry key="369">predchádzajúci</entry>
+  <entry key="370">ďalší</entry>
+  <entry key="371">posledný</entry>
+  <entry key="372">používateľ hovorí (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">vypnúť/zapnúť zvuk</entry>
+  <entry key="374">Systém</entry>
+  <entry key="375">Vaše nastavenie</entry>
+  <entry key="376">Zdravím</entry>
+  <entry key="377">Upraviť profil</entry>
+  <entry key="378">Nová správa</entry>
+  <entry key="379">Nahrať nový obrázok</entry>
+  <entry key="380">Exportovať používateľove údaje</entry>
+  <entry key="381">All organisations must already exist</entry>
+  <entry key="382">Začať exportovať</entry>
+  <entry key="383">By organisation</entry>
+  <entry key="384">Start export</entry>
+  <entry key="385">Import user data</entry>
+  <entry key="386">Choose users.xml</entry>
+  <entry key="387">Importovať</entry>
+  <entry key="388">Exportovať do XML</entry>
+  <entry key="389">Vybrať jazyk dokumentu pre import</entry>
+  <entry key="390">Importovať</entry>
+  <entry key="391">Uložiť ako</entry>
+  <entry key="392">Meno</entry>
+  <entry key="393">Komentár</entry>
+  <entry key="394">Uložiť</entry>
+  <entry key="395">Nahrávky</entry>
+  <entry key="396">Prehliadač nahrávok</entry>
+  <entry key="397">Nahrávky verejných a súkromných miestností</entry>
+  <entry key="398">Používatelia</entry>
+  <entry key="399">Pripojený</entry>
+  <entry key="400"></entry>
+  <entry key="401">Používatelia v tejto miestnosti</entry>
+  <entry key="402">Obnoviť</entry>
+  <entry key="403">Miesta sú obsadené</entry>
+  <entry key="404">Kliknite na miestnosť pre informácie o miestnosti</entry>
+  <entry key="405">Chat s používateľmi v tejto miestnosti</entry>
+  <entry key="406">Miestnosť</entry>
+  <entry key="407">Používatelia v tejto miestnosti</entry>
+  <entry key="408">od</entry>
+  <entry key="409">Prehrať nahrávku</entry>
+  <entry key="410">Dĺžka</entry>
+  <entry key="411">Dátum</entry>
+  <entry key="412">Režim nahrávania</entry>
+  <entry key="413">Prehrať túto nahrávku</entry>
+  <entry key="414">Prehrať/Pauza</entry>
+  <entry key="415">Nahrať túto miestnosť</entry>
+  <entry key="416">Zastaviť nahrávanie</entry>
+  <entry key="417">Nahrávanie</entry>
+  <entry key="418">Niekto už nahráva túto miestnosť</entry>
+  <entry key="419">Nahrávanie. Používateľ:</entry>
+  <entry key="420">Zrušiť</entry>
+  <entry key="421">Nahrávanie bude zrušené a neuloží sa</entry>
+  <entry key="422">výsledok</entry>
+  <entry key="423">Zavrieť toto okno a zhrnúť nahrávanie</entry>
+  <entry key="424">Zmeniť farbu</entry>
+  <entry key="425">Vybrať farbu</entry>
+  <entry key="426">Znemožniť/umožniť farbu</entry>
+  <entry key="427">Zmeniť farbu výplne</entry>
+  <entry key="428">Znemožniť/umožniť farbu výplne</entry>
+  <entry key="429">Zmeniť širku</entry>
+  <entry key="430">Zatvoriť</entry>
+  <entry key="431">Zmeniť veľkosť písma</entry>
+  <entry key="432">Zmazať nahrávku</entry>
+  <entry key="433">Hosť</entry>
+  <entry key="434">:</entry>
+  <entry key="435">Meno</entry>
+  <entry key="436">Miestnosť</entry>
+  <entry key="437">Dátum</entry>
+  <entry key="438">Zrušiť</entry>
+  <entry key="439">Začať</entry>
+  <entry key="440">Meno</entry>
+  <entry key="441">Dátum</entry>
+  <entry key="442">Delete server chat log</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">Poslať správu</entry>
+  <entry key="445">Emotikony</entry>
+  <entry key="446">Emotikony</entry>
+  <entry key="447">Vybrať zariadenie</entry>
+  <entry key="448">Audio a video</entry>
+  <entry key="449">Iba audio</entry>
+  <entry key="450">Video iba</entry>
+  <entry key="451">Žiadne audio/video (obrázok)</entry>
+  <entry key="452">Žiadne audio/video z vášho počítača nie je publikované</entry>
+  <entry key="453">Po</entry>
+  <entry key="454">Ut</entry>
+  <entry key="455">Str</entry>
+  <entry key="456">Štv</entry>
+  <entry key="457">Pia</entry>
+  <entry key="458">So</entry>
+  <entry key="459">Ne</entry>
+  <entry key="460">Pondelok</entry>
+  <entry key="461">Utorok</entry>
+  <entry key="462">Streda</entry>
+  <entry key="463">Štvrtok</entry>
+  <entry key="464">Piatok</entry>
+  <entry key="465">Sobota</entry>
+  <entry key="466">Nedela</entry>
+  <entry key="467">KT</entry>
+  <entry key="468">Kalendár týždeň</entry>
+  <entry key="469">Január</entry>
+  <entry key="470">Február</entry>
+  <entry key="471">Marec</entry>
+  <entry key="472">Apríl</entry>
+  <entry key="473">Máj</entry>
+  <entry key="474">Jún</entry>
+  <entry key="475">Júl</entry>
+  <entry key="476">August</entry>
+  <entry key="477">September</entry>
+  <entry key="478">Október</entry>
+  <entry key="479">November</entry>
+  <entry key="480">December</entry>
+  <entry key="481">Kalendár</entry>
+  <entry key="482">Participujúci</entry>
+  <entry key="483">Zobraziť nastavenie rozloženia</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">šírka | výška</entry>
+  <entry key="486">Video kontajner</entry>
+  <entry key="487">Moderátorský kontajner</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Tabuľový kontajner</entry>
+  <entry key="490">Povolený</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">šírka | výška</entry>
+  <entry key="493">Kontajner dokumentov, chatu a participantov</entry>
+  <entry key="494">Povolený</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">šírka | výška</entry>
+  <entry key="497">Moderátor opustil miestnosť. V tomto momente nikto neprezentuje.</entry>
+  <entry key="498">V tejto miestnosti nie je moderátor, ale sú tu participujúci. Musíte požiadať o moderáciu alebo počkať.</entry>
+  <entry key="499">Feedback {0}</entry>
+  <entry key="500">{0} - Pozvanie</entry>
+  <entry key="501">Správa od:</entry>
+  <entry key="502">Správa:</entry>
+  <entry key="503">Pre participáciu v tejto miestnosti kliknite na tento link:</entry>
+  <entry key="504">Kliknite sem pre vstup do miestnosti:</entry>
+  <entry key="505">Ak máte problém s odkazom, skopírujte ho do vášho prehliadača:</entry>
+  <entry key="506">{0} prihláseniep</entry>
+  <entry key="507">Your userdata</entry>
+  <entry key="508">prihlásenie</entry>
+  <entry key="509">Heslo</entry>
+  <entry key="510">Email</entry>
+  <entry key="511">{0}-Team</entry>
+  <entry key="512">{0} prihlásenie</entry>
+  <entry key="513">{0} - Reset Password</entry>
+  <entry key="514">Kliknite na tento link pre zadanie nového hesla</entry>
+  <entry key="515">Kliknite sem pre zadanie nového hesla</entry>
+  <entry key="516">Ak máte problémy s týmto odkazom, skopírujte si ho priamo do vyhľadávača:</entry>
+  <entry key="517">Reset hesla</entry>
+  <entry key="518">Prosím zadajte správny dátum vo formáte 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">Prosím zadajte správny email vo forme name@mail.com</entry>
+  <entry key="520">Prosím zadajte číslo, napríklad 1.00</entry>
+  <entry key="521">Prosím zadajte celé číslo, napríklad 100</entry>
+  <entry key="522">Prosím zadajte platné telefónne číslo, napríklad +49 0123 123123</entry>
+  <entry key="523">Prosím zadajte správny čas, napríklad 12:23 (hh:mm)</entry>
+  <entry key="524">Chránené heslom</entry>
+  <entry key="525">Heslo</entry>
+  <entry key="526">Validačná doba</entry>
+  <entry key="527">Nekonečné</entry>
+  <entry key="528">Obdobie</entry>
+  <entry key="529">Jednorázové</entry>
+  <entry key="530">Platné od</entry>
+  <entry key="531">Platné do</entry>
+  <entry key="532">Pozvanie do {0}</entry>
+  <entry key="533">Žiadna pozvánka pre tento kód neexistuje</entry>
+  <entry key="534">Toto pozvanie už bolo použité</entry>
+  <entry key="535">Pozývací kód je neplatný</entry>
+  <entry key="536">Heslo</entry>
+  <entry key="537">Skontrolovať heslo</entry>
+  <entry key="538">Neplatné heslo</entry>
+  <entry key="539">Audio/video</entry>
+  <entry key="540">Synchronizovať audio/video</entry>
+  <entry key="541">Prihlásenie je správne, ale stretnutie nie je aktívne</entry>
+  <entry key="542">ID miestnosti nie je prihlásené alebo nemá administrátorské práva. SOAP brána potrebuje používateľa s administrátorskými právami na vloženie nového používateľa.</entry>
+  <entry key="543">This Session has no remoteuser-data connected. You did not call the SOAP gateway before accessing the application or you are using a wrong session ID</entry>
+  <entry key="544">The recorder is currently beta</entry>
+  <entry key="545">x</entry>
+  <entry key="546">os x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">os y</entry>
+  <entry key="549">š</entry>
+  <entry key="550">šírka</entry>
+  <entry key="551">v</entry>
+  <entry key="552">výška</entry>
+  <entry key="553">Zmeniť priehľadnosť</entry>
+  <entry key="554">Otvoriť prehliadač</entry>
+  <entry key="555">Zatvoriť prehliadač</entry>
+  <entry key="556">Pripojenie na server zlyhalo</entry>
+  <entry key="557">Ukazovátko</entry>
+  <entry key="558">Synchronizovanie</entry>
+  <entry key="559">Synchronizovanie, prosím čakajte</entry>
+  <entry key="560">&lt;u&gt;Stiahnúť ako SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Stiahnúť ako PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Stiahnúť ako JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Stiahnúť ako PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Stiahnúť ako TIF&lt;/u&gt;</entry>
+  <entry key="565">Pripomienka</entry>
+  <entry key="566">Kategória</entry>
+  <entry key="567">Opakovanie</entry>
+  <entry key="568">žiadne</entry>
+  <entry key="569">Umiestnenie</entry>
+  <entry key="570">Začiatok</entry>
+  <entry key="571">Koniec</entry>
+  <entry key="572">Názov</entry>
+  <entry key="573">Komentár</entry>
+  <entry key="574">Pozvať ľudí</entry>
+  <entry key="575">Denne</entry>
+  <entry key="576">Mesačne</entry>
+  <entry key="577">Ročne</entry>
+  <entry key="578">Stretnutie končí až v čase neskoršom ako začalo</entry>
+  <entry key="579">Prosím vložte názov</entry>
+  <entry key="580">Zprava doľava</entry>
+  <entry key="581">Aktivovať ak píšete sprava doľava</entry>
+  <entry key="582">Tabuľa</entry>
+  <entry key="583">Pozerať nahrávky stretnutí</entry>
+  <entry key="584">Stretnutie - make a conference with between 4 and 16 users&lt;br/&gt;and everybody will have audio and video access</entry>
+  <entry key="585">Event - make a conference with up to 200 participents&lt;br/&gt;but only the moderator will have audio and video access</entry>
+  <entry key="586">Create users, rooms, organisations&lt;br/&gt; and change configuration</entry>
+  <entry key="587">Používatelia v tejto miestnosti</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Prihlásenie</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Nahrávam dokument. Počkajte pokiaľ všetci klienti nebudú zosynchronizovaní.</entry>
+  <entry key="592">Nahratie kompletné, konvertujem dokument</entry>
+  <entry key="593">Začať nahrávanie</entry>
+  <entry key="594">Nahrať a importovať dialóg. Prosím vyberte súbor.</entry>
+  <entry key="595">Zrušiť</entry>
+  <entry key="596">Vybrať súbor</entry>
+  <entry key="597">Pripojenia</entry>
+  <entry key="598">Hodnota</entry>
+  <entry key="599">Stream ID</entry>
+  <entry key="600">Prihlásenie</entry>
+  <entry key="601">Pripojený od</entry>
+  <entry key="602">Miestnosť / Oblasť</entry>
+  <entry key="603">Vyhodiť používateľa</entry>
+  <entry key="604">Vyhodiť používateľa</entry>
+  <entry key="605">Naozaj chcete vyhodiť tohto klienta z miestnosti?</entry>
+  <entry key="606">Vaše stretnutie bolo zavreté administrátorom alebo moderátorom.</entry>
+  <entry key="607">Telefón</entry>
+  <entry key="608">Používateľ je moderátorom tejto miestnosti</entry>
+  <entry key="609">Používateľ má právo kresliť na tabuľu</entry>
+  <entry key="610">(Re) štartovať audio/video alebo zmeniť nastavenia zaradenia</entry>
+  <entry key="611">Povoliť tomuto používateľovi kresliť na tabuľu</entry>
+  <entry key="612">Odobrať právo kresliť na tabuľu</entry>
+  <entry key="613">Používatelia</entry>
+  <entry key="614">Súbory</entry>
+  <entry key="615">Tabuľa</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Váš účet je priradený k viacerým spoločnostiam.Prosím vyberte si jednu pre túto miestnosť.</entry>
+  <entry key="618">Miestnosť je už obsadená</entry>
+  <entry key="619">Typ miestnosti</entry>
+  <entry key="620">Miestnosť</entry>
+  <entry key="621">Čas</entry>
+  <entry key="622">Clickjobfair - Pripomienka</entry>
+  <entry key="623">Správa od používateľa:</entry>
+  <entry key="624">Správa:</entry>
+  <entry key="625">Kliknite na tento odkaz pre účasť na konferencií:</entry>
+  <entry key="626">Kliknite tu pre vstup do miestnosti</entry>
+  <entry key="627">Ak máte problém s odkazom, prosím skopírujte ho priamo do prehliadača:</entry>
+  <entry key="628">Hladať vnútorne</entry>
+  <entry key="629">Pridať externý</entry>
+  <entry key="630">Meno</entry>
+  <entry key="631">Priezvisko</entry>
+  <entry key="632">Email</entry>
+  <entry key="633">Potvrdiť odhlásenie</entry>
+  <entry key="634">Chcete naozaj odísť?</entry>
+  <entry key="635">Akcia</entry>
+  <entry key="636">Demo miestnosť</entry>
+  <entry key="637">Demo čas</entry>
+  <entry key="638">Časovač stretnutia</entry>
+  <entry key="639">This room is a demo room. You will be automatically logged off in:</entry>
+  <entry key="640">Moderované</entry>
+  <entry key="641">Prosím počkajte na vstup moderátora do miestnosti</entry>
+  <entry key="642">OK</entry>
+  <entry key="643">Prichádzajúce zdieľanie plochy</entry>
+  <entry key="644">Prichádza nové zdieľanie plochy od tohto používateľa:</entry>
+  <entry key="645">Začať zdieľanie</entry>
+  <entry key="646">Pridať nové stretnutie</entry>
+  <entry key="647">Miestnosť</entry>
+  <entry key="648">Miestnosť</entry>
+  <entry key="649">Moderácia</entry>
+  <entry key="650">Moderovať používateľov</entry>
+  <entry key="651">Moderovať miestnosti</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Chcete aby sa tento používateľ stal moderátorom spoločnosti?</entry>
+  <entry key="654">Prosím zvoľte spoločnosť pred pridaním používateľa</entry>
+  <entry key="655">Spoločnosť - moderátor</entry>
+  <entry key="656">Chcete naozaj vymazať tohto používateľa zo spoločnosti?</entry>
+  <entry key="657">Tento používateľ je moderátor</entry>
+  <entry key="658">Tento používateľ nie je moderátor</entry>
+  <entry key="659">Chcete aby tento používateľ bol moderátorom tejto spoločnosti?</entry>
+  <entry key="660">Pridať alebo zmazať používateľov/miestnosti zo spoločnosti</entry>
+  <entry key="661">Chcete naozaj zmazať túto nahrávku?</entry>
+  <entry key="662">Chcete naozaj zmazať tohto používateľa z vašej spoločnosti?</entry>
+  <entry key="663">Nemôžte zmazať vlastného používateľa</entry>
+  <entry key="664">Táto metóda potrebuje administrátorský prístup</entry>
+  <entry key="665">Nie je žiadne stretnutie spojené s týmto ID</entry>
+  <entry key="666">Toto je administrátorsky/moderátorsky účet. Môžte zmeniť tento účet cez administračný panel.</entry>
+  <entry key="667">Pre dokončenie registrácie kliknite na nasledujúci odkaz</entry>
+  <entry key="668">Kliknite pre overenie vášho emailu</entry>
+  <entry key="669">Žiadny používateľ sa nenašiel pre tento hash</entry>
+  <entry key="670">Tento používateľ je už aktivovaný</entry>
+  <entry key="671">Úspešne ste aktivovali svoj účet</entry>
+  <entry key="672">Prihlásiť sa teraz</entry>
+  <entry key="673">Your account is not activated. Please use the link in the email you received during registration.</entry>
+  <entry key="674">You have successfully signed up. An email with a verification code will be sent to your mailbox.</entry>
+  <entry key="675">Odobrať moderovanie tomuto používateľovi</entry>
+  <entry key="676">Udeliť právo moderovať tomuto používateľovi</entry>
+  <entry key="677">Používateľ</entry>
+  <entry key="678">Prístup k tabuli</entry>
+  <entry key="679">Moderátor</entry>
+  <entry key="680">Prosím vyberte používateľa zo zoznamu pre udelenie práva moderovať/ mať prístup k tabuli alebo videa</entry>
+  <entry key="681">Tento používateľ už je moderátorom</entry>
+  <entry key="682">Nemôžte seba zbaviť práva moderovať</entry>
+  <entry key="683">Povoliť tomuto používateľovi publikovať audio/video</entry>
+  <entry key="684">Odobrať audio/video používateľovi</entry>
+  <entry key="685">Mám otázku</entry>
+  <entry key="686">Chcem kresliť na tabuľu</entry>
+  <entry key="687">Chcem zdieľať svoje audio/video</entry>
+  <entry key="688">Ste moderátorom tejto miestnoti</entry>
+  <entry key="689">Máte právo kresliť na tabuľu</entry>
+  <entry key="690">Máte právo zdieľať svoje audio/video</entry>
+  <entry key="691">Správa moderátorovi</entry>
+  <entry key="692">Používateľ</entry>
+  <entry key="693">sa chce spýtať otázku</entry>
+  <entry key="694">chce písať na tabuľu</entry>
+  <entry key="695">chce zdieľať svoje audio/video</entry>
+  <entry key="696">Musíte počkať pokiaľ moderátor vstúpi do miestnosti</entry>
+  <entry key="697">Zrušiť</entry>
+  <entry key="698">Uložiť</entry>
+  <entry key="699">Deň</entry>
+  <entry key="700">Mesiac</entry>
+  <entry key="701">Rok</entry>
+  <entry key="702">Nahrať súbor</entry>
+  <entry key="703">Pridať súbor</entry>
+  <entry key="704">Obnoviť</entry>
+  <entry key="705">Kôš</entry>
+  <entry key="706">Moje súbory</entry>
+  <entry key="707">Súbory v miestnosti(verejné)</entry>
+  <entry key="708">Pridať súbor</entry>
+  <entry key="709">Pridať zložku</entry>
+  <entry key="710">Zmazať zložku</entry>
+  <entry key="711">Zmeniť meno</entry>
+  <entry key="712">Nový priečinok</entry>
+  <entry key="713">Naozaj chcete zmazať túto položku?</entry>
+  <entry key="714">Hľadať</entry>
+  <entry key="715">Hľadať</entry>
+  <entry key="716">Otvoriť dokument</entry>
+  <entry key="717">Zobraziť všetky súbory</entry>
+  <entry key="718">Zatvoriť dokument</entry>
+  <entry key="719">Zmazať súbor</entry>
+  <entry key="720">Nemáte právo používať tabuľu</entry>
+  <entry key="721">Vlastnosti dokumentu</entry>
+  <entry key="722">Začať Java</entry>
+  <entry key="723">Začať Flash</entry>
+  <entry key="724">Používateľ chce zdieľať svoju plochu. Zobraziť?</entry>
+  <entry key="725">Práve zdieľate svoju plochu</entry>
+  <entry key="726">Zdieľanie</entry>
+  <entry key="727">Už zdieľate svoju plochu</entry>
+  <entry key="728">Prehliadač plochy</entry>
+  <entry key="729">Zastaviť zdieľanie</entry>
+  <entry key="730">Zdieľač plochy</entry>
+  <entry key="731">Kliknite Štart pre zdieľanie plochy</entry>
+  <entry key="732">Začať zdieľanie</entry>
+  <entry key="733">Pauza</entry>
+  <entry key="734">Vyberte plochu zdieľania:</entry>
+  <entry key="735">Zmeniť šírku</entry>
+  <entry key="736">Zdieľač ukončil stretnutie</entry>
+  <entry key="737">Zmeniť výšku</entry>
+  <entry key="738">X</entry>
+  <entry key="739">Y</entry>
+  <entry key="740">Šírka:</entry>
+  <entry key="741">Výška:</entry>
+  <entry key="742">Spojenie zavreté serverom</entry>
+  <entry key="743">Zrušiť</entry>
+  <entry key="744">Začať Java</entry>
+  <entry key="745">Ak zavriete toto stretnutie, nebudete môcť reštartovať prehliadač pre toto stretnutie</entry>
+  <entry key="746">Potvrdiť zavretie okna</entry>
+  <entry key="747">Zdieľať plochu</entry>
+  <entry key="748">nahrať stretnutie</entry>
+  <entry key="749">Spolu prehliadanie</entry>
+  <entry key="750">Prosím použite Internet Explorer pre Windows</entry>
+  <entry key="751">Predchádzajúce</entry>
+  <entry key="752">Ďalšie</entry>
+  <entry key="753">Obnoviť</entry>
+  <entry key="754">Domov</entry>
+  <entry key="755">Načítať</entry>
+  <entry key="756">Pridať túto stránku ako domovskú v mojom profile</entry>
+  <entry key="757">Testovať nastavenie</entry>
+  <entry key="758">Otestovať audio alebo video nastavenie pred vstupom do miestnosti môžte nahratím stretnutia na pár sekúnd. Môžte si potom prehrať nahrávku a skontrolovať svoje audio/video.</entry>
+  <entry key="759">Tento test nezobrazovať viac</entry>
+  <entry key="760">Zrušiť</entry>
+  <entry key="761">Začať stretnutie</entry>
+  <entry key="762">Nepýtať sa znova</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">Môžte prejsť bez testovania ak neplánujete zverejniť svoje audio/video.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-meter</entry>
+  <entry key="768">Stlačte štart</entry>
+  <entry key="769">Začať konferenciu</entry>
+  <entry key="770">Začať konferenciu</entry>
+  <entry key="771">Vybrať miestnosť</entry>
+  <entry key="772">Skontrolovať nastavenie</entry>
+  <entry key="773">Začať konferenciu</entry>
+  <entry key="774">Ako konferencovať:</entry>
+  <entry key="775">Začať nahrávanie</entry>
+  <entry key="776">Nezobrazovať udio/video test pred vstupom do miestnosti</entry>
+  <entry key="777">Verejné miestnosti</entry>
+  <entry key="778">Verejné miestnosti sú prístupné pre všetkých používateľov</entry>
+  <entry key="779">Súkromné miestnosti</entry>
+  <entry key="780">Súkromné miestnosti sú prístupné len pr používateľov určitej spoločnosti.</entry>
+  <entry key="781">Moje miestnosti</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">Musíte byť moderátorom pre vykonanie tohto úkonu</entry>
+  <entry key="784">Požiadať o moderáciu</entry>
+  <entry key="785">Požiadať o prístup k tabuli</entry>
+  <entry key="786">Požiadať o audio/video prístup</entry>
+  <entry key="787">Hash tejto miestnosti už bol použitý</entry>
+  <entry key="788">ŠTART</entry>
+  <entry key="789">VÝCHOD</entry>
+  <entry key="790">Chcete naozaj odísť?</entry>
+  <entry key="791">Východ z konferencie</entry>
+  <entry key="792">Miestnosti</entry>
+  <entry key="793">Vybrať miestnosť pre stretnutie</entry>
+  <entry key="794">There is an unsaved event in the Calendar. Please save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting</entry>
+  <entry key="796">Do you really want to delete this event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">Clickjobfair, your web conferencing platform. You can either follow the 1-2-3 steps to enter a conference room directly or you choose the Calendar to set up a meeting.</entry>
+  <entry key="805">Plan a meeting</entry>
+  <entry key="806">To setup a conference you can add a new event in the calendar</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no user selected</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event details</entry>
+  <entry key="816">Default moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">Email</entry>
+  <entry key="821">Add new default moderator</entry>
+  <entry key="822">Is super moderator</entry>
+  <entry key="823">If the room is moderated, any users with a moderator or administrator level access are automatically set to moderator when they enter the room</entry>
+  <entry key="824">A super moderator is always a moderator when they enter a room</entry>
+  <entry key="825">Make user a super moderator</entry>
+  <entry key="826">Remove super moderator from user</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an organisation to the room only users of that organisation have access to it</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organisation</entry>
+  <entry key="832">Ste si istý?</entry>
+  <entry key="833">Naozaj chcete zmazať túto položku?</entry>
+  <entry key="834">Nie je žiadny používateľ označený</entry>
+  <entry key="835">Pridať nového moderátora</entry>
+  <entry key="836">Do you want to add the super moderation flag for this user?</entry>
+  <entry key="837">Do you want to remove the super moderation flag for this user? You need to save the room object to save these settings.</entry>
+  <entry key="838">This user is a super moderator. You cannot remove the moderation flag.</entry>
+  <entry key="839">Chcete naozaj vymazať?</entry>
+  <entry key="840">Vymazať?</entry>
+  <entry key="841">Pani</entry>
+  <entry key="842">Dr</entry>
+  <entry key="843">Vlastnosti</entry>
+  <entry key="844">Zobraziť pozíciu kurzora</entry>
+  <entry key="845">Zdieľať audio cez SIP applet</entry>
+  <entry key="846">Zdieľať audio cez SIP a video cez Flash</entry>
+  <entry key="847">Napasovanie</entry>
+  <entry key="848">Vidieť plochu</entry>
+  <entry key="849">Používateľ</entry>
+  <entry key="850">chce zdieľať svoju plochu. Zobraziť?</entry>
+  <entry key="851">Zavrieť</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">Stretnutie bolo zavreté zdieľajúcim používateľom</entry>
+  <entry key="854">Pauza</entry>
+  <entry key="855">Nové zdieľanie plochy</entry>
+  <entry key="856">Minimalizovať</entry>
+  <entry key="857">Maximalizovať</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Nahrávacia časová os</entry>
+  <entry key="860">Moje nahrávky</entry>
+  <entry key="861">Verejné nahrávky</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Meno</entry>
+  <entry key="864">Dĺžka</entry>
+  <entry key="865">Dátum</entry>
+  <entry key="866"></entry>
+  <entry key="867">Stiahnuť</entry>
+  <entry key="868">Hlavné - video</entry>
+  <entry key="869">Nahrávanie</entry>
+  <entry key="870">Môžte zdieľať a nahrávať svoju plochu súčasne.</entry>
+  <entry key="871">Začať nahrávanie</entry>
+  <entry key="872">Ukončiť nahrávanie</entry>
+  <entry key="873">Stiahnuť FLV-súbor</entry>
+  <entry key="874">Miestnosť</entry>
+  <entry key="875">Prehrať</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">Používateľ má zapnutý mikrofón</entry>
+  <entry key="878">Ukončiť zdieľanie</entry>
+  <entry key="879">Povoliť používateľovi otázky</entry>
+  <entry key="880">Vypnúť - aby vás používatelia nevyrušovali</entry>
+  <entry key="881">Práva</entry>
+  <entry key="882">Stiahnuť ako AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Základná videoplocha</entry>
+  <entry key="886">Audio iba</entry>
+  <entry key="887">Nastala chyba počas nahrávania</entry>
+  <entry key="888">Nahrávka nie je ešte hotová na prezeranie</entry>
+  <entry key="889">Zápis:</entry>
+  <entry key="890">Správa</entry>
+  <entry key="891">OK</entry>
+  <entry key="892">SIP applet nie je pripravený</entry>
+  <entry key="893">SIP nastavenia</entry>
+  <entry key="894">SIP nastavenia pre každého používateľa</entry>
+  <entry key="895">SIP používateľ</entry>
+  <entry key="896">SIP heslo</entry>
+  <entry key="897">SIP auth ID</entry>
+  <entry key="898">Prihlásenie do SIP brány zlyhalo</entry>
+  <entry key="899">Prihlásenie do SIP brány zlyhalo. Kontaktujte administrátora</entry>
+  <entry key="900">Pripájanie na SIP bránu...</entry>
+  <entry key="901">Pripájanie na SIP bránu...</entry>
+  <entry key="902">Show log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP applet správa</entry>
+  <entry key="905">SIP applet nie je pripravený. Potvrďte applet a kliknite OK</entry>
+  <entry key="906">Získať moderáciu</entry>
+  <entry key="907">Uložiť zmeny</entry>
+  <entry key="908">The appointment has been changed. Do you want to save these changes?</entry>
+  <entry key="909">Pre prístup k ostatným nahrávkam sa prihláste do {0} applikácie</entry>
+  <entry key="910">Vybrať používateľa pre toto video</entry>
+  <entry key="911">Používatelia k dispozícií</entry>
+  <entry key="912">Ste moderátorom rozhovoru. Vy rozhodujete kto môže hovoriť.</entry>
+  <entry key="913">Začať nahrávanie</entry>
+  <entry key="914">Ukončiť nahrávanie</entry>
+  <entry key="915">Nahrávanie rozhovoru už prebieha.</entry>
+  <entry key="916">Nahrávanie je zastavené alebo ešte nezačalo.</entry>
+  <entry key="917">Nahrávanie rozhovoru už prebieha!</entry>
+  <entry key="918">Zrušiť</entry>
+  <entry key="919">Spracovanie rozhovoru zaberie 5 minút za každú 1 min nahrávky. Súčasný status spracovania je:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">Nemôžte premiestniť súbor do jeho podsúboru!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Zmazať všetky objekty na tomto slide iba!</entry>
+  <entry key="1006">Iba adresa zadaná do statusového riadku sa zobrazuje účastníkom!</entry>
+  <entry key="1007">Spraviť tímové miestnosti</entry>
+  <entry key="1008">Vybrať používateľov pre tímové miestnosti!</entry>
+  <entry key="1009">Môžte vybrať používateľov tu a vytvoriť miestnosti pre nich. Vybraní používatelia budú automaticky preradení do nich.</entry>
+  <entry key="1010">Meno</entry>
+  <entry key="1011">Prihlásenie</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Používatelia pre novú tímovú miestnosť:</entry>
+  <entry key="1014">Vytvoriť tímovú miestnosť</entry>
+  <entry key="1015">Zrušiť</entry>
+  <entry key="1016">Vyberte aspoň 1 používateľa pre tímovú miestnosť!</entry>
+  <entry key="1017">Pridať používateľa pre tím</entry>
+  <entry key="1018">Odstrániť používateľa z tímovej miestnosti</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Typ miestnosti</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">This is a Team-Room, you can send the Team-Moderator a message if you need help. You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">1) Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Videá</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything! [Screen Sharing]</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose &lt;i&gt;Insert&lt;/i&gt; from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;&lt;br/&gt;&lt;br/&gt;&lt;u&gt;&lt;FONT color='#0000CC'&gt;&lt;A HREF="http://www.youtube.com/watch?v=Ukqa01O48uI" TARGET="_BLANK"&gt;watch the demo&lt;/A&gt;&lt;/FONT&gt;&lt;/u&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_sv.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
new file mode 100644
index 0000000..3b5622a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_sv.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Konferens</entry>
+  <entry key="2">Möte</entry>
+  <entry key="3">Auditorium</entry>
+  <entry key="4">Inställningar</entry>
+  <entry key="5">Profil</entry>
+  <entry key="6">Administration</entry>
+  <entry key="7">Stopp</entry>
+  <entry key="8">Spela in</entry>
+  <entry key="9">Ingen fil tillgänglig</entry>
+  <entry key="10">Inspelad av lärare</entry>
+  <entry key="11">Anslutna användare:</entry>
+  <entry key="12">Starta en konferens</entry>
+  <entry key="13">Mitt namn</entry>
+  <entry key="14">Videokonferens</entry>
+  <entry key="15">Importera Presentation</entry>
+  <entry key="16">Uppdatera lista</entry>
+  <entry key="17">Till huvudfil</entry>
+  <entry key="18">Ny omröstning</entry>
+  <entry key="19">En ny omröstning för konferensen.</entry>
+  <entry key="20">Fråga:</entry>
+  <entry key="21">Typ av omröstning:</entry>
+  <entry key="22">Skapa</entry>
+  <entry key="23">Info: Varje ansluten användare får ett meddelande med den nya röstningen.</entry>
+  <entry key="24">Skapa en omröstning</entry>
+  <entry key="25">Avbryt</entry>
+  <entry key="26">Ja/Nej</entry>
+  <entry key="27">Numerisk 1-10</entry>
+  <entry key="28">Röst</entry>
+  <entry key="29">Du måste vara Moderator för att skapa en omröstning</entry>
+  <entry key="30">Din röst är accepterad</entry>
+  <entry key="31">Du har redan röstat i denna omröstning.</entry>
+  <entry key="32">Rösta!</entry>
+  <entry key="33">Din respons:</entry>
+  <entry key="34">Ja</entry>
+  <entry key="35">Nej</entry>
+  <entry key="36">vill veta:</entry>
+  <entry key="37">Röstningsresultat</entry>
+  <entry key="38">Fråga:</entry>
+  <entry key="39">Resultat:</entry>
+  <entry key="40">Svar:</entry>
+  <entry key="41">Inga nya omröstningar har påbörjats.</entry>
+  <entry key="42">Rösta!</entry>
+  <entry key="43">Möte (max 4 platser)</entry>
+  <entry key="44">Konferens (max 50 platser)</entry>
+  <entry key="45">Typ</entry>
+  <entry key="46">Andra platser</entry>
+  <entry key="47">Redan valt</entry>
+  <entry key="48">Stig in</entry>
+  <entry key="49">Moderatorn har lämnat mötet.</entry>
+  <entry key="50">Systeminformation</entry>
+  <entry key="51">Välj utrustning</entry>
+  <entry key="52">Välj webcam:</entry>
+  <entry key="53">Välj mikrofon:</entry>
+  <entry key="54">ok</entry>
+  <entry key="55">Avbryt</entry>
+  <entry key="56">Återanslut.</entry>
+  <entry key="57">Ändra setup.</entry>
+  <entry key="58">Kurs:</entry>
+  <entry key="59">Språk:</entry>
+  <entry key="60">Ok</entry>
+  <entry key="61">Avbryt</entry>
+  <entry key="62">Rensa skrivbordet</entry>
+  <entry key="63">Vill du att skrivbordet skall rensas innan du lägger till en ny bild?</entry>
+  <entry key="64">Fråga inte igen</entry>
+  <entry key="65">Nej</entry>
+  <entry key="66">Ändra setup</entry>
+  <entry key="67">Fråga innan skrivbordet töms?.</entry>
+  <entry key="68">Användarinfo</entry>
+  <entry key="69">Rensa ritområdet</entry>
+  <entry key="70">Ångra</entry>
+  <entry key="71">Redo</entry>
+  <entry key="72">Välj ett objekt</entry>
+  <entry key="73">Text</entry>
+  <entry key="74">Måla</entry>
+  <entry key="75">Rita linje</entry>
+  <entry key="76">Rita understrykning</entry>
+  <entry key="77">Rektangel</entry>
+  <entry key="78">Ellips</entry>
+  <entry key="79">Pil</entry>
+  <entry key="80">radera valt objekt</entry>
+  <entry key="81">Lägg till för moderation</entry>
+  <entry key="82">Lägg till</entry>
+  <entry key="83">Avbryt</entry>
+  <entry key="84">Bli moderator</entry>
+  <entry key="85">Stäng</entry>
+  <entry key="86">italic</entry>
+  <entry key="87">fet</entry>
+  <entry key="88">VÄNTAR</entry>
+  <entry key="89">En användare väntar för att bli moderator:</entry>
+  <entry key="90">Acceptera</entry>
+  <entry key="91">Neka</entry>
+  <entry key="92">Avbryt</entry>
+  <entry key="93">Skicka fråga till följande användare</entry>
+  <entry key="94">Accepterad</entry>
+  <entry key="95">Nekad</entry>
+  <entry key="96">Ändra moderator</entry>
+  <entry key="97">Du är inte moderator i denna kurs!</entry>
+  <entry key="98">Moderator:</entry>
+  <entry key="99">Rummet är fullt. Försök igen senare.</entry>
+  <entry key="100">Ellips</entry>
+  <entry key="101">Stäng</entry>
+  <entry key="102">Fel data angivet</entry>
+  <entry key="103">Användarnamnet måste innehålla minst 4 tecken</entry>
+  <entry key="104">Lösenordet måste innehålla minst 4 tecken</entry>
+  <entry key="105">Användarnamnet är redan använt</entry>
+  <entry key="106">Denna epost är redan använd</entry>
+  <entry key="107">Systemfel, kontakta systemadmin</entry>
+  <entry key="108">Login</entry>
+  <entry key="109">Användare:</entry>
+  <entry key="110">Lösen:</entry>
+  <entry key="111">Språk</entry>
+  <entry key="112">Login</entry>
+  <entry key="113">Registrera</entry>
+  <entry key="114">Användare:</entry>
+  <entry key="115">Lösen:</entry>
+  <entry key="116">Lösen igen:</entry>
+  <entry key="117">Förnamn:</entry>
+  <entry key="118">Efternamn:</entry>
+  <entry key="119">E-post:</entry>
+  <entry key="120">Land:</entry>
+  <entry key="121">Registrera</entry>
+  <entry key="122">Avbryt</entry>
+  <entry key="123">Registrera</entry>
+  <entry key="124">Hem</entry>
+  <entry key="125">Användare</entry>
+  <entry key="126">Grupper</entry>
+  <entry key="127">Organisationer</entry>
+  <entry key="128">Konferensrum</entry>
+  <entry key="129">Publik</entry>
+  <entry key="130">Organisation</entry>
+  <entry key="131">Stig in</entry>
+  <entry key="132">Login</entry>
+  <entry key="133">Lösenord</entry>
+  <entry key="134">Lösenord igen</entry>
+  <entry key="135">Förnamn</entry>
+  <entry key="136">Efternamn</entry>
+  <entry key="137">E-post</entry>
+  <entry key="138">Födelseår</entry>
+  <entry key="139">Gata/nr</entry>
+  <entry key="140">Pnr/Stad</entry>
+  <entry key="141">Land</entry>
+  <entry key="142">Adress-Info</entry>
+  <entry key="143">Användardata</entry>
+  <entry key="144">Spara</entry>
+  <entry key="145">Spara</entry>
+  <entry key="146">Användar-ID</entry>
+  <entry key="147">Login</entry>
+  <entry key="148">Förnamn</entry>
+  <entry key="149">Efternamn</entry>
+  <entry key="150">Visa nästa</entry>
+  <entry key="151">Visa föregående</entry>
+  <entry key="152">Radera innehåll</entry>
+  <entry key="153">Avbryt</entry>
+  <entry key="154">Radera</entry>
+  <entry key="155">Nytt innehåll</entry>
+  <entry key="156">Uppdatera innehåll</entry>
+  <entry key="157">Radera innehåll</entry>
+  <entry key="158">Status</entry>
+  <entry key="159">Ej tillgänglig</entry>
+  <entry key="160">Tillgänglig</entry>
+  <entry key="161">Organisation</entry>
+  <entry key="162">Kalender</entry>
+  <entry key="163">Stäng</entry>
+  <entry key="164">Organisation-ID</entry>
+  <entry key="165">Namn</entry>
+  <entry key="166">Användare</entry>
+  <entry key="167">Moderator</entry>
+  <entry key="168">Admin</entry>
+  <entry key="169">Användarnivå</entry>
+  <entry key="170">Organisation</entry>
+  <entry key="171">Namn</entry>
+  <entry key="172">Lägg till organisation</entry>
+  <entry key="173">Lägg till organisation</entry>
+  <entry key="174">Avbryt</entry>
+  <entry key="175">Lägg till</entry>
+  <entry key="176">Ta bort organisation</entry>
+  <entry key="177">Användare</entry>
+  <entry key="178">Lägg till användare</entry>
+  <entry key="179">Radera användare</entry>
+  <entry key="180">Lägg till användare</entry>
+  <entry key="181">Sök användare</entry>
+  <entry key="182">sök</entry>
+  <entry key="183">Användare</entry>
+  <entry key="184">Organisation</entry>
+  <entry key="185">Stig in</entry>
+  <entry key="186">Konferensrum</entry>
+  <entry key="187">Konferensrum</entry>
+  <entry key="188">Id</entry>
+  <entry key="189">Namn</entry>
+  <entry key="190">Publik</entry>
+  <entry key="191">Organisationer</entry>
+  <entry key="192">Konferensrum</entry>
+  <entry key="193">Namn</entry>
+  <entry key="194">Typ</entry>
+  <entry key="195">Publik</entry>
+  <entry key="196">Kommentar</entry>
+  <entry key="197">Spara</entry>
+  <entry key="198">Ladda</entry>
+  <entry key="199">Spara som</entry>
+  <entry key="200">Filnamn</entry>
+  <entry key="201">Filnamn</entry>
+  <entry key="202">Avbryt</entry>
+  <entry key="203">Spara</entry>
+  <entry key="204">Bearbetar</entry>
+  <entry key="205">Laddar</entry>
+  <entry key="206">Objekt laddade</entry>
+  <entry key="207">Synkroniserar, vänta:</entry>
+  <entry key="208">Laddar bilddata</entry>
+  <entry key="209">Synkroniserar, vänta:</entry>
+  <entry key="210">Rensa ritutrymmet</entry>
+  <entry key="211">Rensa ritutrymmet, all data kommer att förloras</entry>
+  <entry key="212">Fråga innan inladdning av fil</entry>
+  <entry key="213">Skicka inbjudan</entry>
+  <entry key="214">Skicka inbjudan</entry>
+  <entry key="215">Ämne</entry>
+  <entry key="216">Mottagare</entry>
+  <entry key="217">Meddelande</entry>
+  <entry key="218">Skicka</entry>
+  <entry key="219">Avbryt</entry>
+  <entry key="220">Skicka</entry>
+  <entry key="221">Användardata</entry>
+  <entry key="222">Ditt alias i denna konferens</entry>
+  <entry key="223">Alias</entry>
+  <entry key="224">Förnamn</entry>
+  <entry key="225">Efternamn</entry>
+  <entry key="226">E-post</entry>
+  <entry key="227">Språk</entry>
+  <entry key="228">Stig in</entry>
+  <entry key="229">Laddar</entry>
+  <entry key="230">Laddar data, vänta!</entry>
+  <entry key="231">Fel lösenord</entry>
+  <entry key="232">2 identiska lösenord med minst 6 tecken, tack!</entry>
+  <entry key="233">Fel e-postadress</entry>
+  <entry key="234">Du har angett en ogiltig e-postadress</entry>
+  <entry key="235">Registrering klar</entry>
+  <entry key="236">Ditt konto är skapat. Du kan logga in.</entry>
+  <entry key="237">Du kan inte dela din skärm just nu. Någon annan delar sin skärm.</entry>
+  <entry key="238">Delning förbjuden</entry>
+  <entry key="239">Dela skärm</entry>
+  <entry key="240">Dålig bandbredd: Du kan inte synkronisera skärmen. Du kommer att tappa frames. Om denna varning visas ofta kan du be din moderator att sänka kvaliteten.</entry>
+  <entry key="241">Skärm av:</entry>
+  <entry key="242">Måla</entry>
+  <entry key="243">Dokument</entry>
+  <entry key="244">Chat</entry>
+  <entry key="245">Filer</entry>
+  <entry key="246">Medlemmar</entry>
+  <entry key="247">Ladda ner originaldokument</entry>
+  <entry key="248">Ladda ner PDF-dokument</entry>
+  <entry key="249">Ladda presentationen till whiteboard</entry>
+  <entry key="250">Konfiguration</entry>
+  <entry key="251">Dra det här objektet</entry>
+  <entry key="252">Ändra storleken på det här objektet</entry>
+  <entry key="253">%</entry>
+  <entry key="254">av</entry>
+  <entry key="255">Gå till första sidan</entry>
+  <entry key="256">Gå till föregående sida</entry>
+  <entry key="257">Gå till nästa sida</entry>
+  <entry key="258">Gå till sista sidan</entry>
+  <entry key="259">Zoom --</entry>
+  <entry key="260">Zoom ++</entry>
+  <entry key="261">Herr</entry>
+  <entry key="262">Fröken</entry>
+  <entry key="263">Konfiguration</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Nyckel</entry>
+  <entry key="266">Konfiguration</entry>
+  <entry key="267">Nyckel</entry>
+  <entry key="268">senast uppdaterat</entry>
+  <entry key="269">uppdaterat av</entry>
+  <entry key="270">kommentar</entry>
+  <entry key="271">nyckel</entry>
+  <entry key="272">av</entry>
+  <entry key="273">Användare</entry>
+  <entry key="274">radera användare från organisationen</entry>
+  <entry key="275">radera</entry>
+  <entry key="276">Den här användaren är redan medlem av den här organisationen.</entry>
+  <entry key="277">Nyheter</entry>
+  <entry key="278">Snabblänkar</entry>
+  <entry key="279">Gå till Konferens</entry>
+  <entry key="280">Gå till Auditorium</entry>
+  <entry key="281">Hjälp och Support</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Buggrapport</entry>
+  <entry key="285">mera</entry>
+  <entry key="286">Projektets Webbsida (http://openmeetings.apache.org)</entry>
+  <entry key="287">Epostlista För Användare (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Kom Ihåg Inloggning</entry>
+  <entry key="289">Innehåll</entry>
+  <entry key="290">Min Hemsida</entry>
+  <entry key="291">Mina Schemalagda Möten</entry>
+  <entry key="292">Mina Planerade Auditorier</entry>
+  <entry key="293">Allmänna Möten</entry>
+  <entry key="294">Privata Möten</entry>
+  <entry key="295">Allmänna Auditorier</entry>
+  <entry key="296">Privata Auditorier</entry>
+  <entry key="297">Allmänt Innehåll</entry>
+  <entry key="298">Privat Innehåll</entry>
+  <entry key="299">Personligt Innehåll</entry>
+  <entry key="300"></entry>
+  <entry key="301">Moderering</entry>
+  <entry key="302">Anhåll om Moderering</entry>
+  <entry key="303">Omröstningar</entry>
+  <entry key="304">Välj en fil</entry>
+  <entry key="305">Inställningar</entry>
+  <entry key="306">Kam. &amp; Mik. Inställn.</entry>
+  <entry key="307">Whiteboard Inställningar</entry>
+  <entry key="308">Avsluta</entry>
+  <entry key="309">Lämna Rummet</entry>
+  <entry key="310">Logga ut</entry>
+  <entry key="311">Glömt ditt lösenord?</entry>
+  <entry key="312">Återställ Lösenord</entry>
+  <entry key="313">Via E-post</entry>
+  <entry key="314">Via Användarnamn</entry>
+  <entry key="315">Din E-postadress</entry>
+  <entry key="316">Ditt Användarnamn</entry>
+  <entry key="317">OK</entry>
+  <entry key="318">Användare</entry>
+  <entry key="319">Omröstningar</entry>
+  <entry key="320">Det finns ingen Användare kopplad till detta Användarnamn</entry>
+  <entry key="321">Ett e-postmeddelande innehållande en unik länk har skickats till din epostadress, var vänlig kolla din epost. Om du fortfarande inte fått något e-postmeddelande, var vänlig ändra spaminställningarna för din e-post och skicka bekräftelsemeddelandet på nytt.</entry>
+  <entry key="322">Bearbetar</entry>
+  <entry key="323">Meddelande</entry>
+  <entry key="324">Ogiltig Hash. Ingen Användare Funnen.</entry>
+  <entry key="325">Återställ Ditt Lösenord</entry>
+  <entry key="326">Login</entry>
+  <entry key="327">Ändra Lösenord</entry>
+  <entry key="328">Nytt Lösenord</entry>
+  <entry key="329">Ange Lösenord på nytt</entry>
+  <entry key="330">Lösenorden du angett är inte identiska.</entry>
+  <entry key="331">4 eller mer tecken; versalisering inverkar!</entry>
+  <entry key="332">Lösenord valt. Du kan logga in nu.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Okänt Fel. Var vänlig rapportera detta till ditt Service-Team.</entry>
+  <entry key="335">Användarnamnet hittades inte.</entry>
+  <entry key="336">Ogiltigt Lösenord.</entry>
+  <entry key="337">Utloggning Lyckades.</entry>
+  <entry key="338">Registrering via gränssnittet är Inaktiverat.</entry>
+  <entry key="339">Ogiltig Epostadress.</entry>
+  <entry key="340">Duplikat filnamn, var vänlig välj ett annat filnamn.</entry>
+  <entry key="341">Filnamnet är för kort.</entry>
+  <entry key="342">Kunde inte spara Adressen.</entry>
+  <entry key="343">Användare tillagd, men du måste tilldela honom en Organisation för att kunna logga in.</entry>
+  <entry key="344">Nytt Record</entry>
+  <entry key="345">Inget fält med detta FältId hittades.</entry>
+  <entry key="346">Ingen Etikett hittades för det Fältet.</entry>
+  <entry key="347">Admin Auktorisering krävs.</entry>
+  <entry key="348">Språk-Editor</entry>
+  <entry key="349">Språk</entry>
+  <entry key="350">Etikett-ID</entry>
+  <entry key="351">Etikett-Namn</entry>
+  <entry key="352">Värde</entry>
+  <entry key="353">Fältvärden</entry>
+  <entry key="354">EtikettNamn</entry>
+  <entry key="355">EtikettVärde</entry>
+  <entry key="356">Etikett-ID</entry>
+  <entry key="357">Du raderade endast Etiketten, INTE Fältet! Du kan inte radera Fältet, det innehåller kanske Etiketter på andra Språk.</entry>
+  <entry key="358">Ogiltig Etikett-ID. FieldLanguagesvalues_Id kan inte hittas i databasen.</entry>
+  <entry key="359">Du kan inte radera det här Fältet. Du kan endast radera Etiketter, INTE Fält. För tillfället är ingen Etikett laddad, detta kan bero på att ingen Etikett är vald eller för att inga Etiketter är definierade för det här fältet och språket.</entry>
+  <entry key="360">Exportera</entry>
+  <entry key="361">Du måste logga ut för att se ändringar.</entry>
+  <entry key="362">Lägg till nytt språk</entry>
+  <entry key="363">Ta bort språk</entry>
+  <entry key="364">Lägg till nytt språk</entry>
+  <entry key="365">Namn</entry>
+  <entry key="366">Lägg till språk</entry>
+  <entry key="367">Säkerhetskopia</entry>
+  <entry key="368">Gå till första</entry>
+  <entry key="369">Gå till föregående</entry>
+  <entry key="370">Gå till nästa</entry>
+  <entry key="371">Gå till sista</entry>
+  <entry key="372">Användare talar (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">Sätt på/av ljudet</entry>
+  <entry key="374">System</entry>
+  <entry key="375">Dina inställningar</entry>
+  <entry key="376">Hej,</entry>
+  <entry key="377">Ändra din profil</entry>
+  <entry key="378">Nya meddelanden:</entry>
+  <entry key="379">Ladda upp nya bilder</entry>
+  <entry key="380">Användardata - Exportera</entry>
+  <entry key="381">Alla organisationer måste finnas från tidigare!</entry>
+  <entry key="382">Påbörja exporteringen</entry>
+  <entry key="383">Enligt organisation</entry>
+  <entry key="384">Påbörja exporteringen</entry>
+  <entry key="385">Användardata - Importera</entry>
+  <entry key="386">Välj users.xml</entry>
+  <entry key="387">Importera</entry>
+  <entry key="388">Exportera till XML - Dessa filer kan användas för att: - Bidra till projektet - Importera till ett annat system - Göra säkerhetskopior - Skräddarsy programmet - Lägga i language-mappen för kommande installationer</entry>
+  <entry key="389">Välj en språkfil att importera. Välj rätt språk från Comboboxen! Språkfilen kommer att importeras till detta språk oberoende av namnet på filen!</entry>
+  <entry key="390">Importera - välj fil</entry>
+  <entry key="391">Spara som</entry>
+  <entry key="392">Namn:</entry>
+  <entry key="393">Kommentar:</entry>
+  <entry key="394">Spara</entry>
+  <entry key="395">Inspelningar</entry>
+  <entry key="396">Inspelningsförevisaren</entry>
+  <entry key="397">Inspelningar från allmänna och privata rum</entry>
+  <entry key="398">Användare:</entry>
+  <entry key="399">Anslöt sig:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Användare i det här rummet:</entry>
+  <entry key="402">Uppdatera</entry>
+  <entry key="403">Det här rummet är fullt. Försök igenom om någon minut.</entry>
+  <entry key="404">Klicka på ett rum för att få mera detaljer</entry>
+  <entry key="405">Chatta med användarna i det här rummet:</entry>
+  <entry key="406">Rum:</entry>
+  <entry key="407">Användare i det här rummet:</entry>
+  <entry key="408">Sedan:</entry>
+  <entry key="409">Spela upp inspelning</entry>
+  <entry key="410">Längd:</entry>
+  <entry key="411">Datum:</entry>
+  <entry key="412">Inspelningsläge! Du kan inte ändra några värden, detta är en inspelad fil.</entry>
+  <entry key="413">Spela upp denna inspelning</entry>
+  <entry key="414">Spela upp / Pausa</entry>
+  <entry key="415">Påbörja inspelning</entry>
+  <entry key="416">Stoppa inspelning</entry>
+  <entry key="417">Inspelning:</entry>
+  <entry key="418">Det är redan någon som spelar in:</entry>
+  <entry key="419">Inspelning! Av användare:</entry>
+  <entry key="420">Avbryt</entry>
+  <entry key="421">Inspelningen kommer att avbryts och inte heller sparas.</entry>
+  <entry key="422">Återuppta</entry>
+  <entry key="423">Stäng det här fönstret och återuppta inspelningen</entry>
+  <entry key="424">Ändra Linjefärg</entry>
+  <entry key="425">Välj Färg</entry>
+  <entry key="426">Inaktivera / Aktivera Linjefärg</entry>
+  <entry key="427">Ändra Fyllfärg</entry>
+  <entry key="428">Inaktivera / Aktivera Fyllfärg</entry>
+  <entry key="429">Ändra Linjebredd</entry>
+  <entry key="430">Stäng</entry>
+  <entry key="431">Ändra storlek på teckensnitt</entry>
+  <entry key="432">Ta bort Inspelning</entry>
+  <entry key="433">Gäst</entry>
+  <entry key="434">Av:</entry>
+  <entry key="435">Namn</entry>
+  <entry key="436">Rum</entry>
+  <entry key="437">Datum</entry>
+  <entry key="438">Avbryt</entry>
+  <entry key="439">Starta</entry>
+  <entry key="440">Namn</entry>
+  <entry key="441">Datum</entry>
+  <entry key="442">Radera Serverns Chatlogg</entry>
+  <entry key="443">Chat</entry>
+  <entry key="444">Skicka meddelande</entry>
+  <entry key="445">Emotikoner</entry>
+  <entry key="446"></entry>
+  <entry key="447">Välj Enheter</entry>
+  <entry key="448">Ljud och Video</entry>
+  <entry key="449">Endast Ljud</entry>
+  <entry key="450">Endast Video</entry>
+  <entry key="451">Inget Ljud/Video (statisk bild)</entry>
+  <entry key="452">Inget Ljud/Video kommer att publiceras, i stället kommer en bild från din profil att visas. Välj den här inställningen om du har dålig bandbredd.</entry>
+  <entry key="453">MÅ</entry>
+  <entry key="454">TI</entry>
+  <entry key="455">ON</entry>
+  <entry key="456">TO</entry>
+  <entry key="457">FR</entry>
+  <entry key="458">LÖ</entry>
+  <entry key="459">SÖ</entry>
+  <entry key="460">Måndag</entry>
+  <entry key="461">Tisdag</entry>
+  <entry key="462">Onsdag</entry>
+  <entry key="463">Torsdag</entry>
+  <entry key="464">Fridag</entry>
+  <entry key="465">Lördag</entry>
+  <entry key="466">Söndag</entry>
+  <entry key="467">KV</entry>
+  <entry key="468">Kalender vecka</entry>
+  <entry key="469">Januari</entry>
+  <entry key="470">Februari</entry>
+  <entry key="471">Mars</entry>
+  <entry key="472">April</entry>
+  <entry key="473">Maj</entry>
+  <entry key="474">Juni</entry>
+  <entry key="475">Juli</entry>
+  <entry key="476">Augusti</entry>
+  <entry key="477">September</entry>
+  <entry key="478">Oktober</entry>
+  <entry key="479">November</entry>
+  <entry key="480">December</entry>
+  <entry key="481">Kalender</entry>
+  <entry key="482">Deltagare</entry>
+  <entry key="483">Visa Layout inställningar</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Bredd | Höjd</entry>
+  <entry key="486">Video-Platshållare</entry>
+  <entry key="487">Modererings-Platshållare</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Whiteboard-Platshållare</entry>
+  <entry key="490">Aktiverad</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Bredd | Höjd</entry>
+  <entry key="493">Filer, Chat, Deltagare - Platshållare</entry>
+  <entry key="494">Aktiverad</entry>
+  <entry key="495">X | Y</entry>
+  <entry key="496">Bredd | Höjd</entry>
+  <entry key="497">Moderatorn har lämnat rummet. För tillfället finns det ingen presentatör. Du kan ansöka om att bli Moderator eller vänta.</entry>
+  <entry key="498">Det finns ingen Moderator i det här rummet, men det finns några deltagare. Du kan ansöka om att bli Moderator eller vänta.</entry>
+  <entry key="499">Feedback för {0}</entry>
+  <entry key="500">{0} - Inbjudan</entry>
+  <entry key="501">Meddelande från Användare:</entry>
+  <entry key="502">Meddelande:</entry>
+  <entry key="503">Klicka på den här länken för att delta i Mötet:</entry>
+  <entry key="504">Klicka här för att gå in i Rummet.</entry>
+  <entry key="505">Om du har problem med den här länken, var vänlig kopiera och klistra in det här i din webbläsare:</entry>
+  <entry key="506">{0} Registrering</entry>
+  <entry key="507">Din användardata:</entry>
+  <entry key="508">Login:</entry>
+  <entry key="509">Lösenord:</entry>
+  <entry key="510">Epost:</entry>
+  <entry key="511">{0}-Teamet</entry>
+  <entry key="512">{0} Registrering</entry>
+  <entry key="513">{0} - Återställ Lösenord</entry>
+  <entry key="514">Klicka på den här länken för att ange ett nytt lösenord:</entry>
+  <entry key="515">Klicka här för att ange ett nytt lösenord</entry>
+  <entry key="516">Om du har problem med länken, var vänlig kopiera och klistra in detta i din webbläsare:</entry>
+  <entry key="517">{0} lösenordsåterställning</entry>
+  <entry key="518">Var vänlig ange ett giltigt Datum, till exempel 24.12.2001 (dd.mm.åååå)</entry>
+  <entry key="519">Var vänlig ange en giltig Epostadress, till exempel namn@mail.com</entry>
+  <entry key="520">Var vänlig ange ett Flytande-Nummer, till exempel 1.00</entry>
+  <entry key="521">Var vänlig ange ett Nummer (Integer), till exempel 100</entry>
+  <entry key="522">Var vänlig ange ett Telefonnummer, till exempel +358 40 352 3250</entry>
+  <entry key="523">Var vänlig ange en tid, till exempel 12:23 (tt:mm)</entry>
+  <entry key="524">Lösenordsskyddad</entry>
+  <entry key="525">Lösenord</entry>
+  <entry key="526">Giltighetstid</entry>
+  <entry key="527">Oändlig</entry>
+  <entry key="528">Period</entry>
+  <entry key="529">Engångs</entry>
+  <entry key="530">Giltig från och med:</entry>
+  <entry key="531">Giltig till:</entry>
+  <entry key="532">Inbjudan till {0}</entry>
+  <entry key="533">Ingen inbjudan tillgänglig med den här Inbjudningskoden.</entry>
+  <entry key="534">Inbjudan användes redan. Den här typen av inbjudningar kan inte återanvändas.</entry>
+  <entry key="535">Inbjudningskoden är inte giltig.</entry>
+  <entry key="536">Lösenord:</entry>
+  <entry key="537">Kontrollera Lösenord</entry>
+  <entry key="538">Ogiltigt Lösenord!</entry>
+  <entry key="539">Webbläsare</entry>
+  <entry key="540">Synkronisera Ljud/Video</entry>
+  <entry key="541">Inloggningen var korrekt, men sessionen är inte längre aktiv eller lagrad på servern. Försök att logga in igen efter att du fått ett nytt SessionId.</entry>
+  <entry key="542">SessionId är inte inloggat eller har inga Admin-rättigheter. SOAP Gateway kräver en användare med admin-rättigheter för att innesluta nya användare.</entry>
+  <entry key="543">Den här sessionen är inte kopplad till någon Remoteuser-Data. Antingen så kallades inte SOAP-Gateway före applikationen kördes eller så används ett felaktigt Session-ID.</entry>
+  <entry key="544">Inspelaren är fortfarande i Beta-stadie!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axel</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axel</entry>
+  <entry key="549">b</entry>
+  <entry key="550">bredd</entry>
+  <entry key="551">h</entry>
+  <entry key="552">höjd</entry>
+  <entry key="553">Ändra Genomskinlighet</entry>
+  <entry key="554">Öppna bläddraren</entry>
+  <entry key="555">Stäng bläddraren</entry>
+  <entry key="556">Anslutningen till Servern är förlorad. Du måste ladda om Applikationen och/eller kolla din Nätverksanslutning.</entry>
+  <entry key="557">Pekare</entry>
+  <entry key="558">Synkroniserar</entry>
+  <entry key="559">Synkroniserar användare, var vänlig vänta</entry>
+  <entry key="560">&lt;u&gt;Ladda ner som SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Ladda ner som PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Ladda ner som JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Ladda ner som PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Ladda ner som TIF&lt;/u&gt;</entry>
+  <entry key="565">Påminnelse:</entry>
+  <entry key="566">Kategori:</entry>
+  <entry key="567">Repetition:</entry>
+  <entry key="568">ingen</entry>
+  <entry key="569">Läge:</entry>
+  <entry key="570">Börjar</entry>
+  <entry key="571">Slutar</entry>
+  <entry key="572">Titel:</entry>
+  <entry key="573">Kommentar:</entry>
+  <entry key="574">Bjud in folk</entry>
+  <entry key="575">Daglig</entry>
+  <entry key="576">Månatlig</entry>
+  <entry key="577">Årlig</entry>
+  <entry key="578">Tidpunkten för mötets slut måste vara efter dess början!</entry>
+  <entry key="579">Lägg till en Titel, tack!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Aktivera det här om du skriver på ett höger till vänster-språk (inverterad ordfölj)</entry>
+  <entry key="582">Dashboard</entry>
+  <entry key="583">Se på inspelade Möten och Auditorier</entry>
+  <entry key="584">Möte - Skapa en konferens med 4 (upp till 16) Användare &lt;br&gt; alla kommer att ha tillgång till ljud + video.</entry>
+  <entry key="585">Auditorium - Skapa en konferens med upp till 200 deltagare&lt;br/&gt;Endast Moderatorn kommer att ha tillgång till ljud + video</entry>
+  <entry key="586">Skapa användare, rum, organisationer&lt;br/&gt; + ändra konfigurationer</entry>
+  <entry key="587">Användare i det här Rummet nu</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Laddar Dokument. Vänligen vänta tills alla klienter är synkroniserade.</entry>
+  <entry key="592">Uppladdning klar, konverterar Dokument ...</entry>
+  <entry key="593">Påbörja Uppladdning</entry>
+  <entry key="594">Dialog för Uppladdning och Importering. Var vänlig välj en Fil från din Hårdskiva.</entry>
+  <entry key="595">Avbryt</entry>
+  <entry key="596">Välj Fil</entry>
+  <entry key="597">Anslutningar</entry>
+  <entry key="598">Värde</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Ansluten sedan</entry>
+  <entry key="602">Rum</entry>
+  <entry key="603">Sparka Användare</entry>
+  <entry key="604">Sparka Användare</entry>
+  <entry key="605">Vill du verkligen sparka den här Klienten?&lt;br/&gt; Det här avlägsnar endast Klienten från det aktuella rummet och ger honom möjlighet att återansluta sig.</entry>
+  <entry key="606">Din session har stängts av en Administratör eller Moderator.</entry>
+  <entry key="607">Telefon</entry>
+  <entry key="608">Användaren är Moderator i det här rummet</entry>
+  <entry key="609">Användaren har tillåtelse att rita på Whiteboarden</entry>
+  <entry key="610">Starta (om) Ljud/Video eller ändra Anordningens Inställningar</entry>
+  <entry key="611">Tillåt den här Användaren att rita på Whiteboarden</entry>
+  <entry key="612">Ta bort möjligheten att rita på Whiteboarden</entry>
+  <entry key="613">Användare</entry>
+  <entry key="614">Filer</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Ditt konto är tilldelat flera Organisationer. Var vänlig välj en för den här Sessionen.</entry>
+  <entry key="618">Det här rummet är fullt för tillfället. Var vänlig försök på nytt senare.</entry>
+  <entry key="619">Typ av rum</entry>
+  <entry key="620">Tidsbokat rum</entry>
+  <entry key="621">Servertid</entry>
+  <entry key="622">{0} - Påminnelse</entry>
+  <entry key="623">Meddelande från Användare:</entry>
+  <entry key="624">Meddelande:</entry>
+  <entry key="625">Klicka på den här länken för att delta i Mötet:</entry>
+  <entry key="626">Klicka här för att gå in i rummet</entry>
+  <entry key="627">Om du har problem med länken, vänligen kopiera och klistra in det här i din webbläsare:</entry>
+  <entry key="628">Sök internt</entry>
+  <entry key="629">externa användare</entry>
+  <entry key="630">förnamn</entry>
+  <entry key="631">namn</entry>
+  <entry key="632">E-post</entry>
+  <entry key="633">Bekräfta utloggning</entry>
+  <entry key="634">Är du säker på att du vill logga ut?</entry>
+  <entry key="635">Åtgärder</entry>
+  <entry key="636">Demo Rum</entry>
+  <entry key="637">Demo Tid</entry>
+  <entry key="638">Mötestimer</entry>
+  <entry key="639">Det här Rummet är ett Demo Rum. För att få bort den här varningen så måste du antingen skaffa ett privat mötesrum eller sätta upp en egen Server. Du kommer att loggas ut automatiskt om:</entry>
+  <entry key="640">Modererat</entry>
+  <entry key="641">Var vänlig vänta tills Moderatorn har anslutigt sig till Rummet. Moderatorn kan antingen vara en Lärare, Admin eller skapare av det här Rummet.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Inkommande Skärmdelning</entry>
+  <entry key="644">En ny Skärmdelning vill påbörjas av användaren:</entry>
+  <entry key="645">Börja Dela</entry>
+  <entry key="646">Lägg Till Ett Möte</entry>
+  <entry key="647">Mötesrum</entry>
+  <entry key="648">Auditorium</entry>
+  <entry key="649">Moderering</entry>
+  <entry key="650">Moderera Användare</entry>
+  <entry key="651">Moderera Rum</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Vill du ändra den här Användaren till Moderator av den Organisationen?</entry>
+  <entry key="654">Var vänlig välj en Organisation före du försöker lägga till en Användare till den!</entry>
+  <entry key="655">Organisation - Moderator</entry>
+  <entry key="656">Vill du verkligen ta bort den här Användaren från Organisationen?</entry>
+  <entry key="657">Den här Användaren är Moderator</entry>
+  <entry key="658">Den här Användaren är inte Moderator</entry>
+  <entry key="659">Vill du ta bort den här Användaren som Moderator för den här Organisationen?</entry>
+  <entry key="660">Lägg till eller ta bort Användare eller Rum inom din Organisation</entry>
+  <entry key="661">Vill du verkligen ta bort det här?</entry>
+  <entry key="662">Vill du verkligen ta bort den här Användaren från Organisationen? Du kommer endast att ta bort kopplingen mellan Användaren och Organisationen, för att ta bort själva Användaren så måste du logga in på Administrationspanelen.</entry>
+  <entry key="663">Du kan inte ta bort din egen Användare!</entry>
+  <entry key="664">Den här Metoden kräver ett Administrationskonto för att kunna åberopas!</entry>
+  <entry key="665">Det finns ingen Session associerad med detta ID.</entry>
+  <entry key="666">Det här är ett Administratörs- eller Moderatorkonto. Du kan endast ändra det här kontot via Administratörspanelen.</entry>
+  <entry key="667">Var vänlig klicka på följande länk eller klistra in den i din webbläsares adressfält för att slutföra registreringen.</entry>
+  <entry key="668">Klicka här för att verifiera din E-postadress</entry>
+  <entry key="669">Ingen Användare hittades med detta Hash.</entry>
+  <entry key="670">Den här Användaren är redan aktiverad!</entry>
+  <entry key="671">Du har aktiverat ditt konto!</entry>
+  <entry key="672">Logga in nu</entry>
+  <entry key="673">Ditt konto är inte aktiverat. Använd länken i det e-postmeddelande du fick när du registrerade dig.</entry>
+  <entry key="674">Du har framgångsrikt registrerat dig. Vi har skickat ett e-postmeddelande till dig med din verifikationskod. Vänligen kolla din Inkorg.</entry>
+  <entry key="675">Ta bort den här användaren som Moderator</entry>
+  <entry key="676">Bevilja Moderator-rättigheter till den här Användaren</entry>
+  <entry key="677">Användare</entry>
+  <entry key="678">Tillgång till Whiteboarden</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderering: Vänligen välj en Användare från Listan för att bevilja honom tillträde till Whiteboard, Moderering eller Video.</entry>
+  <entry key="681">Den här Användaren är redan Moderator, så han har automatiskt rätt att rita.</entry>
+  <entry key="682">Det här är du! Du kan inte ta bort Moderator-rättigheterna från dig själv.</entry>
+  <entry key="683">Tillåt den här Användaren att Publicera Ljud/Video</entry>
+  <entry key="684">Ta bort Ljud/Video från den här Användaren</entry>
+  <entry key="685">Jag skulle vilja få Moderering för det här rummet</entry>
+  <entry key="686">Jag skulle vilja rita på Whiteboarden</entry>
+  <entry key="687">Jag skulle vilja dela Ljud/Video</entry>
+  <entry key="688">Du är Moderator för det här Rummet</entry>
+  <entry key="689">Du har tillåtelse att rita på Whiteboarden</entry>
+  <entry key="690">Du har tillåtelse att publicera Audio/Video</entry>
+  <entry key="691">Meddelande till Moderatorn</entry>
+  <entry key="692">Användaren</entry>
+  <entry key="693">vill ha Moderator-rättigheter. Använd Statusikonerna i Användarlistan för att dela ut och ta bort Moderator-rättigheter.</entry>
+  <entry key="694">vill rita på Whiteboarden. Använd Statusikonerna i Användarlistan för att dela ut och ta bort rättigheter att rita på Whiteboarden.</entry>
+  <entry key="695">vill publicera Ljud/Video. Använd Statusikonerna i Användarlistan för att dela ut och ta bort rättigheter att publicera Ljud/Video.</entry>
+  <entry key="696">Du måste vänta tills en Moderator har stigit in i rummet.</entry>
+  <entry key="697">Avbryt</entry>
+  <entry key="698">Spara</entry>
+  <entry key="699">Dag</entry>
+  <entry key="700">Månad</entry>
+  <entry key="701">År</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_th.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_th.properties.xml
new file mode 100644
index 0000000..82b934f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_th.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">การประชุมกลุ่ม</entry>
+  <entry key="2">การประชุม</entry>
+  <entry key="3">งานต่างๆ</entry>
+  <entry key="4">การตั้งค่า</entry>
+  <entry key="5">โปรไฟล์</entry>
+  <entry key="6">การบริหารงาน</entry>
+  <entry key="7">หยุด</entry>
+  <entry key="8">บันทึก</entry>
+  <entry key="9">ไม่มีไฟล์</entry>
+  <entry key="10">บันทึกโดยอาจารย์</entry>
+  <entry key="11">ผู้ใช้ที่เชื่อมต่อ:</entry>
+  <entry key="12">เริ่มการประชุม</entry>
+  <entry key="13">ชื่อของฉัน</entry>
+  <entry key="14">การประชุมผ่านวีดีโอ</entry>
+  <entry key="15">อัพโหลดไฟล์</entry>
+  <entry key="16">รีเฟรชลิสต์รายการ</entry>
+  <entry key="17">ไปยังไฟล์หลัก</entry>
+  <entry key="18">โพลล์ใหม่</entry>
+  <entry key="19">โพลล์ใหม่สำหรับการประชุม</entry>
+  <entry key="20">คำถาม:</entry>
+  <entry key="21">ประเภทของโพลล์:</entry>
+  <entry key="22">จัดทำ</entry>
+  <entry key="23">ข้อมูล: ผู้ใช้ที่เชื่อมต่ออยู่แต่ละรายได้รับข้อความพร้อมด้วยโพลล์ใหม่</entry>
+  <entry key="24">จัดทำโพลล์</entry>
+  <entry key="25">ยกเลิก</entry>
+  <entry key="26">ใช่/ไม่</entry>
+  <entry key="27">เลข 1-10</entry>
+  <entry key="28">โพลล์</entry>
+  <entry key="29">ต้องเป็นผู้ดำเนินรายการจึงจะตั้งคำถามได้</entry>
+  <entry key="30">การโหวตของคุณได้รับการลงทะเบียนแล้ว</entry>
+  <entry key="31">คุณโหวตโพลล์นี้ไปแล้ว</entry>
+  <entry key="32">เชิญโหวต!</entry>
+  <entry key="33">คำตอบของคุณ:</entry>
+  <entry key="34">ใช่</entry>
+  <entry key="35">ไม่</entry>
+  <entry key="36">อยากรู้:</entry>
+  <entry key="37">ผลการสำรวจโพลล์</entry>
+  <entry key="38">คำถาม:</entry>
+  <entry key="39">ผล:</entry>
+  <entry key="40">คำตอบ:</entry>
+  <entry key="41">ยังไม่มีการเริ่มการสำรวจโพลล์ใดเลย</entry>
+  <entry key="42">เชิญโหวต!</entry>
+  <entry key="43">การประชุม (สูงสุด 4 ที่นั่ง)</entry>
+  <entry key="44">การประชุมกลุ่ม (สูงสุด 50 ที่นั่ง)</entry>
+  <entry key="45">ประเภท</entry>
+  <entry key="46">ที่นั่งอื่นๆ</entry>
+  <entry key="47">เลือกไปแล้ว</entry>
+  <entry key="48">ป้อนข้อมูล</entry>
+  <entry key="49">ผู้ดำเนินรายการออกจากที่ประชุมไปแล้ว</entry>
+  <entry key="50">ข้อมูลระบบ</entry>
+  <entry key="51">เลือกอุปกรณ์</entry>
+  <entry key="52">เลือกเว็บแคม:</entry>
+  <entry key="53">เลือกไมโครโฟน:</entry>
+  <entry key="54">ตกลง</entry>
+  <entry key="55">ยกเลิก</entry>
+  <entry key="56">คุณต้องทำการเชื่อมต่อใหม่</entry>
+  <entry key="57">แก้ไขการตั้งค่า</entry>
+  <entry key="58">หลักสูตร:</entry>
+  <entry key="59">ภาษา:</entry>
+  <entry key="60">ตกลง</entry>
+  <entry key="61">ยกเลิก</entry>
+  <entry key="62">ลบไวท์บอร์ด</entry>
+  <entry key="63">คุณต้องการให้ลบไวท์บอร์ดให้ว่างก่อนที่จะเพิ่มรูปใหม่หรือไม่</entry>
+  <entry key="64">ไม่ต้องถามอีก</entry>
+  <entry key="65">ไม่</entry>
+  <entry key="66">แก้ไขการตั้งค่า</entry>
+  <entry key="67">ขอให้ยืนยันอีกครั้งก่อนจะลบไวท์บอร์ดให้ว่าง</entry>
+  <entry key="68">ข้อมูลผู้ใช้</entry>
+  <entry key="69">ลบบริเวณวาดรูป</entry>
+  <entry key="70">เลิกทำ</entry>
+  <entry key="71">ทำซ้ำ</entry>
+  <entry key="72">เลือกรายการ</entry>
+  <entry key="73">ข้อความ</entry>
+  <entry key="74">ระบายสี</entry>
+  <entry key="75">วาดเส้น</entry>
+  <entry key="76">ขีดเส้นใต้</entry>
+  <entry key="77">สี่เหลี่ยมผืนผ้า</entry>
+  <entry key="78">วงรี</entry>
+  <entry key="79">ลูกศร</entry>
+  <entry key="80">ลบรายการที่เลือกไว้</entry>
+  <entry key="81">สมัครเพื่อทำหน้าที่ดำเนินรายการ</entry>
+  <entry key="82">สมัคร</entry>
+  <entry key="83">ยกเลิก</entry>
+  <entry key="84">กลายเป็นผู้ดำเนินรายการ</entry>
+  <entry key="85">ปิด</entry>
+  <entry key="86">ตัวเอียง</entry>
+  <entry key="87">ตัวหนา</entry>
+  <entry key="88">กำลังรอ</entry>
+  <entry key="89">ผู้ใช้ต้องการสมัครเป็นผู้ดำเนินรายการ:</entry>
+  <entry key="90">ยอมรับ</entry>
+  <entry key="91">ปฏิเสธ</entry>
+  <entry key="92">ยกเลิก</entry>
+  <entry key="93">ส่งคำขอไปยังผู้ใช้ดังต่อไปนี้</entry>
+  <entry key="94">ยอมรับแล้ว</entry>
+  <entry key="95">ปฏิเสธแล้ว</entry>
+  <entry key="96">เปลี่ยนผู้ดำเนินรายการ</entry>
+  <entry key="97">คุณไม่ได้กำลังดำเนินหลักสูตรนี้!</entry>
+  <entry key="98">ผู้ดำเนินรายการ:</entry>
+  <entry key="99">ห้องนี้เต็มแล้ว ขออภัย โปรดลองใหม่ภายหลัง</entry>
+  <entry key="100">วงรี</entry>
+  <entry key="101">ปิด</entry>
+  <entry key="102">ข้อมูลที่กรอกขัดข้อง</entry>
+  <entry key="103">ตัวอักษร 4 ตัวขึ้นไป อักษรตัวใหญ่มีผลสำคัญ</entry>
+  <entry key="104">รหัสผู้ใช้ต้องมีตัวอักษรอย่างน้อย 4 ตัว</entry>
+  <entry key="105">มีผู้ใช้ชื่อนี้ไปแล้ว</entry>
+  <entry key="106">อีเมล์นี้ลงทะเบียนไปแล้ว</entry>
+  <entry key="107">ระบบขัดข้อง โปรดติดต่อผู้ดูแลระบบ</entry>
+  <entry key="108">ล็อคอิน</entry>
+  <entry key="109">ผู้ใช้:</entry>
+  <entry key="110">รหัสผ่าน:</entry>
+  <entry key="111">ภาษา</entry>
+  <entry key="112">ลงชื่อเข้าใช้</entry>
+  <entry key="113">ลงทะเบียน</entry>
+  <entry key="114">ผู้ใช้:</entry>
+  <entry key="115">รหัสผ่าน:</entry>
+  <entry key="116">พิมพ์ซ้ำ:</entry>
+  <entry key="117">ชื่อ:</entry>
+  <entry key="118">นามสกุล:</entry>
+  <entry key="119">อีเมล์:</entry>
+  <entry key="120">ประเทศ:</entry>
+  <entry key="121">ลงทะเบียน</entry>
+  <entry key="122">ยกเลิก</entry>
+  <entry key="123">ไม่ได้เป็นสมาชิก?</entry>
+  <entry key="124">หน้าแรก</entry>
+  <entry key="125">ผู้ใช้</entry>
+  <entry key="126">กลุ่ม</entry>
+  <entry key="127">องค์กร</entry>
+  <entry key="128">ห้องประชุม</entry>
+  <entry key="129">สาธารณะ</entry>
+  <entry key="130">องค์กร</entry>
+  <entry key="131">เข้าห้อง</entry>
+  <entry key="132">ล็อกอิน</entry>
+  <entry key="133">รหัสผ่าน</entry>
+  <entry key="134">พิมพ์ซ้ำ</entry>
+  <entry key="135">ชื่อ</entry>
+  <entry key="136">นามสกุล</entry>
+  <entry key="137">อีเมล์</entry>
+  <entry key="138">วันเกิด</entry>
+  <entry key="139">ถนน/เลขที่</entry>
+  <entry key="140">รหัสไปรษณีย์/จังหวัด</entry>
+  <entry key="141">ประเทศ</entry>
+  <entry key="142">ข้อมูลที่อยู่</entry>
+  <entry key="143">ข้อมูลผู้ใช้</entry>
+  <entry key="144">บันทึก</entry>
+  <entry key="145">บันทึก</entry>
+  <entry key="146">หมายเลขประจำตัวผู้ใช้</entry>
+  <entry key="147">ล็อคอิน</entry>
+  <entry key="148">ชื่อ</entry>
+  <entry key="149">นามสกุล</entry>
+  <entry key="150">แสดงถัดไป</entry>
+  <entry key="151">แสดงก่อนหน้านี้</entry>
+  <entry key="152">ลบบันทึก</entry>
+  <entry key="153">ยกเลิก</entry>
+  <entry key="154">ลบ</entry>
+  <entry key="155">บันทึกใหม่</entry>
+  <entry key="156">รีเฟรชบันทึก</entry>
+  <entry key="157">ลบบันทึก</entry>
+  <entry key="158">สถานะ</entry>
+  <entry key="159">ยกเลิกแล้ว</entry>
+  <entry key="160">ใช้งานแล้ว</entry>
+  <entry key="161">องค์กร</entry>
+  <entry key="162">ปฏิทิน</entry>
+  <entry key="163">ปิด</entry>
+  <entry key="164">หมายเลขประจำองค์กร</entry>
+  <entry key="165">ชื่อ</entry>
+  <entry key="166">ผู้ใช้</entry>
+  <entry key="167">ผู้ดำเนินรายการ</entry>
+  <entry key="168">ผู้ดูแล</entry>
+  <entry key="169">ระดับผู้ใช้</entry>
+  <entry key="170">องค์กร</entry>
+  <entry key="171">ชื่อ</entry>
+  <entry key="172">เพิ่มองค์กร</entry>
+  <entry key="173">เพิ่มองค์กร</entry>
+  <entry key="174">ยกเลิก</entry>
+  <entry key="175">เพิ่ม</entry>
+  <entry key="176">ย้ายองค์กรออก</entry>
+  <entry key="177">ผู้ใช้</entry>
+  <entry key="178">เพิ่มผู้ใช้</entry>
+  <entry key="179">ลบผู้ใช้</entry>
+  <entry key="180">เพิ่มผู้ใช้</entry>
+  <entry key="181">ค้นหาผู้ใช้</entry>
+  <entry key="182">ค้นหา</entry>
+  <entry key="183">ผู้ใช้</entry>
+  <entry key="184">องค์กร</entry>
+  <entry key="185">ป้อนข้อมูล</entry>
+  <entry key="186">ห้องประชุมกลุ่ม</entry>
+  <entry key="187">ห้องประชุมกลุ่ม</entry>
+  <entry key="188">หมายเลขประจำตัว</entry>
+  <entry key="189">ชื่อ</entry>
+  <entry key="190">สาธารณะ</entry>
+  <entry key="191">องค์กร</entry>
+  <entry key="192">ห้องประชุม</entry>
+  <entry key="193">ชื่อ</entry>
+  <entry key="194">ประเภท</entry>
+  <entry key="195">สาธารณะ</entry>
+  <entry key="196">ข้อคิดเห็น</entry>
+  <entry key="197">บันทึกและเอ็กซ์พอร์ต</entry>
+  <entry key="198">โหลด</entry>
+  <entry key="199">บันทึกเป็น</entry>
+  <entry key="200">ชื่อไฟล์</entry>
+  <entry key="201">ชื่อไฟล์</entry>
+  <entry key="202">ยกเลิก</entry>
+  <entry key="203">ยกเลิก</entry>
+  <entry key="204">ขัดข้อง</entry>
+  <entry key="205">กำลังโหลด</entry>
+  <entry key="206">รายการที่โหลดแล้ว</entry>
+  <entry key="207">กำลังซิงค์โครไนซ์ลูกค้าอยู่ ลูกค้าต้องรอ:</entry>
+  <entry key="208">กำลังโหลดข้อมูลรูปภาพ</entry>
+  <entry key="209">กำลังซิงค์โครไนซ์ลูกค้าอยู่ ลูกค้าต้องรอ:</entry>
+  <entry key="210">ลบบริเวณวาดรูป</entry>
+  <entry key="211">ลบบริเวณวาดรูป ข้อมูลทั้งหมดบนไวท์บอร์ดจะสูญหายไป</entry>
+  <entry key="212">ยืนยันก่อนโหลดไฟล์</entry>
+  <entry key="213">ส่งคำเชิญ</entry>
+  <entry key="214">ส่งคำเชิญ</entry>
+  <entry key="215">เรื่อง</entry>
+  <entry key="216">ผู้รับ</entry>
+  <entry key="217">ข้อความ</entry>
+  <entry key="218">ส่ง</entry>
+  <entry key="219">ยกเลิก</entry>
+  <entry key="220">ส่ง</entry>
+  <entry key="221">ข้อมูลผู้ใช้</entry>
+  <entry key="222">ชื่อเล่นของคุณในการประชุมครั้งนี้</entry>
+  <entry key="223">ชื่อเล่น</entry>
+  <entry key="224">ชื่อ</entry>
+  <entry key="225">นามสกุล</entry>
+  <entry key="226">อีเมล์</entry>
+  <entry key="227">ภาษา</entry>
+  <entry key="228">ป้อนข้อมูล</entry>
+  <entry key="229">กำลังโหลด</entry>
+  <entry key="230">กำลังดาวน์โหลดข้อมูล โปรดรอสักครู่!</entry>
+  <entry key="231">รหัสผ่านผิด</entry>
+  <entry key="232">โปรดใส่รหัสผ่านสองครั้งให้ตรงกันโดยมีตัวอักษรอย่างน้อย 6 ตัว</entry>
+  <entry key="233">อีเมล์ผิด</entry>
+  <entry key="234">อีเมล์ที่คุณกรอกไม่ถูกต้อง</entry>
+  <entry key="235">การลงทะเบียนเสร็จสมบูรณ์</entry>
+  <entry key="236">จัดทำบัญชีของคุณเสร็จเรียบร้อยแล้ว คุณสามารถล็อคอินได้แล้ว</entry>
+  <entry key="237">คุณไม่สามารถแชร์หน้าจอได้ในขณะนี้ มีใครบางคนแชร์หน้าจอไปแล้ว</entry>
+  <entry key="238">ห้ามแชร์</entry>
+  <entry key="239">แชร์หน้าจอ</entry>
+  <entry key="240">แบนด์วิธไม่ดี: คุณไม่สามารถซิงค์โครไนซ์หน้าจอได้ เฟรมต่างๆ จะถูกทิ้งไป หากมีคำเตือนนี้ปรากฏบ่อยครั้ง ควรขอให้ผู้ดำเนินรายการลดคุณภาพหน้าจอ</entry>
+  <entry key="241">หน้าจอของ:</entry>
+  <entry key="242">ระบายสี</entry>
+  <entry key="243">เอกสาร</entry>
+  <entry key="244">แชท</entry>
+  <entry key="245">ไฟล์</entry>
+  <entry key="246">สมาชิก</entry>
+  <entry key="247">ดาวน์โหลดเอกสารต้นฉบับ</entry>
+  <entry key="248">ดาวน์โหลดเอกสาร PDF</entry>
+  <entry key="249">โหลดการนำเสนอไปยังไวท์บอร์ด</entry>
+  <entry key="250">การปรับแต่งค่า</entry>
+  <entry key="251">ลากรายการนี้</entry>
+  <entry key="252">ปรับขนาดรายการนี้</entry>
+  <entry key="253">%</entry>
+  <entry key="254">ของ</entry>
+  <entry key="255">ไปยังหน้าแรก</entry>
+  <entry key="256">ไปยังหน้าก่อนนี้</entry>
+  <entry key="257">ไปยังหน้าถัดไป</entry>
+  <entry key="258">ไปยังหน้าสุดท้าย</entry>
+  <entry key="259">ขยายย่อ --</entry>
+  <entry key="260">ขยายใหญ่ ++</entry>
+  <entry key="261">นาย</entry>
+  <entry key="262">นางสาว</entry>
+  <entry key="263">การปรับแต่งค่า</entry>
+  <entry key="264">หมายเลขประจำตัว</entry>
+  <entry key="265">ปุ่ม</entry>
+  <entry key="266">การปรับแต่งค่า</entry>
+  <entry key="267">ปุ่ม</entry>
+  <entry key="268">อัพเดทล่าสุด</entry>
+  <entry key="269">อัพเดทโดย</entry>
+  <entry key="270">ข้อคิดเห็น</entry>
+  <entry key="271">ค่า</entry>
+  <entry key="272">ของ</entry>
+  <entry key="273">ผู้ใช้</entry>
+  <entry key="274">ลบผู้ใช้ออกจากองค์กร</entry>
+  <entry key="275">ลบ</entry>
+  <entry key="276">ผู้ใช้รายนี้เป็นสมาชิกขององค์กรนี้อยู่แล้ว</entry>
+  <entry key="277">ข่าวสาร</entry>
+  <entry key="278">ควิกลิงค์</entry>
+  <entry key="279">ไปยังการประชุม</entry>
+  <entry key="280">ไปยังหอประชุม</entry>
+  <entry key="281">ข้อมูลช่วยเหลือและสนับสนุน</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">รายงานเหตุขัดข้อง!</entry>
+  <entry key="285">เพิ่มเติม</entry>
+  <entry key="286">เว็บไซต์ของโครงการ (http://openmeetings.apache.org)</entry>
+  <entry key="287">รายชื่ออีเมล์ของผู้ใช้ (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">จำชื่อล็อคอิน</entry>
+  <entry key="289">เนื้อหา</entry>
+  <entry key="290">หน้าหลักของฉัน</entry>
+  <entry key="291">การประชุมที่นัดหมายไว้ของฉัน</entry>
+  <entry key="292">งานที่นัดหมายไว้ของฉัน</entry>
+  <entry key="293">การประชุมสาธารณะ</entry>
+  <entry key="294">การประชุมส่วนตัว</entry>
+  <entry key="295">งานสาธารณะ</entry>
+  <entry key="296">งานส่วนตัว</entry>
+  <entry key="297">เนื้อหาสาธารณะ</entry>
+  <entry key="298">เนื้อหาส่วนตัว</entry>
+  <entry key="299">เนื้อหาส่วนบุคคล</entry>
+  <entry key="300"></entry>
+  <entry key="301">การดำเนินรายการ</entry>
+  <entry key="302">สมัครเพื่อทำหน้าที่ดำเนินรายการ</entry>
+  <entry key="303">โพลล์</entry>
+  <entry key="304">เลือกไฟล์</entry>
+  <entry key="305">การตั้งค่า</entry>
+  <entry key="306">การตั้งค่ากล้องและไมโครโฟน</entry>
+  <entry key="307">การตั้งค่าไวท์บอร์ด</entry>
+  <entry key="308">ออก</entry>
+  <entry key="309">กลับไปยังห้อง</entry>
+  <entry key="310">ล็อคเอ้าท์</entry>
+  <entry key="311">ลืมรหัสผ่าน?</entry>
+  <entry key="312">ตั้งรหัสผ่านใหม่</entry>
+  <entry key="313">โดยอีเมล์</entry>
+  <entry key="314">โดยชื่อล็อคอิน</entry>
+  <entry key="315">อีเมล์ของคุณ</entry>
+  <entry key="316">ชื่อล็อคอินของคุณ</entry>
+  <entry key="317">ส่งอีเมล์พร้อมลิงค์สำหรับตั้งรหัสผ่านใหม่</entry>
+  <entry key="318">ไม่พบอีเมล์แอดเดรสดังกล่าว ดูให้แน่ใจว่าคุณกรอกอีเมล์แอดเดรสเดียวกับที่คุณใช้ในการจัดทำบัญชีของคุณ</entry>
+  <entry key="319">โปรดกรอกอีเมล์หรือชื่อผู้ใช้</entry>
+  <entry key="320">ไม่มีผู้ใช้รายใดเชื่อมต่อกับชื่อผู้ใช้รายนี้</entry>
+  <entry key="321">ได้ส่งอีเมล์ซึ่งมีลิงค์พิเศษไปยังอีเมล์แอดเดรสของคุณแล้ว โปรดเช็คอีเมล์ด้วย หากยังคงไม่ได้รับอีเมล์ โปรดปรับการตั้งค่าอีเมล์สแปมและส่งอีเมล์ยืนยันใหม่อีกครั้ง</entry>
+  <entry key="322">ขัดข้อง</entry>
+  <entry key="323">ข้อความ</entry>
+  <entry key="324">รหัสผ่านไม่ถูกต้อง ไม่พบผู้ใช้</entry>
+  <entry key="325">ตั้งรหัสผ่านของคุณใหม่</entry>
+  <entry key="326">ล็อคอิน</entry>
+  <entry key="327">เปลี่ยนรหัสผ่าน</entry>
+  <entry key="328">รหัสผ่านใหม่</entry>
+  <entry key="329">กรอกรหัสผ่านใหม่</entry>
+  <entry key="330">รหัสผ่านที่คุณกรอกไม่ตรงกัน</entry>
+  <entry key="331">ตัวอักษร 4 ตัวขึ้นไป อักษรตัวใหญ่มีผลสำคัญ</entry>
+  <entry key="332">ตั้งรหัสผ่านแล้ว คุณสามารถล็อคอินได้แล้ว</entry>
+  <entry key="333">ตกลง</entry>
+  <entry key="334">ขัดข้องโดยไม่ทราบสาเหตุ โปรดรายงานต่อทีมบริการของคุณ</entry>
+  <entry key="335">ไม่พบชื่อผู้ใช้</entry>
+  <entry key="336">รหัสผ่านไม่ถูกต้อง</entry>
+  <entry key="337">ออกจากระบบเรียบร้อยแล้ว</entry>
+  <entry key="338">การลงทะเบียนถูกยกเลิกแล้ว</entry>
+  <entry key="339">อีเมล์ไม่ถูกต้อง</entry>
+  <entry key="340">ชื่อไฟล์ซ้ำ โปรดเลือกชื่อไฟล์อื่น</entry>
+  <entry key="341">ชื่อไฟล์สั้นเกินไป</entry>
+  <entry key="342">บันทึกที่อยู่ไม่ได้</entry>
+  <entry key="343">เพิ่มผู้ใช้แล้ว แต่คุณต้องมอบหมายผู้ใช้รายนี้ให้แก่องค์กรใดองค์กรหนึ่ง มิฉะนั้นเขาจะไม่สามารถลงชื่อเข้าใช้ได้</entry>
+  <entry key="344">บันทึกใหม่</entry>
+  <entry key="345">ไม่พบฟิลด์ที่มาพร้อมกับหมายเลขฟิลด์นี้</entry>
+  <entry key="346">ไม่พบป้ายชื่อสำหรับฟิลด์นั้น</entry>
+  <entry key="347">ต้องใช้การอนุญาตจากผู้ดูแล</entry>
+  <entry key="348">โปรแกรมแก้ไขภาษา</entry>
+  <entry key="349">ภาษา</entry>
+  <entry key="350">หมายเลขประจำป้าย</entry>
+  <entry key="351">ป้ายชื่อ</entry>
+  <entry key="352">ค่า</entry>
+  <entry key="353">ค่าฟิลด์</entry>
+  <entry key="354">ป้ายชื่อ</entry>
+  <entry key="355">ค่าป้าย</entry>
+  <entry key="356">หมายเลขประจำป้าย</entry>
+  <entry key="357">คุณลบแต่ป้ายเท่านั้น ไม่ได้ลบฟิลด์! คุณลบฟิลด์ไม่ได้ อาจเป็นเพราะว่าฟิลด์มีป้ายเป็นภาษาอื่น</entry>
+  <entry key="358">หมายเลขประจำป้ายไม่ถูกต้อง ไม่พบหมายเลขประจำค่าภาษาของฟิลด์นั้นในฐานข้อมูล</entry>
+  <entry key="359">คุณลบฟิลด์นี้ไม่ได้ คุณลบได้แต่เพียงป้ายเท่านั้น ลบฟิลด์ไม่ได้ ไม่มีการโหลดป้ายในขณะนี้ อาจเป็นเพราะว่าไม่ได้เลือกฟิลด์ใดเลยหรือว่าไม่มีป้ายสำหรับภาษานี้สำหรับฟิลด์ที่กำหนด</entry>
+  <entry key="360">เอ็กซ์พอร์ต</entry>
+  <entry key="361">คุณจะต้องออกจากระบบก่อน จึงจะเห็นการเปลี่ยนแปลง</entry>
+  <entry key="362">เพิ่มภาษาใหม่</entry>
+  <entry key="363">ลบภาษา</entry>
+  <entry key="364">เพิ่มภาษาใหม่</entry>
+  <entry key="365">ชื่อ</entry>
+  <entry key="366">เพิ่มภาษา</entry>
+  <entry key="367">สำรองข้อมูล</entry>
+  <entry key="368">ไปยังหน้าแรก</entry>
+  <entry key="369">ไปยังหน้าก่อนนี้</entry>
+  <entry key="370">ไปยังหน้าถัดไป</entry>
+  <entry key="371">ไปยังหน้าสุดท้าย</entry>
+  <entry key="372">ผู้ใช้พูด (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">เปิด/ปิดเสียง</entry>
+  <entry key="374">ระบบ</entry>
+  <entry key="375">การตั้งค่าของคุณ</entry>
+  <entry key="376">สวัสดี</entry>
+  <entry key="377">แก้ไขโปรไฟล์ของคุณ</entry>
+  <entry key="378">ข้อความใหม่:</entry>
+  <entry key="379">อัพโหลดภาพใหม่ๆ</entry>
+  <entry key="380">ข้อมูลผู้ใช้ - เอ็กซ์พอร์ต</entry>
+  <entry key="381">ต้องมีทุกองค์กรอยู่ก่อนแล้ว</entry>
+  <entry key="382">เริ่มเอ็กซ์พอร์ต</entry>
+  <entry key="383">โดยองค์กร</entry>
+  <entry key="384">เริ่มเอ็กซ์พอร์ต</entry>
+  <entry key="385">ข้อมูลผู้ใช้ - อิมพอร์ต</entry>
+  <entry key="386">เลือกผู้ใช้.xml</entry>
+  <entry key="387">อิมพอร์ต</entry>
+  <entry key="388">เอ็กซ์พอร์ตไปยัง XML – ไฟล์เหล่านี้สามารถใช้เพื่อ – ส่งเสริมโครงการ – อิมพอร์ตไปยังระบบอื่น – สำรองข้อมูล – การปรับตามความต้องการ - ใส่ไว้ในรายชื่อภาษาสำหรับการติดตั้งครั้งต่อไป</entry>
+  <entry key="389">เลือกไฟล์ภาษาเพื่ออิมพอร์ต เลือกภาษาที่ถูกต้องจาก Combobox! ไม่ว่าชื่อไฟล์จะเป็นอะไรก็ตาม ก็จะอิมพอร์ตเป็นภาษานี้!</entry>
+  <entry key="390">อิมพอร์ต - เลือกไฟล์</entry>
+  <entry key="391">บันทึกเป็น</entry>
+  <entry key="392">ชื่อ:</entry>
+  <entry key="393">ข้อคิดเห็น:</entry>
+  <entry key="394">บันทึก</entry>
+  <entry key="395">บันทึก</entry>
+  <entry key="396">บันทึกผู้ชม</entry>
+  <entry key="397">บันทึกห้องสาธารณะและห้องส่วนตัว</entry>
+  <entry key="398">ผู้ใช้:</entry>
+  <entry key="399">เข้าร่วม:</entry>
+  <entry key="400"></entry>
+  <entry key="401">ผู้ใช้ในห้องนี้:</entry>
+  <entry key="402">รีเฟรช</entry>
+  <entry key="403">ห้องนี้เต็มแล้ว อีกสักครู่โปรดลองใหม่</entry>
+  <entry key="404">คลิกที่ห้องเพื่อดูรายละเอียด</entry>
+  <entry key="405">แชทกับผู้ใช้ในห้องนี้</entry>
+  <entry key="406">ห้อง:</entry>
+  <entry key="407">ผู้ใช้ในห้องนี้:</entry>
+  <entry key="408">ตั้งแต่:</entry>
+  <entry key="409">เล่นบันทึก</entry>
+  <entry key="410">ความยาว</entry>
+  <entry key="411">วันที่</entry>
+  <entry key="412">โหมดการบันทึก! คุณไม่สามารถเปลี่ยนแปลงค่าใดๆ ได้ ไฟล์นี้ได้รับการบันทึกไว้แล้ว</entry>
+  <entry key="413">เล่นบันทึกนี้</entry>
+  <entry key="414">เล่น / หยุดชั่วคราว</entry>
+  <entry key="415">เริ่มการบันทึก</entry>
+  <entry key="416">หยุดการบันทึก</entry>
+  <entry key="417">Recording: / บันทึก:</entry>
+  <entry key="418">มีคนกำลังบันทึกอยู่ในขณะนี้</entry>
+  <entry key="419">กำลังบันทึก! โดยผู้ใช้:</entry>
+  <entry key="420">ยกเลิก</entry>
+  <entry key="421">การบันทึกจะถูกยกเลิกและไม่บันทึกไว้</entry>
+  <entry key="422">เล่นต่อ</entry>
+  <entry key="423">ปิดหน้าต่างนี้และกลับเข้าสู่การบันทึก</entry>
+  <entry key="424">เปลี่ยนสีเส้น</entry>
+  <entry key="425">เลือกสี</entry>
+  <entry key="426">ยกเลิก / เริ่มใช้เส้นสี</entry>
+  <entry key="427">เปลี่ยนสีเติม</entry>
+  <entry key="428">ยกเลิก / เริ่มใช้สีเติม</entry>
+  <entry key="429">เปลี่ยนความหนาของเส้น</entry>
+  <entry key="430">ปิด</entry>
+  <entry key="431">เปลี่ยนขนาดตัวอักษร</entry>
+  <entry key="432">ลบการบันทึก</entry>
+  <entry key="433">แขก</entry>
+  <entry key="434">โดย:</entry>
+  <entry key="435">ชื่อ</entry>
+  <entry key="436">ห้อง</entry>
+  <entry key="437">วันที่</entry>
+  <entry key="438">ยกเลิก</entry>
+  <entry key="439">เริ่ม</entry>
+  <entry key="440">ชื่อ</entry>
+  <entry key="441">วันที่</entry>
+  <entry key="442">ลบเซิร์ฟเวอร์-บันทึกการแชท</entry>
+  <entry key="443">แชท</entry>
+  <entry key="444">ส่งข้อความ</entry>
+  <entry key="445">อีโมติคอน</entry>
+  <entry key="446">อีโมติคอน</entry>
+  <entry key="447">เลือกอุปกรณ์ที่ใช้เผยแพร่</entry>
+  <entry key="448">เสียงและภาพวีดีโอ</entry>
+  <entry key="449">เสียงเท่านั้น</entry>
+  <entry key="450">ภาพวีดีโอเท่านั้น</entry>
+  <entry key="451">ไม่มีเสียง/ภาพวีดีโอ (ภาพนิ่ง)</entry>
+  <entry key="452">ไม่เผยแพร่เสียง/ภาพวีดีโอจากเครื่องคอมพิวเตอร์ของคุณสู่สาธารณะ โดยที่จะแสดงภาพจากโปรโฟล์ของคุณแทน ควรเลือกการตั้งค่าเหล่านี้หากคุณมีปัญหากับแบนด์วิธหรืออินเตอร์เน็ตช้ามาก</entry>
+  <entry key="453">จ</entry>
+  <entry key="454">อ</entry>
+  <entry key="455">พ</entry>
+  <entry key="456">พฤ</entry>
+  <entry key="457">ศ</entry>
+  <entry key="458">ส</entry>
+  <entry key="459">อา</entry>
+  <entry key="460">วันจันทร์</entry>
+  <entry key="461">วันอังคาร</entry>
+  <entry key="462">วันพุธ</entry>
+  <entry key="463">วันพฤหัสบดี</entry>
+  <entry key="464">วันศุกร์</entry>
+  <entry key="465">วันเสาร์</entry>
+  <entry key="466">วันอาทิตย์</entry>
+  <entry key="467">สัปดาห์</entry>
+  <entry key="468">สัปดาห์ตามปฏิทิน</entry>
+  <entry key="469">มกราคม</entry>
+  <entry key="470">กุมภาพันธ์</entry>
+  <entry key="471">มีนาคม</entry>
+  <entry key="472">เมษายน</entry>
+  <entry key="473">พฤษภาคม</entry>
+  <entry key="474">มิถุนายน</entry>
+  <entry key="475">กรกฎาคม</entry>
+  <entry key="476">สิงหาคม</entry>
+  <entry key="477">กันยายน</entry>
+  <entry key="478">ตุลาคม</entry>
+  <entry key="479">พฤศจิกายน</entry>
+  <entry key="480">ธันวาคม</entry>
+  <entry key="481">ปฏิทิน</entry>
+  <entry key="482">ผู้เข้าร่วม</entry>
+  <entry key="483">แสดงการตั้งค่าโครงร่าง</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">กว้าง | สูง</entry>
+  <entry key="486">กล่องวีดีโอ</entry>
+  <entry key="487">กล่องการดำเนินรายการ</entry>
+  <entry key="488">X</entry>
+  <entry key="489">กล่องไวท์บอร์ด</entry>
+  <entry key="490">ดำเนินการแล้ว</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">กว้าง | สูง</entry>
+  <entry key="493">กล่องไฟล์ แชท ผู้เข้าร่วม</entry>
+  <entry key="494">ดำเนินการแล้ว</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">กว้าง | สูง</entry>
+  <entry key="497">ผู้ดำเนินรายการออกจากห้องไปแล้ว ไม่มีใครอยู่ในขณะนี้ คุณสามารถสมัครเพื่อทำหน้าที่ดำเนินรายการได้หรือรอ</entry>
+  <entry key="498">ผู้ดำเนินรายการออกจากห้องไปแล้ว แต่มีผู้เข้าร่วมบางรายอยู่ คุณต้องสมัครเพื่อทำหน้าที่ดำเนินรายการหรือรอ</entry>
+  <entry key="499">ผลตอบรับการประชุมแบบเปิด</entry>
+  <entry key="500">การประชุมแบบเปิด – คำเชิญ</entry>
+  <entry key="501">ข้อความจากผู้ใช้</entry>
+  <entry key="502">ข้อความ</entry>
+  <entry key="503">คลิกลิงค์นี้เพื่อเข้าร่วมการประชุม</entry>
+  <entry key="504">คลิกที่นี่เพื่อเข้าห้อง</entry>
+  <entry key="505">หากมีปัญหากับลิงค์นี้ โปรดคัดลอกลิงค์นี้แล้วนำไปวางที่เบราวเซอร์:</entry>
+  <entry key="506">ลงทะเบียนการประชุมแบบเปิด</entry>
+  <entry key="507">ข้อมูลผู้ใช้ของคุณ:</entry>
+  <entry key="508">ชื่อล็อคอิน:</entry>
+  <entry key="509">รหัสผ่าน:</entry>
+  <entry key="510">อีเมล์:</entry>
+  <entry key="511">การประชุมแบบเปิด - ทีม</entry>
+  <entry key="512">ลงทะเบียนการประชุมแบบเปิด</entry>
+  <entry key="513">การประชุมแบบเปิด - ตั้งรหัสผ่านใหม่</entry>
+  <entry key="514">คลิกลิงค์นี้เพื่อกรอกรหัสผ่านใหม่:</entry>
+  <entry key="515">คลิกที่นี่เพื่อกรอกรหัสผ่านใหม่</entry>
+  <entry key="516">หากมีปัญหากับลิงค์นี้ โปรดคัดลอกลิงค์นี้แล้วนำไปวางที่เบราวเซอร์:</entry>
+  <entry key="517">การประชุมแบบเปิด ตั้งรหัสผ่านใหม่</entry>
+  <entry key="518">โปรดกรอกวันที่ที่ถูกต้อง ตัวอย่างเช่น 24/12/2001 (วว/ดด/ปปปป)</entry>
+  <entry key="519">โปรดกรอกอีเมล์ที่ถูกต้อง ตัวอย่างเช่น name@mail.com</entry>
+  <entry key="520">โปรดกรอกตัวเลขที่มีจุดทศนิยม เช่น 1.00</entry>
+  <entry key="521">โปรดกรอกตัวเลข (จำนวนเต็ม) ตัวอย่างเช่น 100</entry>
+  <entry key="522">โปรดกรอกหมายเลขโทรศัพท์ที่ถูกต้อง ตัวอย่างเช่น ++49 0123 123123</entry>
+  <entry key="523">โปรดกรอกเวลาที่ถูกต้อง เช่น 12.33 (ชช.นน)</entry>
+  <entry key="524">ป้องกันรหัสผ่านแล้ว</entry>
+  <entry key="525">รหัสผ่าน</entry>
+  <entry key="526">ระยะเวลาที่ใช้การได้</entry>
+  <entry key="527">ไม่จำกัด</entry>
+  <entry key="528">จำกัดระยะเวลา</entry>
+  <entry key="529">ใช้ครั้งเดียว</entry>
+  <entry key="530">ใช้งานได้ตั้งแต่:</entry>
+  <entry key="531">ถึง:</entry>
+  <entry key="532">คำเชิญเข้าสู่การประชุมแบบเปิด</entry>
+  <entry key="533">ไม่มีคำเชิญสำหรับรหัสคำเชิญนี้</entry>
+  <entry key="534">คำเชิญนี้ใช้ไปแล้ว คำเชิญประเภทนี้ไม่สามารถใช้ซ้ำได้</entry>
+  <entry key="535">รหัสคำเชิญนี้ไม่ถูกต้อง</entry>
+  <entry key="536">รหัสผ่าน:</entry>
+  <entry key="537">ตรวจสอบรหัสผ่าน</entry>
+  <entry key="538">รหัสผ่านไม่ถูกต้อง!</entry>
+  <entry key="539">เสียง_ภาพวีดีโอ</entry>
+  <entry key="540">ซิงค์โครไนซ์เสียง/ภาพวีดีโอ</entry>
+  <entry key="541">ล็อคอินถูกต้อง แต่หมวดที่คุณล็อกอินนั้นไม่ได้ใช้งานอยู่หรือไม่ได้จัดเก็บไว้ในเซิร์ฟเวอร์ คุณจะต้องขอหมายเลขประจำหมวดใหม่และลองล็อกอินอีกครั้ง</entry>
+  <entry key="542">ยังไม่ได้ล็อคอินหมายเลขประจำหมวดหรือไม่มีสิทธิ์ของผู้ดูแล SOAP Gateway จำเป็นต้องใช้ผู้ใช้ที่สิทธิ์ของผู้ดูแลในการฝากฝังผู้ใช้รายใหม่</entry>
+  <entry key="543">หมวดนี้ไม่มีการเชื่อมต่อข้อมูลผู้ใช้ระยะไกล อาจเป็นเพราะว่าคุณไม่ได้เรียก SOAP-Gateway ก่อนที่จะเข้าใช้โปรแกรมหรือว่าคุณใช้หมายเลขประจำหมวดผิด</entry>
+  <entry key="544">ตัวบันทึกในปัจจุบันอยู่ในช่วงทดลองใช้!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">แกน x</entry>
+  <entry key="547">y</entry>
+  <entry key="548">แกน y</entry>
+  <entry key="549">กว้าง</entry>
+  <entry key="550">ความกว้าง</entry>
+  <entry key="551">สูง</entry>
+  <entry key="552">ความสูง</entry>
+  <entry key="553">เปลี่ยนความโปร่งแสง</entry>
+  <entry key="554">เปิดเบราวเซอร์</entry>
+  <entry key="555">ปิดเบราวเซอร์</entry>
+  <entry key="556">การเชื่อมต่อกับเซิร์ฟเวอร์ขาดลง คุณจำเป็นต้องโหลดโปรแกรมใหม่หรือ/และตรวจสอบเครือข่ายของคุณ</entry>
+  <entry key="557">พอยเตอร์</entry>
+  <entry key="558">กำลังซิงค์โครไนซ์</entry>
+  <entry key="559">กำลังซิงค์โครไนซ์กับผู้ใช้ โปรดรอสักครู่</entry>
+  <entry key="560">&lt;u&gt;ดาวน์โหลดเป็น SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;ดาวน์โหลดเป็น PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;ดาวน์โหลดเป็น JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;ดาวน์โหลดเป็น PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;ดาวน์โหลดเป็น TIF&lt;/u&gt;</entry>
+  <entry key="565">เตือนความจำ:</entry>
+  <entry key="566">ประเภท:</entry>
+  <entry key="567">การทำซ้ำ:</entry>
+  <entry key="568">ไม่มี</entry>
+  <entry key="569">สถานที่ตั้ง:</entry>
+  <entry key="570">เริ่ม</entry>
+  <entry key="571">สิ้นสุด</entry>
+  <entry key="572">หัวข้อ:</entry>
+  <entry key="573">ข้อคิดเห็น:</entry>
+  <entry key="574">เชิญผู้อื่น</entry>
+  <entry key="575">รายวัน</entry>
+  <entry key="576">รายเดือน</entry>
+  <entry key="577">รายปี</entry>
+  <entry key="578">การสิ้นสุดการนัดต้องเป็นหลังจากการเริ่มต้นการนัด!</entry>
+  <entry key="579">โปรดแทรกหัวข้อ!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">เปิดใช้งานส่วนนี้หากภาษาที่คุณใช้เป็นแบบขวาไปซ้าย (การเรียงคำกลับกัน)</entry>
+  <entry key="582">แดชบอร์ด</entry>
+  <entry key="583">ชมการประชุมและงานอีเวนท์ที่บันทึกไว้</entry>
+  <entry key="584">การประชุม - เปิดการประชุมตั้งแต่ผู้ใช้ 4 รายขึ้นไป (มากที่สุด 16 ราย)&lt;br/&gt;ทุกท่านสามารถเข้าใช้เสียง + ภาพวีดีโอได้</entry>
+  <entry key="585">งานอีเวนท์ - เปิดการประชุมโดยมีผู้เข้าร่วมได้มากที่สุด 200 ราย&lt;br/&gt;ผู้ดำเนินรายการเท่านั้นที่สามารถใช้เสียง/ภาพวีดีโอได้</entry>
+  <entry key="586">สร้างผู้ใช้ ห้อง องค์กร&lt;br/&gt; + เปลี่ยนการปรับแต่งค่า</entry>
+  <entry key="587">Users in this Room now</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Loading Document. Please wait untill all Client have been synchronized.</entry>
+  <entry key="592">Upload complete, converting Document ...</entry>
+  <entry key="593">Start Upload</entry>
+  <entry key="594">Upload and Import Dialog. Please select a File from your Disk.</entry>
+  <entry key="595">Cancel</entry>
+  <entry key="596">Select File</entry>
+  <entry key="597">Connections</entry>
+  <entry key="598">Value</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connected since</entry>
+  <entry key="602">Room / Scope</entry>
+  <entry key="603">Kick User</entry>
+  <entry key="604">Kick User</entry>
+  <entry key="605">Do you really want to kick this Client from the Connection?&lt;br/&gt; This does only remove the Client from the current Room.The Client could re-login again.</entry>
+  <entry key="606">Your session has been closed by an Administrator or Moderator.</entry>
+  <entry key="607">Phone</entry>
+  <entry key="608">User is the Moderator of this Room</entry>
+  <entry key="609">User is allowed to draw on the Whiteboard</entry>
+  <entry key="610">(Re) Start Audio/Video or change Device Settings</entry>
+  <entry key="611">Allow this User to draw on the Whiteboard</entry>
+  <entry key="612">Remove ability to draw on whiteboard</entry>
+  <entry key="613">Users</entry>
+  <entry key="614">Files</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Your account is assigned to multiple Organizations. Please choose one for this Session.</entry>
+  <entry key="618">This room is full at the moment. Please try again later.</entry>
+  <entry key="619">Room Type</entry>
+  <entry key="620">Appointment Room</entry>
+  <entry key="621">Server Time</entry>
+  <entry key="622">{0} - Reminder</entry>
+  <entry key="623">Message from User:</entry>
+  <entry key="624">Message:</entry>
+  <entry key="625">Click this link to participate in the Meetings:</entry>
+  <entry key="626">Click here to enter room</entry>
+  <entry key="627">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="628">search intern</entry>
+  <entry key="629">extern users</entry>
+  <entry key="630">pre name</entry>
+  <entry key="631">name</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirm logout</entry>
+  <entry key="634">Are you sure you want to logout now?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Demo Room</entry>
+  <entry key="637">Demo Time</entry>
+  <entry key="638">Meeting Timer</entry>
+  <entry key="639">This Room is a Demo Room. To disable this warning you either should get a private meeting room for your personal usage or set up an own Server. You will be automatically logged off in:</entry>
+  <entry key="640">Moderated</entry>
+  <entry key="641">Please wait untill the Moderator has entered the Room. The Moderator can be either a Teacher, Admin or the creator of this Room.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Incoming Screen Sharing</entry>
+  <entry key="644">There is a new Screen Sharing incoming from the User:</entry>
+  <entry key="645">Start Sharing</entry>
+  <entry key="646">Add new Meeting</entry>
+  <entry key="647">Meeting Room</entry>
+  <entry key="648">Event Room</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderate Users</entry>
+  <entry key="651">Moderate Rooms</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Do you want to change this User to become a Moderator of that Organization?</entry>
+  <entry key="654">Please choose an Organization before you try to add a User to it!</entry>
+  <entry key="655">Organization - Moderator</entry>
+  <entry key="656">Do you really want to delete this User from the Organization?</entry>
+  <entry key="657">This User is Moderator</entry>
+  <entry key="658">This User is No-Moderator</entry>
+  <entry key="659">Do you want this User to be not a Moderator of this Organization?</entry>
+  <entry key="660">Add or delete Users or Rooms within your Organization</entry>
+  <entry key="661">Do you really want to delete this record?</entry>
+  <entry key="662">Do you really want to delete this user from your organization? You will only delete the connection between the user and your organization, to really delete the user itself you have to login into the Administration-Panel.</entry>
+  <entry key="663">You cannot delete your own User!</entry>
+  <entry key="664">This Method needs a Adminstration Account to be invoked!</entry>
+  <entry key="665">There was no Session associated with this ID.</entry>
+  <entry key="666">This is an Administrator or Moderator account. You can only edit this account through the Administration Panel.</entry>
+  <entry key="667">To complete your registration please click on the following link. Or copy the URL to your browser bar.</entry>
+  <entry key="668">Click to verify your E-Mail</entry>
+  <entry key="669">No user was found for this Hash.</entry>
+  <entry key="670">This user is already activated!</entry>
+  <entry key="671">You did successfully activate your account!</entry>
+  <entry key="672">Login Now</entry>
+  <entry key="673">Your account is not activated. First use the link in the Email you've received during registration.</entry>
+  <entry key="674">You successfully signed up. We've send an EMail with a verification Code to your Mail. Please check your Inbox.</entry>
+  <entry key="675">Remove Moderation Role from this User</entry>
+  <entry key="676">Grant Moderation Rights to this User</entry>
+  <entry key="677">User</entry>
+  <entry key="678">Access to whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Please choose any User on the List to grant him access to the Whiteboard, Moderation or Video.</entry>
+  <entry key="681">This User is already Moderator, so he has automatically the right to draw.</entry>
+  <entry key="682">This is you! You cannot remove the Moderation rights from yourself.</entry>
+  <entry key="683">Allow this User to Publish his Audio / Video</entry>
+  <entry key="684">Remove Audio/Video of this User</entry>
+  <entry key="685">I would like to get the moderation of this room</entry>
+  <entry key="686">I would like to draw on whiteboard</entry>
+  <entry key="687">I would like to share my Audio/Video</entry>
+  <entry key="688">You are moderator of this room</entry>
+  <entry key="689">You are allowed to draw on whiteboard</entry>
+  <entry key="690">You are allowed to share your Audio/Video</entry>
+  <entry key="691">Message to Moderator</entry>
+  <entry key="692">The User</entry>
+  <entry key="693">would like to get the Moderation. Use the status Icons next to the user in the List of Users to add or remove the Moderation.</entry>
+  <entry key="694">would like to draw on whiteboard. Use the status Icons next to the user in the List of Users to add or remove the right to draw anything on the whiteboard.</entry>
+  <entry key="695">would like to share his Audio/Video. Use the status Icons next to the user in the List of Users to add or remove the right to share Audio/Video for any User.</entry>
+  <entry key="696">You have to wait untill a Moderator enters the room.</entry>
+  <entry key="697">Cancel</entry>
+  <entry key="698">Save</entry>
+  <entry key="699">Day</entry>
+  <entry key="700">Month</entry>
+  <entry key="701">Year</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_tr.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
new file mode 100644
index 0000000..197197c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_tr.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">konferans</entry>
+  <entry key="2">toplantı</entry>
+  <entry key="3">Etkinlikler</entry>
+  <entry key="4">Ayarlar</entry>
+  <entry key="5">Profil</entry>
+  <entry key="6">Yönetim</entry>
+  <entry key="7">Dur</entry>
+  <entry key="8">Kayıt</entry>
+  <entry key="9">Kullanılabilir dosya yok</entry>
+  <entry key="10">Öğretmene Göre Kayıt</entry>
+  <entry key="11">Bağlı kullanıcılar:</entry>
+  <entry key="12">Bir konferans başlat</entry>
+  <entry key="13">Benim Adım</entry>
+  <entry key="14">Görüntülü Konferans</entry>
+  <entry key="15">Dosya Yükleme</entry>
+  <entry key="16">Listeyi Yenile</entry>
+  <entry key="17">Ana Dosyaya</entry>
+  <entry key="18">Yeni Anket</entry>
+  <entry key="19">Konferans için yeni bir anket.</entry>
+  <entry key="20">Soru:</entry>
+  <entry key="21">Anket tipi:</entry>
+  <entry key="22">Yarat</entry>
+  <entry key="23">Bilgi: Bağlı her kullanıcı yeni anketle ilgili bir mesaj alır.</entry>
+  <entry key="24">Bir anket yarat</entry>
+  <entry key="25">İptal</entry>
+  <entry key="26">Evet/Hayır</entry>
+  <entry key="27">Sayısal 1-10</entry>
+  <entry key="28">Anket</entry>
+  <entry key="29">Soru oluşturabilmek için Düzenleyici olmanız gerekmekte</entry>
+  <entry key="30">Oyunuz kaydedildi.</entry>
+  <entry key="31">Bu anket için zaten oy kullanmıştınız.</entry>
+  <entry key="32">Oyla !</entry>
+  <entry key="33">Sizin yanıtınız:</entry>
+  <entry key="34">Evet</entry>
+  <entry key="35">Hayır</entry>
+  <entry key="36">Sonuçları gör:</entry>
+  <entry key="37">Anket sonuçları</entry>
+  <entry key="38">Soru:</entry>
+  <entry key="39">Sonuçlar:</entry>
+  <entry key="40">Cevaplar:</entry>
+  <entry key="41">Başlamış olan anket yok.</entry>
+  <entry key="42">Oyla!</entry>
+  <entry key="43">Toplantı (en fazla 4 yer)</entry>
+  <entry key="44">Konferans (en fazla 50 yer)</entry>
+  <entry key="45">Tip</entry>
+  <entry key="46">Diğer yerler</entry>
+  <entry key="47">Halihazırda seçili</entry>
+  <entry key="48">giriş</entry>
+  <entry key="49">Düzenleyici toplantıyı terk etti.</entry>
+  <entry key="50">Sistem bilgisi</entry>
+  <entry key="51">Araç seçiniz</entry>
+  <entry key="52">Web Kamerası seçiniz:</entry>
+  <entry key="53">Mikrofon seçiniz:</entry>
+  <entry key="54">tamam</entry>
+  <entry key="55">iptal</entry>
+  <entry key="56">Yeniden bağlanmanız gerekmekte.</entry>
+  <entry key="57">Ayarları düzenle.</entry>
+  <entry key="58">Ders:</entry>
+  <entry key="59">Dil:</entry>
+  <entry key="60">tamam</entry>
+  <entry key="61">iptal</entry>
+  <entry key="62">Tahtayı temizle</entry>
+  <entry key="63">Yeni resim eklenmeden önce tahtanın temizlenmesini istiyor musunuz?</entry>
+  <entry key="64">Tekrar sormayın</entry>
+  <entry key="65">no</entry>
+  <entry key="66">Ayarları düzenle</entry>
+  <entry key="67">Tahtanın temizlenmesinden önce onay başvurusu.</entry>
+  <entry key="68">Kullanıcı Bilgisi</entry>
+  <entry key="69">Çizim alanını temizle</entry>
+  <entry key="70">Geri al</entry>
+  <entry key="71">İleri al</entry>
+  <entry key="72">Bir Nesne Seçin</entry>
+  <entry key="73">Metin</entry>
+  <entry key="74">Boyama</entry>
+  <entry key="75">Çizgi çiz</entry>
+  <entry key="76">Altını çiz</entry>
+  <entry key="77">Dikdörtgen</entry>
+  <entry key="78">Elips</entry>
+  <entry key="79">Ok</entry>
+  <entry key="80">Seçili öğeyi sil</entry>
+  <entry key="81">Düzenleme için uygula</entry>
+  <entry key="82">uygula</entry>
+  <entry key="83">iptal</entry>
+  <entry key="84">Düzenleyici ol</entry>
+  <entry key="85">kapat</entry>
+  <entry key="86">eğik</entry>
+  <entry key="87">kalın</entry>
+  <entry key="88">BEKLİYOR</entry>
+  <entry key="89">Düzenleyicilik için bir kullanıcı bekleniyor:</entry>
+  <entry key="90">onay</entry>
+  <entry key="91">reddet</entry>
+  <entry key="92">iptal</entry>
+  <entry key="93">Bu kullanıcılar için istek gönder</entry>
+  <entry key="94">Onaylandı</entry>
+  <entry key="95">Reddedildi</entry>
+  <entry key="96">Düzenleyiciyi Değiştir</entry>
+  <entry key="97">Bu dersin düzenleyicisi değilsiniz!</entry>
+  <entry key="98">Düzenleyici:</entry>
+  <entry key="99">Bu oda dolu. Lütfen daha sonra yeniden deneyiniz.</entry>
+  <entry key="100">Elips</entry>
+  <entry key="101">kapat</entry>
+  <entry key="102">veri giriş hatası</entry>
+  <entry key="103">4 ya da daha fazla karakter; büyük-küçük harfe duyarlı!</entry>
+  <entry key="104">Kullanıcı şifresi en az 4 karakter olmalıdır</entry>
+  <entry key="105">Bu kullanıcı adı alınmış</entry>
+  <entry key="106">Bu e-posta adresi zaten kayıtlı</entry>
+  <entry key="107">Sistem hatası. Lütfen sistem yöneticileri ile bağlantıya geçiniz.</entry>
+  <entry key="108">Oturum Aç</entry>
+  <entry key="109">Kullanıcı Adı:</entry>
+  <entry key="110">Şifre:</entry>
+  <entry key="111">Dil</entry>
+  <entry key="112">Giriş Yap</entry>
+  <entry key="113">Kayıt Ol</entry>
+  <entry key="114">Kullanıcı Adı:</entry>
+  <entry key="115">Şifre:</entry>
+  <entry key="116">Yeniden Yazın:</entry>
+  <entry key="117">Ad:</entry>
+  <entry key="118">Soyad:</entry>
+  <entry key="119">E-posta:</entry>
+  <entry key="120">Ülke:</entry>
+  <entry key="121">Kayıt</entry>
+  <entry key="122">İptal</entry>
+  <entry key="123">Üye değil misiniz?</entry>
+  <entry key="124">Ev</entry>
+  <entry key="125">Kullanıcılar</entry>
+  <entry key="126">Gruplar</entry>
+  <entry key="127">Kurumlar</entry>
+  <entry key="128">Toplantı-Odaları</entry>
+  <entry key="129">herkese açık</entry>
+  <entry key="130">Kurum</entry>
+  <entry key="131">giriş</entry>
+  <entry key="132">Oturum Aç</entry>
+  <entry key="133">Şifre</entry>
+  <entry key="134">Yeniden yaz</entry>
+  <entry key="135">Ad</entry>
+  <entry key="136">Soyad</entry>
+  <entry key="137">E-Posta</entry>
+  <entry key="138">Doğum günü</entry>
+  <entry key="139">Cadde/No</entry>
+  <entry key="140">ZIP/Şehir</entry>
+  <entry key="141">Ülke</entry>
+  <entry key="142">Adres</entry>
+  <entry key="143">Kullanıcı bilgisi</entry>
+  <entry key="144">kaydet</entry>
+  <entry key="145">Kaydet</entry>
+  <entry key="146">Kullanıcı kodu</entry>
+  <entry key="147">Oturum aç</entry>
+  <entry key="148">Ad</entry>
+  <entry key="149">Soyad</entry>
+  <entry key="150">sonrakini göster</entry>
+  <entry key="151">öncekini göster</entry>
+  <entry key="152">kaydı sil</entry>
+  <entry key="153">iptal</entry>
+  <entry key="154">sil</entry>
+  <entry key="155">yeni kayıt</entry>
+  <entry key="156">kayıt yenile</entry>
+  <entry key="157">kayıt sil</entry>
+  <entry key="158">durum</entry>
+  <entry key="159">devre dışı</entry>
+  <entry key="160">etkin</entry>
+  <entry key="161">Kurumlar</entry>
+  <entry key="162">takvim</entry>
+  <entry key="163">kapat</entry>
+  <entry key="164">Kurum Kodu</entry>
+  <entry key="165">Ad</entry>
+  <entry key="166">Kullanıcı</entry>
+  <entry key="167">Düzenleyici</entry>
+  <entry key="168">Yönetici</entry>
+  <entry key="169">kullanıcı seviyesi</entry>
+  <entry key="170">Kurum</entry>
+  <entry key="171">ad</entry>
+  <entry key="172">kurum ekle</entry>
+  <entry key="173">kurum ekle</entry>
+  <entry key="174">iptal</entry>
+  <entry key="175">ekle</entry>
+  <entry key="176">kurumu kaldır</entry>
+  <entry key="177">kullanıcı</entry>
+  <entry key="178">kullanıcı ekle</entry>
+  <entry key="179">kullanıcı sil</entry>
+  <entry key="180">kullanıcı ekle</entry>
+  <entry key="181">kullanıcı ara</entry>
+  <entry key="182">ara</entry>
+  <entry key="183">kullanıcı</entry>
+  <entry key="184">Kurum</entry>
+  <entry key="185">giriş</entry>
+  <entry key="186">Konferans Odaları</entry>
+  <entry key="187">Konferans Odaları</entry>
+  <entry key="188">kod</entry>
+  <entry key="189">Ad</entry>
+  <entry key="190">herkese açık</entry>
+  <entry key="191">Kurumlar</entry>
+  <entry key="192">Toplantı Odaları</entry>
+  <entry key="193">Ad</entry>
+  <entry key="194">Tip</entry>
+  <entry key="195">Herkese Açık</entry>
+  <entry key="196">Yorum</entry>
+  <entry key="197">kaydet</entry>
+  <entry key="198">yükle</entry>
+  <entry key="199">farklı kaydet</entry>
+  <entry key="200">Dosya adı</entry>
+  <entry key="201">dosya adı</entry>
+  <entry key="202">iptal</entry>
+  <entry key="203">kaydet</entry>
+  <entry key="204">hata</entry>
+  <entry key="205">yükleniyor</entry>
+  <entry key="206">nesneler yüklendi</entry>
+  <entry key="207">istemciler senkronize oluyor, bekleyen istemciler:</entry>
+  <entry key="208">İmaj verisi yükleniyor</entry>
+  <entry key="209">istemciler senkronize oluyor, bekleyen istemciler:</entry>
+  <entry key="210">çizim alanını temizle</entry>
+  <entry key="211">çizim alanını temizle, tahtadaki tüm bilgiler silinecek</entry>
+  <entry key="212">Dosyayı yollamadan önce onaylayınız</entry>
+  <entry key="213">Davet gönder</entry>
+  <entry key="214">Davet gönder</entry>
+  <entry key="215">Konu</entry>
+  <entry key="216">Alıcı</entry>
+  <entry key="217">Mesaj</entry>
+  <entry key="218">Yolla</entry>
+  <entry key="219">İptal</entry>
+  <entry key="220">gönder</entry>
+  <entry key="221">Kullanıcı verisi</entry>
+  <entry key="222">Bu konferans için takma adınız</entry>
+  <entry key="223">Takma Ad</entry>
+  <entry key="224">Ad</entry>
+  <entry key="225">Soyad</entry>
+  <entry key="226">E-posta</entry>
+  <entry key="227">Dil</entry>
+  <entry key="228">giriş</entry>
+  <entry key="229">Yükleniyor</entry>
+  <entry key="230">Veri yükleniyor, lütfen bekleyin!</entry>
+  <entry key="231">Hatalı Şifre</entry>
+  <entry key="232">Lütfen en az 6 karakter içeren birbiri ile aynı iki şifre giriniz</entry>
+  <entry key="233">Hatalı E-posta</entry>
+  <entry key="234">Hatalı bir e-posta adresi girdiniz</entry>
+  <entry key="235">Kayıt Başarılı</entry>
+  <entry key="236">Hesabınız oluşturuldu, oturum açabilirsiniz.</entry>
+  <entry key="237">Şu anda ekranınızı paylaşamazsınız. Başka biri hâlihazırda ekranı paylaşmış.</entry>
+  <entry key="238">Paylaşıma izin yok</entry>
+  <entry key="239">Ekranı Paylaş</entry>
+  <entry key="240">Düşük Bağlantı Hızı: Ekranınız senkronize edilemiyor. Görüntüler atlanacak. Eğer bu uyarıyı almaya devam ederseniz, düzenleyiciden kaliteyi düşürmesini isteyebilirsiniz.</entry>
+  <entry key="241">Ekranı:</entry>
+  <entry key="242">Boyama</entry>
+  <entry key="243">Doküman</entry>
+  <entry key="244">Sohbet</entry>
+  <entry key="245">Dosyalar</entry>
+  <entry key="246">Üyeler</entry>
+  <entry key="247">Orijinal dokümanı indir</entry>
+  <entry key="248">PDF dokümanı indir</entry>
+  <entry key="249">Sunumu tahtaya yükle</entry>
+  <entry key="250">Konfigürasyon</entry>
+  <entry key="251">Bu nesneyi bırak</entry>
+  <entry key="252">Bu nesneyi boyutlandır</entry>
+  <entry key="253">%</entry>
+  <entry key="254">of</entry>
+  <entry key="255">İlk sayfaya git</entry>
+  <entry key="256">Önceki sayfaya git</entry>
+  <entry key="257">Sonraki sayfaya git</entry>
+  <entry key="258">Son sayfaya git</entry>
+  <entry key="259">Uzaklaştır --</entry>
+  <entry key="260">Yakınlaştır ++</entry>
+  <entry key="261">Sayın</entry>
+  <entry key="262">Sayın</entry>
+  <entry key="263">Konfigürasyon</entry>
+  <entry key="264">KOD</entry>
+  <entry key="265">Anahtar</entry>
+  <entry key="266">Konfigürasyon</entry>
+  <entry key="267">Anahtar</entry>
+  <entry key="268">son güncelleme</entry>
+  <entry key="269">güncellemeye göre</entry>
+  <entry key="270">yorum</entry>
+  <entry key="271">Değer</entry>
+  <entry key="272">of</entry>
+  <entry key="273">Kullanıcılar</entry>
+  <entry key="274">kullanıcıyı kurumdan sil</entry>
+  <entry key="275">sil</entry>
+  <entry key="276">Bu kullanıcı hâlihazırda bu grubun bir üyesi.</entry>
+  <entry key="277">Haberler</entry>
+  <entry key="278">Hızlı Bağlantılar</entry>
+  <entry key="279">Konferansa git</entry>
+  <entry key="280">Oditoryuma git</entry>
+  <entry key="281">yardım ve Destek</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Hata bildir!</entry>
+  <entry key="285">daha fazlası</entry>
+  <entry key="286">Proje Web Sitesi (http://openmeetings.apache.org)</entry>
+  <entry key="287">Kullanıcı E-Posta Listesi (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Oturumu Hatırla</entry>
+  <entry key="289">İçerik</entry>
+  <entry key="290">Ana Sayfam</entry>
+  <entry key="291">Planlanmış Toplantılarım</entry>
+  <entry key="292">Planlanmış Etkinliklerim</entry>
+  <entry key="293">Herkese Açık Toplantılar</entry>
+  <entry key="294">Özel Toplantılar</entry>
+  <entry key="295">Herkese Açık Etkinlikler</entry>
+  <entry key="296">Özel Etkinlikler</entry>
+  <entry key="297">Herkese Açık İçerik</entry>
+  <entry key="298">Özel İçerik</entry>
+  <entry key="299">Kişisel İçerik</entry>
+  <entry key="300"></entry>
+  <entry key="301">Düzenleme</entry>
+  <entry key="302">Düzenleyicilik için onay</entry>
+  <entry key="303">Anketler</entry>
+  <entry key="304">Bir dosya seçin</entry>
+  <entry key="305">Ayarlar</entry>
+  <entry key="306">Kamera ve Mikrofon Ayarları</entry>
+  <entry key="307">Tahta Ayarları</entry>
+  <entry key="308">Çıkış</entry>
+  <entry key="309">Odalara geri dön</entry>
+  <entry key="310">Oturumu Kapat</entry>
+  <entry key="311">Şifreyi Unut?</entry>
+  <entry key="312">Şİfreyi Sıfırla</entry>
+  <entry key="313">E-postaya göre</entry>
+  <entry key="314">Oturuma göre</entry>
+  <entry key="315">Postanız</entry>
+  <entry key="316">Oturumunuz</entry>
+  <entry key="317">Sınıflama bağlantısı ile e-posta gönder</entry>
+  <entry key="318">E-posta adresi bulunamadı. Kayıt esnasında kullandığınız e-posta adresini girdiğinizden emin olun.</entry>
+  <entry key="319">Lütfen bir e-posta adresi ya da bir kullanıcı adı giriniz</entry>
+  <entry key="320">Bu kullanıcı adı ile bağlanmış bir kullanıcı yok</entry>
+  <entry key="321">Özel bir bağlantıya sahip olan bir e-posta, e-posta adresinize yollanmış durumda. Lütfen posta kutunuzu kontrol edin. Eğer e-posta mesajını alamazsanız, lütfen posta kutunuzun gereksiz posta ayarlarını kontrol edin ve/veya yeniden doğrulama mesajının gönderilmesini sağlayın.</entry>
+  <entry key="322">Hata</entry>
+  <entry key="323">Mesaj</entry>
+  <entry key="324">Geçersiz Komut. Hiçbir Kullanıcı Bulunamadı.</entry>
+  <entry key="325">Şifrenizi Sıfırlayın</entry>
+  <entry key="326">Oturum Aç</entry>
+  <entry key="327">Şifre değiştir</entry>
+  <entry key="328">Yeni Şifre</entry>
+  <entry key="329">Şifrenizi yeniden girin</entry>
+  <entry key="330">Girmiş olduğunuz şifreler birbiri ile aynı değil.</entry>
+  <entry key="331">4 ya da daha fazla karakter; büyük-küçük harfe duyarlı!</entry>
+  <entry key="332">Şİfre belirlendi. Şuan oturum açabilirsiniz.</entry>
+  <entry key="333">TAMAM</entry>
+  <entry key="334">Bilinmeyen Hata. Lütfen bu durumu sistem sorumlusuna rapor ediniz.</entry>
+  <entry key="335">Kullanıcı adı bulunamadı</entry>
+  <entry key="336">Geçersiz Şifre</entry>
+  <entry key="337">Oturum başarıyla kapatıldı</entry>
+  <entry key="338">Geriplan kayıt işlemi devre dışı.</entry>
+  <entry key="339">Geçersiz E-posta</entry>
+  <entry key="340">yinelenen dosya adı, lütfen farklı bir dosya adu seçiniz</entry>
+  <entry key="341">dosya adı çok kısa</entry>
+  <entry key="342">Adres kayıt edilemiyor</entry>
+  <entry key="343">Kullanıcı eklendi fakat kullanıcıyı bir kuruma atamanız gerekmekte, aksi halde oturum açması mümkün olamayacak.</entry>
+  <entry key="344">Yeni Kayıt</entry>
+  <entry key="345">Bu alan kodu ile bir alan bulunamadı.</entry>
+  <entry key="346">Bu alan için etiket bulunamadı.</entry>
+  <entry key="347">Yönetici oturumu gerekmektedir</entry>
+  <entry key="348">Dil Düzenleyicisi</entry>
+  <entry key="349">Dil</entry>
+  <entry key="350">Etiket-Kodu</entry>
+  <entry key="351">Etiket-Adı</entry>
+  <entry key="352">Değer</entry>
+  <entry key="353">Alan değerleri</entry>
+  <entry key="354">EtiketAdı</entry>
+  <entry key="355">EtiketDeğeri</entry>
+  <entry key="356">Etiket-Kodu</entry>
+  <entry key="357">Sadece etiketi sildiniz, alanı değil! Alanı silemezsiniz; diğer dillerde etiketleri bulunmakta.</entry>
+  <entry key="358">Geçersiz EtiketKodu. Dil alanı değer kodu (FieldLanguagesvalues_Id) veritabanında bulunamıyor.</entry>
+  <entry key="359">Bu alanı silemezsiniz. Sadece etiketleri silebilirsiniz, alanları değil. Şu anda yüklenmiş olan bir etiket yok, herhangi bir alan seçilmemiş ya da tanımlanmış bu alan için bu dilde etiket yok.</entry>
+  <entry key="360">ihraç</entry>
+  <entry key="361">Değişiklikleri görebilmeniz için oturumu kapatmanız gerekmektedir.</entry>
+  <entry key="362">Yeni dil ekle</entry>
+  <entry key="363">dil sil</entry>
+  <entry key="364">Yeni dil ekle</entry>
+  <entry key="365">Ad</entry>
+  <entry key="366">dil ekle</entry>
+  <entry key="367">Yedekleme</entry>
+  <entry key="368">ilke git</entry>
+  <entry key="369">öncekine git</entry>
+  <entry key="370">sonrakine git</entry>
+  <entry key="371">sonuncuya git</entry>
+  <entry key="372">kullanıcı konuşuyor (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">sesi aç/kapa</entry>
+  <entry key="374">Sistem</entry>
+  <entry key="375">Ayarlarınız</entry>
+  <entry key="376">selam,</entry>
+  <entry key="377">Profilinizi düzenleyin</entry>
+  <entry key="378">Yeni Mesaj:</entry>
+  <entry key="379">Yeni resim yükle</entry>
+  <entry key="380">Kullanıcı verisi - İhraç Et</entry>
+  <entry key="381">Tüm kurumlar daha önceden oluşturulmuş olmalı!</entry>
+  <entry key="382">ihraç (export) işlemine başla</entry>
+  <entry key="383">Kuruma göre</entry>
+  <entry key="384">ihraç (export) işlemine başla</entry>
+  <entry key="385">Kullanıcı verisi - Import</entry>
+  <entry key="386">users.xml dosyasını seç</entry>
+  <entry key="387">ithal et (import)</entry>
+  <entry key="388">XML olarak ihraç et - Bu dosyalar şu amaçlar için kullanılabilir: - Projeye katılmak - Bilgileri başka bir sisteme aktarmak - Yedekleme - Özelleştirme - Bir sonraki yüklemede dil klasörünün içine koymak için.</entry>
+  <entry key="389">İthal (import) etmek istediğiniz dil dosyasını seçiniz. Açılan kutudan doğru dili seçiniz! Dosyanın adı önemli değildir, bu dilin içine ithal edilecektir!</entry>
+  <entry key="390">ithal et - dosya seç</entry>
+  <entry key="391">Farklı kaydet</entry>
+  <entry key="392">Ad:</entry>
+  <entry key="393">Yorum:</entry>
+  <entry key="394">kaydet</entry>
+  <entry key="395">Kayıtlar</entry>
+  <entry key="396">Kayıt Görüntüleyicisi</entry>
+  <entry key="397">Genel (herkese açık) ve Özel Odaların kayıtları</entry>
+  <entry key="398">Kullanıcılar :</entry>
+  <entry key="399">Katılanlar:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Bu odadaki kullanıcılar:</entry>
+  <entry key="402">yenile</entry>
+  <entry key="403">Bu oda dolu. Bir kaç dakika içinde yeniden deneyiniz.</entry>
+  <entry key="404">Detaylı bilgi için bir odanın üzerine tıklayınız</entry>
+  <entry key="405">Bu odanın içindeki kullanıcılar ile sohbet et:</entry>
+  <entry key="406">Oda:</entry>
+  <entry key="407">Bu odadaki kullanıcılar:</entry>
+  <entry key="408">den beri:</entry>
+  <entry key="409">kaydı oynat</entry>
+  <entry key="410">Uzunluk:</entry>
+  <entry key="411">Tarih:</entry>
+  <entry key="412">Kaydedici Kipi! Hiçbir ayarı değiştiremezsiniz, bu kaydedilmiş bir dosyadır!</entry>
+  <entry key="413">Bu kaydı onat</entry>
+  <entry key="414">Oynat / Durdur</entry>
+  <entry key="415">Kaydı başlat</entry>
+  <entry key="416">kaydı durdur</entry>
+  <entry key="417">Kayıt:</entry>
+  <entry key="418">Şu an zaten biri kayıtta:</entry>
+  <entry key="419">Kayıt! Kullanıcıya göre:</entry>
+  <entry key="420">iptal</entry>
+  <entry key="421">Kayıt iptal edilecek ve kaydedilmeyecek.</entry>
+  <entry key="422">devam et</entry>
+  <entry key="423">Bu pencereyi kapat ve kayda devam et</entry>
+  <entry key="424">Çizgi rengini değiştir</entry>
+  <entry key="425">Renk seç</entry>
+  <entry key="426">Çizgi rengini Devre Dışı Bırak / Etkinleştir</entry>
+  <entry key="427">İç rengi değiştir</entry>
+  <entry key="428">İç rengi Devre Dışı Bırak / Etkinleştir</entry>
+  <entry key="429">Çizgi genişliğini değiştir</entry>
+  <entry key="430">kapat</entry>
+  <entry key="431">Yazı tipini değiştir</entry>
+  <entry key="432">Kaydı Sil</entry>
+  <entry key="433">Misafir</entry>
+  <entry key="434">Göre:</entry>
+  <entry key="435">Ad</entry>
+  <entry key="436">Oda</entry>
+  <entry key="437">Tarih</entry>
+  <entry key="438">iptal</entry>
+  <entry key="439">başlat</entry>
+  <entry key="440">Ad</entry>
+  <entry key="441">Tarih</entry>
+  <entry key="442">Sunucu sohbet kayıtlarını sil</entry>
+  <entry key="443">Sohbet</entry>
+  <entry key="444">Mesaj yolla</entry>
+  <entry key="445">Yüz İfadeleri</entry>
+  <entry key="446">İfadeler</entry>
+  <entry key="447">Yayınlanmış Araçları Seç</entry>
+  <entry key="448">Ses ve Görüntü</entry>
+  <entry key="449">Sadece Ses</entry>
+  <entry key="450">Sadece Görüntü</entry>
+  <entry key="451">Ses Görüntü yok (sabit resim)</entry>
+  <entry key="452">Bilgisayarınız tarafından yayınlanabilecek olan ses / görüntü bulunmamaktadır, bunun yerine profilinizde yer alan resim kullnılacaktır. Bu seçeneği bant genişliğinizde bir sorun varsa ya da İnternet bağlantınız çok yavaşsa tercih ediniz.</entry>
+  <entry key="453">PZT</entry>
+  <entry key="454">SAL</entry>
+  <entry key="455">ÇAR</entry>
+  <entry key="456">PER</entry>
+  <entry key="457">CUM</entry>
+  <entry key="458">CMT</entry>
+  <entry key="459">PAZ</entry>
+  <entry key="460">Pazartesi</entry>
+  <entry key="461">Salı</entry>
+  <entry key="462">Çarşamba</entry>
+  <entry key="463">Perşembe</entry>
+  <entry key="464">Cuma</entry>
+  <entry key="465">Cumartesi</entry>
+  <entry key="466">Pazar</entry>
+  <entry key="467">TH</entry>
+  <entry key="468">Takvim hafta</entry>
+  <entry key="469">Ocak</entry>
+  <entry key="470">Şubat</entry>
+  <entry key="471">Mart</entry>
+  <entry key="472">Nisan</entry>
+  <entry key="473">Mayıs</entry>
+  <entry key="474">Haziran</entry>
+  <entry key="475">Temmuz</entry>
+  <entry key="476">Ağustos</entry>
+  <entry key="477">Eylül</entry>
+  <entry key="478">Ekim</entry>
+  <entry key="479">Kasım</entry>
+  <entry key="480">Aralık</entry>
+  <entry key="481">Takvim</entry>
+  <entry key="482">Katılımcılar</entry>
+  <entry key="483">Mizanpaj Ayarlarını Göster</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Genişlik | Yükseklik</entry>
+  <entry key="486">Video-Gösterici</entry>
+  <entry key="487">Düzenleyici-Gösterici</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Tahta-Gösterici</entry>
+  <entry key="490">Etkin</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Genişlik | Yükseklik</entry>
+  <entry key="493">Dosyalar,Sohbet,Katılımcı-Gösterici</entry>
+  <entry key="494">Etkin</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Genişlik | Yükseklik</entry>
+  <entry key="497">Düzenleyici odayı terk etti. Şu anda sunum yapan kimse yok. Düzenleyicilik için başvuruda bulunabilirsiniz ya da bekleyebilirsiniz.</entry>
+  <entry key="498">Odada bir Düzenleyici yok, fakat bazı katılımcılar var. Düzenleyicilik için başvuruda bulunabilirsiniz ya da bekleyebilirsiniz.</entry>
+  <entry key="499">{0} geribildirim</entry>
+  <entry key="500">{0} - Davet</entry>
+  <entry key="501">Kullanıcıdan Mesaj:</entry>
+  <entry key="502">Mesaj:</entry>
+  <entry key="503">Toplantıya katılmak için linke tıklayınız:</entry>
+  <entry key="504">Odaya girmek için buraya tıklayınız</entry>
+  <entry key="505">Bağlantı (link) ile ilgili probleminiz varsa, lütfen bağlantıyı kopyalayarak tarayıcınızın adres çubuğuna yapıştırınız:</entry>
+  <entry key="506">{0} Kayıt</entry>
+  <entry key="507">Kullanıcı verileriniz:</entry>
+  <entry key="508">Kullanıcı Adı:</entry>
+  <entry key="509">Şifre:</entry>
+  <entry key="510">E-posta:</entry>
+  <entry key="511">{0}-Takımı</entry>
+  <entry key="512">{0} Kayıt Ol</entry>
+  <entry key="513">{0} - Şifre Sıfırla</entry>
+  <entry key="514">Yeni bir şifre girmek için bağlantıya tıklayınız:</entry>
+  <entry key="515">Yeni bir şifre girmek için buraya tıklayınız</entry>
+  <entry key="516">bu bağlantı (link) ile ilgili probleminiz varsa, lütfen bağlantıyı kopyalayarak tarayıcınızın adres çubuğuna yapıştırınız:</entry>
+  <entry key="517">{0} Şifre Sıfırla</entry>
+  <entry key="518">Lütfen geçerli bir tarih girin, örnek olarak 25.06.2005 (gg.aa.yyyy)</entry>
+  <entry key="519">Lütfen geçerli bir e-posta adresi girin, örnek olarak ad@posta.com</entry>
+  <entry key="520">Lütfen Float-Sayı giriniz, örnek olarak 1.00</entry>
+  <entry key="521">Lütfen bir tamsayı giriniz, örnek olarak 100</entry>
+  <entry key="522">Lütfen geçerli bir telefon numarası giriniz, örnek olarak ++90 0123 123123</entry>
+  <entry key="523">Lütfen geçerli bir saat bilgisi giriniz, örnek olarak 12:23 (ss:dd)</entry>
+  <entry key="524">Şifre korumalı</entry>
+  <entry key="525">Şifre</entry>
+  <entry key="526">Geçerlilik periyodu</entry>
+  <entry key="527">Süresiz</entry>
+  <entry key="528">Periyot</entry>
+  <entry key="529">Bir kerelik</entry>
+  <entry key="530">Oturum başlangıcı:</entry>
+  <entry key="531">Oturum sonu:</entry>
+  <entry key="532">{0}'e Davet</entry>
+  <entry key="533">Bu davet kodu için geçerli olan bir davet yok.</entry>
+  <entry key="534">Bu davet halihazırda kullanılmakta. Bu bip bir davet tekrar kullanılamaz.</entry>
+  <entry key="535">Bu davet kodu geçerli değil.</entry>
+  <entry key="536">Şifre:</entry>
+  <entry key="537">Şifre Kontrol</entry>
+  <entry key="538">Geçersiz Şifre!</entry>
+  <entry key="539">Ses-Görüntü</entry>
+  <entry key="540">Ses/Görüntü Senkronizasyonu</entry>
+  <entry key="541">Kullanıcı adı doğru, fakat girmeye çalıştığınız oturum aktif durumda değil ya da sunucuda depolanmış. Yeni bir oturum kodu almalısınız ve yeniden oturum açmalısınız.</entry>
+  <entry key="542">Oturum kodu kayıtlı değil ya da yönetici haklarına sahip değil. SOAP Gateway yeni bir kullanıcı ekleyebilmek için yönetici haklarına sahip bir kullanıcıya ihtiyaç duyar.</entry>
+  <entry key="543">Bu oturum uzak kullanıcı veri bağlantısı içermiyor. Uygulamaya girmeden veya yanlış oturum kodu ile SOAP-Gateway araması yapamazsınız.</entry>
+  <entry key="544">Kaydedici halen Beta versiyonunda!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-ekseni</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-ekseni</entry>
+  <entry key="549">g</entry>
+  <entry key="550">genişlik</entry>
+  <entry key="551">y</entry>
+  <entry key="552">yükseklik</entry>
+  <entry key="553">Transparanlığı değiştir</entry>
+  <entry key="554">Tarayıcı Aç</entry>
+  <entry key="555">Tarayıcı Kapat</entry>
+  <entry key="556">Şunucuyla bağlantı kesildi. Uygulamayı yeniden yüklemeli veya Ağ Bağlantısını kontrol etmelisiniz.</entry>
+  <entry key="557">İmleç</entry>
+  <entry key="558">Eşitliyor…</entry>
+  <entry key="559">Kullanıcıları eşitliyor, lütfen bekleyiniz</entry>
+  <entry key="560">&lt;u&gt;SVG Olarak Yükle&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;PNG Olarak Yükle&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;JPG Olarak Yükle&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;PDF Olarak Yükle&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;TIF Olarak Yükle&lt;/u&gt;</entry>
+  <entry key="565">Hatırlatıcı:</entry>
+  <entry key="566">Kategori:</entry>
+  <entry key="567">Tekrar:</entry>
+  <entry key="568">hiçbiri</entry>
+  <entry key="569">Konum:</entry>
+  <entry key="570">Baş</entry>
+  <entry key="571">Son</entry>
+  <entry key="572">Başlık:</entry>
+  <entry key="573">Yorum:</entry>
+  <entry key="574">Kişi Davet Et</entry>
+  <entry key="575">Günlük</entry>
+  <entry key="576">Aylık</entry>
+  <entry key="577">Yıllık</entry>
+  <entry key="578">Yetkilendirme sonu yetkilendirme başından sonradır!</entry>
+  <entry key="579">Lütfen bir başlık giriniz!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Sağdan sola yazım modunu açmak için bunu aktifleştirin</entry>
+  <entry key="582">Pano</entry>
+  <entry key="583">Kayıtlı Görüşmeleri İzle</entry>
+  <entry key="584">Görüşme – 4 kişilik konferans oluştur (en fazla 16 kişi) &lt;br/&gt;herkes ses + görüntü yayın hakkına sahip</entry>
+  <entry key="585">Etkinlik – 200 katılımcılı konferans ayarla&lt;br/&gt;Sadece düzenleyici ses ve görüntü yayın hakkına sahip</entry>
+  <entry key="586">Kullanıcıları, odaları ve organizasyonları oluştur &lt;br/&gt; + yapılandırmayı değiştir</entry>
+  <entry key="587">Kullanıcılar şu anda bu odada</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Giriş</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Belge Yükleniyor. Tüm istemciler eşitleninceye kadar lütfen bekleyiniz.</entry>
+  <entry key="592">Aktarım tamamlandı, belge dönüştürülüyor ...</entry>
+  <entry key="593">Aktarımı Başlat</entry>
+  <entry key="594">Aktarım ve Yükleme Penceresi. Lütfen Diskinizden bir Dosya seçiniz.</entry>
+  <entry key="595">İptal</entry>
+  <entry key="596">Dosya Seç</entry>
+  <entry key="597">Bağlantılar</entry>
+  <entry key="598">Değer</entry>
+  <entry key="599">Yayın_ID</entry>
+  <entry key="600">Giriş</entry>
+  <entry key="601">Bağlantı zamanı</entry>
+  <entry key="602">Oda / Kapsam</entry>
+  <entry key="603">Kick User</entry>
+  <entry key="604">Kullanıcıyı At</entry>
+  <entry key="605">Bu istemciyi bağlantıdan çıkarmak istediğinize emin misiniz?&lt;br/&gt;Bu işlem sadece uyarı amaçlıdır ve kullanıcının odaya yeniden giriş yapmasını engellemez.</entry>
+  <entry key="606">Oturumunuz Yönetici veya Düzenleyici tarafından sonlandırıldı.</entry>
+  <entry key="607">Telefon</entry>
+  <entry key="608">Kullanıcı bu Oda’nın Düzenleyicisi</entry>
+  <entry key="609">Kullanıcı Karatahtayı düzenleme hakkına sahip</entry>
+  <entry key="610">Ses/Görüntüyü (Yeniden) Başlat veya Aygıt Ayarlarını değiştir</entry>
+  <entry key="611">Bu kullanıcının Karatahtayı kullanmasına izin ver</entry>
+  <entry key="612">Kullanıcının Karatahtayı kullanmasını engelle</entry>
+  <entry key="613">Kullanıcılar</entry>
+  <entry key="614">Dosyalar</entry>
+  <entry key="615">Karatahta</entry>
+  <entry key="616">Sohbet</entry>
+  <entry key="617">Hesabınız pek çok Organizasyonla ilişkilendirilmiş. Bu oturum için lütfen birini seçiniz.</entry>
+  <entry key="618">Bu oda şu anda dolu; lütfen daha sonra tekrar deneyiniz.</entry>
+  <entry key="619">Oda Tipi</entry>
+  <entry key="620">Randevu Odası</entry>
+  <entry key="621">Sunucu Zamanı</entry>
+  <entry key="622">{0} - Hatırlatıcı</entry>
+  <entry key="623">Kullanıcıdan Mesaj:</entry>
+  <entry key="624">Mesaj:</entry>
+  <entry key="625">Görüşmelere katılmak için bu bağlantıyı tıklayınız:</entry>
+  <entry key="626">Odaya giriş için burayı tıklayın</entry>
+  <entry key="627">bağlantıyı tıklamakla ilgili sorun yaşıyorsanız kopyalayıp gezgin penceresine yapıştırabilirsiniz:</entry>
+  <entry key="628">iç kullanıcılar</entry>
+  <entry key="629">dış kullanıcılar</entry>
+  <entry key="630">ön ad</entry>
+  <entry key="631">ad</entry>
+  <entry key="632">E-Posta</entry>
+  <entry key="633">Oturum kapatmayı onayla</entry>
+  <entry key="634">Oturumu kapatmak istediğinize emin misiniz?</entry>
+  <entry key="635">Eylemler</entry>
+  <entry key="636">Demo Odası</entry>
+  <entry key="637">Demo Zamanı</entry>
+  <entry key="638">Görüşme İçin Kalan Zaman</entry>
+  <entry key="639">Bu Oda bir Demo Odası’dır. Bu uyarıyı almak istemiyorsanız özel bir oda alabilir veya kendinize özel bir sunucu ayarlayabilirsiniz. Oturumunuzun otomatik kapatılma zamanı:</entry>
+  <entry key="640">Dengeli</entry>
+  <entry key="641">Düzenleyici odaya girinceye kadar lütfen bekleyiniz. Düzenleyici olarak anılan kişi Düzenleyici, Yönetici veya odayı oluşturan kişi olabilir.</entry>
+  <entry key="642">Tamam</entry>
+  <entry key="643">Ekran Paylaşımı Başlıyor</entry>
+  <entry key="644">Kullanıcı Ekran Paylaşımı uygulamasını başlatıyor:</entry>
+  <entry key="645">Paylaşımı Başlat</entry>
+  <entry key="646">Yeni bir Görüşme ekle</entry>
+  <entry key="647">Görüşme Odası</entry>
+  <entry key="648">Etkinlik Odası</entry>
+  <entry key="649">Düzenleme</entry>
+  <entry key="650">Kullanıcıları Düzenle</entry>
+  <entry key="651">Odaları Düzenle</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Bu kullanıcının organizasyonun Düzenleyicisi olmasını istediğinize emin misiniz?</entry>
+  <entry key="654">Kullanıcıyı bir Organizasyona eklemeden önce lütfen listeden bir tane Organizasyon seçiniz!</entry>
+  <entry key="655">Organizasyon - Düzenleyici</entry>
+  <entry key="656">Bu kullanıcıyı Organizasyondan silmek istediğinize emin misiniz?</entry>
+  <entry key="657">Bu Kullanıcı Düzenleyici</entry>
+  <entry key="658">Bu Kullanıcı Düzenleyici Değil</entry>
+  <entry key="659">Bu kullanıcının Organizasyonda Düzenleyici Olmamasını İstediğinize Emin Misiniz?</entry>
+  <entry key="660">Kullanıcıları Organizasyona ekle veya Organizasyondan sil</entry>
+  <entry key="661">Bu kaydı silmek istediğinize emin misiniz?</entry>
+  <entry key="662">Bu kullanıcıyı organizasyondan silmek istediğinize emin misiniz? Bu kullanıcıyı sadece organizasyondan silersiniz. Eğer kullanıcıyı tamamen silmek istiyorsanız Yönetici-Panelinden giriş yapmalısınız.</entry>
+  <entry key="663">Kendi kullanıcınızı silemezsiniz!</entry>
+  <entry key="664">Bu yöntem Yönetici hakları erişimini gerektirir!</entry>
+  <entry key="665">Bu ID ile ilişkilendirilmiş Oturum bulunmamaktadır.</entry>
+  <entry key="666">Bu bir Yönetici veya Düzenleyici hesabı. Bu hesabı sadece Yönetici Panelinden düzenleyebilirsiniz.</entry>
+  <entry key="667">Kaydınızı tamamlamak için lütfen bağlantıyı tıklayın ya da tarayıcı adres çubuğuna kopyalayıp oradan açın.</entry>
+  <entry key="668">E-Postanızı Onaylamak İçin Tıklayınız</entry>
+  <entry key="669">Bu Hash bilgisine uyan hiçbir kullanıcı bulunamadı.</entry>
+  <entry key="670">Bu kullanıcı zaten aktif edildi!</entry>
+  <entry key="671">Hesabınızı başarıyla aktifleştirdiniz!</entry>
+  <entry key="672">Giriş Yap</entry>
+  <entry key="673">Hesabınız aktifleştirilmedi. Kayıt sırasında vermiş olduğunuz E-Postanıza gelen bağlantıyı tıklayarak aktivasyon işlemini tamamlayınız.</entry>
+  <entry key="674">Kaydınız başarıyla tamamlandı. Vermiş olduğunuz e-posta adresinize hesabınızı aktifleştirmek için ileti gönderdik. İletideki bağlantıyı açarak hesabınızı aktifleştirebilirsiniz.</entry>
+  <entry key="675">Bu Kullanıcının Düzenleyici Yetkisini İptal Et</entry>
+  <entry key="676">Bu Kullanıcıya Düzenleyici Yetkileri Ver</entry>
+  <entry key="677">Kullanıcı</entry>
+  <entry key="678">Karatahtaya eriş</entry>
+  <entry key="679">Düzenleyici</entry>
+  <entry key="680">Düzenleme: Lütfen kendisine Karatahtaya Erişme, Düzenleme ve Ses/Görüntü yetkisi vermek üzere bir kullanıcı seçiniz.</entry>
+  <entry key="681">Bu kullanıcı Düzenleyici haklarına sahip olduğundan çizme yetkisine zaten sahip.</entry>
+  <entry key="682">Kendi kendinizin Düzenleyici hakkını iptal edemezsiniz.</entry>
+  <entry key="683">Bu kullanıcının Ses/Görüntüsünü Yayınlamasına İzin Ver</entry>
+  <entry key="684">Kullanıcının Ses/Görüntüsünü İptal Et</entry>
+  <entry key="685">Bu odanın düzenleyicisi olmak istiyorum.</entry>
+  <entry key="686">Tahtayı düzenleyebilmek istiyorum.</entry>
+  <entry key="687">Ses/Görüntümü paylaşmak istiyorum.</entry>
+  <entry key="688">Bu odanın Düzenleyicisisiniz.</entry>
+  <entry key="689">Tahtayı düzenleme hakkına sahipsiniz.</entry>
+  <entry key="690">Ses/Görüntünüzü paylaşma hakkına sahipsiniz.</entry>
+  <entry key="691">Düzenleyiciye Mesaj</entry>
+  <entry key="692">Kullanıcı</entry>
+  <entry key="693">düzenleyici olmak istiyor. Kullanıcıya bu hakkı vermek istiyorsanız durum simgelerini kullanın.</entry>
+  <entry key="694">tahtayı düzenlemek istiyor. Kullanıcıya bu hakkı vermek istiyorsanız durum simgelerini kullanın.</entry>
+  <entry key="695">Ses ve Görüntüsünü paylaşmak istiyor. Kullanıcıya bu hakkı vermek istiyorsanız durum simgelerini kullanın.</entry>
+  <entry key="696">Düzenleyici odaya giriş yapana kadar beklemelisiniz.</entry>
+  <entry key="697">İptal</entry>
+  <entry key="698">Kaydet</entry>
+  <entry key="699">Gün</entry>
+  <entry key="700">Ay</entry>
+  <entry key="701">Yıl</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_uk.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
new file mode 100644
index 0000000..d7b6b58
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_uk.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">Конференція</entry>
+  <entry key="2">Зустріч</entry>
+  <entry key="3">Аудиторія</entry>
+  <entry key="4">Налаштування</entry>
+  <entry key="5">Користувач</entry>
+  <entry key="6">Адміністратор</entry>
+  <entry key="7">Пауза</entry>
+  <entry key="8">Запис</entry>
+  <entry key="9">Немає даних</entry>
+  <entry key="10">Функція запису для модераторів</entry>
+  <entry key="11">Пов'язаний користувач:</entry>
+  <entry key="12">Почати конференцію</entry>
+  <entry key="13">Моє ім'я</entry>
+  <entry key="14">Відеоконференція</entry>
+  <entry key="15">Імпорт</entry>
+  <entry key="16">Оновити список</entry>
+  <entry key="17">На головну</entry>
+  <entry key="18">Нове опитування</entry>
+  <entry key="19">Нове опитування для конференції.</entry>
+  <entry key="20">Запитання:</entry>
+  <entry key="21">Вид опитування:</entry>
+  <entry key="22">Створити</entry>
+  <entry key="23">Інформація: кожен пов'язани користувач отримує повідомлення з новим опитуванням</entry>
+  <entry key="24">Створити опитування</entry>
+  <entry key="25">Відмінити</entry>
+  <entry key="26">Так/Ні</entry>
+  <entry key="27">В числовому порядку 1-10</entry>
+  <entry key="28">Опитування</entry>
+  <entry key="29">Для створення опитування Ви повинні бути модератором/інструктором даної кімнати.</entry>
+  <entry key="30">Ви проголосували.</entry>
+  <entry key="31">Ви вже проголосували в даному опитуванні.</entry>
+  <entry key="32">Проголосувати!</entry>
+  <entry key="33">Ваша відповідь:</entry>
+  <entry key="34">Так</entry>
+  <entry key="35">Ні</entry>
+  <entry key="36">Хочу знати:</entry>
+  <entry key="37">Результати опитування</entry>
+  <entry key="38">Запитання:</entry>
+  <entry key="39">Відповіді:</entry>
+  <entry key="40">Результати:</entry>
+  <entry key="41">В даний момент опитування не існує.</entry>
+  <entry key="42">Проголосувати!</entry>
+  <entry key="43">Зустріч (максимум 4 місця)</entry>
+  <entry key="44">Конференція (максимум 50 місць)</entry>
+  <entry key="45">Тип</entry>
+  <entry key="46">Залишилось місць</entry>
+  <entry key="47">Вже присвоєно</entry>
+  <entry key="48">Вхід</entry>
+  <entry key="49">Модератор/інструктор цієї кімнати покинув кімнату</entry>
+  <entry key="50">Системне повідомлення</entry>
+  <entry key="51">Вибір пристрою</entry>
+  <entry key="52">Обрати камеру:</entry>
+  <entry key="53">Обрати мікрофон:</entry>
+  <entry key="54">OK</entry>
+  <entry key="55">Скасувати</entry>
+  <entry key="56">Ви повинні ввійти знову, щоб активізувати зміни.</entry>
+  <entry key="57">Змінити налаштування.</entry>
+  <entry key="58">Курс:</entry>
+  <entry key="59">Мова:</entry>
+  <entry key="60">OK</entry>
+  <entry key="61">Скасувати</entry>
+  <entry key="62">Очистити планшет</entry>
+  <entry key="63">Очистити планшет перед додаванням нового зображення?</entry>
+  <entry key="64">чистити планшет перед додаванням нового зображення</entry>
+  <entry key="65">ні</entry>
+  <entry key="66">Обробити налаштування</entry>
+  <entry key="67">Запросити підтвердження перед очисткою планшету.</entry>
+  <entry key="68">Наша інформація</entry>
+  <entry key="69">Очистити планшет</entry>
+  <entry key="70">Відмінити</entry>
+  <entry key="71">Відновлення</entry>
+  <entry key="72">Вибрати об'єкт</entry>
+  <entry key="73">Текст</entry>
+  <entry key="74">Малювання</entry>
+  <entry key="75">Провести лінію</entry>
+  <entry key="76">Підкреслити</entry>
+  <entry key="77">Прямокутник</entry>
+  <entry key="78">Еліпс</entry>
+  <entry key="79">Стрілка</entry>
+  <entry key="80">Стерти обраний елемент</entry>
+  <entry key="81">Запит функції модератора</entry>
+  <entry key="82">Запит</entry>
+  <entry key="83">Скасувати</entry>
+  <entry key="84">Отримати функцію модератора</entry>
+  <entry key="85">Закрити</entry>
+  <entry key="86">Курсив</entry>
+  <entry key="87">Жирний шрифт</entry>
+  <entry key="88">Будь-ласкаа зачекайте...</entry>
+  <entry key="89">Користувач бажає отримати функцію модератора</entry>
+  <entry key="90">Згода</entry>
+  <entry key="91">Скасування</entry>
+  <entry key="92">Скасувати</entry>
+  <entry key="93">Надсилання запиту наступному користувачу</entry>
+  <entry key="94">Дано згоду</entry>
+  <entry key="95">Скасовано</entry>
+  <entry key="96">Заміна модератора</entry>
+  <entry key="97">Ви не є модератором даного курсу!</entry>
+  <entry key="98">Модератор:</entry>
+  <entry key="99">Вибачте, в цій кімнаті немає місця. Будь-ласка попробуйте ще через деякий час.</entry>
+  <entry key="100">Еліпс</entry>
+  <entry key="101">Закрити</entry>
+  <entry key="102">Помилка при вводі</entry>
+  <entry key="103">Ім'я користувача повинно складатись мінімум з 4 знаків</entry>
+  <entry key="104">Пароль повинен містити мінімум 4 знаки</entry>
+  <entry key="105">Це ім'я користувача вже присвоєне</entry>
+  <entry key="106">Введена електронна адреса вже зареєстрована</entry>
+  <entry key="107">Присутня помилка, просимо зв''язатись з адміністрацією</entry>
+  <entry key="108">Логін</entry>
+  <entry key="109">Користувач:</entry>
+  <entry key="110">Пароль:</entry>
+  <entry key="111">Мова</entry>
+  <entry key="112">Логін</entry>
+  <entry key="113">Зареєструватись</entry>
+  <entry key="114">Користувач:</entry>
+  <entry key="115">Пароль:</entry>
+  <entry key="116">Повторити:</entry>
+  <entry key="117">Ім'я:</entry>
+  <entry key="118">Прізвище:</entry>
+  <entry key="119">E-Mail:</entry>
+  <entry key="120">Країна:</entry>
+  <entry key="121">Зареєструватись</entry>
+  <entry key="122">Скасувати</entry>
+  <entry key="123">Регістр</entry>
+  <entry key="124">На головну</entry>
+  <entry key="125">Користувачі</entry>
+  <entry key="126">Групи</entry>
+  <entry key="127">Організації</entry>
+  <entry key="128">Кімнати для конференцій</entry>
+  <entry key="129">Публічно</entry>
+  <entry key="130">Організація</entry>
+  <entry key="131">Вхід</entry>
+  <entry key="132">Користувач</entry>
+  <entry key="133">Пароль</entry>
+  <entry key="134">Повторити</entry>
+  <entry key="135">Ім'я</entry>
+  <entry key="136">Прізвище</entry>
+  <entry key="137">E-Mail</entry>
+  <entry key="138">Дата народження</entry>
+  <entry key="139">Вулиця/№ будинка</entry>
+  <entry key="140">Індекс/населений пункт</entry>
+  <entry key="141">Країна</entry>
+  <entry key="142">Додаткова brінформація</entry>
+  <entry key="143">Дані користувача</entry>
+  <entry key="144">Зберегти</entry>
+  <entry key="145">Процес збереження</entry>
+  <entry key="146">Ідент. № користувача</entry>
+  <entry key="147">Логін</entry>
+  <entry key="148">Ім'я</entry>
+  <entry key="149">Прізвище</entry>
+  <entry key="150">Вперед</entry>
+  <entry key="151">Назад</entry>
+  <entry key="152">Стерти запис</entry>
+  <entry key="153">Скасувати</entry>
+  <entry key="154">Стери</entry>
+  <entry key="155">Створити запис</entry>
+  <entry key="156">Оновити запис</entry>
+  <entry key="157">Стерти запис</entry>
+  <entry key="158">Статус</entry>
+  <entry key="159">Заблоковано</entry>
+  <entry key="160">Активно</entry>
+  <entry key="161">Організації</entry>
+  <entry key="162">Календар</entry>
+  <entry key="163">Закрити</entry>
+  <entry key="164">Ідент. № організації</entry>
+  <entry key="165">Ім'я</entry>
+  <entry key="166">Користувач</entry>
+  <entry key="167">Модератор</entry>
+  <entry key="168">Адміністратор</entry>
+  <entry key="169">Роль користувача</entry>
+  <entry key="170">Організація</entry>
+  <entry key="171">Ім'я</entry>
+  <entry key="172">Додати організацію</entry>
+  <entry key="173">Додати організацію</entry>
+  <entry key="174">Скасувати</entry>
+  <entry key="175">Додати</entry>
+  <entry key="176">Стерти організацію</entry>
+  <entry key="177">Користувач</entry>
+  <entry key="178">Додати користувача</entry>
+  <entry key="179">Видалити користувача</entry>
+  <entry key="180">Додати користувача</entry>
+  <entry key="181">Пошук користувача</entry>
+  <entry key="182">Шукати</entry>
+  <entry key="183">Користувач</entry>
+  <entry key="184">Організація</entry>
+  <entry key="185">Обрати</entry>
+  <entry key="186">Кімнати для конференцій</entry>
+  <entry key="187">Кімнати для конференцій</entry>
+  <entry key="188">Ідент. №</entry>
+  <entry key="189">Ім'я</entry>
+  <entry key="190">Публічно</entry>
+  <entry key="191">Організації</entry>
+  <entry key="192">Кімнати для конференцій</entry>
+  <entry key="193">Ім'я</entry>
+  <entry key="194">Тип</entry>
+  <entry key="195">Публічно</entry>
+  <entry key="196">Коментар</entry>
+  <entry key="197">Зберегти</entry>
+  <entry key="198">Вікдрити</entry>
+  <entry key="199">Зберегти як</entry>
+  <entry key="200">Ім'я файлу</entry>
+  <entry key="201">Ім'я файлу</entry>
+  <entry key="202">Скасувати</entry>
+  <entry key="203">Зберегти</entry>
+  <entry key="204">Помилка</entry>
+  <entry key="205">Завантажити</entry>
+  <entry key="206">Об'єкт завантажений</entry>
+  <entry key="207">Синхронізація клієнтів. Залишилось клієнтів:</entry>
+  <entry key="208">Завантаження графічних даних</entry>
+  <entry key="209">Синхронізація клієнтів. Залишилось клієнтів:</entry>
+  <entry key="210">Очистити планшет</entry>
+  <entry key="211">Очистити планшет, при цьому всі зміни будуть втрачені!</entry>
+  <entry key="212">Перед завантаженням файлу запросити підтвердження</entry>
+  <entry key="213">Відіслати запрошення</entry>
+  <entry key="214">Відправити запрошення</entry>
+  <entry key="215">Тема</entry>
+  <entry key="216">Адреса одержувача</entry>
+  <entry key="217">Повідомлення</entry>
+  <entry key="218">Відправити</entry>
+  <entry key="219">Скасувати</entry>
+  <entry key="220">Відправити</entry>
+  <entry key="221">Данні користувача</entry>
+  <entry key="222">Нік для даної конфренції</entry>
+  <entry key="223">Прізвище/псевдонім</entry>
+  <entry key="224">Ім'я</entry>
+  <entry key="225">Прізвище</entry>
+  <entry key="226">E-Mail</entry>
+  <entry key="227">Мова</entry>
+  <entry key="228">Відправити</entry>
+  <entry key="229">Триває завантаження...</entry>
+  <entry key="230">Дані завантажуються, будь-ласка зачекайте...</entry>
+  <entry key="231">Невірний пароль</entry>
+  <entry key="232">Будь ласка введіть два ідентичні паролі, що містять мінімум 6 символи.</entry>
+  <entry key="233">Невірний e-mail</entry>
+  <entry key="234">Ви ввели не вірний e-mail</entry>
+  <entry key="235">Реєстрація завершена</entry>
+  <entry key="236">Ваш акаунт створено. Тепер Ви можете ввійти в систему.</entry>
+  <entry key="237">Ви не можете завантажити ваш знімок. Хтось вже зробив це.</entry>
+  <entry key="238">Завантаження заборонене</entry>
+  <entry key="239">Зробити знімок екрану</entry>
+  <entry key="240">Поганий пропускний кнаал: Ви не можете синхронізувати ваш екран. Фрейми будуть втрачені. Якщо це повідомлення повториться запитайте в модератора про зменшення якості.</entry>
+  <entry key="241">Екран:</entry>
+  <entry key="242">Малюнок</entry>
+  <entry key="243">Документ</entry>
+  <entry key="244">Чат</entry>
+  <entry key="245">Файли</entry>
+  <entry key="246">Користувачі</entry>
+  <entry key="247">Завантажити оригінальні документи</entry>
+  <entry key="248">Завантажити pdf документ</entry>
+  <entry key="249">Завантажити презентацію на планшет</entry>
+  <entry key="250">Налаштування</entry>
+  <entry key="251">Потягнути цей об'єкт</entry>
+  <entry key="252">Змінити розмір об'єкта</entry>
+  <entry key="253">%</entry>
+  <entry key="254">з</entry>
+  <entry key="255">На 1 сторінку</entry>
+  <entry key="256">На попередню сторінку</entry>
+  <entry key="257">На наступну сторінку</entry>
+  <entry key="258">На останню сторінку</entry>
+  <entry key="259">Зменшити</entry>
+  <entry key="260">Збільшити</entry>
+  <entry key="261">П.</entry>
+  <entry key="262">П.</entry>
+  <entry key="263">Налаштування</entry>
+  <entry key="264">ID</entry>
+  <entry key="265">Ключ</entry>
+  <entry key="266">Налаштування</entry>
+  <entry key="267">Ключ</entry>
+  <entry key="268">Останнє оновлення</entry>
+  <entry key="269">Оновлення</entry>
+  <entry key="270">Коментарі</entry>
+  <entry key="271">Ключ</entry>
+  <entry key="272">з</entry>
+  <entry key="273">Користувачі</entry>
+  <entry key="274">Стерти користувача з організації</entry>
+  <entry key="275">Стерти</entry>
+  <entry key="276">Цей користувач є вже учасником цієї організації.</entry>
+  <entry key="277">Новини</entry>
+  <entry key="278">Посиланння</entry>
+  <entry key="279">В Конференції</entry>
+  <entry key="280">В Аудиторії</entry>
+  <entry key="281">Допомога і підтримка</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">Повідомити про помилки!</entry>
+  <entry key="285">Більше</entry>
+  <entry key="286">Сайт проекту (http://openmeetings.apache.org)</entry>
+  <entry key="287">User Mailing List (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">Запам'ятати вхід</entry>
+  <entry key="289">Контент</entry>
+  <entry key="290">Моя домашня сторінка</entry>
+  <entry key="291">Заплановані конференції</entry>
+  <entry key="292">Заплановані події</entry>
+  <entry key="293">Публічні конференції</entry>
+  <entry key="294">Приватні конференції</entry>
+  <entry key="295">Публічні події</entry>
+  <entry key="296">Приватні події</entry>
+  <entry key="297">Публічний контент</entry>
+  <entry key="298">Приватний контент</entry>
+  <entry key="299">Персональний контент</entry>
+  <entry key="300"></entry>
+  <entry key="301">Модерація</entry>
+  <entry key="302">Призначити модератором</entry>
+  <entry key="303">Опитування</entry>
+  <entry key="304">Вибрати файл</entry>
+  <entry key="305">Налаштування</entry>
+  <entry key="306">Налаштування камери і мікрофона</entry>
+  <entry key="307">Налаштування планшету</entry>
+  <entry key="308">Вихід</entry>
+  <entry key="309">Повернутись до кімнат</entry>
+  <entry key="310">Вийти</entry>
+  <entry key="311">Провідник</entry>
+  <entry key="312">Запуск провідника</entry>
+  <entry key="313">Відео і Аудіо</entry>
+  <entry key="314">Чат</entry>
+  <entry key="315">Планшет</entry>
+  <entry key="316">Модерація</entry>
+  <entry key="317">Файли</entry>
+  <entry key="318">Користувачі</entry>
+  <entry key="319">Опитування</entry>
+  <entry key="320">Користувач з даним іменем відсутній</entry>
+  <entry key="321">На вашу поштоу скриньку вислано лист. Будь-ласка перевірте ваш поштову скриньку.</entry>
+  <entry key="322">Помилка</entry>
+  <entry key="323">Повідомлення</entry>
+  <entry key="324">Неправильний хеш. Користувача не знайдено.</entry>
+  <entry key="325">Скинути Ваш пароль</entry>
+  <entry key="326">Логін</entry>
+  <entry key="327">змінити пароль</entry>
+  <entry key="328">Новий пароль</entry>
+  <entry key="329">Повторіть пароль</entry>
+  <entry key="330">Введені паролі не ідентичні.</entry>
+  <entry key="331">Пароль повинен містити мінімум 4 символи!</entry>
+  <entry key="332">Пароль встановлено. Тепер ви можете ввійти.</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">Невідома помилка. Будь-ласка зв'яжіться з адміністратором.</entry>
+  <entry key="335">Невідоме ім'я користувача</entry>
+  <entry key="336">Невірний пароль</entry>
+  <entry key="337">Ви успішно вийшли з системи</entry>
+  <entry key="338">Попередня реєстрація вимкнена.</entry>
+  <entry key="339">Невірний e-mail</entry>
+  <entry key="340">Однакові імена файлів, будь-ласка виберіть інше ім'я</entry>
+  <entry key="341">Ім'я файлу надто коротке</entry>
+  <entry key="342">Неможливо зберегти адресу</entry>
+  <entry key="343">Користувач доданий, але Ви повинні додати користувача в організацію, бо інакше він не зможе ввійти в систему.</entry>
+  <entry key="344">Новий запис</entry>
+  <entry key="345">Не знайдено полів з цим ID.</entry>
+  <entry key="346">Не знайдено міток для цього поля.</entry>
+  <entry key="347">Потрібні права адміністратора</entry>
+  <entry key="348">Редактор мови</entry>
+  <entry key="349">Мова</entry>
+  <entry key="350">ID змінної</entry>
+  <entry key="351">ID змінної</entry>
+  <entry key="352">Значення</entry>
+  <entry key="353">Значення полів</entry>
+  <entry key="354">Назви міток</entry>
+  <entry key="355">Значення міток</entry>
+  <entry key="356">ID мітки</entry>
+  <entry key="357">Ви тільки стираєте мітку, а не поле! Ви не можете стерти поле, оскільки воно маже мітки на інших мовах.</entry>
+  <entry key="358">Невірний ID мітки. FieldLanguagesvalues_Id не знайдено в базі даних.</entry>
+  <entry key="359">Ви не можете стерти поле. Ви можете стирати лише мітки, а не поля. Немає мітки завантаженої в даний момент, або не існує мітки для даного поля.</entry>
+  <entry key="360">Експорт</entry>
+  <entry key="361">Ви повинні вийти з системи, щоб побачити внесені зміни.</entry>
+  <entry key="362">Додати нову мову</entry>
+  <entry key="363">Видалити мову</entry>
+  <entry key="364">Додати нову мову</entry>
+  <entry key="365">Ім'я</entry>
+  <entry key="366">Додати мову</entry>
+  <entry key="367">Резервні копії</entry>
+  <entry key="368">На початок</entry>
+  <entry key="369">Назад</entry>
+  <entry key="370">Наступне</entry>
+  <entry key="371">В кінець</entry>
+  <entry key="372">Розмови користувача (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">вкл/викл звук</entry>
+  <entry key="374">Система</entry>
+  <entry key="375">Особисті налаштування</entry>
+  <entry key="376">Привіт,</entry>
+  <entry key="377">Налаштувати профіль</entry>
+  <entry key="378">Нове повідомлення:</entry>
+  <entry key="379">Завантажити малюнок</entry>
+  <entry key="380">Дані користувача - Експорт</entry>
+  <entry key="381">Спочатку повинні бути створені усі організації</entry>
+  <entry key="382">Почати експорт</entry>
+  <entry key="383">По організаціях</entry>
+  <entry key="384">Почати експорт</entry>
+  <entry key="385">Дані користувача - імпорт</entry>
+  <entry key="386">Вибрати users.xml</entry>
+  <entry key="387">Імпорт</entry>
+  <entry key="388">Експортувати в XML</entry>
+  <entry key="389">Виберіть мовний файл для імпорту. Виберіть правильну мову зі списку! Незаважаючи, яку назву має файл, він буде імпортований в цю мову</entry>
+  <entry key="390">Імпорт - вибрати файл</entry>
+  <entry key="391">Зберегти як</entry>
+  <entry key="392">Ім'я:</entry>
+  <entry key="393">Коментарі:</entry>
+  <entry key="394">Зберегти</entry>
+  <entry key="395">Записи</entry>
+  <entry key="396">Перегляд записів</entry>
+  <entry key="397">Записи публічних і приватних кімнат</entry>
+  <entry key="398">Користувачі:</entry>
+  <entry key="399">Під'єднано:</entry>
+  <entry key="400"></entry>
+  <entry key="401">Користувачів в кімнаті:</entry>
+  <entry key="402">Оновити</entry>
+  <entry key="403">Ця кімната переповнена. Спробуйте ще через декілька хвилин.</entry>
+  <entry key="404">Виберіть кімнату щоб взнати деталі</entry>
+  <entry key="405">Чат з користувачами даної кімнати:</entry>
+  <entry key="406">Кімната:</entry>
+  <entry key="407">Користувачів в цій кімнаті:</entry>
+  <entry key="408">Після:</entry>
+  <entry key="409">Програти запис</entry>
+  <entry key="410">Довжина:</entry>
+  <entry key="411">Дата:</entry>
+  <entry key="412">Режим запису! Ви не можете змінити ніяких значень, цей файл вже записаний!</entry>
+  <entry key="413">Програти запис</entry>
+  <entry key="414">Програти / Пауза</entry>
+  <entry key="415">Початок запису</entry>
+  <entry key="416">Зупинити запис</entry>
+  <entry key="417">Запис:</entry>
+  <entry key="418">На даний момент хтось уже виконує запис:</entry>
+  <entry key="419">Запис! Користувач:</entry>
+  <entry key="420">Скасувати</entry>
+  <entry key="421">Запису був скасований і не може бути збережений.</entry>
+  <entry key="422">Продовжити</entry>
+  <entry key="423">Закрити це вікно і продовжити запис</entry>
+  <entry key="424">Інший колір лінії</entry>
+  <entry key="425">Вибрати колір</entry>
+  <entry key="426">Вкл / Викл колір лінії</entry>
+  <entry key="427">Змінити колір наповнення</entry>
+  <entry key="428">Викл / Вкл колір наповнення</entry>
+  <entry key="429">Змінити ширину лінії</entry>
+  <entry key="430">Закрити</entry>
+  <entry key="431">Змінити розмір шрифту</entry>
+  <entry key="432">Стерти запис</entry>
+  <entry key="433">Гість</entry>
+  <entry key="434">В:</entry>
+  <entry key="435">Ім'я</entry>
+  <entry key="436">Кімната</entry>
+  <entry key="437">Дата</entry>
+  <entry key="438">Відміна</entry>
+  <entry key="439">Старт</entry>
+  <entry key="440">Ім'я</entry>
+  <entry key="441">Дата</entry>
+  <entry key="442">Стерти лог чату серверу</entry>
+  <entry key="443">Чат</entry>
+  <entry key="444">Відправити повідомлення</entry>
+  <entry key="445">Емоції</entry>
+  <entry key="446">Емоції</entry>
+  <entry key="447">Виберіть публічні пристрої</entry>
+  <entry key="448">Аудіо і відео</entry>
+  <entry key="449">Лише аудіо</entry>
+  <entry key="450">Лише відео</entry>
+  <entry key="451">без Аудіо/Відео (статичні малюнки)</entry>
+  <entry key="452">Без показу Аудіо/Відео від вашого ПК. Буде доступна лиша картинка вашого профілю. Виберіть ці параметри якщо у вас поганий канал Internet.</entry>
+  <entry key="453">ПН</entry>
+  <entry key="454">ВТ</entry>
+  <entry key="455">СР</entry>
+  <entry key="456">ЧТ</entry>
+  <entry key="457">ПТ</entry>
+  <entry key="458">СБ</entry>
+  <entry key="459">НД</entry>
+  <entry key="460">Понеділок</entry>
+  <entry key="461">Вівторок</entry>
+  <entry key="462">Середа</entry>
+  <entry key="463">Четвер</entry>
+  <entry key="464">Пятниця</entry>
+  <entry key="465">Субота</entry>
+  <entry key="466">Неділя</entry>
+  <entry key="467">КТ</entry>
+  <entry key="468">Календарний тиждень</entry>
+  <entry key="469">Січень</entry>
+  <entry key="470">Лютий</entry>
+  <entry key="471">Березень</entry>
+  <entry key="472">Квітень</entry>
+  <entry key="473">Травень</entry>
+  <entry key="474">Червень</entry>
+  <entry key="475">Липень</entry>
+  <entry key="476">Серпень</entry>
+  <entry key="477">Вересень</entry>
+  <entry key="478">Жовтень</entry>
+  <entry key="479">Листопад</entry>
+  <entry key="480">Грудень</entry>
+  <entry key="481">Календар</entry>
+  <entry key="482">Учасники</entry>
+  <entry key="483">Показати налаштування показу</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Ширина | Висота</entry>
+  <entry key="486">Відео-контейнер</entry>
+  <entry key="487">Контейнер модерації</entry>
+  <entry key="488">X</entry>
+  <entry key="489">Контейнер планшету</entry>
+  <entry key="490">Активізувати</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">Ширина | Висота</entry>
+  <entry key="493">Контейнер файлів,чату,учасників -</entry>
+  <entry key="494">Активізувати</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">Ширина | Висота</entry>
+  <entry key="497">Модератор покинув кімнату. Ви можете стати модератором або чекати.</entry>
+  <entry key="498">Немає модератора в даній кімнаті, але є учасники. Ви можете стати модератором або чекати</entry>
+  <entry key="499">Зворотній зв'язок {0}</entry>
+  <entry key="500">{0} - Запрошення</entry>
+  <entry key="501">Повідомлення для користувачів:</entry>
+  <entry key="502">Повідомлення:</entry>
+  <entry key="503">Натисніть на цей лінк щоб взяти участь в конференції:</entry>
+  <entry key="504">Натисніть тут, щоб увійти в кімнату</entry>
+  <entry key="505">Якщо ви має проблему з даним посилання, будь-ласка скопіюйте його і вставте в свій браузер:</entry>
+  <entry key="506">{0} SignUp</entry>
+  <entry key="507">Ваші дані користувача:</entry>
+  <entry key="508">Логін:</entry>
+  <entry key="509">Пароль:</entry>
+  <entry key="510">E-mail:</entry>
+  <entry key="511">Команда {0}</entry>
+  <entry key="512">{0} Sign-Up</entry>
+  <entry key="513">{0} - Відновити пароль</entry>
+  <entry key="514">Натисніть на це посилання, щоб ввести новий пароль</entry>
+  <entry key="515">Натисніть тут, щоб вести новий пароль</entry>
+  <entry key="516">Якщо ви має проблему з даним посилання, будь-ласка скопіюйте його і вставте в свій браузер:</entry>
+  <entry key="517">Відновлення пароля {0}</entry>
+  <entry key="518">Будь-ласка введіть правильну дату, наприклад 24.12.2007 (dd.mm.yyyy)</entry>
+  <entry key="519">Будь ласка введіть дійсний E-mail, наприклад name@mail.com</entry>
+  <entry key="520">Будь ласка введіть число з плаваючою крапкою, наприклад 1.00</entry>
+  <entry key="521">Будь ласка введіть число, наприклад 100</entry>
+  <entry key="522">Будь ласка введіть дійсний номер, наприклад ++49 0123 123123</entry>
+  <entry key="523">Будь-ласка введіть час, наприклад 12:23 (hh:mm)</entry>
+  <entry key="524">Пароль захищений</entry>
+  <entry key="525">Пароль</entry>
+  <entry key="526">Період дійсності</entry>
+  <entry key="527">Бескінечний</entry>
+  <entry key="528">Період</entry>
+  <entry key="529">Минулий</entry>
+  <entry key="530">Дійсни з:</entry>
+  <entry key="531">Дійсний до:</entry>
+  <entry key="532">Запрошення на {0}</entry>
+  <entry key="533">Нема запрошення для цього коду</entry>
+  <entry key="534">Запрошення вже використане. Даний тип запрошення не може бути використаний багаторазово</entry>
+  <entry key="535">Код запрошення не дійсний.</entry>
+  <entry key="536">Пароль:</entry>
+  <entry key="537">Перевірити пароль</entry>
+  <entry key="538">Невірний пароль!</entry>
+  <entry key="539">Бравзер</entry>
+  <entry key="540">Синхронізувати аудіо/відео</entry>
+  <entry key="541">Вхід виконано, але Ваша сесія, яку ви пробували не активна чи збережена на сервері. Ви повинні отримати новий SessionId і повторити вхід.</entry>
+  <entry key="542">SessionId не є loggedin чи не має адміністраторських прав. SOAP шлюз потребує адміністаривних прав для додання нових користувачів.</entry>
+  <entry key="543">This Session has no Remoteuser-Data connected. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">На даний момент функція запису є в Beta-тестуванні!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">w</entry>
+  <entry key="550">width</entry>
+  <entry key="551">h</entry>
+  <entry key="552">height</entry>
+  <entry key="553">Change Transparency</entry>
+  <entry key="554">Browser Open</entry>
+  <entry key="555">Browser Close</entry>
+  <entry key="556">The Connection to the Server is lost. You need to reload the Application or/and check your Network.</entry>
+  <entry key="557">Pointer</entry>
+  <entry key="558">Synchronizing</entry>
+  <entry key="559">Synchronizing Users, please wait</entry>
+  <entry key="560">&lt;u&gt;Download as SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download as PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download as JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download as PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download as TIF&lt;/u&gt;</entry>
+  <entry key="565">Reminder:</entry>
+  <entry key="566">Category:</entry>
+  <entry key="567">Repetition:</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Location:</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">End</entry>
+  <entry key="572">Title:</entry>
+  <entry key="573">Comment:</entry>
+  <entry key="574">Invite People</entry>
+  <entry key="575">Daily</entry>
+  <entry key="576">Monthly</entry>
+  <entry key="577">Yearly</entry>
+  <entry key="578">Appointment-end is after of appointment-start!</entry>
+  <entry key="579">Please insert a title!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Activate this if you write in a right to left language (inverse word order)</entry>
+  <entry key="582">Dashboard</entry>
+  <entry key="583">Watch recorded Meetings or Events</entry>
+  <entry key="584">Meeting - Make a conference with 4 (up to 16) Users&lt;br/&gt;everybody will have audio + video access</entry>
+  <entry key="585">Event - Make a conference with up to 200 participents&lt;br/&gt;Only the Moderator will have audio/video</entry>
+  <entry key="586">Create users, rooms, organizations&lt;br/&gt; + change configuration</entry>
+  <entry key="587">Users in this Room now</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Loading Document. Please wait untill all Client have been synchronized.</entry>
+  <entry key="592">Upload complete, converting Document ...</entry>
+  <entry key="593">Start Upload</entry>
+  <entry key="594">Upload and Import Dialog. Please select a File from your Disk.</entry>
+  <entry key="595">Cancel</entry>
+  <entry key="596">Select File</entry>
+  <entry key="597">Connections</entry>
+  <entry key="598">Value</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connected since</entry>
+  <entry key="602">Room / Scope</entry>
+  <entry key="603">Kick User</entry>
+  <entry key="604">Kick User</entry>
+  <entry key="605">Do you really want to kick this Client from the Connection?&lt;br/&gt; This does only remove the Client from the current Room.The Client could re-login again.</entry>
+  <entry key="606">Your session has been closed by an Administrator or Moderator.</entry>
+  <entry key="607">Phone</entry>
+  <entry key="608">User is the Moderator of this Room</entry>
+  <entry key="609">User is allowed to draw on the Whiteboard</entry>
+  <entry key="610">(Re) Start Audio/Video or change Device Settings</entry>
+  <entry key="611">Allow this User to draw on the Whiteboard</entry>
+  <entry key="612">Remove ability to draw on whiteboard</entry>
+  <entry key="613">Users</entry>
+  <entry key="614">Files</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Your account is assigned to multiple Organizations. Please choose one for this Session.</entry>
+  <entry key="618">This room is full at the moment. Please try again later.</entry>
+  <entry key="619">Room Type</entry>
+  <entry key="620">Appointment Room</entry>
+  <entry key="621">Server Time</entry>
+  <entry key="622">{0} - Reminder</entry>
+  <entry key="623">Message from User:</entry>
+  <entry key="624">Message:</entry>
+  <entry key="625">Click this link to participate in the Meetings:</entry>
+  <entry key="626">Click here to enter room</entry>
+  <entry key="627">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="628">search intern</entry>
+  <entry key="629">extern users</entry>
+  <entry key="630">pre name</entry>
+  <entry key="631">name</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirm logout</entry>
+  <entry key="634">Are you sure you want to logout now?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Demo Room</entry>
+  <entry key="637">Demo Time</entry>
+  <entry key="638">Meeting Timer</entry>
+  <entry key="639">This Room is a Demo Room. To disable this warning you either should get a private meeting room for your personal usage or set up an own Server. You will be automatically logged off in:</entry>
+  <entry key="640">Moderated</entry>
+  <entry key="641">Please wait untill the Moderator has entered the Room. The Moderator can be either a Teacher, Admin or the creator of this Room.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Incoming Screen Sharing</entry>
+  <entry key="644">There is a new Screen Sharing incoming from the User:</entry>
+  <entry key="645">Start Sharing</entry>
+  <entry key="646">Add new Meeting</entry>
+  <entry key="647">Meeting Room</entry>
+  <entry key="648">Event Room</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderate Users</entry>
+  <entry key="651">Moderate Rooms</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Do you want to change this User to become a Moderator of that Organization?</entry>
+  <entry key="654">Please choose an Organization before you try to add a User to it!</entry>
+  <entry key="655">Organization - Moderator</entry>
+  <entry key="656">Do you really want to delete this User from the Organization?</entry>
+  <entry key="657">This User is Moderator</entry>
+  <entry key="658">This User is No-Moderator</entry>
+  <entry key="659">Do you want this User to be not a Moderator of this Organization?</entry>
+  <entry key="660">Add or delete Users or Rooms within your Organization</entry>
+  <entry key="661">Do you really want to delete this record?</entry>
+  <entry key="662">Do you really want to delete this user from your organization? You will only delete the connection between the user and your organization, to really delete the user itself you have to login into the Administration-Panel.</entry>
+  <entry key="663">You cannot delete your own User!</entry>
+  <entry key="664">This Method needs a Adminstration Account to be invoked!</entry>
+  <entry key="665">There was no Session associated with this ID.</entry>
+  <entry key="666">This is an Administrator or Moderator account. You can only edit this account through the Administration Panel.</entry>
+  <entry key="667">To complete your registration please click on the following link. Or copy the URL to your browser bar.</entry>
+  <entry key="668">Click to verify your E-Mail</entry>
+  <entry key="669">No user was found for this Hash.</entry>
+  <entry key="670">This user is already activated!</entry>
+  <entry key="671">You did successfully activate your account!</entry>
+  <entry key="672">Login Now</entry>
+  <entry key="673">Your account is not activated. First use the link in the Email you've received during registration.</entry>
+  <entry key="674">You successfully signed up. We've send an EMail with a verification Code to your Mail. Please check your Inbox.</entry>
+  <entry key="675">Remove Moderation Role from this User</entry>
+  <entry key="676">Grant Moderation Rights to this User</entry>
+  <entry key="677">User</entry>
+  <entry key="678">Access to whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Please choose any User on the List to grant him access to the Whiteboard, Moderation or Video.</entry>
+  <entry key="681">This User is already Moderator, so he has automatically the right to draw.</entry>
+  <entry key="682">This is you! You cannot remove the Moderation rights from yourself.</entry>
+  <entry key="683">Allow this User to Publish his Audio / Video</entry>
+  <entry key="684">Remove Audio/Video of this User</entry>
+  <entry key="685">I would like to get the moderation of this room</entry>
+  <entry key="686">I would like to draw on whiteboard</entry>
+  <entry key="687">I would like to share my Audio/Video</entry>
+  <entry key="688">You are moderator of this room</entry>
+  <entry key="689">You are allowed to draw on whiteboard</entry>
+  <entry key="690">You are allowed to share your Audio/Video</entry>
+  <entry key="691">Message to Moderator</entry>
+  <entry key="692">The User</entry>
+  <entry key="693">would like to get the Moderation. Use the status Icons next to the user in the List of Users to add or remove the Moderation.</entry>
+  <entry key="694">would like to draw on whiteboard. Use the status Icons next to the user in the List of Users to add or remove the right to draw anything on the whiteboard.</entry>
+  <entry key="695">would like to share his Audio/Video. Use the status Icons next to the user in the List of Users to add or remove the right to share Audio/Video for any User.</entry>
+  <entry key="696">You have to wait untill a Moderator enters the room.</entry>
+  <entry key="697">Cancel</entry>
+  <entry key="698">Save</entry>
+  <entry key="699">Day</entry>
+  <entry key="700">Month</entry>
+  <entry key="701">Year</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
new file mode 100644
index 0000000..bc4d6ec
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_zh_CN.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">会议</entry>
+  <entry key="2">会议</entry>
+  <entry key="3">演讲</entry>
+  <entry key="4">设置</entry>
+  <entry key="5">用户</entry>
+  <entry key="6">管理</entry>
+  <entry key="7">停止</entry>
+  <entry key="8">记录</entry>
+  <entry key="9">文件不存在</entry>
+  <entry key="10">由讲师记录</entry>
+  <entry key="11">已连接用户</entry>
+  <entry key="12">开始会议</entry>
+  <entry key="13">我的名称</entry>
+  <entry key="14">视频会议</entry>
+  <entry key="15">导入演示</entry>
+  <entry key="16">刷新列表</entry>
+  <entry key="17">转到主主文件</entry>
+  <entry key="18">新建投票</entry>
+  <entry key="19">新会议投票.</entry>
+  <entry key="20">问题:</entry>
+  <entry key="21">投票类型:</entry>
+  <entry key="22">创建</entry>
+  <entry key="23">提示:每个连接用户将收到一个新投票的消息提示.</entry>
+  <entry key="24">创建投票</entry>
+  <entry key="25">取消</entry>
+  <entry key="26">是/否</entry>
+  <entry key="27">数字 1-10</entry>
+  <entry key="28">投票</entry>
+  <entry key="29">主持人才能提问</entry>
+  <entry key="30">已您的投票.</entry>
+  <entry key="31">您已经投过这个票.</entry>
+  <entry key="32">投票 !</entry>
+  <entry key="33">你的回答:</entry>
+  <entry key="34">是</entry>
+  <entry key="35">否</entry>
+  <entry key="36">想要提问:</entry>
+  <entry key="37">投票结果</entry>
+  <entry key="38">提问:</entry>
+  <entry key="39">结果:</entry>
+  <entry key="40">回答:</entry>
+  <entry key="41">还未开始投票.</entry>
+  <entry key="42">投票!</entry>
+  <entry key="43">会议 (最大4用户)</entry>
+  <entry key="44">会议 (最大50用户)</entry>
+  <entry key="45">类型</entry>
+  <entry key="46">其他座位</entry>
+  <entry key="47">已经选择</entry>
+  <entry key="48">进入</entry>
+  <entry key="49">主持人已经离开.</entry>
+  <entry key="50">系统信息</entry>
+  <entry key="51">请选择设备</entry>
+  <entry key="52">请选择摄像头:</entry>
+  <entry key="53">请选择话筒:</entry>
+  <entry key="54">确定</entry>
+  <entry key="55">取消</entry>
+  <entry key="56">需要从新连接.</entry>
+  <entry key="57">编辑设置.</entry>
+  <entry key="58">课题:</entry>
+  <entry key="59">语言:</entry>
+  <entry key="60">确定</entry>
+  <entry key="61">取消</entry>
+  <entry key="62">清除白板</entry>
+  <entry key="63">新图片加入后清除白板?</entry>
+  <entry key="64">不再询问</entry>
+  <entry key="65">否</entry>
+  <entry key="66">编辑设置</entry>
+  <entry key="67">清除白板前确认.</entry>
+  <entry key="68">用户信息</entry>
+  <entry key="69">清除画板</entry>
+  <entry key="70">取消</entry>
+  <entry key="71">重做</entry>
+  <entry key="72">选择对象</entry>
+  <entry key="73">文本</entry>
+  <entry key="74">绘画</entry>
+  <entry key="75">画线</entry>
+  <entry key="76">下划线</entry>
+  <entry key="77">矩形</entry>
+  <entry key="78">椭圆</entry>
+  <entry key="79">箭头</entry>
+  <entry key="80">删除已选项</entry>
+  <entry key="81">接受主持</entry>
+  <entry key="82">应用</entry>
+  <entry key="83">取消</entry>
+  <entry key="84">成为主持</entry>
+  <entry key="85">关闭</entry>
+  <entry key="86">斜体</entry>
+  <entry key="87">粗体</entry>
+  <entry key="88">等待中</entry>
+  <entry key="89">用户想申请为主持:</entry>
+  <entry key="90">接受</entry>
+  <entry key="91">拒绝</entry>
+  <entry key="92">取消</entry>
+  <entry key="93">向下列用户发送请求</entry>
+  <entry key="94">接受</entry>
+  <entry key="95">拒绝</entry>
+  <entry key="96">更换主持</entry>
+  <entry key="97">你不是这个课题的主持!</entry>
+  <entry key="98">主持:</entry>
+  <entry key="99">房间已满.请稍后再试.</entry>
+  <entry key="100">椭圆</entry>
+  <entry key="101">关闭</entry>
+  <entry key="102">输入错误</entry>
+  <entry key="103">用户名必须长于4个字符</entry>
+  <entry key="104">用户密码必须长于4个字符</entry>
+  <entry key="105">用户名已存在</entry>
+  <entry key="106">邮件地址已注册</entry>
+  <entry key="107">系统错误,请联系管理员</entry>
+  <entry key="108">登录</entry>
+  <entry key="109">用户:</entry>
+  <entry key="110">密码:</entry>
+  <entry key="111">语言</entry>
+  <entry key="112">登录</entry>
+  <entry key="113">注册</entry>
+  <entry key="114">登录账号:</entry>
+  <entry key="115">密码:</entry>
+  <entry key="116">再次输入:</entry>
+  <entry key="117">姓:</entry>
+  <entry key="118">名:</entry>
+  <entry key="119">邮件:</entry>
+  <entry key="120">国家:</entry>
+  <entry key="121">注册</entry>
+  <entry key="122">取消</entry>
+  <entry key="123">注册</entry>
+  <entry key="124">首页</entry>
+  <entry key="125">用户管理</entry>
+  <entry key="126">群组管理</entry>
+  <entry key="127">组织管理</entry>
+  <entry key="128">会议室</entry>
+  <entry key="129">公开会议</entry>
+  <entry key="130">组织</entry>
+  <entry key="131">进入</entry>
+  <entry key="132">登录</entry>
+  <entry key="133">密码</entry>
+  <entry key="134">再次输入</entry>
+  <entry key="135">姓</entry>
+  <entry key="136">名</entry>
+  <entry key="137">邮件</entry>
+  <entry key="138">生日</entry>
+  <entry key="139">地址</entry>
+  <entry key="140">邮编</entry>
+  <entry key="141">国家</entry>
+  <entry key="142">详细地址</entry>
+  <entry key="143">用户数据</entry>
+  <entry key="144">保存</entry>
+  <entry key="145">保存</entry>
+  <entry key="146">用户编号</entry>
+  <entry key="147">登录</entry>
+  <entry key="148">姓</entry>
+  <entry key="149">名</entry>
+  <entry key="150">显示下一个</entry>
+  <entry key="151">显示前一个</entry>
+  <entry key="152">删除记录</entry>
+  <entry key="153">取消</entry>
+  <entry key="154">删除</entry>
+  <entry key="155">新记录</entry>
+  <entry key="156">刷新记录</entry>
+  <entry key="157">删除记录</entry>
+  <entry key="158">状态</entry>
+  <entry key="159">禁止</entry>
+  <entry key="160">允许</entry>
+  <entry key="161">组织管理</entry>
+  <entry key="162">日历</entry>
+  <entry key="163">关闭</entry>
+  <entry key="164">组织编号</entry>
+  <entry key="165">名称</entry>
+  <entry key="166">用户</entry>
+  <entry key="167">主持</entry>
+  <entry key="168">管理员</entry>
+  <entry key="169">用户级别</entry>
+  <entry key="170">组织</entry>
+  <entry key="171">名称</entry>
+  <entry key="172">添加组织</entry>
+  <entry key="173">添加组织</entry>
+  <entry key="174">取消</entry>
+  <entry key="175">添加</entry>
+  <entry key="176">删除组织</entry>
+  <entry key="177">用户</entry>
+  <entry key="178">添加用户</entry>
+  <entry key="179">删除用户</entry>
+  <entry key="180">添加用户</entry>
+  <entry key="181">搜索用户</entry>
+  <entry key="182">搜索</entry>
+  <entry key="183">用户</entry>
+  <entry key="184">组织</entry>
+  <entry key="185">进入</entry>
+  <entry key="186">会议室</entry>
+  <entry key="187">会议室</entry>
+  <entry key="188">编号</entry>
+  <entry key="189">名称</entry>
+  <entry key="190">公开</entry>
+  <entry key="191">组织</entry>
+  <entry key="192">会议室</entry>
+  <entry key="193">名称</entry>
+  <entry key="194">类型</entry>
+  <entry key="195">公开</entry>
+  <entry key="196">备注</entry>
+  <entry key="197">保存</entry>
+  <entry key="198">载入</entry>
+  <entry key="199">另存为</entry>
+  <entry key="200">文件名</entry>
+  <entry key="201">文件名</entry>
+  <entry key="202">取消</entry>
+  <entry key="203">保存</entry>
+  <entry key="204">错误</entry>
+  <entry key="205">读取中</entry>
+  <entry key="206">对象已载入</entry>
+  <entry key="207">同步用户中, 用户请等待:</entry>
+  <entry key="208">载入图像</entry>
+  <entry key="209">同步用户中, 用户请等待:</entry>
+  <entry key="210">清除绘画</entry>
+  <entry key="211">清除绘画, 绘画数据将丢失</entry>
+  <entry key="212">载入文件前请确认</entry>
+  <entry key="213">发送邀请</entry>
+  <entry key="214">发送邀请</entry>
+  <entry key="215">主题</entry>
+  <entry key="216">收信人</entry>
+  <entry key="217">消息</entry>
+  <entry key="218">发送</entry>
+  <entry key="219">取消</entry>
+  <entry key="220">发送</entry>
+  <entry key="221">用户数据</entry>
+  <entry key="222">会议昵称</entry>
+  <entry key="223">昵称</entry>
+  <entry key="224">姓</entry>
+  <entry key="225">名</entry>
+  <entry key="226">邮件</entry>
+  <entry key="227">语言</entry>
+  <entry key="228">进入</entry>
+  <entry key="229">载入中</entry>
+  <entry key="230">数据载入,请等待!</entry>
+  <entry key="231">错误的密码</entry>
+  <entry key="232">密码不得少于6个字符</entry>
+  <entry key="233">邮件有误</entry>
+  <entry key="234">非法邮件地址</entry>
+  <entry key="235">注册成功</entry>
+  <entry key="236">用户已建立. 请登录.</entry>
+  <entry key="237">现在不能共享屏幕. 屏幕已使用.</entry>
+  <entry key="238">禁止共享</entry>
+  <entry key="239">共享屏幕</entry>
+  <entry key="240">传输有误: 不能同步屏幕. 当前窗口将丢失. 请联系主持人降低画质.</entry>
+  <entry key="241">屏幕:</entry>
+  <entry key="242">绘画</entry>
+  <entry key="243">文档</entry>
+  <entry key="244">讨论</entry>
+  <entry key="245">文件</entry>
+  <entry key="246">成员</entry>
+  <entry key="247">下载原始文档</entry>
+  <entry key="248">下载PDF文档</entry>
+  <entry key="249">载入演示到白板</entry>
+  <entry key="250">设置</entry>
+  <entry key="251">拖动这个对象</entry>
+  <entry key="252">缩放这个对象</entry>
+  <entry key="253">%</entry>
+  <entry key="254">之</entry>
+  <entry key="255">转到第一页</entry>
+  <entry key="256">转到前一页</entry>
+  <entry key="257">转到后一页</entry>
+  <entry key="258">转到最后一页</entry>
+  <entry key="259">缩小</entry>
+  <entry key="260">放大</entry>
+  <entry key="261">先生.</entry>
+  <entry key="262">女士.</entry>
+  <entry key="263">配置信息</entry>
+  <entry key="264">序号</entry>
+  <entry key="265">关键字</entry>
+  <entry key="266">配置信息</entry>
+  <entry key="267">关键字</entry>
+  <entry key="268">最新更新</entry>
+  <entry key="269">更新者</entry>
+  <entry key="270">注释</entry>
+  <entry key="271">关键字</entry>
+  <entry key="272">的</entry>
+  <entry key="273">用户</entry>
+  <entry key="274">从组织中删除用户</entry>
+  <entry key="275">删除</entry>
+  <entry key="276">此组织中已存在该用户.</entry>
+  <entry key="277">新闻</entry>
+  <entry key="278">快速链接</entry>
+  <entry key="279">会议室导航</entry>
+  <entry key="280">观众室导航</entry>
+  <entry key="281">服务与支持</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">软件问题反馈</entry>
+  <entry key="285">更多</entry>
+  <entry key="286">项目主页 (http://openmeetings.apache.org)</entry>
+  <entry key="287">用户邮件列表 (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">记录登录</entry>
+  <entry key="289">内容</entry>
+  <entry key="290">我的主页</entry>
+  <entry key="291">我的会议日程</entry>
+  <entry key="292">我的事件日程</entry>
+  <entry key="293">开放会议</entry>
+  <entry key="294">私人会议</entry>
+  <entry key="295">开放事件</entry>
+  <entry key="296">私人事件</entry>
+  <entry key="297">开放内容</entry>
+  <entry key="298">私人内容</entry>
+  <entry key="299">个人内容</entry>
+  <entry key="300"></entry>
+  <entry key="301">主持人</entry>
+  <entry key="302">申请为主持人</entry>
+  <entry key="303">投票</entry>
+  <entry key="304">选择文件</entry>
+  <entry key="305">设置</entry>
+  <entry key="306">视频音频设置</entry>
+  <entry key="307">白板设置</entry>
+  <entry key="308">退出</entry>
+  <entry key="309">回到房间</entry>
+  <entry key="310">注销</entry>
+  <entry key="311">桌面查看器</entry>
+  <entry key="312">启动桌面查看器</entry>
+  <entry key="313">视频和音频</entry>
+  <entry key="314">讨论</entry>
+  <entry key="315">白板</entry>
+  <entry key="316">主持人</entry>
+  <entry key="317">文件</entry>
+  <entry key="318">用户</entry>
+  <entry key="319">投票</entry>
+  <entry key="320">没有此用户名</entry>
+  <entry key="321">一封包含特殊链接的邮件已发送至你的信箱,请查收.如果没有收到,请检查和调整你的邮箱垃圾邮件设置,重新发送认证邮件.</entry>
+  <entry key="322">错误</entry>
+  <entry key="323">消息</entry>
+  <entry key="324">无效的哈希值,没有该用户.</entry>
+  <entry key="325">重置你的密码</entry>
+  <entry key="326">登录</entry>
+  <entry key="327">更改密码</entry>
+  <entry key="328">新密码</entry>
+  <entry key="329">重新输入密码</entry>
+  <entry key="330">密码不一致.</entry>
+  <entry key="331">4个或更多的字符,注意大小写!</entry>
+  <entry key="332">密码设置完毕,你可以登录.</entry>
+  <entry key="333">完成</entry>
+  <entry key="334">未知错误.</entry>
+  <entry key="335">未发现该用户名</entry>
+  <entry key="336">无效密码</entry>
+  <entry key="337">注销成功</entry>
+  <entry key="338">禁止前端注册.</entry>
+  <entry key="339">无效邮件地址</entry>
+  <entry key="340">文件名重复, 请选择另一文件名</entry>
+  <entry key="341">文件名太短</entry>
+  <entry key="342">无法保存地址</entry>
+  <entry key="343">用户已增加,但你必须将该用户与一个组织关联,否则他可能无法登录.</entry>
+  <entry key="344">新纪录</entry>
+  <entry key="345">与此字段编号没有对应的字段</entry>
+  <entry key="346">没有发现该标签对应的字段</entry>
+  <entry key="347">需要管理员权限</entry>
+  <entry key="348">语言编辑器</entry>
+  <entry key="349">语言</entry>
+  <entry key="350">标识号</entry>
+  <entry key="351">标识名称</entry>
+  <entry key="352">标识值</entry>
+  <entry key="353">字段值</entry>
+  <entry key="354">标签名</entry>
+  <entry key="355">标签值</entry>
+  <entry key="356">标签号</entry>
+  <entry key="357">您只删除了标签而没删除字段,因为字段可能被其它标签所使用。</entry>
+  <entry key="358">无效的标签号,FieldLanguagesvalues_Id在数据库中缺失.</entry>
+  <entry key="359">您不能删除该字段。只能删除标签。当前没有载入该字段的标签,可能是对应的字段的标签缺失的缘故</entry>
+  <entry key="360">导出</entry>
+  <entry key="361">你必须注销才能看到变化.</entry>
+  <entry key="362">增加新的语言</entry>
+  <entry key="363">删除语言</entry>
+  <entry key="364">增加新的语言</entry>
+  <entry key="365">名称</entry>
+  <entry key="366">增加语言</entry>
+  <entry key="367">备份</entry>
+  <entry key="368">到首页</entry>
+  <entry key="369">到前一页</entry>
+  <entry key="370">到下一页</entry>
+  <entry key="371">到最后一页</entry>
+  <entry key="372">用户发言</entry>
+  <entry key="373">声音 开/关</entry>
+  <entry key="374">系统</entry>
+  <entry key="375">你的设置</entry>
+  <entry key="376">你好,</entry>
+  <entry key="377">编辑你的信息</entry>
+  <entry key="378">新消息:</entry>
+  <entry key="379">上传新图片</entry>
+  <entry key="380">用户数据 - 导出</entry>
+  <entry key="381">所有的组织必须事先存在!</entry>
+  <entry key="382">开始导出</entry>
+  <entry key="383">由组织</entry>
+  <entry key="384">开始导出</entry>
+  <entry key="385">用户数据 - 导入</entry>
+  <entry key="386">选择 users.xml</entry>
+  <entry key="387">导入</entry>
+  <entry key="388">导出为 XML - 这些文件能用于: - 创建项目 - 导入到另一个系统 - 备份 - 自定义 - 放入language 目录,可以在下一次安装使用</entry>
+  <entry key="389">选择一个语言文件导入. 在下拉框中选择正确的语言! 不管文件的名称是什么, 将覆盖当前的语言!</entry>
+  <entry key="390">导入 - 选择文件</entry>
+  <entry key="391">另存为</entry>
+  <entry key="392">名称:</entry>
+  <entry key="393">注释</entry>
+  <entry key="394">保存</entry>
+  <entry key="395">记录</entry>
+  <entry key="396">记录查看器</entry>
+  <entry key="397">开放和私人房间记录</entry>
+  <entry key="398">用户 :</entry>
+  <entry key="399">已参加:</entry>
+  <entry key="400"></entry>
+  <entry key="401">此房间的用户:</entry>
+  <entry key="402">刷新</entry>
+  <entry key="403">此房间已满. 请稍后再试.</entry>
+  <entry key="404">点击房间获取详细信息</entry>
+  <entry key="405">与此房间内的用户讨论:</entry>
+  <entry key="406">房间:</entry>
+  <entry key="407">此房间内的用户:</entry>
+  <entry key="408">自从:</entry>
+  <entry key="409">播放记录</entry>
+  <entry key="410">长度:</entry>
+  <entry key="411">日期:</entry>
+  <entry key="412">记录模式! 你不能更改任何信息, 这是一个记录文件!</entry>
+  <entry key="413">播放此记录</entry>
+  <entry key="414">播放 / 暂停</entry>
+  <entry key="415">开始记录</entry>
+  <entry key="416">停止记录</entry>
+  <entry key="417">记录中:</entry>
+  <entry key="418">现在已经有人在记录:</entry>
+  <entry key="419">记录中! 记录用户:</entry>
+  <entry key="420">取消</entry>
+  <entry key="421">记录将被取消且不被保存.</entry>
+  <entry key="422">继续</entry>
+  <entry key="423">关闭此窗口并且继续记录</entry>
+  <entry key="424">修改线条颜色</entry>
+  <entry key="425">选择颜色</entry>
+  <entry key="426">禁止 / 允许 线条颜色</entry>
+  <entry key="427">修改填充颜色</entry>
+  <entry key="428">禁止 / 允许 填充颜色</entry>
+  <entry key="429">修改 线宽</entry>
+  <entry key="430">关闭</entry>
+  <entry key="431">修改 字体大小</entry>
+  <entry key="432">删除记录</entry>
+  <entry key="433">客人</entry>
+  <entry key="434">由:</entry>
+  <entry key="435">名称</entry>
+  <entry key="436">房间</entry>
+  <entry key="437">日期</entry>
+  <entry key="438">取消</entry>
+  <entry key="439">开始</entry>
+  <entry key="440">名称</entry>
+  <entry key="441">日期</entry>
+  <entry key="442">删除服务器端讨论记录</entry>
+  <entry key="443">讨论</entry>
+  <entry key="444">发送消息</entry>
+  <entry key="445">表情</entry>
+  <entry key="446">表情</entry>
+  <entry key="447">选择发布设备</entry>
+  <entry key="448">音频和视频</entry>
+  <entry key="449">只有音频</entry>
+  <entry key="450">只有视频</entry>
+  <entry key="451">无 音频/视频 (静态图片)</entry>
+  <entry key="452">你的个人电脑上将不会有 音频/视频 发布, 而用你个人信息里的图片代替显示. 如果你遇到带宽问题或者速度过慢, 请选择这些设置.</entry>
+  <entry key="453">一</entry>
+  <entry key="454">二</entry>
+  <entry key="455">三</entry>
+  <entry key="456">四</entry>
+  <entry key="457">五</entry>
+  <entry key="458">六</entry>
+  <entry key="459">日</entry>
+  <entry key="460">星期一</entry>
+  <entry key="461">星期二</entry>
+  <entry key="462">星期三</entry>
+  <entry key="463">星期四</entry>
+  <entry key="464">星期五</entry>
+  <entry key="465">星期六</entry>
+  <entry key="466">星期日</entry>
+  <entry key="467">星期</entry>
+  <entry key="468">星期日历</entry>
+  <entry key="469">一月</entry>
+  <entry key="470">二月</entry>
+  <entry key="471">三月</entry>
+  <entry key="472">四月</entry>
+  <entry key="473">五月</entry>
+  <entry key="474">六月</entry>
+  <entry key="475">七月</entry>
+  <entry key="476">八月</entry>
+  <entry key="477">九月</entry>
+  <entry key="478">十月</entry>
+  <entry key="479">十一月</entry>
+  <entry key="480">十二月</entry>
+  <entry key="481">日历</entry>
+  <entry key="482">参与者</entry>
+  <entry key="483">显示布局设置</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">宽 | 高</entry>
+  <entry key="486">视频-容器</entry>
+  <entry key="487">主持人-容器</entry>
+  <entry key="488">X</entry>
+  <entry key="489">白板-容器</entry>
+  <entry key="490">允许</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">宽 | 高</entry>
+  <entry key="493">文件,讨论,参与者 - Container</entry>
+  <entry key="494">允许</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">宽 | 高</entry>
+  <entry key="497">主持人已离开房间. 现在无人演示. 你可以申请为主持人或者等待.</entry>
+  <entry key="498">此房间没有主持人, 但是有参与者. 你可以申请为主持人或者等待.</entry>
+  <entry key="499">反馈给{0}</entry>
+  <entry key="500">{0}——邀请</entry>
+  <entry key="501">消息发自:</entry>
+  <entry key="502">消息:</entry>
+  <entry key="503">点击此链接来参与会议:</entry>
+  <entry key="504">点击此处进入房间</entry>
+  <entry key="505">如果你在此链接遇到问题, 请拷贝并粘贴此链接到浏览器中:</entry>
+  <entry key="506">{0}——注册</entry>
+  <entry key="507">你的用户数据:</entry>
+  <entry key="508">登录:</entry>
+  <entry key="509">密码:</entry>
+  <entry key="510">邮件:</entry>
+  <entry key="511">{0}——团队</entry>
+  <entry key="512">{0}——注册</entry>
+  <entry key="513">{0}——重置密码</entry>
+  <entry key="514">点击此链接并键入新密码:</entry>
+  <entry key="515">点击此处键入新密码</entry>
+  <entry key="516">如果你在此链接遇到问题, 请拷贝并粘贴此链接到浏览器中:</entry>
+  <entry key="517">{0}系统重置密码</entry>
+  <entry key="518">请输入一个有效的日期, 比如 24.12.2001 (天.月.年)</entry>
+  <entry key="519">请输入一个有效的邮件地址, 比如 name@mail.com</entry>
+  <entry key="520">请输入一个浮点数, 比如 1.00</entry>
+  <entry key="521">请输入一个整数, 比如 100</entry>
+  <entry key="522">请输入一个有效的电话号码, 比如 ++86 010 12312123</entry>
+  <entry key="523">请输入一个有效的时间, 比如 12:23 (小时:分钟)</entry>
+  <entry key="524">密码保护</entry>
+  <entry key="525">密码</entry>
+  <entry key="526">有效期</entry>
+  <entry key="527">没有结束</entry>
+  <entry key="528">时期</entry>
+  <entry key="529">以前</entry>
+  <entry key="530">从:</entry>
+  <entry key="531">到:</entry>
+  <entry key="532">邀请参加{0}的讨论</entry>
+  <entry key="533">没有此邀请码对应的有效邀请</entry>
+  <entry key="534">此邀请已被使用. 此种类型邀请不能重用.</entry>
+  <entry key="535">此邀请码无效.</entry>
+  <entry key="536">密码:</entry>
+  <entry key="537">检查密码</entry>
+  <entry key="538">无效密码!</entry>
+  <entry key="539">浏览</entry>
+  <entry key="540">同步 音频/视频</entry>
+  <entry key="541">登录有效, 但是会话没有激活或保存在服务器上. 你必须重新登录获取新的会话.</entry>
+  <entry key="542">用户没有登录或没有管理员权限. SOAP网关必须要有管理员权限才可以添加新用户.</entry>
+  <entry key="543">此会话没有远端数据连接. 在访问应用程序之前你可能没有调用SOAP网关或者你使用了错误的Session-ID</entry>
+  <entry key="544">记录功能测试之中!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x轴</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y轴</entry>
+  <entry key="549">w</entry>
+  <entry key="550">宽</entry>
+  <entry key="551">h</entry>
+  <entry key="552">高</entry>
+  <entry key="553">改变透明度</entry>
+  <entry key="554">浏览器打开</entry>
+  <entry key="555">浏览器关闭</entry>
+  <entry key="556">与服务器的连接已丢失. 你需要重新载入程序或检查网络.</entry>
+  <entry key="557">指针</entry>
+  <entry key="558">同步</entry>
+  <entry key="559">正在同步用户, 请等待</entry>
+  <entry key="560">&lt;u&gt;下载为 SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;下载为 PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;下载为 JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;下载为 PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;下载为 TIF&lt;/u&gt;</entry>
+  <entry key="565">提醒:</entry>
+  <entry key="566">类别:</entry>
+  <entry key="567">重复:</entry>
+  <entry key="568">无</entry>
+  <entry key="569">位置:</entry>
+  <entry key="570">开始</entry>
+  <entry key="571">结束</entry>
+  <entry key="572">标题:</entry>
+  <entry key="573">注释:</entry>
+  <entry key="574">邀请</entry>
+  <entry key="575">每日</entry>
+  <entry key="576">每月</entry>
+  <entry key="577">每年</entry>
+  <entry key="578">约会结束日期必须晚于开始日期!</entry>
+  <entry key="579">请插入一个标题!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">如果您所用的语言是自右向左的,请激活此选项(反转字母顺序)</entry>
+  <entry key="582">仪表板</entry>
+  <entry key="583">观看已记录的会议或事件</entry>
+  <entry key="584">会议 - 创建一个4人会议(最多16人)&lt;br/&gt;每个人都有音频+视频权限</entry>
+  <entry key="585">事件 - 创建一个最多有200个听众的会议&lt;br/&gt;只有主持人拥有音频/视频</entry>
+  <entry key="586">创建用户, 房间, 组织&lt;br/&gt; + 修改配置</entry>
+  <entry key="587">目前有用户在此房间中</entry>
+  <entry key="588">身份识别</entry>
+  <entry key="589">登录</entry>
+  <entry key="590">D</entry>
+  <entry key="591">载入文档中. 所有用户正在同步,请稍等.</entry>
+  <entry key="592">上传结束, 正在转换文档 ...</entry>
+  <entry key="593">开始上传</entry>
+  <entry key="594">上传,导入对话框. 请从硬盘上选择一个文件.</entry>
+  <entry key="595">取消</entry>
+  <entry key="596">选择文件</entry>
+  <entry key="597">连接</entry>
+  <entry key="598">值</entry>
+  <entry key="599">流编号</entry>
+  <entry key="600">登录</entry>
+  <entry key="601">已连接 从</entry>
+  <entry key="602">房间 / 范围</entry>
+  <entry key="603">踢出用户</entry>
+  <entry key="604">踢出用户</entry>
+  <entry key="605">你确认从此连接断开用户?&lt;br/&gt; 仅将用户从此房间踢出.用户可以重新连入.</entry>
+  <entry key="606">你的会话已经被管理员或主持人关闭.</entry>
+  <entry key="607">电话</entry>
+  <entry key="608">用户是此房间的主持人</entry>
+  <entry key="609">用户被允许在白板上画画</entry>
+  <entry key="610">(Re) 启动音频/视频 或者修改设备配置</entry>
+  <entry key="611">允许此用户在白板上画画</entry>
+  <entry key="612">移除在白板画画功能</entry>
+  <entry key="613">用户</entry>
+  <entry key="614">文件</entry>
+  <entry key="615">白板</entry>
+  <entry key="616">讨论</entry>
+  <entry key="617">你的帐号已与多个组织关联. 请为当前会话选择一个组织.</entry>
+  <entry key="618">会议室当前满员,请稍后再试</entry>
+  <entry key="619">会议室类型</entry>
+  <entry key="620">指定会议室</entry>
+  <entry key="621">服务器时间</entry>
+  <entry key="622">{0}会议系统——提醒</entry>
+  <entry key="623">用户信息:</entry>
+  <entry key="624">消息:</entry>
+  <entry key="625">点击此链接参加会议</entry>
+  <entry key="626">点击进入会议室</entry>
+  <entry key="627">如果下面的链接无法点击,请将此链接地址复制到浏览器中进行访问:</entry>
+  <entry key="628">搜索</entry>
+  <entry key="629">外部用户</entry>
+  <entry key="630">头衔</entry>
+  <entry key="631">姓名</entry>
+  <entry key="632">邮件地址</entry>
+  <entry key="633">确认注销</entry>
+  <entry key="634">您确定要注销吗?</entry>
+  <entry key="635">操作</entry>
+  <entry key="636">演示会议室</entry>
+  <entry key="637">演示时间</entry>
+  <entry key="638">会议室计时器</entry>
+  <entry key="639">此会议室只是一个演示。如果不想此警告出现,可以创建一个私人会议室或者设置您自己的服务器。您的登录将会在如下时间内被自动注销:</entry>
+  <entry key="640">主持</entry>
+  <entry key="641">会议室需要一个主持人,主持人可以是讲座人、管理员或会议室创建者。</entry>
+  <entry key="642">确定</entry>
+  <entry key="643">新的屏幕共享</entry>
+  <entry key="644">屏幕共享,来自用户</entry>
+  <entry key="645">开始广播</entry>
+  <entry key="646">添加新会议</entry>
+  <entry key="647">会议室</entry>
+  <entry key="648">活动室</entry>
+  <entry key="649">主持人</entry>
+  <entry key="650">主持的用户</entry>
+  <entry key="651">主持的会议室</entry>
+  <entry key="652">M</entry>
+  <entry key="653">确定要将此用户设置为部门的主持人?</entry>
+  <entry key="654">在添加用户前请先选择一个部门</entry>
+  <entry key="655">部门-主持人</entry>
+  <entry key="656">确定要将此用户从部门中删除?</entry>
+  <entry key="657">此用户是主持人</entry>
+  <entry key="658">此用户不是主持人</entry>
+  <entry key="659">确定要取消该用户的支持人身份?</entry>
+  <entry key="660">在部门中添加或删除用户、会议室</entry>
+  <entry key="661">确定要删除此记录?</entry>
+  <entry key="662">确定要将此用户从部门删除?您只能删除用户与部门之间的关联,如果要删除此用户信息,请登录到管理单元进行操作</entry>
+  <entry key="663">您不能删除自己!</entry>
+  <entry key="664">此操作只能由管理员进行!</entry>
+  <entry key="665">没有与此ID关联的会话</entry>
+  <entry key="666">这是管理员或主持人帐户,您只能在管理模块中进行设置.</entry>
+  <entry key="667">要完成注册,请点击下面的链接,或将链接复制到地址栏中进行访问</entry>
+  <entry key="668">点击此处验证您的邮箱</entry>
+  <entry key="669">未找到此用户</entry>
+  <entry key="670">此用户已经激活!</entry>
+  <entry key="671">您已经成功激活帐户!</entry>
+  <entry key="672">正在登录</entry>
+  <entry key="673">您的帐户没有激活,请先使用注册时发送给您的邮件中的链接进行激活。</entry>
+  <entry key="674">注册成功!已经将验证码发送到您的邮箱,请查收。</entry>
+  <entry key="675">移除此用户的主持人角色</entry>
+  <entry key="676">赋予该用户主持的权限</entry>
+  <entry key="677">用户</entry>
+  <entry key="678">使用演示板</entry>
+  <entry key="679">主持人</entry>
+  <entry key="680">主持:请从列表中选择用户以赋予其使用演示版、主持或视频的权限</entry>
+  <entry key="681">此用户是主持人,已经自动拥有书写的权限</entry>
+  <entry key="682">您不能取消自己的主持人角色</entry>
+  <entry key="683">允许该用户发布声音或视频</entry>
+  <entry key="684">禁止该用户发布声音或视频</entry>
+  <entry key="685">我需要成为此会议室的主持人</entry>
+  <entry key="686">我需要在演示板上进行书写</entry>
+  <entry key="687">我需要共享声音和视频</entry>
+  <entry key="688">您是会议室的主持人</entry>
+  <entry key="689">您可以在演示板上进行书写了</entry>
+  <entry key="690">您可以接收声音和视频了</entry>
+  <entry key="691">主持人消息</entry>
+  <entry key="692">用户</entry>
+  <entry key="693">如果要成为主持人,请在用户列表中,通过该用户的状态图标进行设置</entry>
+  <entry key="694">如果要在演示板上书写,请在用户列表中,通过该用户的状态图标添加或删除此用户的书写权限。</entry>
+  <entry key="695">如果要共享声音和视频,请在用户列表中,通过该用户的状态图标设置是否共享此用户的声音和图像。</entry>
+  <entry key="696">会议室中必需有一个主持人</entry>
+  <entry key="697">取消</entry>
+  <entry key="698">保存</entry>
+  <entry key="699">日</entry>
+  <entry key="700">月</entry>
+  <entry key="701">年</entry>
+  <entry key="702">上载文件</entry>
+  <entry key="703">新建目录</entry>
+  <entry key="704">刷新</entry>
+  <entry key="705">回收站</entry>
+  <entry key="706">我的文件(Home Drive)</entry>
+  <entry key="707">会议室文件 (Public Drive)</entry>
+  <entry key="708">新建文件</entry>
+  <entry key="709">新建文件夹</entry>
+  <entry key="710">删除文件夹</entry>
+  <entry key="711">编辑文件名</entry>
+  <entry key="712">新建文件夹</entry>
+  <entry key="713">您确定要删除此项目?</entry>
+  <entry key="714">搜索</entry>
+  <entry key="715">搜索</entry>
+  <entry key="716">打开文档</entry>
+  <entry key="717">显示所有文件 (Tree View)</entry>
+  <entry key="718">关闭文档</entry>
+  <entry key="719">删除文件</entry>
+  <entry key="720">你没有绘画白板的权限。你必须是版主,或赋予你绘画白板的权利。你可以向版主申请绘画白板的权利。</entry>
+  <entry key="721">文档属性</entry>
+  <entry key="722">启动Java</entry>
+  <entry key="723">启动Flash</entry>
+  <entry key="724">用户希望分享他的屏幕。你想看到它吗?</entry>
+  <entry key="725">你正在分享你的屏幕。点击停止按钮可以中止分享会话。</entry>
+  <entry key="726">分享会话</entry>
+  <entry key="727">你正在分享你的屏幕!</entry>
+  <entry key="728">桌面浏览器</entry>
+  <entry key="729">停止分享</entry>
+  <entry key="730">桌面共享器</entry>
+  <entry key="731">单击开始发布您的屏幕</entry>
+  <entry key="732">开始分享</entry>
+  <entry key="733">暂停分享</entry>
+  <entry key="734">选择你的屏幕区域:</entry>
+  <entry key="735">改变宽度</entry>
+  <entry key="736">共享器已经结束会话!</entry>
+  <entry key="737">改变高度</entry>
+  <entry key="738">横向偏移</entry>
+  <entry key="739">纵向偏移</entry>
+  <entry key="740">宽:</entry>
+  <entry key="741">高:</entry>
+  <entry key="742">连接被服务器关闭</entry>
+  <entry key="743">取消</entry>
+  <entry key="744">启动Java</entry>
+  <entry key="745">如果你关闭本次会话,你将不能再重启本次会话的共享浏览器!</entry>
+  <entry key="746">确认关闭浏览会话</entry>
+  <entry key="747">分享屏幕</entry>
+  <entry key="748">录制会话</entry>
+  <entry key="749">分享浏览器</entry>
+  <entry key="750">Windows下火狐浏览器的分享浏览功能不太清晰,请使用其它浏览器来使用该功能</entry>
+  <entry key="751">前一页</entry>
+  <entry key="752">后一页</entry>
+  <entry key="753">重新载入</entry>
+  <entry key="754">首页</entry>
+  <entry key="755">载入</entry>
+  <entry key="756">将本页设为默认首页</entry>
+  <entry key="757">测试音频视频配置</entry>
+  <entry key="758">你在进入会议室前,可以使用音频视频测试来录制几秒钟的声音图像。然后通过回放你的录像录音来检查你的声音图像是否正常。</entry>
+  <entry key="759">下次不要再显示这个测试对话框</entry>
+  <entry key="760">取消</entry>
+  <entry key="761">开始进入会议室</entry>
+  <entry key="762">不要再次询问</entry>
+  <entry key="763">录制</entry>
+  <entry key="764">播放</entry>
+  <entry key="765">如果你不打算发表你的声音或图片,你可以不进行测试。没有音频或视频的参与者仍然可以使用白板,分享他们的屏幕或发布讨论消息。</entry>
+  <entry key="766">停止</entry>
+  <entry key="767">声音电平表</entry>
+  <entry key="768">按下开始</entry>
+  <entry key="769">开始会议</entry>
+  <entry key="770">开始演讲</entry>
+  <entry key="771">选择会议室</entry>
+  <entry key="772">检查音频视频设置</entry>
+  <entry key="773">开始会议</entry>
+  <entry key="774">参加视频会议的步骤如下:</entry>
+  <entry key="775">开始录制</entry>
+  <entry key="776">下次进入会议前不要再显示视频音频测试(录制)对话框</entry>
+  <entry key="777">公共会议室</entry>
+  <entry key="778">公共会议室--所有用户都能访问。</entry>
+  <entry key="779">私有会议室</entry>
+  <entry key="780">私有会议室--只允许同组织的用户访问。</entry>
+  <entry key="781">个人会议室</entry>
+  <entry key="782">个人会议室只供个人使用。 通过日历来设置会议的开始和结束日期时间。它们仅仅在有效期内罗列在此。</entry>
+  <entry key="783">这个操作需要主持人权限。</entry>
+  <entry key="784">申请成为主持人</entry>
+  <entry key="785">申请使用白板权限</entry>
+  <entry key="786">申请使用音频视频权限</entry>
+  <entry key="787">本次会话Hash已经使用,你不能同时使用两次。</entry>
+  <entry key="788">开始</entry>
+  <entry key="789">退出</entry>
+  <entry key="790">你真的退出会议吗?建议你清除你上载的文件、白板和讨论记录。</entry>
+  <entry key="791">退出会议</entry>
+  <entry key="792">会议室</entry>
+  <entry key="793">选择会议室</entry>
+  <entry key="794">日历中存在未有保存的事件。请选择保存它或删除它。</entry>
+  <entry key="795">请为你的会议添加至少一名与会者。</entry>
+  <entry key="796">你真的要删除你的事件?</entry>
+  <entry key="797">警告</entry>
+  <entry key="798">添加事件</entry>
+  <entry key="799">日</entry>
+  <entry key="800">周</entry>
+  <entry key="801">月</entry>
+  <entry key="802">描述</entry>
+  <entry key="803">与会者</entry>
+  <entry key="804">本远程视频会议系统是一个用来召开远程视频会议、培训演讲、审查文件的平台。按照上面的指引,按下开始按钮可以马上进入会议。或者进入日历预约一个会议计划</entry>
+  <entry key="805">预约会议</entry>
+  <entry key="806">要建立一个会议,您可以添加日历上的一个新的事件。对于每个日历事件将自动创建一个会议室。你和每一个与会者将获得一个到房间链接的电子邮件。&lt;br/&gt;&lt;br/&gt;您可以选择不同的房间类型有不同的布局和适度系统。您也可以为每日历事件选择不同的电子邮件通知发送类型</entry>
+  <entry key="807">需要帮助吗?</entry>
+  <entry key="808">受限制</entry>
+  <entry key="809">搜索</entry>
+  <entry key="810">添加</entry>
+  <entry key="811">没有选择用户。请从列表中选择一个项目,然后点击添加。</entry>
+  <entry key="812">添加与会者</entry>
+  <entry key="813">保存</entry>
+  <entry key="814">删除</entry>
+  <entry key="815">活动详情</entry>
+  <entry key="816">默认主持人</entry>
+  <entry key="817">超级用户</entry>
+  <entry key="818">用户号</entry>
+  <entry key="819">姓名</entry>
+  <entry key="820">邮件地址</entry>
+  <entry key="821">添加一个新的默认主持人</entry>
+  <entry key="822">是超级主持人</entry>
+  <entry key="823">如果房间拥有主持配置,那么拥有主持权限或管理员权限的人进入会议室后,将自动获取这个会议室的主持权。如果你不希望这样,而且你希望指定一个用户主持这个会议室,请使用默认主持人选项。</entry>
+  <entry key="824">一个超级主持人进入房间时,他将自动获取这个会议室的主持权限。没有人能取消他的主持权限。</entry>
+  <entry key="825">为用户申请超级主持权限</entry>
+  <entry key="826">取消超级主持权限</entry>
+  <entry key="827">D</entry>
+  <entry key="828">如果为会议室添加专属组织,那么只有该组织成员才能进入该会议室。(仅仅对公共会议室有效!)</entry>
+  <entry key="829">主持</entry>
+  <entry key="830">限制数</entry>
+  <entry key="831">单位</entry>
+  <entry key="832">你确认吗?</entry>
+  <entry key="833">你真的确认需要删除这个项目吗?你需要点击保存按钮来保存更改!</entry>
+  <entry key="834">没有用户被选择。添加前你必须先选择用户!</entry>
+  <entry key="835">添加新的默认主持人</entry>
+  <entry key="836">你确认要赋予该用户超级主持人权限吗?注意:其他主持人是无法取消超级主持人权限的。你需要保存房间对象来保存这些设置!</entry>
+  <entry key="837">你确认要取消该用户的超级主持人权限吗? 你需要保存房间对象来保存这些设置!</entry>
+  <entry key="838">这个是超级主持人!你不能取消一个超级主持人的权限!</entry>
+  <entry key="839">你真的要删除这个文件/文件夹?</entry>
+  <entry key="840">删除文件/文件夹?</entry>
+  <entry key="841">女士</entry>
+  <entry key="842">先生</entry>
+  <entry key="843">属性</entry>
+  <entry key="844">在共享器中显示鼠标位置</entry>
+  <entry key="845">使用SIP小应用程序共享音频</entry>
+  <entry key="846">使用SIP小应用程序共享音频,用flash共享视频</entry>
+  <entry key="847">满屏</entry>
+  <entry key="848">显示屏幕</entry>
+  <entry key="849">用户</entry>
+  <entry key="850">想分享他的屏幕。你想看到它吗?</entry>
+  <entry key="851">关闭</entry>
+  <entry key="852">缩放</entry>
+  <entry key="853">本次会话已经被发布分享用户关闭!</entry>
+  <entry key="854">暂停</entry>
+  <entry key="855">新的屏幕分享</entry>
+  <entry key="856">最小化</entry>
+  <entry key="857">最大化</entry>
+  <entry key="858">视频</entry>
+  <entry key="859">录制时间线</entry>
+  <entry key="860">私有会议记录</entry>
+  <entry key="861">公开会议记录</entry>
+  <entry key="862">信息</entry>
+  <entry key="863">名称</entry>
+  <entry key="864">长度</entry>
+  <entry key="865">日期</entry>
+  <entry key="866">用/以</entry>
+  <entry key="867">下载</entry>
+  <entry key="868">主 - 视频</entry>
+  <entry key="869">录制</entry>
+  <entry key="870">你可以同时录制和分享你的屏幕。你可以点击上面的开始按钮来让其他与会者看到你的屏幕。如果仅仅是录制会话,那点击开始录制按钮就足够了。</entry>
+  <entry key="871">开始录制</entry>
+  <entry key="872">停止录制</entry>
+  <entry key="873">下载 FLV 格式文件</entry>
+  <entry key="874">会议室</entry>
+  <entry key="875">播放</entry>
+  <entry key="876">停止</entry>
+  <entry key="877">用户打开麦克风</entry>
+  <entry key="878">停止分享</entry>
+  <entry key="879">允许所有用户发问</entry>
+  <entry key="880">关闭这个功能可以防止任何用户在你会议室捣乱。影响效果是向主持人发问的按钮是不可见的。</entry>
+  <entry key="881">权利</entry>
+  <entry key="882">下载 AVI 格式文件</entry>
+  <entry key="883">FLV格式</entry>
+  <entry key="884">AVI格式</entry>
+  <entry key="885">原始屏幕视频</entry>
+  <entry key="886">只用音频</entry>
+  <entry key="887">在处理记录时出错</entry>
+  <entry key="888">记录未准备好,请过几分钟再试</entry>
+  <entry key="889">日志:</entry>
+  <entry key="890">消息日志</entry>
+  <entry key="891">确认</entry>
+  <entry key="892">SIP控件没有准备好</entry>
+  <entry key="893">设置SIP账户</entry>
+  <entry key="894">每个用户的SIP设置。可以通过管理员打开或者关闭SIP。 &gt; 配置键值(enable_sip)。每个用户的SIP数据是自动产生的,可以通过“重新生成SIP数据”选项重新生成。</entry>
+  <entry key="895">SIP用户</entry>
+  <entry key="896">Sip密码</entry>
+  <entry key="897">Sip授权号</entry>
+  <entry key="898">登录到SIP网关失败,需要检查SIP供应商以及用户账号的授权。如果是管理员,还可以登录和检查配置,其它用户和主持人将不能进行任何操作。</entry>
+  <entry key="899">登录到SIP网关失败,请联系系统维护人员。</entry>
+  <entry key="900">正在登录SIP网关 ...</entry>
+  <entry key="901">正在登录SIP网关 ...</entry>
+  <entry key="902">显示日志</entry>
+  <entry key="903">会后记录日志</entry>
+  <entry key="904">SIP小应用程序的消息</entry>
+  <entry key="905">SIP控件没有准备好,请点击确认按钮允许控件的使用!</entry>
+  <entry key="906">申请成为主持人</entry>
+  <entry key="907">保存更改</entry>
+  <entry key="908">约定的会议已经更改了,您是否象保存这些更改?&lt;br/&gt;&lt;br/&gt;所有的参会人员都会受到时间更改后的会议通知邮件</entry>
+  <entry key="909">如需都区其它记录,请先登陆系统</entry>
+  <entry key="910">会议人员邀请</entry>
+  <entry key="911">会议可邀请的人员</entry>
+  <entry key="912">您是这次会议的主持人,您可以决定会议中谁可以发言,您也可以控制启动和停止会议的视频录制。</entry>
+  <entry key="913">开始录制</entry>
+  <entry key="914">结束录制</entry>
+  <entry key="915">会议视频录制已经开始</entry>
+  <entry key="916">视频录制已经停止,也可能还没开始</entry>
+  <entry key="917">会议视频录制已经开始d!</entry>
+  <entry key="918">取消</entry>
+  <entry key="919">录制的视频后续处理每1分钟时间需5分钟时间来处理,正在转码处理的录制视频是:</entry>
+  <entry key="920">您必须重新输入密码</entry>
+  <entry key="921">重新产生SIP数据</entry>
+  <entry key="922">您不能将文件或者文件夹移入自己所在的子目录!</entry>
+  <entry key="923">私有记录文件大小</entry>
+  <entry key="924">公共记录文件大小</entry>
+  <entry key="925">授权设置</entry>
+  <entry key="926">在授权时您可以把用户设置为有效期过期或者设置最大的使用时间数</entry>
+  <entry key="927">检查授权</entry>
+  <entry key="928">费率</entry>
+  <entry key="929">过期时间</entry>
+  <entry key="930">剩余的秒数</entry>
+  <entry key="931">总共时间</entry>
+  <entry key="932">您的授权已经过期,需要重新购买使用权</entry>
+  <entry key="933">点击购买</entry>
+  <entry key="934">账号上剩余的时间</entry>
+  <entry key="935">用户授权信息</entry>
+  <entry key="936">信息</entry>
+  <entry key="937">关闭</entry>
+  <entry key="938">您的授权已经过期,需要重新购买使用权</entry>
+  <entry key="939">授权设置</entry>
+  <entry key="940">您可以购买分钟数时间来召开会议,&lt;br/&gt;&lt;br/&gt; 或者使用3-12个月的费率折扣来购买,&lt;br/&gt;&lt;br/&gt;发送邀请函(直接进入会议室的外部链接)或者通过日历来创建会议是只能有包月的用户使用的</entry>
+  <entry key="941">9.99欧元购买60分钟(0.16欧元每分钟)</entry>
+  <entry key="942">19.99欧元购买5小时(0.06欧元每分钟)</entry>
+  <entry key="943">29.99欧元购买3个月(9.99欧元每个月)</entry>
+  <entry key="944">39.99欧元每6个月(6.66欧元每个月)</entry>
+  <entry key="945">按分钟数付费</entry>
+  <entry key="946">按语音流量付费</entry>
+  <entry key="947">您的授权永不过期</entry>
+  <entry key="948">您的授权即将在以下日期过期:</entry>
+  <entry key="949">您购买了分钟付费服务,您还有:</entry>
+  <entry key="950">购买新的信用卡!</entry>
+  <entry key="951">需要您自己的服务器?</entry>
+  <entry key="952">您如果想拥有自己的{0}会议服务器或者集成到已有的应用中去,5000元每次!</entry>
+  <entry key="953">或者给我们发送信息</entry>
+  <entry key="954">回复:</entry>
+  <entry key="955">消息:</entry>
+  <entry key="956">发送</entry>
+  <entry key="957">点此获取联系人信息</entry>
+  <entry key="958">信用卡详情</entry>
+  <entry key="959">名</entry>
+  <entry key="960">姓</entry>
+  <entry key="961">信用卡类型</entry>
+  <entry key="962">VISA卡</entry>
+  <entry key="963">主卡</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">快递</entry>
+  <entry key="966">信用卡号</entry>
+  <entry key="967">过期日期</entry>
+  <entry key="968">卡号验证码</entry>
+  <entry key="969">账单寄送地址</entry>
+  <entry key="970">地址</entry>
+  <entry key="971"></entry>
+  <entry key="972">城市</entry>
+  <entry key="973">国家</entry>
+  <entry key="974">省</entry>
+  <entry key="975">邮编</entry>
+  <entry key="976">数量</entry>
+  <entry key="977">提交</entry>
+  <entry key="978">步骤1: 支付单</entry>
+  <entry key="979">邮件地址</entry>
+  <entry key="980">点击‘payola付款’,接受visa卡,master卡,discover卡或美国运通卡。无需签入payola。德国居民也可通过借记卡付款(Per Lastschrift-Einzug)。</entry>
+  <entry key="981">感谢购买OpenMeetings。款项收到后您的帐户会被更新。您会在邮件中收到pdf格式的发票。您也可以在个人设置中查询过往交易。关闭此浏览窗口以回到OpenMeetings。</entry>
+  <entry key="982">点击购买</entry>
+  <entry key="983">点击购买</entry>
+  <entry key="984">步骤3: {0}系统支付 - 检查订单及付款!</entry>
+  <entry key="985">姓名</entry>
+  <entry key="986">付款已经收到</entry>
+  <entry key="987">您好,</entry>
+  <entry key="988">已经收到您的付款,并已经更新了您的用户设置。所有以往的付款信息都能够在您的用户配置中下载</entry>
+  <entry key="989">感谢您使用{0}系统!</entry>
+  <entry key="990">{0}系统已经收到您的付款-</entry>
+  <entry key="991">支付状态</entry>
+  <entry key="992">支付随机号</entry>
+  <entry key="993">分钟数</entry>
+  <entry key="994">约数</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">状态</entry>
+  <entry key="997">支付单</entry>
+  <entry key="998"></entry>
+  <entry key="999">您需要购买语音容量的费率才可以发送邀请或者通过日历创建会议。使用按分钟付费的方式就可以访问系统了,您也可以让第三方访问会议</entry>
+  <entry key="1000">该邮件地址已经被其他用户使用</entry>
+  <entry key="1001">SIP设置</entry>
+  <entry key="1002">会议号是自动创建的</entry>
+  <entry key="1003">SIP号</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">清除此片子中的所有对象</entry>
+  <entry key="1006">只有在状态栏中输入的URL地址才会发到参会者</entry>
+  <entry key="1007">创建团队会议室</entry>
+  <entry key="1008">为团队创建新的会议室!</entry>
+  <entry key="1009">您可以创建一新的会议室并选择参会人员。所有被选择的人员将自动的移动新的会议室,或者是接受到通知信。团队会议室的主持人可以获取所有会议室的列表,并在各会议室之间来回切换,方便各会议室的即时问题需要</entry>
+  <entry key="1010">用户名</entry>
+  <entry key="1011">登录</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">新团队会议室的所有成员:</entry>
+  <entry key="1014">创建团队会议室</entry>
+  <entry key="1015">取消</entry>
+  <entry key="1016">至少为团队会议室选择一个用户</entry>
+  <entry key="1017">为团队增加用户</entry>
+  <entry key="1018">从团队会议室中移除该用户</entry>
+  <entry key="1019">用户是团队会议室的主持人(他可以管理所有的团体会议并可以接受所管理的团队会议室的邀请)</entry>
+  <entry key="1020">会议类型</entry>
+  <entry key="1021">如果您选择“强制所有用户都移动新的会议室”,则所有选中的成员将自动的移到新创建的团队会议室中,否则他们会得到移到新会议室的通知按钮,用户可以自由选择是否进入新团队会议室。</entry>
+  <entry key="1022">管理团队成员</entry>
+  <entry key="1023">作为主持人,您可以游走在所有的团队会议室间,团队参会者可以发送消息给你,如:可以邀请您参与到他们的会议室中帮助他们。您也可以终止所有的团队会议,这样所有的用户将退出系统。</entry>
+  <entry key="1024">强制所有用户都移动新的会议室</entry>
+  <entry key="1025">姓名</entry>
+  <entry key="1026">被创建</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">参会的人员</entry>
+  <entry key="1030">使用加号从左边增加会议成员,或者从右边移除参会人员</entry>
+  <entry key="1031">1) 团队会议室设置</entry>
+  <entry key="1032">2) 将用户加入到团队会议室中</entry>
+  <entry key="1033">团队会议室名称</entry>
+  <entry key="1034">团队会议室</entry>
+  <entry key="1035">切换到该会议室中</entry>
+  <entry key="1036">切换到该团队会议室中</entry>
+  <entry key="1037">关闭团队会议室并让所有的用户退出</entry>
+  <entry key="1038">新的团队会议室</entry>
+  <entry key="1039">您有新的团队会议室可用</entry>
+  <entry key="1040">切换到团队会议室中</entry>
+  <entry key="1041">团队会议室动作</entry>
+  <entry key="1042">您可以通过主菜单中的“动作”菜单重新打开该窗口!</entry>
+  <entry key="1043">发送消息给团队会议室主持人</entry>
+  <entry key="1044">新建团队会议室</entry>
+  <entry key="1045">有新的会议室可用,您可以切入到该会议室中去。团队会议室就像有一群会议室,所有会议室有一个超级主持人可以请求帮助。在“我的会议室”中您可以看到团队会议室。</entry>
+  <entry key="1046">切换到团队会议室</entry>
+  <entry key="1047">创建者:</entry>
+  <entry key="1048">团队会议室名称:</entry>
+  <entry key="1049">如果您离开本会议室,窗口仍旧会保留!</entry>
+  <entry key="1050">本团会议室成员</entry>
+  <entry key="1051">3)其它您可以切入的团队会议室</entry>
+  <entry key="1052">如果碰到问题,请发送一条消息给团队会议室的主持人。</entry>
+  <entry key="1053">发送</entry>
+  <entry key="1054">2)邀请至这个团队会议室的所有用户</entry>
+  <entry key="1055">是否团队会议室主持人</entry>
+  <entry key="1056">所有的用户被主持人邀请至这个会议室</entry>
+  <entry key="1057">此刻团队会议室没有主持人!</entry>
+  <entry key="1058">请输入一条消息</entry>
+  <entry key="1059">请求帮助,我们在团队会议室中遇到了麻烦</entry>
+  <entry key="1060">一个团队会议室成员请求您的帮助</entry>
+  <entry key="1061">团队会议室请求帮助p</entry>
+  <entry key="1062">消息:</entry>
+  <entry key="1063">从:</entry>
+  <entry key="1064">您不属于任何团队的会议室,但您可以加入到任何团队的会议室中</entry>
+  <entry key="1065">备份系统,包括所有用户产生的数据,不过不包括语言配置,这是由于语言的配置是有系统安装时候导入的。如果需要更新您的系统,需要导出旧系统然后,1)重新生成数据库;2)导入备份的文件;3)在系统产生任何数据前先导入备份的文件。</entry>
+  <entry key="1066">系统备份</entry>
+  <entry key="1067">允许用户共享屏幕</entry>
+  <entry key="1068">D禁止用户共享屏幕</entry>
+  <entry key="1069">用户是主持人,可以做任何动作!</entry>
+  <entry key="1070">想共享屏幕</entry>
+  <entry key="1071">您可以共享屏幕了</entry>
+  <entry key="1072">请求共享屏幕</entry>
+  <entry key="1073">允许/禁止共享屏幕</entry>
+  <entry key="1074">T关闭声音</entry>
+  <entry key="1075">打开声音</entry>
+  <entry key="1076">只有音频</entry>
+  <entry key="1077">勾选此项可以使得会议室只能有音频功能有利于节省带宽</entry>
+  <entry key="1078">在共享屏幕期间允许远程控制</entry>
+  <entry key="1079">在共享屏幕期间禁止远程控制</entry>
+  <entry key="1080">请求在共享屏幕期间允许远程控制</entry>
+  <entry key="1081">您被允许在共享屏幕期间允许远程控制</entry>
+  <entry key="1082">想远程控制</entry>
+  <entry key="1083">用户是主持人,他可以操控任何功能! [远程桌面控制]</entry>
+  <entry key="1084">允许/禁止使用远程桌面控制的屏幕 (在屏幕共享时)</entry>
+  <entry key="1085">1) 从您的计算机到远程计算机:从本机的剪切板拷贝和粘贴到远程控制计算机中,首先在屏幕上点一下,然后在文本框中右键点击,选择“插入”。2)从远程计算机到您的计算机:从远程计算机拷贝文本到您的计算机中,首先高亮选择远程计算机的文本,然后右键点击屏幕选择拷贝高亮文本即可。</entry>
+  <entry key="1086">在您的计算和远程计算机间拷贝和粘贴文本</entry>
+  <entry key="1087">拷贝高亮文本</entry>
+  <entry key="1088">如何拷贝和粘贴</entry>
+  <entry key="1089">共享屏幕的质量:</entry>
+  <entry key="1090">超高清晰</entry>
+  <entry key="1091">高清晰</entry>
+  <entry key="1092">一般清晰</entry>
+  <entry key="1093">低清晰度</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">键盘:</entry>
+  <entry key="1097">关闭网络会议!</entry>
+  <entry key="1098">会议已经关闭,您将重定向到其它网址</entry>
+  <entry key="1099">关闭会议室</entry>
+  <entry key="1100">关闭后展示给用户的地址URL</entry>
+  <entry key="1101">会议室关闭设置</entry>
+  <entry key="1102">如果会议室关闭则用户会被重定位到相应的地址中去</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">编号</entry>
+  <entry key="1105">名称</entry>
+  <entry key="1106">配置文件</entry>
+  <entry key="1107">Ldap配置</entry>
+  <entry key="1108">名称</entry>
+  <entry key="1109">是否有效</entry>
+  <entry key="1110">被插入</entry>
+  <entry key="1111">插入者</entry>
+  <entry key="1112">被更新</entry>
+  <entry key="1113">更新者</entry>
+  <entry key="1114">配置文件需要与hibernate.cfg.xml文件在同一目录中,您需要手工的将配置文件上传到该文件夹中,对该文件的任何修改都会即刻在系统中反应出来。</entry>
+  <entry key="1115">配置文件名称</entry>
+  <entry key="1116">如果您勾选了“增加域选项”,则在登录界面中将出现“域”选择下拉框选项。这项功能在LDAP目录服务的配置中是非常有用的。如:如果用户使用hans@localhost.com作为ldap目录服务的登录名,则在用户名中只需要输入hans,而域选项则选择localhost.com</entry>
+  <entry key="1117">在用户名后加入域名</entry>
+  <entry key="1118">域名</entry>
+  <entry key="1119">插入</entry>
+  <entry key="1120">拷贝高亮文本</entry>
+  <entry key="1121">远程粘贴板中的文本</entry>
+  <entry key="1122">显示远程粘贴板</entry>
+  <entry key="1123">不要再显示</entry>
+  <entry key="1124">在此拷贝文本 ...</entry>
+  <entry key="1125">您需要远程控制的权限或者是作为主持人才能进行拷贝和粘贴的操作</entry>
+  <entry key="1126">编辑默认配置...</entry>
+  <entry key="1127">不要在远程控制中显示拷贝和粘贴的信息框</entry>
+  <entry key="1128">保存</entry>
+  <entry key="1129">移除</entry>
+  <entry key="1130">取消</entry>
+  <entry key="1131">邀请用户参与会议</entry>
+  <entry key="1132">选择一个会议室,被邀请者会受到一条您的名字和进入会议室的链接</entry>
+  <entry key="1133">连接时间:</entry>
+  <entry key="1134">邀请后进入会议室</entry>
+  <entry key="1135">邀请</entry>
+  <entry key="1136">消息</entry>
+  <entry key="1137">想请您加入会议室:</entry>
+  <entry key="1138">邀请信</entry>
+  <entry key="1139">发送邀请</entry>
+  <entry key="1140">不希望收到您的邀请!</entry>
+  <entry key="1141">同意</entry>
+  <entry key="1142">拒绝</entry>
+  <entry key="1143">时区</entry>
+  <entry key="1144">事件详情</entry>
+  <entry key="1145">姓名</entry>
+  <entry key="1146">详细描述</entry>
+  <entry key="1147">创建者</entry>
+  <entry key="1148">时区信息</entry>
+  <entry key="1149">勾选“时区”选项使得用户在下次登录时可以让他们更新用户资料信息</entry>
+  <entry key="1150">请查核您所在的时区.</entry>
+  <entry key="1151">新会议:</entry>
+  <entry key="1152">详细情况</entry>
+  <entry key="1153">开始时间:</entry>
+  <entry key="1154">结束时间:</entry>
+  <entry key="1155">会议变更:</entry>
+  <entry key="1156">主持人:</entry>
+  <entry key="1157">会议取消:</entry>
+  <entry key="1158">会议提醒:</entry>
+  <entry key="1159">社区设置</entry>
+  <entry key="1160">联系信息对于任何人都可见</entry>
+  <entry key="1161">添加个人专长以便其他人方便找到您,用逗号分隔多个专长</entry>
+  <entry key="1162">供职单位</entry>
+  <entry key="1163">个人兴趣</entry>
+  <entry key="1164">姓名</entry>
+  <entry key="1165">时区</entry>
+  <entry key="1166">个人特长</entry>
+  <entry key="1167">联系信息</entry>
+  <entry key="1168">只给自己的联系人显示联系信息</entry>
+  <entry key="1169">不开放个人联系信息</entry>
+  <entry key="1170">个人简介</entry>
+  <entry key="1171">设置</entry>
+  <entry key="1172">查找用户</entry>
+  <entry key="1173">您的简介可被其它人查看</entry>
+  <entry key="1174">编辑个人信息</entry>
+  <entry key="1175">查找其它人员</entry>
+  <entry key="1176">查找</entry>
+  <entry key="1177">供职单位</entry>
+  <entry key="1178">其它信息</entry>
+  <entry key="1179">关键字</entry>
+  <entry key="1180">姓名</entry>
+  <entry key="1181">时区</entry>
+  <entry key="1182">供职</entry>
+  <entry key="1183">搜索</entry>
+  <entry key="1184">搜索返回结果</entry>
+  <entry key="1185">动作</entry>
+  <entry key="1186">增加为联系人</entry>
+  <entry key="1187">发送消息</entry>
+  <entry key="1188">联系人及消息</entry>
+  <entry key="1189">被禁止的用户</entry>
+  <entry key="1190">接受</entry>
+  <entry key="1191">拒绝</entry>
+  <entry key="1192">您好,</entry>
+  <entry key="1193">想把您添加为联系人.</entry>
+  <entry key="1194">检查您的联系人请求消息,通过点击链接来接受或者拒绝请求</entry>
+  <entry key="1195">该用户已经在您的联系人表中,或者该用户收到您的邀请后没有处理</entry>
+  <entry key="1196">联系人列表</entry>
+  <entry key="1197">编辑联系人及消息,处理还未处理的请求!</entry>
+  <entry key="1198">已经确认了您的请求!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">查看 /拷贝讨论日志</entry>
+  <entry key="1201">讨论日志</entry>
+  <entry key="1202">来自</entry>
+  <entry key="1203">主题</entry>
+  <entry key="1204">发送</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">消息</entry>
+  <entry key="1207">新的邮件</entry>
+  <entry key="1208">给所有联系人发送新消息</entry>
+  <entry key="1209">撰写新消息</entry>
+  <entry key="1210">发送给:</entry>
+  <entry key="1211">主题:</entry>
+  <entry key="1212">使用满屏功能将使白板根据参会人员的屏幕分辨率调整可见性</entry>
+  <entry key="1213">踢出用户</entry>
+  <entry key="1214">您不能将自己踢出,如果想离开,请关闭浏览器或者退出点击按钮</entry>
+  <entry key="1215">您确信将该用户踢出会议室吗?</entry>
+  <entry key="1216">确认...</entry>
+  <entry key="1217">您不能将超级主持人踢出会议室!</entry>
+  <entry key="1218">预订会议室</entry>
+  <entry key="1219">开始</entry>
+  <entry key="1220">结束</entry>
+  <entry key="1221">在会议请求消息中增加其他内容,该请求事件会添加到所有的参会人员的日历中</entry>
+  <entry key="1222">收件箱</entry>
+  <entry key="1223">发送箱</entry>
+  <entry key="1224">回收站</entry>
+  <entry key="1225">您不能把自己加入为联系人</entry>
+  <entry key="1226">用户已经拒绝请求!</entry>
+  <entry key="1227">用户已经接受请求!</entry>
+  <entry key="1228">用户请求已经失效!</entry>
+  <entry key="1229">用户已经加入到联系人列表!</entry>
+  <entry key="1230">用户已经拒绝联系人请求,并从未处理联系人中移除!</entry>
+  <entry key="1231">没有这样的联系人!</entry>
+  <entry key="1232">您确实想移除该联系人马?</entry>
+  <entry key="1233">移除确认</entry>
+  <entry key="1234">从联系人单中删除联系人</entry>
+  <entry key="1235">用户简介</entry>
+  <entry key="1236">显示用户资料</entry>
+  <entry key="1237">消息</entry>
+  <entry key="1238">查找</entry>
+  <entry key="1239">全部选择</entry>
+  <entry key="1240">全部取消</entry>
+  <entry key="1241">选择未阅读的</entry>
+  <entry key="1242">选择已阅读的</entry>
+  <entry key="1243">移动到文件夹...</entry>
+  <entry key="1244">增加新文件夹...</entry>
+  <entry key="1245">删除</entry>
+  <entry key="1246">删除的邮件仍旧在垃圾箱中!</entry>
+  <entry key="1247">标记未阅读的</entry>
+  <entry key="1248">标记已阅的</entry>
+  <entry key="1249">回复</entry>
+  <entry key="1250">给所有人回复</entry>
+  <entry key="1251">转发</entry>
+  <entry key="1252">动作...</entry>
+  <entry key="1253">发送私人消息</entry>
+  <entry key="1254">没有选择任何消息!</entry>
+  <entry key="1255">移入收件箱</entry>
+  <entry key="1256">彻底删除</entry>
+  <entry key="1257">不可撤销的动作!</entry>
+  <entry key="1258">增加文件夹</entry>
+  <entry key="1259">增加文件夹并整理消息!</entry>
+  <entry key="1260">增加文件夹</entry>
+  <entry key="1261">增加</entry>
+  <entry key="1262">删除文件夹</entry>
+  <entry key="1263">您不能删除该文件夹,文件夹中还有消息,首先删除消息或者移动到其它文件夹中</entry>
+  <entry key="1264">编辑姓名</entry>
+  <entry key="1265">您确信要删除该文件夹吗?删除后不可撤销</entry>
+  <entry key="1266">您的请求已发送到用户,对方会收到一条接受或者拒绝的通知,只有被接受了的用户才会出现在您的联系人中</entry>
+  <entry key="1267">消息</entry>
+  <entry key="1268">用户没有共享个人信息</entry>
+  <entry key="1269">用户只对他的联系人共享信息</entry>
+  <entry key="1270">地址 &amp; 电话</entry>
+  <entry key="1271">邀请编码已经失效,该码只有一段时间的有效期</entry>
+  <entry key="1272">此事件与日历中的几个其他用户相关联,您的更改同时会更新其他用户的日历,您确实需要更新吗?</entry>
+  <entry key="1273">确认更新</entry>
+  <entry key="1274">允许其他用户查看日历</entry>
+  <entry key="1275">不共享日历</entry>
+  <entry key="1276">日历中的联系人</entry>
+  <entry key="1277">您需要得到确认才可以查看其他用户的日历</entry>
+  <entry key="1278">您不能删除他人的日历!</entry>
+  <entry key="1279">只显示自己的日历!</entry>
+  <entry key="1280">此事件与日历中的几个其他用户相关联,您删除同时会删除其他用户的日历,您确实需要删除吗?</entry>
+  <entry key="1281">确认删除</entry>
+  <entry key="1282">进入会议室</entry>
+  <entry key="1283">访问会议室</entry>
+  <entry key="1284">此消息中包含预订会议室的消息</entry>
+  <entry key="1285">您需要首先保存事件!</entry>
+  <entry key="1286">会议室不存在,日历中的事件已经被取消</entry>
+  <entry key="1287">选择您的昵称</entry>
+  <entry key="1288">名</entry>
+  <entry key="1289">姓</entry>
+  <entry key="1290">邮件地址</entry>
+  <entry key="1291">确认</entry>
+  <entry key="1292">最少4个字符,需要姓和名。</entry>
+  <entry key="1293">请输入有效的邮件地址!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">使用Facebook账号登录</entry>
+  <entry key="1296">成为成员的时间</entry>
+  <entry key="1297">您已经使用Facebook账号登录,您需要使用正确的邮箱地址更新您的资料,如果邮箱不正确,您将不能从其他联系人中收到邀请。</entry>
+  <entry key="1298">消息</entry>
+  <entry key="1299">不再显示简介更新的消息</entry>
+  <entry key="1300">更多的显示选项...</entry>
+  <entry key="1301">新的私人消息:</entry>
+  <entry key="1302">点此查看简介以及全部的消息</entry>
+  <entry key="1303">回复</entry>
+  <entry key="1304">会议室及讨论</entry>
+  <entry key="1305">会议室</entry>
+  <entry key="1306">在线会议室(1-16人)</entry>
+  <entry key="1307">在线研讨会(1-120人)</entry>
+  <entry key="1308">成员号</entry>
+  <entry key="1309">请输入密码</entry>
+  <entry key="1310">您需要账号</entry>
+  <entry key="1311">Web-Service (通过SOAP访问)</entry>
+  <entry key="1312">直接载入到白板</entry>
+  <entry key="1313">您是否真的想删除白板?此动作不可逆!</entry>
+  <entry key="1314">载入到白板</entry>
+  <entry key="1315">不用忘记录制,一个用户一个会是室的情况经常需要录制</entry>
+  <entry key="1316">开支录制</entry>
+  <entry key="1317">箭头</entry>
+  <entry key="1318">圆</entry>
+  <entry key="1319">直线</entry>
+  <entry key="1320">矩形</entry>
+  <entry key="1321">三角形</entry>
+  <entry key="1322">文本/便签</entry>
+  <entry key="1323">剪贴画</entry>
+  <entry key="1324">自有绘制</entry>
+  <entry key="1325">选择/移动</entry>
+  <entry key="1326">绘制形状</entry>
+  <entry key="1327">剪切/移动</entry>
+  <entry key="1328">缩小/放大</entry>
+  <entry key="1329">打印</entry>
+  <entry key="1330">撤销</entry>
+  <entry key="1331">回收站</entry>
+  <entry key="1332">增加网格</entry>
+  <entry key="1333">共享文件</entry>
+  <entry key="1334">形状选取</entry>
+  <entry key="1335">点击选取</entry>
+  <entry key="1336">拷贝</entry>
+  <entry key="1337">剪切</entry>
+  <entry key="1338">粘贴</entry>
+  <entry key="1339">删除</entry>
+  <entry key="1340">您是否真的想删除白板中的所有内容?</entry>
+  <entry key="1341">直接载入到白板</entry>
+  <entry key="1342">参与者</entry>
+  <entry key="1343">考勤管理员</entry>
+  <entry key="1344">出席</entry>
+  <entry key="1345">远程控制</entry>
+  <entry key="1346">弹出</entry>
+  <entry key="1347">讨论</entry>
+  <entry key="1348">邀请参与人员</entry>
+  <entry key="1349">通过邮件</entry>
+  <entry key="1350">用户是主持人</entry>
+  <entry key="1351">用户将摄像头打开了</entry>
+  <entry key="1352">关闭以形状方式填充</entry>
+  <entry key="1353">激活以形状方式填充</entry>
+  <entry key="1354">自动按网格排列</entry>
+  <entry key="1355">允许录制</entry>
+  <entry key="1356">等待录制</entry>
+  <entry key="1357">掩藏顶栏</entry>
+  <entry key="1358">播放视频</entry>
+  <entry key="1359">确定删除当前幻灯片的内容?</entry>
+  <entry key="1360">接受并且授予用户权限</entry>
+  <entry key="1361">拒绝</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">活动</entry>
+  <entry key="1364">移除白板</entry>
+  <entry key="1365">您需要主持人权限操作白板</entry>
+  <entry key="1366">不允许</entry>
+  <entry key="1367">离开了会议室.</entry>
+  <entry key="1368">数学符号</entry>
+  <entry key="1369">未分类</entry>
+  <entry key="1370">配色方案</entry>
+  <entry key="1371">质量</entry>
+  <entry key="1372">域</entry>
+  <entry key="1373">访问</entry>
+  <entry key="1374">橙色</entry>
+  <entry key="1375">浅绿色</entry>
+  <entry key="1376">浅蓝色</entry>
+  <entry key="1377">深蓝色</entry>
+  <entry key="1378">金黄色</entry>
+  <entry key="1379">银灰色</entry>
+  <entry key="1380">自定义</entry>
+  <entry key="1381">最佳体验</entry>
+  <entry key="1382">上行</entry>
+  <entry key="1383">适中</entry>
+  <entry key="1384">静音</entry>
+  <entry key="1385">开启麦克风</entry>
+  <entry key="1386">给予独家音频</entry>
+  <entry key="1387">已被主持人设置为全场静音,不可本人解除</entry>
+  <entry key="1388">是否设置本人为全场静音?</entry>
+  <entry key="1389">是否确认设置本人为全场静音?其他用户将无法听到你。</entry>
+  <entry key="1390">是否设置其他用户为静音?</entry>
+  <entry key="1391">是否确认设置此麦克风为静音?仅限于此屏幕设置。其他用户不受影响。仅主持人可设置全场静音</entry>
+  <entry key="1392">设置其他用户为全场静音?</entry>
+  <entry key="1393">是否确认设置此用户为全场静音?其他用户将无法听到他/她</entry>
+  <entry key="1394">声音已打开。单击此处将请求主持人设置本人为全场(本会议室)静音</entry>
+  <entry key="1395">声音已关闭。单击此处将请求主持人解除本人全场(本会议室)静音设置</entry>
+  <entry key="1396">请求主持人设置本人为全场静音</entry>
+  <entry key="1397">请求主持人解除本人全场静音设置</entry>
+  <entry key="1398">请求主持人解除自身静音设置</entry>
+  <entry key="1399">请求主持人设置自身为静音</entry>
+  <entry key="1400">解除静音。单击此处将设置该用户为全场静音</entry>
+  <entry key="1401">设置静音。单击此处将解除该用户全场静音设置</entry>
+  <entry key="1402">该用户已被主持人设置为全场静音。你无法解除静音设置</entry>
+  <entry key="1403">设置本人为全场静音</entry>
+  <entry key="1404">解除本人全场静音设置</entry>
+  <entry key="1405">设置为静音</entry>
+  <entry key="1406">解除静音设置</entry>
+  <entry key="1407">设置为全场设置</entry>
+  <entry key="1408">解除全场静音设置</entry>
+  <entry key="1409">仅限主持人可设置/解除任一用户全场静音设置。设置本人静音:请使用你视频中的麦克风图标。</entry>
+  <entry key="1410">调查名称</entry>
+  <entry key="1411">调查人</entry>
+  <entry key="1412">存档的调查</entry>
+  <entry key="1413">活跃</entry>
+  <entry key="1414">简单图表</entry>
+  <entry key="1415">饼图</entry>
+  <entry key="1416">请输入邮箱</entry>
+  <entry key="1417">新信息</entry>
+  <entry key="1418">关闭调查</entry>
+  <entry key="1419">确定要关闭此调查?其他人将无法投票。</entry>
+  <entry key="1420">删除调查</entry>
+  <entry key="1421">确定要删除此调查?调查结果也将会被删除。</entry>
+  <entry key="1422">语言ISO码</entry>
+  <entry key="1423">允许/拒绝提供独家音频的权利</entry>
+  <entry key="1424">允许用户提供独家音频</entry>
+  <entry key="1425">拒绝用户提供独家音频</entry>
+  <entry key="1426">希望被允许独家音频</entry>
+  <entry key="1427">希望主持人允许本人提供独家音频</entry>
+  <entry key="1428">允许提供独家音频</entry>
+  <entry key="1429">摄像头像素</entry>
+  <entry key="1430">更改像素会影响频宽,较大的图片需要较高频宽</entry>
+  <entry key="1431">你无权给予自己或其他人独家音频。需要向主持人申请该权利或申请得到独家音频。</entry>
+  <entry key="1432">希望得到独家音频的权利</entry>
+  <entry key="1433">赋予我独家音频(或点击你的视频,或点击F12)</entry>
+  <entry key="1434">麦克风已打开</entry>
+  <entry key="1435">麦克风已被静音</entry>
+  <entry key="1436">隐藏对话</entry>
+  <entry key="1437">隐藏活动</entry>
+  <entry key="1438">隐藏档案总管</entry>
+  <entry key="1439">隐藏操作菜单</entry>
+  <entry key="1440">隐藏屏幕共享</entry>
+  <entry key="1441">隐藏白板</entry>
+  <entry key="1442">显示视频中麦克风状态</entry>
+  <entry key="1443">布局选项</entry>
+  <entry key="1444">新事件</entry>
+  <entry key="1445">密码保护是当你保存日历事件时发送给参与者的会议链接,而非会议室。如果多次用不同密码保存事件,每个参与者会收到一个新链接和新密码,但之前发出的链接仍将适用。</entry>
+  <entry key="1446">编辑详情</entry>
+  <entry key="1447">显示sip拨号</entry>
+  <entry key="1448">拨打</entry>
+  <entry key="1449">显示联系人的日历事件</entry>
+  <entry key="1450">你的主页</entry>
+  <entry key="1451">安排你的会议</entry>
+  <entry key="1452">观看录音及访问</entry>
+  <entry key="1453">选择及启动网络会议</entry>
+  <entry key="1454">管理用户及权利</entry>
+  <entry key="1455">管理连接及踢除用户</entry>
+  <entry key="1456">管理用户组</entry>
+  <entry key="1457">管理会议室</entry>
+  <entry key="1458">管理系统设置</entry>
+  <entry key="1459">管理标签及文字</entry>
+  <entry key="1460">管理LDAP及ADS配置</entry>
+  <entry key="1461">输出/输入系统备份</entry>
+  <entry key="1462">需要主持人或被赋予权利以在白板上绘图,上传,添加,删除或加载文件及文件夹。</entry>
+  <entry key="1463">编辑内容</entry>
+  <entry key="1464">教授</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml b/src/web/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
new file mode 100644
index 0000000..18965ac
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/Application_zh_TW.properties.xml
@@ -0,0 +1,1872 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+  <entry key="1">视訊會議</entry>
+  <entry key="2">會議</entry>
+  <entry key="3">會議廳</entry>
+  <entry key="4">設定</entry>
+  <entry key="5">用戶</entry>
+  <entry key="6">管理</entry>
+  <entry key="7">停止</entry>
+  <entry key="8">記錄</entry>
+  <entry key="9">沒有資料</entry>
+  <entry key="10">老師記錄</entry>
+  <entry key="11">連接用戶 :</entry>
+  <entry key="12">啟動會議</entry>
+  <entry key="13">我的名字</entry>
+  <entry key="14">视訊會議</entry>
+  <entry key="15">輸入演示</entry>
+  <entry key="16">刷新列表</entry>
+  <entry key="17">回到主要檔案</entry>
+  <entry key="18">新的民意</entry>
+  <entry key="19">一項新的民意測驗給這會議</entry>
+  <entry key="20">問題:</entry>
+  <entry key="21">民調類型 :</entry>
+  <entry key="22">建立</entry>
+  <entry key="23">信息:每個接入用戶收到新的民意信息</entry>
+  <entry key="24">創造一個新的民調</entry>
+  <entry key="25">取诮</entry>
+  <entry key="26">是/否</entry>
+  <entry key="27">數字的 1-10</entry>
+  <entry key="28">民調</entry>
+  <entry key="29">必須是主持人能提出問題</entry>
+  <entry key="30">你的投票己登記</entry>
+  <entry key="31">你已經投票在本次民調中</entry>
+  <entry key="32">投票!</entry>
+  <entry key="33">你的回應 :</entry>
+  <entry key="34">是</entry>
+  <entry key="35">否</entry>
+  <entry key="36">知道事情的立場:</entry>
+  <entry key="37">投票結果</entry>
+  <entry key="38">問題:</entry>
+  <entry key="39">結果:</entry>
+  <entry key="40">答案:</entry>
+  <entry key="41">民調還沒開始</entry>
+  <entry key="42">投票!</entry>
+  <entry key="43">會議 (最多4席)</entry>
+  <entry key="44">會議 (最多50席)</entry>
+  <entry key="45">類型</entry>
+  <entry key="46">其他席位</entry>
+  <entry key="47">已選定</entry>
+  <entry key="48">進入</entry>
+  <entry key="49">主持人已經離開了會議 .</entry>
+  <entry key="50">系統信息</entry>
+  <entry key="51">選擇裝置</entry>
+  <entry key="52">選擇攝像机 :</entry>
+  <entry key="53">選擇麥克風 :</entry>
+  <entry key="54">设定好了</entry>
+  <entry key="55">取消</entry>
+  <entry key="56">你需要重新連接 .</entry>
+  <entry key="57">編輯設定 .</entry>
+  <entry key="58">課程 :</entry>
+  <entry key="59">語言 :</entry>
+  <entry key="60">设定好了</entry>
+  <entry key="61">取消</entry>
+  <entry key="62">清掉電子白板</entry>
+  <entry key="63">你想要在加圖片之前先清掉白板嗎?</entry>
+  <entry key="64">不要再問</entry>
+  <entry key="65">否</entry>
+  <entry key="66">編輯設定</entry>
+  <entry key="67">請求確認清掉白板</entry>
+  <entry key="68">用户資料</entry>
+  <entry key="69">清掉畫圖</entry>
+  <entry key="70">撤消</entry>
+  <entry key="71">重做</entry>
+  <entry key="72">選擇對象</entry>
+  <entry key="73">全文</entry>
+  <entry key="74">繪畫</entry>
+  <entry key="75">畫線</entry>
+  <entry key="76">畫強洞底線</entry>
+  <entry key="77">長方形</entry>
+  <entry key="78">橢圓形</entry>
+  <entry key="79">箭頭</entry>
+  <entry key="80">刪除選定項目</entry>
+  <entry key="81">申請成為主持人</entry>
+  <entry key="82">應用</entry>
+  <entry key="83">取消</entry>
+  <entry key="84">成為主持人</entry>
+  <entry key="85">關閉</entry>
+  <entry key="86">斜體字</entry>
+  <entry key="87">粗體字</entry>
+  <entry key="88">等待</entry>
+  <entry key="89">有用户想申請成為主持人</entry>
+  <entry key="90">接受</entry>
+  <entry key="91">拒绝</entry>
+  <entry key="92">取诮</entry>
+  <entry key="93">送出請求到以下的用戶</entry>
+  <entry key="94">接受</entry>
+  <entry key="95">拒绝</entry>
+  <entry key="96">改變主持人</entry>
+  <entry key="97">你不是這課程的主持人!</entry>
+  <entry key="98">主持人:</entry>
+  <entry key="99">這個房間已滿 . 對不起 ,請捎後再試</entry>
+  <entry key="100">橢圓形</entry>
+  <entry key="101">關閉</entry>
+  <entry key="102">輸入資料有誤</entry>
+  <entry key="103">用戶名必須至少4個字符</entry>
+  <entry key="104">用戶密碼必須至少4個字符</entry>
+  <entry key="105">用戶台已被姶用</entry>
+  <entry key="106">這電子郵件已註冊过了</entry>
+  <entry key="107">系統錯誤 ,請聯繫系統管理員</entry>
+  <entry key="108">登錄</entry>
+  <entry key="109">用戶 :</entry>
+  <entry key="110">密碼 :</entry>
+  <entry key="111">語言</entry>
+  <entry key="112">註冊登錄</entry>
+  <entry key="113">報名</entry>
+  <entry key="114">用戶 :</entry>
+  <entry key="115">密碼 :</entry>
+  <entry key="116">重打:</entry>
+  <entry key="117">名稱:</entry>
+  <entry key="118">姓氏:</entry>
+  <entry key="119">郵件 :</entry>
+  <entry key="120">國家 :</entry>
+  <entry key="121">登記</entry>
+  <entry key="122">取消</entry>
+  <entry key="123">登記</entry>
+  <entry key="124">首頁</entry>
+  <entry key="125">用戶管理</entry>
+  <entry key="126">團體管理</entry>
+  <entry key="127">組織管理</entry>
+  <entry key="128">會議室</entry>
+  <entry key="129">公開會議</entry>
+  <entry key="130">組織</entry>
+  <entry key="131">進入</entry>
+  <entry key="132">登錄</entry>
+  <entry key="133">密碼</entry>
+  <entry key="134">重打</entry>
+  <entry key="135">名稱</entry>
+  <entry key="136">姓氏</entry>
+  <entry key="137">郵件</entry>
+  <entry key="138">生日</entry>
+  <entry key="139">街名/號碼</entry>
+  <entry key="140">郵編 /城市</entry>
+  <entry key="141">國家</entry>
+  <entry key="142">地址-信息</entry>
+  <entry key="143">用户资料</entry>
+  <entry key="144">保存</entry>
+  <entry key="145">保存</entry>
+  <entry key="146">用户-ID</entry>
+  <entry key="147">登錄</entry>
+  <entry key="148">名稱</entry>
+  <entry key="149">姓氏</entry>
+  <entry key="150">顯示下一個</entry>
+  <entry key="151">顯示前一個</entry>
+  <entry key="152">刪除紀錄</entry>
+  <entry key="153">取消</entry>
+  <entry key="154">刪除</entry>
+  <entry key="155">新紀錄</entry>
+  <entry key="156">刷新紀錄</entry>
+  <entry key="157">刪除紀錄</entry>
+  <entry key="158">狀態</entry>
+  <entry key="159">關閉</entry>
+  <entry key="160">啟動</entry>
+  <entry key="161">組織</entry>
+  <entry key="162">日曆</entry>
+  <entry key="163">關閉</entry>
+  <entry key="164">組織 -ID</entry>
+  <entry key="165">名稱</entry>
+  <entry key="166">用戶</entry>
+  <entry key="167">主持</entry>
+  <entry key="168">管理</entry>
+  <entry key="169">用戶級別</entry>
+  <entry key="170">組織</entry>
+  <entry key="171">名稱</entry>
+  <entry key="172">增加組織</entry>
+  <entry key="173">增加組織</entry>
+  <entry key="174">取消</entry>
+  <entry key="175">增加</entry>
+  <entry key="176">移除組織</entry>
+  <entry key="177">用戶</entry>
+  <entry key="178">增加用戶</entry>
+  <entry key="179">移除用戶</entry>
+  <entry key="180">增加用戶</entry>
+  <entry key="181">尋找用戶</entry>
+  <entry key="182">尋找</entry>
+  <entry key="183">用戶</entry>
+  <entry key="184">組織</entry>
+  <entry key="185">進入</entry>
+  <entry key="186">會議室</entry>
+  <entry key="187">會議室</entry>
+  <entry key="188">身份證</entry>
+  <entry key="189">名字</entry>
+  <entry key="190">公開</entry>
+  <entry key="191">組織</entry>
+  <entry key="192">會議室</entry>
+  <entry key="193">名字</entry>
+  <entry key="194">類型</entry>
+  <entry key="195">公開</entry>
+  <entry key="196">評論</entry>
+  <entry key="197">保存</entry>
+  <entry key="198">輸入</entry>
+  <entry key="199">另存為</entry>
+  <entry key="200">文件名稱</entry>
+  <entry key="201">文件名稱</entry>
+  <entry key="202">取消</entry>
+  <entry key="203">保存</entry>
+  <entry key="204">錯誤</entry>
+  <entry key="205">輸入中</entry>
+  <entry key="206">主題輸入</entry>
+  <entry key="207">正在同步客戶 ,客戶請诮等</entry>
+  <entry key="208">載入圖檔</entry>
+  <entry key="209">正在同步客戶 ,客戶請诮等</entry>
+  <entry key="210">清除畫圖區</entry>
+  <entry key="211">清除畫圖區,所有资料會不見!</entry>
+  <entry key="212">確認後再載入檔案</entry>
+  <entry key="213">發送邀請</entry>
+  <entry key="214">發送邀請</entry>
+  <entry key="215">主題</entry>
+  <entry key="216">受邀者</entry>
+  <entry key="217">信息</entry>
+  <entry key="218">送出</entry>
+  <entry key="219">取消</entry>
+  <entry key="220">送出</entry>
+  <entry key="221">用戶資料</entry>
+  <entry key="222">你這次會議的別名</entry>
+  <entry key="223">別名</entry>
+  <entry key="224">名稱</entry>
+  <entry key="225">姓名</entry>
+  <entry key="226">電子郵件</entry>
+  <entry key="227">語言</entry>
+  <entry key="228">進入</entry>
+  <entry key="229">載入</entry>
+  <entry key="230">资料正在載入, 請诮等!</entry>
+  <entry key="231">密碼錯誤</entry>
+  <entry key="232">請輸入兩個相同的密碼最少6個字符</entry>
+  <entry key="233">錯的郵件</entry>
+  <entry key="234">你輸入了一個無效的郵件地址</entry>
+  <entry key="235">註冊完成</entry>
+  <entry key="236">你的賬戶已經建立. 你現在以可登錄</entry>
+  <entry key="237">己有別人在共用這电子白板, 你现在暫時無法再分享。</entry>
+  <entry key="238">嚴禁共享</entry>
+  <entry key="239">分享你的屏幕</entry>
+  <entry key="240">如果看到這項警告,顯示你的频寬不夠造成無法同步屏幕. 您可以問主持人降低寬頻標準 .</entry>
+  <entry key="241">畫面用户:</entry>
+  <entry key="242">畫圖</entry>
+  <entry key="243">文件</entry>
+  <entry key="244">聊天</entry>
+  <entry key="245">檔案</entry>
+  <entry key="246">會員</entry>
+  <entry key="247">下載原始文件</entry>
+  <entry key="248">下載 pdf 文件</entry>
+  <entry key="249">把演示放到白板</entry>
+  <entry key="250">设定</entry>
+  <entry key="251">拖這影象</entry>
+  <entry key="252">調整大小</entry>
+  <entry key="253">%</entry>
+  <entry key="254">的</entry>
+  <entry key="255">到第–頁</entry>
+  <entry key="256">到前一頁</entry>
+  <entry key="257">到下一頁</entry>
+  <entry key="258">到最後一頁</entry>
+  <entry key="259">縮小 --</entry>
+  <entry key="260">放大 ++</entry>
+  <entry key="261">先生</entry>
+  <entry key="262">女士</entry>
+  <entry key="263">配置</entry>
+  <entry key="264">编号</entry>
+  <entry key="265">關鍵</entry>
+  <entry key="266">配置</entry>
+  <entry key="267">關鍵</entry>
+  <entry key="268">最後更新</entry>
+  <entry key="269">更新</entry>
+  <entry key="270">評論t</entry>
+  <entry key="271">關鍵</entry>
+  <entry key="272">的</entry>
+  <entry key="273">用戶</entry>
+  <entry key="274">刪除用戶,從組織</entry>
+  <entry key="275">刪除</entry>
+  <entry key="276">此用戶已經是這個組織的會員</entry>
+  <entry key="277">新聞</entry>
+  <entry key="278">連結</entry>
+  <entry key="279">進入會議</entry>
+  <entry key="280">進入課堂</entry>
+  <entry key="281">幫助和支持</entry>
+  <entry key="282">http://openmeetings.apache.org/</entry>
+  <entry key="283">http://openmeetings.apache.org/mail-lists.html</entry>
+  <entry key="284">告訴我們問題!</entry>
+  <entry key="285">更多</entry>
+  <entry key="286">Project Website (http://openmeetings.apache.org)</entry>
+  <entry key="287">User Mailing List (http://openmeetings.apache.org/mail-lists.html)</entry>
+  <entry key="288">記住登錄</entry>
+  <entry key="289">內容</entry>
+  <entry key="290">我的首頁</entry>
+  <entry key="291">我安排的會議</entry>
+  <entry key="292">我的預定活動</entry>
+  <entry key="293">公開會議</entry>
+  <entry key="294">私人會議</entry>
+  <entry key="295">公開活動</entry>
+  <entry key="296">私人活動</entry>
+  <entry key="297">公開內容</entry>
+  <entry key="298">私人內容</entry>
+  <entry key="299">各人內容</entry>
+  <entry key="300"></entry>
+  <entry key="301">主持</entry>
+  <entry key="302">申請成為主持</entry>
+  <entry key="303">民調</entry>
+  <entry key="304">選擇一個文件</entry>
+  <entry key="305">設定</entry>
+  <entry key="306">攝像机和麥克風设定</entry>
+  <entry key="307">白板設定</entry>
+  <entry key="308">退出</entry>
+  <entry key="309">回到房間</entry>
+  <entry key="310">登出</entry>
+  <entry key="311">桌面瀏覽</entry>
+  <entry key="312">啟動桌面瀏覽</entry>
+  <entry key="313">視頻和音頻</entry>
+  <entry key="314">聊天</entry>
+  <entry key="315">白板</entry>
+  <entry key="316">主持</entry>
+  <entry key="317">文件</entry>
+  <entry key="318">用戶</entry>
+  <entry key="319">民調</entry>
+  <entry key="320">有沒有用戶連接到該用戶名</entry>
+  <entry key="321">該電郵載有一個特殊的聯繫已被發送到您的電子郵件地址,請檢查您的信箱。如果您還沒有收到郵件,請調整你的垃圾郵件設置,並重新發送確認郵件</entry>
+  <entry key="322">錯误</entry>
+  <entry key="323">訊息</entry>
+  <entry key="324">無效散列。找不到用戶.</entry>
+  <entry key="325">重置密碼</entry>
+  <entry key="326">登錄</entry>
+  <entry key="327">修改密碼</entry>
+  <entry key="328">新密碼</entry>
+  <entry key="329">重新輸入密碼</entry>
+  <entry key="330">你所輸入的密碼並不相同</entry>
+  <entry key="331">4或更多個字符;大寫有分!</entry>
+  <entry key="332">密碼設定。您可以立即登錄。</entry>
+  <entry key="333">OK</entry>
+  <entry key="334">未知錯誤。請告知您的服務團隊</entry>
+  <entry key="335">用戶名找不到</entry>
+  <entry key="336">密碼無效</entry>
+  <entry key="337">成功登出</entry>
+  <entry key="338">前端登記禁用</entry>
+  <entry key="339">無效電子郵件</entry>
+  <entry key="340">重複的文件名,請選擇另一個文件名</entry>
+  <entry key="341">文件名太短</entry>
+  <entry key="342">不能儲存地址</entry>
+  <entry key="343">用戶添加,但你需要设定此用戶屬於一個組織,否則他將無法登錄。</entry>
+  <entry key="344">新紀錄</entry>
+  <entry key="345">沒有發現這一個ID.</entry>
+  <entry key="346">內容的標籤無法出现.</entry>
+  <entry key="347">管理者 授權要求</entry>
+  <entry key="348">語言-編者</entry>
+  <entry key="349">語言</entry>
+  <entry key="350">標籤-ID</entry>
+  <entry key="351">標籤-名稱</entry>
+  <entry key="352">價值</entry>
+  <entry key="353">內容價值</entry>
+  <entry key="354">標籤-名稱</entry>
+  <entry key="355">標籤價值</entry>
+  <entry key="356">標籤-ID</entry>
+  <entry key="357">你只刪除標籤,而不是領域!您不能刪除領域,它可能已在標籤上的其他語言。</entry>
+  <entry key="358">無效標籤id 。該fieldlanguagesvalues_id不能找到在數據庫</entry>
+  <entry key="359">您不能刪除這一領域。你只能刪除標籤並非領域。有無標籤裝在此時或者它是沒有選中的任何領域,或者有沒有商標,這門語言會成為這一領域的設定。</entry>
+  <entry key="360">出口</entry>
+  <entry key="361">你需要登出看到有任何變化.</entry>
+  <entry key="362">添加新的語言</entry>
+  <entry key="363">刪除語言</entry>
+  <entry key="364">添加新的語言</entry>
+  <entry key="365">姓名</entry>
+  <entry key="366">添加新的語言</entry>
+  <entry key="367">備份</entry>
+  <entry key="368">到第–頁</entry>
+  <entry key="369">到前一頁</entry>
+  <entry key="370">到下一頁</entry>
+  <entry key="371">最後一頁</entry>
+  <entry key="372">用戶说话 (By clicking here you can give exclusive audio / mute the microphone of others)</entry>
+  <entry key="373">把聲音開/關</entry>
+  <entry key="374">系統</entry>
+  <entry key="375">您的設置</entry>
+  <entry key="376">hi,</entry>
+  <entry key="377">編輯您的檔案</entry>
+  <entry key="378">新訊息:</entry>
+  <entry key="379">上傳新形象</entry>
+  <entry key="380">用戶數據 - 出口</entry>
+  <entry key="381">所有組織都必須已存在的</entry>
+  <entry key="382">開始出口</entry>
+  <entry key="383">由組織</entry>
+  <entry key="384">開始 出口</entry>
+  <entry key="385">用戶數據 - 進口</entry>
+  <entry key="386">選擇用戶.xml</entry>
+  <entry key="387">進口</entry>
+  <entry key="388">出口到XML -這些檔案可用於: -為該項目做貢獻 -導入到另一個系統 -備份 -個性化 -把它納入語文目錄,為你的下一次安裝</entry>
+  <entry key="389">選擇一種語言的文件輸入。選擇正確的語言從組合框中! 無論是什麼名稱的文件,它都將匯入這語言!</entry>
+  <entry key="390">進口-選擇文件</entry>
+  <entry key="391">另存為</entry>
+  <entry key="392">姓名:</entry>
+  <entry key="393">評論:</entry>
+  <entry key="394">保存</entry>
+  <entry key="395">錄影</entry>
+  <entry key="396">錄影觀眾</entry>
+  <entry key="397">公共和私人會議室的錄影</entry>
+  <entry key="398">用戶 :</entry>
+  <entry key="399">加入:</entry>
+  <entry key="400"></entry>
+  <entry key="401">用戶在這個房間:</entry>
+  <entry key="402">刷新</entry>
+  <entry key="403">這個房間己滿,在數分鐘再試一次.</entry>
+  <entry key="404">點擊一個房間獲得細節</entry>
+  <entry key="405">和這個會議室的用户聊天:</entry>
+  <entry key="406">房間:</entry>
+  <entry key="407">用戶在這個房間:</entry>
+  <entry key="408">從何時:</entry>
+  <entry key="409">播放錄影</entry>
+  <entry key="410">總計時間:</entry>
+  <entry key="411">日期:</entry>
+  <entry key="412">錄影儀模式!你不能改變,這是一個錄影文件!</entry>
+  <entry key="413">播放這個錄影</entry>
+  <entry key="414">播放/暫停</entry>
+  <entry key="415">開始錄影</entry>
+  <entry key="416">停止錄影</entry>
+  <entry key="417">錄影:</entry>
+  <entry key="418">現在已經有人在錄影:</entry>
+  <entry key="419">錄影!按用戶:</entry>
+  <entry key="420">取消</entry>
+  <entry key="421">錄影將被取消,並不會被保存</entry>
+  <entry key="422">恢復</entry>
+  <entry key="423">關閉此窗口,並恢復錄影</entry>
+  <entry key="424">改變線的顏色</entry>
+  <entry key="425">選擇顏色</entry>
+  <entry key="426">禁用/使用 線顏色</entry>
+  <entry key="427">改變補色</entry>
+  <entry key="428">禁止/使用補色</entry>
+  <entry key="429">改變線寬</entry>
+  <entry key="430">關閉</entry>
+  <entry key="431">改變文字大小</entry>
+  <entry key="432">刪除記錄</entry>
+  <entry key="433">客戶</entry>
+  <entry key="434">由:</entry>
+  <entry key="435">姓名</entry>
+  <entry key="436">房間</entry>
+  <entry key="437">日期</entry>
+  <entry key="438">取消</entry>
+  <entry key="439">開始</entry>
+  <entry key="440">姓名</entry>
+  <entry key="441">日期</entry>
+  <entry key="442">刪除服務器 聊天記錄</entry>
+  <entry key="443">聊天</entry>
+  <entry key="444">發送消息</entry>
+  <entry key="445">表情符號</entry>
+  <entry key="446">表情符號</entry>
+  <entry key="447">選擇播放裝置</entry>
+  <entry key="448">音頻和視頻</entry>
+  <entry key="449">僅音頻</entry>
+  <entry key="450">僅視頻</entry>
+  <entry key="451">沒有音頻/視頻(靜態影像)</entry>
+  <entry key="452">沒有音頻/視頻從你的個人電腦將會公佈,而不是一個圖片從你的檔案就會顯示。選擇這些設置,如果您有問題,與你的帶寬還是一個非常緩慢的互聯網連接。</entry>
+  <entry key="453">MO</entry>
+  <entry key="454">TU</entry>
+  <entry key="455">WE</entry>
+  <entry key="456">TH</entry>
+  <entry key="457">FR</entry>
+  <entry key="458">SA</entry>
+  <entry key="459">SU</entry>
+  <entry key="460">週一</entry>
+  <entry key="461">週二</entry>
+  <entry key="462">週三</entry>
+  <entry key="463">週四</entry>
+  <entry key="464">週五</entry>
+  <entry key="465">週六</entry>
+  <entry key="466">週日</entry>
+  <entry key="467">CW</entry>
+  <entry key="468">日曆週</entry>
+  <entry key="469">1月</entry>
+  <entry key="470">2月</entry>
+  <entry key="471">3月</entry>
+  <entry key="472">4月</entry>
+  <entry key="473">5月</entry>
+  <entry key="474">6月</entry>
+  <entry key="475">7月</entry>
+  <entry key="476">8月</entry>
+  <entry key="477">9月</entry>
+  <entry key="478">10月</entry>
+  <entry key="479">11月</entry>
+  <entry key="480">12月</entry>
+  <entry key="481">日曆</entry>
+  <entry key="482">參加者</entry>
+  <entry key="483">顯示佈局設置</entry>
+  <entry key="484">X | Y</entry>
+  <entry key="485">Width | Height</entry>
+  <entry key="486">視頻-集裝箱</entry>
+  <entry key="487">主持-集裝箱</entry>
+  <entry key="488">X</entry>
+  <entry key="489">白板-集裝箱</entry>
+  <entry key="490">啟用</entry>
+  <entry key="491">X | Y</entry>
+  <entry key="492">寬度|高度</entry>
+  <entry key="493">檔案,聊天,參加者-集裝箱</entry>
+  <entry key="494">啟用</entry>
+  <entry key="495">X |Y</entry>
+  <entry key="496">寬度|高度</entry>
+  <entry key="497">主持人離開了房間。在時刻沒有人介紹,你可以申請成為主持或等待</entry>
+  <entry key="498">在這個房間裡是沒有主持人,有一些人參加。你要申請成主持或等待</entry>
+  <entry key="499">反饋 {0}</entry>
+  <entry key="500">{0} - 邀請</entry>
+  <entry key="501">用戶訊息:</entry>
+  <entry key="502">訊息:</entry>
+  <entry key="503">點擊此鏈接,參加會議:</entry>
+  <entry key="504">點擊這裡進入房間</entry>
+  <entry key="505">如果您有問題連接,請複製並貼到你的瀏覽器上:</entry>
+  <entry key="506">{0} - 註冊</entry>
+  <entry key="507">你的用戶數據:</entry>
+  <entry key="508">登錄:</entry>
+  <entry key="509">密碼:</entry>
+  <entry key="510">郵箱:</entry>
+  <entry key="511">{0}-團隊</entry>
+  <entry key="512">{0} - 註冊</entry>
+  <entry key="513">{0} - 重設密碼</entry>
+  <entry key="514">點擊這個鏈接進入設定新的密碼:</entry>
+  <entry key="515">點擊這裡設定新的密碼</entry>
+  <entry key="516">如果您有問題連接,請複製並貼到你的瀏覽器上:</entry>
+  <entry key="517">{0} 密碼重設</entry>
+  <entry key="518">請輸入有效日期,例如 24.12.2001 (dd.mm.yyyy)</entry>
+  <entry key="519">請輸入一個有效的電子郵件, 例如 name@mail.com</entry>
+  <entry key="520">請輸入一個浮點數號碼, 例如 1.00</entry>
+  <entry key="521">請輸入一個號碼 (Integer), 例如 100</entry>
+  <entry key="522">請輸入有效的電話號碼, 例如++49 0123 123123</entry>
+  <entry key="523">請輸入有效的時候,例如 12:23 (hh:mm)</entry>
+  <entry key="524">密碼保護</entry>
+  <entry key="525">密碼</entry>
+  <entry key="526">有效期</entry>
+  <entry key="527">無限期</entry>
+  <entry key="528">期限</entry>
+  <entry key="529">一次性</entry>
+  <entry key="530">有效期從:</entry>
+  <entry key="531">有效期至:</entry>
+  <entry key="532">I邀請到 {0}</entry>
+  <entry key="533">沒有這一邀請碼</entry>
+  <entry key="534">該邀請已經使用。這種類型的邀請,不能再使用。</entry>
+  <entry key="535">This Invitation-Code is not valid.</entry>
+  <entry key="536">密碼:</entry>
+  <entry key="537">核對密碼</entry>
+  <entry key="538">密碼無效!</entry>
+  <entry key="539">Browser</entry>
+  <entry key="540">Syncronize Audio/Video</entry>
+  <entry key="541">Login was correct, but the Session you tried is not active or stored on the Server. You have to get a new SessionId and retry login.</entry>
+  <entry key="542">The SessionId is not loggedin or has no Admin rights. The SOAP Gateway needs an User with Admin-Rights to embed new Users.</entry>
+  <entry key="543">This Session has no Remoteuser-Data connected. Wether you did not call the SOAP-Gateway before accessing the Application or you are usnig a wrong Session-ID</entry>
+  <entry key="544">The recorder is currently Beta!</entry>
+  <entry key="545">x</entry>
+  <entry key="546">x-axis</entry>
+  <entry key="547">y</entry>
+  <entry key="548">y-axis</entry>
+  <entry key="549">w</entry>
+  <entry key="550">width</entry>
+  <entry key="551">h</entry>
+  <entry key="552">height</entry>
+  <entry key="553">Change Transparency</entry>
+  <entry key="554">Browser Open</entry>
+  <entry key="555">Browser Close</entry>
+  <entry key="556">The Connection to the Server is lost. You need to reload the Application or/and check your Network.</entry>
+  <entry key="557">Pointer</entry>
+  <entry key="558">Synchronizing</entry>
+  <entry key="559">Synchronizing Users, please wait</entry>
+  <entry key="560">&lt;u&gt;Download as SVG&lt;/u&gt;</entry>
+  <entry key="561">&lt;u&gt;Download as PNG&lt;/u&gt;</entry>
+  <entry key="562">&lt;u&gt;Download as JPG&lt;/u&gt;</entry>
+  <entry key="563">&lt;u&gt;Download as PDF&lt;/u&gt;</entry>
+  <entry key="564">&lt;u&gt;Download as TIF&lt;/u&gt;</entry>
+  <entry key="565">Reminder:</entry>
+  <entry key="566">Category:</entry>
+  <entry key="567">Repetition:</entry>
+  <entry key="568">none</entry>
+  <entry key="569">Location:</entry>
+  <entry key="570">Start</entry>
+  <entry key="571">End</entry>
+  <entry key="572">Title:</entry>
+  <entry key="573">Comment:</entry>
+  <entry key="574">Invite People</entry>
+  <entry key="575">Daily</entry>
+  <entry key="576">Monthly</entry>
+  <entry key="577">Yearly</entry>
+  <entry key="578">Appointment-end is after of appointment-start!</entry>
+  <entry key="579">Please insert a title!</entry>
+  <entry key="580">RTL</entry>
+  <entry key="581">Active this if you write in a right to left language (inverse word order)</entry>
+  <entry key="582">Dashboard</entry>
+  <entry key="583">Watch recorded Meetings or Events</entry>
+  <entry key="584">Meeting - Make a conference with 4 (up to 16) Users&lt;br/&gt;everybody will have audio + video access</entry>
+  <entry key="585">Event - Make a conference with up to 200 participents&lt;br/&gt;Only the Moderator will have audio/video</entry>
+  <entry key="586">Create users, rooms, organizations&lt;br/&gt; + change configuration</entry>
+  <entry key="587">Users in this Room now</entry>
+  <entry key="588">ID</entry>
+  <entry key="589">Login</entry>
+  <entry key="590">D</entry>
+  <entry key="591">Loading Document. Please wait untill all Client have been synchronized.</entry>
+  <entry key="592">Upload complete, converting Document ...</entry>
+  <entry key="593">Start Upload</entry>
+  <entry key="594">Upload and Import Dialog. Please select a File from your Disk.</entry>
+  <entry key="595">Cancel</entry>
+  <entry key="596">Select File</entry>
+  <entry key="597">Connections</entry>
+  <entry key="598">Value</entry>
+  <entry key="599">Streamid</entry>
+  <entry key="600">Login</entry>
+  <entry key="601">Connected since</entry>
+  <entry key="602">Room / Scope</entry>
+  <entry key="603">Kick User</entry>
+  <entry key="604">Kick User</entry>
+  <entry key="605">Do you really want to kick this Client from the Connection?&lt;br/&gt; This does only remove the Client from the current Room.The Client could re-login again.</entry>
+  <entry key="606">Your session has been closed by an Administrator or Moderator.</entry>
+  <entry key="607">Phone</entry>
+  <entry key="608">User is the Moderator of this Room</entry>
+  <entry key="609">User is allowed to draw on the Whiteboard</entry>
+  <entry key="610">(Re) Start Audio/Video or change Device Settings</entry>
+  <entry key="611">Allow this User to draw on the Whiteboard</entry>
+  <entry key="612">Remove ability to draw on whiteboard</entry>
+  <entry key="613">Users</entry>
+  <entry key="614">Files</entry>
+  <entry key="615">Whiteboard</entry>
+  <entry key="616">Chat</entry>
+  <entry key="617">Your account is assigned to multiple Organizations. Please choose one for this Session.</entry>
+  <entry key="618">This room is full at the moment. Please try again later.</entry>
+  <entry key="619">Room Type</entry>
+  <entry key="620">Appointment Room</entry>
+  <entry key="621">Server Time</entry>
+  <entry key="622">{0} - Reminder</entry>
+  <entry key="623">Message from User:</entry>
+  <entry key="624">Message:</entry>
+  <entry key="625">Click this link to participate in the Meetings:</entry>
+  <entry key="626">Click here to enter room</entry>
+  <entry key="627">if you have problems with the link, please copy and paste this to your browser:</entry>
+  <entry key="628">search intern</entry>
+  <entry key="629">extern users</entry>
+  <entry key="630">pre name</entry>
+  <entry key="631">name</entry>
+  <entry key="632">E-mail</entry>
+  <entry key="633">Confirm logout</entry>
+  <entry key="634">Are you sure you want to logout now?</entry>
+  <entry key="635">Actions</entry>
+  <entry key="636">Demo Room</entry>
+  <entry key="637">Demo Time</entry>
+  <entry key="638">Meeting Timer</entry>
+  <entry key="639">This Room is a Demo Room. To disable this warning you either should get a private meeting room for your personal usage or set up an own Server. You will be automatically logged off in:</entry>
+  <entry key="640">Moderated</entry>
+  <entry key="641">Please wait untill the Moderator has entered the Room. The Moderator can be either a Teacher, Admin or the creator of this Room.</entry>
+  <entry key="642">Ok</entry>
+  <entry key="643">Incoming Screen Sharing</entry>
+  <entry key="644">There is a new Screen Sharing incoming from the User:</entry>
+  <entry key="645">Start Sharing</entry>
+  <entry key="646">Add new Meeting</entry>
+  <entry key="647">Meeting Room</entry>
+  <entry key="648">Event Room</entry>
+  <entry key="649">Moderation</entry>
+  <entry key="650">Moderate Users</entry>
+  <entry key="651">Moderate Rooms</entry>
+  <entry key="652">M</entry>
+  <entry key="653">Do you want to change this User to become a Moderator of that Organization?</entry>
+  <entry key="654">Please choose an Organization before you try to add a User to it!</entry>
+  <entry key="655">Organization - Moderator</entry>
+  <entry key="656">Do you really want to delete this User from the Organization?</entry>
+  <entry key="657">This User is Moderator</entry>
+  <entry key="658">This User is No-Moderator</entry>
+  <entry key="659">Do you want this User to be not a Moderator of this Organization?</entry>
+  <entry key="660">Add or delete Users or Rooms within your Organization</entry>
+  <entry key="661">Do you really want to delete this record?</entry>
+  <entry key="662">Do you really want to delete this user from your organization? You will only delete the connection between the user and your organization, to really delete the user itself you have to login into the Administration-Panel.</entry>
+  <entry key="663">You cannot delete your own User!</entry>
+  <entry key="664">This Method needs a Adminstration Account to be invoked!</entry>
+  <entry key="665">There was no Session associated with this ID.</entry>
+  <entry key="666">This is an Administrator or Moderator account. You can only edit this account through the Administration Panel.</entry>
+  <entry key="667">To complete your registration please click on the following link. Or copy the URL to your browser bar.</entry>
+  <entry key="668">Click to verify your E-Mail</entry>
+  <entry key="669">No user was found for this Hash.</entry>
+  <entry key="670">This user is already activated!</entry>
+  <entry key="671">You did successfully activate your account!</entry>
+  <entry key="672">Login Now</entry>
+  <entry key="673">Your account is not activated. First use the link in the Email you've received during registration.</entry>
+  <entry key="674">You successfully signed up. We've send an EMail with a verification Code to your Mail. Please check your Inbox.</entry>
+  <entry key="675">Remove Moderation Role from this User</entry>
+  <entry key="676">Grant Moderation Rights to this User</entry>
+  <entry key="677">User</entry>
+  <entry key="678">Access to whiteboard</entry>
+  <entry key="679">Moderator</entry>
+  <entry key="680">Moderation: Please choose any User on the List to grant him access to the Whiteboard, Moderation or Video.</entry>
+  <entry key="681">This User is already Moderator, so he has automatically the right to draw.</entry>
+  <entry key="682">This is you! You cannot remove the Moderation rights from yourself.</entry>
+  <entry key="683">Allow this User to Publish his Audio / Video</entry>
+  <entry key="684">Remove Audio/Video of this User</entry>
+  <entry key="685">I would like to get the moderation of this room</entry>
+  <entry key="686">I would like to draw on whiteboard</entry>
+  <entry key="687">I would like to share my Audio/Video</entry>
+  <entry key="688">You are moderator of this room</entry>
+  <entry key="689">You are allowed to draw on whiteboard</entry>
+  <entry key="690">You are allowed to share your Audio/Video</entry>
+  <entry key="691">Message to Moderator</entry>
+  <entry key="692">The User</entry>
+  <entry key="693">would like to get the Moderation. Use the status Icons next to the user in the List of Users to add or remove the Moderation.</entry>
+  <entry key="694">would like to draw on whiteboard. Use the status Icons next to the user in the List of Users to add or remove the right to draw anything on the whiteboard.</entry>
+  <entry key="695">would like to share his Audio/Video. Use the status Icons next to the user in the List of Users to add or remove the right to share Audio/Video for any User.</entry>
+  <entry key="696">You have to wait untill a Moderator enters the room.</entry>
+  <entry key="697">Cancel</entry>
+  <entry key="698">Save</entry>
+  <entry key="699">Day</entry>
+  <entry key="700">Month</entry>
+  <entry key="701">Year</entry>
+  <entry key="702">Upload File</entry>
+  <entry key="703">Add Folder</entry>
+  <entry key="704">Refresh</entry>
+  <entry key="705">Trash (Drag and Drop item here)</entry>
+  <entry key="706">My Files (Home Drive)</entry>
+  <entry key="707">Room Files (Public Drive)</entry>
+  <entry key="708">Add File</entry>
+  <entry key="709">Add Folder</entry>
+  <entry key="710">Delete Folder</entry>
+  <entry key="711">Edit Name</entry>
+  <entry key="712">New Folder</entry>
+  <entry key="713">Are you sure you want to delete this Item?</entry>
+  <entry key="714">Search</entry>
+  <entry key="715">Search</entry>
+  <entry key="716">Open Document</entry>
+  <entry key="717">Show all Files (Tree View)</entry>
+  <entry key="718">Close Document</entry>
+  <entry key="719">Delete File</entry>
+  <entry key="720">You are not allowed to draw anything on the Whiteboard. You have to become Moderator or at least get the Right to edit Whiteboard. You may ask a Moderator to give you that right.</entry>
+  <entry key="721">Document Properties</entry>
+  <entry key="722">Start Client (external)</entry>
+  <entry key="723">Start Client (HTTP)</entry>
+  <entry key="724">A user want to share his screen. Do you want to see it?</entry>
+  <entry key="725">You are currently sharing your Desktop. For stopping the Sharing Session please hit the Stop button in the Sharing Client.</entry>
+  <entry key="726">Sharing Session</entry>
+  <entry key="727">You are already sharing your desktop!</entry>
+  <entry key="728">Desktop Viewer</entry>
+  <entry key="729">Exit</entry>
+  <entry key="730">Desktop Sharer</entry>
+  <entry key="731">Click Start to publish your screen</entry>
+  <entry key="732">Start Sharing</entry>
+  <entry key="733">Stop Sharing</entry>
+  <entry key="734">Select your screen area:</entry>
+  <entry key="735">Change width</entry>
+  <entry key="736">The Sharer has finished this session!</entry>
+  <entry key="737">Change height</entry>
+  <entry key="738">X-Offset</entry>
+  <entry key="739">Y-Offset</entry>
+  <entry key="740">Width:</entry>
+  <entry key="741">Height:</entry>
+  <entry key="742">Connection was closed by Server</entry>
+  <entry key="743">Cancel</entry>
+  <entry key="744">Start External</entry>
+  <entry key="745">If you close this session completely you are not able to restart the viewer for this session.</entry>
+  <entry key="746">Confirm Closing Viewer Session</entry>
+  <entry key="747">Share Screen</entry>
+  <entry key="748">Record Session</entry>
+  <entry key="749">Co-Browsing</entry>
+  <entry key="750">Ooops, ... Firefox on Windows does not show clear Co-Browsing. Please use another Browser for using the Co-Browsing feature.</entry>
+  <entry key="751">Previous</entry>
+  <entry key="752">Next</entry>
+  <entry key="753">Reload</entry>
+  <entry key="754">Home</entry>
+  <entry key="755">Load</entry>
+  <entry key="756">Add this website as Default website to your Profile.</entry>
+  <entry key="757">Test Setup</entry>
+  <entry key="758">Check you Microphone and Camera setup before you enter a room by recording some seconds. You can then replay your recording to check your voice and picture.</entry>
+  <entry key="759">Don't show this test anymore</entry>
+  <entry key="760">Cancel</entry>
+  <entry key="761">Start Conference</entry>
+  <entry key="762">Do not ask again</entry>
+  <entry key="763">REC</entry>
+  <entry key="764">PLAY</entry>
+  <entry key="765">You may proceed without testing if you do not plan to publish your voice or picture. Participants without Audio or Video can still use the Whiteboard, share their Desktop or write Chat messages.</entry>
+  <entry key="766">STOP</entry>
+  <entry key="767">Level-Meter</entry>
+  <entry key="768">Press Start</entry>
+  <entry key="769">Start Conference</entry>
+  <entry key="770">Start Event</entry>
+  <entry key="771">Choose Room</entry>
+  <entry key="772">Check Setup</entry>
+  <entry key="773">Start Conference</entry>
+  <entry key="774">How to conference</entry>
+  <entry key="775">Start Recording</entry>
+  <entry key="776">Do not show Audio / Video Test (Recording) before entering a Conference</entry>
+  <entry key="777">Public Rooms</entry>
+  <entry key="778">Public Rooms are accessible for all Users.</entry>
+  <entry key="779">Private Rooms</entry>
+  <entry key="780">Private Rooms are only accessible for users of the same organization.</entry>
+  <entry key="781">My Rooms</entry>
+  <entry key="782">Rooms in this section are created for personal usage. There are some standard rooms plus the ones that are created through the calendar and have a start and an end date. The rooms created via the calendar are only listed in this section as long as they are valid.</entry>
+  <entry key="783">You have to be moderator to do this.</entry>
+  <entry key="784">Apply for moderation</entry>
+  <entry key="785">Apply for whiteboard access</entry>
+  <entry key="786">Apply for camera/microphone access</entry>
+  <entry key="787">This Session Hash was already used. You cannot use it twice.</entry>
+  <entry key="788">START</entry>
+  <entry key="789">EXIT</entry>
+  <entry key="790">Do you really want to exit? You might should clear uploaded documents, whiteboard and the chat history.</entry>
+  <entry key="791">Exit conference</entry>
+  <entry key="792">Rooms</entry>
+  <entry key="793">Choose a room for a meeting</entry>
+  <entry key="794">There is an unsaved Event in the Calendar. Please either save it or remove it.</entry>
+  <entry key="795">Please add at least one attendee for your meeting!</entry>
+  <entry key="796">Do you really want to delete this Event?</entry>
+  <entry key="797">Warning</entry>
+  <entry key="798">Add Event</entry>
+  <entry key="799">Day</entry>
+  <entry key="800">Week</entry>
+  <entry key="801">Month</entry>
+  <entry key="802">Description</entry>
+  <entry key="803">Attendees</entry>
+  <entry key="804">{0}, your Web Conferencing Platform. Either follow the Instructions, press the start button to start to conference immediatelly or you goto the Calendar and set up a Conference for the future.</entry>
+  <entry key="805">Plan a Meeting</entry>
+  <entry key="806">To set up a conference you can add a new Event in the Calendar.</entry>
+  <entry key="807">Need help?</entry>
+  <entry key="808">Restricted</entry>
+  <entry key="809">Search</entry>
+  <entry key="810">Add</entry>
+  <entry key="811">There is no User selected. Please select an item from the list first and then hit add.</entry>
+  <entry key="812">Add Attendee</entry>
+  <entry key="813">Save</entry>
+  <entry key="814">Delete</entry>
+  <entry key="815">Event Details</entry>
+  <entry key="816">Default Moderators</entry>
+  <entry key="817">Super</entry>
+  <entry key="818">ID</entry>
+  <entry key="819">Name</entry>
+  <entry key="820">E-Mail</entry>
+  <entry key="821">Add new default Moderator</entry>
+  <entry key="822">Is Super Moderator</entry>
+  <entry key="823">If the Room is moderated, User with Level Moderator or Administrator are automatically Moderator if they enter the Room. If you don't want to specify that and only want a certain User to become Moderator use the Default Moderator option.</entry>
+  <entry key="824">A Super Moderator is always a Moderator when he enters a Room, and nobody can remove the Moderation Flag from him</entry>
+  <entry key="825">Apply Super-Moderation to User</entry>
+  <entry key="826">Remove Super Moderation from User</entry>
+  <entry key="827">D</entry>
+  <entry key="828">If you add an Organization to the room only users of that Organization have access to it (This is only valid if the isPublic flag is set to false!)</entry>
+  <entry key="829">Moderation</entry>
+  <entry key="830">Limitations</entry>
+  <entry key="831">Organization</entry>
+  <entry key="832">Are you sure?</entry>
+  <entry key="833">Do you really want to delete this Item? You have to press the save button to store the changes!</entry>
+  <entry key="834">There is no User selected. Please select first before you add it!</entry>
+  <entry key="835">Add new Default Moderator</entry>
+  <entry key="836">Do you want to add the Super Moderation Flag for this User? A Super Moderator is not only Moderator of a Room, but also no other Moderator can remove the Moderation Flag for this User. You need to save the Room Object to save these settings!</entry>
+  <entry key="837">Do you want to remove the Super Moderation Flag for this User? You need to save the Room Object to save these settings!</entry>
+  <entry key="838">This User is a Super-Moderator. You cannot remove the Moderation flag from a Super-Moderator!</entry>
+  <entry key="839">Do you really want to delete this File/Folder?</entry>
+  <entry key="840">Delete File/Folder?</entry>
+  <entry key="841">Mrs.</entry>
+  <entry key="842">Dr.</entry>
+  <entry key="843">Properties</entry>
+  <entry key="844">Show mouse position to viewers</entry>
+  <entry key="845">Share Audio with SIP Applet</entry>
+  <entry key="846">Share Audio with SIP and Video with Flash</entry>
+  <entry key="847">Full-Fit</entry>
+  <entry key="848">View Screen</entry>
+  <entry key="849">The user</entry>
+  <entry key="850">wants to share its screen. Do you want to see it?</entry>
+  <entry key="851">Close</entry>
+  <entry key="852">Zoom</entry>
+  <entry key="853">The Session was closed by the sharing User!</entry>
+  <entry key="854">Pause</entry>
+  <entry key="855">New Screen Sharing</entry>
+  <entry key="856">Minimize</entry>
+  <entry key="857">Maximize</entry>
+  <entry key="858">Video</entry>
+  <entry key="859">Recording Timeline</entry>
+  <entry key="860">My Recordings</entry>
+  <entry key="861">Public Recordings</entry>
+  <entry key="862">Info</entry>
+  <entry key="863">Name</entry>
+  <entry key="864">Length</entry>
+  <entry key="865">Date</entry>
+  <entry key="866">By</entry>
+  <entry key="867">PLAY</entry>
+  <entry key="868">Main - Video</entry>
+  <entry key="869">Recording</entry>
+  <entry key="870">You may record and share your screen at the same time. To enable others to see your screen just hit the start button on the top. To only record the Session it is sufficient to click start recording.</entry>
+  <entry key="871">Start Recording</entry>
+  <entry key="872">Stop Recording</entry>
+  <entry key="873">Download the FLV-File</entry>
+  <entry key="874">Room</entry>
+  <entry key="875">Play</entry>
+  <entry key="876">Stop</entry>
+  <entry key="877">User has microphone on</entry>
+  <entry key="878">Stop Sharing</entry>
+  <entry key="879">Allow User Questions</entry>
+  <entry key="880">Turn this off to prevent that any user is disturbing you in this room. Effect is that the Button to ask for Moderation ("I have a question") is not visible.</entry>
+  <entry key="881">Rights</entry>
+  <entry key="882">Download as AVI</entry>
+  <entry key="883">FLV</entry>
+  <entry key="884">AVI</entry>
+  <entry key="885">Raw Screenvideo</entry>
+  <entry key="886">Audio only</entry>
+  <entry key="887">The have been errors while processing the Recording.</entry>
+  <entry key="888">The Recording is not yet ready for watching. Please retry in a couple of minutes again.</entry>
+  <entry key="889">Log:</entry>
+  <entry key="890">Recorder Message</entry>
+  <entry key="891">Ok</entry>
+  <entry key="892">SIP Applet is not Ready</entry>
+  <entry key="893">SIP-Account Settings</entry>
+  <entry key="894">SIP settings for each user. You can turn on or off SIP via the Administration &gt; Configuration (Key: enable_sip). The SIP data for each user should be created automatically. You can re-create the data by checking "Re-generate SIP Data"</entry>
+  <entry key="895">SIP-User</entry>
+  <entry key="896">Sip-Pass</entry>
+  <entry key="897">Sip-Auth-Id</entry>
+  <entry key="898">The Login to the SIP Gateway has failed. You should check the authentification data of your SIP-Provider and the SIP-Account Data for each User. As Administrator you are still able to login and check the Configuration. As User or Moderator you will be blocked from any interaction.</entry>
+  <entry key="899">The Login to the SIP Gateway has failed. Contact your Service Team!</entry>
+  <entry key="900">Logging in to SIP-Gateway ...</entry>
+  <entry key="901">Logging in to SIP-Gateway ...</entry>
+  <entry key="902">Show Log</entry>
+  <entry key="903">Log messages from post recorder process</entry>
+  <entry key="904">SIP-Applet Message</entry>
+  <entry key="905">The SIP-Applet is not ready. Accept the Applet please and click ok!</entry>
+  <entry key="906">Get Moderation</entry>
+  <entry key="907">Save Appointment Changes</entry>
+  <entry key="908">The appointement has been changed. Do you want to save those changes? &lt;br/&gt;&lt;br/&gt;All attendees of the appointment will receive a EMail with the updated date and time (depending on the notification type of this appointment).</entry>
+  <entry key="909">To access other recordings you have to login the {0} Application.</entry>
+  <entry key="910">Choose the User for this Video</entry>
+  <entry key="911">Available Users for this Pod</entry>
+  <entry key="912">You are a Moderator in this Interview. You can decide who is speaking in this interview and you can start / stop the recording of the Session.</entry>
+  <entry key="913">Start Recording</entry>
+  <entry key="914">Stop Recording</entry>
+  <entry key="915">The recording of the Interview is already started.</entry>
+  <entry key="916">The recording is already stopped or not been started yet.</entry>
+  <entry key="917">The recording for this interview is already started!</entry>
+  <entry key="918">Cancel</entry>
+  <entry key="919">The post-processing of an interview takes 5 minutes per 1 minute interview. The current progress of the interview post-processing transcoding is:</entry>
+  <entry key="920">You have to enter your password again to auto create the SIP Data</entry>
+  <entry key="921">Re-generate SIP Data</entry>
+  <entry key="922">You cannot move this file or folder into its own sub folder!</entry>
+  <entry key="923">Home drive size</entry>
+  <entry key="924">Public drive size</entry>
+  <entry key="925">License Settings</entry>
+  <entry key="926">You can either bind the user to a expire Date or to a maximum number of minutes when you enable licensing.</entry>
+  <entry key="927">Check license</entry>
+  <entry key="928">Flatrate</entry>
+  <entry key="929">Expire date</entry>
+  <entry key="930">Seconds left</entry>
+  <entry key="931">Total time</entry>
+  <entry key="932">Your License has expired. You need to buy new minutes (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="933">Click and buy</entry>
+  <entry key="934">Time Left on your account:</entry>
+  <entry key="935">User License Info</entry>
+  <entry key="936">Info</entry>
+  <entry key="937">Close</entry>
+  <entry key="938">Your license has expired. You need either to buy a minute package (Pay-per-minute) or a volume flatrate.</entry>
+  <entry key="939">License settings</entry>
+  <entry key="940">You can either buy minutes to make Web-Conferencing (Pay-per-minute).&lt;br/&gt;&lt;br/&gt; Or you buy a volume flatrate about 3-12 months.&lt;br/&gt;&lt;br/&gt;Sending invitations (direct links into Conference Rooms) or creating conference Rooms via the Calendar with external Users is only allowed with a volume flatrate!</entry>
+  <entry key="941">Buy 60 Minutes 9,99 EURO (16 Cent per Minute)</entry>
+  <entry key="942">Buy 5 hours 19,99 EURO (6 Cent per minute)</entry>
+  <entry key="943">Buy 3 month for 29,99 EURO (9,99 Euro per Month)</entry>
+  <entry key="944">Buy 6 month for 39,99 EURO (6,66 Euro per month)</entry>
+  <entry key="945">Pay-per-minute</entry>
+  <entry key="946">Volume flatrate</entry>
+  <entry key="947">You have unlimited License</entry>
+  <entry key="948">Your license will expire at:</entry>
+  <entry key="949">You bought Pay-per-minute. You still have:</entry>
+  <entry key="950">Buy new credit!</entry>
+  <entry key="951">Want your own Server?</entry>
+  <entry key="952">You would like to have {0} installed on your Server or integrated into your Moodle, SugarCRM, Website or Intranet? Prizings start at 500 Euro per Installation!</entry>
+  <entry key="953">Or send us a message</entry>
+  <entry key="954">Answer to:</entry>
+  <entry key="955">Message:</entry>
+  <entry key="956">Send</entry>
+  <entry key="957">Click here to get contact Info and Prizings</entry>
+  <entry key="958">Credit Card Details</entry>
+  <entry key="959">Firstname</entry>
+  <entry key="960">Lastname</entry>
+  <entry key="961">Credit Card Type</entry>
+  <entry key="962">VISA Card</entry>
+  <entry key="963">MasterCard</entry>
+  <entry key="964">Discover</entry>
+  <entry key="965">American Express</entry>
+  <entry key="966">Credit Card Number</entry>
+  <entry key="967">Expiration Date</entry>
+  <entry key="968">Card Verification Number</entry>
+  <entry key="969">Billing Address</entry>
+  <entry key="970">Address</entry>
+  <entry key="971"></entry>
+  <entry key="972">City</entry>
+  <entry key="973">Country</entry>
+  <entry key="974">State (Only US)</entry>
+  <entry key="975">ZIP</entry>
+  <entry key="976">Amount</entry>
+  <entry key="977">Submit</entry>
+  <entry key="978">Step 1: {0} - Payment Form</entry>
+  <entry key="979">EMail</entry>
+  <entry key="980">Click "Check out with Paypal" to pay.&lt;br/&gt; Paypal accepts VISA, MasterCard, Discover or American Express. &lt;br/&gt;It does not require to sign up with Paypal. &lt;br/&gt;Citizens from Germany can also pay with direct debit (Per Lastschrift-Einzug).</entry>
+  <entry key="981">Thank you for buying {0}. &lt;br/&gt; &lt;br/&gt; As soon as we received the payment your account will be updated.&lt;br/&gt; You will receive an EMail with your invoice as PDF.&lt;br/&gt;You can also check current and past transactions in your profile settings.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;You can close this browser window/tab now and return to {0}.</entry>
+  <entry key="982">Submit and Buy!</entry>
+  <entry key="983">Click and Buy!</entry>
+  <entry key="984">Step 3: {0} Payment - Check order and buy!</entry>
+  <entry key="985">Name</entry>
+  <entry key="986">Payment received!</entry>
+  <entry key="987">Hi,</entry>
+  <entry key="988">We have received your payment. Your user profile is updated now. See attached your Invoice. The Invoice and all past Invoice can also be downloaded in your user profile.</entry>
+  <entry key="989">Thank you for using {0}!</entry>
+  <entry key="990">Payment Received {0} -</entry>
+  <entry key="991">Payment and Transaction Status</entry>
+  <entry key="992">Transcation Hash</entry>
+  <entry key="993">Minutes</entry>
+  <entry key="994">Months</entry>
+  <entry key="995">EUR</entry>
+  <entry key="996">Status</entry>
+  <entry key="997">Invoice</entry>
+  <entry key="998"></entry>
+  <entry key="999">You need to buy a volume flatrate to be able to send invitations or create meetings via the calendar. With Pay-per-minute it is only possible for you to access {0}. You cannot allow 3th Parties to access a Meeting.</entry>
+  <entry key="1000">This Email is already used by another User.</entry>
+  <entry key="1001">SIP-Settings</entry>
+  <entry key="1002">The Conference Number and PIN is automatically created via the OpenXG RPC-Gateway</entry>
+  <entry key="1003">SIP Number</entry>
+  <entry key="1004">PIN</entry>
+  <entry key="1005">Clear objects on current slide only!</entry>
+  <entry key="1006">Only the URL entered in the Status bar is send to participants!</entry>
+  <entry key="1007">Make Team-Rooms [Breakout session]</entry>
+  <entry key="1008">Choose users for a new Team-Room!</entry>
+  <entry key="1009">You can choose users here and create a new Conference Room ("Team Room") for them. The chosen users will automatically switch to the new Team-Room or get a notification. Team-Room Moderators will get additionally a list of current rooms so that they can switch to each room if there are is need for a Moderator.</entry>
+  <entry key="1010">Username</entry>
+  <entry key="1011">Login</entry>
+  <entry key="1012"></entry>
+  <entry key="1013">Users for the new Team-Room:</entry>
+  <entry key="1014">Create Team-Room</entry>
+  <entry key="1015">Cancel</entry>
+  <entry key="1016">Choose at least one user for the Team-Room!</entry>
+  <entry key="1017">Add user to team</entry>
+  <entry key="1018">Remove user from Team-Room</entry>
+  <entry key="1019">User is Team-Room Moderator (He is able to manage Team-Rooms and users of the Team-Room can ask him to come inside)</entry>
+  <entry key="1020">Roomtype</entry>
+  <entry key="1021">If you check "Force user to switch to new Team-Room" all chosen users will automatically switch to the newly created Team-Room. Otherwise they get a notification with a button that they &lt;i&gt;can&lt;/i&gt; switch to the new room. Team-Moderators always have the free choice to manage the Team-Rooms and switch between them.</entry>
+  <entry key="1022">Manage Team-Rooms</entry>
+  <entry key="1023">You can switch here between all Team-Rooms that you are assigned as Team-Room Moderator. Users inside the Team-Room can send you a message, for example to ask you to come to their room and help them. You can also terminate the Team-Room and all Users will be logged out.</entry>
+  <entry key="1024">Force user to switch to new Team-Room</entry>
+  <entry key="1025">Name</entry>
+  <entry key="1026">Created</entry>
+  <entry key="1027"></entry>
+  <entry key="1028"></entry>
+  <entry key="1029">Users available</entry>
+  <entry key="1030">Add a user with the plus from the left or remove it with the cross from the right!</entry>
+  <entry key="1031">1) Team-Room settings</entry>
+  <entry key="1032">2) Add users to the Team-Room</entry>
+  <entry key="1033">Team-Room Name</entry>
+  <entry key="1034">Team-Room</entry>
+  <entry key="1035">Change to the Room</entry>
+  <entry key="1036">Switch to this Team-Room</entry>
+  <entry key="1037">Terminate Team-Room and logout all Users</entry>
+  <entry key="1038">New Team-Room</entry>
+  <entry key="1039">There is a new Team-Room available for you.</entry>
+  <entry key="1040">Switch to Team-Room</entry>
+  <entry key="1041">Team-Room Actions</entry>
+  <entry key="1042">You can re-open this window via the main menu in the "Actions" section!</entry>
+  <entry key="1043">Send message to Team-Room Moderator</entry>
+  <entry key="1044">New Team-Room</entry>
+  <entry key="1045">There is a new Team-Room available. You can switch to that Room. Team-Rooms are like "Workgroups" with additionally possibilities to ask the Team-Room Moderator for help. Your Team-Rooms are also available in the "My Meetings" section.</entry>
+  <entry key="1046">Switch to Team-Room</entry>
+  <entry key="1047">Created by:</entry>
+  <entry key="1048">Team-Room name:</entry>
+  <entry key="1049">This Window will stay open even if you leave the room!</entry>
+  <entry key="1050">Users for this Team-Room</entry>
+  <entry key="1051">3) Other Team-Rooms that you could switch to</entry>
+  <entry key="1052">Send a message to the Team-Room Moderators. For example if you need help in Moderating the Room or if you have a question about the topic.</entry>
+  <entry key="1053">Send</entry>
+  <entry key="1054">2) Users that are invited to this Team-Room</entry>
+  <entry key="1055">Is Team-Room Moderator</entry>
+  <entry key="1056">These are all users that the moderator has invited to this Team-Room.</entry>
+  <entry key="1057">There is no Team-Moderator logged in at the moment!</entry>
+  <entry key="1058">Please enter a message</entry>
+  <entry key="1059">Please help us, we have a problem in our Team-Room!</entry>
+  <entry key="1060">A user from a Team-Room requests your help.</entry>
+  <entry key="1061">Team-Room request for help</entry>
+  <entry key="1062">Message:</entry>
+  <entry key="1063">From:</entry>
+  <entry key="1064">You are currently not in any Team-Room. But you can switch here to all Team-Rooms that you have access to.</entry>
+  <entry key="1065">Backup the System. The Backup includes all User generated data. The configuration is not included as well as the language labels. Because those values are imported with the System Installer. To update your System, export your old system (1) re-install into a new database the new package (2) and import the Backup file again (3). The Backup should be imported before generating data in the newly installed system.</entry>
+  <entry key="1066">System Backup</entry>
+  <entry key="1067">Allow user to share Screen/Record</entry>
+  <entry key="1068">Deny user to share Screen/Record</entry>
+  <entry key="1069">User is Moderator, he can do anything!</entry>
+  <entry key="1070">would like to share/record screen.</entry>
+  <entry key="1071">You are allowed to share/record screen</entry>
+  <entry key="1072">Apply for right to share/record screen.</entry>
+  <entry key="1073">Allow/Deny right to share/record screen.</entry>
+  <entry key="1074">Turn sound off</entry>
+  <entry key="1075">Turn sound on</entry>
+  <entry key="1076">Audio only room</entry>
+  <entry key="1077">Turn this Flag on and the users will have only the Audio-Option and no Video in a conference room. This can by good to save bandwidth.</entry>
+  <entry key="1078">Allow Remote Control (During Screen Sharing)</entry>
+  <entry key="1079">Deny Remote Control (During Screen Sharing)</entry>
+  <entry key="1080">Apply for right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1081">You are allowed to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1082">would like to remote control screen.</entry>
+  <entry key="1083">User is Moderator, he can do anything! [Remote Desktop Control]</entry>
+  <entry key="1084">Allow/Deny right to Remote Control Screen (During Screen Sharing)</entry>
+  <entry key="1085">1) Your PC to remote PC: To copy and paste text from your clipboard into the remote controlled screen, click on the screen, then right click in the text field and choose "Insert" from the context (right click) menu.&lt;br/&gt;&lt;br/&gt;2) From remote PC to your PC: To copy text from the remote PC to your PC's clipboard, highlight the text with the mouse on the remote screen, then right-click on the remote screen and choose &lt;i&gt;Copy highlighted text&lt;/i&gt;</entry>
+  <entry key="1086">Copy and Paste text from your PC to remote PC and vice-versa.</entry>
+  <entry key="1087">Copy highlighted text</entry>
+  <entry key="1088">How to copy n paste</entry>
+  <entry key="1089">Quality of the ScreenShare:</entry>
+  <entry key="1090">Very high Quality</entry>
+  <entry key="1091">High Quality</entry>
+  <entry key="1092">Medium Quality</entry>
+  <entry key="1093">Low Quality</entry>
+  <entry key="1094">en_US</entry>
+  <entry key="1095">de_DE</entry>
+  <entry key="1096">Keyboard:</entry>
+  <entry key="1097">Close Webinar!</entry>
+  <entry key="1098">The Webinar is already closed, you will be redirected to some interesting offerings in</entry>
+  <entry key="1099">Close Room</entry>
+  <entry key="1100">Exit URL</entry>
+  <entry key="1101">Room termination settings</entry>
+  <entry key="1102">If the room is closed users will be redirected to the exit URL.</entry>
+  <entry key="1103">Ldap</entry>
+  <entry key="1104">ID</entry>
+  <entry key="1105">Name</entry>
+  <entry key="1106">Config File</entry>
+  <entry key="1107">Ldap Config</entry>
+  <entry key="1108">Name</entry>
+  <entry key="1109">Enabled</entry>
+  <entry key="1110">Inserted</entry>
+  <entry key="1111">Inserted by</entry>
+  <entry key="1112">Updated</entry>
+  <entry key="1113">Updated by</entry>
+  <entry key="1114">The config files are in the folder webapps/openmeetings/conf. You need to manually upload the files to this folder. Changes to the config file are immediately online.</entry>
+  <entry key="1115">Config file name</entry>
+  <entry key="1116">If you enable "Add Domain to username" the value of the field "domain" is added to each login that the user enters in the login box. This is useful if the Login in the Ldap is stored including the domain name. Example: User enters "hans" domain is specified as "localhost.com", login that is verified against Ldap is: hans@localhost.com</entry>
+  <entry key="1117">Add Domain to username</entry>
+  <entry key="1118">Domain</entry>
+  <entry key="1119">Insert</entry>
+  <entry key="1120">Copy highlighted text</entry>
+  <entry key="1121">Remote Clipboard Text</entry>
+  <entry key="1122">Show remote Clipboard</entry>
+  <entry key="1123">Do not show again</entry>
+  <entry key="1124">Copy text here ...</entry>
+  <entry key="1125">You need the right to remote control (or the moderation) to copy and paste text to or from the remote screen.</entry>
+  <entry key="1126">Edit default settings ...</entry>
+  <entry key="1127">Do not show info box in Remote Control about Copy and Paste</entry>
+  <entry key="1128">Save</entry>
+  <entry key="1129">Remove</entry>
+  <entry key="1130">Cancel</entry>
+  <entry key="1131">Invite user to conference room</entry>
+  <entry key="1132">Choose a conference room. The invited user will get a message with your name and a link to the room.</entry>
+  <entry key="1133">Connected since:</entry>
+  <entry key="1134">Enter room after sending invitation</entry>
+  <entry key="1135">Invite</entry>
+  <entry key="1136">Message</entry>
+  <entry key="1137">would like to invite you to the conference room:</entry>
+  <entry key="1138">Invite message</entry>
+  <entry key="1139">Send Invitation</entry>
+  <entry key="1140">did &lt;b&gt;not&lt;/b&gt; accept your invitation!</entry>
+  <entry key="1141">Accept</entry>
+  <entry key="1142">Deny</entry>
+  <entry key="1143">Timezone</entry>
+  <entry key="1144">Event Details</entry>
+  <entry key="1145">Name</entry>
+  <entry key="1146">Description</entry>
+  <entry key="1147">Created by</entry>
+  <entry key="1148">TimeZone Message</entry>
+  <entry key="1149">Check "TimeZone Message" to give users a message next time they login to update their profile.</entry>
+  <entry key="1150">Please check the time zone in your user profile.</entry>
+  <entry key="1151">New {0} conference:</entry>
+  <entry key="1152">Details:</entry>
+  <entry key="1153">Start:</entry>
+  <entry key="1154">End:</entry>
+  <entry key="1155">Changed {0} conference:</entry>
+  <entry key="1156">Organizer:</entry>
+  <entry key="1157">Canceled {0} conference:</entry>
+  <entry key="1158">{0} conference Reminder:</entry>
+  <entry key="1159">Community settings</entry>
+  <entry key="1160">Show contact data to everybody</entry>
+  <entry key="1161">Add fields of interest that you offer or that you are searching to find interesting partners for a conference. Comma separate the terms (for example: Medical Service, Health assurance, ...)</entry>
+  <entry key="1162">My offerings</entry>
+  <entry key="1163">My interests</entry>
+  <entry key="1164">Name</entry>
+  <entry key="1165">Timezone</entry>
+  <entry key="1166">Fields of interest</entry>
+  <entry key="1167">Contact information</entry>
+  <entry key="1168">Show contact data to contacts only</entry>
+  <entry key="1169">Show contact data to nobody</entry>
+  <entry key="1170">My Profile</entry>
+  <entry key="1171">Edit settings</entry>
+  <entry key="1172">Search users</entry>
+  <entry key="1173">Watch your profile like other see you</entry>
+  <entry key="1174">Edit your settings, add your interests to be found</entry>
+  <entry key="1175">Search for other users and extend your network</entry>
+  <entry key="1176">Search</entry>
+  <entry key="1177">User offers</entry>
+  <entry key="1178">User looks for</entry>
+  <entry key="1179">Freetext</entry>
+  <entry key="1180">Name</entry>
+  <entry key="1181">Timezone</entry>
+  <entry key="1182">Offers</entry>
+  <entry key="1183">Searchs</entry>
+  <entry key="1184">Searchresult</entry>
+  <entry key="1185">Actions</entry>
+  <entry key="1186">Add to contacts</entry>
+  <entry key="1187">Send message</entry>
+  <entry key="1188">Contacts and Messages</entry>
+  <entry key="1189">Pending contacts</entry>
+  <entry key="1190">Accept</entry>
+  <entry key="1191">Deny</entry>
+  <entry key="1192">Hi,</entry>
+  <entry key="1193">would like to add you as contact.</entry>
+  <entry key="1194">Check your contact requests in {0} or click on those links to accept or deny the request</entry>
+  <entry key="1195">This user is already in your contact list or has received an invitation to your contact list that is not answered yet.</entry>
+  <entry key="1196">Your contact list</entry>
+  <entry key="1197">Edit your contact and messages,&lt;br/&gt; manage your pending contacts!</entry>
+  <entry key="1198">confirmed you as contact!</entry>
+  <entry key="1199"></entry>
+  <entry key="1200">Show / Copy chat log</entry>
+  <entry key="1201">Chat Log</entry>
+  <entry key="1202">From</entry>
+  <entry key="1203">Subject</entry>
+  <entry key="1204">Send</entry>
+  <entry key="1205"></entry>
+  <entry key="1206">Messages</entry>
+  <entry key="1207">New Mail</entry>
+  <entry key="1208">Click to write a new message to any of your contacts</entry>
+  <entry key="1209">Write new message</entry>
+  <entry key="1210">To:</entry>
+  <entry key="1211">Subject:</entry>
+  <entry key="1212">Enable full fit and the whiteboard will zoom the whole whiteboard so that all&lt;br/&gt;documents are visible according to each participants screen resolution.</entry>
+  <entry key="1213">Kick user</entry>
+  <entry key="1214">You cannot kick yourself out of the conference room! If you want to leave it close the browser or use the exit button!</entry>
+  <entry key="1215">Do you really want to disconnect this user from this conference room?</entry>
+  <entry key="1216">Confirm action ...</entry>
+  <entry key="1217">You cannot kick a Super-Moderator out of a room!</entry>
+  <entry key="1218">Book conference room</entry>
+  <entry key="1219">Start</entry>
+  <entry key="1220">End</entry>
+  <entry key="1221">Add an optional request for meeting to the message and create a conference room. The Event is then copied in the calendar of every participant.</entry>
+  <entry key="1222">Inbox</entry>
+  <entry key="1223">Sent</entry>
+  <entry key="1224">Trash</entry>
+  <entry key="1225">This is you! You cannot add yourself as your own contact.</entry>
+  <entry key="1226">The user is already denied!</entry>
+  <entry key="1227">The user is already approved!</entry>
+  <entry key="1228">This user contact hash is invalid!</entry>
+  <entry key="1229">User added to contact list!</entry>
+  <entry key="1230">User denied as contact and removed from pending contact list!</entry>
+  <entry key="1231">There is no such contact!</entry>
+  <entry key="1232">Would you really like to remove that contact?</entry>
+  <entry key="1233">Confirm contact removal</entry>
+  <entry key="1234">Delete contact from list</entry>
+  <entry key="1235">User Profile</entry>
+  <entry key="1236">Show user profile</entry>
+  <entry key="1237">Messages</entry>
+  <entry key="1238">Search</entry>
+  <entry key="1239">Select all</entry>
+  <entry key="1240">Select none</entry>
+  <entry key="1241">Select unread</entry>
+  <entry key="1242">Select read</entry>
+  <entry key="1243">Move to folder ...</entry>
+  <entry key="1244">Add new folder ...</entry>
+  <entry key="1245">Delete</entry>
+  <entry key="1246">Deleted mails are still in your trash folder!</entry>
+  <entry key="1247">Mark unread</entry>
+  <entry key="1248">Mark read</entry>
+  <entry key="1249">Answer</entry>
+  <entry key="1250">Answer everybody</entry>
+  <entry key="1251">Forward</entry>
+  <entry key="1252">Actions ...</entry>
+  <entry key="1253">Send private message</entry>
+  <entry key="1254">Nothing selected!</entry>
+  <entry key="1255">Move to Inbox</entry>
+  <entry key="1256">Delete (final)</entry>
+  <entry key="1257">This action cannot be undone!</entry>
+  <entry key="1258">Add folder</entry>
+  <entry key="1259">Add folders and organize your messages!</entry>
+  <entry key="1260">Add folder</entry>
+  <entry key="1261">Add</entry>
+  <entry key="1262">Delete folder</entry>
+  <entry key="1263">You cannot delete this folder, there are still messages inside! Delete first the messages or move them to another folder.</entry>
+  <entry key="1264">Edit name</entry>
+  <entry key="1265">Do you really want to delete this folder? There is no way to undo that.</entry>
+  <entry key="1266">Your request was send to the user. The user will receive a notification to accept or deny your request. Only accepted requests are in your contact list of course!</entry>
+  <entry key="1267">Message</entry>
+  <entry key="1268">The user does not share his personal contact data.</entry>
+  <entry key="1269">The user does share his personal contact data only to contacts.</entry>
+  <entry key="1270">Address &amp; Phone</entry>
+  <entry key="1271">You invitation code is no valid, the code is only valid during this specific date and time:</entry>
+  <entry key="1272">This event is connected to several calendars of other users. Your change will also update their calendar. Would you really like to update the event?</entry>
+  <entry key="1273">Confirm update</entry>
+  <entry key="1274">Allow contact to see my calendar (view only)</entry>
+  <entry key="1275">Do not share calendar</entry>
+  <entry key="1276">Calendar of contacts</entry>
+  <entry key="1277">Your contacts need to approve you first to be able to see their calendar.</entry>
+  <entry key="1278">You cannot store or delete events from other calendars then your own!</entry>
+  <entry key="1279">Show my own calendar again!</entry>
+  <entry key="1280">This event is connected to several calendars of other users. Your action will also delete the event from their calendar. Would you really like to delete the event?</entry>
+  <entry key="1281">Confirm action</entry>
+  <entry key="1282">Enter room</entry>
+  <entry key="1283">Access the conference room</entry>
+  <entry key="1284">There is a conference room and event booked with this private message.</entry>
+  <entry key="1285">You need to store the event first!</entry>
+  <entry key="1286">There is no such room available. The event in the calendar and connected room is already deleted!</entry>
+  <entry key="1287">Choose your nickname</entry>
+  <entry key="1288">Firstname</entry>
+  <entry key="1289">Lastname</entry>
+  <entry key="1290">Email</entry>
+  <entry key="1291">Ok</entry>
+  <entry key="1292">Minimum length 4 chars! For both, firstname and lastname.</entry>
+  <entry key="1293">Please enter a valid email!</entry>
+  <entry key="1294">Facebook</entry>
+  <entry key="1295">Login with your Facebook account</entry>
+  <entry key="1296">Member since</entry>
+  <entry key="1297">You've logged with your Facebook account. You should update your profile with the correct email. Otherwise you will not receive invitations and private messages from other users.</entry>
+  <entry key="1298">Message</entry>
+  <entry key="1299">Do not show update profile message again</entry>
+  <entry key="1300">more display options ...</entry>
+  <entry key="1301">New private message:</entry>
+  <entry key="1302">Click here to visit your profile to see the full message ...</entry>
+  <entry key="1303">Reply</entry>
+  <entry key="1304">Rooms and chats</entry>
+  <entry key="1305">My rooms</entry>
+  <entry key="1306">My conference room (for 1-16 users)</entry>
+  <entry key="1307">My webinar room (for 1-120 users)</entry>
+  <entry key="1308">Owner Id</entry>
+  <entry key="1309">Please enter a password</entry>
+  <entry key="1310">You need an account with User-Level User, Moderator or Admin</entry>
+  <entry key="1311">Web-Service (only access via SOAP)</entry>
+  <entry key="1312">Do directly load to whiteboard</entry>
+  <entry key="1313">Do you really want to remove this whiteboard? This action cannot be undone!</entry>
+  <entry key="1314">Load to whiteboard</entry>
+  <entry key="1315">Do not forget start recording! One user per room always needs to start it to have the recording afterwards.</entry>
+  <entry key="1316">Start Recording</entry>
+  <entry key="1317">Arrow</entry>
+  <entry key="1318">Circle</entry>
+  <entry key="1319">Line</entry>
+  <entry key="1320">Square</entry>
+  <entry key="1321">Triangle</entry>
+  <entry key="1322">Text/Note</entry>
+  <entry key="1323">Cliparts</entry>
+  <entry key="1324">Draw Free</entry>
+  <entry key="1325">Select/Move</entry>
+  <entry key="1326">Draw Shape</entry>
+  <entry key="1327">Cut/Move</entry>
+  <entry key="1328">Zoom In/Out</entry>
+  <entry key="1329">Print</entry>
+  <entry key="1330">Undo</entry>
+  <entry key="1331">Trash</entry>
+  <entry key="1332">Add Grid</entry>
+  <entry key="1333">Share File</entry>
+  <entry key="1334">Select Shape</entry>
+  <entry key="1335">Select Clipart</entry>
+  <entry key="1336">Copy</entry>
+  <entry key="1337">Cut</entry>
+  <entry key="1338">Paste</entry>
+  <entry key="1339">Delete</entry>
+  <entry key="1340">Do you really want to delete the complete content on the whiteboard?</entry>
+  <entry key="1341">Load directly to whiteboard</entry>
+  <entry key="1342">Attendees</entry>
+  <entry key="1343">Attendee Manager</entry>
+  <entry key="1344">Present</entry>
+  <entry key="1345">Remote Controll</entry>
+  <entry key="1346">Eject</entry>
+  <entry key="1347">Chat</entry>
+  <entry key="1348">Invite Attendees</entry>
+  <entry key="1349">By Email</entry>
+  <entry key="1350">User is moderator</entry>
+  <entry key="1351">User has webcam switched on</entry>
+  <entry key="1352">Deactivate shape fill</entry>
+  <entry key="1353">Activate shape fill</entry>
+  <entry key="1354">Snap to Grid</entry>
+  <entry key="1355">Allow recording</entry>
+  <entry key="1356">Wait for recording</entry>
+  <entry key="1357">Hide topbar</entry>
+  <entry key="1358">Play video</entry>
+  <entry key="1359">Do you really want to delete the content on the current slide?</entry>
+  <entry key="1360">Accept and grant user right</entry>
+  <entry key="1361">Deny</entry>
+  <entry key="1362">I</entry>
+  <entry key="1363">Activities and actions</entry>
+  <entry key="1364">Remove whiteboard</entry>
+  <entry key="1365">You need the moderation or the right to draw on the whiteboard to remove whiteboards!</entry>
+  <entry key="1366">Not allowed</entry>
+  <entry key="1367">has left the room.</entry>
+  <entry key="1368">Math icons</entry>
+  <entry key="1369">No category</entry>
+  <entry key="1370">Color-Style</entry>
+  <entry key="1371">Quality</entry>
+  <entry key="1372">Domain</entry>
+  <entry key="1373">visit</entry>
+  <entry key="1374">redorange</entry>
+  <entry key="1375">mediumseagreen</entry>
+  <entry key="1376">steelblue</entry>
+  <entry key="1377">lightsteelblue</entry>
+  <entry key="1378">goldenred</entry>
+  <entry key="1379">silvergray</entry>
+  <entry key="1380">userdefined</entry>
+  <entry key="1381">best</entry>
+  <entry key="1382">upload</entry>
+  <entry key="1383">medium</entry>
+  <entry key="1384">Mute microphone globally</entry>
+  <entry key="1385">Unmute microphone globally</entry>
+  <entry key="1386">Mute microphone of others</entry>
+  <entry key="1387">You are globally muted by the moderator. You cannot unmute yourself!</entry>
+  <entry key="1388">Mute microphone globally?</entry>
+  <entry key="1389">Do you really want to mute yourself globally? No other user will hear you anymore!</entry>
+  <entry key="1390">Mute microphone locally?</entry>
+  <entry key="1391">Do you really want to mute this microphone? You can only mute it locally on your screen. It has no effect to how other users hear this user. Only moderators can turn it off globally!</entry>
+  <entry key="1392">Mute microphone off globally?</entry>
+  <entry key="1393">Do you really want to mute this user globally? No other user will hear him anymore!</entry>
+  <entry key="1394">Your sound is on. Click here to send moderator message to mute your microphone globally (in the complete conference room) off!</entry>
+  <entry key="1395">Your sound is off. Click here to send moderator message to unmute your microphone globally (in the complete conference room) on!</entry>
+  <entry key="1396">would like that the moderator mutes my microphone globally.</entry>
+  <entry key="1397">would like that the moderator unmutes my microphone globally.</entry>
+  <entry key="1398">want that the moderator unmutes his/her microphone.</entry>
+  <entry key="1399">want that the moderator mutes his/her microphone.</entry>
+  <entry key="1400">Unmute microphone. Click here to mute his/her microphone globally!</entry>
+  <entry key="1401">Mute microphone. Click here to unmute his/her microphone globally!</entry>
+  <entry key="1402">This user is globally muted by the moderator. You cannot unmute him!</entry>
+  <entry key="1403">Mute your microphone globally</entry>
+  <entry key="1404">Unmute your microphone globally</entry>
+  <entry key="1405">Mute microphone</entry>
+  <entry key="1406">Unmute microphone</entry>
+  <entry key="1407">Mute microphone globally</entry>
+  <entry key="1408">Unmute microphone globally</entry>
+  <entry key="1409">Only moderators can mute or unmute an user globally! To mute your own microphone: Please use the microphone icon in your video pod!</entry>
+  <entry key="1410">Poll Name</entry>
+  <entry key="1411">You</entry>
+  <entry key="1412">Archieved Polls</entry>
+  <entry key="1413">active</entry>
+  <entry key="1414">Simple Chart</entry>
+  <entry key="1415">Pie Chart</entry>
+  <entry key="1416">Please enter email</entry>
+  <entry key="1417">New message(s)</entry>
+  <entry key="1418">Close Poll</entry>
+  <entry key="1419">Are you sure you want to close this Poll? No one will be able to vote</entry>
+  <entry key="1420">Delete Poll</entry>
+  <entry key="1421">Are you sure you want to delete this Poll? The results will be deleted as well.</entry>
+  <entry key="1422">Language ISO Code</entry>
+  <entry key="1423">Allow/Deny right to give exclusive audio.</entry>
+  <entry key="1424">Allow user to give exclusive audio</entry>
+  <entry key="1425">Deny user to give exclusive audio</entry>
+  <entry key="1426">would like to get a permission for exclusive audio.</entry>
+  <entry key="1427">want that the moderator gives me a permission for exclusive audio.</entry>
+  <entry key="1428">Give a permission for exclusive audio.</entry>
+  <entry key="1429">Cam resolution</entry>
+  <entry key="1430">Changing the resolution affects bandwidth, bigger picture needs more bandwith!</entry>
+  <entry key="1431">You don't have the right to give yourself or others exclusive audio. You need to apply for the right from the moderator or ask the moderator to give you exclusive audio.</entry>
+  <entry key="1432">I would like to get the right for exclusive audio</entry>
+  <entry key="1433">Give exclusive audio to me (alternatively click on your video pod or press F12)</entry>
+  <entry key="1434">Microphone is on!</entry>
+  <entry key="1435">Microphone is muted</entry>
+  <entry key="1436">Hide chat</entry>
+  <entry key="1437">Hide activities</entry>
+  <entry key="1438">Hide files explorer</entry>
+  <entry key="1439">Hide actions menu</entry>
+  <entry key="1440">Hide screen sharing</entry>
+  <entry key="1441">Hide whiteboard</entry>
+  <entry key="1442">Show micro status in video</entry>
+  <entry key="1443">Layout options</entry>
+  <entry key="1444">New Event</entry>
+  <entry key="1445">Password protected are the links to the conference that are send to the participents when you save the calendar event, not the room! That means if you save the event multiple times but with different passwords every participent receives a new link that has a different password. But old links still work once send!</entry>
+  <entry key="1446">Edit details</entry>
+  <entry key="1447">Show sip dialer</entry>
+  <entry key="1448">Call</entry>
+  <entry key="1449">Show calendar events of contact</entry>
+  <entry key="1450">Your home!</entry>
+  <entry key="1451">Plan your meetings</entry>
+  <entry key="1452">Watch recording and interviews</entry>
+  <entry key="1453">Choose and start a web-conference</entry>
+  <entry key="1454">Manage users and rights</entry>
+  <entry key="1455">Manage connections and kick users</entry>
+  <entry key="1456">Manage usergroups</entry>
+  <entry key="1457">Manage conference rooms</entry>
+  <entry key="1458">Manage system settings</entry>
+  <entry key="1459">Manage labels and wording</entry>
+  <entry key="1460">Manage LDAP and ADS configurations</entry>
+  <entry key="1461">Export/Import System Backups</entry>
+  <entry key="1462">You need moderation or the right to draw on whiteboard to upload, add, delete or load files and folders.</entry>
+  <entry key="1463">Edit text</entry>
+  <entry key="1464">Prof</entry>
+  <entry key="1465">Publish</entry>
+  <entry key="1466">Start Publish</entry>
+  <entry key="1467">Stop Publish</entry>
+  <entry key="1468">Host</entry>
+  <entry key="1469">Publish App</entry>
+  <entry key="1470">Publish Id</entry>
+  <entry key="1471">Reduce the width of the SharingScreen before you try to move it left</entry>
+  <entry key="1472">Reduce the height of the SharingScreen before you try to move it bottom</entry>
+  <entry key="1473">Reduce the x of the SharingScreen before you try to make it wider</entry>
+  <entry key="1474">Reduce the y of the SharingScreen before you try to make it higher</entry>
+  <entry key="1475">Fill these settings stream your screen data to 3th party providers like justin.tv</entry>
+  <entry key="1476">Please start Screen sharing to be able to publish it</entry>
+  <entry key="1477">Moderator permission required to start recording</entry>
+  <entry key="1478">You don't have permission to apply exclusive audio to any participant. You need moderation role or the right for exclusive audio to make any microphone exclusive turned on..</entry>
+  <entry key="1479">Upload new file to file explorer</entry>
+  <entry key="1480">Open new dialog with sharing settings</entry>
+  <entry key="1481">An existing moderator must approve it</entry>
+  <entry key="1482">Ask moderator to share your webcam/micro</entry>
+  <entry key="1483">Gather feedback by creating a poll</entry>
+  <entry key="1484">Past and current poll results as charts</entry>
+  <entry key="1485">Vote if there is a poll for this conference room</entry>
+  <entry key="1486">Edit cam and mic settings</entry>
+  <entry key="1487">Confirm and leave the room</entry>
+  <entry key="1488">Call external people via VoIP/SIP</entry>
+  <entry key="1489">Send an email with a direct link to this room</entry>
+  <entry key="1490">Change your whiteboard settings</entry>
+  <entry key="1491">Max upload size</entry>
+  <entry key="1492">Ask moderator to share your whiteboard</entry>
+  <entry key="1493">Start Private Chat</entry>
+  <entry key="1494">All</entry>
+  <entry key="1495">You cannot start a private chat with yourself.</entry>
+  <entry key="1496">You've already started a private chat with this participant.</entry>
+  <entry key="1497">Do you really want to delete this private chat?</entry>
+  <entry key="1498">Servers</entry>
+  <entry key="1499">Servers participating in cluster</entry>
+  <entry key="1500">Server Name</entry>
+  <entry key="1501">Server Address</entry>
+  <entry key="1502">Server details</entry>
+  <entry key="1503">Send SMS</entry>
+  <entry key="1504">Publishing. User:</entry>
+  <entry key="1505">To save time and internet traffic you can use command line admin to backup/restore/upgrade: &lt;ol&gt; &lt;li&gt;go to OM install dir (for ex. /opt/red5)&lt;/li&gt; &lt;li&gt;stop OM (for ex. ./red5-shutdown.sh)&lt;/li&gt; &lt;li&gt;./admin.sh -b -file ~/today_om_backup.zip (create backup of current OM)&lt;/li&gt; &lt;li&gt;download archive with new OM&lt;/li&gt; &lt;li&gt;mv /opt/red5 /opt.red5.bak (move working version of OM just in case :))&lt;/li&gt; &lt;li&gt;extract downloaded OM to the /opt/red5&lt;/li&gt; &lt;li&gt;./admin.sh -i -file ~/today_om_backup.zip (or './admin.sh -i -file ~/today_om_backup.zip --db-type mysql --db-user om_user --db-pass om_user_pass' in case of you are using non-default DB )&lt;/li&gt; &lt;li&gt;start OM&lt;/li&gt; &lt;/ol&gt;</entry>
+  <entry key="1506">Rooms common to all user</entry>
+  <entry key="1507">Rooms common to the current user group</entry>
+  <entry key="1508">Rooms of the current user</entry>
+  <entry key="1509">Create/Modify appointment special room</entry>
+  <entry key="1510">You can enter multiple addresses in the format: firstname1 lastname1 &lt;email1&gt;,"firstname2 lastname2" &lt;email2&gt;,'firstname3 lastname3' &lt;email3&gt;, ...</entry>
+  <entry key="1511">Adjust stream volume</entry>
+  <entry key="1512">Adjust microphone volume</entry>
+  <entry key="1513">Is chat moderated</entry>
+  <entry key="1514">Allow message</entry>
+  <entry key="1515">Chat panel opened by default</entry>
+  <entry key="1516">Files panel opened by default</entry>
+  <entry key="1517">Last ping</entry>
+  <entry key="1518">Every slave sends a ping to the master every 3 seconds (configurable). Slave lastPing must be smaller then 1 minute so that the master uses the slave.</entry>
+  <entry key="1519">HTTP Port</entry>
+  <entry key="1520">User (SOAP-Access)</entry>
+  <entry key="1521">Password</entry>
+  <entry key="1522">Webapp path</entry>
+  <entry key="1523">Protocol</entry>
+  <entry key="1524">Ping running</entry>
+  <entry key="1525">Active</entry>
+  <entry key="1526">Generate URL</entry>
+  <entry key="1527">Network testing</entry>
+  <entry key="1528">Auto select interview video pod</entry>
+  <entry key="1529">Underline</entry>
+  <entry key="1530">Font style</entry>
+  <entry key="1531">Allow font styles</entry>
+  <entry key="1532">Font color</entry>
+  <entry key="1533">Hyperlink</entry>
+  <entry key="1534">Show session statistics</entry>
+  <entry key="1535">Session details</entry>
+  <entry key="1536">System import</entry>
+  <entry key="1537">Include uploaded files and recordings in backup</entry>
+  <entry key="1538">Enable SIP transport in the room</entry>
+  <entry key="1539">Do you really want to provide this user an exclusive audio?</entry>
+  <entry key="1540">Please specify your timezone</entry>
+  <entry key="1541">conference (1-25 users)</entry>
+  <entry key="1542">restricted (1-150 users)</entry>
+  <entry key="1543">interview (1:1 meeting with recording)</entry>
+  <entry key="1544">Configuration with given key already exists, please specify another key or edit existent configuration</entry>
+  <entry key="1545">Content is Saving, Please wait.</entry>
+  <entry key="1546">Welcome</entry>
+  <entry key="1547">Widget displaying basic user info and support links</entry>
+  <entry key="1548">Widgets</entry>
+  <entry key="1549">About</entry>
+  <entry key="1550">Name</entry>
+  <entry key="1551">Version</entry>
+  <entry key="1552">Revision</entry>
+  <entry key="1553">Build date</entry>
+  <entry key="1554">Loading ...</entry>
+  <entry key="1555">today</entry>
+  <entry key="1556">Jan</entry>
+  <entry key="1557">Feb</entry>
+  <entry key="1558">Mar</entry>
+  <entry key="1559">Apr</entry>
+  <entry key="1560">May</entry>
+  <entry key="1561">Jun</entry>
+  <entry key="1562">Jul</entry>
+  <entry key="1563">Aug</entry>
+  <entry key="1564">Sep</entry>
+  <entry key="1565">Oct</entry>
+  <entry key="1566">Nov</entry>
+  <entry key="1567">Dec</entry>
+  <entry key="1568">do not send notification</entry>
+  <entry key="1569">simple email</entry>
+  <entry key="1570">iCal email</entry>
+  <entry key="1571">OAuth2</entry>
+  <entry key="1572">Manage OAuth2 configurations</entry>
+  <entry key="1573">Name</entry>
+  <entry key="1574">Enabled</entry>
+  <entry key="1575">Icon URL</entry>
+  <entry key="1576">client_id</entry>
+  <entry key="1577">client_secret</entry>
+  <entry key="1578">Request key URL</entry>
+  <entry key="1579">Request token URL</entry>
+  <entry key="1580">Request info URL</entry>
+  <entry key="1581">OAuth2 config</entry>
+  <entry key="1582">Login param name</entry>
+  <entry key="1583">Email param name</entry>
+  <entry key="1584">Firstname param name</entry>
+  <entry key="1585">Lastname param name</entry>
+  <entry key="1586">Request token attributes</entry>
+  <entry key="1587">Redirect uri</entry>
+  <entry key="1588">You can enter email address in the format: firstname1 lastname1 &lt;email1&gt; or "firstname2 lastname2" &lt;email2&gt; or 'firstname3 lastname3' &lt;email3&gt; or email</entry>
+  <entry key="1589">Notify on disconnect</entry>
+  <entry key="1590">Display</entry>
+  <entry key="1591">Your account has been created. Confirmation email has been sent. You can now login.</entry>
+  <entry key="1592">End date entered is earlier than start date.</entry>
+  <entry key="1593">Exit value</entry>
+  <entry key="1594">Conversion messages</entry>
+  <entry key="1595">Recording file is not found</entry>
+  <entry key="1596">Add Whiteboard</entry>
+  <entry key="1597">You can enter address in the format: firstname1 lastname1 &lt;email1&gt; OR "firstname2 lastname2" &lt;email2&gt; OR 'firstname3 lastname3' &lt;email3&gt;</entry>
+  <entry key="1598">Security</entry>
+  <entry key="1599">Access denied. You have no rights to enter this room.</entry>
+  <entry key="1600">Re-convert</entry>
+	<entry key="install.wizard.install.header">Installation</entry>
+	<entry key="install.wizard.welcome.panel"><![CDATA[
+	<ol>
+		<li><h4>
+				<a id="Enabling_Image_Upload_and_import_to_whiteboard"></a>Enabling
+				Image Upload and import to whiteboard<a
+					href="#Enabling_Image_Upload_and_import_to_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>ImageMagick</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://www.imagemagick.org" rel="nofollow">http://www.imagemagick.org</a>
+					regarding installation. The instructions for installation can be
+					found there <a target="_blank"
+					href="http://www.imagemagick.org/script/binary-releases.php"
+					rel="nofollow">http://www.imagemagick.org/script/binary-releases.php</a>,
+					however on most linux systems you can get it via your favorite
+					package managers (apt-get it)
+				</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a id="Enabling_import_of_PDFs_into_whiteboard"></a>Enabling
+				import of PDFs into whiteboard<a
+					href="#Enabling_import_of_PDFs_into_whiteboard"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>GhostScript</strong> on the server, you can
+					get more information on <a target="_blank"
+					href="http://pages.cs.wisc.edu/%7Eghost/" rel="nofollow">http://pages.cs.wisc.edu/~ghost/</a>
+					regarding installation. The instructions for installation can be
+					found there, however on most linux systems you can get it via your
+					favorite package managers (apt-get it).
+				</li>
+				<li>Install <strong>SWFTools</strong> on the server, you can get
+					more information on <a target="_blank"
+					href="http://www.swftools.org/" rel="nofollow">http://www.swftools.org/</a>
+					regarding installation. Some of the Linux distributions already have
+					it in there package manager see <a target="_blank"
+					href="http://packages.debian.org/unstable/utils/swftools"
+					rel="nofollow">http://packages.debian.org/unstable/utils/swftools</a>),
+					the recommended version of <strong>SWFTools</strong> is 0.9 as prior
+					version have a bug that does lead to wrong object dimensions in the
+					Whiteboard
+				</li>
+		</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"></a>Enabling
+				import of .doc, .docx, .ppt, .pptx, ... all Office Documents into
+				whitebaord<a
+					href="#Enabling_import_of_.doc,_.docx,_.ppt,_.pptx,_..._all_Office_Docu"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li><strong>OpenOffice-Service</strong> started and listening on
+					port 8100, see <a target="_blank"
+					href="http://openmeetings.apache.org/OpenOfficeConverter.html">OpenOfficeConverter</a>
+					for details</li>
+			</ul>
+		</li>
+		<li><h4>
+				<a
+					id="Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"></a>Enabling
+				Recording and import of .avi, .flv, .mov and .mp4 into whiteboard<a
+					href="#Enabling_Recording_and_import_of_.avi,_.flv,_.mov_and_.mp4_into"
+					class="section_anchor"></a>
+			</h4>
+			<ul>
+				<li>Install <strong>FFMpeg</strong>. You should get FFMPEG in an
+					up to date copy! For Windows you can download a Build for example
+					from <a target="_blank" href="http://ffmpeg.arrozcru.org/builds/"
+					rel="nofollow">http://ffmpeg.arrozcru.org/builds/</a> Linux or OSx
+					Users should be able to use one of the various Installation
+					Instructions on the Web. You need to enable libmp3lame!
+				</li>
+				<li>Install <strong>SoX</strong> <a
+					href="http://sox.sourceforge.net/" target="_BLANK">http://sox.sourceforge.net/</a>.
+					You should install SoX in a up to date copy! SoX 12.xx will NOT
+					work!
+				</li>
+			</ul>
+		</li>
+	</ol>
+
+	<br />
+	<b> <span style="font-size: 1.2em">If you have further
+			questions or need support in installation or hosting:</span></b>
+	<br />
+	<br />
+
+	<b><span style="font-size: 1.2em">Community-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/mail-lists.html"
+		target="_blank">Mailing lists</a></span>
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.2em">Commercial-Support:</span></b>
+	<br />
+	<br />
+	<span style="font-size: 1.1em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">Commercial-Support</a></span>
+
+	<br />
+	]]></entry>
+	<entry key="install.wizard.db.step.note"><![CDATA[
+		<h4>
+			<a id="Recommendation_for_production_environment"></a>Recommendation
+			for production environment<a target="_blank"
+				href="#Recommendation_for_production_environment"
+				class="section_anchor"></a>
+		</h4>
+		<blockquote>
+			By default {0} uses the integrated {1} database. For
+			production environment you should consider using {2}, {3}, {4}, {5} or {6}
+		</blockquote>
+	]]></entry>
+	<entry key="install.wizard.db.step.instructions.derby"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/ApacheDerbyConfig.html">Apache Derby</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mysql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MySQLConfig.html">MySQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.postgresql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/PostgresConfig.html">PostgreSql</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.db2"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/IBMDB2Config.html">IBM DB2</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.mssql"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/MSSQLConfig.html">MSSQL</a>]]></entry>
+	<entry key="install.wizard.db.step.instructions.oracle"><![CDATA[<a target="_blank" href="http://openmeetings.apache.org/OracleConfig.html">Oracle</a>]]></entry>
+	<entry key="install.wizard.db.step.field.title">DB configuration</entry>
+	<entry key="install.wizard.db.step.dbtype">Choose DB type</entry>
+	<entry key="install.wizard.db.step.db2.name">IBM DB2</entry>
+	<entry key="install.wizard.db.step.derby.name">Apache Derby</entry>
+	<entry key="install.wizard.db.step.mssql.name">MSSQL</entry>
+	<entry key="install.wizard.db.step.mysql.name">MySQL</entry>
+	<entry key="install.wizard.db.step.oracle.name">Oracle</entry>
+	<entry key="install.wizard.db.step.postgresql.name">PostgreSql</entry>
+	<entry key="install.wizard.db.step.host">Specify DB host</entry>
+	<entry key="install.wizard.db.step.port">Specify DB port</entry>
+	<entry key="install.wizard.db.step.dbname">Specify the name of the database</entry>
+	<entry key="install.wizard.db.step.user">Specify DB user</entry>
+	<entry key="install.wizard.db.step.pass">Specify DB password</entry>
+	<entry key="install.wizard.db.step.check">Check</entry>
+	<entry key="install.wizard.db.step.errorprops">Unable to get the properties</entry>
+	<entry key="install.wizard.db.step.nodriver">Unable to load proper DB driver, please download appropriate jar file, and restart the OM. Instructions: {0}</entry>
+	<entry key="install.wizard.db.step.notvalid">Database check was unsuccessfull</entry>
+	<entry key="install.wizard.db.step.error.patch">Unexpected error while patching persistence file: {0}</entry>
+	<entry key="install.wizard.db.step.valid">Database check was successfull</entry>
+	<entry key="install.wizard.params.step1.userdata">Userdata</entry>
+	<entry key="install.wizard.params.step1.username">Username</entry>
+	<entry key="install.wizard.params.step1.username.title">Enter a username</entry>
+	<entry key="install.wizard.params.step1.password">Userpass</entry>
+	<entry key="install.wizard.params.step1.password.title">Enter a password</entry>
+	<entry key="install.wizard.params.step1.email">EMail</entry>
+	<entry key="install.wizard.params.step1.email.title">Enter a EMail</entry>
+	<entry key="install.wizard.params.step1.tz">User Time Zone</entry>
+	<entry key="install.wizard.params.step1.groupdata">Organisation(Domains)</entry>
+	<entry key="install.wizard.params.step1.group">Name</entry>
+	<entry key="install.wizard.params.step1.group.title">Enter a default Organisation</entry>
+
+	<entry key="install.wizard.params.step2.configuration">Configuration</entry>
+	<entry key="install.wizard.params.step2.allowFrontendRegister">Allow self-registering (allow_frontend_register)</entry>
+	<entry key="install.wizard.params.step2.sendEmailAtRegister">Send Email to new registered Users (sendEmailAtRegister)</entry>
+	<entry key="install.wizard.params.step2.sendEmailWithVerficationCode">New Users need to verify their EMail (sendEmailWithVerficationCode)</entry>
+	<entry key="install.wizard.params.step2.createDefaultRooms">Default Rooms of all types will be created</entry>
+	<entry key="install.wizard.params.step2.mailReferer">Mail-Referer (system_email_addr)</entry>
+	<entry key="install.wizard.params.step2.mailReferer.title">Enter a Referer</entry>
+	<entry key="install.wizard.params.step2.smtpServer">SMTP-Server (smtp_server)</entry>
+	<entry key="install.wizard.params.step2.smtpServer.title">Enter a SMTP-Server</entry>
+	<entry key="install.wizard.params.step2.smtpPort">SMTP-Server Port(default Smtp-Server Port is 25) (smtp_port)</entry>
+	<entry key="install.wizard.params.step2.smtpPort.title">Enter a SMTP-Server.Port normally 25</entry>
+	<entry key="install.wizard.params.step2.mailAuthName">SMTP-Username (email_username)</entry>
+	<entry key="install.wizard.params.step2.mailAuthName.title">Enter the mail-username</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass">SMTP-Userpass (email_userpass)</entry>
+	<entry key="install.wizard.params.step2.mailAuthPass.title">Enter the mail-userpass</entry>
+	<entry key="install.wizard.params.step2.mailUseTls">Enable TLS in Mail Server Auth</entry>
+	<entry key="install.wizard.params.step2.replyToOrganizer">Set inviter's email
+					address as ReplyTo in email invitations (inviter.email.as.replyto)</entry>
+	<entry key="install.wizard.params.step2.defaultLangId">Default Language</entry>
+	<entry key="install.wizard.params.step2.defaultExportFont">Default Font for Export [default_export_font]</entry>
+
+	<entry key="install.wizard.params.step3.converters">Converters</entry>
+	<entry key="install.wizard.params.step3.seeAlso"> see also</entry>
+	<entry key="install.wizard.params.step3.installation">Installation</entry>
+	<entry key="install.wizard.params.step3.swfZoom">SWFTools Zoom</entry>
+	<entry key="install.wizard.params.step3.swfZoom.title">Enter the dpi that swftools will use for PDF to SWF conversion</entry>
+	<entry key="install.wizard.params.step3.swfZoom.text">DPI that swftools will use for PDF to SWF conversion (default is 100)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality">SWFTools JPEG Quality</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.title">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small), 100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfJpegQuality.text">Enter the quality of embedded jpeg pictures to quality. 0 is worst (small),
+				100 is best (big). (default:85)</entry>
+	<entry key="install.wizard.params.step3.swfPath">SWFTools Path</entry>
+	<entry key="install.wizard.params.step3.swfPath.title">Enter the path to swftools for example C:/swftools (Windows) or leave blank if swftools is a known to your system path</entry>
+	<entry key="install.wizard.params.step3.swfPath.text">
+		You can test if swftools is installed into system path by
+		opening a shell or cmd-prompt and type pdf2swf If this shows
+		a list of options leave this field blank otherwise you have to
+		specify the path to pdf2swf on your system
+	</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath">ImageMagick Path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.title">Enter the path to ImageMagick, leave blank if ImageMagick is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.imageMagicPath.text"></entry>
+	<entry key="install.wizard.params.step3.ffmpegPath">FFMPEG Path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.title">Enter the path to FFMPEG, leave blank if FFMPEG is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.ffmpegPath.text"></entry>
+	<entry key="install.wizard.params.step3.soxPath">SoX Path</entry>
+	<entry key="install.wizard.params.step3.soxPath.title">Enter the path to SoX, leave blank if SoX is successfully installed to system-path</entry>
+	<entry key="install.wizard.params.step3.soxPath.text"></entry>
+	<entry key="install.wizard.params.step3.jodPath">JOD Path</entry>
+	<entry key="install.wizard.params.step3.jodPath.title">The path to JOD library (http://code.google.com/p/jodconverter), configure the path to point to the lib directory of JOD that contains also the jodconverter-core-version.jar</entry>
+	<entry key="install.wizard.params.step3.jodPath.text"></entry>
+	<entry key="install.wizard.params.step3.officePath">OpenOffice/LibreOffice Path for jodconverter</entry>
+	<entry key="install.wizard.params.step3.officePath.title">The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically</entry>
+	<entry key="install.wizard.params.step3.officePath.text">The path to OpenOffice/LibreOffice (optional) please set this
+			to the real path in case jodconverter is unable to find
+			OpenOffice/LibreOffice installation
+	</entry>
+
+	<entry key="install.wizard.params.step4.crypt">Crypt Type</entry>
+	<entry key="install.wizard.params.step4.cryptClassName">Crypt Class</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.title">Enter the Class name of the Encryption Class. DO NOT ALTER THIS IF YOU ARE NOT SURE</entry>
+	<entry key="install.wizard.params.step4.cryptClassName.text"><![CDATA[
+		You can use this default crypt type which is equal to
+		PHP-MD5 function or BSD-Style encryption by using:<b>org.apache.openmeetings.utils.crypt.MD5CryptImplementation</b>
+		for more information or to write your own Crypt-Style see: <a
+		href="http://openmeetings.apache.org/CustomCryptMechanism.html"
+		target="_blank">Custom Crypt Mechanism</a> You can edit this
+		value later BUT previous created Users and Sessions might be not
+		usable anymore
+	]]></entry>
+	<entry key="install.wizard.params.step4.red5SIP">red5SIP Configuration</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable">Enable SIP</entry>
+	<entry key="install.wizard.params.step4.red5SipEnable.text">Enable red5SIP integration</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix">SIP rooms prefix</entry>
+	<entry key="install.wizard.params.step4.red5SipRoomPrefix.text">Prefix for phone number of conference rooms</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext">SIP extensions context</entry>
+	<entry key="install.wizard.params.step4.red5SipExtenContext.text">Context of Asterisk extensions</entry>
+
+	<entry key="install.wizard.install.desc">Please click "Finish" button to start installation!</entry>
+	<entry key="install.wizard.install.started">Please wait, installation in progress</entry>
+	<entry key="install.wizard.install.failed">Installation is failed</entry>
+
+	<entry key="install.wizard.congrats.enter">Enter the Application</entry>
+	<entry key="install.wizard.congrats.port">If your Red5-Server runs on a different Port or on a different domain</entry>
+	<entry key="install.wizard.congrats.config">alter the config values of the client</entry>
+	<entry key="install.wizard.congrats.mail">Mailing list</entry>
+	<entry key="install.wizard.congrats.commercial">There are some companies
+			that also offer commercial support for Apache OpenMeetings:</entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/app/LabelResourceLoader.java b/src/web/java/org/apache/openmeetings/web/app/LabelResourceLoader.java
new file mode 100644
index 0000000..22093fd
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/LabelResourceLoader.java
@@ -0,0 +1,62 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.app;

+

+import java.util.HashMap;

+import java.util.Locale;

+import java.util.Map;

+

+import org.apache.wicket.Component;

+import org.apache.wicket.resource.loader.IStringResourceLoader;

+

+/**

+ * Map property values to OpenMeetings labelid's and get the string

+ * 

+ * @author swagner

+ *

+ */

+public class LabelResourceLoader implements IStringResourceLoader {

+	

+	private static Map<String,Long> STRING_LABEL_MAPPING = new HashMap<String,Long>();

+	

+	static {

+		STRING_LABEL_MAPPING.put("PagingNavigator.first", 368L);

+		STRING_LABEL_MAPPING.put("PagingNavigator.previous", 369L);

+		STRING_LABEL_MAPPING.put("PagingNavigator.next", 370L);

+		STRING_LABEL_MAPPING.put("PagingNavigator.last", 371L);

+	}

+

+	public String loadStringResource(Class<?> clazz, String key, Locale locale,

+			String style, String variation) {

+		return getStringByPropertyKey(key);

+	}

+

+	public String loadStringResource(Component component, String key,

+			Locale locale, String style, String variation) {

+		return getStringByPropertyKey(key);

+	}

+	

+	private String getStringByPropertyKey(String key) {

+		Long labelId = STRING_LABEL_MAPPING.get(key);

+		if (labelId == null) 

+			return null;

+		return Application.getString(labelId);

+	}

+

+}

diff --git a/src/web/java/org/apache/openmeetings/web/app/OmAuthenticationStrategy.java b/src/web/java/org/apache/openmeetings/web/app/OmAuthenticationStrategy.java
new file mode 100644
index 0000000..5ea4905
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/OmAuthenticationStrategy.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.app;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.wicket.authentication.strategy.DefaultAuthenticationStrategy;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class OmAuthenticationStrategy extends DefaultAuthenticationStrategy {
+	/** The separator used to concatenate the username and password */
+	private static final String VALUE_SEPARATOR = "-sep-";
+	private static final String COOKIE_KEY = "LoggedIn";
+	private static final Logger log = Red5LoggerFactory.getLogger(OmAuthenticationStrategy.class, webAppRootKey);
+	/** The cookie name to store the username/password/type/domain */
+	private final String cookieKey;
+
+	public OmAuthenticationStrategy() {
+		super(COOKIE_KEY);
+		cookieKey = COOKIE_KEY;
+	}
+
+	/**
+	 * @see org.apache.wicket.authentication.IAuthenticationStrategy#load()
+	 */
+	@Override
+	public String[] load() {
+		String value = getCookieUtils().load(cookieKey);
+		if (Strings.isEmpty(value) == false) {
+			try {
+				value = getCrypt().decryptUrlSafe(value);
+			} catch (RuntimeException e) {
+				log.info("Error decrypting login cookie: {}. The cookie will be deleted. Possible cause is that a "
+						+ "session-relative encryption key was used to encrypt this cookie while this decryption attempt "
+						+ "is happening in a different session, eg user coming back to the application after session expiration",
+						cookieKey);
+				getCookieUtils().remove(cookieKey);
+				value = null;
+			}
+			if (!Strings.isEmpty(value)) {
+				String username = null;
+				String password = null;
+				String type = null;
+				String domainId = null;
+
+				String[] values = value.split(VALUE_SEPARATOR);
+				if (values.length > 0 && !Strings.isEmpty(values[0])) {
+					username = values[0];
+				}
+				if (values.length > 1 && !Strings.isEmpty(values[1])) {
+					password = values[1];
+				}
+				if (values.length > 2 && !Strings.isEmpty(values[2])) {
+					type = values[2];
+				}
+				if (values.length > 3 && !Strings.isEmpty(values[3])) {
+					domainId = values[3];
+				}
+
+				return new String[] { username, password, type, domainId };
+			}
+		}
+
+		return null;
+	}
+
+	public void save(final String username, final String password, final Type type, final Long domainId) {
+		if (type != Type.oauth) {
+			String value = username + VALUE_SEPARATOR + password + VALUE_SEPARATOR + type.name() + VALUE_SEPARATOR + domainId;
+			String encryptedValue = getCrypt().encryptUrlSafe(value);
+			getCookieUtils().save(cookieKey, encryptedValue);
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/app/WebClient.java b/src/web/java/org/apache/openmeetings/web/app/WebClient.java
new file mode 100644
index 0000000..dcb351b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/WebClient.java
@@ -0,0 +1,143 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.app;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.wicket.protocol.ws.api.registry.IKey;
+
+/**
+ * Temporary class, later will be merged with {@link org.apache.openmeetings.db.entity.room.Client}
+ * @author solomax
+ *
+ */
+public class WebClient  implements IDataProviderEntity, Serializable {
+	private static final long serialVersionUID = 1L;
+
+	public enum Right {
+		moderator
+	}
+	private String sessionId;
+	private int pageId;
+	private long userId;
+	private String uid;
+	private Set<Right> rights = new HashSet<Right>();
+	private Date connectedSince;
+	private int serverId = 0;
+
+	public WebClient() {
+	}
+	
+	public WebClient(String sessionId, IKey key, long userId) {
+		this(sessionId, key.hashCode(), userId);
+	}
+	
+	public WebClient(String sessionId, int pageId, long userId) {
+		this.sessionId = sessionId;
+		this.pageId = pageId;
+		this.userId = userId;
+		this.connectedSince = new Date();
+	}
+
+	public String getSessionId() {
+		return sessionId;
+	}
+
+	public void setSessionId(String sessionId) {
+		this.sessionId = sessionId;
+	}
+
+	public int getPageId() {
+		return pageId;
+	}
+
+	public void setPageId(int pageId) {
+		this.pageId = pageId;
+	}
+
+	public long getUserId() {
+		return userId;
+	}
+
+	public void setUserId(long userId) {
+		this.userId = userId;
+	}
+
+	public String getUid() {
+		return uid;
+	}
+
+	public void setUid(String uid) {
+		this.uid = uid;
+	}
+	public Date getConnectedSince() {
+		return connectedSince;
+	}
+
+	public void setConnectedSince(Date connectedSince) {
+		this.connectedSince = connectedSince;
+	}
+	
+	public int getServerId() {
+		return this.serverId;
+	}
+
+	@Override
+	public int hashCode() {
+		final int prime = 31;
+		int result = 1;
+		result = prime * result + pageId;
+		result = prime * result + ((sessionId == null) ? 0 : sessionId.hashCode());
+		result = prime * result + (int) (userId ^ (userId >>> 32));
+		return result;
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if (this == obj)
+			return true;
+		if (obj == null)
+			return false;
+		if (getClass() != obj.getClass())
+			return false;
+		WebClient other = (WebClient) obj;
+		if (pageId != other.pageId)
+			return false;
+		if (sessionId == null) {
+			if (other.sessionId != null)
+				return false;
+		} else if (!sessionId.equals(other.sessionId))
+			return false;
+		if (userId != other.userId)
+			return false;
+		return true;
+	}
+
+	public Set<Right> getRights() {
+		return rights;
+	}
+
+	public boolean hasRight(Right right) {
+		return rights.contains(Right.moderator) ? true : rights.contains(right);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/app/WebSession.java b/src/web/java/org/apache/openmeetings/web/app/WebSession.java
new file mode 100644
index 0000000..c2bae0a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/app/WebSession.java
@@ -0,0 +1,510 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.app;
+
+import static java.text.DateFormat.SHORT;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_MYROOMS_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_RSS_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
+import static org.apache.openmeetings.web.app.Application.getAuthenticationStrategy;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.Application.getClientByKeys;
+import static org.apache.openmeetings.web.app.Application.getDashboardContext;
+import static org.apache.openmeetings.web.app.Application.isInvaldSession;
+import static org.apache.openmeetings.web.app.Application.removeInvalidSession;
+import static org.apache.openmeetings.web.app.Application.removeOnlineUser;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.db.dao.server.SOAPLoginDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.dao.user.IUserManager;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.server.RemoteSessionObject;
+import org.apache.openmeetings.db.entity.server.SOAPLogin;
+import org.apache.openmeetings.db.entity.server.Sessiondata;
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Right;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.db.util.TimezoneUtil;
+import org.apache.openmeetings.ldap.LdapLoginManagement;
+import org.apache.openmeetings.util.OmException;
+import org.apache.openmeetings.web.pages.SwfPage;
+import org.apache.openmeetings.web.user.dashboard.MyRoomsWidget;
+import org.apache.openmeetings.web.user.dashboard.MyRoomsWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.RssWidget;
+import org.apache.openmeetings.web.user.dashboard.RssWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.StartWidgetDescriptor;
+import org.apache.openmeetings.web.user.dashboard.WelcomeWidgetDescriptor;
+import org.apache.openmeetings.web.util.OmUrlFragment;
+import org.apache.openmeetings.web.util.UserDashboard;
+import org.apache.wicket.RestartResponseAtInterceptPageException;
+import org.apache.wicket.authentication.IAuthenticationStrategy;
+import org.apache.wicket.authroles.authentication.AbstractAuthenticatedWebSession;
+import org.apache.wicket.authroles.authorization.strategies.role.Roles;
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.string.StringValue;
+import org.apache.wicket.util.string.Strings;
+
+import ro.fortsoft.wicket.dashboard.Dashboard;
+import ro.fortsoft.wicket.dashboard.Widget;
+import ro.fortsoft.wicket.dashboard.WidgetFactory;
+import ro.fortsoft.wicket.dashboard.web.DashboardContext;
+
+public class WebSession extends AbstractAuthenticatedWebSession {
+	private static final long serialVersionUID = 1L;
+	public static int MILLIS_IN_MINUTE = 60000;
+	public static final String SECURE_HASH = "secureHash";
+	public static final String INVITATION_HASH = "invitationHash";
+	private long userId = -1;
+	private Set<Right> rights = new HashSet<User.Right>(); //TODO renew somehow on user edit !!!!
+	private long languageId = -1; //TODO renew somehow on user edit !!!!
+	private String SID = null;
+	private OmUrlFragment area = null;
+	private TimeZone tz;
+	private TimeZone browserTz;
+	public final static String ISO8601_FORMAT_STRING = "yyyy-MM-dd'T'HH:mm:ssZ";
+	private DateFormat ISO8601FORMAT = new SimpleDateFormat(ISO8601_FORMAT_STRING); //FIXME not thread safe
+	private DateFormat sdf;
+	private UserDashboard dashboard;
+	private Locale browserLocale = null;
+	private Long recordingId;
+	private Long loginError = null;
+	private String externalType;
+	public static boolean kickedByAdmin = false;
+	public final static List<String> AVAILABLE_TIMEZONES = Arrays.asList(TimeZone.getAvailableIDs());
+	public final static Set<String> AVAILABLE_TIMEZONE_SET = new LinkedHashSet<String>(AVAILABLE_TIMEZONES);
+	
+	public WebSession(Request request) {
+		super(request);
+		browserLocale = getLocale();
+	}
+
+	@Override
+	public void invalidate() {
+		removeOnlineUser(getClientByKeys(getUserId(), get().getId()));
+		super.invalidate();
+		userId = -1;
+		rights = new HashSet<User.Right>();
+		SID = null;
+		sdf = null;
+		recordingId = null;
+		externalType = null;
+		tz = null;
+		browserTz = null;
+		loginError = null;
+		browserLocale = null;
+	}
+	
+	@Override
+	public Roles getRoles() {
+		//first of all will check hashes
+		try {
+			IRequestParameters params = RequestCycle.get().getRequest().getRequestParameters();
+			StringValue secureHash = params.getParameterValue(SECURE_HASH);
+			StringValue invitationHash = params.getParameterValue(INVITATION_HASH);
+			if (!secureHash.isEmpty() || !invitationHash.isEmpty()) {
+				PageParameters pp = new PageParameters();
+				for (String p : params.getParameterNames()) {
+					List<StringValue> vals = params.getParameterValues(p);
+					if (vals != null) {
+						for (StringValue sv : vals) {
+							if (!sv.isEmpty()) {
+								pp.add(p, sv.toString());
+							}
+						}
+					}
+				}
+				if (isSignedIn()) {
+					invalidate();
+				}
+				throw new RestartResponseAtInterceptPageException(SwfPage.class, pp);
+			}
+		} catch (RestartResponseAtInterceptPageException e) {
+			throw e;
+		} catch (Exception e) {
+			//no-op, will continue to sign-in page
+		}
+		if (rights.isEmpty()) {
+			isSignedIn();
+		}
+		Roles r = new Roles();
+		for (Right right : rights) {
+			r.add(right.name());
+		}
+		return r;
+	}
+
+	@Override
+	public boolean isSignedIn() {
+		if (userId < 1) {
+			IAuthenticationStrategy strategy = getAuthenticationStrategy();
+			// get username and password from persistence store
+			String[] data = strategy.load();
+			if (data != null && data.length > 3 && data[2] != null) {
+				Long domainId = null;
+				try {
+					domainId = Long.parseLong(data[3]);
+				} catch (Exception e) {
+					//no-op
+				}
+				// try to sign in the user
+				if (!signIn(data[0], data[1], Type.valueOf(data[2]), domainId)) {
+					// the loaded credentials are wrong. erase them.
+					strategy.remove();
+				}
+			}
+		}
+		return userId > -1;
+	}
+
+	public boolean signIn(String secureHash) {
+		//FIXME code is duplicated from MainService, need to be unified
+		SOAPLoginDao soapDao = getBean(SOAPLoginDao.class);
+		SOAPLogin soapLogin = soapDao.get(secureHash);
+		if (soapLogin != null && !soapLogin.getUsed()) { //add code for  || (soapLogin.getAllowSameURLMultipleTimes())
+			SessiondataDao sessionDao = getBean(SessiondataDao.class);
+			Sessiondata sd = sessionDao.getSessionByHash(soapLogin.getSessionHash());
+			if (sd != null && sd.getSessionXml() != null) {
+				RemoteSessionObject remoteUser = RemoteSessionObject.fromXml(sd.getSessionXml());
+				if (remoteUser != null && !Strings.isEmpty(remoteUser.getExternalUserId())) {
+					UserDao userDao = getBean(UserDao.class);
+					User user = userDao.getExternalUser(remoteUser.getExternalUserId(), remoteUser.getExternalUserType());
+					if (user == null) {
+						user = userDao.getNewUserInstance(null);
+						user.setFirstname(remoteUser.getFirstname());
+						user.setLastname(remoteUser.getLastname());
+						user.setLogin(remoteUser.getUsername()); //FIXME check if login UNIQUE
+						user.setExternalUserId(remoteUser.getExternalUserId());
+						user.setExternalUserType(remoteUser.getExternalUserType());
+						user.getRights().add(Right.Room);
+						user.getAdresses().setEmail(remoteUser.getEmail());
+						user.setPictureuri(remoteUser.getPictureUrl());
+					} else {
+						user.setFirstname(remoteUser.getFirstname());
+						user.setLastname(remoteUser.getLastname());
+						user.setPictureuri(remoteUser.getPictureUrl());
+					}
+					user = userDao.update(user, null);
+
+					soapLogin.setUsed(true);
+					soapLogin.setUseDate(new Date());
+					//soapLogin.setClientURL(clientURL); //FIXME
+					soapDao.update(soapLogin);
+
+					sessionDao.updateUser(SID, user.getUser_id());
+					setUser(user);
+					recordingId = soapLogin.getRoomRecordingId();
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+	
+	private void setUser(User u) {
+		userId = u.getUser_id();
+		rights = Collections.unmodifiableSet(u.getRights());
+		languageId = u.getLanguage_id();
+		externalType = u.getExternalUserType();
+		tz = getBean(TimezoneUtil.class).getTimeZone(u);
+		ISO8601FORMAT.setTimeZone(tz);
+		setLocale(languageId == 3 ? Locale.GERMANY : LabelDao.languages.get(languageId)); //FIXME hack
+		//FIXMW locale need to be set by User language first
+		sdf = DateFormat.getDateTimeInstance(SHORT, SHORT, getLocale());
+		if (null == getId()) {
+			bind();
+		}
+	}
+	
+	public boolean signIn(String login, String password, Type type, Long domainId) {
+		try {
+			User u = null;
+			switch (type) {
+				case ldap:
+					u = getBean(LdapLoginManagement.class).login(login, password, domainId);
+					break;
+				case user:
+					/* we will allow login against internal DB in case user 'guess' LDAP password */
+					u = getBean(UserDao.class).login(login, password);
+					break;
+				case oauth:
+					// we did all the checks at this stage, just set the user
+					u = getBean(UserDao.class).getByLogin(login, Type.oauth, domainId);
+					break;
+				default:
+					throw new OmException(-1L);
+			}
+			if (u == null) {
+				return false;
+			}
+			signIn(u);
+			return true;
+		} catch (OmException oe) {
+			loginError = oe.getCode() == null ? -1L : oe.getCode();
+		}
+		return false;
+	}
+	
+	public boolean signIn(User u) {
+		Sessiondata sessData = getBean(SessiondataDao.class).startsession();
+		SID = sessData.getSession_id();
+		if (u == null) {
+			return false;
+		}
+		setUser(u);
+		return true;
+	}
+	
+	public Long getLoginError() {
+		return loginError;
+	}
+	
+	public static WebSession get() {
+		return (WebSession)AbstractAuthenticatedWebSession.get();
+	}
+	
+	public void setLanguage(long languageId) {
+		this.languageId = languageId;
+	}
+	
+	public static long getLanguage() {
+		checkIsInvalid();
+		WebSession session = get();
+		if (session.languageId < 0) {
+			if (session.isSignedIn()) {
+				session.languageId = getBean(UserDao.class).get(session.userId).getLanguage_id();
+			} else {
+				session.languageId = getBean(ConfigurationDao.class).getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, "1");
+			}
+		}
+		return session.languageId;
+	}
+	
+	public String getValidatedSid() {
+		SessiondataDao sessionDao = getBean(SessiondataDao.class);
+		Long _userId = sessionDao.checkSession(SID);
+		if (_userId == null || userId != _userId) {
+			Sessiondata sessionData = sessionDao.getSessionByHash(SID);
+			if (sessionData == null) {
+				sessionData = sessionDao.startsession();
+			}
+			if (!sessionDao.updateUser(sessionData.getSession_id(), userId, false, languageId)) {
+				//something bad, force user to re-login
+				invalidate();
+			} else {
+				SID = sessionData.getSession_id();
+			}
+		}
+		return SID;
+	}
+	
+	public static String getSid() {
+		return get().getValidatedSid();
+	}
+
+	public static long getUserId() {
+		checkIsInvalid();
+		return get().userId;
+	}
+	
+	public static Long getRecordingId() {
+		return get().recordingId;
+	}
+	
+	public static String getExternalType() {
+		return get().externalType;
+	}
+	
+	public static TimeZone getUserTimeZone() {
+		return get().tz;
+	}
+
+	public static Calendar getCalendar() {
+		return Calendar.getInstance(get().tz);
+	}
+
+	public static Calendar getClientCalendar() {
+		return Calendar.getInstance(getClientTimeZone());
+	}
+
+	public static DateFormat getIsoDateFormat() {
+		return get().ISO8601FORMAT;
+	}
+	
+	public static DateFormat getDateFormat() {
+		return get().sdf;
+	}
+	
+	public static Set<Right> getRights() {
+		checkIsInvalid();
+		return get().rights;
+	}
+	
+	public static void setKickedByAdmin(boolean kicked) {
+		kickedByAdmin = kicked;
+	}
+	
+	public boolean isKickedByAdmin() {
+		return kickedByAdmin;
+	}
+
+	public OmUrlFragment getArea() {
+		return area;
+	}
+
+	public void setArea(OmUrlFragment area) {
+		this.area = area;
+	}
+
+	
+	public static Dashboard getDashboard() {
+		Dashboard d = get().dashboard;
+		if (d == null) {
+			get().initDashboard();
+			d = get().dashboard;
+		}
+		return d;
+	}
+	
+	public Locale getBrowserLocale(){
+		return browserLocale;
+	}
+
+	public Long getLanguageByBrowserLocale() {
+		return getBean(IUserManager.class).getLanguage(getBrowserLocale());
+	}
+
+	public State getCountryByBrowserLocale() {
+		return getBean(IUserManager.class).getCountry(getBrowserLocale());
+	}
+
+	public String getClientTZCode() {
+		TimeZone _zone = browserTz;
+		if (browserTz == null) {
+			try {
+				browserTz = getClientInfo().getProperties().getTimeZone();
+				if (!AVAILABLE_TIMEZONE_SET.contains(browserTz.getID())) {
+					for (String availableID : AVAILABLE_TIMEZONES) {
+						TimeZone zone = TimeZone.getTimeZone(availableID);
+						if (zone.hasSameRules(browserTz)) {
+							browserTz = zone;
+							break;
+						}
+					}
+				}
+				_zone = browserTz;
+			} catch (Exception e) {
+				_zone = Calendar.getInstance(getBrowserLocale()).getTimeZone();
+			}
+		}
+		return _zone == null ? null : _zone.getID();
+	}
+	
+	public static TimeZone getClientTimeZone() {
+		String tzCode = get().getClientTZCode();
+		return tzCode == null ? null : TimeZone.getTimeZone(tzCode);
+	}
+	
+	private void initDashboard() {
+		DashboardContext dashboardContext = getDashboardContext();
+		dashboard = (UserDashboard)dashboardContext.getDashboardPersister().load();
+		boolean existMyRoomWidget = false, existRssWidget = false;
+		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+		boolean showMyRoomConfValue = 1 == cfgDao.getConfValue(CONFIG_DASHBOARD_SHOW_MYROOMS_KEY, Integer.class, "0");
+		boolean showRssConfValue = 1 == cfgDao.getConfValue(CONFIG_DASHBOARD_SHOW_RSS_KEY, Integer.class, "0");
+		boolean save = false;
+
+		WidgetFactory widgetFactory = dashboardContext.getWidgetFactory();
+
+		if (dashboard == null) {
+			dashboard = new UserDashboard("default", "Default");
+
+			dashboard.addWidget(widgetFactory.createWidget(new WelcomeWidgetDescriptor()));
+			dashboard.addWidget(widgetFactory.createWidget(new StartWidgetDescriptor()));
+			if (showMyRoomConfValue) {
+				dashboard.addWidget(widgetFactory.createWidget(new MyRoomsWidgetDescriptor()));
+			}
+			if (showRssConfValue) {
+				dashboard.addWidget(widgetFactory.createWidget(new RssWidgetDescriptor()));
+			}
+			save = true;
+		} else {
+			for (Iterator<Widget> iter = dashboard.getWidgets().iterator(); iter.hasNext();) {
+				Widget w = iter.next();
+				// PrivateRoomWidget is stored in the profile of user. Now, Show_MyRooms_key is disable.
+				if (w.getClass().equals(MyRoomsWidget.class)) {
+					existMyRoomWidget = true;
+					if (!showMyRoomConfValue) {
+						iter.remove();
+					}
+				} else if ((w.getClass().equals(RssWidget.class))) {
+					// RssWidget is stored in the profile of user. Now, Show_RSS_Key is disable.
+					existRssWidget = true;
+					if (!showRssConfValue) {
+						iter.remove();
+					}
+				} else {
+					w.init();
+				}
+			}
+			// PrivateRoomWidget was deleted from profile and now it's enabled. It's added again to dashboard.
+			if (!existMyRoomWidget && showMyRoomConfValue && !dashboard.isWidgetMyRoomsDeleted()) {
+				dashboard.addWidget(widgetFactory.createWidget(new MyRoomsWidgetDescriptor()));
+				save = true;
+			}
+			// RssWidget was deleted from profile and now it's enabled. It's added again to dashboard.
+			if (!existRssWidget && showRssConfValue && !dashboard.isWidgetRssDeleted()) {
+				dashboard.addWidget(widgetFactory.createWidget(new RssWidgetDescriptor()));
+				save = true;
+			}
+		}
+		if (save) {
+			dashboardContext.getDashboardPersister().save(dashboard);
+		}
+	}
+	
+	private static void checkIsInvalid() {
+		if (isInvaldSession(get().getId())) {
+			setKickedByAdmin(true);
+			removeInvalidSession(get().getId());
+			org.apache.wicket.Session session = (org.apache.wicket.Session)get();
+			session.invalidate();
+			Application.get().restartResponseAtSignInPage();
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/AddFolderDialog.html b/src/web/java/org/apache/openmeetings/web/common/AddFolderDialog.html
new file mode 100644
index 0000000..5f9cdd0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/AddFolderDialog.html
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form wicket:id="form">
+		<span style="padding-left: 20px; padding-right: 20px;"><wicket:message key="572"/></span><input type="text" wicket:id="title"/>
+		<div wicket:id="feedback"></div>
+		<input type="submit" wicket:id="submit" class="invisible-form-component"/>
+	</form>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/common/AddFolderDialog.java b/src/web/java/org/apache/openmeetings/web/common/AddFolderDialog.java
new file mode 100644
index 0000000..b43611f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/AddFolderDialog.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.panel.FeedbackPanel;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+public abstract class AddFolderDialog extends AbstractFormDialog<String> {
+	private static final long serialVersionUID = 1L;
+	private final DialogButton add = new DialogButton("add", Application.getString(1261));
+	private final DialogButton cancel = new DialogButton("cancel", Application.getString(219));
+	private final Form<String> form;
+	private final FeedbackPanel feedback = new FeedbackPanel("feedback");
+	private final String name;
+	private RequiredTextField<String> title;
+
+	public AddFolderDialog(String id) {
+		this(id, null);
+	}
+	
+	public AddFolderDialog(String id, String name) {
+		super(id, Application.getString(1260), Model.of(name));
+		this.name = name;
+		form = new Form<String>("form", getModel()) {
+			private static final long serialVersionUID = 1L;
+			{
+				add(title = new RequiredTextField<String>("title", getModel()));
+				title.setLabel(Model.of(Application.getString(572)));
+				add(feedback.setOutputMarkupId(true));
+				add(new AjaxButton("submit") { //FAKE button so "submit-on-enter" works as expected
+					private static final long serialVersionUID = -3612671587183668912L;
+
+					@Override
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+						AddFolderDialog.this.onSubmit(target);
+					}
+					
+					@Override
+					protected void onError(AjaxRequestTarget target, Form<?> form) {
+						AddFolderDialog.this.onError(target);
+					}
+				});
+			}
+		};
+		add(form);
+	}
+
+	@Override
+	protected void onOpen(IPartialPageRequestHandler target) {
+		super.onOpen(target);
+		
+		setModelObject(name);
+		getFeedbackMessages().clear();
+	}
+
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		close(target, getSubmitButton());
+	}
+	
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(add, cancel);
+	}
+	
+	@Override
+	protected DialogButton getSubmitButton() {
+		return add;
+	}
+
+	@Override
+	public Form<String> getForm() {
+		return form;
+	}
+
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/BasePanel.java b/src/web/java/org/apache/openmeetings/web/common/BasePanel.java
new file mode 100644
index 0000000..c5465c4
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/BasePanel.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.openmeetings.web.util.FormatHelper;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
+
+public abstract class BasePanel extends Panel {
+	private static final long serialVersionUID = 1L;
+
+	public BasePanel(String id) {
+		super(id);
+		setOutputMarkupId(true);
+	}
+
+	public BasePanel(String id, IModel<?> model) {
+		super(id, model);
+		setOutputMarkupId(true);
+	}
+
+	protected MainPage getMainPage() {
+		return (MainPage)super.getPage();
+	}
+	
+	protected boolean isRtl() { //TODO unify, remove copy/paste
+		return FormatHelper.isRtlLanguage(WebSession.get().getLocale().toLanguageTag());
+	}
+	
+	/**
+	 * Overwrite this method to execute Java code after Panel is loaded by the
+	 * {@link MenuPanel}
+	 * 
+	 * @param target
+	 */
+	public void onMenuPanelLoad(IPartialPageRequestHandler target) {
+	}
+
+	/**
+	 * This method should be overridden to perform necessary cleanup: remove timers etc.
+	 * 
+	 * @param target
+	 */
+	public void cleanup(IPartialPageRequestHandler target) {
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/ComunityUserForm.html b/src/web/java/org/apache/openmeetings/web/common/ComunityUserForm.html
new file mode 100644
index 0000000..92f5967
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ComunityUserForm.html
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div class="formelementradiobox">
+		<div wicket:id="community_settings">
+			<div>
+				<input wicket:id="everybody" type="radio" /><label style="width: 250px" wicket:for="everybody"><wicket:message key="1160"/></label>
+				<div class="clear"></div>
+			</div>
+			<div>
+				<input wicket:id="contact" type="radio" /><label style="width: 250px" wicket:for="contact"><wicket:message key="1168"/></label>
+				<div class="clear"></div>
+			</div>
+			<div>
+				<input wicket:id="nobody" type="radio" /><label style="width: 250px" wicket:for="nobody"><wicket:message key="1169"/></label>
+				<div class="clear"></div>
+			</div>
+		</div>
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="1162" /></label>
+		<textarea wicket:id="userOffers" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="1163" /></label>
+		<textarea wicket:id="userSearchs" />
+	</div>
+</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/common/ComunityUserForm.java b/src/web/java/org/apache/openmeetings/web/common/ComunityUserForm.java
new file mode 100644
index 0000000..b62a934
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ComunityUserForm.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.Radio;
+import org.apache.wicket.markup.html.form.RadioGroup;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
+import org.apache.wicket.markup.html.panel.PanelMarkupSourcingStrategy;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+public class ComunityUserForm extends Form<User> {
+	private static final long serialVersionUID = 1L;
+
+	public ComunityUserForm(String id, IModel<User> model) {
+		super(id, model);
+
+		RadioGroup<Long> rg = new RadioGroup<Long>("community_settings", new IModel<Long>() {
+			private static final long serialVersionUID = 1L;
+
+			public Long getObject() {
+				User u = ComunityUserForm.this.getModelObject();
+				if (u.getShowContactData()) {
+					return 1L;
+				} else if (u.getShowContactDataToContacts()) {
+					return 2L;
+				}
+				return 3L;
+			}
+
+			public void setObject(Long choice) {
+				User u = ComunityUserForm.this.getModelObject();
+				if (choice.equals(1L)) {
+					u.setShowContactData(true);
+					u.setShowContactDataToContacts(false);
+				} else if (choice.equals(2L)) {
+					u.setShowContactData(false);
+					u.setShowContactDataToContacts(true);
+				} else {
+					u.setShowContactData(false);
+					u.setShowContactDataToContacts(false);
+				}
+			}
+
+			public void detach() {
+			}
+		});
+		add(rg.add(new Radio<Long>("everybody", Model.of(1L)), new Radio<Long>("contact", Model.of(2L))
+			, new Radio<Long>("nobody", Model.of(3L))).setOutputMarkupId(true).setRenderBodyOnly(false)
+			);
+
+		add(new TextArea<String>("userOffers"));
+		add(new TextArea<String>("userSearchs"));
+	}
+	
+	@Override
+	protected IMarkupSourcingStrategy newMarkupSourcingStrategy() {
+		return new PanelMarkupSourcingStrategy(false);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.html b/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.html
new file mode 100644
index 0000000..722a21b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.html
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:border>
+	<wicket:body/>
+	<form wicket:id="form" style="display: inline;"><div wicket:id="dialog"></div></form>
+</wicket:border>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java b/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java
new file mode 100644
index 0000000..98a6639
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java
@@ -0,0 +1,133 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.common;

+

+import org.apache.wicket.ajax.AjaxEventBehavior;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.markup.html.border.Border;

+import org.apache.wicket.markup.html.form.Form;

+import org.apache.wicket.model.IModel;

+import org.apache.wicket.model.Model;

+

+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;

+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;

+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;

+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;

+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageFormDialog;

+

+public abstract class ConfirmableAjaxBorder extends Border {

+	private static final long serialVersionUID = 1L;

+	private final Form<?> form = new Form<>("form");

+	private final Form<?> userForm;

+	private final IModel<String> title;

+	private final IModel<String> message;

+

+	public ConfirmableAjaxBorder(String id, String title, String message) {

+		this(id, Model.of(title), Model.of(message), null);

+	}

+	

+	public ConfirmableAjaxBorder(String id, String title, String message, Form<?> form) {

+		this(id, Model.of(title), Model.of(message), form);

+	}

+	

+	public ConfirmableAjaxBorder(String id, IModel<String> title, IModel<String> message, Form<?> form) {

+		super(id, message);

+		this.title = title;

+		this.message = message;

+		this.userForm = form;

+		setOutputMarkupId(true);

+	}

+

+	@Override

+	protected void onInitialize() {

+		super.onInitialize();

+		final AbstractFormDialog<?> dialog = newFormDialog("dialog", title, message);

+		add(new AjaxEventBehavior("click") {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void onEvent(AjaxRequestTarget target) {

+				dialog.open(target);

+			}

+		});

+		addToBorder(form.add(dialog));

+	}

+

+	/**

+	 * Triggered when the form is submitted, but the validation failed

+	 *

+	 * @param target the {@link AjaxRequestTarget}

+	 * @param form the {@link Form}

+	 */

+	protected void onError(AjaxRequestTarget target, Form<?> form) {

+	}

+

+	/**

+	 * Triggered when the form is submitted, and the validation succeed

+	 *

+	 * @param target the {@link AjaxRequestTarget}

+	 * @param form the {@link Form}

+	 */

+	protected abstract void onSubmit(AjaxRequestTarget target, Form<?> form);

+

+	// Factories //

+

+	/**

+	 * Create the dialog instance<br/>

+	 * <b>Warning:</b> to be overridden with care!

+	 *

+	 * @param id the markupId

+	 * @param title the title of the dialog

+	 * @param message the message to be displayed

+	 * @return the dialog instance

+	 */

+	protected AbstractFormDialog<?> newFormDialog(String id, IModel<String> title, IModel<String> message) {

+		return new MessageFormDialog(id, title, message, DialogButtons.OK_CANCEL, DialogIcon.WARN) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected DialogButton getSubmitButton() {

+				return this.findButton(OK);

+			}

+

+			@Override

+			public Form<?> getForm() {

+				return userForm == null ? form : userForm;

+			}

+

+			@Override

+			protected void onError(AjaxRequestTarget target) {

+				super.close(target, null); // closes the dialog on error.

+				ConfirmableAjaxBorder.this.onError(target, this.getForm());

+			}

+

+			@Override

+			protected void onSubmit(AjaxRequestTarget target) {

+				ConfirmableAjaxBorder.this.onSubmit(target, this.getForm());

+			}

+		};

+	}

+	

+	@Override

+	protected void onDetach() {

+		super.onDetach();

+		title.detach();

+		message.detach();

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/common/ErrorMessagePanel.html b/src/web/java/org/apache/openmeetings/web/common/ErrorMessagePanel.html
new file mode 100644
index 0000000..c25dd0e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ErrorMessagePanel.html
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div class="message error">
+		<h3 wicket:id="msg"></h3>
+		<pre wicket:id="err"></pre>
+	</div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/common/ErrorMessagePanel.java b/src/web/java/org/apache/openmeetings/web/common/ErrorMessagePanel.java
new file mode 100644
index 0000000..f5c1c4b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ErrorMessagePanel.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+
+import java.io.PrintWriter;
+
+import org.apache.commons.io.output.StringBuilderWriter;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class ErrorMessagePanel extends Panel {
+	private static final Logger log = Red5LoggerFactory.getLogger(ErrorMessagePanel.class, webAppRootKey);
+	private static final long serialVersionUID = 1L;
+
+	public ErrorMessagePanel(String id, String msg, Throwable err) {
+		super(id);
+		
+		log.error(msg, err);
+		add(new Label("msg", msg));
+		StringBuilderWriter sw = new StringBuilderWriter();
+		err.printStackTrace(new PrintWriter(sw));
+		add(new Label("err", sw.toString()));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/FormSaveRefreshPanel.html b/src/web/java/org/apache/openmeetings/web/common/FormSaveRefreshPanel.html
new file mode 100644
index 0000000..b269c55
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/FormSaveRefreshPanel.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div class="formSaveBar ui-widget-header">
+			<div class="formSaveButton">
+				<input type="submit" value="" wicket:id="ajax-save-button" wicket:message="title:144" />
+			</div>
+			<div class="formRefreshButton">
+				<input type="submit" value="" wicket:id="ajax-refresh-button" wicket:message="title:156" />
+			</div>
+			<wicket:child/>
+		</div>
+		<div wicket:id="feedback" class="adminFormsFeedbackPanel"></div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/common/FormSaveRefreshPanel.java b/src/web/java/org/apache/openmeetings/web/common/FormSaveRefreshPanel.java
new file mode 100644
index 0000000..0a7db65
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/FormSaveRefreshPanel.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.markup.html.form.Form;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+public abstract class FormSaveRefreshPanel<T> extends BasePanel {
+	private static final long serialVersionUID = 1L;
+	protected final KendoFeedbackPanel feedback;
+	
+	public FormSaveRefreshPanel(String id, Form<T> form) {
+		super(id);
+		setOutputMarkupId(true);
+
+		feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+		add(feedback.setOutputMarkupId(true));
+
+		// add a save button that can be used to submit the form via ajax
+		add(new AjaxButton("ajax-save-button", form) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so that it is hidden
+				target.add(feedback);
+				onSaveSubmit(target, form);
+			}
+
+			@Override
+			protected void onError(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so errors are shown
+				target.add(feedback);
+				onSaveError(target, form);
+			}
+		});
+
+		// add a refresh button that can be used to submit the form via ajax
+		add(new AjaxButton("ajax-refresh-button", form) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so that it is hidden
+				target.add(feedback);
+				hideNewRecord();
+				onRefreshSubmit(target, form);
+			}
+
+			@Override
+			protected void onError(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so errors are shown
+				target.add(feedback);
+				hideNewRecord();
+				onRefreshError(target, form);
+			}
+		});
+
+	}
+	/**
+	 * Hide the new record text
+	 */
+	public void hideNewRecord() {
+		// for admin only, will be implemented in admin
+	}
+	
+	protected abstract void onSaveSubmit(AjaxRequestTarget target, Form<?> form);
+	protected abstract void onSaveError(AjaxRequestTarget target, Form<?> form);
+
+	protected abstract void onRefreshSubmit(AjaxRequestTarget target, Form<?> form);
+	protected abstract void onRefreshError(AjaxRequestTarget target, Form<?> form);
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/GeneralUserForm.html b/src/web/java/org/apache/openmeetings/web/common/GeneralUserForm.html
new file mode 100644
index 0000000..10a42d9
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/GeneralUserForm.html
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div class="formelement">
+		<label><wicket:message key="133" /></label><input type="password" wicket:id="password" />
+	</div>
+	<wicket:child/>
+	<div class="formelement">
+		<label><wicket:message key="135" /></label><select
+			wicket:id="salutation" style="width: 60px;" /><input type="text"
+			wicket:id="firstname" style="width: 216px;" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="136" /></label><input type="text" wicket:id="lastname" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="1143" /></label><select wicket:id="timeZoneId" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="111" /></label><select wicket:id="language_id" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="137" /></label><input type="text" wicket:id="adresses.email" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="607" /></label><input type="text" wicket:id="adresses.phone" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="1503" /></label><input class="formcheckbox" type="checkbox" wicket:id="sendSMS" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="138" /></label><input type="text" class="date time picker" wicket:id="age" style="width: 258px;" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="139" /></label><input type="text"
+			wicket:id="adresses.street" style="width: 244px;" /> <input
+			type="text" wicket:id="adresses.additionalname" style="width: 30px;" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="140" /></label><input type="text"
+			wicket:id="adresses.zip" style="width: 60px;" /> <input type="text"
+			wicket:id="adresses.town" style="width: 214px;" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="141" /></label><select wicket:id="adresses.states" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="142" /></label>
+		<textarea wicket:id="adresses.comment" />
+	</div>
+	<div class="formelement">
+		<label><wicket:message key="161" /></label><input type="hidden" class="input" wicket:id="organisation_users" style="max-height: 80px" />
+	</div>
+</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/common/GeneralUserForm.java b/src/web/java/org/apache/openmeetings/web/common/GeneralUserForm.java
new file mode 100644
index 0000000..784a662
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/GeneralUserForm.java
@@ -0,0 +1,221 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import static org.apache.openmeetings.db.util.UserHelper.getMinPasswdLength;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.AVAILABLE_TIMEZONES;
+import static org.apache.openmeetings.web.app.WebSession.getLanguage;
+import static org.apache.wicket.validation.validator.StringValidator.minimumLength;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.SalutationDao;
+import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.Salutation;
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.util.CalendarHelper;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
+import org.apache.wicket.markup.html.panel.PanelMarkupSourcingStrategy;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.util.string.Strings;
+import org.threeten.bp.LocalDate;
+import org.wicketstuff.select2.Response;
+import org.wicketstuff.select2.Select2MultiChoice;
+import org.wicketstuff.select2.TextChoiceProvider;
+
+import com.googlecode.wicket.kendo.ui.form.datetime.local.AjaxDatePicker;
+import com.googlecode.wicket.kendo.ui.resource.KendoGlobalizeResourceReference;
+
+public class GeneralUserForm extends Form<User> {
+	private static final long serialVersionUID = 1L;
+	private Salutation salutation;
+	private LocalDate age;
+	private PasswordTextField passwordField;
+	private RequiredTextField<String> email;
+
+	public GeneralUserForm(String id, IModel<User> model, boolean isAdminForm) {
+		super(id, model);
+
+		//TODO should throw exception if non admin User edit somebody else (or make all fields read-only)
+		add(passwordField = new PasswordTextField("password", new Model<String>()));
+		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+		passwordField.setRequired(false).add(minimumLength(getMinPasswdLength(cfgDao)));
+
+		updateModelObject(getModelObject());
+		SalutationDao salutDao = getBean(SalutationDao.class);
+		add(new DropDownChoice<Salutation>("salutation"
+				, new PropertyModel<Salutation>(this, "salutation")
+				, salutDao.getUserSalutations(getLanguage())
+				, new ChoiceRenderer<Salutation>() {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					public Object getDisplayValue(Salutation object) {
+						return getString("" + object.getFieldvalues_id());
+					}
+
+					@Override
+					public String getIdValue(Salutation object, int index) {
+						return "" + object.getSalutations_id();
+					}
+				})
+			.add(new AjaxFormComponentUpdatingBehavior("change") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					GeneralUserForm.this.getModelObject().setSalutations_id(salutation.getSalutations_id());
+				}
+			}));
+		add(new TextField<String>("firstname"));
+		add(new TextField<String>("lastname"));
+		
+		add(new DropDownChoice<String>("timeZoneId", AVAILABLE_TIMEZONES));
+
+		add(new LanguageDropDown("language_id"));
+
+		add(email = new RequiredTextField<String>("adresses.email"));
+		email.setLabel(Model.of(Application.getString(137)));
+		email.add(RfcCompliantEmailAddressValidator.getInstance());
+		add(new TextField<String>("adresses.phone"));
+		add(new CheckBox("sendSMS"));
+		add(new AjaxDatePicker("age", new PropertyModel<LocalDate>(this, "age"), WebSession.get().getLocale()) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onValueChanged(IPartialPageRequestHandler target) {
+				User u = GeneralUserForm.this.getModelObject();
+				u.setAge(CalendarHelper.getDate(age, u.getTimeZoneId()));
+			}
+		});
+		add(new TextField<String>("adresses.street"));
+		add(new TextField<String>("adresses.additionalname"));
+		add(new TextField<String>("adresses.zip"));
+		add(new TextField<String>("adresses.town"));
+		add(new DropDownChoice<State>("adresses.states", getBean(StateDao.class).getStates(), new ChoiceRenderer<State>("name", "state_id")));
+		add(new TextArea<String>("adresses.comment"));
+
+		final List<Organisation_Users> orgUsers;
+		if (isAdminForm) {
+			List<Organisation> orgList = getBean(OrganisationDao.class).get(0, Integer.MAX_VALUE);
+			orgUsers = new ArrayList<Organisation_Users>(orgList.size());
+			for (Organisation org : orgList) {
+				orgUsers.add(new Organisation_Users(org));
+			}
+		} else {
+			orgUsers = getModelObject().getOrganisation_users();
+		}
+		add(new Select2MultiChoice<Organisation_Users>("organisation_users", null, new TextChoiceProvider<Organisation_Users>() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected String getDisplayText(Organisation_Users choice) {
+				return choice.getOrganisation().getName();
+			}
+
+			@Override
+			protected Object getId(Organisation_Users choice) {
+				return choice.getOrganisation().getOrganisation_id();
+			}
+
+			@Override
+			public void query(String term, int page, Response<Organisation_Users> response) {
+				for (Organisation_Users ou : orgUsers) {
+					if (Strings.isEmpty(term) || (!Strings.isEmpty(term) && ou.getOrganisation().getName().contains(term))) {
+						response.add(ou);
+					}
+				}
+			}
+
+			@Override
+			public Collection<Organisation_Users> toChoices(Collection<String> _ids) {
+				List<Long> ids = new ArrayList<Long>();
+				for (String id : _ids) {
+					ids.add(Long.parseLong(id));
+				}
+				List<Organisation_Users> list = new ArrayList<Organisation_Users>();
+				for (Organisation o : getBean(OrganisationDao.class).get(ids)) {
+					list.add(new Organisation_Users(o));
+				}
+				return list;
+			}
+		}).setEnabled(isAdminForm));
+	}
+
+	public void updateModelObject(User u) {
+		salutation = getBean(SalutationDao.class).get(u.getSalutations_id(), getLanguage());
+		age = CalendarHelper.getDate(u.getAge(), u.getTimeZoneId());
+	}
+	
+	@Override
+	protected void onValidate() {
+		User u = getModelObject();
+		if(!getBean(UserDao.class).checkEmail(email.getConvertedInput(), u.getType(), u.getDomainId(), u.getUser_id())) {
+			error(Application.getString(1000));
+		}
+		super.onValidate();
+	}
+	
+	public PasswordTextField getPasswordField() {
+		return passwordField;
+	}
+
+	
+	public String getEmail() {
+		return email.getValue();
+	}
+	
+	@Override
+	protected IMarkupSourcingStrategy newMarkupSourcingStrategy() {
+		return new PanelMarkupSourcingStrategy(false);
+	}
+
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(JavaScriptHeaderItem.forReference(new KendoGlobalizeResourceReference(WebSession.get().getLocale())));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/HeaderPanel.html b/src/web/java/org/apache/openmeetings/web/common/HeaderPanel.html
new file mode 100644
index 0000000..3f72418
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/HeaderPanel.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+	<wicket:panel>

+		<div id="header">

+			<span wicket:id="appName"></span>

+		</div>

+	</wicket:panel>

+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/common/HeaderPanel.java b/src/web/java/org/apache/openmeetings/web/common/HeaderPanel.java
new file mode 100644
index 0000000..45929f2
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/HeaderPanel.java
@@ -0,0 +1,31 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.common;

+

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.util.string.Strings;

+

+public class HeaderPanel extends BasePanel {

+	private static final long serialVersionUID = 9020842845946685193L;

+

+	public HeaderPanel(String id, String appName) {

+		super(id);

+		add(new Label("appName", Strings.isEmpty(appName) ? "&nbsp;" : appName).setEscapeModelStrings(false));

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/common/LanguageDropDown.java b/src/web/java/org/apache/openmeetings/web/common/LanguageDropDown.java
new file mode 100644
index 0000000..1ba8748
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/LanguageDropDown.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.model.IModel;
+
+public class LanguageDropDown extends DropDownChoice<Long> {
+	private static final long serialVersionUID = 1L;
+	private final List<Long> languages = new ArrayList<Long>();
+
+	public LanguageDropDown(String id, IModel<Long> model) {
+		super(id, model, new ArrayList<Long>());
+		internalInit();
+	}
+	
+	public LanguageDropDown(String id) {
+		super(id);
+		internalInit();
+	}
+	
+	private void internalInit() {
+		for (Map.Entry<Long, Locale> e : LabelDao.languages.entrySet()) {
+			languages.add(e.getKey());
+		}
+		setChoices(languages);
+		setChoiceRenderer(new ChoiceRenderer<Long>() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public Object getDisplayValue(Long object) {
+				return LabelDao.languages.get(object).getDisplayName();
+			}
+
+			@Override
+			public String getIdValue(Long object, int index) {
+				return "" + object;
+			}
+		});
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/MenuPanel.html b/src/web/java/org/apache/openmeetings/web/common/MenuPanel.html
new file mode 100644
index 0000000..6e6e095
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/MenuPanel.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+	<wicket:head>

+		<link media="screen" type="text/css" rel="stylesheet" href="css/jquery.ui.menubar.css"/>

+	</wicket:head>

+	<wicket:panel>

+		<script type="text/javascript" src="js/jquery.ui.menubar.js"></script>

+		<script type="text/javascript">

+			$(function() {

+				$("#jMenu").menubar({

+					autoExpand: true

+					, menuIcon: true

+					, buttons: true

+					, position: {

+						within: $("#menu").add(window).first()

+					}

+					//, select: select

+				});

+			});

+		</script>

+		<ul id="jMenu">

+			<li wicket:id="mainItem">

+				<a class="fNiv" href="#" onclick="return false;"><span wicket:id="label"></span></a>

+				<ul wicket:enclosure="childItem">

+					<li wicket:id="childItem"><a>

+						<span class="menuName" wicket:id="name"></span><br />

+						<span class="menuDesc" wicket:id="description"></span>

+					</a></li>

+				</ul>

+			</li>

+		</ul>

+	</wicket:panel>

+</html>

diff --git a/src/web/java/org/apache/openmeetings/web/common/MenuPanel.java b/src/web/java/org/apache/openmeetings/web/common/MenuPanel.java
new file mode 100644
index 0000000..7a11487
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/MenuPanel.java
@@ -0,0 +1,93 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.common;

+

+import org.apache.openmeetings.db.dao.basic.NavigationDao;

+import org.apache.openmeetings.db.entity.basic.Naviglobal;

+import org.apache.openmeetings.db.entity.basic.Navimain;

+import org.apache.openmeetings.util.AuthLevelUtil;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.openmeetings.web.app.WebSession;

+import org.apache.openmeetings.web.pages.MainPage;

+import org.apache.openmeetings.web.util.OmUrlFragment;

+import org.apache.openmeetings.web.util.OmUrlFragment.MenuActions;

+import org.apache.openmeetings.web.util.OmUrlFragment.MenuParams;

+import org.apache.wicket.ajax.AjaxEventBehavior;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.markup.head.CssHeaderItem;

+import org.apache.wicket.markup.head.IHeaderResponse;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.html.list.ListItem;

+import org.apache.wicket.markup.html.list.ListView;

+

+/**

+ * Loads the menu items into the main area

+ * 

+ * @author sebawagner

+ *

+ */

+public class MenuPanel extends BasePanel {

+	private static final long serialVersionUID = 1L;

+

+	public MenuPanel(String id) {

+		super(id);

+		setMarkupId(id);

+		

+		final NavigationDao man = Application.getBean(NavigationDao.class);

+		add(new ListView<Naviglobal>("mainItem", man.getMainMenu(AuthLevelUtil.hasAdminLevel(WebSession.getRights()), WebSession.getUserId())) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void populateItem(ListItem<Naviglobal> item) {

+				Naviglobal gl = item.getModelObject();

+				item.add(new Label("label", getString("" + gl.getFieldvalues_id())).setRenderBodyOnly(true));

+				

+				item.add(new ListView<Navimain>("childItem", gl.getMainnavi()) {

+					private static final long serialVersionUID = 1L;

+

+					@Override

+					protected void populateItem(ListItem<Navimain> item) {

+						Navimain m = item.getModelObject();

+						final String name = getString("" + m.getFieldvalues_id());

+						final String desc = getString("" + m.getTooltip_fieldvalues_id());

+						final MenuActions action = MenuActions.valueOf(m.getAction());

+						final MenuParams params = m.getParams() != null ? MenuParams.valueOf(m.getParams()) : MenuParams.publicTabButton;

+						item.add(new Label("name", name), new Label("description", desc));

+						item.add(new AjaxEventBehavior("click") {

+							private static final long serialVersionUID = 1L;

+

+							@Override

+							protected void onEvent(AjaxRequestTarget target) {

+								((MainPage)getPage()).updateContents(new OmUrlFragment(action, params), target);

+							}

+						});

+					}

+				}.setReuseItems(true));

+			}

+		}.setReuseItems(true));

+	}

+	

+	@Override

+	public void renderHead(IHeaderResponse response) {

+		super.renderHead(response);

+		if (getMainPage().isRtl()) {

+			response.render(CssHeaderItem.forUrl("css/jquery.ui.menubar-rtl.css"));

+		}

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/common/OmDateTimePicker.java b/src/web/java/org/apache/openmeetings/web/common/OmDateTimePicker.java
new file mode 100644
index 0000000..1b7f263
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/OmDateTimePicker.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.model.IModel;
+import org.threeten.bp.LocalDate;
+import org.threeten.bp.LocalDateTime;
+import org.threeten.bp.LocalTime;
+
+import com.googlecode.wicket.kendo.ui.form.datetime.local.DatePicker;
+import com.googlecode.wicket.kendo.ui.form.datetime.local.DateTimePicker;
+import com.googlecode.wicket.kendo.ui.form.datetime.local.TimePicker;
+import com.googlecode.wicket.kendo.ui.resource.KendoGlobalizeResourceReference;
+
+public class OmDateTimePicker extends DateTimePicker {
+	private static final long serialVersionUID = 1L;
+
+	public OmDateTimePicker(String id, IModel<LocalDateTime> model) {
+		super(id, model);
+	}
+	
+	@Override
+	protected DatePicker newDatePicker(String id, IModel<LocalDate> model, String datePattern) {
+		return new DatePicker(id, model, WebSession.get().getLocale());
+	}
+	
+	@Override
+	protected TimePicker newTimePicker(String id, IModel<LocalTime> model, String timePattern) {
+		return new TimePicker(id, model, WebSession.get().getLocale());
+	}
+
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(JavaScriptHeaderItem.forReference(new KendoGlobalizeResourceReference(WebSession.get().getLocale())));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/OmLabel.java b/src/web/java/org/apache/openmeetings/web/common/OmLabel.java
new file mode 100644
index 0000000..a6e39cd
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/OmLabel.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.model.StringResourceModel;
+
+public class OmLabel extends Label {
+	private static final long serialVersionUID = 1L;
+
+	public OmLabel(String id, String key, Object... parameters) {
+		super(id);
+		setDefaultModel(new StringResourceModel(key, this).setParameters(parameters));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/OmPagingNavigator.html b/src/web/java/org/apache/openmeetings/web/common/OmPagingNavigator.html
new file mode 100644
index 0000000..9b178ca
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/OmPagingNavigator.html
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" ?>

+<!--

+   Licensed to the Apache Software Foundation (ASF) under one or more

+   contributor license agreements.  See the NOTICE file distributed with

+   this work for additional information regarding copyright ownership.

+   The ASF licenses this file to You under the Apache License, Version 2.0

+   (the "License"); you may not use this file except in compliance with

+   the License.  You may obtain a copy of the License at

+

+        http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+	<wicket:panel>

+	    <a wicket:id="first" class="goto icon ui-icon ui-icon-seek-first"></a>

+	    <a wicket:id="prev" class="goto icon ui-icon ui-icon-seek-prev"></a>

+	    <span wicket:id="navigation" class="goto">

+	        <a wicket:id="pageLink" href="#"><span wicket:id="pageNumber">5</span></a>

+	    </span>

+	    <a wicket:id="next" class="goto icon ui-icon ui-icon-seek-next"></a>

+	    <a wicket:id="last" class="goto icon ui-icon ui-icon-seek-end"></a>

+	</wicket:panel>

+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/common/OmPagingNavigator.java b/src/web/java/org/apache/openmeetings/web/common/OmPagingNavigator.java
new file mode 100644
index 0000000..596ab5f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/OmPagingNavigator.java
@@ -0,0 +1,32 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.common;

+

+import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator;

+import org.apache.wicket.markup.html.navigation.paging.IPageable;

+

+public class OmPagingNavigator extends AjaxPagingNavigator {

+

+	private static final long serialVersionUID = 1L;

+	

+	public OmPagingNavigator(String id, IPageable pageable) {

+		super(id, pageable);

+	}

+

+}

diff --git a/src/web/java/org/apache/openmeetings/web/common/PagedEntityListPanel.html b/src/web/java/org/apache/openmeetings/web/common/PagedEntityListPanel.html
new file mode 100644
index 0000000..b83c5e8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/PagedEntityListPanel.html
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div wicket:id="pagedPanel" class="pagedEntityListPanel"></div>
+		<form wicket:id="searchForm" class="searchForm">
+			<input type="text" wicket:id="searchText" wicket:message="title:714"/>
+			<input type="submit" wicket:id="search" wicket:message="value:715"/>
+		</form>
+	</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/common/PagedEntityListPanel.java b/src/web/java/org/apache/openmeetings/web/common/PagedEntityListPanel.java
new file mode 100644
index 0000000..5e4764b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/PagedEntityListPanel.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.PropertyModel;
+
+public abstract class PagedEntityListPanel extends BasePanel {
+	private static final long serialVersionUID = 1L;
+	private List<Integer> numbers = Arrays.asList(10, 25, 50, 75, 100, 200);
+	
+	public PagedEntityListPanel(String id, final SearchableDataView<? extends IDataProviderEntity> dataView) {
+		super(id);
+
+		final PagingNavigatorPanel navPanel = new PagingNavigatorPanel("pagedPanel", dataView, numbers) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				PagedEntityListPanel.this.onEvent(target);
+			}
+		};
+		
+		final SearchableDataProvider<? extends IDataProviderEntity> dp = dataView.getDataProvider();
+		Form<Void> searchForm = new Form<Void>("searchForm");
+		add(searchForm.setOutputMarkupId(true));
+		searchForm.add(new TextField<String>("searchText", new PropertyModel<String>(dp, "search")).setOutputMarkupId(true));
+		searchForm.add(new AjaxButton("search", searchForm) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				target.add(navPanel);
+				PagedEntityListPanel.this.onEvent(target);
+			}
+		});
+		add(navPanel);
+	}
+
+	protected abstract void onEvent(AjaxRequestTarget target);
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/PagingNavigatorPanel.html b/src/web/java/org/apache/openmeetings/web/common/PagingNavigatorPanel.html
new file mode 100644
index 0000000..a3728e5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/PagingNavigatorPanel.html
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form wicket:id="pagingForm" class="pagedEntityListPanel">
+		<select wicket:id="entitiesPerPage"></select> <span
+			wicket:id="navigator">[dataview navigator]</span>
+	</form>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/common/PagingNavigatorPanel.java b/src/web/java/org/apache/openmeetings/web/common/PagingNavigatorPanel.java
new file mode 100644
index 0000000..1e22329
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/PagingNavigatorPanel.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import java.util.List;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.markup.repeater.data.DataView;
+import org.apache.wicket.model.PropertyModel;
+
+public abstract class PagingNavigatorPanel extends Panel {
+	private static final long serialVersionUID = 1L;
+	private int entitiesPerPage;
+	
+	public PagingNavigatorPanel(String id, final DataView<?> dataView, List<Integer> numbers) {
+		this(id, dataView, numbers, 50);
+	}
+	
+	public PagingNavigatorPanel(String id, final DataView<?> dataView, List<Integer> numbers, int _entitiesPerPage) {
+		super(id);
+		setOutputMarkupId(true);
+		this.entitiesPerPage = _entitiesPerPage;
+		dataView.setItemsPerPage(entitiesPerPage);
+		final Form<Void> f = new Form<Void>("pagingForm");
+		f.add(new OmPagingNavigator("navigator", dataView).setOutputMarkupId(true))
+			.add(new DropDownChoice<Integer>("entitiesPerPage", new PropertyModel<Integer>(this, "entitiesPerPage"), numbers)
+				.add(new AjaxFormComponentUpdatingBehavior("change") {
+					private static final long serialVersionUID = 1L;
+	
+					@Override
+					protected void onUpdate(AjaxRequestTarget target) {
+						long newPage = dataView.getCurrentPage() * dataView.getItemsPerPage() / entitiesPerPage;
+						dataView.setItemsPerPage(entitiesPerPage);
+						dataView.setCurrentPage(newPage);
+						target.add(f);
+						PagingNavigatorPanel.this.onEvent(target);
+					}
+				}));
+		add(f.setOutputMarkupId(true));
+	}
+
+	public int getEntitiesPerPage() {
+		return entitiesPerPage;
+	}
+	
+	public void setEntitiesPerPage(int entitiesPerPage) {
+		this.entitiesPerPage = entitiesPerPage;
+	}
+	
+	protected abstract void onEvent(AjaxRequestTarget target);
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/ProfileImagePanel.html b/src/web/java/org/apache/openmeetings/web/common/ProfileImagePanel.html
new file mode 100644
index 0000000..f4b7469
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ProfileImagePanel.html
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div class="profile" wicket:id="profile"><img wicket:id="img" style="width: 125px;"/><wicket:child/></div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/common/ProfileImagePanel.java b/src/web/java/org/apache/openmeetings/web/common/ProfileImagePanel.java
new file mode 100644
index 0000000..a77525d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/ProfileImagePanel.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.net.URI;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.image.Image;
+import org.apache.wicket.request.resource.ByteArrayResource;
+import org.apache.wicket.util.io.IOUtils;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class ProfileImagePanel extends BasePanel {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(ProfileImagePanel.class, webAppRootKey);
+	protected final WebMarkupContainer profile;
+	
+	public ProfileImagePanel(String id, final long userId) {
+		super(id);
+		
+		profile = new TransparentWebMarkupContainer("profile");
+		String uri = getBean(UserDao.class).get(userId).getPictureuri();
+		boolean absolute = false;
+		try {
+			absolute = URI.create(uri).isAbsolute();
+		} catch (Exception e) {
+			//no-op
+		}
+		if (absolute) {
+			profile.add(new WebMarkupContainer("img").add(AttributeModifier.append("alt", Application.getString(5L)), AttributeModifier.append("src", uri)));
+		} else {
+			profile.add(new Image("img", new ByteArrayResource("image/jpeg") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected ResourceResponse newResourceResponse(Attributes attributes) {
+					ResourceResponse rr = super.newResourceResponse(attributes);
+					rr.disableCaching();
+					return rr;
+				}
+				
+				@Override
+				protected byte[] getData(Attributes attributes) {
+					String uri = getBean(UserDao.class).get(userId).getPictureuri();
+					File img = OmFileHelper.getUserProfilePicture(userId, uri);
+					try (InputStream is = new FileInputStream(img)) {
+						return IOUtils.toByteArray(is);
+					} catch (Exception e) {
+						log.error("failed to get bytes from image", e);
+					}
+					return null;
+				}
+			}));
+		}
+		add(profile.setOutputMarkupId(true));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.html b/src/web/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.html
new file mode 100644
index 0000000..d1a3c9e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.html
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:extend>
+		<form wicket:id="form"><div 
+			class="fileupload fileupload-new" data-provides="fileupload" style="margin: 0;"><span 
+			class="btn btn-file ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" 
+			style="width: 120px;"><span class="ui-button-text"><wicket:message key="379"/></span><input 
+			type="file" accept="image/*" wicket:id="image"/></span></div><span wicket:id="progress">[progressbar]</span></form>
+	</wicket:extend>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.java b/src/web/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.java
new file mode 100644
index 0000000..4614695
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.List;
+
+import org.apache.openmeetings.converter.GenerateImage;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.util.StoredFile;
+import org.apache.openmeetings.web.util.BootstrapFileUploadBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
+import org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadProgressBar;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.upload.FileUpload;
+import org.apache.wicket.markup.html.form.upload.FileUploadField;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.util.lang.Bytes;
+
+public class UploadableProfileImagePanel extends ProfileImagePanel {
+	private static final long serialVersionUID = 1L;
+	private FileUploadField fileUploadField;
+	
+	public UploadableProfileImagePanel(String id, final long userId) {
+		super(id, userId);
+		final Form<Void> form = new Form<Void>("form");
+		form.setMultiPart(true);
+		form.setMaxSize(Bytes.bytes(getBean(ConfigurationDao.class).getMaxUploadSize()));
+		// Model is necessary here to avoid writing image to the User object
+		form.add(fileUploadField = new FileUploadField("image", new IModel<List<FileUpload>>() {
+			private static final long serialVersionUID = 1L;
+
+			//FIXME this need to be eliminated
+			public void detach() {
+			}
+			
+			public void setObject(List<FileUpload> object) {
+			}
+			
+			public List<FileUpload> getObject() {
+				return null;
+			}
+		}));
+		form.add(new UploadProgressBar("progress", form, fileUploadField));
+		fileUploadField.add(new AjaxFormSubmitBehavior(form, "change") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target) {
+				FileUpload fu = fileUploadField.getFileUpload();
+				if (fu != null) {
+					StoredFile sf = new StoredFile(fu.getClientFileName());
+					if (sf.isImage()) {
+						boolean asIs = sf.isAsIs();
+						try {
+							//FIXME need to work with InputStream !!!
+							getBean(GenerateImage.class)
+								.convertImageUserProfile(fu.writeToTempFile(), userId, asIs);
+						} catch (Exception e) {
+							// TODO display error
+							e.printStackTrace();
+						}
+					} else {
+						//TODO display error
+					}
+				}
+				target.add(profile, form);
+			}
+		});
+		add(form.setOutputMarkupId(true));
+		add(BootstrapFileUploadBehavior.INSTANCE);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/common/UserPanel.java b/src/web/java/org/apache/openmeetings/web/common/UserPanel.java
new file mode 100644
index 0000000..96282ed
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/common/UserPanel.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.common;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.IRoomManager;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+import org.apache.wicket.model.IModel;
+
+@AuthorizeInstantiation("Dashboard")
+public abstract class UserPanel extends BasePanel {
+	private static final long serialVersionUID = 1L;
+
+	public UserPanel(String id) {
+		super(id);
+	}
+	
+	public UserPanel(String id, IModel<?> model) {
+		super(id, model);
+	}
+	
+	public static List<Room> getMyRooms() {
+		List<Room> result = new ArrayList<Room>();
+		result.add(getBean(IRoomManager.class).getRoomByOwnerAndTypeId(getUserId(), 1L, Application.getString(1306L)));
+		result.add(getBean(IRoomManager.class).getRoomByOwnerAndTypeId(getUserId(), 3L, Application.getString(1307L)));
+		result.addAll(getBean(RoomDao.class).getAppointedRoomsByUser(getUserId()));
+		return result;
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/data/DataViewContainer.java b/src/web/java/org/apache/openmeetings/web/data/DataViewContainer.java
new file mode 100644
index 0000000..aaf178a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/data/DataViewContainer.java
@@ -0,0 +1,53 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.data;

+

+import java.io.Serializable;

+import java.util.ArrayList;

+import java.util.List;

+

+import org.apache.openmeetings.db.entity.IDataProviderEntity;

+import org.apache.openmeetings.web.admin.SearchableDataView;

+import org.apache.openmeetings.web.common.PagedEntityListPanel;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+

+public class DataViewContainer<T extends IDataProviderEntity> implements Serializable {

+	private static final long serialVersionUID = -1027478954223527890L;

+	public WebMarkupContainer container;

+	public SearchableDataView<T> view;

+	public PagedEntityListPanel navigator;

+	private List<OmOrderByBorder<T>> orderLinks = new ArrayList<OmOrderByBorder<T>>();

+	

+	public DataViewContainer(WebMarkupContainer container, SearchableDataView<T> view, PagedEntityListPanel navigator) {

+		this.container = container;

+		this.view = view;

+		this.navigator = navigator;

+	}

+	

+	public DataViewContainer<T> addLink(OmOrderByBorder<T> link) {

+		orderLinks.add(link);

+		return this;

+	}

+	

+	public OmOrderByBorder<T>[] getLinks() {

+		@SuppressWarnings("unchecked")

+		OmOrderByBorder<T>[] a = new OmOrderByBorder[0];

+		return orderLinks.toArray(a);

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/data/OmOrderByBorder.java b/src/web/java/org/apache/openmeetings/web/data/OmOrderByBorder.java
new file mode 100644
index 0000000..bf5684c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/data/OmOrderByBorder.java
@@ -0,0 +1,44 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.data;

+

+import org.apache.openmeetings.db.entity.IDataProviderEntity;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.extensions.ajax.markup.html.repeater.data.sort.AjaxFallbackOrderByBorder;

+

+public class OmOrderByBorder<T extends IDataProviderEntity> extends AjaxFallbackOrderByBorder<String> {

+	private static final long serialVersionUID = 1L;

+	private DataViewContainer<T> container;

+	

+	public OmOrderByBorder(final String id, final String property, DataViewContainer<T> container) {

+		super(id, property, container.view.getDataProvider());

+		this.container = container;

+		setOutputMarkupId(true);

+	}

+	

+    protected void onSortChanged() {

+    	container.view.setCurrentPage(0);

+    }

+

+	@Override

+	protected void onAjaxClick(AjaxRequestTarget target) {

+		target.add(container.container, container.navigator);

+		target.add(container.getLinks());

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/data/SearchableDataProvider.java b/src/web/java/org/apache/openmeetings/web/data/SearchableDataProvider.java
new file mode 100644
index 0000000..7b66be2
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/data/SearchableDataProvider.java
@@ -0,0 +1,88 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.data;

+

+import static org.apache.openmeetings.web.app.Application.getBean;

+

+import java.util.Iterator;

+

+import org.apache.openmeetings.db.dao.IDataProviderDao;

+import org.apache.openmeetings.db.entity.IDataProviderEntity;

+import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;

+import org.apache.wicket.model.CompoundPropertyModel;

+import org.apache.wicket.model.IModel;

+

+/**

+ * provides function to fill paging tables

+ * 

+ * @author swagner

+ * 

+ * @param <T>

+ */

+public class SearchableDataProvider<T extends IDataProviderEntity> extends SortableDataProvider<T, String> {

+	private static final long serialVersionUID = 4325721185888905204L;

+	protected Class<? extends IDataProviderDao<T>> clazz;

+	protected String search = null;

+	

+	public SearchableDataProvider(Class<? extends IDataProviderDao<T>> c) {

+		this.clazz = c;

+	}

+	

+	public void detach() {

+		// does nothing

+	}

+

+	protected IDataProviderDao<T> getDao() {

+		return getBean(clazz);

+	}

+	

+	protected String getSortStr() {

+		String result = null;

+		if (getSort() != null) {

+			result = getSort().getProperty() + " " + (getSort().isAscending() ? "ASC" : "DESC");

+		}

+		return result;

+	}

+	

+	public Iterator<? extends T> iterator(long first, long count) {

+		return (search == null && getSort() == null

+			? getDao().get((int)first, (int)count)

+			: getDao().get(search, (int)first, (int)count, getSortStr())).iterator();

+	}

+

+	public long size() {

+		return search == null ? getDao().count() : getDao().count(search);

+	}

+

+	public IModel<T> model(T object) {

+		return new CompoundPropertyModel<T>(object);

+	}

+

+	public void setSearch(String search) {

+		if (search != null && !search.trim().isEmpty()) {

+			this.search = search.trim();

+		} else {

+			this.search = null;

+		}

+	}

+	

+	public String getSearch() {

+		return search;

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/AbstractAppointmentTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/AbstractAppointmentTemplate.java
new file mode 100644
index 0000000..7ae71e1
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/AbstractAppointmentTemplate.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+
+public abstract class AbstractAppointmentTemplate extends AbstractTemplatePanel {
+	private static final long serialVersionUID = 1L;
+	protected Appointment a;
+	protected TimeZone tz;
+
+	public AbstractAppointmentTemplate(Long langId, Appointment a, TimeZone tz) {
+		super(langId);
+		this.a = a;
+		this.tz = tz;
+	}
+
+	public String getEmail() {
+		return renderPanel(this).toString();
+	}
+
+	public abstract String getSubject();
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/AbstractTemplatePanel.html b/src/web/java/org/apache/openmeetings/web/mail/template/AbstractTemplatePanel.html
new file mode 100644
index 0000000..f8038c1
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/AbstractTemplatePanel.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div wicket:id="container">
+		<wicket:child/>
+	</div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/AbstractTemplatePanel.java b/src/web/java/org/apache/openmeetings/web/mail/template/AbstractTemplatePanel.java
new file mode 100644
index 0000000..fc2020e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/AbstractTemplatePanel.java
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.util.FormatHelper;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ThreadContext;
+import org.apache.wicket.behavior.AttributeAppender;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.mock.MockWebResponse;
+import org.apache.wicket.protocol.http.BufferedWebResponse;
+import org.apache.wicket.protocol.http.mock.MockHttpServletRequest;
+import org.apache.wicket.protocol.http.mock.MockHttpSession;
+import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
+import org.apache.wicket.request.Response;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.cycle.RequestCycleContext;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+
+public abstract class AbstractTemplatePanel extends Panel {
+	private static final long serialVersionUID = 1L;
+	protected long langId;
+	
+	public AbstractTemplatePanel(Long langId) {
+		super(TemplatePage.COMP_ID);
+		this.langId = langId == null ? getBean(ConfigurationDao.class).getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, "1") : langId;
+		add(new TransparentWebMarkupContainer("container").add(AttributeAppender.append("dir", FormatHelper.isRtlLanguage(LabelDao.languages.get(langId).toLanguageTag()) ? "rtl" : "ltr")));
+	}
+	
+	/**
+	 * Collects the html generated by the rendering of a page.
+	 * 
+	 * @param panel
+	 *            the panel that should be rendered.
+	 * @return the html rendered by the panel
+	 */
+	protected static CharSequence renderPanel(final Panel panel) {
+		RequestCycle requestCycle = RequestCycle.get();
+
+		final Response oldResponse = requestCycle.getResponse();
+		BufferedWebResponse tempResponse = new BufferedWebResponse(null);
+
+		try {
+			requestCycle.setResponse(tempResponse);
+
+			TemplatePage page = new TemplatePage();
+			page.add(panel);
+
+			panel.render();
+		} finally {
+			requestCycle.setResponse(oldResponse);
+		}
+
+		return tempResponse.getText();
+	}
+
+	public static class TemplatePage extends WebPage implements IMarkupResourceStreamProvider {
+		private static final long serialVersionUID = 1L;
+		public static final String COMP_ID = "template";
+
+		public IResourceStream getMarkupResourceStream(MarkupContainer container, Class<?> containerClass) {
+			return new StringResourceStream("<wicket:container wicket:id='" + COMP_ID + "'></wicket:container>");
+		}
+	}
+	
+	public static void ensureApplication(long langId) {
+		Application a = null;
+		if (Application.exists()) {
+			a = Application.get();
+		} else {
+			a = (Application)Application.get(Application.getAppName());
+			ThreadContext.setApplication(a);
+		}
+		if (ThreadContext.getRequestCycle() == null) {
+			ServletWebRequest req = new ServletWebRequest(new MockHttpServletRequest(a, new MockHttpSession(a.getServletContext()), a.getServletContext()), "");
+			RequestCycleContext rctx = new RequestCycleContext(req, new MockWebResponse(), a.getRootRequestMapper(), a.getExceptionMapperProvider().get()); 
+			ThreadContext.setRequestCycle(new RequestCycle(rctx));
+		}
+		if (ThreadContext.getSession() == null) {
+			WebSession s = WebSession.get();
+			s.setLanguage(langId);
+			ThreadContext.setSession(s);
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/AppointmentReminderTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/AppointmentReminderTemplate.html
new file mode 100644
index 0000000..5e80e9a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/AppointmentReminderTemplate.html
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<span wicket:id="titleLbl"></span>&nbsp;<span wicket:id="title"></span>
+	<div wicket:id="descContainer">
+		<br/>
+		<span wicket:id="descLbl"></span><br/>
+		&nbsp;<span wicket:id="desc"></span>
+	</div>
+	<br/>
+	<span wicket:id="startLbl"></span>&nbsp;<span wicket:id="start"></span><br/>
+	<span wicket:id="endLbl"></span>&nbsp;<span wicket:id="end"></span><br/>
+</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/AppointmentReminderTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/AppointmentReminderTemplate.java
new file mode 100644
index 0000000..f6eaae0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/AppointmentReminderTemplate.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.util.string.Strings;
+
+public class AppointmentReminderTemplate extends AbstractAppointmentTemplate {
+	private static final long serialVersionUID = 1L;
+
+	private AppointmentReminderTemplate(Long langId, Appointment a, TimeZone tz) {
+		super(langId, a, tz);
+
+		add(new Label("titleLbl", Application.getString(1158L, langId)));
+		add(new Label("title", a.getTitle()));
+		add(new WebMarkupContainer("descContainer")
+			.add(new Label("descLbl", Application.getString(1152L, langId)))
+			.add(new Label("desc", a.getDescription()).setEscapeModelStrings(false))
+			.setVisible(!Strings.isEmpty(a.getDescription()))
+			);
+		add(new Label("startLbl", Application.getString(1153L, langId)));
+		add(new Label("start", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz)));
+		add(new Label("endLbl", Application.getString(1154L, langId)));
+		add(new Label("end", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz)));
+	}
+	
+	public static AppointmentReminderTemplate get(Long langId, Appointment a, TimeZone tz) {
+		ensureApplication(langId);
+		return new AppointmentReminderTemplate(langId, a, tz);
+	}
+
+	@Override
+	public String getSubject() {
+		StringBuilder sb = new StringBuilder();
+		sb.append(Application.getString(1158L, langId)).append(" ").append(" ").append(a.getTitle()).append(' ')
+			.append(CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz))
+			.append(" - ").append(CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz));
+
+		return sb.toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/CanceledAppointmentTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/CanceledAppointmentTemplate.html
new file mode 100644
index 0000000..1d6bd28
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/CanceledAppointmentTemplate.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<span wicket:id="titleLbl"></span>&nbsp;<span wicket:id="title"></span>
+	<div wicket:id="descContainer">
+		<br/>
+		<span wicket:id="descLbl"></span><br/>
+		&nbsp;<span wicket:id="desc"></span>
+	</div>
+	<br/>
+	<span wicket:id="startLbl"></span>&nbsp;<span wicket:id="start"></span><br/>
+	<span wicket:id="endLbl"></span>&nbsp;<span wicket:id="end"></span><br/>
+	<span wicket:id="invitorLbl"></span>&nbsp;<span wicket:id="invitor"></span><br/>
+</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/CanceledAppointmentTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/CanceledAppointmentTemplate.java
new file mode 100644
index 0000000..5a7f670
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/CanceledAppointmentTemplate.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.util.string.Strings;
+
+public class CanceledAppointmentTemplate extends AbstractAppointmentTemplate {
+	private static final long serialVersionUID = 1L;
+
+	private CanceledAppointmentTemplate(Long langId, Appointment a, TimeZone tz, String invitorName) {
+		super(langId, a, tz);
+
+		add(new Label("titleLbl", Application.getString(1157L, langId)));
+		add(new Label("title", a.getTitle()));
+		add(new WebMarkupContainer("descContainer")
+			.add(new Label("descLbl", Application.getString(1152L, langId)))
+			.add(new Label("desc", a.getDescription()).setEscapeModelStrings(false))
+			.setVisible(!Strings.isEmpty(a.getDescription()))
+			);
+		add(new Label("startLbl", Application.getString(1153L, langId)));
+		add(new Label("start", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz)));
+		add(new Label("endLbl", Application.getString(1154L, langId)));
+		add(new Label("end", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz)));
+		add(new Label("invitorLbl", Application.getString(1156L, langId)));
+		add(new Label("invitor", invitorName));
+	}
+	
+	public static CanceledAppointmentTemplate get(Long langId, Appointment a, TimeZone tz, String invitorName) {
+		ensureApplication(langId);
+		return new CanceledAppointmentTemplate(langId, a, tz, invitorName);
+	}
+
+	@Override
+	public String getSubject() {
+		StringBuilder sb = new StringBuilder();
+		sb.append(Application.getString(1157L, langId)).append(" ").append(a.getTitle())
+			.append(" ").append(CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz))
+			.append(" - ").append(CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz));
+
+		return sb.toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/CreatedAppointmentTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/CreatedAppointmentTemplate.html
new file mode 100644
index 0000000..1d6bd28
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/CreatedAppointmentTemplate.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<span wicket:id="titleLbl"></span>&nbsp;<span wicket:id="title"></span>
+	<div wicket:id="descContainer">
+		<br/>
+		<span wicket:id="descLbl"></span><br/>
+		&nbsp;<span wicket:id="desc"></span>
+	</div>
+	<br/>
+	<span wicket:id="startLbl"></span>&nbsp;<span wicket:id="start"></span><br/>
+	<span wicket:id="endLbl"></span>&nbsp;<span wicket:id="end"></span><br/>
+	<span wicket:id="invitorLbl"></span>&nbsp;<span wicket:id="invitor"></span><br/>
+</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/CreatedAppointmentTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/CreatedAppointmentTemplate.java
new file mode 100644
index 0000000..7ba76c8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/CreatedAppointmentTemplate.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.util.string.Strings;
+
+public class CreatedAppointmentTemplate extends AbstractAppointmentTemplate {
+	private static final long serialVersionUID = 1L;
+
+	private CreatedAppointmentTemplate(Long langId, Appointment a, TimeZone tz, String invitorName) {
+		super(langId, a, tz);
+
+		add(new Label("titleLbl", Application.getString(1151L, langId)));
+		add(new Label("title", a.getTitle()));
+		add(new WebMarkupContainer("descContainer")
+			.add(new Label("descLbl", Application.getString(1152L, langId)))
+			.add(new Label("desc", a.getDescription()).setEscapeModelStrings(false))
+			.setVisible(!Strings.isEmpty(a.getDescription()))
+			);
+		add(new Label("startLbl", Application.getString(1153L, langId)));
+		add(new Label("start", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz)));
+		add(new Label("endLbl", Application.getString(1154L, langId)));
+		add(new Label("end", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz)));
+		add(new Label("invitorLbl", Application.getString(1156L, langId)));
+		add(new Label("invitor", invitorName));
+	}
+	
+	public static CreatedAppointmentTemplate get(Long langId, Appointment a, TimeZone tz, String invitorName) {
+		ensureApplication(langId);
+		return new CreatedAppointmentTemplate(langId, a, tz, invitorName);
+	}
+
+	@Override
+	public String getSubject() {
+		StringBuilder sb = new StringBuilder();
+		sb.append(Application.getString(1151L, langId)).append(" ").append(a.getTitle())
+			.append(" ").append(CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz))
+			.append(" - ").append(CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz));
+
+		return sb.toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/FeedbackTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/FeedbackTemplate.html
new file mode 100644
index 0000000..68b10b4
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/FeedbackTemplate.html
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<b><span wicket:id="appname"></span> - Feedback</b><br />
+	Message from User: <span wicket:id="username"></span><br/>
+	Mail: <span wicket:id="email"></span><br/>
+	Message: <span wicket:id="message"></span><br/><br/>
+	<b>Click on this link to participate in the Meeting:</b><br/>
+	<a wicket:id="invitation_link">Click here to enter room</a><br/>
+</wicket:extend>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/FeedbackTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/FeedbackTemplate.java
new file mode 100644
index 0000000..95c28fc
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/FeedbackTemplate.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.ExternalLink;
+
+public class FeedbackTemplate extends AbstractTemplatePanel {
+	private static final long serialVersionUID = 1L;
+
+	public FeedbackTemplate(String username, String email, String message) {
+		super(WebSession.getLanguage());
+		add(new Label("appname", getBean(ConfigurationDao.class).getAppName()));
+		add(new Label("username", username));
+		add(new Label("email", email));
+		add(new Label("message", message));
+		add(new ExternalLink("invitation_link", ""));
+	}
+	
+	public static String getEmail(String username, String email, String message) {
+		return renderPanel(new FeedbackTemplate(username, email, message)).toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/InvitationTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/InvitationTemplate.html
new file mode 100644
index 0000000..d47fbcf
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/InvitationTemplate.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<b><span wicket:id="titleLbl"></span></b><br />
+	<span wicket:id="userLbl"></span> <span wicket:id="user"></span><br/>
+	<span wicket:id="messageLbl"></span> <span wicket:id="message"></span><br/>
+	<div wicket:id="links">
+		<span wicket:id="comment_for_link1"></span><br/>
+		<a wicket:id="invitation_link1"><span wicket:id="clickMe"></span></a><br/>
+		<br/><br/>
+		<span wicket:id="comment_for_link2"></span><br/>
+		<span wicket:id="invitation_link2"></span>
+	</div>
+</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/InvitationTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/InvitationTemplate.java
new file mode 100644
index 0000000..4c6f31e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/InvitationTemplate.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.ExternalLink;
+
+public class InvitationTemplate extends AbstractTemplatePanel {
+	private static final long serialVersionUID = 1L;
+
+	private InvitationTemplate(Long langId, String invitorName, String message, String link) {
+		super(langId);
+
+		add(new Label("titleLbl", Application.getString(500, langId)));
+		add(new Label("userLbl", Application.getString(501, langId)));
+		add(new Label("user", invitorName));
+		add(new Label("messageLbl", Application.getString(502, langId)));
+		add(new Label("message", message).setEscapeModelStrings(false));
+		
+		add(new WebMarkupContainer("links")
+			.add(new Label("comment_for_link1", Application.getString(503, langId)))
+			.add(new ExternalLink("invitation_link1", link).add(new Label("clickMe", Application.getString(504, langId))))
+			.add(new Label("comment_for_link2", Application.getString(505, langId)))
+			.add(new Label("invitation_link2", link))
+			.setVisible(link != null)
+			);
+	}
+	
+	public static String getEmail(Long langId, String invitorName, String message, String link) {
+		ensureApplication(langId);
+		return renderPanel(new InvitationTemplate(langId, invitorName, message, link)).toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/RegisterUserTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/RegisterUserTemplate.html
new file mode 100644
index 0000000..eef2bc8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/RegisterUserTemplate.html
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<span wicket:id="registrationLbl"></span>
+	<br />
+	<br />
+	<b><wicket:message key="507" /></b><br />
+	<wicket:message key="508" /> <span wicket:id="username"></span><br />
+	<wicket:message key="509" /> <span wicket:id="userpass"></span><br />
+	<wicket:message key="510" /> <span wicket:id="email"></span><br />
+	<br />
+	<div wicket:id="verification">
+		<wicket:message key="667" /> <br />
+		<a wicket:id="verification_url1"><wicket:message key="668" /></a> <br />
+		<span wicket:id="verification_url2"></span> <br />
+	</div>
+	<span wicket:id="organisationLbl"></span>
+</wicket:extend>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/RegisterUserTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/RegisterUserTemplate.java
new file mode 100644
index 0000000..5e02662
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/RegisterUserTemplate.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.ExternalLink;
+
+public class RegisterUserTemplate extends AbstractTemplatePanel {
+	private static final long serialVersionUID = 1L;
+
+	public RegisterUserTemplate(String username, String userpass, String email, String verification_url) {
+		super(WebSession.getLanguage());
+		add(new Label("registrationLbl", Application.getString(506, langId)));
+		add(new Label("username", username));
+		add(new Label("userpass", userpass));
+		add(new Label("email", email));
+		WebMarkupContainer verification = new WebMarkupContainer("verification");
+		add(verification.add(new Label("verification_url2", verification_url))
+			.add(new ExternalLink("verification_url1", verification_url))
+			.setVisible(verification_url != null));
+		add(new Label("organisationLbl", Application.getString(511, langId)));
+	}
+
+	public static String getEmail(String username, String userpass, String email, String verification_url) {
+		return renderPanel(new RegisterUserTemplate(username, userpass, email, verification_url)).toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactConfirmTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactConfirmTemplate.html
new file mode 100644
index 0000000..0c73eb5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactConfirmTemplate.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<span wicket:id="hi"></span>&nbsp;<span wicket:id="firstName"></span>&nbsp;<span wicket:id="lastName"></span><br/>
+	<br/>
+	<span wicket:id="addedFirstName"></span>&nbsp;<span wicket:id="addedLastName"></span>&nbsp;<span wicket:id="confirmed"></span><br/>
+</wicket:extend>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactConfirmTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactConfirmTemplate.java
new file mode 100644
index 0000000..d13ee2d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactConfirmTemplate.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import org.apache.openmeetings.db.entity.user.UserContact;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.markup.html.basic.Label;
+
+public class RequestContactConfirmTemplate extends AbstractTemplatePanel {
+	private static final long serialVersionUID = 1L;
+
+	public RequestContactConfirmTemplate(UserContact contact) {
+		super(contact.getOwner().getLanguage_id());
+		add(new Label("hi", Application.getString(1192, langId)));
+		add(new Label("firstName", contact.getOwner().getFirstname()));
+		add(new Label("lastName", contact.getOwner().getLastname()));
+		add(new Label("addedFirstName", contact.getContact().getFirstname()));
+		add(new Label("addedLastName", contact.getContact().getLastname()));
+		add(new Label("confirmed", Application.getString(1198, langId)));
+	}
+	
+	public static String getEmail(UserContact contact) {
+		return renderPanel(new RequestContactConfirmTemplate(contact)).toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactTemplate.html
new file mode 100644
index 0000000..967bfce
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactTemplate.html
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<span wicket:id="hi"></span>&nbsp;<span wicket:id="addedFirstName"></span>&nbsp;<span wicket:id="addedLastName"></span><br/>
+	<br/>
+	<span wicket:id="firstName"></span>&nbsp;<span wicket:id="lastName"></span>&nbsp;<span wicket:id="likeToAdd"></span><br/>
+	<span wicket:id="check"></span><br/>
+	<br/>
+	<br/>
+	<a wicket:id="link"><span wicket:id="contactList"></span></a><br/>
+</wicket:extend>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactTemplate.java
new file mode 100644
index 0000000..c10d012
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/RequestContactTemplate.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.util.ContactsHelper;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.ExternalLink;
+
+public class RequestContactTemplate extends AbstractTemplatePanel {
+	private static final long serialVersionUID = 1L;
+
+	public RequestContactTemplate(User userToAdd, User user) {
+		super(userToAdd.getLanguage_id());
+		add(new Label("hi", Application.getString(1192, langId)));
+		add(new Label("addedFirstName", userToAdd.getFirstname()));
+		add(new Label("addedLastName", userToAdd.getLastname()));
+		add(new Label("firstName", user.getFirstname()));
+		add(new Label("lastName", user.getLastname()));
+		add(new Label("likeToAdd", Application.getString(1193, langId)));
+		add(new Label("check", Application.getString(1194, langId)));
+		add(new ExternalLink("link", ContactsHelper.getLink()).add(new Label("contactList", Application.getString(1196, langId))));
+	}
+	
+	public static String getEmail(User userToAdd, User user) {
+		return renderPanel(new RequestContactTemplate(userToAdd, user)).toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/ResetPasswordTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/ResetPasswordTemplate.html
new file mode 100644
index 0000000..a6d5e04
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/ResetPasswordTemplate.html
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<b><wicket:message key="513"/></b><br />
+	<b><wicket:message key="514"/></b><br/>
+	<a wicket:id="reset_link1"><wicket:message key="515"/></a><br/>
+	<wicket:message key="516"/><br/>
+	<span wicket:id="reset_link2"></span>
+</wicket:extend>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/ResetPasswordTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/ResetPasswordTemplate.java
new file mode 100644
index 0000000..4646c3b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/ResetPasswordTemplate.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.ExternalLink;
+
+public class ResetPasswordTemplate extends AbstractTemplatePanel {
+	private static final long serialVersionUID = 1L;
+
+	public ResetPasswordTemplate(String link) {
+		super(WebSession.getLanguage());
+		add(new ExternalLink("reset_link1", link));
+		add(new Label("reset_link2", link));
+	}
+	
+	public static String getEmail(String link) {
+		return renderPanel(new ResetPasswordTemplate(link)).toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/UpdatedAppointmentTemplate.html b/src/web/java/org/apache/openmeetings/web/mail/template/UpdatedAppointmentTemplate.html
new file mode 100644
index 0000000..1d6bd28
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/UpdatedAppointmentTemplate.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<span wicket:id="titleLbl"></span>&nbsp;<span wicket:id="title"></span>
+	<div wicket:id="descContainer">
+		<br/>
+		<span wicket:id="descLbl"></span><br/>
+		&nbsp;<span wicket:id="desc"></span>
+	</div>
+	<br/>
+	<span wicket:id="startLbl"></span>&nbsp;<span wicket:id="start"></span><br/>
+	<span wicket:id="endLbl"></span>&nbsp;<span wicket:id="end"></span><br/>
+	<span wicket:id="invitorLbl"></span>&nbsp;<span wicket:id="invitor"></span><br/>
+</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/mail/template/UpdatedAppointmentTemplate.java b/src/web/java/org/apache/openmeetings/web/mail/template/UpdatedAppointmentTemplate.java
new file mode 100644
index 0000000..5882dbe
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/mail/template/UpdatedAppointmentTemplate.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.mail.template;
+
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.util.string.Strings;
+
+public class UpdatedAppointmentTemplate extends AbstractAppointmentTemplate {
+	private static final long serialVersionUID = 1L;
+
+	private UpdatedAppointmentTemplate(Long langId, Appointment a, TimeZone tz, String invitorName) {
+		super(langId, a, tz);
+
+		add(new Label("titleLbl", Application.getString(1155L, langId)));
+		add(new Label("title", a.getTitle()));
+		add(new WebMarkupContainer("descContainer")
+			.add(new Label("descLbl", Application.getString(1152L, langId)))
+			.add(new Label("desc", a.getDescription()).setEscapeModelStrings(false))
+			.setVisible(!Strings.isEmpty(a.getDescription()))
+			);
+		add(new Label("startLbl", Application.getString(1153L, langId)));
+		add(new Label("start", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz)));
+		add(new Label("endLbl", Application.getString(1154L, langId)));
+		add(new Label("end", CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz)));
+		add(new Label("invitorLbl", Application.getString(1156L, langId)));
+		add(new Label("invitor", invitorName));
+	}
+	
+	public static UpdatedAppointmentTemplate get(Long langId, Appointment a, TimeZone tz, String invitorName) {
+		ensureApplication(langId);
+		return new UpdatedAppointmentTemplate(langId, a, tz, invitorName);
+	}
+
+	@Override
+	public String getSubject() {
+		StringBuilder sb = new StringBuilder();
+		sb.append(Application.getString(1155L, langId)).append(" ").append(a.getTitle())
+			.append(" ").append(CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getStart(), tz))
+			.append(" - ").append(CalendarPatterns.getDateWithTimeByMiliSecondsAndTimeZone(a.getEnd(), tz));
+
+		return sb.toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/ActivatePage.java b/src/web/java/org/apache/openmeetings/web/pages/ActivatePage.java
new file mode 100644
index 0000000..da13327
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/ActivatePage.java
@@ -0,0 +1,49 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.pages;

+

+import java.util.Date;

+

+import org.apache.openmeetings.db.dao.user.UserDao;

+import org.apache.openmeetings.db.entity.user.User;

+import org.apache.openmeetings.db.entity.user.User.Right;

+import org.apache.openmeetings.util.AuthLevelUtil;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.wicket.request.mapper.parameter.PageParameters;

+

+public class ActivatePage extends BaseNotInitedPage {

+	private static final long serialVersionUID = 1L;

+	public static final String ACTIVATION_PARAM = "u";

+	

+	public ActivatePage(PageParameters pp) {

+		String userHash = pp.get(ACTIVATION_PARAM).toString();

+		if (userHash != null) {

+			User user = Application.getBean(UserDao.class).getUserByActivationHash(userHash);

+

+			if (user != null && !AuthLevelUtil.hasLoginLevel(user.getRights())) {

+				// activate

+				user.getRights().add(Right.Login);

+				user.setUpdatetime(new Date());

+

+				Application.getBean(UserDao.class).update(user, null);

+			}

+		}

+		setResponsePage(Application.get().getSignInPageClass());

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/pages/BaseInitedPage.java b/src/web/java/org/apache/openmeetings/web/pages/BaseInitedPage.java
new file mode 100644
index 0000000..45f1708
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/BaseInitedPage.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.util.FormatHelper;
+
+public abstract class BaseInitedPage extends BasePage {
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	protected String getApplicationName() {
+		return getBean(ConfigurationDao.class).getAppName();
+	}
+	
+	@Override
+	protected String getLanguageCode() {
+		return WebSession.get().getLocale().toLanguageTag();
+	}
+	
+	@Override
+	public boolean isRtl() {
+		return FormatHelper.isRtlLanguage(getLanguageCode());
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/BaseNotInitedPage.java b/src/web/java/org/apache/openmeetings/web/pages/BaseNotInitedPage.java
new file mode 100644
index 0000000..8a50115
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/BaseNotInitedPage.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import org.apache.openmeetings.installation.InstallationConfig;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.util.FormatHelper;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.request.IRequestParameters;
+
+public abstract class BaseNotInitedPage extends BasePage {
+	private static final long serialVersionUID = 5716753033219700254L;
+	private static final InstallationConfig installCfg = new InstallationConfig(); 
+
+	@Override
+	protected String getApplicationName() {
+		return installCfg.appName;
+	}
+	
+	@Override
+	protected String getLanguageCode() {
+		return WebSession.get().getLocale().getCountry();
+	}
+	
+	@Override
+	public boolean isRtl() {
+		boolean rtl = false;
+		if (Application.isInstalled()) {
+			rtl = FormatHelper.isRtlLanguage(WebSession.get().getLocale().toString());
+		}
+		return rtl;
+	}
+	
+	@Override
+	protected void onParameterArrival(IRequestParameters arg0, AjaxRequestTarget arg1) {
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/BasePage.html b/src/web/java/org/apache/openmeetings/web/pages/BasePage.html
new file mode 100644
index 0000000..c5a002c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/BasePage.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org" wicket:id="html">
+	<head>
+		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
+		<wicket:header-items/>
+		<link rel="shortcut icon" href="public/favicon.ico" type="image/x-icon"/>
+		<title wicket:id="pageTitle">[title]</title>
+		<link media="screen" type="text/css" rel="stylesheet" href="css/theme.css"/>
+		<link media="screen" type="text/css" rel="stylesheet" href="css/forms.css"/>
+		<link media="screen" type="text/css" rel="stylesheet" href="css/calendar.css"/>
+		<link media="screen" type="text/css" rel="stylesheet" href="css/admin.css"/>
+	</head>
+	<body>
+		<div wicket:id="header"></div>
+		<wicket:child />
+	</body>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/BasePage.java b/src/web/java/org/apache/openmeetings/web/pages/BasePage.java
new file mode 100644
index 0000000..3dde020
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/BasePage.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.HeaderPanel;
+import org.apache.openmeetings.web.util.OmUrlFragment;
+import org.apache.openmeetings.web.util.OmUrlFragment.AreaKeys;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.RuntimeConfigurationType;
+import org.apache.wicket.markup.head.CssHeaderItem;
+import org.apache.wicket.markup.head.CssReferenceHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.PriorityHeaderItem;
+import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.util.string.StringValue;
+import org.wicketstuff.urlfragment.AsyncUrlFragmentAwarePage;
+
+public abstract class BasePage extends AsyncUrlFragmentAwarePage {
+	private static final long serialVersionUID = 1L;
+	private final Map<String, String> options;
+
+	public abstract boolean isRtl();
+	protected abstract String getLanguageCode();
+	protected abstract String getApplicationName();
+	
+	public BasePage() {
+		options = new HashMap<String, String>();
+		options.put("fragmentIdentifierSuffix", "");
+		options.put("keyValueDelimiter", "/");
+		String appName = getApplicationName();
+
+		String code = getLanguageCode();
+		add(new TransparentWebMarkupContainer("html")
+	    	.add(new AttributeModifier("xml:lang", code))
+	    	.add(new AttributeModifier("lang", code))
+	    	.add(new AttributeModifier("dir", isRtl() ? "rtl" : "ltr"))); 
+		add(new Label("pageTitle", appName));
+		add(new HeaderPanel("header", appName));
+	}
+	
+	protected OmUrlFragment getUrlFragment(IRequestParameters params) {
+		for (AreaKeys key : AreaKeys.values()) {
+			StringValue type = params.getParameterValue(key.name());
+			if (!type.isEmpty()) {
+				return new OmUrlFragment(key, type.toString());
+			}
+		}
+		return null;
+	}
+	
+	@Override
+	protected Map<String, String> getOptions() {
+		return options;
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(Application.get().getJavaScriptLibrarySettings().getJQueryReference())));
+		super.renderHead(response);
+		response.render(CssReferenceHeaderItem.forUrl(String.format("css/theme_om/jquery-ui-1.11.4.custom.%scss"
+				, RuntimeConfigurationType.DEVELOPMENT == getApplication().getConfigurationType() ? "" : "min.")));
+		if (isRtl()) {
+			response.render(CssHeaderItem.forUrl("css/theme-rtl.css"));
+			response.render(CssHeaderItem.forUrl("css/admin-rtl.css"));
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/MainPage.html b/src/web/java/org/apache/openmeetings/web/pages/MainPage.html
new file mode 100644
index 0000000..6788cfe
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/MainPage.html
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+		<script type="text/javascript">
+			function showBusyIndicator() {
+				$('#busy_indicator').show();
+			}
+			function hideBusyIndicator() {
+				$('#busy_indicator').hide();
+			}
+		</script>
+	</wicket:head>
+	<wicket:extend>
+		<script type="text/javascript">
+			$(function() {
+				Wicket.Event.subscribe('/ajax/call/failure', hideBusyIndicator);
+				Wicket.Event.subscribe('/ajax/call/before', showBusyIndicator);
+				Wicket.Event.subscribe('/ajax/call/success', hideBusyIndicator);
+				Wicket.Event.subscribe('/ajax/call/complete', hideBusyIndicator);
+			});
+		</script>
+		<div id="topControls">
+			<div id="topLinks"><span 
+				id="contactsAndMessages"><a wicket:id="messages"><wicket:message key="1188"/></a></span><span 
+				id="profile"><a wicket:id="profile"><wicket:message key="5"/></a></span><span 
+				id="logout"><a wicket:id="logout" href="#"><wicket:message key="310"/></a></span><span 
+				id="reportBug"><a target="_blank" wicket:id="bug"><wicket:message key="284"/></a></span><span><a 
+				wicket:id="about"><wicket:message key="1549"/></a></span>
+				</div>
+			<div wicket:id="dev" id="devMenu"/>
+			<div id="busy_indicator"><wicket:message key="1554"/></div>
+			<div wicket:id="menu"></div>
+		</div>
+		<div wicket:id="contents"><div wicket:id="child"></div></div>
+		<div wicket:id="chatPanel"></div>
+		<div wicket:id="aboutDialog"></div>
+	</wicket:extend>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/pages/MainPage.java b/src/web/java/org/apache/openmeetings/web/pages/MainPage.java
new file mode 100644
index 0000000..c27beb3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/MainPage.java
@@ -0,0 +1,190 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.addOnlineUser;
+import static org.apache.openmeetings.web.app.Application.getClientByKeys;
+import static org.apache.openmeetings.web.app.Application.removeOnlineUser;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.util.OmUrlFragment.CHILD_ID;
+import static org.apache.openmeetings.web.util.OmUrlFragment.PROFILE_EDIT;
+import static org.apache.openmeetings.web.util.OmUrlFragment.PROFILE_MESSAGES;
+import static org.apache.openmeetings.web.util.OmUrlFragment.getPanel;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebClient;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.BasePanel;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
+import org.apache.openmeetings.web.common.MenuPanel;
+import org.apache.openmeetings.web.user.AboutDialog;
+import org.apache.openmeetings.web.user.ChatPanel;
+import org.apache.openmeetings.web.util.OmUrlFragment;
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
+import org.apache.wicket.ajax.AjaxClientInfoBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.devutils.debugbar.DebugBar;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.link.ExternalLink;
+import org.apache.wicket.markup.html.panel.EmptyPanel;
+import org.apache.wicket.protocol.ws.api.WebSocketBehavior;
+import org.apache.wicket.protocol.ws.api.message.ClosedMessage;
+import org.apache.wicket.protocol.ws.api.message.ConnectedMessage;
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.time.Duration;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.wicketstuff.urlfragment.UrlFragment;
+
+@AuthorizeInstantiation({"Admin", "Dashboard", "Room"})
+public class MainPage extends BaseInitedPage {
+	private static final long serialVersionUID = 6421960759218157999L;
+	private static final Logger log = Red5LoggerFactory.getLogger(MainPage.class, webAppRootKey);
+	private final MenuPanel menu;
+	private final MarkupContainer contents;
+	private final AbstractAjaxTimerBehavior areaBehavior;
+	private final Component dev;
+	
+	public MainPage(PageParameters pp) {
+		super();
+		add(new AjaxClientInfoBehavior());
+		contents = new WebMarkupContainer("contents");
+		add(contents.add(new WebMarkupContainer(CHILD_ID)).setOutputMarkupId(true).setMarkupId("contents"));
+		menu = new MenuPanel("menu");
+		add(menu);
+		add(new AjaxLink<Void>("messages") {
+			private static final long serialVersionUID = 4065339709905366840L;
+
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				updateContents(PROFILE_MESSAGES, target);
+			}
+		});
+		add(new ConfirmableAjaxBorder("logout", getString("310"), getString("634")) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				getSession().invalidate();
+				setResponsePage(Application.get().getSignInPageClass());
+			}
+		});
+		add(new AjaxLink<Void>("profile") {
+			private static final long serialVersionUID = 4065339709905366840L;
+
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				updateContents(PROFILE_EDIT, target);
+			}
+		});
+		final AboutDialog about = new AboutDialog("aboutDialog");
+		add(new AjaxLink<Void>("about") {
+			private static final long serialVersionUID = 4065339709905366840L;
+
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				about.open(target);
+			}
+		});
+		add(about);
+		if (getApplication().getDebugSettings().isDevelopmentUtilitiesEnabled()) {
+		    add(dev = new DebugBar("dev"));
+		    dev.setOutputMarkupId(true);
+		} else {
+			dev = null;
+		    add(new EmptyPanel("dev").setVisible(false));
+		}		
+		add(new ExternalLink("bug", "https://issues.apache.org/jira/browse/OPENMEETINGS"));//FIXME hardcoded
+		
+		add(new ChatPanel("chatPanel"));
+		add(new WebSocketBehavior() {
+			private static final long serialVersionUID = -3311970325911992958L;
+
+			@Override
+			protected void onConnect(ConnectedMessage message) {
+				super.onConnect(message);
+				addOnlineUser(new WebClient(WebSession.get().getId(), message.getKey(), getUserId()));
+				log.debug("WebSocketBehavior::onConnect");
+			}
+			
+			@Override
+			protected void onClose(ClosedMessage message) {
+				WebClient client = getClientByKeys(getUserId(), WebSession.get().getId());
+				removeOnlineUser(client);
+				super.onClose(message);
+				log.debug("WebSocketBehavior::onClose");
+			}
+		});
+		//load preselected content
+		add(areaBehavior = new AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
+			private static final long serialVersionUID = -1551197896975384329L;
+
+			@Override
+			protected void onTimer(AjaxRequestTarget target) {
+				OmUrlFragment area = WebSession.get().getArea();
+				updateContents(area == null ? OmUrlFragment.get() : area, target);
+				stop(target);
+				WebSession.get().setArea(null);
+			}
+		});
+	}
+	
+	public void updateContents(OmUrlFragment f, IPartialPageRequestHandler target) {
+		updateContents(f, target, true);
+	}
+	
+	public void updateContents(OmUrlFragment f, IPartialPageRequestHandler target, boolean updateFragment) {
+		BasePanel panel = getPanel(f.getArea(), f.getType());
+		if (panel != null) {
+			Component prev = contents.get(CHILD_ID);
+			if (prev != null && prev instanceof BasePanel) {
+				((BasePanel)prev).cleanup(target);
+			}
+			target.add(contents.replace(panel));
+			if (updateFragment) {
+				UrlFragment uf = new UrlFragment(target);
+				uf.set(f.getArea().name(), f.getType());
+			}
+			panel.onMenuPanelLoad(target);
+		}
+		/* FIXME commented until wicket 7.2.0 will be released
+		   TODO check if this call is necessary
+		if (dev != null){
+			target.add(dev);
+		}
+		*/
+	}
+	
+	@Override
+	protected void onParameterArrival(IRequestParameters params, AjaxRequestTarget target) {
+		OmUrlFragment uf = getUrlFragment(params);
+		if (uf != null) {
+			areaBehavior.stop(target);
+			updateContents(uf, target, false);
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/NotInitedPage.html b/src/web/java/org/apache/openmeetings/web/pages/NotInitedPage.html
new file mode 100644
index 0000000..3171a21
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/NotInitedPage.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+<wicket:extend>

+	<!-- FIXME localized versions of this file need to be created -->

+	<div class="message">

+		<b>OpenMeetings - Loading ...</b><br />

+		The server is not yet completely initialized. Please try again in a couple of seconds.<br/>

+		If this message persists for several minutes contact your Sys-Administration.<br/>

+		If that message stays forever you should check the logs located in 

+		<pre>openmeetings_install_dir/log</pre> folder, probably your database user/pwd/host is wrong!

+	</div>

+</wicket:extend>

+</html>

diff --git a/src/web/java/org/apache/openmeetings/web/pages/NotInitedPage.java b/src/web/java/org/apache/openmeetings/web/pages/NotInitedPage.java
new file mode 100644
index 0000000..fe82fd5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/NotInitedPage.java
@@ -0,0 +1,35 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.pages;

+

+import org.apache.openmeetings.util.InitializationContainer;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.wicket.RestartResponseException;

+

+public class NotInitedPage extends BaseNotInitedPage {

+	private static final long serialVersionUID = 5002281516467955607L;

+	

+	public NotInitedPage() {

+		if (InitializationContainer.initComplete) {

+			continueToOriginalDestination();

+			// Ups, no original destination. Go to the home page

+			throw new RestartResponseException(Application.get().getHomePage());

+		}

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.html b/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.html
new file mode 100644
index 0000000..2c80d35
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<div class="page recording">
+		<div wicket:id="info"></div>
+		<div wicket:id="player"></div>
+	</div>
+</wicket:extend>
+</html>
+
diff --git a/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.java b/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.java
new file mode 100644
index 0000000..ab1d546
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/RecordingPage.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getRecordingId;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.user.record.VideoInfo;
+import org.apache.openmeetings.web.user.record.VideoPlayer;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+
+public class RecordingPage extends BaseInitedPage {
+	private static final long serialVersionUID = 1L;
+
+	public RecordingPage(PageParameters p) {
+		String hash = p.get("hash").toString();
+		FlvRecording r = null;
+		if (WebSession.get().signIn(hash)) {
+			Long recId = getRecordingId();
+			if (recId != null) {
+				r = getBean(FlvRecordingDao.class).get(recId);
+			}
+		}
+		add(new VideoInfo("info", r).setVisible(r != null), new VideoPlayer("player", r).setVisible(r != null));
+	}
+
+	@Override
+	protected void onParameterArrival(IRequestParameters requestParameters, AjaxRequestTarget target) {
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/ResetPage.html b/src/web/java/org/apache/openmeetings/web/pages/ResetPage.html
new file mode 100644
index 0000000..4f6d993
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/ResetPage.html
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+	<wicket:extend>

+		<div wicket:id="resetPassword"></div>

+	</wicket:extend>

+</html>

diff --git a/src/web/java/org/apache/openmeetings/web/pages/ResetPage.java b/src/web/java/org/apache/openmeetings/web/pages/ResetPage.java
new file mode 100644
index 0000000..a341ddb
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/ResetPage.java
@@ -0,0 +1,45 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.pages;

+

+import org.apache.openmeetings.db.dao.user.UserDao;

+import org.apache.openmeetings.db.entity.user.User;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.openmeetings.web.pages.auth.ResetPasswordDialog;

+import org.apache.wicket.request.mapper.parameter.PageParameters;

+

+public class ResetPage extends BaseNotInitedPage {

+	private static final long serialVersionUID = 1L;	

+	private final String RESET_PARAM = "hash";

+	

+	public ResetPage(PageParameters pp){

+		String resetHash = pp.get(RESET_PARAM).toString();

+		if (resetHash != null){

+			Object user = Application.getBean(UserDao.class).getUserByHash(resetHash);

+			if (user instanceof User){

+				add(new ResetPasswordDialog("resetPassword", (User)user));

+			}else {

+				setResponsePage(Application.get().getSignInPageClass());		

+			}

+		} else {

+			setResponsePage(Application.get().getSignInPageClass());		

+		}

+	}

+

+}

diff --git a/src/web/java/org/apache/openmeetings/web/pages/SwfPage.html b/src/web/java/org/apache/openmeetings/web/pages/SwfPage.html
new file mode 100644
index 0000000..481a297
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/SwfPage.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:head>
+	<meta http-equiv="cache-control" content="no-cache">
+	
+	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+	<style type="text/css">
+		html,body { /* http://www.quirksmode.org/css/100percheight.html */
+			height: 100%;
+			/* prevent scrollbars */
+			margin: 0;
+			padding: 0;
+			border: 0 none;
+			overflow: hidden;
+		}
+		body {
+			background-color: #ffffff;
+		}
+		img {
+			border: 0 none;
+		}
+	</style>
+</wicket:head>
+<wicket:extend>
+<!-- <body style="width: 100%; height: 100%;"> -->
+	<div wicket:id="room" style="width: 100%; height: 100%;"></div>
+<!--  </body> -->
+</wicket:extend>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/pages/SwfPage.java b/src/web/java/org/apache/openmeetings/web/pages/SwfPage.java
new file mode 100644
index 0000000..4cc444e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/SwfPage.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.SECURE_HASH;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.server.SOAPLoginDao;
+import org.apache.openmeetings.db.entity.server.SOAPLogin;
+import org.apache.openmeetings.web.room.RoomPanel;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.string.StringValue;
+
+public class SwfPage extends BaseNotInitedPage {
+	private static final long serialVersionUID = 1L;
+
+	public SwfPage() {
+		this(new PageParameters());
+	}
+
+	public SwfPage(PageParameters pp) {
+		StringValue shash = pp.get(SECURE_HASH);
+		if (!shash.isEmpty()) {
+			SOAPLogin soapLogin = getBean(SOAPLoginDao.class).get(shash.toString());
+			Long roomId = soapLogin.getRoom_id();
+			if (roomId != null) {
+				pp = pp.mergeWith(RoomPanel.addServer(roomId, false));
+			}
+		}
+		add(new RoomPanel("room", pp));
+	}
+
+	@Override
+	protected String getApplicationName() {
+		return getBean(ConfigurationDao.class).getAppName();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.html b/src/web/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.html
new file mode 100644
index 0000000..6dc458b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.html
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form wicket:id="form">
+		<table>
+			<tr wicket:id="type">
+				<td>
+					<label wicket:for="email"><wicket:message key="313" /></label>&nbsp;<input
+						type="radio" wicket:id="email" />
+				</td>
+				<td>
+					<label wicket:for="login"><wicket:message key="314" /></label>&nbsp;<input
+						type="radio" wicket:id="login" />
+				</td>
+			</tr>
+			<tr>
+				<td><span wicket:id="label"></span></td>
+				<td><input wicket:id="name" type="text" /></td>
+			</tr>
+		</table>
+		<span wicket:id="feedback"></span>
+		<input type="submit" wicket:id="submit" class="invisible-form-component"/>
+	</form>
+	<div wicket:id="confirmDialog"></div>
+</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java b/src/web/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java
new file mode 100644
index 0000000..5f22cbc
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/ForgetPasswordDialog.java
@@ -0,0 +1,255 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.auth;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.mail.MailHandler;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.mail.template.ResetPasswordTemplate;
+import org.apache.openmeetings.web.pages.ResetPage;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.Radio;
+import org.apache.wicket.markup.html.form.RadioGroup;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.panel.FeedbackPanel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
+
+public class ForgetPasswordDialog extends AbstractFormDialog<String> {
+	private static final Logger log = Red5LoggerFactory.getLogger(ForgetPasswordDialog.class, webAppRootKey);
+	private static final long serialVersionUID = 1L;
+	private String sendLbl = Application.getString(317);
+	private DialogButton send = new DialogButton("send", sendLbl);
+	private DialogButton cancel = new DialogButton("cancel", Application.getString(122));
+	private FeedbackPanel feedback = new FeedbackPanel("feedback");
+	private RequiredTextField<String> nameField;
+	private Form<String> form;
+	private SignInDialog s;
+	private String name;
+	private Type type = Type.email;
+    final MessageDialog confirmDialog;
+	
+	enum Type {
+		email
+		, login
+	}
+	
+	public ForgetPasswordDialog(String id) {
+		super(id, Application.getString(312));
+		add(form = new Form<String>("form") {
+			private static final long serialVersionUID = 1L;
+			private IModel<String> lblModel = Model.of(Application.getString(315));
+			private Label label = new Label("label", lblModel);
+			
+			{
+				add(feedback.setOutputMarkupId(true));
+				add(label.setOutputMarkupId(true));
+				add(nameField = new RequiredTextField<String>("name", new PropertyModel<String>(ForgetPasswordDialog.this, "name")));
+				nameField.setLabel(Model.of(Application.getString(type == Type.email ? 315 : 316)));
+				RadioGroup<Type> rg = new RadioGroup<Type>("type", new PropertyModel<Type>(ForgetPasswordDialog.this, "type"));
+				add(rg.add(new Radio<Type>("email", Model.of(Type.email)).setOutputMarkupId(true))
+						.add(new Radio<Type>("login", Model.of(Type.login)).setOutputMarkupId(true))
+						.setOutputMarkupId(true));
+				rg.add(new AjaxFormChoiceComponentUpdatingBehavior() {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onUpdate(AjaxRequestTarget target) {
+						lblModel.setObject(Application.getString(type == Type.email ? 315 : 316));
+						nameField.setLabel(Model.of(Application.getString(type == Type.email ? 315 : 316)));
+						target.add(label);
+					}
+				});
+				add(new AjaxButton("submit") { //FAKE button so "submit-on-enter" works as expected
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+						ForgetPasswordDialog.this.onSubmit(target);
+					}
+					
+					@Override
+					protected void onError(AjaxRequestTarget target, Form<?> form) {
+						ForgetPasswordDialog.this.onError(target);
+					}
+				});
+			}
+			
+			@Override
+			protected void onValidate() {
+				UserDao dao = getBean(UserDao.class);
+				String n = nameField.getConvertedInput();
+				if (n != null) {
+					if (type == Type.email && null == dao.getByEmail(n)) {
+						error(Application.getString(318));
+					}
+					if (type == Type.login && null == dao.getByLogin(n, User.Type.user, null)) {
+						error(Application.getString(320));
+					}
+				}
+			}
+			
+			@Override
+			protected void onDetach() {
+				lblModel.detach();
+				super.onDetach();
+			}
+		});
+		confirmDialog = new MessageDialog("confirmDialog", Application.getString(312), Application.getString(321), DialogButtons.OK, DialogIcon.INFO){
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onConfigure(JQueryBehavior behavior) {
+				super.onConfigure(behavior);
+		        behavior.setOption("dialogClass", Options.asString("no-close"));
+				behavior.setOption("closeOnEscape", false);
+			}
+			
+			public void onClose(IPartialPageRequestHandler target, DialogButton button) {
+				s.open(target);
+			}
+		};
+		add(confirmDialog);
+	}
+
+	@Override
+	public boolean isDefaultCloseEventEnabled()	{
+		return true;
+	}
+	
+	public void onClose(AjaxRequestTarget target, DialogButton button) {
+		if (send.equals(button)){
+			confirmDialog.open(target);
+		} else {
+			s.open(target);
+		}
+	}
+
+	public void setSignInDialog(SignInDialog s) {
+		this.s = s;
+	}
+	
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(send, cancel);
+	}
+	
+	@Override
+	protected DialogButton getSubmitButton() {
+		return send;
+	}
+
+	@Override
+	public Form<?> getForm() {
+		return form;
+	}
+
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		resetUser(type == Type.email ? name : "", type == Type.login ? name : ""
+			, getBean(ConfigurationDao.class).getBaseUrl() + getRequestCycle().urlFor(ResetPage.class, new PageParameters()).toString().substring(2));
+	}
+
+	/**
+	 * reset a username by a given mail oder login by sending a mail to the
+	 * registered EMail-Address
+	 * 
+	 * @param email
+	 * @param username
+	 * @param appLink
+	 * @return
+	 */
+	private Long resetUser(String email, String username, String appLink) {
+		try {
+			UserDao userDao = getBean(UserDao.class);
+			log.debug("resetUser " + email);
+
+			// check if Mail given
+			if (email.length() > 0) {
+				// log.debug("getAdresses_id "+addr_e.getAdresses_id());
+				User us = userDao.getByEmail(email);
+				if (us != null) {
+					sendHashByUser(us, appLink, userDao);
+					return new Long(-4);
+				} else {
+					return new Long(-9);
+				}
+			} else if (username.length() > 0) {
+				User us = userDao.getByLogin(username, User.Type.user, null);
+				if (us != null) {
+					sendHashByUser(us, appLink, userDao);
+					return new Long(-4);
+				} else {
+					return new Long(-3);
+				}
+			}
+		} catch (Exception e) {
+			log.error("[resetUser]", e);
+			return new Long(-1);
+		}
+		return new Long(-2);
+	}
+
+	private void sendHashByUser(User us, String appLink, UserDao userDao) throws Exception {
+		String loginData = us.getLogin() + new Date();
+		log.debug("User: " + us.getLogin());
+		us.setResethash(ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(loginData));
+		userDao.update(us, -1L);
+		String reset_link = appLink + "?hash=" + us.getResethash();
+
+		String email = us.getAdresses().getEmail();
+
+		String template = ResetPasswordTemplate.getEmail(reset_link);
+
+		getBean(MailHandler.class).send(email, Application.getString(517), template);
+	}
+
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.html b/src/web/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.html
new file mode 100644
index 0000000..1163346
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.html
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+	<wicket:panel>

+		<table>

+			<tr>

+				<td wicket:id="message">[message]</td>

+			</tr>

+		</table>

+	</wicket:panel>

+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java b/src/web/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java
new file mode 100644
index 0000000..fb4a7b9
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/KickMessageDialog.java
@@ -0,0 +1,70 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.pages.auth;

+

+import org.apache.openmeetings.web.app.Application;

+import org.apache.openmeetings.web.app.WebSession;

+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;

+import org.apache.wicket.markup.html.basic.Label;

+

+import com.googlecode.wicket.jquery.core.JQueryBehavior;

+import com.googlecode.wicket.jquery.core.Options;

+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;

+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;

+

+public class KickMessageDialog extends AbstractDialog<String> {

+	private static final long serialVersionUID = 1L;

+

+	public KickMessageDialog(String id) {

+		super(id, "");

+		add(new Label("message", Application.getString(606)));

+	}

+

+	@Override

+	protected void onInitialize() {

+		super.onInitialize();

+		add(new JQueryBehavior(JQueryWidget.getSelector(this), "dialog") {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+            protected String $()  {

+                return this.$(Options.asString("open"));

+            }

+        });

+	};

+	

+	@Override

+	public void onConfigure(JQueryBehavior behavior) {

+		super.onConfigure(behavior);

+		behavior.setOption("closeOnEscape", false);

+        behavior.setOption("dialogClass", Options.asString("no-close"));

+        behavior.setOption("resizable", false);

+	}

+

+	public String getOnClickJavaScript() {

+		return "$('#" + getButtons().get(0).getMarkupId() +"').click(function(e){$('#" + getMarkupId() +"').close(); })";

+	}

+

+	@Override

+	public void onClose(IPartialPageRequestHandler target, DialogButton button) {

+		WebSession.setKickedByAdmin(false);

+		Application.get().restartResponseAtSignInPage();

+	}

+

+}

diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.html b/src/web/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.html
new file mode 100644
index 0000000..3f9cf22
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.html
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form wicket:id="form">
+		<table>
+			<tr>
+				<td class="desc"><wicket:message key="117" /></td>
+				<td><input wicket:id="firstName" type="text" value="" /></td>
+			</tr>
+			<tr>
+				<td class="desc"><wicket:message key="118" /></td>
+				<td><input wicket:id="lastName" type="text" value="" /></td>
+			</tr>
+			<tr>
+				<td class="desc"><wicket:message key="114" /></td>
+				<td><input wicket:id="login" type="text" value="" /></td>
+			</tr>
+			<tr>
+				<td class="desc"><wicket:message key="115" /></td>
+				<td><input wicket:id="password" type="password" value="" /></td>
+			</tr>
+			<tr>
+				<td class="desc"><wicket:message key="116" /></td>
+				<td><input wicket:id="confirmPassword" type="password" value="" /></td>
+			</tr>
+			<tr>
+				<td class="desc"><wicket:message key="119" /></td>
+				<td><input wicket:id="email" type="text" value="" /></td>
+			</tr>
+			<tr>
+				<td class="desc"><wicket:message key="1143" /></td>
+				<td><select wicket:id="tz"></select></td>
+			</tr>
+			<tr>
+				<td class="desc"><wicket:message key="120" /></td>
+				<td><select wicket:id="state"></select></td>
+			</tr>
+			<tr>
+				<td class="desc"><wicket:message key="111" /></td>
+				<td><select wicket:id="lang"></select></td>
+			</tr>
+		</table>
+		<span wicket:id="feedback"></span>
+		<input type="submit" wicket:id="submit" class="invisible-form-component"/>
+	</form>
+	<div wicket:id="confirmRegistration"></div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java b/src/web/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
new file mode 100644
index 0000000..8da36b8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/RegisterDialog.java
@@ -0,0 +1,289 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.auth;
+
+import static org.apache.openmeetings.db.util.UserHelper.getMinLoginLength;
+import static org.apache.openmeetings.db.util.UserHelper.getMinPasswdLength;
+import static org.apache.openmeetings.util.CalendarPatterns.getDateWithTimeByMiliSeconds;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_GROUP_ID;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.util.crypt.ManageCryptStyle.getInstanceOfCrypt;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.AVAILABLE_TIMEZONES;
+import static org.apache.wicket.validation.validator.StringValidator.minimumLength;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.TimeZone;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.user.IUserManager;
+import org.apache.openmeetings.db.dao.user.StateDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.State;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.LanguageDropDown;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.StatelessForm;
+import org.apache.wicket.markup.html.panel.FeedbackPanel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
+
+public class RegisterDialog extends AbstractFormDialog<String> {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(RegisterDialog.class, webAppRootKey);
+	private DialogButton cancelBtn = new DialogButton("cancel", Application.getString(122));
+	private DialogButton registerBtn = new DialogButton("register", Application.getString(121));
+	private FeedbackPanel feedback = new FeedbackPanel("feedback");
+	private final IModel<String> tzModel = Model.of(WebSession.get().getClientTZCode());
+	private final DropDownChoice<String> tzDropDown = new DropDownChoice<String>("tz", tzModel, AVAILABLE_TIMEZONES);
+	private RegisterForm form;
+	private SignInDialog s;
+	private String firstName;
+	private String lastName;
+	private String login;
+	private String password;
+	private String email;
+	private State state;
+	private Long lang;
+
+	final MessageDialog confirmRegistration;
+	private boolean sendConfirmation = false;
+	private boolean sendEmailAtRegister = false;
+
+	public RegisterDialog(String id) {
+		super(id, Application.getString(113));
+		add(form = new RegisterForm("form"));
+		form.setOutputMarkupId(true);
+		tzDropDown.setOutputMarkupId(true);
+
+		confirmRegistration = new MessageDialog("confirmRegistration", Application.getString(235),
+				Application.getString(674), DialogButtons.OK, DialogIcon.INFO) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onConfigure(JQueryBehavior behavior) {
+				super.onConfigure(behavior);
+				behavior.setOption("dialogClass", Options.asString("no-close"));
+				behavior.setOption("closeOnEscape", false);
+			}
+
+			@Override
+			public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
+				s.open(handler);
+			}
+		};
+		add(confirmRegistration);
+		reset();
+	}
+
+	@Override
+	public void onConfigure(JQueryBehavior behavior) {
+		super.onConfigure(behavior);
+		behavior.setOption("dialogClass", Options.asString("no-close"));
+		behavior.setOption("closeOnEscape", false);
+	}
+
+	public void setSignInDialog(SignInDialog s) {
+		this.s = s;
+	}
+
+	public void setClientTimeZone() {
+		tzModel.setObject(WebSession.get().getClientTZCode());
+	}
+	
+	@Override
+	public int getWidth() {
+		return 400;
+	}
+
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(registerBtn, cancelBtn);
+	}
+
+	public void reset() {
+		firstName = null;
+		lastName = null;
+		login = null;
+		password = null;
+		form.confirmPassword.setModelObject(null);
+		email = null;
+		lang = WebSession.get().getLanguageByBrowserLocale();
+		state = WebSession.get().getCountryByBrowserLocale();
+	}
+
+	public void onOpen(AjaxRequestTarget target) {
+		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+		String baseURL = cfgDao.getBaseUrl();
+		sendEmailAtRegister = 1 == cfgDao.getConfValue("sendEmailAtRegister", Integer.class, "0");
+		sendConfirmation = !Strings.isEmpty(baseURL)
+				&& 1 == cfgDao.getConfValue("sendEmailWithVerficationCode", Integer.class, "0");
+		long messageCode = 236;
+		if (sendConfirmation && sendEmailAtRegister) {
+			messageCode = 674;
+		} else if (sendConfirmation) {
+			messageCode = 1591;
+		}
+		confirmRegistration.setModelObject(Application.getString(messageCode));
+		reset();
+		target.add(form);
+	}
+
+	public void onClose(AjaxRequestTarget target, DialogButton button) {
+		if (!registerBtn.equals(button)) {
+			s.open(target);
+		}
+	}
+
+	@Override
+	protected DialogButton getSubmitButton() {
+		return registerBtn;
+	}
+
+	@Override
+	public Form<Void> getForm() {
+		return form;
+	}
+
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		String hash = getInstanceOfCrypt().createPassPhrase(login + getDateWithTimeByMiliSeconds(new Date()));
+
+		try {
+			getBean(IUserManager.class).registerUserInit(UserDao.getDefaultRights(), login, password, lastName
+					, firstName, email, null /* age/birthday */, "" /* street */
+					, "" /* additionalname */, "" /* fax */, "" /* zip */, state.getState_id()
+					, "" /* town */, lang, true /* sendWelcomeMessage */
+					, Arrays.asList(getBean(ConfigurationDao.class).getConfValue(CONFIG_DEFAULT_GROUP_ID, Long.class, null)),
+					"" /* phone */, false, sendConfirmation, TimeZone.getTimeZone(tzModel.getObject()),
+					false /* forceTimeZoneCheck */, "" /* userOffers */, "" /* userSearchs */, false /* showContactData */,
+					true /* showContactDataToContacts */, hash);
+
+		} catch (Exception e) {
+			log.error("[registerUser]", e);
+		}
+		confirmRegistration.open(target);
+	}
+
+	@Override
+	protected void onDetach() {
+		tzModel.detach();
+		super.onDetach();
+	}
+	
+	class RegisterForm extends StatelessForm<Void> {
+		private static final long serialVersionUID = 1L;
+		private PasswordTextField confirmPassword;
+		private PasswordTextField passwordField;
+		private RequiredTextField<String> emailField;
+		private RequiredTextField<String> loginField;
+		private RequiredTextField<String> firstNameField;
+		private RequiredTextField<String> lastNameField;
+		private LanguageDropDown langField;
+		private DropDownChoice<State> stateField;
+
+		public RegisterForm(String id) {
+			super(id);
+			add(feedback.setOutputMarkupId(true));
+			ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+			add(firstNameField = new RequiredTextField<String>("firstName", new PropertyModel<String>(
+					RegisterDialog.this, "firstName")));
+			firstNameField.setLabel(Model.of(Application.getString(117)));
+			add(lastNameField = new RequiredTextField<String>("lastName", new PropertyModel<String>(
+					RegisterDialog.this, "lastName")));
+			lastNameField.setLabel(Model.of(Application.getString(118)));
+			add(loginField = new RequiredTextField<String>("login", new PropertyModel<String>(RegisterDialog.this,
+					"login")));
+			loginField.setLabel(Model.of(Application.getString(114)));
+			loginField.add(minimumLength(getMinLoginLength(cfgDao)));
+			add(passwordField = new PasswordTextField("password", new PropertyModel<String>(RegisterDialog.this,
+					"password")));
+			passwordField.setLabel(Model.of(Application.getString(115)));
+			passwordField.setResetPassword(true).add(minimumLength(getMinPasswdLength(cfgDao)));
+			add(confirmPassword = new PasswordTextField("confirmPassword", new Model<String>()).setResetPassword(true));
+			confirmPassword.setLabel(Model.of(Application.getString(116)));
+			add(emailField = new RequiredTextField<String>("email", new PropertyModel<String>(RegisterDialog.this,
+					"email")));
+			emailField.setLabel(Model.of(Application.getString(119)));
+			emailField.add(RfcCompliantEmailAddressValidator.getInstance());
+			add(langField = new LanguageDropDown("lang", new PropertyModel<Long>(RegisterDialog.this, "lang")));
+			langField.setRequired(true).setLabel(Model.of(Application.getString(111)));
+			add(tzDropDown.setRequired(true).setLabel(Model.of(Application.getString(1143))));
+			add(stateField = new DropDownChoice<State>("state", new PropertyModel<State>(RegisterDialog.this, "state"),
+					getBean(StateDao.class).getStates(), new ChoiceRenderer<State>("name", "state_id")));
+			stateField.setRequired(true).setLabel(Model.of(Application.getString(120)));
+			add(new AjaxButton("submit") { // FAKE button so "submit-on-enter" works as expected
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+					RegisterDialog.this.onSubmit(target);
+				}
+
+				@Override
+				protected void onError(AjaxRequestTarget target, Form<?> form) {
+					RegisterDialog.this.onError(target);
+				}
+			});
+		}
+
+		@Override
+		protected void onValidate() {
+			if (passwordField.getConvertedInput() == null
+					|| !passwordField.getConvertedInput().equals(confirmPassword.getConvertedInput())) {
+				error(Application.getString(232));
+			}
+			if (!getBean(UserDao.class).checkEmail(emailField.getConvertedInput(), User.Type.user, null, null)) {
+				error(Application.getString(1000));
+			}
+			if (!getBean(UserDao.class).checkLogin(loginField.getConvertedInput(), User.Type.user, null, null)) {
+				error(Application.getString(105));
+			}
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html b/src/web/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html
new file mode 100644
index 0000000..fd73713
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.html
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+<wicket:panel>

+	<form wicket:id="form">

+		<table>

+			<tr>

+				<td><label wicket:for="login"><wicket:message key="314" /></label></td>

+				<td><input type="text" readonly wicket:id="login" /></td>

+			</tr>

+			<tr>

+				<td><label><wicket:message key="328" /></label></td>

+				<td><input type="password" wicket:id="password" /></td>

+			</tr>

+			<tr>

+				<td><label><wicket:message key="329" /></label></td>

+				<td><input type="password" wicket:id="confirmPassword" /></td>

+			</tr>

+		</table>

+		<span wicket:id="feedback"></span>

+		<input type="submit" wicket:id="submit" class="invisible-form-component"/>

+	</form>

+	<div wicket:id="confirmReset"></div>

+</wicket:panel>

+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java b/src/web/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
new file mode 100644
index 0000000..1a8b96f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/ResetPasswordDialog.java
@@ -0,0 +1,186 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.pages.auth;

+

+import static org.apache.openmeetings.db.util.UserHelper.getMinPasswdLength;

+import static org.apache.openmeetings.web.app.Application.getBean;

+import static org.apache.wicket.validation.validator.StringValidator.minimumLength;

+

+import java.util.Arrays;

+import java.util.List;

+

+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;

+import org.apache.openmeetings.db.dao.user.UserDao;

+import org.apache.openmeetings.db.entity.user.User;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.ajax.markup.html.form.AjaxButton;

+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;

+import org.apache.wicket.markup.head.CssContentHeaderItem;

+import org.apache.wicket.markup.head.IHeaderResponse;

+import org.apache.wicket.markup.html.form.Form;

+import org.apache.wicket.markup.html.form.PasswordTextField;

+import org.apache.wicket.markup.html.form.TextField;

+import org.apache.wicket.markup.html.panel.FeedbackPanel;

+import org.apache.wicket.model.Model;

+

+import com.googlecode.wicket.jquery.core.JQueryBehavior;

+import com.googlecode.wicket.jquery.core.Options;

+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;

+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;

+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;

+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;

+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;

+

+public class ResetPasswordDialog extends AbstractFormDialog<String> {

+	private static final long serialVersionUID = -523469331995677748L;

+	private DialogButton resetBtn = new DialogButton("reset", Application.getString(327));

+	private Form<String> form;

+	private FeedbackPanel feedback = new FeedbackPanel("feedback");

+	private PasswordTextField password;

+	private final User user;

+    final MessageDialog confirmReset;

+

+	public ResetPasswordDialog(String id, final User user) {

+		super(id, Application.getString(325));

+		this.user = user;

+		add(form = new Form<String>("form"){

+			private static final long serialVersionUID = -4553809631029292229L;

+			private TextField<String> login;

+			private PasswordTextField confirmPassword;

+			{

+				add(feedback.setOutputMarkupId(true));

+				add(login = new TextField<String>("login", Model.of(user.getLogin())));

+				login.setOutputMarkupId(true);

+				add(password = new PasswordTextField("password", new Model<String>()));

+				password.setOutputMarkupId(true);

+				password.setLabel(Model.of(Application.getString(328)));

+				ConfigurationDao cfgDao = getBean(ConfigurationDao.class);

+				password.setRequired(false).add(minimumLength(getMinPasswdLength(cfgDao)));

+				add(confirmPassword = new PasswordTextField("confirmPassword", new Model<String>()));

+				confirmPassword.setOutputMarkupId(true);

+				confirmPassword.setLabel(Model.of(Application.getString(329)));

+				confirmPassword.setRequired(true).add(minimumLength(getMinPasswdLength(cfgDao)));

+

+				add(new AjaxButton("submit") { //FAKE button so "submit-on-enter" works as expected

+					private static final long serialVersionUID = 5257502637636428620L;

+

+					@Override

+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {

+						ResetPasswordDialog.this.onSubmit(target);

+					}

+					

+					@Override

+					protected void onError(AjaxRequestTarget target, Form<?> form) {

+						ResetPasswordDialog.this.onError(target);

+					}

+				});

+			}

+

+			@Override

+			protected void onValidate() {

+				String pass = password.getConvertedInput();

+				if (pass != null && !pass.isEmpty() && !pass.equals(confirmPassword.getConvertedInput())) {

+					error(Application.getString(232));

+				}

+				super.onValidate();

+			}

+			

+		});

+		confirmReset = new MessageDialog("confirmReset", Application.getString(325), Application.getString(332), DialogButtons.OK, DialogIcon.INFO){

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			public void onConfigure(JQueryBehavior behavior) {

+				super.onConfigure(behavior);

+		        behavior.setOption("dialogClass", Options.asString("no-close"));

+				behavior.setOption("closeOnEscape", false);

+			}

+			

+			public void onClose(IPartialPageRequestHandler target, DialogButton button) {

+				setResponsePage(Application.get().getSignInPageClass());

+			}

+		};

+		add(confirmReset);

+	}

+	

+	@Override

+	public void renderHead(IHeaderResponse response) {

+		super.renderHead(response);

+		response.render(new CssContentHeaderItem(".no-close .ui-dialog-titlebar-close { display: none; }", "dialog-noclose", ""));

+	}

+	

+	public void onConfigure(JQueryBehavior behavior) {

+		super.onConfigure(behavior);

+        behavior.setOption("dialogClass", Options.asString("no-close"));

+		behavior.setOption("closeOnEscape", false);

+	}

+

+	@Override

+	protected List<DialogButton> getButtons() {

+		return Arrays.asList(resetBtn);

+	}

+	

+	@Override

+	protected DialogButton getSubmitButton() {

+		return resetBtn;

+	}

+

+	@Override

+	public Form<?> getForm() {

+		return form;

+	}

+

+	@Override

+	protected void onError(AjaxRequestTarget target) {

+		target.add(feedback);

+	}

+

+	@Override

+	protected void onSubmit(AjaxRequestTarget target) {

+		try {

+			getBean(UserDao.class).update(user, password.getConvertedInput(), user.getUser_id());

+		} catch (Exception e) {

+			error(e.getMessage());

+		}

+	}

+	

+	@Override

+	public void onClose(IPartialPageRequestHandler target, DialogButton button) {

+		if (resetBtn.equals(button)){

+			confirmReset.open(target);

+		} else {

+			setResponsePage(Application.get().getSignInPageClass());

+		}

+	}

+	

+	@Override

+	protected void onInitialize() {

+		super.onInitialize();

+		add(new JQueryBehavior(JQueryWidget.getSelector(this), "dialog") {

+			private static final long serialVersionUID = -8870674570404919597L;

+

+			@Override

+            protected String $()

+            {

+                return this.$(Options.asString("open"));

+            }

+        });

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html b/src/web/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html
new file mode 100644
index 0000000..154cf79
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/SignInDialog.html
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:head>
+	<script type="text/javascript" src="js/openmeetings_functions.js"></script>
+</wicket:head>
+<wicket:panel>
+	<form wicket:id="signin">
+		<table>
+			<tr>
+				<td>
+					<table>
+						<tr>
+							<td class="desc"><wicket:message key="109" /></td>
+							<td><input wicket:id="login" type="text" value="" /></td>
+						</tr>
+						<tr>
+							<td class="desc"><wicket:message key="110" /></td>
+							<td><input wicket:id="pass" type="password" value="" /></td>
+						</tr>
+						<tr wicket:id="ldap">
+							<td class="desc"><wicket:message key="1372" /></td>
+							<td><select wicket:id="domain"></select></td>
+						</tr>
+						<tr>
+							<td></td>
+							<td style="white-space: nowrap;"><input wicket:id="rememberMe" 
+								type="checkbox" /><label wicket:for="rememberMe"><wicket:message key="288" /></label></td>
+						</tr>
+						<tr>
+							<td><a wicket:id="forget"><wicket:message key="311"/></a></td>
+							<td><a wicket:id="netTest" target="_blank"><wicket:message key="1527"/></a></td>
+						</tr>
+					</table>
+				</td>
+				<td wicket:id="oauthContainer" style="border-left: 2px dotted;">
+					<div wicket:id="oauthList">
+						<button wicket:id="oauthBtn"><img wicket:id="icon" width="16" height="16"/><span wicket:id="label"></span></button>
+					</div>
+				</td>
+			</tr>
+		</table>
+		<span wicket:id="feedback" class="error"></span>
+		<input type="submit" wicket:id="submit" class="invisible-form-component"/>
+	</form>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java b/src/web/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java
new file mode 100644
index 0000000..74b6c40
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/SignInDialog.java
@@ -0,0 +1,296 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.auth;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LDAP_ID;
+import static org.apache.openmeetings.web.app.Application.getAuthenticationStrategy;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.pages.auth.SignInPage.allowOAuthLogin;
+import static org.apache.openmeetings.web.pages.auth.SignInPage.allowRegister;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.basic.ErrorDao;
+import org.apache.openmeetings.db.dao.server.LdapConfigDao;
+import org.apache.openmeetings.db.dao.server.OAuth2Dao;
+import org.apache.openmeetings.db.entity.basic.ErrorValue;
+import org.apache.openmeetings.db.entity.server.LdapConfig;
+import org.apache.openmeetings.db.entity.server.OAuthServer;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.OmAuthenticationStrategy;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.pages.SwfPage;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.RestartResponseException;
+import org.apache.wicket.RuntimeConfigurationType;
+import org.apache.wicket.ajax.AjaxClientInfoBehavior;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.StatelessForm;
+import org.apache.wicket.markup.html.image.Image;
+import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.markup.html.panel.FeedbackPanel;
+import org.apache.wicket.model.AbstractReadOnlyModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.string.Strings;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.effect.JQueryEffectBehavior;
+import com.googlecode.wicket.jquery.ui.form.button.Button;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+public class SignInDialog extends AbstractFormDialog<String> {
+	private static final long serialVersionUID = 1L;
+	private Form<String> form;
+	private DialogButton loginBtn = new DialogButton("login", Application.getString(112));
+	private DialogButton registerBtn = new DialogButton("register", Application.getString(123));
+    private String password;
+    private String login;
+    private boolean rememberMe = false;
+    private RegisterDialog r;
+    private ForgetPasswordDialog f;
+    private LdapConfig domain;
+    private FeedbackPanel feedback = new FeedbackPanel("feedback");
+    
+	public SignInDialog(String id) {
+		super(id, Application.getString(108));
+		add(form = new SignInForm("signin"));
+		add(new AjaxClientInfoBehavior());
+	}
+
+	public void setRegisterDialog(RegisterDialog r) {
+		this.r = r;
+	}
+
+	public void setForgetPasswordDialog(ForgetPasswordDialog f) {
+		this.f = f;
+	}
+	
+	@Override
+	public void onConfigure(JQueryBehavior behavior) {
+		super.onConfigure(behavior);
+		behavior.setOption("autoOpen", true);
+		behavior.setOption("closeOnEscape", false);
+		behavior.setOption("dialogClass", Options.asString("no-close"));
+		behavior.setOption("resizable", false);
+	}
+	
+	@Override
+	public boolean isDefaultCloseEventEnabled() {
+		return false;
+	}
+	
+	@Override
+	public int getWidth() {
+		return allowOAuthLogin()? 550: 450;
+	}
+	
+	@Override
+	public void onClose(IPartialPageRequestHandler target, DialogButton button) {
+		if (registerBtn.equals(button)) {
+			r.setClientTimeZone();
+			r.open(target);
+		}
+	}
+	
+	@Override
+	protected List<DialogButton> getButtons() {
+		List<DialogButton> list = new ArrayList<DialogButton>();
+		if (allowRegister()) {
+			list.add(registerBtn);
+		}
+		list.add(loginBtn);
+		return list;
+	}
+	
+	@Override
+	protected DialogButton getSubmitButton() {
+		return loginBtn;
+	}
+
+	@Override
+	public Form<String> getForm() {
+		return form;
+	}
+	
+	private void shake(AjaxRequestTarget target) {
+		target.appendJavaScript(JQueryEffectBehavior.toString("#" + getMarkupId(), "shake"));
+	}
+	
+	@Override
+	public void onClick(AjaxRequestTarget target, DialogButton button) {
+		if (registerBtn.equals(button) || WebSession.get().isSignedIn()) {
+			super.onClick(target, button);
+		}
+	}
+	
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		shake(target);
+	}
+
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		if (domain.getAddDomainToUserName()) {
+			login = login + "@" + domain.getDomain();
+		}
+		OmAuthenticationStrategy strategy = getAuthenticationStrategy();
+		WebSession ws = WebSession.get();
+		Type type = domain.getLdapConfigId() > 0 ? Type.ldap : Type.user;
+		if (ws.signIn(login, password, type, domain.getLdapConfigId())) {
+ 			setResponsePage(Application.get().getHomePage());
+			if (rememberMe) {
+				strategy.save(login, password, type, domain.getLdapConfigId());
+			} else {
+				strategy.remove();
+			}
+		} else {
+			strategy.remove();
+			if (ws.getLoginError() != null) {
+				ErrorValue eValue = getBean(ErrorDao.class).get(-1 * ws.getLoginError());
+				if (eValue != null) {
+					error(Application.getString(eValue.getFieldvalues_id()));
+					target.add(feedback);
+				}
+			}
+			shake(target);
+		}
+	}
+	
+	class SignInForm extends StatelessForm<String> {
+		private static final long serialVersionUID = 1L;
+		private PasswordTextField passField;
+		private RequiredTextField<String> loginField;
+
+		public SignInForm(String id) {
+			super(id);
+			
+			if (WebSession.get().isSignedIn()) {
+				alreadyLoggedIn();
+			}
+			add(feedback.setOutputMarkupId(true));
+			add(loginField = new RequiredTextField<String>("login", new PropertyModel<String>(SignInDialog.this, "login")));
+			loginField.setLabel(Model.of(Application.getString(114)));
+			add(passField = new PasswordTextField("pass", new PropertyModel<String>(SignInDialog.this, "password")).setResetPassword(true));
+			passField.setLabel(Model.of(Application.getString(115)));
+			List<LdapConfig> ldaps = getBean(LdapConfigDao.class).get();
+			int selectedLdap = getBean(ConfigurationDao.class).getConfValue(CONFIG_DEFAULT_LDAP_ID, Integer.class, "0");
+			domain = ldaps.get(selectedLdap < ldaps.size() && selectedLdap > 0 ? selectedLdap : 0);
+			add(new WebMarkupContainer("ldap")
+				.add(new DropDownChoice<LdapConfig>("domain", new PropertyModel<LdapConfig>(SignInDialog.this, "domain")
+						, ldaps, new ChoiceRenderer<LdapConfig>("name", "ldapConfigId"))).setVisible(ldaps.size() > 1));
+			add(new CheckBox("rememberMe", new PropertyModel<Boolean>(SignInDialog.this, "rememberMe")).setOutputMarkupId(true));
+			AjaxButton ab = new AjaxButton("submit") { //FAKE button so "submit-on-enter" works as expected
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+					SignInDialog.this.onSubmit(target);
+				}
+				
+				@Override
+				protected void onError(AjaxRequestTarget target, Form<?> form) {
+					SignInDialog.this.onError(target);
+				}
+			};
+			add(ab);
+			setDefaultButton(ab);
+			add(new AjaxLink<Void>("forget") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				public void onClick(AjaxRequestTarget target) {
+					SignInDialog.this.close(target, null);
+					f.open(target);
+				}
+			});
+			add(new Link<Void>("netTest") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				public void onClick() {
+					PageParameters pp = new PageParameters();
+					pp.add("swf", RuntimeConfigurationType.DEVELOPMENT == getApplication().getConfigurationType()
+							? "networktestingdebug.swf10.swf" : "networktesting.swf10.swf");
+					setResponsePage(SwfPage.class, pp);
+				}
+			});
+			add(new WebMarkupContainer("oauthContainer").add(
+				new ListView<OAuthServer>("oauthList", getBean(OAuth2Dao.class).getActive()) {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void populateItem(final ListItem<OAuthServer> item) {
+						Button btn = new Button("oauthBtn");
+						Image icon = new Image("icon", new Model<String>());
+						icon.setVisible(!Strings.isEmpty(item.getModelObject().getIconUrl()));
+						icon.add(new AttributeModifier("src", new AbstractReadOnlyModel<String>() {
+							private static final long serialVersionUID = 1L;
+
+							@Override
+							public String getObject() {
+								return item.getModelObject().getIconUrl();
+							}
+							
+						}));
+						btn.add(icon);
+						btn.add(new Label("label", item.getModelObject().getName()))
+							.add(new AjaxEventBehavior("click") {
+								private static final long serialVersionUID = 1L;
+								
+								@Override
+								protected void onEvent(AjaxRequestTarget target) {
+									PageParameters parameters = new PageParameters();
+									parameters.add("oauthid", item.getModelObject().getId());
+									setResponsePage(SignInPage.class, parameters);
+								}
+							});
+						item.add(btn);
+					}
+				}).setVisible(allowOAuthLogin()));
+		}
+
+		private void alreadyLoggedIn() {
+			// logon successful. Continue to the original destination
+			continueToOriginalDestination();
+			// Ups, no original destination. Go to the home page
+			throw new RestartResponseException(Application.get().getHomePage());
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/SignInPage.html b/src/web/java/org/apache/openmeetings/web/pages/auth/SignInPage.html
new file mode 100644
index 0000000..3b0451f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/SignInPage.html
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+		<style>
+			input:not([type='checkbox']):not([type='radio']), select {
+				width: 170px;
+			}
+			td.desc {
+				width: 200px;
+			}
+		</style>
+	</wicket:head>
+	<wicket:extend>
+		<script type="text/javascript">
+			$(function(){
+				$('#area').val(location.hash);
+			});
+		</script>
+		<div wicket:id="signin"></div>
+		<div wicket:id="register"></div>
+		<div wicket:id="forget"></div>
+		<div wicket:id="kick"></div>
+	</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/auth/SignInPage.java b/src/web/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
new file mode 100644
index 0000000..686c737
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/auth/SignInPage.java
@@ -0,0 +1,363 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.auth;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_FRONTEND_REGISTER_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_IGNORE_BAD_SSL;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.HttpURLConnection;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLEncoder;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.server.OAuth2Dao;
+import org.apache.openmeetings.db.dao.user.IUserManager;
+import org.apache.openmeetings.db.entity.server.OAuthServer;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.pages.BaseInitedPage;
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.json.JSONException;
+import org.apache.wicket.ajax.json.JSONObject;
+import org.apache.wicket.markup.head.CssContentHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.flow.RedirectToUrlException;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.string.StringValue;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class SignInPage extends BaseInitedPage {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(SignInPage.class, webAppRootKey);
+	private SignInDialog d;
+	private KickMessageDialog m;
+	
+	static boolean allowRegister() {
+		return "1".equals(getBean(ConfigurationDao.class).getConfValue(CONFIG_FRONTEND_REGISTER_KEY, String.class, "0"));
+	}
+	
+	static boolean allowOAuthLogin() {
+		return getBean(OAuth2Dao.class).getActive().size() > 0;
+	}
+	
+	public SignInPage(PageParameters p) {
+		super();
+		StringValue oauthid = p.get("oauthid");
+		if (!oauthid.isEmpty()) { // oauth2 login
+			try {
+				long serverId = oauthid.toLong(-1);
+				OAuthServer server = getBean(OAuth2Dao.class).get(serverId);
+				log.debug("OAuthServer=" + server);
+				if (server == null) {
+					log.warn("OAuth server id=" + serverId + " not found");
+					return;
+				}
+				
+				if (p.get("code").toString() != null) { // got code
+					String code = p.get("code").toString();
+					log.debug("OAuth response code=" + code);
+				 	AuthInfo authInfo = getToken(code, server);
+				 	if (authInfo == null) return;
+				 	log.debug("OAuthInfo=" + authInfo);
+				 	Map<String, String> authParams = getAuthParams(authInfo.accessToken, code, server);
+				 	if (authParams != null) {
+				 		loginViaOAuth2(authParams, serverId);
+				 	}
+				} else { // redirect to get code
+					String redirectUrl = prepareUrlParams(server.getRequestKeyUrl(), server.getClientId(), 
+							null, null, getRedirectUri(server, this), null);
+					log.debug("redirectUrl=" + redirectUrl);
+					throw new RedirectToUrlException(redirectUrl);
+				}
+			} catch (IOException e) {
+				log.error("OAuth2 login error", e);
+			} catch (NoSuchAlgorithmException e) {
+				log.error("OAuth2 login error", e);
+			}
+		}
+		//will try to login directly using parameters sent by POST
+		IRequestParameters pp = RequestCycle.get().getRequest().getPostParameters();
+		StringValue login = pp.getParameterValue("login"), password = pp.getParameterValue("password");
+		if (!login.isEmpty() && !password.isEmpty()) {
+			if (WebSession.get().signIn(login.toString(), password.toString(), Type.user, null)) {
+	 			setResponsePage(Application.get().getHomePage());
+			} else {
+				log.error("Failed to login using POST parameters passed");
+			}
+		}
+		
+		RegisterDialog r = new RegisterDialog("register");
+		ForgetPasswordDialog f = new ForgetPasswordDialog("forget");
+		d = new SignInDialog("signin");
+		d.setRegisterDialog(r);
+		d.setForgetPasswordDialog(f);
+		r.setSignInDialog(d);
+		f.setSignInDialog(d);
+		m = new KickMessageDialog("kick");
+		add(d.setVisible(!WebSession.get().isKickedByAdmin()), 
+				r.setVisible(allowRegister()), f, m.setVisible(WebSession.get().isKickedByAdmin()));
+	}
+	
+	public SignInPage() {
+		this(new PageParameters());
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(OnDomReadyHeaderItem.forScript(m.getOnClickJavaScript()));
+		response.render(new CssContentHeaderItem(".no-close .ui-dialog-titlebar-close { display: none; }", "dialog-noclose", ""));
+	}
+	
+	@Override
+	protected void onParameterArrival(IRequestParameters params, AjaxRequestTarget arg1) {
+		WebSession.get().setArea(getUrlFragment(params));
+	}
+	
+	// ============= OAuth2 methods =============
+		
+	public String prepareUrlParams(String urlTemplate, String clientId, String clientSecret, 
+			String clientToken, String redirectUri, String code) throws UnsupportedEncodingException {
+		String result = urlTemplate;
+		if (clientId != null) {
+			result = result.replace("{$client_id}", clientId);
+		}
+		if (clientSecret != null) {
+			result = result.replace("{$client_secret}", clientSecret);
+		}
+		if (clientToken != null) {
+			result = result.replace("{$access_token}", clientToken);
+		}
+		if (redirectUri != null) {
+			result = result.replace("{$redirect_uri}", URLEncoder.encode(redirectUri, "UTF-8"));
+		}
+		if (code != null) {
+			result = result.replace("{$code}", code);
+		}
+		return result;
+	}
+		
+	public static String getRedirectUri(OAuthServer server, Component component) {
+		String result = "";
+		if (server.getId() != null) {
+			try {
+				String base = getBean(ConfigurationDao.class).getBaseUrl();
+				URI uri = new URI(base + component.urlFor(SignInPage.class, new PageParameters().add("oauthid", server.getId())));
+				result = uri.normalize().toString();
+			} catch (URISyntaxException e) {
+				log.error("Unexpected error while getting redirect URL", e);
+			}
+		}
+		return result;
+	}
+		
+	private void prepareConnection(URLConnection connection) {
+		if (!(connection instanceof HttpsURLConnection)) return;
+		ConfigurationDao configurationDao = getBean(ConfigurationDao.class);
+		Boolean ignoreBadSSL = configurationDao.getConfValue(CONFIG_IGNORE_BAD_SSL, String.class, "no").equals("yes");
+		if (!ignoreBadSSL) return;
+		TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
+			public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
+			public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {}
+
+			public X509Certificate[] getAcceptedIssuers() {
+				return null;
+			}
+				
+	    } };
+		try {
+			SSLContext sslContext = SSLContext.getInstance("SSL");
+			sslContext.init( null, trustAllCerts, new java.security.SecureRandom() );
+		    SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
+			((HttpsURLConnection) connection).setSSLSocketFactory(sslSocketFactory);
+			((HttpsURLConnection) connection).setHostnameVerifier(new HostnameVerifier() {
+					
+				public boolean verify(String arg0, SSLSession arg1) {
+					return true;
+				}
+					
+			});
+		} catch (Exception e) {
+			log.error("[prepareConnection]", e);
+		}
+	}
+		
+	private AuthInfo getToken(String code, OAuthServer server) throws IOException {
+		String requestTokenBaseUrl = server.getRequestTokenUrl();
+		// build url params to request auth token
+		String requestTokenParams = server.getRequestTokenAttributes();
+		requestTokenParams = prepareUrlParams(requestTokenParams, server.getClientId(), server.getClientSecret(), 
+				null, getRedirectUri(server, this), code);
+		// request auth token
+		HttpURLConnection urlConnection = (HttpURLConnection) new URL(requestTokenBaseUrl).openConnection();
+		prepareConnection(urlConnection);
+		urlConnection.setRequestMethod("POST");
+		urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
+		urlConnection.setRequestProperty("charset", "utf-8");
+		urlConnection.setRequestProperty("Content-Length", String.valueOf(requestTokenParams.length()));
+		urlConnection.setDoInput(true);
+		urlConnection.setDoOutput(true);
+		urlConnection.setUseCaches(false);
+		DataOutputStream paramsOutputStream = new DataOutputStream(urlConnection.getOutputStream());
+		paramsOutputStream.writeBytes(requestTokenParams);
+		paramsOutputStream.flush();
+		String sourceResponse = IOUtils.toString(urlConnection.getInputStream(), "utf-8");
+		// parse json result
+		AuthInfo result = new AuthInfo();
+		try {
+			JSONObject jsonResult = new JSONObject(sourceResponse.toString());
+			if (jsonResult.has("access_token")) {
+				result.accessToken = jsonResult.getString("access_token");
+			}
+			if (jsonResult.has("refresh_token")) {
+				result.refreshToken = jsonResult.getString("refresh_token");
+			}
+			if (jsonResult.has("token_type")) {
+				result.tokenType = jsonResult.getString("token_type");
+			}
+			if (jsonResult.has("expires_in")) {
+				result.expiresIn = jsonResult.getLong("expires_in");
+			}
+		} catch (JSONException e) {
+			// try to parse as canonical
+			Map<String, String> parsedMap = parseCanonicalResponse(sourceResponse.toString());
+			result.accessToken = parsedMap.get("access_token");
+			result.refreshToken = parsedMap.get("refresh_token");
+			result.tokenType = parsedMap.get("token_type");
+			try {
+				result.expiresIn = Long.valueOf(parsedMap.get("expires_in"));
+			} catch (NumberFormatException nfe) {}
+		}
+		// access token must be specified
+		if (result.accessToken == null) {
+			log.error("Response doesn't contain access_token field:\n" + sourceResponse.toString());
+			return null;
+		}
+		return result;
+	}
+	
+	private Map<String, String> parseCanonicalResponse(String response) {
+		String[] parts = response.split("&");
+		Map<String, String> result = new HashMap<String, String>();
+		for (String part: parts) {
+			String pair[] = part.split("=");
+			if (pair.length > 1) {
+				result.put(pair[0], pair[1]);
+			}
+		}
+		return result;
+	}
+	
+	private Map<String, String> getAuthParams(String token, String code, OAuthServer server) throws IOException {
+		// get attributes names
+		String loginAttributeName = server.getLoginParamName();
+		String emailAttributeName = server.getEmailParamName();
+		String firstname = server.getFirstnameParamName();
+		String lastname = server.getLastnameParamName();
+		// prepare url
+		String requestInfoUrl = server.getRequestInfoUrl();
+		requestInfoUrl = prepareUrlParams(requestInfoUrl, server.getClientId(), server.getClientSecret(), 
+				token, getRedirectUri(server, this), code);
+		// send request
+		URLConnection connection = new URL(requestInfoUrl).openConnection();
+		prepareConnection(connection);
+		String sourceResponse = IOUtils.toString(connection.getInputStream(), "utf-8");
+        // parse json result
+        Map<String, String> result = new HashMap<String, String>();
+        try {
+			JSONObject parsedJson = new JSONObject(sourceResponse);
+			result.put("login", parsedJson.getString(loginAttributeName));
+			result.put("email", parsedJson.getString(emailAttributeName));
+			if (parsedJson.has(firstname)) {
+				result.put("firstname", parsedJson.getString(firstname));
+			}
+			if (parsedJson.has(lastname)) {
+				result.put("lastname", parsedJson.getString(lastname));
+			}
+		} catch (JSONException e) {
+			// try to parse response as canonical
+			Map<String, String> parsedMap = parseCanonicalResponse(sourceResponse);
+			result.put("login", parsedMap.get(loginAttributeName));
+			result.put("email", parsedMap.get(emailAttributeName));
+			if (parsedMap.containsKey(firstname)) {
+				result.put("firstname", parsedMap.get(firstname));
+			}
+			if (parsedMap.containsKey(lastname)) {
+				result.put("lastname", parsedMap.get(lastname));
+			}
+		}
+		return result;
+	}
+	
+	private void loginViaOAuth2(Map<String, String> params, long serverId) throws IOException, NoSuchAlgorithmException {
+		User u = getBean(IUserManager.class).loginOAuth(params, serverId);
+		
+		if (u != null && WebSession.get().signIn(u)) {
+ 			setResponsePage(Application.get().getHomePage());
+		} else {
+			log.error("Failed to login via OAuth2!");
+		}
+	}
+		
+	private static class AuthInfo {
+			
+		String accessToken;
+		String refreshToken;
+		String tokenType;
+		long expiresIn;
+			
+		@Override
+		public String toString() {
+			return "AuthInfo [accessToken=" + accessToken + ", refreshToken="
+					+ refreshToken + ", tokenType=" + tokenType
+					+ ", expiresIn=" + expiresIn + "]";
+		}
+			
+	}
+	
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/CongratulationsPanel.html b/src/web/java/org/apache/openmeetings/web/pages/install/CongratulationsPanel.html
new file mode 100644
index 0000000..fe3481e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/CongratulationsPanel.html
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<h2>
+		<a wicket:id="url" style="color: blue;"><wicket:message key="install.wizard.congrats.enter"/></a>
+	</h2>
+	<br />
+	<br />
+	<wicket:message key="install.wizard.congrats.port"/>
+	<br />
+	<a href="public/config.xml"><wicket:message key="install.wizard.congrats.config"/></a>
+	<br />
+	<br />
+	<br />
+
+	<b> <span style="font-size: 1.4em"><wicket:message key="install.wizard.congrats.mail"/></span></b>
+	<br />
+	<br />
+
+	<span style="font-size: 1.3em"><a
+		href="http://openmeetings.apache.org/mail-lists.html" target="_blank">http://openmeetings.apache.org/mail-lists.html</a></span>
+	<br />
+	<br />
+
+
+	<b> <span style="font-size: 1.4em"><wicket:message key="install.wizard.congrats.commercial"/></span></b>
+	<br />
+	<br />
+
+	<span style="font-size: 1.3em"><a
+		href="http://openmeetings.apache.org/commercial-support.html"
+		target="_blank">http://openmeetings.apache.org/commercial-support.html</a></span>
+	<br />
+
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/CongratulationsPanel.java b/src/web/java/org/apache/openmeetings/web/pages/install/CongratulationsPanel.java
new file mode 100644
index 0000000..6e7a2e5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/CongratulationsPanel.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.install;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.markup.html.link.Link;
+import org.apache.wicket.markup.html.panel.Panel;
+
+public class CongratulationsPanel extends Panel {
+	private static final long serialVersionUID = 1L;
+
+	public CongratulationsPanel(String id) {
+		super(id);
+		
+		add(new Link<Void>("url") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClick() {
+				setResponsePage(Application.get().getHomePage());
+			}
+		});
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$DbStep.html b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$DbStep.html
new file mode 100644
index 0000000..71a4dd3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$DbStep.html
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<fieldset class="ui-widget-content" id="userData">
+		<legend class="ui-widget-header"><wicket:message key="install.wizard.db.step.field.title"/></legend>
+		<div wicket:id="note"></div>
+		<form class="adminForm" wicket:id="form">
+            <div class="formelement">
+                  <label wicket:for="dbType"><wicket:message key="install.wizard.db.step.dbtype" /></label> <select wicket:id="dbType"></select>
+            </div>
+            <div wicket:id="hostelem" class="formelement">
+                  <label wicket:for="host"><wicket:message key="install.wizard.db.step.host" /></label> <input type="text" wicket:id="host"/>
+            </div>
+            <div wicket:id="portelem" class="formelement">
+                  <label wicket:for="port"><wicket:message key="install.wizard.db.step.port" /></label> <input type="text" wicket:id="port"/>
+            </div>
+            <div class="formelement">
+                  <label wicket:for="dbname"><wicket:message key="install.wizard.db.step.dbname" /></label> <input type="text" wicket:id="dbname"/>
+            </div>
+            <div class="formelement">
+                  <label wicket:for="login"><wicket:message key="install.wizard.db.step.user" /></label> <input type="text" wicket:id="login"/>
+            </div>
+            <div class="formelement">
+                  <label wicket:for="password"><wicket:message key="install.wizard.db.step.pass" /></label> <input type="text" wicket:id="password"/>
+            </div>
+            <div class="formelement" style="max-width:860px;">
+            	<button class="align-right" wicket:id="check"><wicket:message key="install.wizard.db.step.check"/></button>
+            </div>
+		</form>
+	</fieldset>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$InstallStep.html b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$InstallStep.html
new file mode 100644
index 0000000..d59cb47
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$InstallStep.html
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<p wicket:id="desc"></p>
+	<div wicket:id="container" style="margin: 20px;">
+		<div wicket:id="progress"><!-- div><span wicket:id="value"></span>%</div--></div>
+		<div wicket:id="status"></div>
+	</div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep1.html b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep1.html
new file mode 100644
index 0000000..120e298
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep1.html
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<fieldset class="ui-widget-content" id="userData">
+		<legend class="ui-widget-header"><wicket:message key="install.wizard.params.step1.userdata"/></legend>
+		<ul class="paramList">
+			<li><label wicket:for="username"><wicket:message key="install.wizard.params.step1.username"/></label>
+				<input wicket:id="username" wicket:message="title:install.wizard.params.step1.username.title" type="text" />
+			</li>
+			<li><label wicket:for="password"><wicket:message key="install.wizard.params.step1.password"/></label>
+				<input wicket:id="password" wicket:message="title:install.wizard.params.step1.password.title" type="password" />
+			</li>
+			<li><label wicket:for="email"><wicket:message key="install.wizard.params.step1.email"/></label>
+				<input wicket:id="email" wicket:message="title:install.wizard.params.step1.email.title" type="text" />
+			</li>
+			<li><label wicket:for="ical_timeZone"><wicket:message key="install.wizard.params.step1.tz"/></label>
+				<select wicket:id="ical_timeZone"></select>
+			</li>
+		</ul>
+	</fieldset>
+
+	<fieldset class="ui-widget-content" id="userOrga">
+		<legend class="ui-widget-header"><wicket:message key="install.wizard.params.step1.groupdata"/></legend>
+		<ul class="paramList">
+			<li><label wicket:for="group"><wicket:message key="install.wizard.params.step1.group"/></label>
+				<input wicket:id="group" wicket:message="title:install.wizard.params.step1.group.title" type="text" /></li>
+		</ul>
+	</fieldset>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep2.html b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep2.html
new file mode 100644
index 0000000..ea9f953
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep2.html
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<fieldset class="ui-widget-content" id="userConf">
+		<legend class="ui-widget-header"><wicket:message key="install.wizard.params.step2.configuration"/></legend>
+		<ul class="paramList">
+			<li><label wicket:for="allowFrontendRegister"><wicket:message key="install.wizard.params.step2.allowFrontendRegister"/></label>
+				<select wicket:id="allowFrontendRegister"></select>
+			</li>
+			<li><label wicket:for="sendEmailAtRegister"><wicket:message key="install.wizard.params.step2.sendEmailAtRegister"/></label>
+				<select wicket:id="sendEmailAtRegister"></select>
+			</li>
+			<li><label wicket:for="sendEmailWithVerficationCode"><wicket:message key="install.wizard.params.step2.sendEmailWithVerficationCode"/></label>
+				<select wicket:id="sendEmailWithVerficationCode"></select>
+			</li>
+			<li><label wicket:for="createDefaultRooms"><wicket:message key="install.wizard.params.step2.createDefaultRooms"/></label>
+				<select wicket:id="createDefaultRooms"></select>
+			</li>
+			<li><label wicket:for="mailReferer"><wicket:message key="install.wizard.params.step2.mailReferer"/></label>
+				<input wicket:id="mailReferer" wicket:message="title:install.wizard.params.step2.mailReferer.title" type="text" />
+			</li>
+			<li><label wicket:for="smtpServer"><wicket:message key="install.wizard.params.step2.smtpServer"/></label>
+				<input wicket:id="smtpServer" wicket:message="title:install.wizard.params.step2.smtpServer.title" type="text" />
+			</li>
+			<li><label wicket:for="smtpPort"><wicket:message key="install.wizard.params.step2.smtpPort"/></label>
+				<input wicket:id="smtpPort" wicket:message="title:install.wizard.params.step2.smtpPort.title" type="text" />
+			</li>
+			<li><label wicket:for="mailAuthName"><wicket:message key="install.wizard.params.step2.mailAuthName"/></label>
+				<input wicket:id="mailAuthName" wicket:message="title:install.wizard.params.step2.mailAuthName.title" type="text" />
+			</li>
+			<li><label wicket:for="mailAuthPass"><wicket:message key="install.wizard.params.step2.mailAuthPass"/></label>
+				<input wicket:id="mailAuthPass" wicket:message="title:install.wizard.params.step2.mailAuthPass.title" type="password" />
+			</li>
+			<li><label wicket:for="mailUseTls"><wicket:message key="install.wizard.params.step2.mailUseTls"/></label>
+				<select wicket:id="mailUseTls"></select>
+			</li>
+			<li><label wicket:for="replyToOrganizer"><wicket:message key="install.wizard.params.step2.replyToOrganizer"/></label>
+				<select wicket:id="replyToOrganizer"></select>
+			</li>
+			<li><label wicket:for="defaultLangId"><wicket:message key="install.wizard.params.step2.defaultLangId"/></label>
+				<select wicket:id="defaultLangId"></select>
+			</li>
+			<li><label wicket:for="defaultExportFont"><wicket:message key="install.wizard.params.step2.defaultExportFont"/></label>
+				<select wicket:id="defaultExportFont"></select>
+			</li>
+		</ul>
+	</fieldset>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep3.html b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep3.html
new file mode 100644
index 0000000..dc6549d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep3.html
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<fieldset class="ui-widget-content" id="userConf1">
+		<legend class="ui-widget-header"><wicket:message key="install.wizard.params.step3.converters"/></legend>
+		<ul class="paramList">
+			<li><label wicket:for="swfZoom"><wicket:message key="install.wizard.params.step3.swfZoom"/></label>
+				<input wicket:id="swfZoom" wicket:message="title:install.wizard.params.step3.swfZoom.title"
+				type="text" />
+				<p>
+					<i>
+						<wicket:message key="install.wizard.params.step3.swfZoom.text"/>
+						<wicket:message key="install.wizard.params.step3.seeAlso"/> <a
+						href="http://openmeetings.apache.org/installation.html"
+						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
+					</i>
+				</p>
+			</li>
+			<li><label wicket:for="swfJpegQuality"><wicket:message key="install.wizard.params.step3.swfJpegQuality"/></label>
+				<input wicket:id="swfJpegQuality" 
+				wicket:message="title:install.wizard.params.step3.swfJpegQuality.title"
+				type="text" />
+				<p>
+					<i>
+						<wicket:message key="install.wizard.params.step3.swfJpegQuality.text"/>
+						<wicket:message key="install.wizard.params.step3.seeAlso"/> <a
+						href="http://openmeetings.apache.org/installation.html"
+						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
+					</i>
+				</p>
+			</li>
+			<li><label wicket:for="swfPath"><wicket:message key="install.wizard.params.step3.swfPath"/></label>
+				<input wicket:id="swfPath" 
+				wicket:message="title:install.wizard.params.step3.swfPath.title"
+				type="text" />
+				<p>
+					<i>
+						<wicket:message key="install.wizard.params.step3.swfPath.text"/>
+						<wicket:message key="install.wizard.params.step3.seeAlso"/> <a
+						href="http://openmeetings.apache.org/installation.html"
+						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
+					</i>
+				</p>
+			</li>
+			<li><label wicket:for="imageMagicPath"><wicket:message key="install.wizard.params.step3.imageMagicPath"/></label>
+				<input wicket:id="imageMagicPath" 
+				wicket:message="title:install.wizard.params.step3.imageMagicPath.title"
+				type="text" />
+				<p>
+					<i>
+						<wicket:message key="install.wizard.params.step3.imageMagicPath.text"/>
+						<wicket:message key="install.wizard.params.step3.seeAlso"/> <a
+						href="http://openmeetings.apache.org/installation.html"
+						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
+					</i>
+				</p>
+			</li>
+			<li><label wicket:for="ffmpegPath"><wicket:message key="install.wizard.params.step3.ffmpegPath"/></label>
+				<input wicket:id="ffmpegPath" 
+				wicket:message="title:install.wizard.params.step3.ffmpegPath.title" type="text" />
+				<p>
+					<i>
+						<wicket:message key="install.wizard.params.step3.ffmpegPath.text"/>
+						<wicket:message key="install.wizard.params.step3.seeAlso"/> <a
+						href="http://openmeetings.apache.org/installation.html"
+						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
+					</i>
+				</p>
+			</li>
+			<li><label wicket:for="soxPath"><wicket:message key="install.wizard.params.step3.soxPath"/></label>
+				<input wicket:id="soxPath" 
+				wicket:message="title:install.wizard.params.step3.soxPath.title"
+				type="text" />
+				<p>
+					<i>
+						<wicket:message key="install.wizard.params.step3.soxPath.text"/>
+						<wicket:message key="install.wizard.params.step3.seeAlso"/> <a
+						href="http://openmeetings.apache.org/installation.html"
+						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
+					</i>
+				</p>
+			</li>
+			<li><label wicket:for="jodPath"><wicket:message key="install.wizard.params.step3.jodPath"/></label>
+				<input wicket:id="jodPath"
+				wicket:message="title:install.wizard.params.step3.jodPath.title"
+				type="text" />
+				<p>
+					<i>
+						<wicket:message key="install.wizard.params.step3.jodPath.text"/>
+						<wicket:message key="install.wizard.params.step3.seeAlso"/> <a
+						href="http://openmeetings.apache.org/installation.html"
+						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
+					</i>
+				</p>
+			</li>
+			<li><label wicket:for="officePath"><wicket:message key="install.wizard.params.step3.officePath"/></label>
+				<input wicket:id="officePath"
+				wicket:message="title:install.wizard.params.step3.officePath.title"
+				type="text" />
+				<p>
+					<i>
+						<wicket:message key="install.wizard.params.step3.officePath.text"/>
+						<wicket:message key="install.wizard.params.step3.seeAlso"/> <a
+						href="http://openmeetings.apache.org/installation.html"
+						target="_blank"><wicket:message key="install.wizard.params.step3.installation"/></a>
+					</i>
+				</p>
+			</li>
+		</ul>
+	</fieldset>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep4.html b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep4.html
new file mode 100644
index 0000000..ff2c842
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$ParamsStep4.html
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<fieldset class="ui-widget-content" id="userConf2">
+		<legend class="ui-widget-header"><wicket:message key="install.wizard.params.step4.crypt"/></legend>
+		<ul class="paramList">
+			<li><label wicket:for="cryptClassName"><wicket:message key="install.wizard.params.step4.cryptClassName"/></label>
+				<input wicket:id="cryptClassName" type="text"
+					wicket:message="title:install.wizard.params.step4.cryptClassName.title" />
+				<p>
+					<i>
+						<wicket:message key="install.wizard.params.step4.cryptClassName.text"/>
+					</i>
+				</p>
+			</li>
+		</ul>
+	</fieldset>
+
+	<fieldset class="ui-widget-content" id="red5sip">
+		<legend class="ui-widget-header"><wicket:message key="install.wizard.params.step4.red5SIP"/></legend>
+		<ul class="paramList">
+			<li><label wicket:for="red5SipEnable"><wicket:message key="install.wizard.params.step4.red5SipEnable"/></label>
+				<select wicket:id="red5SipEnable"></select>
+				<p>
+					<i><wicket:message key="install.wizard.params.step4.red5SipEnable.text"/></i>
+				</p>
+			</li>
+			<li><label wicket:for="red5SipRoomPrefix"><wicket:message key="install.wizard.params.step4.red5SipRoomPrefix"/></label>
+				<input wicket:id="red5SipRoomPrefix" type="text" />
+				<p>
+					<i><wicket:message key="install.wizard.params.step4.red5SipRoomPrefix.text"/></i>
+				</p>
+			</li>
+			<li><label wicket:for="red5SipExtenContext"><wicket:message key="install.wizard.params.step4.red5SipExtenContext"/></label>
+				<input wicket:id="red5SipExtenContext" type="text" />
+				<p>
+					<i><wicket:message key="install.wizard.params.step4.red5SipExtenContext.text"/></i>
+				</p>
+			</li>
+		</ul>
+	</fieldset>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$WelcomeStep.html b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$WelcomeStep.html
new file mode 100644
index 0000000..21b4422
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard$WelcomeStep.html
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div wicket:id="step"></div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard.java b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
new file mode 100644
index 0000000..637424e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard.java
@@ -0,0 +1,771 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.install;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_LOGIN_MINIMUM_LENGTH;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.USER_PASSWORD_MINIMUM_LENGTH;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.WebSession.AVAILABLE_TIMEZONES;
+import static org.apache.openmeetings.web.app.WebSession.AVAILABLE_TIMEZONE_SET;
+import static org.apache.wicket.validation.validator.RangeValidator.range;
+import static org.apache.wicket.validation.validator.StringValidator.minimumLength;
+import static org.springframework.web.context.support.WebApplicationContextUtils.getWebApplicationContext;
+
+import java.io.File;
+import java.io.Serializable;
+import java.net.URI;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.openmeetings.cli.ConnectionProperties;
+import org.apache.openmeetings.cli.ConnectionProperties.DbType;
+import org.apache.openmeetings.cli.ConnectionPropertiesPatcher;
+import org.apache.openmeetings.db.dao.label.LabelDao;
+import org.apache.openmeetings.installation.ImportInitvalues;
+import org.apache.openmeetings.installation.InstallationConfig;
+import org.apache.openmeetings.util.OmFileHelper;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.ErrorMessagePanel;
+import org.apache.openmeetings.web.common.OmLabel;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
+import org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
+import org.apache.wicket.extensions.wizard.dynamic.DynamicWizardModel;
+import org.apache.wicket.extensions.wizard.dynamic.DynamicWizardStep;
+import org.apache.wicket.extensions.wizard.dynamic.IDynamicWizardStep;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.StringResourceModel;
+import org.apache.wicket.util.time.Duration;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
+import org.springframework.orm.jpa.LocalEntityManagerFactoryBean;
+import org.springframework.web.context.support.XmlWebApplicationContext;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.progressbar.ProgressBar;
+import com.googlecode.wicket.jquery.ui.widget.wizard.AbstractWizard;
+import com.googlecode.wicket.kendo.ui.form.button.IndicatingAjaxButton;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+public class InstallWizard extends AbstractWizard<InstallationConfig> {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(InstallWizard.class, webAppRootKey);
+	private final static List<SelectOption> yesNoList = Arrays.asList(SelectOption.NO, SelectOption.YES);
+	private final static List<SelectOption> yesNoTextList = Arrays.asList(SelectOption.NO_TEXT, SelectOption.YES_TEXT);
+	private final static List<String> allFonts = Arrays.asList("TimesNewRoman", "Verdana", "Arial");
+	private final IDynamicWizardStep welcomeStep;
+	private final IDynamicWizardStep dbStep;
+	private final ParamsStep1 paramsStep1;
+	private final IDynamicWizardStep paramsStep2;
+	private final IDynamicWizardStep paramsStep3;
+	private final IDynamicWizardStep paramsStep4;
+	private final InstallStep installStep;
+	private Throwable th = null;
+	
+	public void initTzDropDown() {
+		paramsStep1.tzDropDown.setOption();
+	}
+	
+	//onInit, applyState
+	public InstallWizard(String id, String title) {
+		super(id, title, new CompoundPropertyModel<InstallationConfig>(new InstallationConfig()), true);
+		setTitle(Model.of(getModelObject().appName));
+		welcomeStep = new WelcomeStep();
+		dbStep = new DbStep();
+		paramsStep1 = new ParamsStep1();
+		paramsStep2 = new ParamsStep2();
+		paramsStep3 = new ParamsStep3();
+		paramsStep4 = new ParamsStep4();
+		installStep = new InstallStep();
+
+		DynamicWizardModel wmodel = new DynamicWizardModel(welcomeStep);
+		wmodel.setCancelVisible(false);
+		wmodel.setLastVisible(true);
+		init(wmodel);
+	}
+	
+	@Override
+	public void onConfigure(JQueryBehavior behavior) {
+		super.onConfigure(behavior);
+		behavior.setOption("closeOnEscape", false);
+		behavior.setOption("dialogClass", Options.asString("no-close"));
+		behavior.setOption("resizable", false);
+	}
+
+	@Override
+	protected WebMarkupContainer newFeedbackPanel(String id) {
+		KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+		feedback.setEscapeModelStrings(false);
+		return feedback;
+	}
+
+	@Override
+	public int getWidth() {
+		return 1000;
+	}
+	
+	@Override
+	protected boolean closeOnFinish() {
+		return false;
+	}
+	
+	private abstract class BaseStep extends DynamicWizardStep {
+		private static final long serialVersionUID = 1L;
+
+		public BaseStep(IDynamicWizardStep prev) {
+			super(prev);
+			setSummaryModel(Model.of(""));
+		}
+		
+		@Override
+		protected void onInitialize() {
+			super.onInitialize();
+			InstallWizard.this.setTitle(Model.of(getModelObject().appName + " - " + getString("install.wizard.install.header")));
+		}
+	}
+	
+	private final class WelcomeStep extends BaseStep {
+		private static final long serialVersionUID = 1L;
+
+		public WelcomeStep() {
+			super(null);
+		}
+
+		@Override
+		protected void onInitialize() {
+			super.onInitialize();
+			add(new Label("step", getString("install.wizard.welcome.panel")).setEscapeModelStrings(false));
+		}
+		
+		@Override
+		public boolean isLastStep() {
+			return false;
+		}
+
+		@Override
+		public IDynamicWizardStep next() {
+			return dbStep;
+		}
+	}
+
+	private final class DbStep extends BaseStep {
+		private static final long serialVersionUID = 1L;
+		private final WebMarkupContainer hostelem = new WebMarkupContainer("hostelem");
+		private final WebMarkupContainer portelem = new WebMarkupContainer("portelem");
+		private final RequiredTextField<String> host = new RequiredTextField<String>("host", Model.of(""));
+		private final RequiredTextField<Integer> port = new RequiredTextField<Integer>("port", Model.of(0));
+		private final RequiredTextField<String> dbname = new RequiredTextField<String>("dbname", Model.of(""));
+		private final Form<ConnectionProperties> form = new Form<ConnectionProperties>("form", new CompoundPropertyModel<ConnectionProperties>(getProps(null))) {
+			private static final long serialVersionUID = 1L;
+			private final DropDownChoice<DbType> db = new DropDownChoice<DbType>("dbType", Arrays.asList(DbType.values()), new ChoiceRenderer<DbType>() {
+				private static final long serialVersionUID = 1L;
+				
+				@Override
+	        	public Object getDisplayValue(DbType object) {
+	        		return getString(String.format("install.wizard.db.step.%s.name", object.name()));
+	        	}
+	        	
+	        	@Override
+	        	public String getIdValue(DbType object, int index) {
+	        		return object.name();
+	        	}
+	        });
+			private final RequiredTextField<String> user = new RequiredTextField<String>("login");
+			private final TextField<String> pass = new TextField<String>("password");
+			
+        	{
+        		add(db.add(new OnChangeAjaxBehavior() {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onUpdate(AjaxRequestTarget target) {
+						target.add(getFeedbackPanel());
+						initForm(true, target);
+					}
+				}));
+        		add(hostelem.add(host), portelem.add(port));
+        		add(dbname, user, pass);
+        		add(new IndicatingAjaxButton("check") {
+					private static final long serialVersionUID = 1L;
+					
+					@Override
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+						target.add(getFeedbackPanel());
+					}
+					
+					@Override
+					protected void onError(AjaxRequestTarget target, Form<?> form) {
+						target.add(getFeedbackPanel());
+					}
+        		});
+        	}
+        	
+        	@Override
+        	protected void onValidateModelObjects() {
+				ConnectionProperties props = getModelObject();
+				try {
+					Class.forName(props.getDriver());
+				} catch (Exception e) {
+					form.error(new StringResourceModel("install.wizard.db.step.nodriver", InstallWizard.this).setParameters(getString("install.wizard.db.step.instructions." + props.getDbType().name())).getObject());
+					return;
+				}
+				boolean valid = true;
+				ConnectionPropertiesPatcher.updateUrl(props, host.getModelObject(), "" + port.getModelObject(), dbname.getModelObject());
+				DriverManager.setLoginTimeout(3);
+				try (Connection conn = DriverManager.getConnection(props.getURL(), props.getLogin(), props.getPassword())) {
+					valid = conn.isValid(0); //no timeout
+					String sql = null;
+					switch (props.getDbType()) {
+						case db2:
+							sql = "select count(*) from systables";
+							break;
+						case oracle:
+							sql = "SELECT 1 FROM DUAL";
+							break;
+						case derby:
+							sql = "SELECT 1 FROM SYSIBM.SYSDUMMY1";
+							break;
+						default:
+							sql = "SELECT 1";
+							break;
+					}
+					valid &= conn.prepareStatement(sql).execute();
+					if (!valid) {
+						form.error(getString("install.wizard.db.step.notvalid") + "<br/>" + getString("install.wizard.db.step.instructions." + props.getDbType().name()));
+					}
+				} catch (Exception e) {
+					form.error(e.getMessage() + "<br/>" + getString("install.wizard.db.step.instructions." + props.getDbType().name()));
+					log.error("error while testing DB", e);
+					valid = false;
+				}
+				if (valid) {
+					form.success(getString("install.wizard.db.step.valid"));
+				}
+        	}
+        	
+        	@Override
+        	protected void onSubmit() {
+        		try {
+        			ConnectionPropertiesPatcher.patch(getModelObject());
+        			XmlWebApplicationContext ctx = (XmlWebApplicationContext)getWebApplicationContext(Application.get().getServletContext());
+        			AutowireCapableBeanFactory f = ctx.getBeanFactory();
+        			LocalEntityManagerFactoryBean emb = f.getBean(LocalEntityManagerFactoryBean.class);
+        			emb.afterPropertiesSet();
+        		} catch (Exception e) {
+					form.error(new StringResourceModel("install.wizard.db.step.error.patch", InstallWizard.this).setParameters(e.getMessage()).getObject());
+					log.error("error while patching", e);
+        		}
+        	}
+        };
+        
+        private ConnectionProperties getProps(DbType type) {
+			ConnectionProperties props = new ConnectionProperties();
+			try {
+				File conf = OmFileHelper.getPersistence(type);
+				props = ConnectionPropertiesPatcher.getConnectionProperties(conf);
+			} catch (Exception e) {
+				form.warn(getString("install.wizard.db.step.errorprops"));
+			}
+        	return props;
+        }
+        
+		private void initForm(boolean getProps, AjaxRequestTarget target) {
+			ConnectionProperties props = getProps ? getProps(form.getModelObject().getDbType()) : form.getModelObject();
+			form.setModelObject(props);
+			hostelem.setVisible(props.getDbType() != DbType.derby);
+			portelem.setVisible(props.getDbType() != DbType.derby);
+			try {
+				switch (props.getDbType()) {
+					case mssql: {
+						String url = props.getURL().substring("jdbc:sqlserver://".length());
+						String[] parts = url.split(";");
+						String[] hp = parts[0].split(":");
+						host.setModelObject(hp[0]);
+						port.setModelObject(Integer.parseInt(hp[1]));
+						dbname.setModelObject(parts[1].substring(parts[1].indexOf('=') + 1));
+						}
+						break;
+					case oracle: {
+						String[] parts = props.getURL().split(":");
+						host.setModelObject(parts[3].substring(1));
+						port.setModelObject(Integer.parseInt(parts[4]));
+						dbname.setModelObject(parts[5]);
+						}
+						break;
+					case derby: {
+						host.setModelObject("");
+						port.setModelObject(0);
+						String[] parts = props.getURL().split(";");
+						String[] hp = parts[0].split(":");
+						dbname.setModelObject(hp[2]);
+						}
+						break;
+					default:
+						URI uri = URI.create(props.getURL().substring(5));
+						host.setModelObject(uri.getHost());
+						port.setModelObject(uri.getPort());
+						dbname.setModelObject(uri.getPath().substring(1));
+						break;
+				}
+			} catch (Exception e) {
+				form.warn(getString("install.wizard.db.step.errorprops"));
+			}
+			if (target != null) {
+				target.add(form);
+			}
+		}
+		
+		public DbStep() {
+			super(welcomeStep);
+			add(form.setOutputMarkupId(true));
+			initForm(false, null);
+		}
+
+		@Override
+		protected void onInitialize() {
+			super.onInitialize();
+			add(new OmLabel("note", "install.wizard.db.step.note", getModelObject().appName, getString("install.wizard.db.step.instructions.derby")
+					, getString("install.wizard.db.step.instructions.mysql"), getString("install.wizard.db.step.instructions.postgresql")
+					, getString("install.wizard.db.step.instructions.db2"), getString("install.wizard.db.step.instructions.mssql")
+					, getString("install.wizard.db.step.instructions.oracle")).setEscapeModelStrings(false));
+		}
+		
+		@Override
+		public boolean isLastStep() {
+			return false;
+		}
+
+		@Override
+		public IDynamicWizardStep next() {
+			return paramsStep1;
+		}
+	}
+
+	private final class ParamsStep1 extends BaseStep {
+		private static final long serialVersionUID = 1L;
+		private final TzDropDown tzDropDown;
+
+		public ParamsStep1() {
+			super(dbStep);
+			add(tzDropDown = new TzDropDown("ical_timeZone"));
+		}
+
+		@Override
+		protected void onInitialize() {
+			super.onInitialize();
+			add(new RequiredTextField<String>("username").setLabel(Model.of(getString("install.wizard.params.step1.username"))).add(minimumLength(USER_LOGIN_MINIMUM_LENGTH)));
+			add(new PasswordTextField("password").setLabel(Model.of(getString("install.wizard.params.step1.password"))).add(minimumLength(USER_PASSWORD_MINIMUM_LENGTH)));
+			add(new RequiredTextField<String>("email").setLabel(Model.of(getString("install.wizard.params.step1.email"))).add(RfcCompliantEmailAddressValidator.getInstance()));
+			add(new RequiredTextField<String>("group").setLabel(Model.of(getString("install.wizard.params.step1.group"))));
+		}
+
+		@Override
+		public boolean isLastStep() {
+			return false;
+		}
+
+		@Override
+		public IDynamicWizardStep next() {
+			return paramsStep2;
+		}
+		
+		@Override
+		public boolean isLastAvailable() {
+			return true;
+		}
+		
+		@Override
+		public IDynamicWizardStep last() {
+			return installStep;
+		}
+	}
+	
+	private final class ParamsStep2 extends BaseStep {
+		private static final long serialVersionUID = 1L;
+
+		public ParamsStep2() {
+			super(paramsStep1);
+			//TODO localize
+			//TODO validation
+			add(new YesNoDropDown("allowFrontendRegister"));
+			add(new YesNoDropDown("sendEmailAtRegister"));
+			add(new YesNoDropDown("sendEmailWithVerficationCode"));
+			add(new YesNoDropDown("createDefaultRooms"));
+			add(new TextField<String>("mailReferer"));
+			add(new TextField<String>("smtpServer"));
+			add(new TextField<Integer>("smtpPort").setRequired(true));
+			add(new TextField<String>("mailAuthName"));
+			add(new PasswordTextField("mailAuthPass").setRequired(false));
+			add(new YesNoDropDown("mailUseTls"));
+			//TODO check mail server
+			add(new YesNoDropDown("replyToOrganizer"));
+			add(new LangDropDown("defaultLangId"));
+			add(new DropDownChoice<String>("defaultExportFont", allFonts));
+		}
+
+		@Override
+		public boolean isLastStep() {
+			return false;
+		}
+
+		@Override
+		public IDynamicWizardStep next() {
+			return paramsStep3;
+		}
+		
+		@Override
+		public boolean isLastAvailable() {
+			return true;
+		}
+		
+		@Override
+		public IDynamicWizardStep last() {
+			return installStep;
+		}
+	}
+	
+	private final class ParamsStep3 extends BaseStep {
+		private static final long serialVersionUID = 1L;
+
+		public ParamsStep3() {
+			super(paramsStep2);
+			
+			add(new TextField<Integer>("swfZoom").setRequired(true).add(range(50, 600)));
+			add(new TextField<Integer>("swfJpegQuality").setRequired(true).add(range(1, 100)));
+			add(new TextField<String>("swfPath"));
+			add(new TextField<String>("imageMagicPath"));
+			add(new TextField<String>("ffmpegPath"));
+			add(new TextField<String>("soxPath"));
+			add(new TextField<String>("jodPath"));
+			add(new TextField<String>("officePath"));
+		}
+
+		@Override
+		public boolean isLastStep() {
+			return false;
+		}
+
+		@Override
+		public IDynamicWizardStep next() {
+			return paramsStep4;
+		}
+		
+		@Override
+		public boolean isLastAvailable() {
+			return true;
+		}
+		
+		@Override
+		public IDynamicWizardStep last() {
+			return installStep;
+		}
+	}
+	
+	private final class ParamsStep4 extends BaseStep {
+		private static final long serialVersionUID = 1L;
+
+		public ParamsStep4() {
+			super(paramsStep3);
+			add(new RequiredTextField<String>("cryptClassName")); //Validate class
+            
+			//TODO add check for red5sip connection
+			add(new YesNoTextDropDown("red5SipEnable"));
+			add(new TextField<String>("red5SipRoomPrefix"));
+			add(new TextField<String>("red5SipExtenContext"));
+		}
+
+		@Override
+		public boolean isLastStep() {
+			return false;
+		}
+
+		@Override
+		public IDynamicWizardStep next() {
+			return installStep;
+		}
+		
+		@Override
+		public boolean isLastAvailable() {
+			return true;
+		}
+		
+		@Override
+		public IDynamicWizardStep last() {
+			return installStep;
+		}
+}
+	
+	private final class InstallStep extends BaseStep {
+		private static final long serialVersionUID = 1L;
+		private final CongratulationsPanel congrat;
+		private final WebMarkupContainer container = new WebMarkupContainer("container");
+		private final AbstractAjaxTimerBehavior timer;
+		private final ProgressBar progressBar;
+		private final Label desc = new Label("desc", "");
+		private boolean started = false;
+		
+		public void startInstallation(AjaxRequestTarget target) {
+			started = true;
+			timer.restart(target);
+			new Thread(new InstallProcess(Application.get()._getBean(ImportInitvalues.class))
+				, "Openmeetings - Installation").start();
+			//progressBar.setVisible(true);
+			desc.setDefaultModelObject(getString("install.wizard.install.started"));
+			target.add(desc, container);
+		}
+		
+		public InstallStep() {
+			super(paramsStep4);
+			
+			// Timer //
+			container.add(timer = new AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onTimer(AjaxRequestTarget target) {
+					if (!started) {
+						timer.stop(target);
+						return;
+					}
+					if (th != null) {
+						timer.stop(target);
+						//TODO change text, localize
+						progressBar.setVisible(false);
+						target.add(container.replace(new ErrorMessagePanel("status", getString("install.wizard.install.failed"), th))
+							, desc.setVisible(false)
+							);
+					} else {
+						progressBar.setModelObject(Application.get()._getBean(ImportInitvalues.class).getProgress());
+						progressBar.refresh(target);
+						//TODO uncomment later target.add(value);
+						//TODO add current step result as info
+					}
+				}
+			});
+			container.add(progressBar = new ProgressBar("progress", new Model<Integer>(0)) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onComplete(AjaxRequestTarget target) {
+					timer.stop(target);
+					progressBar.setVisible(false);
+					congrat.setVisible(true);
+					target.add(container, desc.setVisible(false));
+				}
+			});
+			//TODO uncomment later progressBar.add(value = new Label("value", progressBar.getModel()));
+			//TODO uncomment later value.setOutputMarkupId(true);
+			//progressBar.setVisible(false);
+			
+			container.add(congrat = new CongratulationsPanel("status"));
+			congrat.setVisible(false);
+			
+			add(container.setOutputMarkupId(true));
+		}
+
+		@Override
+		protected void onInitialize() {
+			super.onInitialize();
+			desc.setDefaultModelObject(getString("install.wizard.install.desc"));
+			add(desc.setOutputMarkupId(true));
+		}
+		
+		@Override
+		public boolean isLastStep() {
+			return true;
+		}
+
+		@Override
+		public IDynamicWizardStep next() {
+			return null;
+		}
+	}
+	
+	private class InstallProcess implements Runnable {
+		private ImportInitvalues installer;
+		
+		public InstallProcess(ImportInitvalues installer) {
+			this.installer = installer;
+			th = null;
+		}
+		
+		public void run() {
+			try {
+				installer.loadAll(getModelObject(), true);
+			} catch (Exception e) {
+				th = e;
+			}
+		}
+	}
+	
+	private static class SelectOption implements Serializable {
+		private static final long serialVersionUID = 1L;
+		private static SelectOption NO = new SelectOption("0", "No");
+		private static SelectOption NO_TEXT = new SelectOption("no", "No");
+		private static SelectOption YES = new SelectOption("1", "Yes");
+		private static SelectOption YES_TEXT = new SelectOption("yes", "Yes");
+		public String key;
+		@SuppressWarnings("unused")
+		public String value;
+
+		SelectOption(String key, String value) {
+			this.key = key;
+			this.value = value;
+		}
+	}
+
+	private abstract class WizardDropDown<T>  extends DropDownChoice<T> {
+		private static final long serialVersionUID = 1L;
+		T option;
+		IModel<Object> propModel;
+		
+		WizardDropDown(String id) {
+			super(id);
+			propModel = ((CompoundPropertyModel<InstallationConfig>)InstallWizard.this.getModel()).bind(id);
+			setModel(new PropertyModel<T>(this, "option"));
+		}
+		
+		@Override
+		protected void onDetach() {
+			propModel.detach();
+			super.onDetach();
+		}
+	}
+	
+	private final class TzDropDown extends WizardDropDown<String> {
+		private static final long serialVersionUID = 1L;
+
+		public void setOption() {
+			String tzId = WebSession.get().getClientTZCode();
+			option = AVAILABLE_TIMEZONE_SET.contains(tzId) ? tzId : AVAILABLE_TIMEZONES.get(0);
+		}
+		
+		public TzDropDown(String id) {
+			super(id);
+			setChoices(AVAILABLE_TIMEZONES);
+			setChoiceRenderer(new ChoiceRenderer<String>() {
+				private static final long serialVersionUID = 1L;
+				
+				public Object getDisplayValue(String object) {
+    				return object.toString();
+    			}
+				public String getIdValue(String object, int index) {
+					return object.toString();
+				}
+			});
+		}
+		
+		@Override
+		protected void onModelChanged() {
+			if (propModel != null && option != null) {
+				propModel.setObject(option);
+			}
+		}
+	}
+	
+	private class SelectOptionDropDown extends WizardDropDown<SelectOption> {
+		private static final long serialVersionUID = 1L;
+
+		SelectOptionDropDown(String id) {
+			super(id);
+			setChoiceRenderer(new ChoiceRenderer<SelectOption>("value", "key"));
+		}
+		
+		@Override
+		protected void onModelChanged() {
+			if (propModel != null && option != null) {
+				propModel.setObject(option.key);
+			}
+		}
+		
+	}
+	
+	private final class YesNoDropDown extends SelectOptionDropDown {
+		private static final long serialVersionUID = 1L;
+		
+		YesNoDropDown(String id) {
+			super(id);
+			setChoices(yesNoList);
+			this.option = SelectOption.NO.key.equals(propModel.getObject()) ?
+					SelectOption.NO : SelectOption.YES;
+		}
+	}
+	
+	private final class YesNoTextDropDown extends SelectOptionDropDown {
+		private static final long serialVersionUID = 1L;
+		
+		YesNoTextDropDown(String id) {
+			super(id);
+			setChoices(yesNoTextList);
+			this.option = SelectOption.NO_TEXT.key.equals(propModel.getObject()) ?
+					SelectOption.NO_TEXT : SelectOption.YES_TEXT;
+		}
+	}
+	
+	private final class LangDropDown extends SelectOptionDropDown {
+		private static final long serialVersionUID = 1L;
+
+		public LangDropDown(String id) {
+			super(id);
+			
+			List<SelectOption> list = new ArrayList<SelectOption>();
+			
+			for (Map.Entry<Long, Locale> me : LabelDao.languages.entrySet()) {
+				SelectOption op = new SelectOption(me.getKey().toString(), me.getValue().getDisplayName());
+				if (getSession().getLocale().equals(me.getValue())) {
+					option = op;
+				}
+				list.add(op);
+				if (option == null && me.getKey().toString().equals(InstallWizard.this.getModelObject().defaultLangId)) {
+					option = op;
+				}
+			}
+			setChoices(list);
+		}
+	}
+
+	@Override
+	protected void onFinish(AjaxRequestTarget target) {
+		for (DialogButton b : getButtons()) {
+			b.setEnabled(false, target);
+		}
+		installStep.startInstallation(target);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.html b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.html
new file mode 100644
index 0000000..df874bf
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.html
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:head>
+	<script type="text/javascript" src="js/openmeetings_functions.js" ></script>
+	<style type="text/css">
+		.abstractWizard .adminForm div.formelement {
+			max-width: 600px;
+		}
+		.abstractWizard .adminForm label {
+			width: 240px;
+		}
+		.abstractWizard ul.paramList {
+			list-style-type: none;
+		}
+		.abstractWizard ul.paramList li {
+			padding-top: 5px;
+		}
+		.abstractWizard ul.paramList label {
+			width: 350px;
+			display: inline-block;
+		}
+		.abstractWizard input, .abstractWizard select {
+			width: 280px;
+		}
+		.abstractWizard input[type=checkbox], .abstractWizard input[type=radio] {
+			width: auto;
+		}
+	</style>
+</wicket:head>
+<wicket:extend>
+	<div>
+		<div wicket:id="wizard"></div>
+	</div>
+</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.java b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.java
new file mode 100644
index 0000000..bedcc92
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizardPage.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.pages.install;
+
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.pages.BaseNotInitedPage;
+import org.apache.wicket.RestartResponseException;
+import org.apache.wicket.ajax.AjaxClientInfoBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.head.CssContentHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.protocol.http.request.WebClientInfo;
+
+public class InstallWizardPage extends BaseNotInitedPage {
+	private static final long serialVersionUID = 1L;
+	private final InstallWizard wizard;
+
+	public InstallWizardPage() {
+		if (Application.isInstalled()) {
+			throw new RestartResponseException(Application.get().getHomePage());
+		}
+		add(wizard = new InstallWizard("wizard", getString("install.wizard.install.header")));
+		// This code is required to detect time zone offset
+		add(new AjaxClientInfoBehavior() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onClientInfo(AjaxRequestTarget target, WebClientInfo clientInfo) {
+				super.onClientInfo(target, clientInfo);
+				wizard.initTzDropDown();
+				wizard.open(target);
+			}
+		});
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(new CssContentHeaderItem(".no-close .ui-dialog-titlebar-close { display: none; }", "dialog-noclose", ""));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard_es.properties.xml b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard_es.properties.xml
new file mode 100644
index 0000000..3f046b5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/pages/install/InstallWizard_es.properties.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+	<entry key="org.apache.wicket.extensions.wizard.next"><![CDATA[Siguiente >]]></entry>
+	<entry key="org.apache.wicket.extensions.wizard.finish"><![CDATA[Finalizar]]></entry>
+</properties>
diff --git a/src/web/java/org/apache/openmeetings/web/room/InvitationDialog.html b/src/web/java/org/apache/openmeetings/web/room/InvitationDialog.html
new file mode 100644
index 0000000..167d82e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/InvitationDialog.html
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form wicket:id="form">
+		<table wicket:id="inviteeType">
+			<tr>
+				<td><input type="radio" wicket:id="user"/><label wicket:for="recipients"><wicket:message key="216" /></label></td>
+				<td><input type="hidden" wicket:id="recipients" class="input invitees" style="max-height: 80px"/></td>
+			</tr>
+			<tr>
+				<td><input type="radio" wicket:id="group"/><label wicket:for="groups"><wicket:message key="126" /></label></td>
+				<td><input type="hidden" wicket:id="groups" class="input invitees" style="max-height: 80px"/></td>
+			</tr>
+			<tr>
+				<td><label wicket:for="subject"><wicket:message key="215" /></label></td>
+				<td><input type="text" wicket:id="subject" class="input"/></td>
+			</tr>
+			<tr>
+				<td><label wicket:for="message"><wicket:message key="217" /></label></td>
+				<td><textarea wicket:id="message" style="width: 280px; height: 70px;"></textarea></td>
+			</tr>
+			<tr>
+				<td colspan="2"><input wicket:id="passwordProtected" type="checkbox"/>&nbsp;<label 
+						wicket:for="passwordProtected"><wicket:message key="524" /></label></td>
+			</tr>
+			<tr>
+				<td><label wicket:for="password"><wicket:message key="525" /></label></td>
+				<td><input wicket:id="password" type="password"/></td>
+			</tr>
+			<tr>
+				<td><wicket:message key="526" /></td>
+				<td>
+					<div wicket:id="valid">
+						<input type="radio" wicket:id="one"/><label wicket:for="one"><wicket:message key="527" /></label>
+						<input type="radio" wicket:id="period"/><label wicket:for="period"><wicket:message key="528" /></label>
+						<input type="radio" wicket:id="endless"/><label wicket:for="endless"><wicket:message key="529" /></label>
+					</div>
+				</td>
+			</tr>
+			<tr>
+				<td><label wicket:for="validFrom"><wicket:message key="530" /></label></td>
+				<td><span class="date time picker" wicket:id="validFrom"></span></td>
+			</tr>
+			<tr>
+				<td><label wicket:for="validTo"><wicket:message key="531" /></label></td>
+				<td><span class="date time picker" wicket:id="validTo"></span></td>
+			</tr>
+			<tr>
+				<td><label wicket:for="timeZoneId"><wicket:message key="1143" /></label></td>
+				<td><select wicket:id="timeZoneId"/></td>
+			</tr>
+			<tr>
+				<td><label wicket:for="language"><wicket:message key="59" /></label></td>
+				<td><select wicket:id="language"/></td>
+			</tr>
+			<tr>
+				<td colspan="2"><input wicket:id="url" type="text" readonly="readonly" style="width: 100%;"/></td>
+			</tr>
+		</table>
+		<span wicket:id="feedback"></span>
+	</form>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/room/InvitationDialog.java b/src/web/java/org/apache/openmeetings/web/room/InvitationDialog.java
new file mode 100644
index 0000000..293a40c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/InvitationDialog.java
@@ -0,0 +1,409 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room;
+
+import static org.apache.openmeetings.util.LinkHelper.getInvitationLink;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.AVAILABLE_TIMEZONES;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.openmeetings.data.conference.InvitationManager;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.IInvitationManager.MessageType;
+import org.apache.openmeetings.db.dao.room.InvitationDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.OrganisationDao;
+import org.apache.openmeetings.db.dao.user.OrganisationUserDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.room.Invitation.Valid;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.util.crypt.MD5;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.LanguageDropDown;
+import org.apache.openmeetings.web.util.UserMultiChoice;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.markup.html.form.Radio;
+import org.apache.wicket.markup.html.form.RadioGroup;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.PropertyModel;
+import org.apache.wicket.model.util.CollectionModel;
+import org.apache.wicket.util.string.Strings;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.wicketstuff.select2.Response;
+import org.wicketstuff.select2.Select2MultiChoice;
+import org.wicketstuff.select2.TextChoiceProvider;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.kendo.ui.form.datetime.AjaxDateTimePicker;
+import com.googlecode.wicket.kendo.ui.form.datetime.DateTimePicker;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+public class InvitationDialog extends AbstractFormDialog<Invitation> {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(InvitationDialog.class, webAppRootKey);
+	private final DialogButton generate = new DialogButton("generate", Application.getString(1526));
+	private final DialogButton send = new DialogButton("send", Application.getString(218));
+	private final DialogButton cancel = new DialogButton("cancel", Application.getString(219));
+	private final InvitationForm form;
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+	private final long roomId;
+	private final IModel<String> subject = Model.of((String)null);
+	private final IModel<String> message = Model.of((String)null);
+	private final IModel<String> tzId = Model.of((String)null);
+	private final IModel<InviteeType> inviteeType = Model.of(InviteeType.user);
+	private Long lang;
+	private final TextField<String> url = new TextField<String>("url", Model.of((String)null));
+	enum InviteeType {
+		user
+		, group
+	}
+	private final UserMultiChoice recipients = new UserMultiChoice("recipients", new CollectionModel<User>(new ArrayList<User>()));
+	private final Select2MultiChoice<Organisation> groups = new Select2MultiChoice<Organisation>("groups"
+			, new CollectionModel<Organisation>(new ArrayList<Organisation>())
+			, new TextChoiceProvider<Organisation>() {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				public void query(String term, int page, Response<Organisation> response) {
+					if (WebSession.getRights().contains(User.Right.Admin)) {
+						List<Organisation> groups = getBean(OrganisationDao.class).get(0, Integer.MAX_VALUE);
+						for (Organisation g : groups) {
+							if (g.getName().toLowerCase().contains(term.toLowerCase())) {
+								response.add(g);
+							}
+						}
+					} else {
+						User u = getBean(UserDao.class).get(getUserId());
+						for (Organisation_Users ou : u.getOrganisation_users()) {
+							if (ou.getOrganisation().getName().toLowerCase().contains(term.toLowerCase())) {
+								response.add(ou.getOrganisation());
+							}
+						}
+					}
+				}
+
+				@Override
+				public Collection<Organisation> toChoices(Collection<String> ids) {
+					Collection<Organisation> c = new ArrayList<>();
+					for (String id : ids) {
+						c.add(getBean(OrganisationDao.class).get(Long.valueOf(id)));
+					}
+					return c;
+				}
+
+				@Override
+				protected String getDisplayText(Organisation choice) {
+					return choice.getName();
+				}
+
+				@Override
+				protected Object getId(Organisation choice) {
+					return choice.getOrganisation_id();
+				}
+			});
+
+	public InvitationDialog(String id, long roomId) {
+		super(id, Application.getString(214), new CompoundPropertyModel<Invitation>(new Invitation()));
+		this.roomId = roomId;
+		add(form = new InvitationForm("form", getModel()));
+	}
+
+	@Override
+	public int getWidth() {
+		return 500;
+	}
+
+	public void updateModel(AjaxRequestTarget target) {
+		Invitation i = new Invitation();
+		User u = getBean(UserDao.class).get(getUserId());
+		i.setInvitedBy(u);
+		Room r = getBean(RoomDao.class).get(roomId);
+		i.setRoom(r);
+		Calendar d = Calendar.getInstance();
+		i.setValidFrom(d.getTime());
+		d.add(Calendar.DATE, 1);
+		i.setValidTo(d.getTime());
+		i.setPassword("ASDDF");
+		String hashRaw = "HASH" + (System.currentTimeMillis());
+		try {
+			i.setHash(MD5.do_checksum(hashRaw));
+		} catch (NoSuchAlgorithmException e) {
+			log.error("Unexpected error while creating invitation", e);
+			throw new RuntimeException(e);
+		}
+		subject.setObject(null);
+		message.setObject(null);
+		recipients.setModelObject(new ArrayList<User>());
+		recipients.setEnabled(true);
+		groups.setModelObject(new ArrayList<Organisation>());
+		groups.setEnabled(false);
+		tzId.setObject(u.getTimeZoneId());
+		lang = u.getLanguage_id();
+		url.setModelObject(null);
+		inviteeType.setObject(InviteeType.user);
+		form.setModelObject(i);
+		send.setEnabled(false, target);
+		generate.setEnabled(false, target);
+		target.add(form);
+	}
+
+	@Override
+	protected Form<?> getForm(DialogButton button) {
+		if (button.equals(generate) || button.equals(send)) {
+			return form;
+		}
+		return super.getForm(button);
+	}
+	
+	@Override
+	public InvitationForm getForm() {
+		return form;
+	}
+
+	@Override
+	protected DialogButton getSubmitButton() {
+		return send;
+	}
+
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(generate, send, cancel);
+	}
+	
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+
+	@Override
+	public void onClick(AjaxRequestTarget target, DialogButton button) {
+		//TODO need to be reviewed
+		if (button.equals(cancel)) {
+			super.onClick(target, button);
+		} else if (button.equals(generate)) {
+			Invitation i = create(recipients.getModelObject().iterator().next());
+			form.setModelObject(i);
+			url.setModelObject(getInvitationLink(getBean(ConfigurationDao.class).getBaseUrl(), i));
+			target.add(url);
+		} else if (button.equals(send)) {
+			if (Strings.isEmpty(url.getModelObject())) {
+				if (inviteeType.getObject() == InviteeType.user) {
+					for (User u : recipients.getModelObject()) {
+						Invitation i = create(u);
+						try {
+							getBean(InvitationManager.class).sendInvitionLink(i, MessageType.Create, subject.getObject(), message.getObject(), false);
+						} catch (Exception e) {
+							log.error("error while sending invitation by User ", e);
+						}
+					}
+				} else {
+					for (Organisation g : groups.getModelObject()) {
+						for (Organisation_Users ou : getBean(OrganisationUserDao.class).get(g.getOrganisation_id(), 0, Integer.MAX_VALUE)) {
+							Invitation i = create(ou.getUser());
+							try {
+								getBean(InvitationManager.class).sendInvitionLink(i, MessageType.Create, subject.getObject(), message.getObject(), false);
+							} catch (Exception e) {
+								log.error("error while sending invitation by Group ", e);
+							}
+						}
+					}
+				}
+			} else {
+				Invitation i = form.getModelObject();
+				try {
+					getBean(InvitationManager.class).sendInvitionLink(i, MessageType.Create, subject.getObject(), message.getObject(), false);
+				} catch (Exception e) {
+					log.error("error while sending invitation by URL ", e);
+				}
+			}
+			super.onClick(target, button);
+		}
+	}
+	
+	private Invitation create(User u) {
+		Invitation i = new Invitation(form.getModelObject());
+		i.setId(null);
+		i.setUpdated(null);
+		i.setUsed(false);
+		
+		i.setPassword(ManageCryptStyle.getInstanceOfCrypt().createPassPhrase(i.getPassword())); //FIXME should be hidden
+		//FIXME another HACK
+		Calendar d = Calendar.getInstance();
+		d.setTime(i.getValidFrom());
+		d.add(Calendar.MINUTE, -5);
+		i.setValidFrom(d.getTime());
+		
+		i.setInvitee(u);
+		if (Type.contact == u.getType()) {
+			//TODO not sure it is right
+			u.setLanguage_id(lang);
+		}
+		return getBean(InvitationDao.class).update(i);
+	}
+	
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		//designed to be empty because of multiple submit buttons
+	}
+	
+	private class InvitationForm extends Form<Invitation> {
+		private static final long serialVersionUID = 1L;
+		private final PasswordTextField passwd;
+		private final DateTimePicker from;
+		private final DateTimePicker to;
+		private final DropDownChoice<String> timeZoneId;
+		
+		public InvitationForm(String id, IModel<Invitation> model) {
+			super(id, model);
+			RadioGroup<InviteeType> rdi = new RadioGroup<>("inviteeType", inviteeType);
+			add(rdi.add(new AjaxFormChoiceComponentUpdatingBehavior() {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					boolean groupsEnabled = InviteeType.group == inviteeType.getObject();
+					updateButtons(target);
+					target.add(groups.setEnabled(groupsEnabled), recipients.setEnabled(!groupsEnabled));
+				}
+			}));
+			//TODO list should be updated on open
+			rdi.add(recipients.setLabel(Model.of(Application.getString(216))).setRequired(true).add(new AjaxFormComponentUpdatingBehavior("change") {
+				private static final long serialVersionUID = 1L;
+				
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					url.setModelObject(null);
+					updateButtons(target);
+				}
+			}).setOutputMarkupId(true));
+			rdi.add(groups.setLabel(Model.of(Application.getString(126))).setRequired(true).add(new AjaxFormComponentUpdatingBehavior("change") {
+				private static final long serialVersionUID = 1L;
+				
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					url.setModelObject(null);
+					updateButtons(target);
+				}
+			}).setOutputMarkupId(true));
+			rdi.add(new Radio<InviteeType>("user", Model.of(InviteeType.user)), new Radio<InviteeType>("group", Model.of(InviteeType.group)));
+
+			rdi.add(new TextField<String>("subject", subject));
+			rdi.add(new TextArea<String>("message", message));
+			rdi.add(new AjaxCheckBox("passwordProtected") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					InvitationForm.this.getModelObject().setPasswordProtected(getConvertedInput());
+					passwd.setEnabled(getConvertedInput());
+					target.add(passwd);
+				}
+			});
+			RadioGroup<Valid> valid = new RadioGroup<Valid>("valid");
+			valid.add(new AjaxFormChoiceComponentUpdatingBehavior() {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					boolean dateEnabled = InvitationForm.this.getModelObject().getValid() == Valid.Period;
+					target.add(from.setEnabled(dateEnabled), to.setEnabled(dateEnabled), timeZoneId.setEnabled(dateEnabled));
+				}
+			});
+			rdi.add(valid.add(new Radio<Valid>("one", Model.of(Valid.OneTime))
+					, new Radio<Valid>("period", Model.of(Valid.Period))
+					, new Radio<Valid>("endless", Model.of(Valid.Endless))));
+			rdi.add(passwd = new PasswordTextField("password"));
+			Invitation i = getModelObject();
+			passwd.setLabel(Model.of(Application.getString(525))).setOutputMarkupId(true).setEnabled(i.isPasswordProtected());
+			rdi.add(from = new AjaxDateTimePicker("validFrom", "yyyy/MM/dd", "HH:mm:ss")); //FIXME use user locale
+			rdi.add(to = new AjaxDateTimePicker("validTo", "yyyy/MM/dd", "HH:mm:ss")); //FIXME use user locale
+			rdi.add(timeZoneId = new DropDownChoice<String>("timeZoneId", tzId, AVAILABLE_TIMEZONES));
+			from.setEnabled(i.getValid() == Valid.Period).setOutputMarkupId(true);
+			to.setEnabled(i.getValid() == Valid.Period).setOutputMarkupId(true);
+			timeZoneId.setEnabled(i.getValid() == Valid.Period).setOutputMarkupId(true)
+				.add(new AjaxFormComponentUpdatingBehavior("change") {
+					private static final long serialVersionUID = 1L;
+	
+					@Override
+					protected void onUpdate(AjaxRequestTarget target) {
+						//no-op added to preserve selection
+					}
+				});
+			rdi.add(new LanguageDropDown("language", new PropertyModel<Long>(InvitationDialog.this, "lang")));
+			rdi.add(url.setOutputMarkupId(true));
+			add(feedback);
+		}
+		
+		private void updateButtons(AjaxRequestTarget target) {
+			if (inviteeType.getObject() == InviteeType.user) {
+				Collection<User> to = recipients.getModelObject();
+				send.setEnabled(to.size() > 0, target);
+				generate.setEnabled(to.size() == 1, target);
+			} else {
+				Collection<Organisation> to = groups.getModelObject();
+				send.setEnabled(to.size() > 0, target);
+				generate.setEnabled(false, target);
+			}
+		}
+		
+		@Override
+		protected void onValidate() {
+			if (from.getConvertedInput() != null && to.getConvertedInput() != null && from.getConvertedInput().after(to.getConvertedInput())) {
+				error(Application.getString(1592));
+			}
+		}
+	}
+	
+	@Override
+	protected void onDetach() {
+		subject.detach();
+		message.detach();
+		tzId.detach();
+		inviteeType.detach();
+		super.onDetach();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/room/RoomBroadcaster.java b/src/web/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
new file mode 100644
index 0000000..da20e69
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.server.ClientSessionInfo;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.session.SessionManager;
+import org.red5.server.api.IConnection;
+
+public class RoomBroadcaster {
+	public static Client getClient(String publicSid) {
+		ClientSessionInfo csi = getBean(SessionManager.class).getClientByPublicSIDAnyServer(publicSid, false);
+		return csi == null ? null : csi.getRcl();
+	}
+	
+	public static void broadcast(String publicSid, String method, Object obj) {
+		Client rc = getClient(publicSid);
+		final Long roomId = rc.getRoom_id();
+		final SessionManager sessionMgr = getBean(SessionManager.class);
+		final UserDao userDao = getBean(UserDao.class);
+		ScopeApplicationAdapter sa = getBean(ScopeApplicationAdapter.class);
+		sa.new MessageSender(sa.getRoomScope("" + roomId), method, obj) {
+			public boolean filter(IConnection conn) {
+				Client rcl = sessionMgr.getClientByStreamId(conn.getClient().getId(), null);
+				return rcl.getIsScreenClient()
+						|| rcl.getRoom_id() == null || !rcl.getRoom_id().equals(roomId) || userDao.get(rcl.getUser_id()) == null;
+			}
+		}.start();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/room/RoomPanel.html b/src/web/java/org/apache/openmeetings/web/room/RoomPanel.html
new file mode 100644
index 0000000..c0ed04f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/RoomPanel.html
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div id="swfloading"
+		style="z-index: 666666; position: absolute; top: 50%; left: 50%;">
+		<img src="images/ajax-loader.gif" />
+	</div>
+	<noscript>Please enable JavaScript in order to use this application.</noscript>
+	<script type="text/javascript" wicket:id="init"></script>
+	<div wicket:id="invite"></div>
+	<div wicket:id="createPoll"></div>
+	<div wicket:id="vote"></div>
+	<div wicket:id="pollResults"></div>
+</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/room/RoomPanel.java b/src/web/java/org/apache/openmeetings/web/room/RoomPanel.java
new file mode 100644
index 0000000..47ad12a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/RoomPanel.java
@@ -0,0 +1,250 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getLanguage;
+import static org.apache.openmeetings.web.app.WebSession.getSid;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.room.RoomBroadcaster.getClient;
+import static org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
+import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.room.InvitationDao;
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.SOAPLoginDao;
+import org.apache.openmeetings.db.dao.server.ServerDao;
+import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.session.SessionManager;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.BasePanel;
+import org.apache.openmeetings.web.room.poll.CreatePollDialog;
+import org.apache.openmeetings.web.room.poll.PollResultsDialog;
+import org.apache.openmeetings.web.room.poll.VoteDialog;
+import org.apache.wicket.Component;
+import org.apache.wicket.RuntimeConfigurationType;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
+import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.head.CssHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.PriorityHeaderItem;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.util.string.StringValue;
+import org.apache.wicket.util.time.Duration;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+public class RoomPanel extends BasePanel {
+	private static final long serialVersionUID = 1L;
+	private static final String WICKET_ROOM_ID = "wicketroomid";
+	private static final String PARAM_PUBLIC_SID = "publicSid";
+	private static final Logger log = Red5LoggerFactory.getLogger(RoomPanel.class, webAppRootKey);
+	private final InvitationDialog invite;
+	private final CreatePollDialog createPoll;
+	private final VoteDialog vote;
+	private final PollResultsDialog pollResults;
+	private long roomId = 0;
+	
+	public RoomPanel(String id) {
+		this(id, new PageParameters());
+	}
+	
+	private String getFlashFile() {
+		return RuntimeConfigurationType.DEVELOPMENT == getApplication().getConfigurationType()
+				? "maindebug.as3.swf11.swf" : "main.as3.swf11.swf";
+	}
+	
+	private static PageParameters addServer(PageParameters pp, Server s) {
+		return pp.add("protocol", s.getProtocol()).add("host", s.getAddress()).add("port", s.getPort()).add("context", s.getWebapp());
+	}
+	
+	public static PageParameters addServer(long roomId, boolean addBasic) {
+		PageParameters pp = new PageParameters();
+		if (addBasic) {
+			pp.add("wicketsid", getSid()).add(WICKET_ROOM_ID, roomId).add("language", getLanguage());
+		}
+		List<Server> serverList = getBean(ServerDao.class).getActiveServers();
+
+		long minimum = -1;
+		Server result = null;
+		HashMap<Server, List<Long>> activeRoomsMap = new HashMap<Server, List<Long>>();
+		for (Server server : serverList) {
+			List<Long> roomIds = getBean(SessionManager.class).getActiveRoomIdsByServer(server);
+			if (roomIds.contains(roomId)) {
+				// if the room is already opened on a server, redirect the user to that one,
+				log.debug("Room is already opened on a server " + server.getAddress());
+				return addServer(pp, server);
+			}
+			activeRoomsMap.put(server, roomIds);
+		}
+		for (Map.Entry<Server, List<Long>> entry : activeRoomsMap.entrySet()) {
+			List<Long> roomIds = entry.getValue();
+			Long capacity = getBean(RoomDao.class).getRoomsCapacityByIds(roomIds);
+			if (minimum < 0 || capacity < minimum) {
+				minimum = capacity;
+				result = entry.getKey();
+			}
+			log.debug("Checking server: " + entry.getKey() + " Number of rooms " + roomIds.size() + " RoomIds: "
+					+ roomIds + " max(Sum): " + capacity);
+		}
+		return result == null ? pp : addServer(pp, result);
+	}
+
+	public RoomPanel(String id, long roomId) {
+		this(id, addServer(roomId, true));
+	}
+	
+	public RoomPanel(String id, PageParameters pp) {
+		super(id);
+
+		StringValue swfVal = pp.get("swf");
+		String swf = (swfVal.isEmpty() ? getFlashFile() : swfVal.toString())
+				+ new PageParametersEncoder().encodePageParameters(pp);
+		add(new Label("init", String.format("initSwf('%s');", swf)).setEscapeModelStrings(false));
+		add(new AbstractAjaxTimerBehavior(Duration.minutes(5)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onTimer(AjaxRequestTarget target) {
+				getBean(SessiondataDao.class).checkSession(WebSession.getSid()); //keep SID alive
+			}
+		});
+		//OK let's find the room
+		try {
+			StringValue room = pp.get(WICKET_ROOM_ID);
+			StringValue secureHash = pp.get(WebSession.SECURE_HASH);
+			StringValue invitationHash = pp.get(WebSession.INVITATION_HASH);
+			if (!room.isEmpty()) {
+				roomId = room.toLong();
+			} else if (!secureHash.isEmpty()) {
+				roomId = getBean(SOAPLoginDao.class).get(secureHash.toString()).getRoom_id();
+			} else if (!invitationHash.isEmpty()) {
+				roomId = getBean(InvitationDao.class).getInvitationByHashCode(invitationHash.toString(), true).getRoom().getRooms_id();
+			}
+		} catch (Exception e) {
+			//no-op
+		}
+		add(invite = new InvitationDialog("invite", roomId));
+		add(createPoll = new CreatePollDialog("createPoll", roomId));
+		add(vote = new VoteDialog("vote", roomId));
+		add(pollResults = new PollResultsDialog("pollResults", roomId));
+		if (roomId > 0) {
+			add(new AbstractDefaultAjaxBehavior() {
+				private static final long serialVersionUID = 1L;
+	
+				@Override
+				protected void respond(AjaxRequestTarget target) {
+					invite.updateModel(target);
+					invite.open(target);
+				}
+				
+				@Override
+				public void renderHead(Component component, IHeaderResponse response) {
+					super.renderHead(component, response);
+					response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forScript(getNamedFunction("openInvitation", this), "openInvitation")));
+				}
+			});
+			add(new AbstractDefaultAjaxBehavior() {
+				private static final long serialVersionUID = 1L;
+	
+				@Override
+				protected void respond(AjaxRequestTarget target) {
+					String publicSid = getPublicSid();
+					Client c = getClient(publicSid);
+					if (c != null && c.getIsMod()) {
+						createPoll.updateModel(target, publicSid);
+						createPoll.open(target);
+					}
+				}
+				
+				@Override
+				public void renderHead(Component component, IHeaderResponse response) {
+					super.renderHead(component, response);
+					response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forScript(getNamedFunction("createPoll", this, explicit(PARAM_PUBLIC_SID)), "createPoll")));
+				}
+			});
+			add(new AbstractDefaultAjaxBehavior() {
+				private static final long serialVersionUID = 1L;
+	
+				@Override
+				protected void respond(AjaxRequestTarget target) {
+					Client c = getClient(getPublicSid());
+					if (c != null) {
+						pollResults.updateModel(target, c.getIsMod());
+						pollResults.open(target);
+					}
+				}
+				
+				@Override
+				public void renderHead(Component component, IHeaderResponse response) {
+					super.renderHead(component, response);
+					response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forScript(getNamedFunction("pollResults", this, explicit(PARAM_PUBLIC_SID)), "pollResults")));
+				}
+			});
+			add(new AbstractDefaultAjaxBehavior() {
+				private static final long serialVersionUID = 1L;
+	
+				@Override
+				protected void respond(AjaxRequestTarget target) {
+					if (getBean(PollDao.class).hasPoll(roomId) && !getBean(PollDao.class).hasVoted(roomId, getUserId()) && getClient(getPublicSid()) != null) {
+						vote.updateModel(target);
+						vote.open(target);
+					}
+				}
+				
+				@Override
+				public void renderHead(Component component, IHeaderResponse response) {
+					super.renderHead(component, response);
+					response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forScript(getNamedFunction("vote", this, explicit(PARAM_PUBLIC_SID)), "vote")));
+				}
+			});
+		}
+	}
+
+	private ResourceReference newResourceReference() {
+		return new JavaScriptResourceReference(RoomPanel.class, "swf-functions.js");
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(newResourceReference())));
+		response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forUrl("js/history.js")));
+		response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forUrl("js/openmeetings_functions.js")));
+		response.render(new PriorityHeaderItem(CssHeaderItem.forUrl("css/history.css")));
+	}
+	
+	private String getPublicSid() {
+		return getRequest().getRequestParameters().getParameterValue(PARAM_PUBLIC_SID).toString();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.html b/src/web/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.html
new file mode 100644
index 0000000..0268e7c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.html
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form wicket:id="form">
+		<table>
+			<tr>
+				<th colspan="2"><wicket:message key="19" /></th>
+			</tr>
+			<tr>
+				<td><label wicket:for="pollName"><wicket:message key="1410" /></label></td>
+				<td><input type="text" wicket:id="pollName" class="input"/></td>
+			</tr>
+			<tr>
+				<td><label wicket:for="pollQuestion"><wicket:message key="20" /></label></td>
+				<td><textarea wicket:id="pollQuestion" style="width: 280px; height: 70px;"></textarea></td>
+			</tr>
+			<tr>
+				<td><label wicket:for="pollType"><wicket:message key="21" /></label></td>
+				<td><select wicket:id="pollType"/></td>
+			</tr>
+			<tr>
+				<td colspan="2" style="color: red;"><wicket:message key="23" /></td>
+			</tr>
+		</table>
+		<div wicket:id="feedback"></div>
+	</form>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.java b/src/web/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.java
new file mode 100644
index 0000000..ff1b4ee
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.java
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room.poll;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.room.RoomBroadcaster.broadcast;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.PollType;
+import org.apache.openmeetings.db.entity.room.RoomPoll;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.RequiredTextField;
+import org.apache.wicket.markup.html.form.TextArea;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+public class CreatePollDialog extends AbstractFormDialog<RoomPoll> {
+	private static final long serialVersionUID = 1L;
+	private final DialogButton create = new DialogButton("create", Application.getString(22));
+	private final DialogButton cancel = new DialogButton("cancel", Application.getString(25));
+	private final long roomId;
+	private final PollForm form;
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+	private String publicSid = null;
+
+	public CreatePollDialog(String id, long roomId) {
+		super(id, Application.getString(18), new CompoundPropertyModel<RoomPoll>(new RoomPoll()));
+		this.roomId = roomId;
+		add(form = new PollForm("form", getModel()));
+	}
+
+	public void updateModel(AjaxRequestTarget target, String publicSid) {
+		this.publicSid = publicSid;
+		RoomPoll p = new RoomPoll();
+		User u = getBean(UserDao.class).get(getUserId());
+		p.setCreatedBy(u);
+		p.setRoom(getBean(RoomDao.class).get(roomId));
+		p.setPollType(getBean(PollDao.class).getPollTypes().get(0));
+		form.setModelObject(p);
+		target.add(form);
+	}
+	
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(create, cancel);
+	}
+	
+	@Override
+	protected DialogButton getSubmitButton() {
+		return create;
+	}
+
+	@Override
+	public PollForm getForm() {
+		return form;
+	}
+
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		getBean(PollDao.class).closePoll(roomId);
+		RoomPoll p = getBean(PollDao.class).updatePoll(form.getModelObject());
+		broadcast(publicSid, "newPoll", p);
+	}
+
+	private class PollForm extends Form<RoomPoll> {
+		private static final long serialVersionUID = 1L;
+		
+		public PollForm(String id, IModel<RoomPoll> model) {
+			super(id, model);
+			add(new RequiredTextField<String>("pollName").setLabel(Model.of(Application.getString(1410))));
+			add(new TextArea<String>("pollQuestion"));
+			add(new DropDownChoice<PollType>("pollType", getBean(PollDao.class).getPollTypes()
+					, new ChoiceRenderer<PollType>() {
+						private static final long serialVersionUID = 1L;
+
+						@Override
+						public Object getDisplayValue(PollType pt) {
+							return getString("" + pt.getLabel());
+						}
+
+						@Override
+						public String getIdValue(PollType pt, int index) {
+							return "" + pt.getPollTypesId();
+						}
+					})
+					.setRequired(true).setLabel(Model.of(Application.getString(21))));
+			add(feedback);
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.html b/src/web/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.html
new file mode 100644
index 0000000..9fcd956
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.html
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form wicket:id="selForm">
+		<table style="width: 100%">
+			<tr>
+				<td><wicket:message key="1412"/></td>
+				<td><select style="width: 230px" wicket:id="polls"></select></td>
+			</tr>
+		</table>
+	</form>
+	<form wicket:id="dispForm">
+		<table style="width: 100%">
+			<tr>
+				<td colspan="2"><span wicket:id="name"></span>&nbsp;<wicket:message key="36"/></td>
+			</tr>
+			<tr>
+				<td colspan="2"><span wicket:id="question"></span></td>
+			</tr>
+			<tr>
+				<td><wicket:message key="39"/>&nbsp;(<span wicket:id="count"></span>)</td>
+				<td><select style="width: 280px" wicket:id="chartType"></select></td>
+			</tr>
+			<tr>
+				<td><wicket:message key="40"/></td>
+				<td><div wicket:id="chart"></div></td>
+			</tr>
+		</table>
+	</form>
+	<div wicket:id="closeConfirm"></div>
+	<div wicket:id="deleteConfirm"></div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java b/src/web/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java
new file mode 100644
index 0000000..72fde30
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java
@@ -0,0 +1,370 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room.poll;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.entity.room.RoomPoll;
+import org.apache.openmeetings.db.entity.room.RoomPollAnswers;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.head.CssHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.wicketstuff.jqplot.behavior.JqPlotBehavior;
+import org.wicketstuff.jqplot.behavior.JqPlotCssResourceReference;
+import org.wicketstuff.jqplot.behavior.JqPlotJavascriptResourceReference;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;
+
+import br.com.digilabs.jqplot.Chart;
+import br.com.digilabs.jqplot.ChartConfiguration;
+import br.com.digilabs.jqplot.JqPlotResources;
+import br.com.digilabs.jqplot.JqPlotUtils;
+import br.com.digilabs.jqplot.chart.BarChart;
+import br.com.digilabs.jqplot.chart.PieChart;
+import br.com.digilabs.jqplot.elements.Highlighter;
+import br.com.digilabs.jqplot.elements.Location;
+import br.com.digilabs.jqplot.elements.RendererOptions;
+
+/**
+ * @author solomax
+ *
+ */
+public class PollResultsDialog extends AbstractDialog<RoomPoll> {
+	private static final long serialVersionUID = 1L;
+	private final WebMarkupContainer chartDiv = new WebMarkupContainer("chart");
+	private final long roomId;
+	private final PollSelectForm selForm;
+	private final PollResultsForm dispForm;
+	private final DialogButton cancel = new DialogButton("cancel", Application.getString(25));
+	private final DialogButton close = new DialogButton("close", Application.getString(1418));
+	private final DialogButton delete = new DialogButton("delete", Application.getString(1420));
+	private boolean moderator = false;
+	private final MessageDialog closeConfirm;
+	private final MessageDialog deleteConfirm;
+
+	public PollResultsDialog(String id, long _roomId) {
+		super(id, Application.getString(37));
+		this.roomId = _roomId;
+		add(selForm = new PollSelectForm("selForm"));
+		add(dispForm = new PollResultsForm("dispForm"));
+		add(closeConfirm = new MessageDialog("closeConfirm", Application.getString(1418), Application.getString(1419), DialogButtons.YES_NO, DialogIcon.WARN) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
+				// TODO should rights be additionally checked here????
+				if(button != null && button.match(YES)) {
+					Long id = dispForm.getModelObject().getRoomPollId();
+					getBean(PollDao.class).closePoll(roomId);
+					selForm.updateModel(handler);
+
+					RoomPoll p = getBean(PollDao.class).getPoll(id);
+					selForm.select.setModelObject(p);
+					dispForm.updateModel(p, false, handler);
+					//TODO result dialogs of other users should also be updated
+				}
+			}
+		});
+		add(deleteConfirm = new MessageDialog("deleteConfirm", Application.getString(1420), Application.getString(1421), DialogButtons.YES_NO, DialogIcon.WARN) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
+				// TODO should rights be additionally checked here????
+				if(button != null && button.match(YES)) {
+					getBean(PollDao.class).deletePoll(dispForm.getModelObject().getRoomPollId());
+					selForm.updateModel(handler);
+					dispForm.updateModel(selForm.select.getModelObject(), true, handler);
+					//TODO result dialogs of other users should also be updated
+				}
+			}
+		});
+	}
+
+	@Override
+	public int getWidth() {
+		return 500;
+	}
+	
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(delete, close, cancel);
+	}
+	
+	public void updateModel(AjaxRequestTarget target, boolean moderator) {
+		selForm.updateModel(target);
+		this.moderator = moderator;
+		RoomPoll p = selForm.select.getModelObject();
+		dispForm.updateModel(p, false, target);
+		StringBuilder builder = new StringBuilder();
+		builder.append("$('#").append(PollResultsDialog.this.getMarkupId()).append("').on('dialogopen', function( event, ui ) {");
+		builder.append(getScript(barChart(p)));
+		builder.append("});");
+		
+		target.appendJavaScript(builder.toString());
+	}
+
+	private StringBuilder getScript(Chart<?> chart) {
+		StringBuilder builder = new StringBuilder();
+		builder.append("$('#").append(chartDiv.getMarkupId()).append("').html(''); ");
+		builder.append("$.jqplot('").append(chartDiv.getMarkupId()).append("', ");
+		builder.append(chart.getChartData().toJsonString());
+		builder.append(", ");
+		builder.append(JqPlotUtils.jqPlotToJson(chart.getChartConfiguration()));
+		builder.append(");");
+		return builder;
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(JavaScriptHeaderItem.forReference(JqPlotJavascriptResourceReference.get()));
+		response.render(CssHeaderItem.forReference(JqPlotCssResourceReference.get()));
+		Chart<?> c1 = new PieChart<Number>(null);
+		c1.getChartConfiguration().setHighlighter(new Highlighter());
+		for (Chart<?> chart : new Chart<?>[]{c1, new BarChart<Integer>(null)}) {
+			for (String resource : JqPlotUtils.retriveJavaScriptResources(chart)) {
+				response.render(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(JqPlotBehavior.class, removeMinified(resource))));
+			}
+		}
+	}
+	
+    private String removeMinified(String name_) {
+        String name = name_;
+        int idxOfExtension = name.lastIndexOf('.');
+        if (idxOfExtension > -1) {
+            String extension = name.substring(idxOfExtension);
+            name = name.substring(0, name.length() - extension.length() + 1);
+            if (name.endsWith(".min."))
+            {
+                name = name.substring(0, name.length() - 5) + extension;
+            }
+        }
+        return name;
+    }
+
+    @Override
+    public void onClick(AjaxRequestTarget target, DialogButton button) {
+    	if (close.equals(button)) {
+    		closeConfirm.open(target);
+    	} else if (delete.equals(button)) {
+    		deleteConfirm.open(target);
+    	} else {
+    		super.onClick(target, button);
+    	}
+    }
+    
+    @Override
+    public void onClose(IPartialPageRequestHandler handler, DialogButton button) {
+    }
+    
+    private String[] getTicks(RoomPoll p) {
+		return p != null && p.getPollType().getIsNumericAnswer()
+				? new String[] {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"}
+				: new String[] {Application.getString(34), Application.getString(35)};
+    }
+    
+	private Integer[] initValues(int size) {
+		Integer[] values = new Integer[size];
+		for (int i = 0; i < size; ++i) {
+			values[i] = 0;
+		}
+		return values;
+	}
+	
+	private Integer[] getValues(RoomPoll p) {
+		Integer[] values = initValues(p != null && p.getPollType().getIsNumericAnswer() ? 10 : 2);
+		if (p != null && p.getPollType().getIsNumericAnswer()) {
+			for (RoomPollAnswers a : p.getRoomPollAnswerList()) {
+				values[a.getPointList() - 1] ++;
+			}
+		} else if (p != null) {
+			for (RoomPollAnswers a : p.getRoomPollAnswerList()) {
+				values[a.getAnswer() ? 0 : 1] ++;
+			}
+		}
+		return values;
+	}
+	
+	private PieChart<Integer> pieChart(RoomPoll p) {
+        PieChart<Integer> pieChart = new PieChart<Integer>(null);
+		String[] ticks = getTicks(p);
+		Integer[] values = getValues(p);
+        for (int i = 0; i < values.length; ++i) {
+            pieChart.addValue(ticks[i], values[i]);
+        }
+        
+        pieChart.getSeriesDefaults().setRendererOptions(
+        		new RendererOptions().setHighlightMouseDown(true).setShowDataLabels(true)
+        			.setFill(false).setSliceMargin(4).setLineWidth(5));
+
+        Highlighter h = new Highlighter();
+        h.setShow(true);
+        h.setFormatString("%s, %P");
+        h.setTooltipLocation(Location.ne);
+        h.setShowTooltip(true);
+        h.setUseAxesFormatters(false);
+        
+        pieChart.getChartConfiguration().setLegend(null).setHighlighter(h);
+        return pieChart;
+	}
+	
+	private BarChart<Integer> barChart(RoomPoll p) {
+		String[] ticks = getTicks(p);
+		BarChart<Integer> barChart = new BarChart<Integer>(null);
+		barChart.addValue(Arrays.asList(getValues(p)));
+        
+        barChart.getSeriesDefaults().setRendererOptions(
+        		new RendererOptions().setHighlightMouseDown(true).setShowDataLabels(true)
+        			.setFill(false).setSliceMargin(4).setLineWidth(5).setBarDirection("horizontal"));
+
+        Highlighter h = new Highlighter();
+        h.setShow(true);
+        h.setFormatString("%s, %P");
+        h.setTooltipLocation(Location.ne);
+        h.setShowTooltip(true);
+        h.setUseAxesFormatters(false);
+        
+        ChartConfiguration<Long> cfg = barChart.getChartConfiguration();
+        cfg.setLegend(null).setHighlighter(h);
+        cfg.axesInstance().setXaxis(null);
+        /*cfg.axesInstance().xAxisInstance().setRenderer(JqPlotResources.AxisTickRenderer);*/
+        cfg.axesInstance()
+        	.yAxisInstance()
+        	.setTicks(ticks)
+        	.setRenderer(JqPlotResources.CategoryAxisRenderer);
+        return barChart;
+	}
+	
+	private class PollSelectForm extends Form<RoomPoll> {
+		private static final long serialVersionUID = 1L;
+		private final DropDownChoice<RoomPoll> select;
+
+		PollSelectForm(String id) {
+			super(id);
+			add((select = new DropDownChoice<RoomPoll>("polls", Model.of((RoomPoll)null), new ArrayList<RoomPoll>(), new ChoiceRenderer<RoomPoll>() {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				public Object getDisplayValue(RoomPoll object) {
+					return object == null ? "" : String.format("%s%s", object.getPollName(), object.isArchived() ? "" : String.format(" (%s)", Application.getString(1413)));
+				}
+
+				@Override
+				public String getIdValue(RoomPoll object, int index) {
+					return object == null ? "" : "" + object.getRoomPollId();
+				}
+			})).add(new AjaxFormComponentUpdatingBehavior("change") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					dispForm.updateModel(select.getModelObject(), true, target);
+				}
+			}));
+			updateModel(null);
+		}
+
+		public void updateModel(IPartialPageRequestHandler handler) {
+			List<RoomPoll> list = new ArrayList<RoomPoll>();
+			RoomPoll p = getBean(PollDao.class).getPoll(roomId);
+			if (p != null) {
+				list.add(p);
+			}
+			list.addAll(getBean(PollDao.class).getArchivedPollList(roomId));
+			select.setChoices(list);
+			select.setModelObject(list.isEmpty() ? null : list.get(0));
+			if (handler != null) {
+				handler.add(this);
+			}
+		}
+	}
+	
+	private class PollResultsForm extends Form<RoomPoll> {
+		private static final long serialVersionUID = 1L;
+		private final String SIMPLE_CHART = Application.getString(1414);
+		private final String PIE_CHART = Application.getString(1415);
+		private final IModel<String> name = Model.of((String)null);
+		private final IModel<Integer> count = Model.of(0);
+		private final DropDownChoice<String> chartType = new DropDownChoice<String>("chartType", Model.of(SIMPLE_CHART), Arrays.asList(SIMPLE_CHART, PIE_CHART));
+
+		PollResultsForm(String id) {
+			super(id, Model.of((RoomPoll)null));
+			setOutputMarkupId(true);
+			add(new Label("name", name));
+			add(new Label("question"));
+			add(new Label("count", count));
+			add(chartType.add(new AjaxFormComponentUpdatingBehavior("change") {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected void onUpdate(AjaxRequestTarget target) {
+					redraw(target);
+				}
+			}));
+			add(chartDiv.setOutputMarkupId(true));
+		}
+		
+		public void updateModel(RoomPoll poll, boolean redraw, IPartialPageRequestHandler handler) {
+			setModelObject(poll);
+			name.setObject(poll == null ? "" : VoteDialog.getName(poll.getCreatedBy()));
+			count.setObject(poll == null ? 0 : poll.getRoomPollAnswerList().size());
+			handler.add(this);
+			close.setVisible(moderator && (poll != null && !poll.isArchived()), handler);
+			delete.setVisible(moderator, handler);
+			if (redraw) {
+				redraw(handler);
+			}
+		}
+		
+		private void redraw(IPartialPageRequestHandler handler) {
+			RoomPoll poll = getModelObject();
+			Chart<?> chart = SIMPLE_CHART.equals(chartType.getModelObject()) ? barChart(poll) : pieChart(poll);
+			handler.appendJavaScript(getScript(chart));
+		}
+		
+		@Override
+		protected void onDetach() {
+			name.detach();
+			count.detach();
+			super.onDetach();
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/room/poll/VoteDialog.html b/src/web/java/org/apache/openmeetings/web/room/poll/VoteDialog.html
new file mode 100644
index 0000000..2af85a7
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/poll/VoteDialog.html
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form wicket:id="form">
+		<table>
+			<tr>
+				<td colspan="2"><span wicket:id="user"></span>&nbsp;<wicket:message key="36" /></td>
+			</tr>
+			<tr>
+				<td colspan="2"><span wicket:id="roomPoll.pollQuestion"></span></td>
+			</tr>
+			<tr>
+				<td><wicket:message key="33" /></td>
+				<td style="height: 50px;">
+					<div wicket:id="typeBool">
+						<div wicket:id="answer">
+							<input type="radio" wicket:id="true"/><label wicket:for="true"><wicket:message key="34" /></label><br/>
+							<input type="radio" wicket:id="false"/><label wicket:for="false"><wicket:message key="35" /></label>
+						</div>
+					</div>
+					<div wicket:id="typeInt">
+						<select wicket:id="pointList"></select>
+					</div>
+				</td>
+			</tr>
+		</table>
+		<div wicket:id="feedback"></div>
+	</form>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/room/poll/VoteDialog.java b/src/web/java/org/apache/openmeetings/web/room/poll/VoteDialog.java
new file mode 100644
index 0000000..29d464b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/poll/VoteDialog.java
@@ -0,0 +1,148 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room.poll;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.PollDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.RoomPollAnswers;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.Radio;
+import org.apache.wicket.markup.html.form.RadioGroup;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+/**
+ * @author solomax
+ *
+ */
+public class VoteDialog extends AbstractFormDialog<RoomPollAnswers> {
+	private static final long serialVersionUID = 1L;
+	private final static List<Integer> answers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);  //TODO max vote should be added 
+	private final long roomId;
+	private final PollAnswerForm form;
+	private final DialogButton vote = new DialogButton("vote", Application.getString(32));
+	private final DialogButton cancel = new DialogButton("cancel", Application.getString(25));
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+	private final IModel<String> user = Model.of((String)null);
+
+	public VoteDialog(String id, long roomId) {
+		super(id, Application.getString(18));
+		this.roomId = roomId;
+		add(form = new PollAnswerForm("form", new CompoundPropertyModel<RoomPollAnswers>(new RoomPollAnswers())));
+	}
+	
+	static String getName(User u) {
+		return u == null ? "" : getUserId() == u.getUser_id() ? Application.getString(1411) : u.getFirstname() + " " + u.getLastname();
+	}
+	
+	public void updateModel(AjaxRequestTarget target) {
+		RoomPollAnswers a = new RoomPollAnswers();
+		a.setRoomPoll(getBean(PollDao.class).getPoll(roomId));
+		User u = getBean(UserDao.class).get(getUserId());
+		a.setVotedUser(u);
+		user.setObject(getName(a.getRoomPoll().getCreatedBy()));
+		form.setModelObject(a);
+		boolean typeNum = a.getRoomPoll() != null && a.getRoomPoll().getPollType() != null && a.getRoomPoll().getPollType().getIsNumericAnswer();
+		form.typeBool.setVisible(!typeNum);
+		form.typeInt.setVisible(typeNum);
+		target.add(form);
+	}
+	
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(vote, cancel);
+	}
+	
+	/* (non-Javadoc)
+	 * @see com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog#getSubmitButton()
+	 */
+	@Override
+	protected DialogButton getSubmitButton() {
+		return vote;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog#getForm()
+	 */
+	@Override
+	public PollAnswerForm getForm() {
+		return form;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog#onError(org.apache.wicket.ajax.AjaxRequestTarget)
+	 */
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+
+	/* (non-Javadoc)
+	 * @see com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog#onSubmit(org.apache.wicket.ajax.AjaxRequestTarget)
+	 */
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		RoomPollAnswers a = form.getModelObject();
+		a.setVoteDate(new Date());
+		a.getRoomPoll().getRoomPollAnswerList().add(a);
+		getBean(PollDao.class).updatePoll(a.getRoomPoll());
+	}
+	
+	@Override
+	protected void onDetach() {
+		user.detach();
+		super.onDetach();
+	}
+	private class PollAnswerForm extends Form<RoomPollAnswers> {
+		private static final long serialVersionUID = 1L;
+		private final WebMarkupContainer typeBool = new WebMarkupContainer("typeBool");
+		private final WebMarkupContainer typeInt = new WebMarkupContainer("typeInt");
+
+		PollAnswerForm(String id, IModel<RoomPollAnswers> model) {
+			super(id, model);
+			add(feedback);
+			add(new Label("user", user));
+			add(new Label("roomPoll.pollQuestion"));
+			add(typeBool.add(new RadioGroup<Boolean>("answer").setRequired(true)
+						.add(new Radio<Boolean>("true", Model.of(Boolean.TRUE))).add(new Radio<Boolean>("false", Model.of(Boolean.FALSE)))
+				).setOutputMarkupPlaceholderTag(true).setVisible(false));
+			add(typeInt.add(new DropDownChoice<Integer>("pointList", answers).setRequired(true))
+					.setOutputMarkupPlaceholderTag(true).setVisible(false));
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/room/swf-functions.js b/src/web/java/org/apache/openmeetings/web/room/swf-functions.js
new file mode 100644
index 0000000..476d90b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/room/swf-functions.js
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+function getAppletStatus() {
+	return false;
+}
+
+function initSwf(swfurl) {
+	var general = {
+			url : swfurl,
+			bgcolor : '#ffffff',
+			width : '100%',
+			height : '100%',
+			id : 'lzapp',
+			__lzminimumversion : 8
+		};
+	var options = $.extend({}, general, {allowfullscreen : 'true'});
+	$('#header, #topControls, #chatPanel').hide();
+	$('div[id="contents"], div[id="contents"] > div').css('height', '100%');
+	var embed = $('<embed>').attr('quality', 'high').attr('bgcolor', options.bgcolor)
+		.attr('src', "public/" + options.url)
+		.attr('wmode', 'opaque').attr('allowfullscreen', true)
+		.attr('width', options.width).attr('height', options.height)
+		.attr('id', 'lzapp').attr('name', 'lzapp')
+		.attr('flashvars', escape($.param(general)))
+		.attr('swliveconnect', true).attr('align', 'middle')
+		.attr('allowscriptaccess', 'sameDomain').attr('type', 'application/x-shockwave-flash')
+		.attr('pluginspage', 'http://www.macromedia.com/go/getflashplayer');
+	$('#swfloading').after($('<div id="lzappContainer">').append(embed)).width('1px').height('1px');
+}
+
+function roomExit() {
+	$('#header, #topControls, #chatPanel').show();
+	$('div[id="contents"], div[id="contents"] > div').css('height', 'auto');
+	window.location.hash = "#rooms/public";
+	$('#lzappContainer').remove();
+}
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/user/AboutDialog.html b/src/web/java/org/apache/openmeetings/web/user/AboutDialog.html
new file mode 100644
index 0000000..021a6cc
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/AboutDialog.html
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+	<wicket:panel>

+		<table>

+			<tr>

+				<td><wicket:message key="1550" /></td>

+				<td wicket:id="name">[name]</td>

+			</tr>

+			<tr>

+				<td><wicket:message key="1551" /></td>

+				<td wicket:id="version">[version]</td>

+			</tr>

+			<tr>

+				<td><wicket:message key="1552" /></td>

+				<td wicket:id="revision">[revision]</td>

+			</tr>

+			<tr>

+				<td><wicket:message key="1553" /></td>

+				<td wicket:id="buildDate">[buildDate]</td>

+			</tr>

+		</table>		

+	</wicket:panel>

+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/user/AboutDialog.java b/src/web/java/org/apache/openmeetings/web/user/AboutDialog.java
new file mode 100644
index 0000000..805d3aa
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/AboutDialog.java
@@ -0,0 +1,58 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user;

+

+import static org.apache.openmeetings.util.Version.getBuildDate;

+import static org.apache.openmeetings.util.Version.getRevision;

+import static org.apache.openmeetings.util.Version.getVersion;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;

+import org.apache.wicket.markup.html.basic.Label;

+

+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;

+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;

+

+public class AboutDialog extends AbstractDialog<String> {

+	private static final long serialVersionUID = 1400355222295594321L;

+	

+	public AboutDialog(String id) {

+		super(id, Application.getString(1549));

+		

+		add(new Label("name", Application.getBean(ConfigurationDao.class).getConfValue(

+				"application.name"

+				, String.class

+				, ConfigurationDao.DEFAULT_APP_NAME)));

+		add(new Label("version", getVersion()));

+		add(new Label("revision", getRevision()));

+		add(new Label("buildDate", getBuildDate()));

+	}

+

+	@Override

+	protected List<DialogButton> getButtons() {

+		return new ArrayList<DialogButton>();

+	}

+

+	public void onClose(IPartialPageRequestHandler arg0, DialogButton arg1) {

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/ChatPanel.html b/src/web/java/org/apache/openmeetings/web/user/ChatPanel.html
new file mode 100644
index 0000000..a244c3c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/ChatPanel.html
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:head>
+		<script type="text/javascript">
+			function toggleChat() {
+				var chat = $('#chat');
+				$('#chat #controlBlock #control')
+					.removeClass('ui-icon-carat-1-' + (chat.height() < 24 ? 'n' : 's'))
+					.addClass('ui-icon-carat-1-' + (chat.height() < 24 ? 's' : 'n'));
+				chat.animate({ height: chat.height() < 24 ? "320px" : "20px" }, 1000);
+			}
+			function addChatMessageInternal(m) {
+				if (m && m.type == "chat") {
+					var msg = $('<div><span class="from">' + m.msg.from + '</span><span class="date">'
+							+ m.msg.sent + '</span>' + m.msg.message + '</div>');
+					$('#messageArea').append(msg);
+					msg[0].scrollIntoView();
+				}
+			}
+			function addChatMessage(m) {
+				if (m && m.type == "chat") {
+					addChatMessageInternal(m)
+					$('#messageArea').emoticonize();
+				}
+			}
+			Wicket.Event.subscribe("/websocket/message", function(jqEvent, msg) {
+				addChatMessage(jQuery.parseJSON(msg)); 
+			});
+		</script>
+	</wicket:head>
+	<wicket:panel>
+		<div id="chat" class="ui-state-default">
+			<div id="controlBlock" onclick="toggleChat();" class="ui-state-active clickable"><span id="control" class="ui-icon ui-icon-carat-1-n sort-icon"></span><span><wicket:message key="244"/></span></div>
+			<div wicket:id="messages"></div>
+			<form wicket:id="sendForm">
+				<div wicket:id="toolbarContainer"></div>
+				<table style="width: 100%">
+					<tr>
+						<td><div id="chatMessage" wicket:id="chatMessage"></div></td>
+						<td style="width: 50px"><div wicket:id="send"><wicket:message key="220"/></div></td>
+					</tr>
+				</table>
+			</form>
+		</div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/ChatPanel.java b/src/web/java/org/apache/openmeetings/web/user/ChatPanel.java
new file mode 100644
index 0000000..590b456
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/ChatPanel.java
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user;
+
+import static org.apache.commons.lang3.StringEscapeUtils.unescapeXml;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.Date;
+
+import org.apache.openmeetings.db.dao.basic.ChatDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.basic.ChatMessage;
+import org.apache.openmeetings.web.common.BasePanel;
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.json.JSONException;
+import org.apache.wicket.ajax.json.JSONObject;
+import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
+import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.protocol.ws.WebSocketSettings;
+import org.apache.wicket.protocol.ws.api.IWebSocketConnection;
+import org.apache.wicket.protocol.ws.api.registry.IWebSocketConnectionRegistry;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+
+import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
+import com.googlecode.wicket.jquery.ui.plugins.emoticons.EmoticonsBehavior;
+import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.WysiwygEditor;
+
+@AuthorizeInstantiation({"Dashboard", "Room"})
+public class ChatPanel extends BasePanel {
+	private static final Logger log = Red5LoggerFactory.getLogger(ChatPanel.class, webAppRootKey);
+	private static final long serialVersionUID = -9144707674886211557L;
+	private static final String MESSAGE_AREA_ID = "messageArea";
+	
+	private JSONObject getMessage(ChatMessage m) throws JSONException {
+		String msg = m.getMessage();
+		msg = msg == null ? msg : " " + msg.replaceAll("&nbsp;", " ") + " ";
+		return new JSONObject()
+			.put("type", "chat")
+			.put("msg", new JSONObject()
+				.put("id", m.getId())
+				.put("message", msg)
+				.put("from", m.getFromUser().getFirstname() + " " + m.getFromUser().getLastname())
+				.put("sent", getDateFormat().format(m.getSent()))
+			);
+	}
+
+	public ChatPanel(String id) {
+		super(id);
+		setOutputMarkupId(true);
+		setMarkupId(id);
+
+		add(new Behavior() {
+			private static final long serialVersionUID = -2205036360048419129L;
+
+			@Override
+			public void renderHead(Component component, IHeaderResponse response) {
+				ChatDao dao = getBean(ChatDao.class);
+				try {				
+					StringBuilder sb = new StringBuilder();
+					//FIXME limited count should be loaded with "earlier" link
+					for (ChatMessage m : dao.get(0, 30)) {
+						sb.append("addChatMessageInternal(").append(getMessage(m).toString()).append(");");
+					}
+					if (sb.length() > 0) {
+						sb.append("$('#").append(MESSAGE_AREA_ID).append("').emoticonize();");
+						response.render(OnDomReadyHeaderItem.forScript(sb.toString()));
+					}
+				} catch (JSONException e) {
+					
+				}
+				super.renderHead(component, response);
+			}
+		});
+		add(new EmoticonsBehavior("#" + MESSAGE_AREA_ID));
+		add(new WebMarkupContainer("messages").setMarkupId(MESSAGE_AREA_ID));
+		ChatToolbar toolbar = new ChatToolbar("toolbarContainer");
+		final WysiwygEditor chatMessage = new WysiwygEditor("chatMessage", Model.of(""), toolbar);
+		add(new Form<Void>("sendForm").add(
+				toolbar
+				, chatMessage.setOutputMarkupId(true)
+				, new AjaxButton("send") {
+					private static final long serialVersionUID = 1L;
+					
+					@Override
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+						ChatDao dao = getBean(ChatDao.class);
+						ChatMessage m = new ChatMessage();
+						m.setMessage(unescapeXml(chatMessage.getDefaultModelObjectAsString()));
+						m.setSent(new Date());
+						m.setFromUser(getBean(UserDao.class).get(getUserId()));
+						dao.update(m);
+						IWebSocketConnectionRegistry reg = WebSocketSettings.Holder.get(getApplication()).getConnectionRegistry();
+						for (IWebSocketConnection c : reg.getConnections(getApplication())) {
+							try {
+								c.sendMessage(getMessage(m).toString());
+							} catch(Exception e) {
+								log.error("Error while sending message", e);
+							}
+						}
+						chatMessage.setDefaultModelObject("");
+						target.add(chatMessage);
+					};
+				}));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/ChatToolbar.html b/src/web/java/org/apache/openmeetings/web/user/ChatToolbar.html
new file mode 100644
index 0000000..f00af1a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/ChatToolbar.html
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:head>
+	<style>
+		.emt {
+			font-size: 10pt;
+		}
+		.chat.btn{
+			font-weight: bold;
+		}
+		.chat.dropdown-menu {
+			left: -50px;
+		}
+	</style>
+	<script type="text/javascript">
+	    function emtClick(emoticon) {
+	        var editor = $('#chatMessage .wysiwyg-editor');
+	        editor.html(editor.html() + ' ' + emoticon + ' ');
+	    }
+		$(function() {
+			 var emots = [":-)", ":)", ":o)", ":c)", ":^)", ":-D", ":-(", ":-9", ";-)", ":-P", ":-p", ":-Þ", ":-b"
+			 	, ":-O", ":-/", ":-X", ":-#", ":'(", "B-)", "8-)", ":-\\", ";*(", ":-*", ":]", ":>", "=]", "=)", "8)"
+			 	, ":}", ":D", "8D", "XD", "xD", "=D", ":(", ":<", ":[", ":{", "=(", ";)", ";]", ";D", ":P", ":p"
+			 	, "=P", "=p", ":b", ":Þ", ":O", "8O", ":/", "=/", ":S", ":#", ":X", "B)", "O:)", "<3", ";(", ">:)"
+			 	, ">;)", ">:(", "O_o", "O_O", "o_o", "0_o", "T_T", "^_^", "?-)"];
+			 var emotMenuList = $('#emotMenuList');
+			 var rowSize = 15;
+			 var row = $('<tr></tr>');
+			 for (var i = 0; i < emots.length; ++i) {
+			 	row.append('<td><div class="emt" onclick="emtClick(\'' + emots[i] + '\');">'
+			 		+ emots[i] + '</div></td>');
+			 	if (i != 0 && i % rowSize == 0) {
+			 		emotMenuList.append(row);
+			 		row = $('<tr></tr>');
+			 	}
+			 }
+			 $('.emt').emoticonize();
+		});
+	</script>
+</wicket:head>
+<wicket:panel>
+	<div wicket:id="toolbar" class="btn-toolbar" data-role="editor-toolbar">
+		<div class="btn-group">
+			<a id="emoticons" class="chat btn emt dropdown-toggle" data-toggle="dropdown" title="Emoticons"> :) <b class="caret"></b></a>
+			<ul class="chat dropdown-menu" >
+				<li>
+					<table id="emotMenuList">
+					</table>
+				</li>
+			</ul>
+		</div>
+		<div class="btn-group">
+			<a id="fontSize" class="chat btn dropdown-toggle" data-toggle="dropdown" title="Font Size"> A <b class="caret"></b></a>
+			<ul class="dropdown-menu">
+				<li><a data-edit="fontSize 5"><font size="3">Huge</font></a></li>
+				<li><a data-edit="fontSize 3"><font size="2">Normal</font></a></li>
+				<li><a data-edit="fontSize 1"><font size="1">Small</font></a></li>
+			</ul>
+			<a id="bold" class="chat btn" data-edit="bold" title="Bold (Ctrl/Cmd+B)"> B
+			</a> <a id="italic" class="chat btn" data-edit="italic" title="Italic (Ctrl/Cmd+I)" style="font-style: italic;"> I
+			</a> <a id="strikethrough" class="chat btn" data-edit="strikethrough" title="Strikethrough" style="text-decoration: line-through;"> S
+			</a> <a id="underline" class="chat btn" data-edit="underline" title="Underline (Ctrl/Cmd+U)" style="text-decoration: underline;"> U
+			</a>
+		</div>
+	</div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/ChatToolbar.java b/src/web/java/org/apache/openmeetings/web/user/ChatToolbar.java
new file mode 100644
index 0000000..e433dd2
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/ChatToolbar.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user;
+
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.Component;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
+
+import com.googlecode.wicket.jquery.core.IJQueryWidget.JQueryWidget;
+import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.toolbar.IWysiwygToolbar;
+
+/**
+ * Provides a custom implementation for com.googlecode.wicket.jquery.ui.plugins.wysiwyg.toolbar.IWysiwygToolbar suitable
+ * for chat}
+ */
+public class ChatToolbar extends Panel implements IWysiwygToolbar {
+	private static final long serialVersionUID = 1L;
+	private final WebMarkupContainer toolbar;
+
+	/**
+	 * Constructor
+	 * 
+	 * @param id
+	 *            the markup-id
+	 */
+	public ChatToolbar(String id) {
+		this(id, null);
+	}
+
+	/**
+	 * Constructor
+	 * 
+	 * @param id
+	 *            the markup-id
+	 * @param model
+	 *            the {@link org.apache.wicket.model.IModel}
+	 */
+	public ChatToolbar(String id, IModel<String> model) {
+		super(id, model);
+
+		toolbar = new WebMarkupContainer("toolbar");
+		toolbar.setMarkupId("bToolbar");
+		add(toolbar);
+
+	}
+
+	public void attachToEditor(Component editor) {
+		toolbar.add(AttributeModifier.replace("data-target", JQueryWidget.getSelector(editor)));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html b/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html
new file mode 100644
index 0000000..1f3c270
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.html
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+	<wicket:panel>

+		<form wicket:id="appForm" class="appointmentPopUp">

+			<span wicket:id="feedback"></span>

+			<table>

+				<tr>

+					<td><wicket:message key="572" /></td>

+					<td><input type="text" wicket:id="title" /></td>

+				</tr>

+				<tr>

+					<td><wicket:message key="570" /></td>

+					<td><span class="date time picker" wicket:id="start"></span></td>

+				</tr>

+				<tr>

+					<td><wicket:message key="571" /></td>

+					<td><span class="date time picker" wicket:id="end"></span></td>

+				</tr>

+				<tr>

+					<td><wicket:message key="565" /></td>

+					<td><select wicket:id="remind" ></select></td>

+				</tr>

+				<tr>

+					<td colspan="2"><input type="checkbox" wicket:id="createRoom" /><label wicket:for="createRoom"><wicket:message key="1509" /></label></td>

+				</tr>

+				<tr>

+					<td><wicket:message key="619" /></td>

+					<td><select wicket:id="room.roomtype" ></select></td>

+				</tr>

+				<tr>

+					<td><wicket:message key="406" /></td>

+					<td><select wicket:id="room" ></select></td>

+				</tr>

+				<tr>

+					<td colspan="2"><input type="checkbox" wicket:id="passwordProtected" /><label wicket:for="passwordProtected"><wicket:message key="524" /></label></td>

+				</tr>

+				<tr>

+					<td><wicket:message key="525" /></td>

+					<td><input type="password" wicket:id="password" /></td>

+				</tr>

+				<tr>

+					<td colspan="2" style="font-size: smaller;"><wicket:message key="1445" /></td>

+				</tr>

+				<tr>

+					<td><wicket:message key="1156" /></td>

+					<td><span wicket:id="aowner"></span></td>

+				</tr>

+				<tr>

+					<td><wicket:message key="803" /></td>

+					<td wicket:message="title:1588"><input class="appointment attendees" type="hidden" wicket:id="attendees"/></td>

+				</tr>

+				<tr>

+					<td><wicket:message key="569" /></td>

+					<td><input type="text" wicket:id="location" /></td>

+				</tr>

+				<tr>

+					<td><wicket:message key="573" /></td>

+					<td>

+						<div wicket:id="toolbarContainer"></div>

+						<div wicket:id="description"></div>

+					</td>

+				</tr>

+			</table>

+		</form>

+		<div wicket:id="confirmDelete"></div>

+	</wicket:panel>

+</html>

diff --git a/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java b/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
new file mode 100644
index 0000000..b252f64
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentDialog.java
@@ -0,0 +1,377 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.calendar;

+

+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;

+import static org.apache.openmeetings.web.app.Application.getBean;

+import static org.apache.openmeetings.web.app.WebSession.getLanguage;

+import static org.apache.openmeetings.web.app.WebSession.getUserId;

+import static org.apache.openmeetings.web.util.CalendarWebHelper.getDate;

+import static org.apache.openmeetings.web.util.CalendarWebHelper.getDateTime;

+import static org.apache.openmeetings.web.util.RoomTypeDropDown.getRoomTypes;

+

+import java.util.ArrayList;

+import java.util.Arrays;

+import java.util.Collection;

+import java.util.HashSet;

+import java.util.Iterator;

+import java.util.List;

+import java.util.Set;

+

+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;

+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;

+import org.apache.openmeetings.db.dao.room.RoomDao;

+import org.apache.openmeetings.db.dao.user.UserDao;

+import org.apache.openmeetings.db.entity.calendar.Appointment;

+import org.apache.openmeetings.db.entity.calendar.AppointmentReminderTyps;

+import org.apache.openmeetings.db.entity.calendar.MeetingMember;

+import org.apache.openmeetings.db.entity.room.Room;

+import org.apache.openmeetings.db.entity.room.RoomType;

+import org.apache.openmeetings.db.entity.user.Organisation_Users;

+import org.apache.openmeetings.db.entity.user.User;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.openmeetings.web.app.WebSession;

+import org.apache.openmeetings.web.common.OmDateTimePicker;

+import org.apache.openmeetings.web.pages.MainPage;

+import org.apache.openmeetings.web.user.rooms.RoomEnterBehavior;

+import org.apache.openmeetings.web.util.FormatHelper;

+import org.apache.openmeetings.web.util.RoomTypeDropDown;

+import org.apache.openmeetings.web.util.UserMultiChoice;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;

+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.html.form.ChoiceRenderer;

+import org.apache.wicket.markup.html.form.DropDownChoice;

+import org.apache.wicket.markup.html.form.Form;

+import org.apache.wicket.markup.html.form.PasswordTextField;

+import org.apache.wicket.markup.html.form.RequiredTextField;

+import org.apache.wicket.markup.html.form.TextField;

+import org.apache.wicket.model.CompoundPropertyModel;

+import org.apache.wicket.model.IModel;

+import org.apache.wicket.model.Model;

+import org.apache.wicket.model.PropertyModel;

+import org.apache.wicket.model.util.CollectionModel;

+import org.red5.logging.Red5LoggerFactory;

+import org.slf4j.Logger;

+import org.threeten.bp.LocalDateTime;

+

+import com.googlecode.wicket.jquery.core.Options;

+import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.WysiwygEditor;

+import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.toolbar.DefaultWysiwygToolbar;

+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;

+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;

+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;

+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;

+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;

+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageDialog;

+import com.googlecode.wicket.kendo.ui.form.datetime.local.DateTimePicker;

+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;

+

+public class AppointmentDialog extends AbstractFormDialog<Appointment> {

+	private static final long serialVersionUID = 1L;

+	private static final Logger log = Red5LoggerFactory.getLogger(AppointmentDialog.class, webAppRootKey);

+	

+	private AppointmentForm form;

+	private DialogButton save = new DialogButton("save", Application.getString(813));

+	private DialogButton cancel = new DialogButton("cancel", Application.getString(1130));

+	private DialogButton delete = new DialogButton("delete", Application.getString(814));

+	private DialogButton enterRoom = new DialogButton("enterRoom", Application.getString(1282));

+	private final CalendarPanel calendarPanel;

+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));

+	final MessageDialog confirmDelete;

+	private IModel<Collection<User>> attendeesModel = new CollectionModel<User>(new ArrayList<User>());

+	

+	@Override

+	public int getWidth() {

+		return 650;

+	}

+	

+	public void setModelObjectWithAjaxTarget(Appointment a, AjaxRequestTarget target) {

+		form.setModelObject(a);

+		form.start.setModelObject(getDateTime(a.getStart()));

+		form.end.setModelObject(getDateTime(a.getEnd()));

+		form.setEnabled(isOwner(a));

+		log.debug(" -- setModelObjectWithAjaxTarget -- Current model " + a);

+		if (a.getId() != null) {

+			delete.setVisible(isOwner(a), target);

+			enterRoom.setVisible(a.getRoom() != null, target);

+		} else {

+			delete.setVisible(false, target);

+			enterRoom.setVisible(false, target);

+		}

+		save.setVisible(isOwner(a), target);

+		super.setModelObject(a);

+	}

+	

+	public AppointmentDialog(String id, String title, CalendarPanel calendarPanel, CompoundPropertyModel<Appointment> model) {

+		super(id, title, model, true);

+		log.debug(" -- AppointmentDialog -- Current model " + getModel().getObject());

+		this.calendarPanel = calendarPanel;

+		setOutputMarkupId(true);

+		form = new AppointmentForm("appForm", model);

+		add(form);

+		confirmDelete = new MessageDialog("confirmDelete", Application.getString(814), Application.getString(833), DialogButtons.OK_CANCEL, DialogIcon.WARN){

+			private static final long serialVersionUID = 1L;

+

+			public void onClose(IPartialPageRequestHandler target, DialogButton button) {

+				if (button != null && button.match(AbstractDialog.OK)){

+					deleteAppointment(target);

+				}

+			}

+		};

+		add(confirmDelete);

+	}

+

+	protected void deleteAppointment(IPartialPageRequestHandler target) {

+		getBean(AppointmentDao.class).delete(getModelObject(), getUserId());

+		calendarPanel.refresh(target);		

+	}

+

+	@Override

+	protected List<DialogButton> getButtons() {

+		return Arrays.asList(enterRoom, save, delete, cancel);

+	}

+	

+	@Override

+	protected DialogButton getSubmitButton() {

+		return save;

+	}

+

+	@Override

+	public Form<?> getForm() {

+		return this.form;

+	}

+

+	@Override

+	protected void onOpen(IPartialPageRequestHandler target) {

+		target.add(this.form);

+	}

+	

+	@Override

+	public void onClose(IPartialPageRequestHandler target, DialogButton button) {

+		if (delete.equals(button)) {

+			confirmDelete.open(target);

+		} else if (enterRoom.equals(button)) {

+			RoomEnterBehavior.roomEnter((MainPage)getPage(), target, getModelObject().getRoom().getRooms_id());

+		}

+	}

+	

+	@Override

+	protected void onError(AjaxRequestTarget target) {

+		target.add(feedback);

+	}

+

+	@Override

+	protected void onSubmit(AjaxRequestTarget target) {

+        Appointment a = form.getModelObject();

+        final List<MeetingMember> attendees = a.getMeetingMembers() == null ? new ArrayList<MeetingMember>() : a.getMeetingMembers();

+        Set<Long> currentIds = new HashSet<Long>();

+        for (User u : attendeesModel.getObject()) {

+        	if (u.getUser_id() != null) {

+        		currentIds.add(u.getUser_id());

+        	}

+        }

+        

+        //remove users

+        for (Iterator<MeetingMember> i = attendees.iterator(); i.hasNext();) {

+        	MeetingMember m = i.next();

+        	if (!currentIds.contains(m.getUser().getUser_id())) {

+        		i.remove();

+        	}

+        }

+        Set<Long> originalIds = new HashSet<Long>();

+        for (MeetingMember m : attendees) {

+        	originalIds.add(m.getUser().getUser_id());

+        }

+        //add users

+        for (User u : attendeesModel.getObject()) {

+        	if (u.getUser_id() == null || !originalIds.contains(u.getUser_id())) {

+        		MeetingMember mm = new MeetingMember();

+        		mm.setUser(u);

+        		mm.setDeleted(false);

+        		mm.setInserted(a.getInserted());

+        		mm.setUpdated(a.getUpdated());

+        		mm.setAppointment(a);

+        		attendees.add(mm);

+        	}

+        }

+        a.setMeetingMembers(attendees);

+        a.setStart(getDate(form.start.getModelObject()));

+        a.setEnd(getDate(form.end.getModelObject()));

+        getBean(AppointmentDao.class).update(a, getUserId());

+		target.add(feedback);

+		calendarPanel.refresh(target);

+	}

+	

+	public static boolean isOwner(Appointment object) {

+		return object.getOwner() != null && getUserId() == object.getOwner().getUser_id();

+	}

+	

+	@Override

+	protected void onDetach() {

+		attendeesModel.detach();

+		super.onDetach();

+	}

+	

+	private class AppointmentForm extends Form<Appointment> {

+		private static final long serialVersionUID = 1L;

+		private boolean createRoom = true;

+		private final DateTimePicker start = new OmDateTimePicker("start", Model.of(LocalDateTime.now()));

+		private final DateTimePicker end = new OmDateTimePicker("end", Model.of(LocalDateTime.now()));

+		private final PasswordTextField pwd = new PasswordTextField("password");

+		private final Label owner = new Label("aowner", Model.of(""));

+		private final DropDownChoice<RoomType> roomType = new RoomTypeDropDown("room.roomtype");

+		private final DropDownChoice<Room> room = new DropDownChoice<Room>(

+				"room"

+				, getRoomList()

+				, new ChoiceRenderer<Room>("name", "rooms_id"));

+

+		@Override

+		protected void onModelChanged() {

+			super.onModelChanged();

+

+			Appointment a = getModelObject();

+			List<AppointmentReminderTyps> remindTypes = getRemindTypes();

+			if (a.getRemind() == null && !remindTypes.isEmpty()) {

+				a.setRemind(remindTypes.get(0));

+			}

+			

+			List<RoomType> roomTypes = getRoomTypes();

+			if (a.getRoom() == null) {

+				Room r = new Room();

+				r.setAppointment(true);

+				a.setRoom(r);

+			}

+			if (a.getRoom().getRoomtype() == null && !roomTypes.isEmpty()) {

+				a.getRoom().setRoomtype(roomTypes.get(0));

+			}

+			createRoom = Boolean.TRUE.equals(a.getRoom().getAppointment());

+			roomType.setEnabled(createRoom);

+			room.setEnabled(!createRoom);

+			if (a.getId() == null) {

+				java.util.Calendar start = WebSession.getCalendar();

+				start.setTime(a.getStart());

+				java.util.Calendar end = WebSession.getCalendar();

+				end.setTime(a.getEnd());

+				

+				if (start.equals(end)) {

+					end.add(java.util.Calendar.HOUR_OF_DAY, 1);

+					a.setEnd(end.getTime());

+				}

+			}

+			attendeesModel.setObject(new ArrayList<User>());

+			if (a.getMeetingMembers() != null) {

+				for (MeetingMember mm : a.getMeetingMembers()) {

+					attendeesModel.getObject().add(mm.getUser());

+				}

+			}

+			pwd.setEnabled(a.isPasswordProtected());

+			owner.setOutputMarkupPlaceholderTag(true).setOutputMarkupId(true);

+			owner.setDefaultModel(Model.of(FormatHelper.formatUser(a.getOwner())));

+			owner.setVisible(!isOwner(a));

+		}

+		

+		public AppointmentForm(String id, CompoundPropertyModel<Appointment> model) {

+			super(id, model);

+			setOutputMarkupId(true);

+			

+			add(feedback.setOutputMarkupId(true));

+			add(new RequiredTextField<String>("title").setLabel(Model.of(Application.getString(572))));

+			DefaultWysiwygToolbar toolbar = new DefaultWysiwygToolbar("toolbarContainer");

+			add(toolbar);

+			add(new WysiwygEditor("description", toolbar));

+			add(new TextField<String>("location"));

+			add(start);

+			add(end);

+			pwd.setEnabled(getModelObject().isPasswordProtected());

+			pwd.setOutputMarkupId(true);

+			add(pwd);

+			

+			List<AppointmentReminderTyps> remindTypes = getRemindTypes();

+			add(new DropDownChoice<AppointmentReminderTyps>(

+					"remind"

+					, remindTypes

+					, new ChoiceRenderer<AppointmentReminderTyps>() {

+						private static final long serialVersionUID = 1L;

+

+						@Override

+						public Object getDisplayValue(AppointmentReminderTyps object) {

+							return getString("" + object.getFieldvalues_id());

+						}

+

+						@Override

+						public String getIdValue(AppointmentReminderTyps object, int index) {

+							return "" + object.getTypId();

+						}

+					}));

+			

+			add(roomType.setEnabled(createRoom).setOutputMarkupId(true));

+			

+			add(room.setRequired(true).setLabel(Model.of(Application.getString(406))).setEnabled(!createRoom).setOutputMarkupId(true));

+			add(new AjaxCheckBox("createRoom", new PropertyModel<Boolean>(this, "createRoom")) {

+				private static final long serialVersionUID = 1L;

+

+				@Override

+				protected void onUpdate(AjaxRequestTarget target) {

+					createRoom = getConvertedInput();

+					target.add(roomType.setEnabled(createRoom), room.setEnabled(!createRoom));

+				}

+			});

+			add(new AjaxCheckBox("passwordProtected") {

+				private static final long serialVersionUID = 1L;

+

+				@Override

+				protected void onUpdate(AjaxRequestTarget target) {

+					AppointmentForm.this.getModelObject().setPasswordProtected(getConvertedInput());

+					pwd.setEnabled(AppointmentForm.this.getModelObject().isPasswordProtected());

+					target.add(pwd);

+				}

+			});

+			add(new UserMultiChoice("attendees", attendeesModel));

+				

+			add(owner);

+		}

+		

+		private List<AppointmentReminderTyps> getRemindTypes() {

+			return getBean(AppointmentReminderTypDao.class).getAppointmentReminderTypList(getLanguage());

+		}

+		

+		private List<Room> getRoomList() {

+			//FIXME need to be reviewed

+			List<Room> result = new ArrayList<Room>();

+			RoomDao dao = getBean(RoomDao.class);

+			result.addAll(dao.getPublicRooms());

+			for (Organisation_Users ou : getBean(UserDao.class).get(getUserId()).getOrganisation_users()) {

+				result.addAll(dao.getOrganisationRooms(ou.getOrganisation().getOrganisation_id()));

+			}

+			if (getModelObject().getRoom() != null && getModelObject().getRoom().getAppointment()) { //FIXME review

+				result.add(getModelObject().getRoom());

+			}

+			return result;

+		}

+		

+		@Override

+		protected void onValidate() {

+			if (end.getConvertedInput().isBefore(start.getConvertedInput())) {

+				error(Application.getString(1592));

+			}

+		}

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java b/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java
new file mode 100644
index 0000000..b8ba20b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/calendar/AppointmentModel.java
@@ -0,0 +1,50 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.calendar;

+

+import static org.apache.openmeetings.web.app.Application.getBean;

+import static org.apache.openmeetings.web.app.WebSession.getUserId;

+import static org.apache.openmeetings.web.util.CalendarWebHelper.getDate;

+

+import java.util.ArrayList;

+import java.util.List;

+

+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;

+import org.apache.openmeetings.db.entity.calendar.Appointment;

+

+import com.googlecode.wicket.jquery.ui.calendar.CalendarEvent;

+import com.googlecode.wicket.jquery.ui.calendar.CalendarModel;

+import com.googlecode.wicket.jquery.ui.calendar.ICalendarVisitor;

+

+public class AppointmentModel extends CalendarModel implements ICalendarVisitor {

+	private static final long serialVersionUID = 1L;

+

+	public void visit(CalendarEvent event) {

+		//every event can be customized

+	}

+

+	@Override

+	protected List<? extends CalendarEvent> load() {

+		List<CalendarEvent> list = new ArrayList<CalendarEvent>();

+		for (Appointment a : getBean(AppointmentDao.class).getAppointmentsByRange(getUserId(), getDate(getStart()), getDate(getEnd()))) {

+			list.add(new OmCalendarEvent(a));

+		}

+		return list;

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarFunctionsBehavior.java b/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarFunctionsBehavior.java
new file mode 100644
index 0000000..76616f2
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarFunctionsBehavior.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/**
+ * @author Sebastien Briquet
+ */
+package org.apache.openmeetings.web.user.calendar;
+
+import java.util.Map;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.PriorityHeaderItem;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.resource.TextTemplateResourceReference;
+import org.apache.wicket.util.collections.MicroMap;
+
+public class CalendarFunctionsBehavior extends Behavior {
+	private static final long serialVersionUID = 1L;
+	private final String markupId;
+	
+	public CalendarFunctionsBehavior(String markupId) {
+		this.markupId = markupId;
+	}
+	
+	private IModel<Map<String, Object>> newResourceModel() {
+		return Model.ofMap(new MicroMap<String, Object>("markupId", this.markupId));
+	}
+	
+	private ResourceReference newResourceReference() {
+		return new TextTemplateResourceReference(CalendarFunctionsBehavior.class, "calendar-functions.js", this.newResourceModel());
+	}
+	
+	@Override
+	public void renderHead(Component component, IHeaderResponse response) {
+		super.renderHead(component, response);
+		response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(this.newResourceReference(), "calendar-functions")));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.html b/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.html
new file mode 100644
index 0000000..6468e94
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.html
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div id="wrapper-panel-frame" class="ui-corner-all">
+			<form wicket:id="form">
+				<div id="calendar" wicket:id="calendar"></div>
+				<br/>
+				<!-- div wicket:id="feedback"></div -->
+			</form>
+		</div>
+		<div wicket:id="appointment">[appointment]</div>
+		<!-- bottom section -->
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java b/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java
new file mode 100644
index 0000000..26943b4
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/calendar/CalendarPanel.java
@@ -0,0 +1,274 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.calendar;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_CALENDAR_FIRST_DAY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.util.CalendarWebHelper.getDate;
+import static org.apache.openmeetings.web.util.CalendarWebHelper.getZoneId;
+
+import java.util.Date;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentReminderTypDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.json.JSONArray;
+import org.apache.wicket.ajax.json.JSONException;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.util.time.Duration;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.threeten.bp.LocalDateTime;
+import org.threeten.bp.ZonedDateTime;
+import org.threeten.bp.temporal.ChronoUnit;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.calendar.Calendar;
+import com.googlecode.wicket.jquery.ui.calendar.CalendarView;
+
+public class CalendarPanel extends UserPanel {
+	private static final Logger log = Red5LoggerFactory.getLogger(CalendarPanel.class, webAppRootKey);
+	private static final long serialVersionUID = 1L;
+	private static final String javaScriptMarkup = "setCalendarHeight();";
+	private final String javaScriptAddDatepicker;
+	private final AbstractAjaxTimerBehavior refreshTimer = new AbstractAjaxTimerBehavior(Duration.seconds(10)) {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		protected void onTimer(AjaxRequestTarget target) {
+			target.appendJavaScript("setCalendarHeight();");
+			refresh(target);
+		}
+	};
+	private Calendar calendar;
+	
+	@Override
+	public void onMenuPanelLoad(IPartialPageRequestHandler target) {
+	}
+
+	@Override
+	public void cleanup(IPartialPageRequestHandler target) {
+		refreshTimer.stop(target);
+	}
+	
+	private AppointmentDao getDao() {
+		return getBean(AppointmentDao.class);
+	}
+	
+	private AppointmentReminderTypDao getAppointmentReminderTypDao() {
+		return getBean(AppointmentReminderTypDao.class);
+	}
+	
+	public void refresh(IPartialPageRequestHandler target) {
+		calendar.refresh(target);
+	}
+	
+	Calendar getCalendar() {
+		return calendar;
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+
+		AjaxRequestTarget target = getRequestCycle().find(AjaxRequestTarget.class);
+		if (target != null) {
+			target.appendJavaScript(javaScriptMarkup);
+			target.appendJavaScript(javaScriptAddDatepicker);
+		} else {
+			response.render(JavaScriptHeaderItem.forScript(javaScriptMarkup, this.getId()));
+		}
+	}
+
+	public CalendarPanel(String id) {
+		super(id);
+		
+		final Form<Date> form = new Form<Date>("form");
+		add(form);
+		
+		final AppointmentDialog dialog = new AppointmentDialog("appointment", Application.getString(815)
+				, this, new CompoundPropertyModel<Appointment>(getDefault()));
+		add(dialog);
+		
+		boolean isRtl = isRtl();
+		javaScriptAddDatepicker = String.format("addCalButton(%s, 'datepicker');", isRtl);
+		Options options = new Options();
+		options.set("isRTL", isRtl);
+		options.set("header", isRtl ? "{left: 'agendaDay,agendaWeek,month', center: 'title', right: 'today nextYear,next,prev,prevYear'}"
+				: "{left: 'prevYear,prev,next,nextYear today', center: 'title', right: 'month,agendaWeek,agendaDay'}");
+		options.set("allDaySlot", false);
+		options.set("axisFormat", Options.asString("H(:mm)"));
+		options.set("defaultEventMinutes", 60);
+		options.set("timeFormat", Options.asString("H(:mm)"));
+
+		options.set("buttonText", "{month: '" + Application.getString(801) +
+								"', week: '" + Application.getString(800) + 
+								"', day: '"  + Application.getString(799) + 
+								"', today: '"  + Application.getString(1555) + 
+								"'}");
+
+		JSONArray monthes = new JSONArray();
+		JSONArray shortMonthes = new JSONArray();
+		JSONArray days = new JSONArray();
+		JSONArray shortDays = new JSONArray();
+		try {
+			// first week day must be Sunday
+			days.put(0, Application.getString(466));
+			shortDays.put(0, Application.getString(459));
+			for (int i = 0; i < 12; i++) {
+				monthes.put(i, Application.getString(469 + i));
+				shortMonthes.put(i, Application.getString(1556 + i));
+				if (i + 1 < 7) {
+					days.put(i + 1, Application.getString(460 + i));
+					shortDays.put(i + 1, Application.getString(453 + i));
+				}
+			}
+		} catch (JSONException e) {
+			log.error("Unexpected error while creating label lists", e);
+		}
+		options.set("monthNames", monthes.toString());
+		options.set("monthNamesShort", shortMonthes.toString());
+		options.set("dayNames", days.toString());
+		options.set("dayNamesShort", shortDays.toString());
+		options.set("firstDay", getBean(ConfigurationDao.class).getConfValue(CONFIG_CALENDAR_FIRST_DAY, String.class, "0"));
+		
+		calendar = new Calendar("calendar", new AppointmentModel(), options) {
+			private static final long serialVersionUID = 1L;
+			
+			@Override
+			protected void onInitialize() {
+				super.onInitialize();
+				add(new CalendarFunctionsBehavior(getMarkupId()));
+			}
+			
+			@Override
+			public boolean isSelectable() {
+				return true;
+			}
+			
+			@Override
+			public boolean isDayClickEnabled() {
+				return true;
+			}
+			
+			@Override
+			public boolean isEventClickEnabled() {
+				return true;
+			}
+			
+			@Override
+			public boolean isEventDropEnabled() {
+				return true;
+			}
+			
+			@Override
+			public boolean isEventResizeEnabled() {
+				return true;
+			}
+			
+			//no need to override onDayClick
+			
+			@Override
+			public void onSelect(AjaxRequestTarget target, CalendarView view, LocalDateTime start, LocalDateTime end, boolean allDay) {
+				Appointment a = getDefault();
+				LocalDateTime s = start, e = end;
+				if (CalendarView.month == view) {
+					LocalDateTime now = ZonedDateTime.now(getZoneId()).toLocalDateTime();
+					s = start.withHour(now.getHour()).withMinute(now.getMinute());
+					e = s.plus(1, ChronoUnit.HOURS);
+				}
+				a.setStart(getDate(s));
+				a.setEnd(getDate(e));
+				dialog.setModelObjectWithAjaxTarget(a, target);
+				
+				dialog.open(target);
+			}
+			
+			@Override
+			public void onEventClick(AjaxRequestTarget target, CalendarView view, int eventId) {
+				Appointment a = getDao().get((long)eventId);
+				dialog.setModelObjectWithAjaxTarget(a, target);
+				
+				dialog.open(target);
+			}
+			
+			@Override
+			public void onEventDrop(AjaxRequestTarget target, int eventId, long delta, boolean allDay) {
+				AppointmentDao dao = getDao();
+				Appointment a = dao.get((long)eventId);
+
+				if (!AppointmentDialog.isOwner(a)) {
+					return;
+				}
+				java.util.Calendar cal = WebSession.getCalendar();
+				cal.setTime(a.getStart());
+				cal.add(java.util.Calendar.MILLISECOND, (int)delta); //FIXME?
+				a.setStart(cal.getTime());
+				
+				cal.setTime(a.getEnd());
+				cal.add(java.util.Calendar.MILLISECOND, (int)delta); //FIXME?
+				a.setEnd(cal.getTime());
+				
+				dao.update(a, getUserId());
+				//FIXME add feedback info
+			}
+
+			@Override
+			public void onEventResize(AjaxRequestTarget target, int eventId, long delta) {
+				AppointmentDao dao = getDao();
+				Appointment a = dao.get((long)eventId);
+				if (!AppointmentDialog.isOwner(a)) {
+					return;
+				}
+				java.util.Calendar cal = WebSession.getCalendar();
+				cal.setTime(a.getEnd());
+				cal.add(java.util.Calendar.MILLISECOND, (int)delta); //FIXME?
+				a.setEnd(cal.getTime());
+				
+				dao.update(a, getUserId());
+				//FIXME add feedback info
+			}
+		};
+		
+		form.add(calendar);
+		add(refreshTimer);
+	}
+	
+	private Appointment getDefault() {
+		Appointment a = new Appointment();
+		a.setRemind(getAppointmentReminderTypDao().get(3L)); //TODO: Make configurable
+		a.setOwner(getBean(UserDao.class).get(getUserId()));
+		a.setTitle(Application.getString(1444));
+		log.debug(" -- getDefault -- Current model " + a);
+		return a;
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/calendar/OmCalendarEvent.java b/src/web/java/org/apache/openmeetings/web/user/calendar/OmCalendarEvent.java
new file mode 100644
index 0000000..5f62a2c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/calendar/OmCalendarEvent.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.calendar;
+
+import static org.apache.openmeetings.web.util.CalendarWebHelper.getDateTime;
+
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+
+import com.googlecode.wicket.jquery.ui.calendar.CalendarEvent;
+
+public class OmCalendarEvent extends CalendarEvent {
+	private static final long serialVersionUID = 1L;
+	
+	public OmCalendarEvent(Appointment a) {
+		super(a.getId().intValue(), a.getTitle(), null);
+		setStart(getDateTime(a.getStart()));
+		setEnd(getDateTime(a.getEnd()));
+		setEditable(AppointmentDialog.isOwner(a));
+		setAllDay(false);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/calendar/calendar-functions.js b/src/web/java/org/apache/openmeetings/web/user/calendar/calendar-functions.js
new file mode 100644
index 0000000..fe10b46
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/calendar/calendar-functions.js
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/**
+ * @author Sebastien Briquet
+ */
+function getCalendarHeight() {
+    return $(window).height() - $('#${markupId}').position().top - 20;
+}
+
+function setCalendarHeight() {
+	var cal = $('#${markupId}');
+	if (cal.length) {
+    	cal.fullCalendar('option', 'height', getCalendarHeight());
+	}
+}
+
+$(function() {
+    $(window).load(function() { setCalendarHeight(); } );
+});
+
+function toggleDatePicker(id) {
+	var dp = $("#" + id);
+	dp.datepicker(dp.datepicker("widget").is(":visible") ? "hide" : "show");
+	return false;
+}
+function addCalButton(rtl, id) {
+	var my_button = 
+		'<button class="fc-button fc-state-default fc-corner-right fc-corner-left" onclick="return toggleDatePicker(\'' + id + '\');">' +
+		'<input type="text" id="' + id + '" /></button>';
+
+	if (rtl) {
+		$(".fc .fc-toolbar .fc-right").prepend(my_button);
+	} else {
+		$(".fc .fc-toolbar .fc-left").append(my_button);
+	}
+	 
+	var dp = $("#" + id);
+	dp.datepicker({
+		showOn: "button",
+		buttonImage: "images/calendar.gif",
+		buttonImageOnly: true,
+		changeMonth: true,
+		changeYear: true,
+		changeDay: true,
+		dayNames: $('#${markupId}').fullCalendar("option","dayNames"),
+		dayNamesShort: $('#${markupId}').fullCalendar("option","dayNamesShort"),
+		dayNamesMin: $('#${markupId}').fullCalendar("option","dayNamesShort"),
+		monthNames: $('#${markupId}').fullCalendar("option","monthNames"),
+		monthNamesShort: $('#${markupId}').fullCalendar("option","monthNamesShort"),
+		isRTL: rtl,
+		onChangeMonthYear: function(year, month, inst) {
+			$('#${markupId}').fullCalendar('gotoDate', year + '-' + ('0' + month).slice(-2) + '-' + inst.selectedDay);
+		},
+		onSelect: function(dateText, inst) {
+			var date = new Date(dateText);
+			$('#${markupId}').fullCalendar('gotoDate', date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + date.getDate());
+		}
+	});
+	dp.hide();
+}
+ 
+function setDatepickerDate(id, date) {
+	$("#"+id).datepicker('setDate', date);
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java
new file mode 100644
index 0000000..6c7657d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidget.java
@@ -0,0 +1,49 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.dashboard;

+

+import org.apache.openmeetings.web.app.Application;

+import org.apache.wicket.model.Model;

+

+import ro.fortsoft.wicket.dashboard.AbstractWidget;

+import ro.fortsoft.wicket.dashboard.Widget;

+import ro.fortsoft.wicket.dashboard.WidgetLocation;

+import ro.fortsoft.wicket.dashboard.web.WidgetView;

+

+public class MyRoomsWidget extends AbstractWidget {

+	private static final long serialVersionUID = 1L;

+	public static final String WIDGET_ID_MY_ROOMS = "MyRoomsWidget";

+

+	public MyRoomsWidget() {

+		super();

+		location = new WidgetLocation(0, 1);

+		init();

+	}

+	

+	@Override

+	public void init() {

+		super.init();

+		title = Application.getString(781L);

+		id = WIDGET_ID_MY_ROOMS;

+	}

+	

+	public WidgetView createView(String viewId) {

+		return new MyRoomsWidgetView(viewId, new Model<Widget>(this));

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java
new file mode 100644
index 0000000..27c2b87
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetDescriptor.java
@@ -0,0 +1,47 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.dashboard;

+

+import org.apache.openmeetings.web.app.Application;

+

+import ro.fortsoft.wicket.dashboard.WidgetDescriptor;

+

+public class MyRoomsWidgetDescriptor implements WidgetDescriptor {

+	private static final long serialVersionUID = 1L;

+

+	public String getName() {

+		return Application.getString(781L);

+	}

+

+	public String getProvider() {

+		return "Apache Openmeetings";

+	}

+

+	public String getDescription() {

+		return Application.getString(782L);

+	}

+

+	public String getWidgetClassName() {

+		return MyRoomsWidget.class.getName();

+	}

+

+	public String getTypeName() {

+		return "om.widget.myrooms";

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.html b/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.html
new file mode 100644
index 0000000..3ae8f1d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.html
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+	<wicket:panel>

+    	<div wicket:id="rooms"></div>

+	</wicket:panel>

+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java
new file mode 100644
index 0000000..1d8ba5a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/MyRoomsWidgetView.java
@@ -0,0 +1,37 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.dashboard;

+

+import static org.apache.openmeetings.web.common.UserPanel.getMyRooms;

+

+import org.apache.openmeetings.web.user.rooms.RoomsPanel;

+import org.apache.wicket.model.Model;

+

+import ro.fortsoft.wicket.dashboard.Widget;

+import ro.fortsoft.wicket.dashboard.web.WidgetView;

+

+public class MyRoomsWidgetView extends WidgetView {

+	private static final long serialVersionUID = 1L;

+

+	public MyRoomsWidgetView(String id, Model<Widget> model) {

+		super(id, model);

+		

+		add(new RoomsPanel("rooms", getMyRooms()));

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.html b/src/web/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.html
new file mode 100644
index 0000000..63665f4
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.html
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+	<wicket:panel>

+		<div wicket:id="dashboard" class="dashboard"></div>

+	</wicket:panel>

+</html>

diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.java
new file mode 100644
index 0000000..5afa653
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/OmDashboardPanel.java
@@ -0,0 +1,36 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.dashboard;

+

+import org.apache.openmeetings.web.app.WebSession;

+import org.apache.openmeetings.web.common.UserPanel;

+import org.apache.wicket.model.Model;

+

+import ro.fortsoft.wicket.dashboard.Dashboard;

+import ro.fortsoft.wicket.dashboard.web.DashboardPanel;

+

+public class OmDashboardPanel extends UserPanel {

+	private static final long serialVersionUID = 7815949875883825949L;

+

+	public OmDashboardPanel(String id) {

+		super(id);

+

+		add(new DashboardPanel("dashboard", new Model<Dashboard>(WebSession.getDashboard())).setRtlModel(Model.of(isRtl())));

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
new file mode 100644
index 0000000..92da6ca
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidget.java
@@ -0,0 +1,49 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.dashboard;

+

+import org.apache.openmeetings.web.app.Application;

+import org.apache.wicket.model.Model;

+

+import ro.fortsoft.wicket.dashboard.AbstractWidget;

+import ro.fortsoft.wicket.dashboard.Widget;

+import ro.fortsoft.wicket.dashboard.WidgetLocation;

+import ro.fortsoft.wicket.dashboard.web.WidgetView;

+

+public class RssWidget extends AbstractWidget {

+	private static final long serialVersionUID = 1L;

+	public static final String WIDGET_ID_RSS = "RssWidget";

+

+	public RssWidget() {

+		super();

+		location = new WidgetLocation(1, 1);

+		init();

+	}

+	

+	@Override

+	public void init() {

+		super.init();

+		title = Application.getString(277L);

+		id = WIDGET_ID_RSS;

+	}

+	

+	public WidgetView createView(String viewId) {

+		return new RssWidgetView(viewId, new Model<Widget>(this));

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidgetDescriptor.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidgetDescriptor.java
new file mode 100644
index 0000000..67d96d1
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidgetDescriptor.java
@@ -0,0 +1,47 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.dashboard;

+

+import org.apache.openmeetings.web.app.Application;

+

+import ro.fortsoft.wicket.dashboard.WidgetDescriptor;

+

+public class RssWidgetDescriptor implements WidgetDescriptor {

+	private static final long serialVersionUID = -9113376703084624276L;

+

+	public String getName() {

+		return Application.getString(277L);

+	}

+

+	public String getProvider() {

+		return "Apache Openmeetings";

+	}

+

+	public String getDescription() {

+		return Application.getString(277L);

+	}

+

+	public String getWidgetClassName() {

+		return RssWidget.class.getName();

+	}

+

+	public String getTypeName() {

+		return "om.widget.rss";

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.html b/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.html
new file mode 100644
index 0000000..4671c4e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.html
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:head>
+	<script type="text/javascript">
+		var MAX_ITEM_COUNT = 5;
+		function getRssItems(url, next) {
+			//TODO items need to be merged and sorted by date
+			$.ajax({
+				url: url
+				, type: 'GET'
+			    , crossDomain: true
+				, dataType: 'xml'
+				, success: function(data, status, xhr) {
+					var $xml = $(data);
+					var counter = MAX_ITEM_COUNT;
+					$xml.find("item").each(function() {
+						var $this = $(this), item = {
+							title : $this.find("title").text(),
+							link : $this.find("link").text(),
+							description : $this.find("description").text(),
+							pubDate : $this.find("pubDate").text(),
+							author : $this.find("author").text()
+						}
+						addItem(item);
+						if (--counter < 0) {
+							return false;
+						}
+					});
+					counter = MAX_ITEM_COUNT;
+					$xml.find("entry").each(function() {
+						var $this = $(this), item = {
+							title : $this.find("title").text(),
+							link : $this.find("link").text(),
+							description : $this.find("content"),
+							pubDate : $this.find("published").text(),
+							author : $this.find("author").text()
+						}
+						addItem(item);
+						if (--counter < 0) {
+							return false;
+						}
+					});
+					if (next) {
+						getRssItems(next, null)
+					} else {
+						$('#feeds').accordion({collapsible: true, active: false, header: 'h3'});
+					}
+				}
+			});
+		}
+		function addItem(item) {
+			//TODO need to be checked
+			$('#feeds').append('<h3>' + item.title + '</h3>')
+				.append($('<div></div>').append(item.description));
+		}
+		function loadRssTab(url1, url2) {
+			$('#feedcontainer').html('');
+			$('#feedcontainer').append('<div id="feeds"></div>');
+			getRssItems(url1, url2);
+		}
+	</script>
+</wicket:head>
+<wicket:panel>
+	<div id="feedcontainer"></div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java
new file mode 100644
index 0000000..0b38886
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/RssWidgetView.java
@@ -0,0 +1,95 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.dashboard;

+

+import static org.apache.openmeetings.rss.LoadAtomRssFeed.getFeedConnection;

+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_RSS_FEED1_KEY;

+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_RSS_FEED2_KEY;

+import static org.apache.openmeetings.web.app.Application.getBean;

+

+import java.io.IOException;

+import java.io.InputStream;

+import java.net.HttpURLConnection;

+

+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;

+import org.apache.wicket.behavior.AbstractAjaxBehavior;

+import org.apache.wicket.markup.head.IHeaderResponse;

+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;

+import org.apache.wicket.model.Model;

+import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;

+import org.apache.wicket.request.resource.ContentDisposition;

+import org.apache.wicket.util.resource.AbstractResourceStream;

+import org.apache.wicket.util.resource.ResourceStreamNotFoundException;

+

+import ro.fortsoft.wicket.dashboard.Widget;

+import ro.fortsoft.wicket.dashboard.web.WidgetView;

+

+public class RssWidgetView extends WidgetView {

+	private static final long serialVersionUID = -6257866996099503210L;

+	private RSSFeedBehavior feed1; 

+	private RSSFeedBehavior feed2; 

+

+	public RssWidgetView(String id, Model<Widget> model) {

+		super(id, model);

+		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);

+		add(feed1 = new RSSFeedBehavior(cfgDao.getConfValue(CONFIG_RSS_FEED1_KEY, String.class, "")));

+		add(feed2 = new RSSFeedBehavior(cfgDao.getConfValue(CONFIG_RSS_FEED2_KEY, String.class, "")));

+	}

+	

+	@Override

+	public void renderHead(IHeaderResponse response) {

+		super.renderHead(response);

+		response.render(OnDomReadyHeaderItem.forScript("loadRssTab('" + feed1.getCallbackUrl() + "',"

+				+ "'" + feed2.getCallbackUrl() + "');")) ;

+	}

+	

+	class RSSFeedBehavior extends AbstractAjaxBehavior {

+		private static final long serialVersionUID = 721009368063152450L;

+		private String url;

+

+		RSSFeedBehavior(String url) {

+			this.url = url;

+		}

+		

+		public void onRequest() {

+			ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(new AbstractResourceStream() {

+				private static final long serialVersionUID = -322593118428697261L;

+				HttpURLConnection con;

+				

+				public InputStream getInputStream() throws ResourceStreamNotFoundException {

+					try {

+						con = getFeedConnection(url);

+						con.connect();

+						return con.getInputStream();

+					} catch (IOException e) {

+						throw new ResourceStreamNotFoundException();

+					}

+				}

+

+				public void close() throws IOException {

+					if (con != null) {

+						con.disconnect();

+					}

+				}

+			}, "feed");

+			handler.setContentDisposition(ContentDisposition.ATTACHMENT);

+			getComponent().getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);

+		}

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java
new file mode 100644
index 0000000..cf42431
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidget.java
@@ -0,0 +1,48 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.dashboard;

+

+import org.apache.openmeetings.web.app.Application;

+import org.apache.wicket.model.Model;

+

+import ro.fortsoft.wicket.dashboard.AbstractWidget;

+import ro.fortsoft.wicket.dashboard.Widget;

+import ro.fortsoft.wicket.dashboard.WidgetLocation;

+import ro.fortsoft.wicket.dashboard.web.WidgetView;

+

+public class StartWidget extends AbstractWidget {

+	private static final long serialVersionUID = 1L;

+

+	public StartWidget() {

+		super();

+		location = new WidgetLocation(1, 0);

+		init();

+	}

+	

+	@Override

+	public void init() {

+		super.init();

+		title = Application.getString(774L);

+		id = "StartWidget";

+	}

+	

+	public WidgetView createView(String viewId) {

+		return new StartWidgetView(viewId, new Model<Widget>(this));

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidgetDescriptor.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidgetDescriptor.java
new file mode 100644
index 0000000..75e4a69
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidgetDescriptor.java
@@ -0,0 +1,47 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.dashboard;

+

+import org.apache.openmeetings.web.app.Application;

+

+import ro.fortsoft.wicket.dashboard.WidgetDescriptor;

+

+public class StartWidgetDescriptor implements WidgetDescriptor {

+	private static final long serialVersionUID = 2533010836978961930L;

+

+	public String getName() {

+		return Application.getString(774L);

+	}

+

+	public String getProvider() {

+		return "Apache Openmeetings";

+	}

+

+	public String getDescription() {

+		return Application.getString(804L);

+	}

+

+	public String getWidgetClassName() {

+		return StartWidget.class.getName();

+	}

+

+	public String getTypeName() {

+		return "om.widget.start";

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.html b/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.html
new file mode 100644
index 0000000..e783ab0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.html
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+	<wicket:panel>

+		<h3><wicket:message key="774"/></h3>

+		<div><div wicket:id="step1" class="clickable start_step1"><wicket:message key="768"/></div></div>

+		<div><div wicket:id="step2" class="clickable start_step2"><wicket:message key="771"/></div></div>

+		<div><div wicket:id="step3" class="clickable start_step3"><wicket:message key="772"/></div></div>

+		<div><div wicket:id="step4" class="clickable start_step4"><wicket:message key="773"/></div></div>

+		<table>

+			<tr>

+				<td><span wicket:id="desc"></span></td>

+				<td>

+					<button wicket:id="start" type="button"><wicket:message key="788"/></button><br/>

+					<button wicket:id="calendar" type="button"><wicket:message key="291"/></button>

+				</td>

+			</tr>

+		</table>

+	</wicket:panel>

+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.java
new file mode 100644
index 0000000..5885455
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/StartWidgetView.java
@@ -0,0 +1,70 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.dashboard;

+

+import static org.apache.openmeetings.web.util.OmUrlFragment.CALENDAR;

+import static org.apache.openmeetings.web.util.OmUrlFragment.ROOMS_PUBLIC;

+

+import org.apache.openmeetings.web.app.Application;

+import org.apache.openmeetings.web.pages.MainPage;

+import org.apache.wicket.ajax.AjaxEventBehavior;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.model.Model;

+

+import com.googlecode.wicket.jquery.ui.form.button.Button;

+

+import ro.fortsoft.wicket.dashboard.Widget;

+import ro.fortsoft.wicket.dashboard.web.WidgetView;

+

+public class StartWidgetView extends WidgetView {

+	private static final long serialVersionUID = -3886388347737468022L;

+

+	public StartWidgetView(String id, Model<Widget> model) {

+		super(id, model);

+		add(new WebMarkupContainer("step1").add(new PublicRoomsEventBehavior()));

+		add(new WebMarkupContainer("step2").add(new PublicRoomsEventBehavior()));

+		add(new WebMarkupContainer("step3").add(new PublicRoomsEventBehavior()));

+		add(new WebMarkupContainer("step4").add(new PublicRoomsEventBehavior()));

+		add(new Label("desc", Application.getString(804L)));

+		add(new Button("start").add(new PublicRoomsEventBehavior()));

+		add(new Button("calendar").add(new AjaxEventBehavior("click") {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void onEvent(AjaxRequestTarget target) {

+				((MainPage)getPage()).updateContents(CALENDAR, target);

+			}

+		}));

+	}

+	

+	private class PublicRoomsEventBehavior extends AjaxEventBehavior {

+		private static final long serialVersionUID = 1L;

+

+		public PublicRoomsEventBehavior() {

+			super("click");

+		}

+		

+		@Override

+		protected void onEvent(AjaxRequestTarget target) {

+			((MainPage)getPage()).updateContents(ROOMS_PUBLIC, target);

+		}

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java
new file mode 100644
index 0000000..8b27fb5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidget.java
@@ -0,0 +1,48 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.dashboard;

+

+import org.apache.openmeetings.web.app.Application;

+import org.apache.wicket.model.Model;

+

+import ro.fortsoft.wicket.dashboard.AbstractWidget;

+import ro.fortsoft.wicket.dashboard.Widget;

+import ro.fortsoft.wicket.dashboard.WidgetLocation;

+import ro.fortsoft.wicket.dashboard.web.WidgetView;

+

+public class WelcomeWidget extends AbstractWidget {

+	private static final long serialVersionUID = 1L;

+

+	public WelcomeWidget() {

+		super();

+		location = new WidgetLocation(0, 0);

+		init();

+	}

+	

+	@Override

+	public void init() {

+		super.init();

+		title = Application.getString(1546L);

+		id = "WelcomeWidget";

+	}

+	

+	public WidgetView createView(String viewId) {

+		return new WelcomeWidgetView(viewId, new Model<Widget>(this));

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetDescriptor.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetDescriptor.java
new file mode 100644
index 0000000..83f2c51
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetDescriptor.java
@@ -0,0 +1,47 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.dashboard;

+

+import org.apache.openmeetings.web.app.Application;

+

+import ro.fortsoft.wicket.dashboard.WidgetDescriptor;

+

+public class WelcomeWidgetDescriptor implements WidgetDescriptor {

+	private static final long serialVersionUID = 7835392425157215242L;

+

+	public String getName() {

+		return Application.getString(1546L);

+	}

+

+	public String getProvider() {

+		return "Apache Openmeetings";

+	}

+

+	public String getDescription() {

+		return Application.getString(1547L);

+	}

+

+	public String getWidgetClassName() {

+		return WelcomeWidget.class.getName();

+	}

+

+	public String getTypeName() {

+		return "om.widget.welcome";

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.html b/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.html
new file mode 100644
index 0000000..b41c9f3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.html
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+<wicket:panel>

+   	<table>

+   		<tr>

+   			<td><div wicket:id="img"></div></td>

+   			<td>

+   				<h3><wicket:message key="376"/>&nbsp;<span wicket:id="firstname"></span>&nbsp;<span wicket:id="lastname"></span></h3>

+   				<wicket:message key="1143"/>&nbsp;<span wicket:id="tz"></span><br/>

+   				<wicket:message key="378"/>&nbsp;<a wicket:id="openUnread"><span wicket:id="unread"></span></a><br/>

+   				<a wicket:id="editProfile"><wicket:message key="377"/></a>

+   			</td>

+   		</tr>

+   		<tr>

+   			<td colspan="2" class="help support">

+   				<h3><wicket:message key="281"/></h3>

+   				<a wicket:message="href:282"><wicket:message key="286"/></a><br/>

+   				<a wicket:message="href:283"><wicket:message key="287"/></a><br/>

+				<a wicket:id="netTest" target="_blank"><wicket:message key="1527"/></a><br/>

+			</td>

+   		</tr>

+   	</table>

+</wicket:panel>

+</html>

diff --git a/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.java b/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.java
new file mode 100644
index 0000000..f1586c9
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/dashboard/WelcomeWidgetView.java
@@ -0,0 +1,82 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.dashboard;

+

+import static org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;

+import static org.apache.openmeetings.web.app.Application.getBean;

+import static org.apache.openmeetings.web.app.WebSession.getUserId;

+import static org.apache.openmeetings.web.util.OmUrlFragment.PROFILE_EDIT;

+import static org.apache.openmeetings.web.util.OmUrlFragment.PROFILE_MESSAGES;

+

+import org.apache.openmeetings.db.dao.user.PrivateMessagesDao;

+import org.apache.openmeetings.db.dao.user.UserDao;

+import org.apache.openmeetings.db.entity.user.User;

+import org.apache.openmeetings.web.common.UploadableProfileImagePanel;

+import org.apache.openmeetings.web.pages.MainPage;

+import org.apache.openmeetings.web.pages.SwfPage;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.ajax.markup.html.AjaxLink;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.html.link.Link;

+import org.apache.wicket.model.Model;

+import org.apache.wicket.request.mapper.parameter.PageParameters;

+

+import ro.fortsoft.wicket.dashboard.Widget;

+import ro.fortsoft.wicket.dashboard.web.WidgetView;

+

+public class WelcomeWidgetView extends WidgetView {

+	private static final long serialVersionUID = -6257866996099503210L;

+

+	public WelcomeWidgetView(String id, Model<Widget> model) {

+		super(id, model);

+

+		User u = getBean(UserDao.class).get(getUserId());

+		add(new UploadableProfileImagePanel("img", getUserId()));

+		 //FIXME this need to be aligned according to Locale

+		add(new Label("firstname", Model.of(u.getFirstname())));

+		add(new Label("lastname", Model.of(u.getLastname())));

+		add(new Label("tz", Model.of(u.getTimeZoneId())));

+		add(new AjaxLink<Void>("openUnread") {

+			private static final long serialVersionUID = -1847619557485964386L;

+

+			@Override

+			public void onClick(AjaxRequestTarget target) {

+				((MainPage)getPage()).updateContents(PROFILE_MESSAGES, target);

+			}

+		}.add(new Label("unread", Model.of("" + getBean(PrivateMessagesDao.class).count(getUserId(), INBOX_FOLDER_ID, null)))));

+		add(new AjaxLink<Void>("editProfile") {

+			private static final long serialVersionUID = -1847619557485964386L;

+

+			@Override

+			public void onClick(AjaxRequestTarget target) {

+				((MainPage)getPage()).updateContents(PROFILE_EDIT, target);

+			}

+		});

+		add(new Link<Void>("netTest") {

+			private static final long serialVersionUID = -9055312659797800331L;

+

+			@Override

+			public void onClick() {

+				PageParameters pp = new PageParameters();

+				pp.add("swf", "networktesting.swf10.swf");

+				setResponsePage(SwfPage.class, pp);

+			}

+		});

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/MessageDialog.html b/src/web/java/org/apache/openmeetings/web/user/profile/MessageDialog.html
new file mode 100644
index 0000000..b5ce92e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/MessageDialog.html
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:head>
+	<style type="text/css">
+		.ui-autocomplete {
+			z-index: 999 !important;
+		}
+	</style>
+</wicket:head>
+<wicket:panel>
+	<form wicket:id="form">
+		<table style="width: 100%;">
+			<tr>
+				<td colspan="2" wicket:id="feedback"></td>
+			</tr>
+			<tr>
+				<td class="messages column label"><wicket:message key="1210"/></td>
+				<td wicket:message="title:1588"><input class="messages text to" type="hidden" wicket:id="to"/></td>
+			</tr>
+			<tr>
+				<td class="messages column label"><wicket:message key="1211"/></td>
+				<td><input class="messages text" type="text" wicket:id="subject"/></td>
+			</tr>
+			<tr>
+				<td colspan="2">
+					<div wicket:id="toolbarContainer"></div>
+					<div wicket:id="message"></div>
+				</td>
+			</tr>
+			<tr>
+				<td colspan="2"><input type="checkbox" wicket:id="bookedRoom" /><label wicket:for="bookedRoom"><wicket:message key="1218"/></label></td>
+			</tr>
+			<tr wicket:id="roomParamsBlock">
+				<td colspan="2" wicket:id="roomParams">
+					<table style="width: 100%">
+						<tr>
+							<td style="width: 70px;">
+								<table>
+									<tr>
+										<td><wicket:message key="194"/></td>
+										<td><select class="messages selector" wicket:id="room.roomtype"></select></td>
+									</tr>
+									<tr>
+										<td><wicket:message key="570" /></td>
+										<td><span class="date time picker" wicket:id="start"></span></td>
+									</tr>
+									<tr>
+										<td><wicket:message key="571" /></td>
+										<td><span class="date time picker" wicket:id="end"></span></td>
+									</tr>
+								</table>
+							</td>
+							<td><div class="info-text"><wicket:message key="1221" /></div></td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+	</form>
+</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/MessageDialog.java b/src/web/java/org/apache/openmeetings/web/user/profile/MessageDialog.java
new file mode 100644
index 0000000..af67fe2
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/MessageDialog.java
@@ -0,0 +1,272 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.SENT_FOLDER_ID;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.util.CalendarWebHelper.getZoneId;
+import static org.apache.openmeetings.web.util.RoomTypeDropDown.getRoomTypes;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+import org.apache.openmeetings.data.conference.InvitationManager;
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.user.PrivateMessagesDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.calendar.MeetingMember;
+import org.apache.openmeetings.db.entity.room.Invitation;
+import org.apache.openmeetings.db.entity.room.Invitation.Valid;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.PrivateMessage;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.openmeetings.mail.MailHandler;
+import org.apache.openmeetings.util.CalendarHelper;
+import org.apache.openmeetings.util.LinkHelper;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.OmDateTimePicker;
+import org.apache.openmeetings.web.util.CalendarWebHelper;
+import org.apache.openmeetings.web.util.ContactsHelper;
+import org.apache.openmeetings.web.util.RoomTypeDropDown;
+import org.apache.openmeetings.web.util.UserMultiChoice;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.util.CollectionModel;
+import org.threeten.bp.LocalDateTime;
+import org.threeten.bp.ZonedDateTime;
+import org.threeten.bp.temporal.ChronoUnit;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.WysiwygEditor;
+import com.googlecode.wicket.jquery.ui.plugins.wysiwyg.toolbar.DefaultWysiwygToolbar;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.kendo.ui.form.datetime.local.DateTimePicker;
+import com.googlecode.wicket.kendo.ui.panel.KendoFeedbackPanel;
+
+public class MessageDialog extends AbstractFormDialog<PrivateMessage> {
+	private static final long serialVersionUID = 1L;
+	private final Form<PrivateMessage> form;
+	private final KendoFeedbackPanel feedback = new KendoFeedbackPanel("feedback", new Options("button", true));
+	DialogButton send = new DialogButton("send", Application.getString(218));
+	private DialogButton cancel = new DialogButton("cancel", Application.getString(219));
+	private final WebMarkupContainer roomParamsBlock = new WebMarkupContainer("roomParamsBlock");
+	private final WebMarkupContainer roomParams = new WebMarkupContainer("roomParams");
+	private final DateTimePicker start = new OmDateTimePicker("start", Model.of(LocalDateTime.now()));
+	private final DateTimePicker end = new OmDateTimePicker("end", Model.of(LocalDateTime.now()));
+	private boolean isPrivate = false; 
+	private final IModel<Collection<User>> modelTo = new CollectionModel<User>(new ArrayList<User>());
+
+	@Override
+	public int getWidth() {
+		return 650;
+	}
+	
+	public void open(IPartialPageRequestHandler target, long userId) {
+		getModelObject().setTo(getBean(UserDao.class).get(userId));
+		open(target);
+	}
+	
+	public MessageDialog reset(boolean isPrivate) {
+		//TODO should be 'in sync' with appointment
+		LocalDateTime now = ZonedDateTime.now(getZoneId()).toLocalDateTime();
+		start.setModelObject(now);
+		end.setModelObject(now.plus(1, ChronoUnit.HOURS));
+		modelTo.setObject(new ArrayList<User>());
+		PrivateMessage p = new PrivateMessage();
+		p.setFrom(getBean(UserDao.class).get(getUserId()));
+		p.setOwner(p.getFrom());
+		p.setIsRead(false);
+		p.setFolderId(INBOX_FOLDER_ID);
+		Room r = new Room();
+		r.setAppointment(true);
+		r.setRoomtype(getRoomTypes().get(0));
+		p.setRoom(r);
+		setModelObject(p);
+		roomParams.setVisible(getModelObject().isBookedRoom());
+		form.setModelObject(p);
+		this.isPrivate = isPrivate;
+		return this;
+	}
+	
+	@Override
+	protected void onOpen(IPartialPageRequestHandler target) {
+		if (getModel().getObject().getTo() != null) {
+			modelTo.getObject().add(getModel().getObject().getTo());
+		}
+		target.add(form);
+		super.onOpen(target);
+	}
+	
+	public MessageDialog(String id, CompoundPropertyModel<PrivateMessage> model) {
+		super(id, Application.getString(1209), model);
+		form = new Form<PrivateMessage>("form", getModel());
+		
+		form.add(feedback.setOutputMarkupId(true));
+		form.add(new UserMultiChoice("to", modelTo).setRequired(true));
+		form.add(new TextField<String>("subject"));
+		DefaultWysiwygToolbar toolbar = new DefaultWysiwygToolbar("toolbarContainer");
+		form.add(toolbar);
+		form.add(new WysiwygEditor("message", toolbar));
+		form.add(roomParamsBlock.setOutputMarkupId(true));
+		final CheckBox bookedRoom = new CheckBox("bookedRoom");
+		form.add(bookedRoom.setOutputMarkupId(true).add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+			
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				PrivateMessage p = MessageDialog.this.getModelObject();
+				p.setBookedRoom(!p.isBookedRoom());
+				roomParams.setVisible(p.isBookedRoom());
+				target.add(bookedRoom, roomParamsBlock);
+			}
+		}));
+		roomParamsBlock.add(roomParams);
+		roomParams.add(new RoomTypeDropDown("room.roomtype"));
+		roomParams.add(start);
+		roomParams.add(end);
+		add(form.setOutputMarkupId(true));
+	}
+
+	@Override
+	protected List<DialogButton> getButtons() {
+		return Arrays.asList(send, cancel);
+	}
+	
+	@Override
+	protected DialogButton getSubmitButton() {
+		return send;
+	}
+
+	@Override
+	public Form<PrivateMessage> getForm() {
+		return form;
+	}
+
+	@Override
+	protected void onError(AjaxRequestTarget target) {
+		target.add(feedback);
+	}
+
+	@Override
+	protected void onSubmit(AjaxRequestTarget target) {
+		PrivateMessage p = getModelObject();
+		p.setInserted(new Date());
+		UserDao userDao = getBean(UserDao.class); 
+		User owner = userDao.get(getUserId());
+		if (p.isBookedRoom()) {
+			Room r = p.getRoom();
+			r.setName(p.getSubject());
+			r.setComment("");
+			r.setNumberOfPartizipants(100L);
+			r.setAppointment(true);
+			r.setAllowUserQuestions(true);
+			r.setAllowFontStyles(true);
+			r = getBean(RoomDao.class).update(r, getUserId());
+			Appointment a = new Appointment();
+			a.setTitle(p.getSubject());
+			a.setDescription(p.getMessage());
+			a.setRoom(r);
+			a.setStart(CalendarWebHelper.getDate(start.getModelObject()));
+			a.setEnd(CalendarWebHelper.getDate(end.getModelObject()));
+			List<MeetingMember> attendees = new ArrayList<>();
+			for (User to : modelTo.getObject()) {
+        		MeetingMember mm = new MeetingMember();
+        		mm.setUser(to);
+        		mm.setDeleted(false);
+        		mm.setInserted(a.getInserted());
+        		mm.setUpdated(a.getUpdated());
+        		mm.setAppointment(a);
+        		attendees.add(mm);
+			}
+			a.setOwner(owner);
+			a.setMeetingMembers(attendees);
+	        getBean(AppointmentDao.class).update(a, getUserId(), false);
+			p.setRoom(r);
+		} else {
+			p.setRoom(null);
+		}
+		PrivateMessagesDao msgDao = getBean(PrivateMessagesDao.class);
+		for (User to : modelTo.getObject()) {
+			if (to.getUser_id() == null) {
+				userDao.update(to, getUserId());
+			}
+			//to send
+			p = new PrivateMessage(p);
+			p.setTo(to);
+			p.setFolderId(SENT_FOLDER_ID);
+			msgDao.update(p, getUserId());
+			//to inbox
+			p = new PrivateMessage(p);
+			p.setOwner(to);
+			p.setFolderId(INBOX_FOLDER_ID);
+			msgDao.update(p, getUserId());
+			if (to.getAdresses() != null) {
+				String aLinkHTML = 	(isPrivate && to.getType() == Type.user) ? "<br/><br/>" + "<a href='" + ContactsHelper.getLink() + "'>"
+							+ Application.getString(1302, to.getLanguage_id()) + "</a><br/>" : "";
+				String invitation_link = "";
+				if (p.isBookedRoom()) {
+					Invitation i = getBean(InvitationManager.class).getInvitation(to, p.getRoom(),
+							false, null, Valid.Period, owner, to.getLanguage_id()
+							, CalendarHelper.getDate(start.getModelObject(), to.getTimeZoneId())
+							, CalendarHelper.getDate(end.getModelObject(), to.getTimeZoneId()), null);
+					
+					invitation_link = LinkHelper.getInvitationLink(getBean(ConfigurationDao.class).getBaseUrl(), i);
+
+					if (invitation_link == null) {
+						invitation_link = "";
+					} else {
+						invitation_link = "<br/>" //
+								+ Application.getString(503, to.getLanguage_id())
+								+ "<br/><a href='" + invitation_link
+								+ "'>"
+								+ Application.getString(504, to.getLanguage_id()) + "</a><br/>";
+					}
+				}
+				
+				getBean(MailHandler.class).send(to.getAdresses().getEmail(),
+						Application.getString(1301, to.getLanguage_id()) + p.getSubject(),
+						(p.getMessage() == null ? "" : p.getMessage().replaceAll("\\<.*?>", "")) + aLinkHTML + invitation_link);
+			}
+		}
+	}
+	
+	@Override
+	protected void onDetach() {
+		modelTo.detach();
+		super.onDetach();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.html b/src/web/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.html
new file mode 100644
index 0000000..c1dd333
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.html
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<!-- TODO design should be changed in the future -->
+	<table class="messages">
+		<tr>
+			<td class="side left">
+				<div class="email new clickable" wicket:id="new" wicket:message="title:1208"><wicket:message key="1207"/></div>
+				<div wicket:id="folders">
+					<div wicket:id="inbox"><wicket:message key="1222"/></div>
+					<div wicket:id="sent"><wicket:message key="1223"/></div>
+					<div wicket:id="trash"><wicket:message key="1224"/></div>
+					<div class="email newdir clickable" wicket:id="newdir" wicket:message="title:1259"><wicket:message key="1258"/></div>
+					<div wicket:id="folder">
+						<div wicket:id="name"></div>
+						<div class="delete" wicket:id="delete" wicket:message="title:1262"></div>
+					</div>
+				</div>
+			</td>
+			<td class="main">
+				<div><b><wicket:message key="1206"/>&nbsp;(<span wicket:id="unread"></span>)</b></div>
+				<div wicket:id="navigator"></div>
+				<table id="messagesTable" style="width: 100%;">
+					<thead>
+					<tr>
+						<th align="left"><span wicket:id="orderById"></span><wicket:message key="1205"/></th>
+						<th align="left"><span wicket:id="orderByFrom"></span><wicket:message key="1202"/></th>
+						<th align="left"><span wicket:id="orderBySubject"></span><wicket:message key="1203"/></th>
+						<th align="left"><span wicket:id="orderBySend"></span><wicket:message key="1204"/></th>
+					</tr>
+					</thead>
+					<tbody wicket:id="container" style="background-color: white;">
+					<tr wicket:id="messages">
+						<td wicket:id="id"></td>
+						<td wicket:id="from"></td>
+						<td wicket:id="subject"></td>
+						<td wicket:id="send"></td>
+					</tr>
+					</tbody>
+				</table>
+				<div wicket:id="buttons">
+					<select wicket:id="msgSelect"></select>
+					<input wicket:id="toInboxBtn" type="button" wicket:message="value:1255"/>
+					<input wicket:id="deleteBtn" type="button" wicket:message="value:1245"/>
+					<input wicket:id="readBtn" type="button" wicket:message="value:1248"/>
+					<input wicket:id="unreadBtn" type="button" wicket:message="value:1247"/>
+					<select wicket:id="msgMove"></select>
+				</div>
+				<div wicket:id="selectedMessage">
+					<table style="width: 100%">
+						<tr>
+							<td style="width: 10px; padding-right: 20px;"><wicket:message key="1202"/></td>
+							<td wicket:id="from"></td>
+						</tr>
+						<tr>
+							<td style="width: 10px; padding-right: 20px;"><wicket:message key="1210"/></td>
+							<td wicket:id="to"></td>
+						</tr>
+						<tr>
+							<td style="width: 10px; padding-right: 20px;"><wicket:message key="1211"/></td>
+							<td wicket:id="subj"></td>
+						</tr>
+					</table>
+					<div style="background-color: white;min-height: 300px;" wicket:id="body"></div>
+					<div wicket:id="roomContainer">
+						<table style="width: 100%">
+							<tr>
+								<td>
+									<button class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" wicket:id="enter">
+										<span class="ui-button-text"><wicket:message key="1282"/></span>
+									</button>
+								</td>
+								<td>
+									<div style="display: inline-block; width: 300px;"><wicket:message key="570" /></div><span wicket:id="start"></span><br/>
+									<div style="display: inline-block; width: 300px;"><wicket:message key="571" /></div><span wicket:id="end"></span>
+								</td>
+							</tr>
+						</table>
+					</div>
+				</div>
+			</td>
+			<td class="side right" wicket:id="contacts">
+				<div><b><wicket:message key="1189"/>&nbsp;(<span wicket:id="pendingContacts"></span>)</b></div>
+				<div><b><wicket:message key="1188"/>&nbsp;(<span wicket:id="allContacts"></span>)</b></div>
+				<table style="width: 100%">
+					<tr>
+						<th><wicket:message key="1180"/></th>
+						<th><wicket:message key="1185"/></th>
+					</tr>
+					<tr wicket:id="users">
+						<td><div wicket:id="name" style="overflow-x: hidden;"></div></td>
+						<td><div wicket:id="accept" class="tick om-icon clickable" wicket:message="title:1190"
+							></div><div wicket:id="decline" class="cross om-icon clickable" wicket:message="title:1191"
+							></div><div wicket:id="view" class="user om-icon clickable" wicket:message="title:1236"
+							></div><div wicket:id="message" class="new-email om-icon clickable" wicket:message="title:1253"
+							></div><div wicket:id="delete" class="cross om-icon clickable" wicket:message="title:1234"
+							></div></td>
+					</tr>
+				</table>
+			</td>
+		</tr>
+	</table>
+	<div wicket:id="addFolder"></div>
+	<div wicket:id="newMessage"></div>
+	<div wicket:id="infoDialog"></div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java b/src/web/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java
new file mode 100644
index 0000000..96da610
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/MessagesContactsPanel.java
@@ -0,0 +1,648 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.INBOX_FOLDER_ID;
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.SENT_FOLDER_ID;
+import static org.apache.openmeetings.db.entity.user.PrivateMessage.TRASH_FOLDER_ID;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
+import org.apache.openmeetings.db.dao.user.PrivateMessageFolderDao;
+import org.apache.openmeetings.db.dao.user.PrivateMessagesDao;
+import org.apache.openmeetings.db.dao.user.UserContactsDao;
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.user.PrivateMessage;
+import org.apache.openmeetings.db.entity.user.PrivateMessageFolder;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.UserContact;
+import org.apache.openmeetings.web.admin.SearchableDataView;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.AddFolderDialog;
+import org.apache.openmeetings.web.common.PagedEntityListPanel;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.openmeetings.web.data.DataViewContainer;
+import org.apache.openmeetings.web.data.OmOrderByBorder;
+import org.apache.openmeetings.web.data.SearchableDataProvider;
+import org.apache.openmeetings.web.user.rooms.RoomEnterBehavior;
+import org.apache.openmeetings.web.util.ContactsHelper;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
+import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
+import org.apache.wicket.behavior.AttributeAppender;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Button;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.markup.repeater.Item;
+import org.apache.wicket.markup.repeater.data.DataView;
+import org.apache.wicket.markup.repeater.data.IDataProvider;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.util.ListModel;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.plugins.fixedheadertable.FixedHeaderTableBehavior;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+import ro.fortsoft.wicket.dashboard.web.util.ConfirmAjaxCallListener;
+
+public class MessagesContactsPanel extends UserPanel {
+	private static final long serialVersionUID = 1L;
+	private final static long MOVE_CHOOSE = -1;
+	private final static int SELECT_CHOOSE = 1252;
+	private final static int SELECT_ALL = 1239;
+	private final static int SELECT_NONE = 1240;
+	private final static int SELECT_UNREAD = 1241;
+	private final static int SELECT_READ = 1242;
+	private final WebMarkupContainer container = new WebMarkupContainer("container");
+	private final WebMarkupContainer folders = new WebMarkupContainer("folders");
+	private final Label unread = new Label("unread", Model.of(0L));
+	private final Label pendingContacts = new Label("pendingContacts", Model.of(0L));
+	private final Label allContacts = new Label("allContacts", Model.of(0L));
+	private final IModel<Long> selectedFolderModel = Model.of(INBOX_FOLDER_ID);
+	private final IModel<List<PrivateMessageFolder>> foldersModel = new ListModel<PrivateMessageFolder>(null);
+	private final WebMarkupContainer inbox = new WebMarkupContainer("inbox");
+	private final WebMarkupContainer sent = new WebMarkupContainer("sent");
+	private final WebMarkupContainer trash = new WebMarkupContainer("trash");
+	private final WebMarkupContainer selectedMessage = new WebMarkupContainer("selectedMessage");
+	private final WebMarkupContainer roomContainer = new WebMarkupContainer("roomContainer");
+	private final WebMarkupContainer buttons = new WebMarkupContainer("buttons");
+	private final WebMarkupContainer contacts = new WebMarkupContainer("contacts");
+	private final MessageDialog newMessage;
+	private final DataViewContainer<PrivateMessage> dataContainer;
+	private final Set<Long> selectedMessages = new HashSet<Long>();
+	private final Set<Long> allMessages = new HashSet<Long>();
+	private final Set<Long> readMessages = new HashSet<Long>();
+	private final Set<Long> unreadMessages = new HashSet<Long>();
+	private final Button toInboxBtn = new Button("toInboxBtn");
+	private final Button deleteBtn = new Button("deleteBtn");
+	private final Button readBtn = new Button("readBtn");
+	private final Button unreadBtn = new Button("unreadBtn");
+	private final FixedHeaderTableBehavior fixedTable = new FixedHeaderTableBehavior("#messagesTable", new Options("height", 100));
+	private final DropDownChoice<Integer> selectDropDown = new DropDownChoice<Integer>(
+		"msgSelect", Model.of(SELECT_CHOOSE)
+		, Arrays.asList(SELECT_CHOOSE, SELECT_ALL, SELECT_NONE, SELECT_UNREAD, SELECT_READ)
+		, new ChoiceRenderer<Integer>() {
+			private static final long serialVersionUID = 1L;
+	
+			public Object getDisplayValue(Integer object) {
+				return Application.getString(object);
+			}
+			
+			public String getIdValue(Integer object, int index) {
+				return "" + object;
+			}
+		});
+	private PrivateMessageFolder NOT_MOVE_FOLDER = new PrivateMessageFolder();
+	private final DropDownChoice<PrivateMessageFolder> moveDropDown = new DropDownChoice<PrivateMessageFolder>("msgMove", Model.of(NOT_MOVE_FOLDER)
+		, Arrays.asList(NOT_MOVE_FOLDER)
+		, new ChoiceRenderer<PrivateMessageFolder>() {
+			private static final long serialVersionUID = 1L;
+
+			public Object getDisplayValue(PrivateMessageFolder object) {
+				return object.getFolderName();
+			}
+
+			public String getIdValue(PrivateMessageFolder object, int index) {
+				return "" + object.getPrivateMessageFolderId();
+			}
+		});
+	private WebMarkupContainer selectedFolder;
+	
+	private void setDefaultFolderClass() {
+		inbox.add(AttributeAppender.replace("class", "email inbox clickable"));
+		sent.add(AttributeAppender.replace("class", "email sent clickable"));
+		trash.add(AttributeAppender.replace("class", "email trash clickable"));
+	}
+	
+	private void selectFolder(WebMarkupContainer folder) {
+		folder.add(AttributeAppender.append("class", "ui-widget-header ui-corner-all"));
+	}
+	
+	private void setFolderClass(ListItem<PrivateMessageFolder> folder) {
+		folder.add(AttributeAppender.replace("class", "email folder clickable"));
+		if (folder.getModelObject().getPrivateMessageFolderId() == selectedFolderModel.getObject()) {
+			selectFolder(folder);
+		}
+	}
+	
+	private void updateControls(AjaxRequestTarget target) {
+		deleteBtn.setEnabled(!selectedMessages.isEmpty());
+		readBtn.setEnabled(TRASH_FOLDER_ID != selectedFolderModel.getObject() && !selectedMessages.isEmpty());
+		unreadBtn.setEnabled(TRASH_FOLDER_ID != selectedFolderModel.getObject() && !selectedMessages.isEmpty());
+		toInboxBtn.setVisible(INBOX_FOLDER_ID != selectedFolderModel.getObject() && SENT_FOLDER_ID != selectedFolderModel.getObject() && !selectedMessages.isEmpty());
+		target.add(buttons);
+	}
+	
+	private String getEmail(User u) {
+		return u == null || u.getAdresses() == null ? "" : u.getAdresses().getEmail();
+	}
+	
+	private void selectMessage(long id, AjaxRequestTarget target) {
+		PrivateMessage msg = getBean(PrivateMessagesDao.class).get(id);
+		selectedMessage.addOrReplace(new Label("from", msg == null ? "" : getEmail(msg.getFrom())));
+		selectedMessage.addOrReplace(new Label("to", msg == null ? "" : getEmail(msg.getTo())));
+		selectedMessage.addOrReplace(new Label("subj", msg == null ? "" : msg.getSubject()));
+		selectedMessage.addOrReplace(new Label("body", msg == null ? "" : msg.getMessage()).setEscapeModelStrings(false));
+		if (msg != null) {
+			Room r = msg.getRoom();
+			if (r != null) {
+				//TODO add time check
+				Appointment a = getBean(AppointmentDao.class).getAppointmentByRoom(r.getRooms_id());
+				roomContainer.addOrReplace(new Label("start", a == null ? "" : getDateFormat().format(a.getStart())));
+				roomContainer.addOrReplace(new Label("end", a == null ? "" : getDateFormat().format(a.getEnd())));
+				roomContainer.addOrReplace(new Button("enter").add(new RoomEnterBehavior(r.getRooms_id())));
+			}
+			roomContainer.setVisible(r != null);
+		}
+		if (target != null) {
+			target.add(selectedMessage);
+			updateControls(target);
+		}
+	}
+	
+	void updateTable(AjaxRequestTarget target) {
+		container.add(fixedTable);
+		if (target != null) {
+			target.add(container);
+		}
+	}
+	
+	private void selectFolder(WebMarkupContainer folder, long id, AjaxRequestTarget target) {
+		selectedFolder = folder;
+		selectedFolderModel.setObject(id);
+		setDefaultFolderClass();
+		selectFolder(folder);
+		emptySelection(target);
+		selectDropDown.setModelObject(SELECT_CHOOSE);
+		moveDropDown.setModelObject(NOT_MOVE_FOLDER);
+		deleteBtn.add(AttributeModifier.replace("value", Application.getString(TRASH_FOLDER_ID == id ? 1256 : 1245)));
+		readBtn.setEnabled(false);
+		unreadBtn.setEnabled(false);
+		if (target != null) {
+			updateTable(target);
+			target.add(folders, unread, selectDropDown, moveDropDown);
+			target.add(dataContainer.container, dataContainer.navigator);
+			target.add(dataContainer.getLinks());
+		}
+	}
+	
+	private void emptySelection(AjaxRequestTarget target) {
+		selectedMessages.clear();
+		selectMessage(-1, target);
+		unread.setDefaultModelObject(getBean(PrivateMessagesDao.class).count(getUserId(), selectedFolderModel.getObject(), null));
+		if (target != null) {
+			target.add(unread);
+		}
+	}
+	
+	private String getDisplayName(User u) {
+		return new StringBuilder().append(u.getFirstname()).append(" ")
+				.append(u.getLastname()).append(" ")
+				.append("<").append(getEmail(u)).append(">")
+				.toString();
+	}
+	
+	private void updateMoveModel() {
+		List<PrivateMessageFolder> list = new ArrayList<PrivateMessageFolder>();
+		list.add(NOT_MOVE_FOLDER);
+		list.addAll(foldersModel.getObject());
+		moveDropDown.setChoices(list);
+	}
+	
+	private void updateContacts(AjaxRequestTarget target) {
+		pendingContacts.setDefaultModelObject(getBean(UserContactsDao.class).getContactRequestsByUserAndStatus(getUserId(), true).size());
+		allContacts.setDefaultModelObject(getBean(UserContactsDao.class).getContactsByUserAndStatus(getUserId(), false).size());
+		if (target != null) {
+			target.add(contacts);
+		}
+	}
+	
+	public MessagesContactsPanel(String id) {
+		super(id);
+		NOT_MOVE_FOLDER.setPrivateMessageFolderId(MOVE_CHOOSE);
+		NOT_MOVE_FOLDER.setFolderName(Application.getString(1243));
+		foldersModel.setObject(getBean(PrivateMessageFolderDao.class).get(0, Integer.MAX_VALUE));
+		updateMoveModel();
+		add(newMessage = new MessageDialog("newMessage", new CompoundPropertyModel<PrivateMessage>(new PrivateMessage())) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onClose(IPartialPageRequestHandler target, DialogButton button) {
+				if (send.equals(button)) {
+					target.add(container);
+				}
+			}
+		});
+		
+		final AddFolderDialog addFolder = new AddFolderDialog("addFolder") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target) {
+				super.onSubmit(target);
+				PrivateMessageFolderDao fDao = getBean(PrivateMessageFolderDao.class);
+				fDao.addPrivateMessageFolder(getModelObject(), getUserId());
+				foldersModel.setObject(fDao.get(0, Integer.MAX_VALUE));
+				updateMoveModel();
+				target.add(folders, moveDropDown);
+			}
+		};
+		add(addFolder);
+		add(new WebMarkupContainer("new").add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				newMessage.reset(true).open(target);
+			}
+		}).add(new JQueryBehavior(".email.new", "button")));
+		folders.add(inbox.add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				selectFolder(inbox, INBOX_FOLDER_ID, target);
+			}
+		}));
+		folders.add(sent.add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				selectFolder(sent, SENT_FOLDER_ID, target);
+			}
+		}));
+		folders.add(trash.add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				selectFolder(trash, TRASH_FOLDER_ID, target);
+			}
+		}));
+		folders.add(new WebMarkupContainer("newdir").add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				addFolder.open(target);
+			}
+		}).add(new JQueryBehavior(".email.newdir", "button")));
+		add(folders.add(new ListView<PrivateMessageFolder>("folder", foldersModel) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(final ListItem<PrivateMessageFolder> item) {
+				item.add(new Label("name", item.getModelObject().getFolderName()));
+				item.add(new WebMarkupContainer("delete").add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						PrivateMessageFolderDao fDao = getBean(PrivateMessageFolderDao.class);
+						fDao.delete(item.getModelObject(), getUserId());
+						foldersModel.setObject(fDao.get(0, Integer.MAX_VALUE));
+						updateMoveModel();
+						target.add(folders, moveDropDown);
+					}
+					
+					@Override
+					protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
+						super.updateAjaxAttributes(attributes);
+						attributes.getAjaxCallListeners().add(new ConfirmAjaxCallListener(Application.getString(713)));
+					}
+				}));
+				item.add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						selectFolder(item, item.getModelObject().getPrivateMessageFolderId(), target);
+					}
+				});
+				setFolderClass(item);
+			}
+		}).setOutputMarkupId(true));
+		
+		SearchableDataProvider<PrivateMessage> sdp = new SearchableDataProvider<PrivateMessage>(PrivateMessagesDao.class) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected PrivateMessagesDao getDao() {
+				return (PrivateMessagesDao)super.getDao();
+			}
+			
+			@Override
+			public Iterator<? extends PrivateMessage> iterator(long first, long count) {
+				allMessages.clear();
+				readMessages.clear();
+				unreadMessages.clear();
+				String sort = getSort() == null ? "" : "m." + getSort().getProperty();
+				boolean isAsc = getSort() == null ? true : getSort().isAscending();
+				return getDao().get(getUserId(), selectedFolderModel.getObject(), search, sort, isAsc, (int)first, (int)count).iterator();
+			}
+			
+			@Override
+			public long size() {
+				return getDao().count(getUserId(), selectedFolderModel.getObject(), search);
+			}
+		};
+		final SearchableDataView<PrivateMessage> dv = new SearchableDataView<PrivateMessage>("messages", sdp) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(Item<PrivateMessage> item) {
+				PrivateMessage m = item.getModelObject();
+				final long id = m.getId();
+				allMessages.add(id);
+				if (m.getIsRead()) {
+					readMessages.add(id);
+				} else {
+					unreadMessages.add(id);
+				}
+				item.add(new Label("id", id));
+				item.add(new Label("from", getDisplayName(m.getFrom())));
+				item.add(new Label("subject", m.getSubject()));
+				item.add(new Label("send", getDateFormat().format(m.getInserted())));
+				item.add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						long selected = id;
+						if (selectedMessages.contains(id)) {
+							selectedMessages.remove(id);
+							selected = selectedMessages.isEmpty() ? -1 : selectedMessages.iterator().next();
+						} else {
+							selectedMessages.add(id);
+						}
+						selectMessage(selected, target);
+						target.add(container);
+					}
+				});
+				StringBuilder cssClass = new StringBuilder(Boolean.FALSE.equals(m.getIsRead()) ? "unread" : "");
+				if (selectedMessages.contains(id)) {
+					if (cssClass.length() > 0) {
+						cssClass.append(" ");
+					}
+					cssClass.append("ui-state-active");
+				}
+				item.add(AttributeModifier.replace("class", cssClass.toString()));
+			}
+		};
+		PagedEntityListPanel navigator = new PagedEntityListPanel("navigator", dv) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				emptySelection(target);
+				target.add(container);
+			}
+		};
+		dataContainer = new DataViewContainer<PrivateMessage>(container, dv, navigator);
+		dataContainer.addLink(new OmOrderByBorder<PrivateMessage>("orderById", "id", dataContainer))
+			.addLink(new OmOrderByBorder<PrivateMessage>("orderByFrom", "from.lastname", dataContainer))
+			.addLink(new OmOrderByBorder<PrivateMessage>("orderBySubject", "subject", dataContainer))
+			.addLink(new OmOrderByBorder<PrivateMessage>("orderBySend", "inserted", dataContainer));
+		add(dataContainer.getLinks());
+		add(navigator);
+		
+		add(unread.setOutputMarkupId(true));
+		
+		add(buttons.setOutputMarkupId(true));
+		buttons.add(toInboxBtn.add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+			
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				getBean(PrivateMessagesDao.class).moveMailsToFolder(selectedMessages, INBOX_FOLDER_ID);
+				selectFolder(selectedFolder, selectedFolderModel.getObject(), target);
+			}
+		}));
+		buttons.add(deleteBtn.add(new AjaxEventBehavior("click") {
+				private static final long serialVersionUID = 1L;
+	
+				@Override
+				protected void onEvent(AjaxRequestTarget target) {
+					if (TRASH_FOLDER_ID == selectedFolderModel.getObject()) {
+						getBean(PrivateMessagesDao.class).delete(selectedMessages);
+					} else {
+						getBean(PrivateMessagesDao.class).moveMailsToFolder(selectedMessages, TRASH_FOLDER_ID);
+					}
+					emptySelection(target);
+					target.add(container);
+				}
+			}));
+		buttons.add(readBtn.add(new AjaxEventBehavior("click") {
+				private static final long serialVersionUID = 1L;
+				
+				@Override
+				protected void onEvent(AjaxRequestTarget target) {
+					getBean(PrivateMessagesDao.class).updateReadStatus(selectedMessages, true);
+					emptySelection(target);
+					target.add(container, unread);
+				}
+			}));
+		buttons.add(unreadBtn.add(new AjaxEventBehavior("click") {
+				private static final long serialVersionUID = 1L;
+				
+				@Override
+				protected void onEvent(AjaxRequestTarget target) {
+					getBean(PrivateMessagesDao.class).updateReadStatus(selectedMessages, false);
+					emptySelection(target);
+					target.add(container);
+				}
+			}));
+		buttons.add(selectDropDown.setOutputMarkupId(true).add(new OnChangeAjaxBehavior() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onUpdate(AjaxRequestTarget target) {
+				switch (selectDropDown.getModelObject()) {
+					case SELECT_CHOOSE:
+						break;
+					case SELECT_ALL:
+						selectedMessages.clear();
+						selectedMessages.addAll(allMessages);
+						break;
+					case SELECT_NONE:
+						selectedMessages.clear();
+						break;
+					case SELECT_UNREAD:
+						selectedMessages.clear();
+						selectedMessages.addAll(unreadMessages);
+						break;
+					case SELECT_READ:
+						selectedMessages.clear();
+						selectedMessages.addAll(readMessages);
+						break;
+				}
+				target.add(container);
+			}
+		}));
+		buttons.add(moveDropDown.setOutputMarkupId(true).add(new OnChangeAjaxBehavior() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onUpdate(AjaxRequestTarget target) {
+				long folderId = moveDropDown.getModelObject().getPrivateMessageFolderId();
+				if (folderId != MOVE_CHOOSE) {
+					getBean(PrivateMessagesDao.class).moveMailsToFolder(selectedMessages, folderId);
+				}
+				selectFolder(selectedFolder, selectedFolderModel.getObject(), target);
+			}
+		}));
+		
+		selectMessage(-1, null);
+		add(container.add(dv).setOutputMarkupId(true));
+		//TODO add valid autoupdate add(new AjaxSelfUpdatingTimerBehavior(seconds(15)));
+		add(selectedMessage.add(roomContainer.setVisible(false)).setOutputMarkupId(true));
+		
+		IDataProvider<UserContact> dp = new IDataProvider<UserContact>() {
+			private static final long serialVersionUID = 1L;
+
+			public void detach() {
+			}
+
+			public Iterator<? extends UserContact> iterator(long first, long count) {
+				return getBean(UserContactsDao.class).get(getUserId(), (int)first, (int)count).iterator();
+			}
+
+			public long size() {
+				return getBean(UserContactsDao.class).count(getUserId());
+			}
+
+			public IModel<UserContact> model(UserContact object) {
+				return Model.of(object);
+			}
+		};
+		final UserInfoDialog d = new UserInfoDialog("infoDialog", newMessage);
+		final DataView<UserContact> dw = new DataView<UserContact>("users", dp) {
+			private static final long serialVersionUID = 1L;
+
+			private String getName(UserContact uc) {
+				return uc.getOwner().getFirstname() + " " + uc.getOwner().getLastname(); //FIXME salutation
+			}
+			
+			@Override
+			protected void populateItem(Item<UserContact> item) {
+				UserContact uc = item.getModelObject();
+				final long contactId = uc.getUserContactId();
+				final long userId = uc.getOwner().getUser_id();
+				if (uc.isPending()) {
+					item.add(AttributeModifier.append("class", "unread"));
+				}
+				item.add(new Label("name", getName(uc)));	
+				item.add(new WebMarkupContainer("accept").add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						ContactsHelper.acceptUserContact(contactId);
+						updateContacts(target);
+					}
+				}).setVisible(uc.isPending()));
+				item.add(new WebMarkupContainer("decline").add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						getBean(UserContactsDao.class).deleteUserContact(contactId);
+						updateContacts(target);
+					}
+				}).setVisible(uc.isPending()));
+				item.add(new WebMarkupContainer("view").add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						d.open(target, userId);
+					}
+				}));
+				item.add(new WebMarkupContainer("message").add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						newMessage.reset(true).open(target, userId);
+					}
+				}).setVisible(!uc.isPending()));
+				item.add(new WebMarkupContainer("delete").add(new AjaxEventBehavior("click") {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onEvent(AjaxRequestTarget target) {
+						getBean(UserContactsDao.class).deleteUserContact(contactId);
+						updateContacts(target);
+					}
+				}).setVisible(!uc.isPending()));
+			}
+		};
+		updateContacts(null);
+		add(d, contacts.add(dw, pendingContacts, allContacts).setOutputMarkupId(true));//TODO update
+		
+		//hack to add FixedHeaderTable after Tabs.
+		add(new AbstractDefaultAjaxBehavior() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void respond(AjaxRequestTarget target) {
+				selectFolder(inbox, INBOX_FOLDER_ID, target);
+				selectMessage(-1, target);
+			}
+			
+			@Override
+			public void renderHead(Component component, IHeaderResponse response) {
+				super.renderHead(component, response);
+				response.render(OnDomReadyHeaderItem.forScript(getCallbackScript()));
+			}
+		});
+	}
+
+	@Override
+	protected void onDetach() {
+		foldersModel.detach();
+		selectedFolderModel.detach();
+		super.onDetach();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/ProfileForm.html b/src/web/java/org/apache/openmeetings/web/user/profile/ProfileForm.html
new file mode 100644
index 0000000..f08dc8e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/ProfileForm.html
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div wicket:id="buttons"></div>
+	<table style="width: 100%; height: 100%">
+		<tr>
+			<td rowspan="2">
+				<fieldset class="ui-widget-content">
+					<legend class="ui-widget-header">
+						<wicket:message key="143" />
+					</legend>
+					<form wicket:id="general"></form>
+				</fieldset>
+			</td>
+			<td>
+				<div wicket:id="img"></div>
+			</td>
+		</tr>
+		<tr>
+			<td>
+				<fieldset class="ui-widget-content">
+					<legend class="ui-widget-header">
+						<wicket:message key="1159" />
+					</legend>
+					<form wicket:id="comunity"></form>
+				</fieldset>
+			</td>
+		</tr>
+	</table>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/ProfileForm.java b/src/web/java/org/apache/openmeetings/web/user/profile/ProfileForm.java
new file mode 100644
index 0000000..702cefa
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/ProfileForm.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.common.ComunityUserForm;
+import org.apache.openmeetings.web.common.FormSaveRefreshPanel;
+import org.apache.openmeetings.web.common.UploadableProfileImagePanel;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
+import org.apache.wicket.markup.html.panel.PanelMarkupSourcingStrategy;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.util.time.Duration;
+
+public class ProfileForm extends Form<User> {
+	private static final long serialVersionUID = 1L;
+	private final UserForm userForm;
+
+	public ProfileForm(String id) {
+		super(id, new CompoundPropertyModel<User>(getBean(UserDao.class).get(getUserId())));
+		
+		add(new FormSaveRefreshPanel<User>("buttons", this) {
+			private static final long serialVersionUID = 6578425915881674309L;
+
+			@Override
+			protected void onSaveSubmit(AjaxRequestTarget target, Form<?> form) {
+				User u = getModelObject();
+				try {
+					u = getBean(UserDao.class).update(u, userForm.getPasswordField().getConvertedInput(), getUserId());
+				} catch (Exception e) {
+					// FIXME update feedback with the error details
+				}
+				setModelObject(u);
+				target.add(ProfileForm.this);
+			}
+
+			@Override
+			protected void onSaveError(AjaxRequestTarget target, Form<?> form) {
+				// FIXME update feedback with the error details
+			}
+
+			@Override
+			protected void onRefreshSubmit(AjaxRequestTarget target, Form<?> form) {
+				User user = getModelObject();
+				if (user.getUser_id() != null) {
+					user = getBean(UserDao.class).get(user.getUser_id());
+				} else {
+					user = new User();
+				}
+				setModelObject(user);
+				target.add(ProfileForm.this);
+			}
+
+			@Override
+			protected void onRefreshError(AjaxRequestTarget target, Form<?> form) {
+				// FIXME update feedback with the error details
+			}
+		});
+		add(userForm = new UserForm("general", getModel()));
+		add(new UploadableProfileImagePanel("img", getUserId()));
+		add(new ComunityUserForm("comunity", getModel()));
+		
+		// attach an ajax validation behavior to all form component's keydown
+		// event and throttle it down to once per second
+		add(new AjaxFormValidatingBehavior("keydown", Duration.ONE_SECOND));
+	}
+	
+	@Override
+	protected IMarkupSourcingStrategy newMarkupSourcingStrategy() {
+		return new PanelMarkupSourcingStrategy(false);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/ProfilePanel.html b/src/web/java/org/apache/openmeetings/web/user/profile/ProfilePanel.html
new file mode 100644
index 0000000..3335891
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/ProfilePanel.html
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form wicket:id="form" class="adminForm"/>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/ProfilePanel.java b/src/web/java/org/apache/openmeetings/web/user/profile/ProfilePanel.java
new file mode 100644
index 0000000..8eccfa3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/ProfilePanel.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import org.apache.openmeetings.web.common.UserPanel;
+
+public class ProfilePanel extends UserPanel {
+	private static final long serialVersionUID = -5837090230776586182L;
+
+	public ProfilePanel(String id) {
+		super(id);
+		setOutputMarkupId(true);
+		
+		add(new ProfileForm("form"));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/SettingsPanel.html b/src/web/java/org/apache/openmeetings/web/user/profile/SettingsPanel.html
new file mode 100644
index 0000000..c02100a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/SettingsPanel.html
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<div wicket:id="tabs"></div>
+	</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/SettingsPanel.java b/src/web/java/org/apache/openmeetings/web/user/profile/SettingsPanel.java
new file mode 100644
index 0000000..1c1d51e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/SettingsPanel.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.markup.html.tabs.AbstractTab;
+import org.apache.wicket.extensions.markup.html.tabs.ITab;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.widget.tabs.AjaxTab;
+import com.googlecode.wicket.jquery.ui.widget.tabs.TabbedPanel;
+
+public class SettingsPanel extends UserPanel {
+	private static final long serialVersionUID = 1L;
+	public static final int PROFILE_TAB_ID = 0;
+	public static final int MESSAGES_TAB_ID = 1;
+	public static final int EDIT_PROFILE_TAB_ID = 2;
+	public static final int SEARCH_TAB_ID = 3;
+	public static final int DASHBOARD_TAB_ID = 4;
+
+	public SettingsPanel(String id, int active) {
+		super(id);
+		
+		List<ITab> tabs = new ArrayList<ITab>();
+		tabs.add(new AjaxTab(Model.of(Application.getString(1170))) {
+			private static final long serialVersionUID = 1L;
+			UserProfilePanel profilePanel = null;
+
+			@Override
+			protected WebMarkupContainer getLazyPanel(String panelId) {
+				if (profilePanel == null) {
+					profilePanel = new UserProfilePanel(panelId, getUserId());
+					profilePanel.setOutputMarkupId(true);
+				}
+				return profilePanel;
+			}
+			
+			@Override
+			public boolean load(AjaxRequestTarget target) {
+				if (profilePanel != null) {
+					profilePanel.setDefaultModelObject(getBean(UserDao.class).get(getUserId()));
+					target.add(profilePanel);
+				}
+				return super.load(target);
+			}
+		});
+		tabs.add(new AjaxTab(Model.of(Application.getString(1188))) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected WebMarkupContainer getLazyPanel(String panelId) {
+				return new MessagesContactsPanel(panelId);
+			}
+		});
+		tabs.add(new AbstractTab(Model.of(Application.getString(1171))) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public WebMarkupContainer getPanel(String panelId) {
+				return new ProfilePanel(panelId);
+			}
+		});
+		tabs.add(new AbstractTab(Model.of(Application.getString(1172))) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public WebMarkupContainer getPanel(String panelId) {
+				return new UserSearchPanel(panelId);
+			}
+		});
+		tabs.add(new AbstractTab(Model.of(Application.getString(1548))) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public WebMarkupContainer getPanel(String panelId) {
+				return new WidgetsPanel(panelId);
+			}
+		});
+		add(new TabbedPanel("tabs", tabs, new Options("active", active)).setActiveTab(active));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/UserForm.html b/src/web/java/org/apache/openmeetings/web/user/profile/UserForm.html
new file mode 100644
index 0000000..9d9b117
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserForm.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend>
+	<div class="formelement">
+		<label><wicket:message key="134" /></label><input type="password" wicket:id="confirmPassword" />
+	</div>
+</wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/UserForm.java b/src/web/java/org/apache/openmeetings/web/user/profile/UserForm.java
new file mode 100644
index 0000000..a550e27
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserForm.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.GeneralUserForm;
+import org.apache.wicket.markup.html.form.PasswordTextField;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+public class UserForm extends GeneralUserForm {
+	private static final long serialVersionUID = 1305752513494262480L;
+	private final PasswordTextField confirmPassword;
+	
+	public UserForm(String id, IModel<User> model) {
+		super(id, model, false);
+		add(confirmPassword = new PasswordTextField("confirmPassword", new Model<String>()));
+		confirmPassword.setRequired(false);
+	}
+	
+	@Override
+	protected void onValidate() {
+		String pass = getPasswordField().getConvertedInput();
+		if (pass != null && !pass.isEmpty() && !pass.equals(confirmPassword.getConvertedInput())) {
+			error(Application.getString(232));
+		}
+		super.onValidate();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.html b/src/web/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.html
new file mode 100644
index 0000000..42cd4b3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+<wicket:panel>

+	<div wicket:id="container">

+		<div wicket:id="body"></div>

+	</div>

+</wicket:panel>

+</html>

diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.java b/src/web/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.java
new file mode 100644
index 0000000..2eb0257
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserInfoDialog.java
@@ -0,0 +1,82 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.profile;

+

+import static org.apache.openmeetings.web.app.Application.getBean;

+import static org.apache.openmeetings.web.app.WebSession.getUserId;

+

+import java.util.Arrays;

+import java.util.List;

+

+import org.apache.openmeetings.db.dao.user.UserContactsDao;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.openmeetings.web.util.ContactsHelper;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+

+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;

+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;

+

+public class UserInfoDialog extends AbstractDialog<String> {

+	private static final long serialVersionUID = 6393565468567393270L;

+	private WebMarkupContainer container = new WebMarkupContainer("container");

+	private DialogButton cancel = new DialogButton("cancel", Application.getString(61));

+	private DialogButton message = new DialogButton("message", Application.getString(1253));

+	private DialogButton contacts = new DialogButton("contacts", Application.getString(1186));

+	private MessageDialog newMessage;

+	private long userId;

+	

+	public UserInfoDialog(String id, MessageDialog newMessage) {

+		super(id, Application.getString(1235));

+		add(container.add(new WebMarkupContainer("body")).setOutputMarkupId(true));

+		this.newMessage = newMessage;

+	}

+

+	public void open(AjaxRequestTarget target, long userId) {

+		this.userId = userId;

+		contacts.setVisible(userId != getUserId() && getBean(UserContactsDao.class).get(userId, getUserId()) == null, target);

+		message.setVisible(userId != getUserId(), target);

+		container.replace(new UserProfilePanel("body", userId));

+		target.add(container);

+		open(target);

+	}

+	

+	public WebMarkupContainer getContainer() {

+		return container;

+	}

+	

+	@Override

+	public int getWidth() {

+		return 600;

+	}

+	

+	@Override

+	protected List<DialogButton> getButtons() {

+		return Arrays.asList(contacts, message, cancel);

+	}

+	

+	public void onClose(IPartialPageRequestHandler target, DialogButton button) {

+		if (message.equals(button)) {

+			newMessage.reset(false).open(target, userId);

+		} else if (contacts.equals(button)) {

+			ContactsHelper.addUserToContactList(userId);

+		}

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.html b/src/web/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.html
new file mode 100644
index 0000000..c70afe5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.html
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+<wicket:panel>

+	<div class="user info panel">

+		<table>

+			<tr>

+				<td><div wicket:id="img"></div></td>

+				<td>

+					<table>

+						<tr>

+							<td><wicket:message key="1164"/></td><td><span wicket:id="firstname"></span>&nbsp;<span wicket:id="lastname"></span></td>

+						</tr>

+						<tr>

+							<td><wicket:message key="1165"/></td><td><span wicket:id="timeZoneId"></span></td>

+						</tr>

+						<tr>

+							<td><wicket:message key="1296"/></td><td><span wicket:id="regdate"></span></td>

+						</tr>

+					</table>

+				</td>

+			</tr>

+		</table>

+		<div>

+			<fieldset class="ui-widget-content">

+				<legend class="ui-widget-header"><wicket:message key="1166"/></legend>

+				<table>

+					<tr>

+						<td><wicket:message key="1162"/></td>

+						<td><textarea wicket:id="userOffers"></textarea></td>

+					</tr>

+					<tr>

+						<td><wicket:message key="1163"/></td>

+						<td><textarea wicket:id="userSearchs"></textarea></td>

+					</tr>

+				</table>

+			</fieldset> 

+		</div>

+		<div>

+			<fieldset class="ui-widget-content">

+				<legend class="ui-widget-header"><wicket:message key="1167"/></legend>

+				<table wicket:id="address">

+					<tr>

+						<td><wicket:message key="607" /></td>

+						<td><span wicket:id="adresses.phone"></span></td>

+					</tr>

+					<tr>

+						<td><wicket:message key="139" /></td>

+						<td><span wicket:id="adresses.street"></span>&nbsp;<span wicket:id="adresses.additionalname"></span></td>

+					</tr>

+					<tr>

+						<td><wicket:message key="140" /></td>

+						<td><span wicket:id="adresses.zip"></span>&nbsp;<span wicket:id="adresses.town"></span></td>

+					</tr>

+					<tr>

+						<td><wicket:message key="141" /></td>

+						<td><span wicket:id="adresses.states.name"></span></td>

+					</tr>

+					<tr>

+						<td><wicket:message key="142" /></td>

+						<td><span wicket:id="adresses.comment"></span></td>

+					</tr>

+				</table>

+				<div wicket:id="addressDenied"></div>

+			</fieldset> 

+		</div>

+	</div>

+</wicket:panel>

+</html>

diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.java b/src/web/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.java
new file mode 100644
index 0000000..5850bf9
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserProfilePanel.java
@@ -0,0 +1,72 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.profile;

+

+import static org.apache.openmeetings.web.app.Application.getBean;

+import static org.apache.openmeetings.web.app.WebSession.getUserId;

+

+import org.apache.openmeetings.db.dao.user.UserContactsDao;

+import org.apache.openmeetings.db.dao.user.UserDao;

+import org.apache.openmeetings.db.entity.user.User;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.openmeetings.web.common.ProfileImagePanel;

+import org.apache.openmeetings.web.common.UserPanel;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.html.form.TextArea;

+import org.apache.wicket.model.CompoundPropertyModel;

+

+public class UserProfilePanel extends UserPanel {

+	private static final long serialVersionUID = 1L;

+	private final WebMarkupContainer address = new WebMarkupContainer("address");

+	private final Label addressDenied = new Label("addressDenied", "");

+

+	public UserProfilePanel(String id, long userId) {

+		this(id, new CompoundPropertyModel<User>(getBean(UserDao.class).get(userId)));

+	}

+	

+	public UserProfilePanel(String id, CompoundPropertyModel<User> model) {

+		super(id, model);

+

+		add(new ProfileImagePanel("img", model.getObject().getUser_id()));

+		add(new Label("firstname"));

+		add(new Label("lastname"));

+		add(new Label("timeZoneId"));

+		add(new Label("regdate"));

+		add(new TextArea<String>("userOffers").setEnabled(false));

+		add(new TextArea<String>("userSearchs").setEnabled(false));

+		if (getUserId() == model.getObject().getUser_id() || model.getObject().getShowContactData()

+				|| (model.getObject().getShowContactDataToContacts() && getBean(UserContactsDao.class).isContact(model.getObject().getUser_id(), getUserId())))

+		{

+			addressDenied.setVisible(false);

+			address.add(new Label("adresses.phone"));

+			address.add(new Label("adresses.street"));

+			address.add(new Label("adresses.additionalname"));

+			address.add(new Label("adresses.zip"));

+			address.add(new Label("adresses.town"));

+			address.add(new Label("adresses.states.name"));

+			address.add(new Label("adresses.comment"));

+		} else {

+			address.setVisible(false);

+			addressDenied.setDefaultModelObject(Application.getString(Boolean.TRUE.equals(model.getObject().getShowContactDataToContacts()) ? 1269 : 1268));

+		}

+		add(address.setDefaultModel(model));

+		add(addressDenied);

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html b/src/web/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html
new file mode 100644
index 0000000..c3b2d51
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.html
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+<wicket:panel>

+	<!--  FIXME move styles into CSS -->

+	<table style="width: 100%; height: 100%;">

+		<tr>

+			<td valign="top" style="width: 200px;">

+				<form wicket:id="form">

+					<div><wicket:message key="1179"/></div>

+					<input type="text" wicket:id="text"/><br/>

+					<div><wicket:message key="1177"/></div>

+					<input type="text" wicket:id="offer"/><br/>

+					<div><wicket:message key="1178"/></div>

+					<input type="text" wicket:id="search"/><br/>

+					<br/>

+					<input type="submit" wicket:message="value:1176"/>

+				</form>

+			</td>

+			<td valign="top">

+				<div wicket:id="container" style="height: 100%; min-height: 400px;">

+					<div><strong><wicket:message key="1184"/></strong>&nbsp;&nbsp;&nbsp;<span wicket:id="navigator"></span></div>

+					<table id="searchUsersTable" style="width: 100%;">

+						<thead>

+							<tr>

+								<th><wicket:message key="1180"/></th>

+								<th><wicket:message key="1181"/></th>

+								<th><wicket:message key="1182"/></th>

+								<th><wicket:message key="1183"/></th>

+								<th><wicket:message key="1185"/></th>

+							</tr>

+						</thead>

+						<tbody>

+							<tr wicket:id="users">

+								<td><span class="om-icon" wicket:id="status"></span><span wicket:id="name"></span></td>

+								<td wicket:id="tz"></td>

+								<td wicket:id="offer"></td>

+								<td wicket:id="search"></td>

+								<td style="white-space: nowrap;"><div wicket:id="add" class="add om-icon clickable" wicket:message="title:1186"

+									></div><div wicket:id="message" class="new-email om-icon clickable" wicket:message="title:1253"

+									></div><div wicket:id="view" class="user om-icon clickable" wicket:message="title:1236"></div></td>

+							</tr>

+						</tbody>

+					</table>

+				</div>

+			</td>

+		</tr>

+	</table>

+	<div wicket:id="infoDialog"></div>

+	<div wicket:id="newMessage"></div>

+</wicket:panel>

+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java b/src/web/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java
new file mode 100644
index 0000000..0da698d
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/UserSearchPanel.java
@@ -0,0 +1,182 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.profile;

+

+import static org.apache.openmeetings.web.app.Application.getBean;

+import static org.apache.openmeetings.web.app.Application.isUserOnline;

+import static org.apache.openmeetings.web.app.WebSession.getUserId;

+

+import java.util.ArrayList;

+import java.util.Arrays;

+import java.util.Iterator;

+import java.util.List;

+

+import org.apache.openmeetings.db.dao.user.UserContactsDao;

+import org.apache.openmeetings.db.dao.user.UserDao;

+import org.apache.openmeetings.db.entity.user.PrivateMessage;

+import org.apache.openmeetings.db.entity.user.User;

+import org.apache.openmeetings.db.util.TimezoneUtil;

+import org.apache.openmeetings.web.common.PagingNavigatorPanel;

+import org.apache.openmeetings.web.common.UserPanel;

+import org.apache.openmeetings.web.util.ContactsHelper;

+import org.apache.wicket.AttributeModifier;

+import org.apache.wicket.ajax.AjaxEventBehavior;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;

+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.html.form.Form;

+import org.apache.wicket.markup.html.form.TextField;

+import org.apache.wicket.markup.repeater.Item;

+import org.apache.wicket.markup.repeater.data.DataView;

+import org.apache.wicket.markup.repeater.data.IDataProvider;

+import org.apache.wicket.model.CompoundPropertyModel;

+import org.apache.wicket.model.IModel;

+import org.apache.wicket.model.PropertyModel;

+

+import com.googlecode.wicket.jquery.core.Options;

+import com.googlecode.wicket.jquery.ui.plugins.fixedheadertable.FixedHeaderTableBehavior;

+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;

+

+public class UserSearchPanel extends UserPanel {

+	private static final long serialVersionUID = 1L;

+	private final static List<Integer> itemsPerPage = Arrays.asList(10, 25, 50, 75, 100, 200, 500, 1000, 2500, 5000);

+	private String text;

+	private String search;

+	private String offer;

+	private String orderBy = "u.firstname";

+	private boolean asc = true;

+	private boolean searched = false;

+	private final MessageDialog newMessage;

+	private final WebMarkupContainer container = new WebMarkupContainer("container");

+	private final FixedHeaderTableBehavior fixedHeader = new FixedHeaderTableBehavior("#searchUsersTable", new Options("height", 400));

+

+	private void refresh(IPartialPageRequestHandler target) {

+		target.add(container.add(fixedHeader));

+	}

+	

+	public UserSearchPanel(String id) {

+		super(id);

+		

+		add(new Form<Void>("form") {

+			private static final long serialVersionUID = 1L;

+			{

+				add(new TextField<String>("text", new PropertyModel<String>(UserSearchPanel.this, "text")));

+				add(new TextField<String>("offer", new PropertyModel<String>(UserSearchPanel.this, "offer")));

+				add(new TextField<String>("search", new PropertyModel<String>(UserSearchPanel.this, "search")));

+				add(new AjaxFormSubmitBehavior(this, "submit") {

+					private static final long serialVersionUID = 1L;

+

+					@Override

+					protected void onSubmit(AjaxRequestTarget target) {

+						searched = true;

+						refresh(target);

+					}

+				});

+			}

+		});

+		add(newMessage = new MessageDialog("newMessage", new CompoundPropertyModel<PrivateMessage>(new PrivateMessage())) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			public void onClose(IPartialPageRequestHandler target, DialogButton button) {

+				if (send.equals(button)) {

+					refresh(target);

+				}

+			}

+		});

+		IDataProvider<User> dp = new IDataProvider<User>() {

+			private static final long serialVersionUID = 1L;

+

+			public void detach() {

+			}

+

+			public Iterator<? extends User> iterator(long first, long count) {

+				return searched ? getBean(UserDao.class).searchUserProfile(getUserId(), text, offer, search, orderBy, (int)first, (int)count, asc).iterator()

+						: new ArrayList<User>().iterator();

+			}

+

+			public long size() {

+				return searched ? getBean(UserDao.class).searchCountUserProfile(getUserId(), text, offer, search) : 0;

+			}

+

+			public IModel<User> model(User object) {

+				return new CompoundPropertyModel<User>(object);

+			}

+			

+		};

+		final UserInfoDialog d = new UserInfoDialog("infoDialog", newMessage);

+		final DataView<User> dv = new DataView<User>("users", dp) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void populateItem(Item<User> item) {

+				final UserContactsDao contactsDao = getBean(UserContactsDao.class);

+				User u = item.getModelObject();

+				final long userId = u.getUser_id();

+				item.add(new WebMarkupContainer("status").add(AttributeModifier.append("class", isUserOnline(userId) ? "online" : "offline")));

+				item.add(new Label("name", getName(u)));

+				item.add(new Label("tz", getBean(TimezoneUtil.class).getTimeZone(u).getID()));

+				item.add(new Label("offer", u.getUserOffers()));

+				item.add(new Label("search", u.getUserSearchs()));

+				item.add(new WebMarkupContainer("view").add(new AjaxEventBehavior("click") {

+					private static final long serialVersionUID = 1L;

+

+					@Override

+					protected void onEvent(AjaxRequestTarget target) {

+						d.open(target, userId);

+					}

+				}));

+				item.add(new WebMarkupContainer("add").add(new AjaxEventBehavior("click") {

+					private static final long serialVersionUID = 1L;

+

+					@Override

+					protected void onEvent(AjaxRequestTarget target) {

+						ContactsHelper.addUserToContactList(userId);

+						refresh(target);

+					}

+				}).setVisible(userId != getUserId() && !contactsDao.isContact(userId, getUserId())));

+				item.add(new WebMarkupContainer("message").add(new AjaxEventBehavior("click") {

+					private static final long serialVersionUID = 1L;

+

+					@Override

+					protected void onEvent(AjaxRequestTarget target) {

+						newMessage.reset(true).open(target, userId);

+					}

+				})).setVisible(userId != getUserId());

+				//item.add(new TooltipBehavior(new Options("content", "TODO:: Picture will be displayed"))); //FIXME 

+			}

+		};

+

+		add(d, container.add(dv, new PagingNavigatorPanel("navigator", dv, itemsPerPage, 100) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void onEvent(AjaxRequestTarget target) {

+				refresh(target);

+			}

+		}).setOutputMarkupId(true));

+	}

+	

+	private String getName(User u) {

+		return "" + u.getFirstname() + " " + u.getLastname() + " [" + u.getLogin() + "]"; //FIXME salutation

+	}

+

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.html b/src/web/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.html
new file mode 100644
index 0000000..eeabc06
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.html
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+	<wicket:panel>
+		<table class="widget">
+			<tr wicket:id="widgets">
+				<td wicket:id="name"></td>
+				<td wicket:id="description"></td>
+				<td><label wicket:for="display"><wicket:message key="1590"/></label>&nbsp;&nbsp;<input type="checkbox" wicket:id="display"/></td>
+			</tr>
+		</table>
+	</wicket:panel>
+</html>
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java b/src/web/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java
new file mode 100644
index 0000000..d368372
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/profile/WidgetsPanel.java
@@ -0,0 +1,104 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.profile;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_MYROOMS_KEY;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DASHBOARD_SHOW_RSS_KEY;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.Application.getDashboardContext;
+import static org.apache.openmeetings.web.app.WebSession.getDashboard;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.web.user.dashboard.MyRoomsWidget;
+import org.apache.openmeetings.web.user.dashboard.RssWidget;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.Model;
+
+import ro.fortsoft.wicket.dashboard.Dashboard;
+import ro.fortsoft.wicket.dashboard.Widget;
+import ro.fortsoft.wicket.dashboard.WidgetDescriptor;
+import ro.fortsoft.wicket.dashboard.web.DashboardContext;
+
+public class WidgetsPanel extends Panel {
+	private static final long serialVersionUID = 1L;
+
+	private Widget isDisplayed(WidgetDescriptor wd) {
+		for (Widget w : getDashboard().getWidgets()) {
+			if (w.getClass().getName().equals(wd.getWidgetClassName())) {
+				return w;
+			}
+		}
+		return null;
+	}
+	public WidgetsPanel(String id) {
+		super(id);
+		
+		ConfigurationDao cfgDao = getBean(ConfigurationDao.class);
+		boolean confShowMyRooms = 1 == cfgDao.getConfValue(CONFIG_DASHBOARD_SHOW_MYROOMS_KEY, Integer.class, "0");
+		boolean confShowRss = 1 == cfgDao.getConfValue(CONFIG_DASHBOARD_SHOW_RSS_KEY, Integer.class, "0");
+		List<WidgetDescriptor> widgets = getDashboardContext().getWidgetRegistry().getWidgetDescriptors();
+		for (Iterator<WidgetDescriptor> i = widgets.iterator(); i.hasNext();) {
+			WidgetDescriptor wd = i.next();
+			if (!confShowMyRooms && MyRoomsWidget.class.getCanonicalName().equals(wd.getWidgetClassName())) {
+				i.remove();
+				continue;
+			}
+			if (!confShowRss && RssWidget.class.getCanonicalName().equals(wd.getWidgetClassName())) {
+				i.remove();
+				continue;
+			}
+		}
+		add(new ListView<WidgetDescriptor>("widgets", widgets) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void populateItem(ListItem<WidgetDescriptor> item) {
+				final WidgetDescriptor wd = item.getModelObject();
+				item.add(new Label("name", wd.getName()));
+				item.add(new Label("description", wd.getDescription()));
+				item.add(new AjaxCheckBox("display", Model.of(isDisplayed(wd) != null)) {
+					private static final long serialVersionUID = 1L;
+
+					@Override
+					protected void onUpdate(AjaxRequestTarget target) {
+						Widget w = isDisplayed(wd);
+						boolean b = getModelObject();
+						DashboardContext dashboardContext = getDashboardContext();
+						Dashboard d = getDashboard();
+						if (w != null && !b) {
+							d.deleteWidget(w.getId());
+						}
+						if (w == null && b) {
+							d.addWidget(dashboardContext.getWidgetFactory().createWidget(wd));
+						}
+						dashboardContext.getDashboardPersister().save(d);
+					}
+				});
+			}
+		});
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/RecordingErrorsDialog.html b/src/web/java/org/apache/openmeetings/web/user/record/RecordingErrorsDialog.html
new file mode 100644
index 0000000..12776d8
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/RecordingErrorsDialog.html
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div wicket:id="container" class="recording dialog errors">
+		<h3 wicket:id="message"></h3>
+		<table style="width: 100%">
+			<tr>
+				<th><wicket:message key="1593"/></th>
+				<th><wicket:message key="1594"/></th>
+			</tr>
+			<tr wicket:id="row">
+				<td wicket:id="exitCode"></td>
+				<td wicket:id="message" class="message"></td>
+			</tr>
+		</table>
+	</div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/RecordingErrorsDialog.java b/src/web/java/org/apache/openmeetings/web/user/record/RecordingErrorsDialog.java
new file mode 100644
index 0000000..b10c50b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/RecordingErrorsDialog.java
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.record;
+
+import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingLogDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecordingLog;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+
+public class RecordingErrorsDialog extends AbstractDialog<FlvRecording> {
+	private static final long serialVersionUID = 1L;
+	private final WebMarkupContainer container = new WebMarkupContainer("container");
+	private final Label message = new Label("message", Model.of((String)null));
+	private final ListView<FlvRecordingLog> logView = new ListView<FlvRecordingLog>("row") {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		protected void populateItem(ListItem<FlvRecordingLog> item) {
+			FlvRecordingLog l = item.getModelObject();
+			item.add(new Label("exitCode", l.getExitValue()));
+			item.add(new Label("message", l.getFullMessage()));
+			if (!"0".equals(l.getExitValue())) {
+				item.add(AttributeModifier.replace("class", "alert"));
+			}
+		}
+	};
+
+	@Override
+	public int getWidth() {
+		return 600;
+	}
+	
+	@Override
+	public boolean isResizable() {
+		return true;
+	}
+
+	@Override
+	public boolean isModal() {
+		return true;
+	}
+
+	public RecordingErrorsDialog(String id, IModel<FlvRecording> model) {
+		super(id, Application.getString(887), model);
+		add(container.add(message.setVisible(false), logView.setVisible(false)).setOutputMarkupId(true));
+	}
+	
+	@Override
+	protected void onOpen(IPartialPageRequestHandler target) {
+		FlvRecording f = getModelObject();
+		List<FlvRecordingLog> logs = getBean(FlvRecordingLogDao.class).getByRecordingId(f.getFlvRecordingId());
+		if (f.getFileHash() == null) {
+			message.setVisible(true);
+			message.setDefaultModelObject(Application.getString(888));
+		} else if (!isRecordingExists(f.getFileHash() + MP4_EXTENSION)) {
+			message.setVisible(true);
+			message.setDefaultModelObject(Application.getString(1595));
+		} else {
+			message.setVisible(false);
+		}
+		if (!logs.isEmpty()) {
+			logView.setVisible(false);
+			logView.setList(logs).setVisible(true);
+		}
+		target.add(container);
+		super.onOpen(target);
+	}
+	
+	@Override
+	public void onClose(IPartialPageRequestHandler target, DialogButton button) {
+	}
+	
+	@Override
+	protected List<DialogButton> getButtons() {
+		return new ArrayList<DialogButton>();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/RecordingItemPanel.html b/src/web/java/org/apache/openmeetings/web/user/record/RecordingItemPanel.html
new file mode 100644
index 0000000..9caedb0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/RecordingItemPanel.html
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:extend><span wicket:id="errors" class="errors"></span></wicket:extend>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/RecordingItemPanel.java b/src/web/java/org/apache/openmeetings/web/user/record/RecordingItemPanel.java
new file mode 100644
index 0000000..d82fd96
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/RecordingItemPanel.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.record;
+
+import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingLogDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecording.Status;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.model.IModel;
+
+public class RecordingItemPanel extends RecordingPanel {
+	private static final long serialVersionUID = 1L;
+
+	public RecordingItemPanel(String id, final IModel<FlvRecording> model, final RecordingsPanel treePanel) {
+		super(id, model, treePanel);
+		FlvRecording r = model.getObject();
+		long errorCount = getBean(FlvRecordingLogDao.class).countErrors(r.getFlvRecordingId());
+		boolean visible = errorCount != 0 || (Status.RECORDING != r.getStatus() && Status.CONVERTING != r.getStatus() && !isRecordingExists(r.getFileHash() + MP4_EXTENSION));
+		drag.add(new WebMarkupContainer("errors").add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				treePanel.errorsDialog.setDefaultModel(model);
+				treePanel.errorsDialog.open(target);
+			}
+		}).setVisible(visible));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/RecordingPanel.html b/src/web/java/org/apache/openmeetings/web/user/record/RecordingPanel.html
new file mode 100644
index 0000000..0436c22
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/RecordingPanel.html
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div wicket:id="drop" class="recording item"><div wicket:id="drag"><wicket:child /><span wicket:id="name" class="name"></span></div></div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/RecordingPanel.java b/src/web/java/org/apache/openmeetings/web/user/record/RecordingPanel.java
new file mode 100644
index 0000000..3524821
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/RecordingPanel.java
@@ -0,0 +1,119 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.record;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.behavior.AttributeAppender;
+import org.apache.wicket.extensions.ajax.markup.html.AjaxEditableLabel;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.interaction.draggable.Draggable;
+import com.googlecode.wicket.jquery.ui.interaction.droppable.Droppable;
+
+public class RecordingPanel extends Panel {
+	private static final long serialVersionUID = 1L;
+	protected final MarkupContainer drop;
+	protected final MarkupContainer drag;
+
+	public RecordingPanel(String id, final IModel<FlvRecording> model, final RecordingsPanel treePanel) {
+		super(id, model);
+		FlvRecording r = model.getObject();
+		drop = r.isFolder() ? new Droppable<FlvRecording>("drop", model) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onConfigure(JQueryBehavior behavior) {
+				super.onConfigure(behavior);
+				behavior.setOption("hoverClass", Options.asString("ui-state-hover"));
+				behavior.setOption("accept", Options.asString(".recorditem"));
+			}
+			
+			@Override
+			public void onDrop(AjaxRequestTarget target, Component component) {
+				Object o = component.getDefaultModelObject();
+				if (o instanceof FlvRecording) {
+					FlvRecording p = (FlvRecording)drop.getDefaultModelObject();
+					FlvRecording f = (FlvRecording)o;
+					long pid = p.getFlvRecordingId();
+					//FIXME parent should not be moved to child !!!!!!!
+					if (pid == f.getFlvRecordingId()) {
+						return;
+					}
+					f.setParentFileExplorerItemId(pid > 0 ? pid : null);
+					f.setOwnerId(p.getOwnerId());
+					f.setRoom_id(p.getRoom_id());
+					f.setOrganization_id((p).getOrganization_id());
+					getBean(FlvRecordingDao.class).update(f);
+				}
+				target.add(treePanel.trees); //FIXME add correct refresh
+			}
+		} : new WebMarkupContainer("drop");
+		if (r.getFlvRecordingId() < 1) {
+			drag = new WebMarkupContainer("drag");
+		} else {
+			Draggable<FlvRecording> d = new Draggable<FlvRecording>("drag", model) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				public void onConfigure(JQueryBehavior behavior) {
+					super.onConfigure(behavior);
+					behavior.setOption("revert", "treeRevert");
+					behavior.setOption("cursor", Options.asString("move"));
+				}
+			};
+			d.setContainment(".file.tree");
+			d.add(AttributeAppender.append("class", "recorditem"));
+			drag = d;
+		}
+		drag.add(r.getFlvRecordingId() < 1 ? new Label("name", r.getFileName()) : new AjaxEditableLabel<String>("name", Model.of(model.getObject().getFileName())) {
+			private static final long serialVersionUID = 1L;
+			
+			@Override
+			protected String getLabelAjaxEvent() {
+				return "dblClick";
+			}
+			
+			@Override
+			protected void onSubmit(AjaxRequestTarget target) {
+				super.onSubmit(target);
+				FlvRecording fi = model.getObject();
+				fi.setFileName(getEditor().getModelObject());
+				getBean(FlvRecordingDao.class).update(fi);
+			}
+			
+			@Override
+			public void onEdit(AjaxRequestTarget target) {
+				super.onEdit(target);
+			}
+		});
+		add(drop.add(drag).setOutputMarkupId(true));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html b/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html
new file mode 100644
index 0000000..ba373f7
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.html
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<script type="text/javascript">
+		function treeRevert(dropped) {
+			$('#tree-anchor').get(0).scrollIntoView();
+			this.parent().parent().get(0).scrollIntoView();
+			return !dropped;
+		}
+	</script>
+	<table class="recording">
+		<tr>
+			<td valign="top" class="files file tree">
+				<div class="icons clear trash-toolbar" wicket:id="trash-toolbar">
+					<span wicket:id="create" class="folder-create om-icon align-left clickable" wicket:message="title:703"></span>
+					<span wicket:id="refresh" class="refresh om-icon align-left clickable" wicket:message="title:704"></span>
+					<span wicket:id="trash" class="trash om-icon align-right clickable"></span>
+					<span style="padding-left: 20px;" wicket:message="title:705"><wicket:message key="1224"/></span>
+					<div class="clear"></div>
+				</div>
+				<div wicket:id="tree-container" class="trees">
+					<div id="tree-anchor" style="height: 2px; width: 2px;"></div>
+					<div wicket:id="tree"></div>
+				</div>
+				<div class="sizes" wicket:id="sizes">
+					<table>
+						<tr>
+							<td><wicket:message key="923"/></td>
+							<td><span wicket:id="homeSize"></span></td>
+						</tr>
+						<tr>
+							<td><wicket:message key="924"/></td>
+							<td><span wicket:id="publicSize"></span></td>
+						</tr>
+					</table>
+				</div>
+				<div wicket:id="info"></div>
+			</td>
+			<td valign="top">
+				<div wicket:id="video"></div>
+			</td>
+		</tr>
+	</table>
+	<div wicket:id="addFolder"></div>
+	<div wicket:id="errors"></div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java b/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
new file mode 100644
index 0000000..7b477e0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
@@ -0,0 +1,362 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.record;
+
+import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.getHumanSize;
+import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.Iterator;
+
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.record.RecordingContainerData;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecording.Status;
+import org.apache.openmeetings.db.entity.user.Organisation;
+import org.apache.openmeetings.db.entity.user.Organisation_Users;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.common.AddFolderDialog;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
+import org.apache.openmeetings.web.common.UserPanel;
+import org.apache.wicket.Component;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
+import org.apache.wicket.extensions.markup.html.repeater.tree.DefaultNestedTree;
+import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
+import org.apache.wicket.extensions.markup.html.repeater.tree.content.Folder;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.repeater.RepeatingView;
+import org.apache.wicket.markup.repeater.ReuseIfModelsEqualStrategy;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.time.Duration;
+
+import com.googlecode.wicket.jquery.core.JQueryBehavior;
+import com.googlecode.wicket.jquery.core.Options;
+import com.googlecode.wicket.jquery.ui.interaction.droppable.Droppable;
+
+public class RecordingsPanel extends UserPanel {
+	private static final long serialVersionUID = 1321258690447136958L;
+	final WebMarkupContainer trees = new WebMarkupContainer("tree-container");
+	private final WebMarkupContainer sizes = new WebMarkupContainer("sizes");
+	private final VideoPlayer video = new VideoPlayer("video");
+	private final VideoInfo info = new VideoInfo("info");
+	private final IModel<FlvRecording> rm = new CompoundPropertyModel<FlvRecording>(new FlvRecording());
+	private final IModel<String> homeSize = Model.of((String)null);
+	private final IModel<String> publicSize = Model.of((String)null);
+	final RecordingErrorsDialog errorsDialog = new RecordingErrorsDialog("errors", Model.of((FlvRecording)null));
+	private RecordingTree selected;
+	
+	public RecordingsPanel(String id) {
+		super(id);
+		rm.getObject().setFlvRecordingId(Long.MIN_VALUE);
+		final AddFolderDialog addFolder = new AddFolderDialog("addFolder", Application.getString(712)) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target) {
+				FlvRecording f = new FlvRecording();
+				f.setFileName(getModelObject());
+				f.setInsertedBy(getUserId());
+				f.setInserted(new Date());
+				f.setFolder(true);
+				f.setIsImage(false);
+				f.setIsPresentation(false);
+				f.setIsRecording(true);
+				FlvRecording p = rm.getObject();
+				long parentId = p.getFlvRecordingId();
+				if (p.isFolder()) {
+					f.setParentFileExplorerItemId(parentId);
+				}
+				f.setOwnerId(p.getOwnerId());
+				f.setOrganization_id(p.getOrganization_id());
+				getBean(FlvRecordingDao.class).update(f);
+				target.add(trees); //FIXME add correct refresh
+			}
+		};
+		add(addFolder);
+		Droppable<FlvRecording> trashToolbar = new Droppable<FlvRecording>("trash-toolbar") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public void onConfigure(JQueryBehavior behavior) {
+				super.onConfigure(behavior);
+				behavior.setOption("hoverClass", Options.asString("ui-state-hover trash-toolbar-hover"));
+				behavior.setOption("accept", Options.asString(".recorditem, .fileitem"));
+			}
+			
+			@Override
+			public void onDrop(AjaxRequestTarget target, Component component) {
+				Object o = component.getDefaultModelObject();
+				if (o instanceof FlvRecording) {
+					delete((FlvRecording)o, target);
+				}
+			}
+		};
+		add(trashToolbar);
+		trashToolbar.add(new WebMarkupContainer("create").add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				addFolder.open(target);
+			}
+		}));
+		trashToolbar.add(new WebMarkupContainer("refresh").add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				target.add(trees); //FIXME add correct refresh
+			}
+		}));
+		trashToolbar.add(new ConfirmableAjaxBorder("trash", getString("80"), getString("713")) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				delete(rm.getObject(), target);
+			}
+		});
+		RepeatingView treesView = new RepeatingView("tree");
+		treesView.add(selected = new RecordingTree(treesView.newChildId(), new MyRecordingTreeProvider()));
+		treesView.add(new RecordingTree(treesView.newChildId(), new PublicRecordingTreeProvider(null, null)));
+		for (Organisation_Users ou : getBean(UserDao.class).get(getUserId()).getOrganisation_users()) {
+			Organisation o = ou.getOrganisation();
+			treesView.add(new RecordingTree(treesView.newChildId(), new PublicRecordingTreeProvider(o.getOrganisation_id(), o.getName())));
+		}
+		add(trees.add(treesView).setOutputMarkupId(true));
+		updateSizes();
+		add(sizes.add(new Label("homeSize", homeSize), new Label("publicSize", publicSize)).setOutputMarkupId(true));
+		sizes.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(30)) {
+			private static final long serialVersionUID = 1L;
+
+			protected void onPostProcessTarget(AjaxRequestTarget target) {
+				updateSizes();
+			}
+		});
+		add(video, info, errorsDialog);
+	}
+
+	void delete(FlvRecording f, AjaxRequestTarget target) {
+		long id = f.getFlvRecordingId();
+		if (id > 0) {
+			getBean(FlvRecordingDao.class).delete(f);
+		}
+		target.add(trees); //FIXME add correct refresh
+	}
+	
+	private void updateSizes() {
+		RecordingContainerData sizeData = getBean(FlvRecordingDao.class).getRecordingContainerData(getUserId());
+		if (sizeData != null) {
+			homeSize.setObject(getHumanSize(sizeData.getUserHomeSize()));
+			publicSize.setObject(getHumanSize(sizeData.getPublicFileSize()));
+		}
+	}
+	
+	//FIXME need to be generalized to use as Room files explorer
+	class RecordingTree extends DefaultNestedTree<FlvRecording> {
+		private static final long serialVersionUID = 2527395034256868022L;
+
+		public RecordingTree(String id, ITreeProvider<FlvRecording> tp) {
+			super(id, tp);
+			setItemReuseStrategy(new ReuseIfModelsEqualStrategy());
+		}
+		
+		@Override
+		protected Component newContentComponent(String id, IModel<FlvRecording> node) {
+			return new Folder<FlvRecording>(id, this, node) {
+				private static final long serialVersionUID = 1L;
+
+				@Override
+				protected Component newLabelComponent(String id, final IModel<FlvRecording> lm) {
+					FlvRecording r = lm.getObject();
+					return r.isFolder() || r.getFlvRecordingId() < 1 ? new RecordingPanel(id, lm, RecordingsPanel.this) : new RecordingItemPanel(id, lm, RecordingsPanel.this);
+				}
+				
+				@Override
+				protected boolean isSelected() {
+					return getModelObject().getFlvRecordingId() == rm.getObject().getFlvRecordingId();
+				}
+				
+				@Override
+				protected boolean isClickable() {
+					return true;
+				}
+				
+				@Override
+				protected void onClick(AjaxRequestTarget target) {
+					FlvRecording r = getModelObject();
+					FlvRecording _prev = rm.getObject();
+					rm.setObject(r);
+					if (_prev != null) {
+						if (_prev.isFolder()) {
+							selected.updateBranch(_prev, target);
+						} else {
+							selected.updateNode(_prev, target);
+						}
+					}
+ 					selected = RecordingTree.this;
+					if (r.isFolder()) {
+						if (getState(r) == State.COLLAPSED) {
+							super.onClick(target);
+						}
+						updateBranch(r, target);
+					} else {
+						video.update(target, r);
+						info.update(target, r);
+						updateNode(r, target);
+					}
+				}
+				
+				private String getRecordingStyle(FlvRecording r, String def) {
+					String style;
+					if (r.getFlvRecordingId() == 0) {
+						style = "my-recordings om-icon";
+					} else if (r.getFlvRecordingId() < 0) {
+						style = "public-recordings om-icon";
+					} else if (r.isFolder()) {
+						style = def;
+					} else if (isRecordingExists(r.getFileHash() + MP4_EXTENSION)) {
+						style = "recording om-icon";
+					} else if (Status.RECORDING == r.getStatus() || Status.CONVERTING == r.getStatus()) {
+						style = "processing-recording om-icon";
+					} else {
+						style = "broken-recording om-icon";
+					}
+					return style;
+				}
+				
+				@Override
+				protected String getOtherStyleClass(FlvRecording r) {
+					return getRecordingStyle(r, super.getOtherStyleClass(r));
+				}
+				
+				@Override
+				protected String getOpenStyleClass() {
+					return getRecordingStyle(getModelObject(), super.getOpenStyleClass());
+				}
+				
+				@Override
+				protected String getClosedStyleClass() {
+					return getRecordingStyle(getModelObject(), super.getClosedStyleClass());
+				}
+				
+				@Override
+				protected String getSelectedStyleClass() {
+					return "ui-state-active";
+				}
+				
+				@Override
+				protected IModel<String> newLabelModel(IModel<FlvRecording> model) {
+					return Model.of(model.getObject().getFileName());
+				}
+			};
+		}
+	}
+	
+	@Override
+	protected void onDetach() {
+		rm.detach();
+		homeSize.detach();
+		publicSize.detach();
+		super.onDetach();
+	}
+	
+	class MyRecordingTreeProvider extends RecordingTreeProvider {
+		private static final long serialVersionUID = 1L;
+
+		public Iterator<? extends FlvRecording> getRoots() {
+			FlvRecording r = new FlvRecording();
+			r.setFlvRecordingId(0);
+			r.setFileName(Application.getString(860));
+			r.setFolder(true);
+			r.setOwnerId(getUserId());
+			return Arrays.asList(r).iterator();
+		}
+		
+		public Iterator<? extends FlvRecording> getChildren(FlvRecording node) {
+			if (node.getFlvRecordingId() == 0) {
+				return getBean(FlvRecordingDao.class).getFlvRecordingRootByOwner(getUserId()).iterator();
+			} else {
+				return super.getChildren(node);
+			}
+		}
+	}
+	
+	class PublicRecordingTreeProvider extends RecordingTreeProvider {
+		private static final long serialVersionUID = 5502610991599632079L;
+		private final Long orgId;
+		private final String name;
+
+		public PublicRecordingTreeProvider(Long orgId, String name) {
+			this.orgId = orgId;
+			this.name = name;
+		}
+		
+		public Iterator<? extends FlvRecording> getRoots() {
+			FlvRecording r = new FlvRecording();
+			r.setFlvRecordingId(orgId == null ? -1 : -orgId);
+			r.setOrganization_id(orgId);
+			r.setOwnerId(null);
+			r.setFolder(true);
+			String pub = Application.getString(861);
+			r.setFileName(orgId == null ? pub : String.format("%s (%s)", pub, name));
+			return Arrays.asList(r).iterator();
+		}
+		
+		public Iterator<? extends FlvRecording> getChildren(FlvRecording node) {
+			if (node.getFlvRecordingId() < 0) {
+				return getBean(FlvRecordingDao.class).getFlvRecordingRootByPublic(orgId).iterator();
+			} else {
+				return super.getChildren(node);
+			}
+		}
+	}
+	
+	abstract class RecordingTreeProvider implements ITreeProvider<FlvRecording> {
+		private static final long serialVersionUID = 1L;
+
+		public void detach() {
+			// TODO LDM should be used
+		}
+
+		public boolean hasChildren(FlvRecording node) {
+			return node.getFlvRecordingId() <= 0 || node.isFolder();
+		}
+
+		public Iterator<? extends FlvRecording> getChildren(FlvRecording node) {
+			return getBean(FlvRecordingDao.class).getFlvRecordingByParent(node.getFlvRecordingId()).iterator();
+		}
+
+		public IModel<FlvRecording> model(FlvRecording object) {
+			// TODO LDM should be used
+			return Model.of(object);
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.html b/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.html
new file mode 100644
index 0000000..358a5d4
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.html
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<form class="info" wicket:id="form">
+		<table>
+			<tr>
+				<td><wicket:message key="863"/></td>
+				<td><span wicket:id="fileName"></span></td>
+			</tr>
+			<tr>
+				<td><wicket:message key="864"/></td>
+				<td><span wicket:id="duration"></span></td>
+			</tr>
+			<tr>
+				<td><wicket:message key="865"/></td>
+				<td><span wicket:id="recordEnd"></span></td>
+			</tr>
+			<tr>
+				<td><wicket:message key="874"/></td>
+				<td><span wicket:id="roomName"></span></td>
+			</tr>
+		</table>
+		<table>
+			<tr>
+				<td><span wicket:id="downloadBtn"></span></td>
+				<td><button wicket:id="re-convert"><wicket:message key="1600"/></button></td>
+			</tr>
+		</table>
+	</form>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.java b/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.java
new file mode 100644
index 0000000..6585bc0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/VideoInfo.java
@@ -0,0 +1,188 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.record;
+
+import static org.apache.openmeetings.util.OmFileHelper.getRecording;
+import static org.apache.openmeetings.util.OmFileHelper.getRecordingMetaData;
+import static org.apache.openmeetings.util.OmFileHelper.isRecordingExists;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.openmeetings.converter.FlvInterviewConverter;
+import org.apache.openmeetings.converter.FlvRecorderConverter;
+import org.apache.openmeetings.converter.IRecordingConverter;
+import org.apache.openmeetings.db.dao.record.FlvRecordingMetaDataDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.db.entity.record.FlvRecording.Status;
+import org.apache.openmeetings.db.entity.record.FlvRecordingMetaData;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.web.util.AjaxDownload;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.util.resource.FileResourceStream;
+
+import com.googlecode.wicket.jquery.ui.JQueryIcon;
+import com.googlecode.wicket.jquery.ui.form.button.AjaxButton;
+import com.googlecode.wicket.jquery.ui.form.button.AjaxSplitButton;
+import com.googlecode.wicket.jquery.ui.widget.menu.IMenuItem;
+import com.googlecode.wicket.jquery.ui.widget.menu.MenuItem;
+
+public class VideoInfo extends Panel {
+	private static final long serialVersionUID = 1L;
+	private final Form<Void> form = new Form<Void>("form");
+	private final AjaxSplitButton downloadBtn = new AjaxSplitButton("downloadBtn", new ArrayList<IMenuItem>());
+	private final AjaxButton reConvert = new AjaxButton("re-convert") {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		protected String getIcon() {
+			return JQueryIcon.REFRESH;
+		};
+		
+		@Override
+		protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+			final IRecordingConverter converter = getBean(isInterview ? FlvInterviewConverter.class : FlvRecorderConverter.class);
+			new Thread() {
+				public void run() {
+					converter.startConversion(rm.getObject().getFlvRecordingId());
+				}
+			}.start();
+		}
+	};
+	private final AjaxDownload download = new AjaxDownload();
+	private final IModel<FlvRecording> rm = new CompoundPropertyModel<FlvRecording>(new FlvRecording());
+	private final IModel<String> roomName = Model.of((String)null);
+	private boolean isInterview = false;
+
+	public VideoInfo(String id) {
+		this(id, null);
+	}
+	
+	public VideoInfo(String id, FlvRecording r) {
+		super(id);
+		add(form.setOutputMarkupId(true));
+		setDefaultModel(rm);
+		
+		form.add(new Label("fileName"), new Label("duration"), new Label("recordEnd"), new Label("roomName", roomName),
+				downloadBtn.setEnabled(false), reConvert.setEnabled(false));
+		add(download);
+		update(null, r);
+	}
+	
+	public VideoInfo update(AjaxRequestTarget target, FlvRecording _r) {
+		FlvRecording r = _r == null ? new FlvRecording() : _r;
+		rm.setObject(r);
+		try {
+			String name = null;
+			if (r.getRoom_id() != null) {
+				Room room = getBean(RoomDao.class).get(r.getRoom_id());
+				if (room != null) {
+					name = room.getName();
+					isInterview = room.getRoomtype().getRoomtypes_id() == 4;
+				}
+			}
+			roomName.setObject(name);
+		} catch (Exception e) {
+			//no-op
+		}
+		
+		boolean reConvEnabled = false;
+		if (r.getOwnerId() != null && getUserId() == r.getOwnerId() && r.getStatus() != Status.RECORDING && r.getStatus() != Status.CONVERTING) {
+			List<FlvRecordingMetaData> metas = getBean(FlvRecordingMetaDataDao.class).getByRecording(r.getFlvRecordingId());
+			reconvLabel:
+			if (!metas.isEmpty()) {
+				for (FlvRecordingMetaData meta : metas) {
+					if (r.getRoom_id() == null || !getRecordingMetaData(r.getRoom_id(), meta.getStreamName()).exists()) {
+						break reconvLabel;
+					}
+				}
+				reConvEnabled = true;
+			}
+		}
+		reConvert.setEnabled(reConvEnabled);
+		downloadBtn.setEnabled(isRecordingExists(r.getAlternateDownload()) || isRecordingExists(r.getFileHash()));
+		if (target != null) {
+			target.add(form);
+		}
+		
+		return this;
+	}
+	
+	@Override
+	protected void onDetach() {
+		rm.detach();
+		roomName.detach();
+		super.onDetach();
+	}
+
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
+		downloadBtn.setDefaultModelObject(newDownloadMenuList());
+	}
+	
+	private List<IMenuItem> newDownloadMenuList() {
+		List<IMenuItem> list = new ArrayList<>();
+
+		//avi
+		list.add(new MenuItem(getString("884"), JQueryIcon.ARROWTHICKSTOP_1_S) {
+			private static final long serialVersionUID = 1L;
+			
+			@Override
+			public boolean isEnabled() {
+				FlvRecording r = VideoInfo.this.rm.getObject();
+				return r != null && isRecordingExists(r.getAlternateDownload());
+			}
+			
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				download.setFileName(rm.getObject().getAlternateDownload());
+				download.setResourceStream(new FileResourceStream(getRecording(rm.getObject().getAlternateDownload())));
+				download.initiate(target);
+			}
+		});
+		//flv
+		list.add(new MenuItem(getString("883"), JQueryIcon.ARROWTHICKSTOP_1_S) {
+			private static final long serialVersionUID = 1L;
+			
+			@Override
+			public boolean isEnabled() {
+				FlvRecording r = VideoInfo.this.rm.getObject();
+				return r != null && isRecordingExists(r.getAlternateDownload());
+			}
+			
+			@Override
+			public void onClick(AjaxRequestTarget target) {
+				download.setFileName(rm.getObject().getFileHash());
+				download.setResourceStream(new FileResourceStream(getRecording(rm.getObject().getFileHash())));
+				download.initiate(target);
+			}
+		});
+		return list;
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.html b/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.html
new file mode 100644
index 0000000..8d0defe
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.html
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns:wicket="http://wicket.apache.org">
+<wicket:panel>
+	<div class="video" wicket:id="container">
+		<div wicket:id="wait"></div>
+		<video wicket:id="player">
+			Your browser does not support HTML5 video. <!-- FIXME hardcoded -->
+		</video>
+	</div>
+</wicket:panel>
+</html>
diff --git a/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.java b/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.java
new file mode 100644
index 0000000..fbbfcd5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/record/VideoPlayer.java
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.record;
+
+import static org.apache.openmeetings.util.OmFileHelper.getMp4Recording;
+
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.web.util.Mp4RecordingResourceReference;
+import org.apache.openmeetings.web.util.OggRecordingResourceReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.media.Source;
+import org.apache.wicket.markup.html.media.video.Video;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.request.resource.UrlResourceReference;
+
+public class VideoPlayer extends Panel {
+	private static final long serialVersionUID = 1L;
+	private final WebMarkupContainer wait = new WebMarkupContainer("wait"); //FIXME not used
+	private final WebMarkupContainer container = new WebMarkupContainer("container");
+	private final Mp4RecordingResourceReference mp4res = new Mp4RecordingResourceReference();
+	private final OggRecordingResourceReference oggres = new OggRecordingResourceReference();
+	private final OmVideo player = new OmVideo("player", null);
+	private final Source mp4 = new Source("mp4", mp4res);
+	private final Source ogg = new Source("ogg", oggres);
+
+	public VideoPlayer(String id) {
+		this(id, null);
+	}
+	
+	public VideoPlayer(String id, FlvRecording r) {
+		super(id);
+		add(container.setOutputMarkupPlaceholderTag(true));
+		mp4.setDisplayType(true);
+		mp4.setType("video/mp4");
+		ogg.setDisplayType(true);
+		ogg.setType("video/ogg");
+		player.add(mp4, ogg);
+		container.add(wait.setVisible(false), player);
+		update(null, r);
+	}
+	
+	public VideoPlayer update(AjaxRequestTarget target, FlvRecording r) {
+		boolean videoExists = r != null && getMp4Recording(r.getFileHash()).exists();
+		if (videoExists) {
+			PageParameters pp = new PageParameters().add("id", r.getFlvRecordingId());
+			mp4.setPageParameters(pp);
+			ogg.setPageParameters(pp);
+			player.recId = r.getFlvRecordingId();
+		}
+		container.setVisible(videoExists);
+		if (target != null) {
+			target.add(container);
+		}
+		
+		return this;
+	}
+	
+	private static class OmVideo extends Video {
+		private static final long serialVersionUID = 1L;
+		Long recId = null;
+		
+		OmVideo(String id, Long recId) {
+			super(id);
+			this.recId = recId;
+		}
+		
+		@Override
+		public boolean isAutoplay() {
+			return false;
+		}
+		
+		@Override
+		public boolean hasControls() {
+			return true;
+		}
+		
+		@Override
+		public ResourceReference getPoster() {
+			return recId == null ? null : new UrlResourceReference(Url.parse("recordings/jpg/" + recId)).setContextRelative(true);
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java
new file mode 100644
index 0000000..29127bc
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomEnterBehavior.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.user.rooms;
+
+import org.apache.openmeetings.web.pages.MainPage;
+import org.apache.openmeetings.web.util.OmUrlFragment;
+import org.apache.openmeetings.web.util.OmUrlFragment.AreaKeys;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+
+public class RoomEnterBehavior extends AjaxEventBehavior {
+	private static final long serialVersionUID = -5195740583653865055L;
+	private final long roomid;
+	
+	public RoomEnterBehavior(long roomid) {
+		super("click");
+		this.roomid = roomid;
+	}
+
+	public static OmUrlFragment getRoomUrlFragment(long roomId) {
+		return new OmUrlFragment(AreaKeys.room, "" + roomId);
+	}
+	
+	public static void roomEnter(MainPage page, IPartialPageRequestHandler target, long roomId) {
+		page.updateContents(getRoomUrlFragment(roomId), target);
+	}
+	
+	@Override
+	protected void onEvent(AjaxRequestTarget target) {
+		roomEnter((MainPage)getComponent().getPage(), target, roomid);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html
new file mode 100644
index 0000000..6c5b9b5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.html
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+<wicket:panel>

+	<table>

+		<tr>

+			<td style="vertical-align: top">

+				<table class="room-list">

+					<tr wicket:id="list" class="room-row">

+						<td>

+							<div wicket:id="roomContainer">		

+								<span wicket:id="roomName">[room name]</span><br/>

+								<wicket:message key="398" />&nbsp;<span wicket:id="curUsers"></span>&nbsp;/&nbsp;<span

+								wicket:id="totalUsers"></span>&nbsp;&nbsp;<span wicket:id="refresh" 

+								class="ui-icon ui-icon-arrowrefresh-1-n" style="display: inline-block"></span>

+							</div>

+						</td>

+						<td><button wicket:id="enter"><wicket:message key="131"/></button></td>

+					</tr>

+				</table>

+			</td>

+			<td style="vertical-align: top">

+				<!-- Users in this Room -->

+				<fieldset class="ui-widget-content" wicket:id="details">

+					<div class="formelement" style="font-style: italic;">

+	                    <label><wicket:message key="404" /></label>

+					</div>

+					<div class="formelement">

+	                    <label style="font-weight: bold;"><wicket:message key="406" /></label>

+	                    <span wicket:id="roomName"></span>&nbsp;#<span wicket:id="roomId"></span>

+					</div>

+					<div class="formelement">

+	                    <label style="font-weight: bold;"><wicket:message key="270" /></label>

+	                    <span wicket:id="roomComment"></span>

+					</div>

+					<div class="formelement">

+	                    <label><wicket:message key="407" /></label>

+					</div>

+					<div class="tableWrapper" id="adminTable">

+						<table class="adminListTable">

+							<tbody wicket:id="clientsContainer">		

+					    		<tr wicket:id="clients">

+									<td style="width: 50px;"><img wicket:id="clientImage" style="min-width: 50px; height:50px" /></td>

+									<td style="width: 350px; height:50px">

+										<div style="width: 350px; height:50px"><span wicket:id="clientLogin"></span>&nbsp;<wicket:message key="408"/>&nbsp;<span wicket:id="from"></span></div>

+									</td>

+								</tr>

+							</tbody>

+						</table>

+					</div>

+				</fieldset>

+			</td>

+		</tr>

+	</table>

+</wicket:panel>

+</html>

diff --git a/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java
new file mode 100644
index 0000000..5192302
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsPanel.java
@@ -0,0 +1,165 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.rooms;

+

+import java.io.File;

+import java.io.FileInputStream;

+import java.io.IOException;

+import java.io.InputStream;

+import java.util.List;

+

+import org.apache.openmeetings.db.dao.room.RoomDao;

+import org.apache.openmeetings.db.dao.server.ISessionManager;

+import org.apache.openmeetings.db.dao.user.UserDao;

+import org.apache.openmeetings.db.entity.room.Client;

+import org.apache.openmeetings.db.entity.room.Room;

+import org.apache.openmeetings.util.OmFileHelper;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.openmeetings.web.common.UserPanel;

+import org.apache.wicket.ajax.AjaxEventBehavior;

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.ajax.markup.html.AjaxLink;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.html.image.Image;

+import org.apache.wicket.markup.html.list.ListItem;

+import org.apache.wicket.markup.html.list.ListView;

+import org.apache.wicket.model.IModel;

+import org.apache.wicket.model.Model;

+import org.apache.wicket.request.resource.ByteArrayResource;

+import org.apache.wicket.util.io.IOUtils;

+

+import com.googlecode.wicket.jquery.ui.form.button.Button;

+

+public class RoomsPanel extends UserPanel {

+	private static final long serialVersionUID = 1L;

+	private final WebMarkupContainer clientsContainer = new WebMarkupContainer("clientsContainer");

+	private final WebMarkupContainer details = new WebMarkupContainer("details");

+	private final ListView<Client> clients;

+	private IModel<Long> roomID = Model.of((Long)null);

+	private IModel<String> roomName = Model.of((String)null);

+	private IModel<String> roomComment = Model.of((String)null);

+	private List<Client> clientsInRoom = null;

+	private long roomId = 0;

+

+	public RoomsPanel(String id, List<Room> rooms) {

+		super(id);

+		add(new ListView<Room>("list", rooms) {

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void populateItem(ListItem<Room> item) {

+				final Room r = item.getModelObject();

+				WebMarkupContainer roomContainer;

+				item.add((roomContainer = new WebMarkupContainer("roomContainer")).add(new AjaxEventBehavior("click"){

+					private static final long serialVersionUID = 1L;

+					

+					@Override

+					protected void onEvent(AjaxRequestTarget target) {

+						roomId = r.getRooms_id();

+						updateRoomDetails(target);

+					}

+				}));

+				roomContainer.add(new Label("roomName", r.getName()));

+				final Label curUsers = new Label("curUsers", new Model<Integer>(Application.getBean(ISessionManager.class).getClientListByRoom(r.getRooms_id()).size()));

+				roomContainer.add(curUsers.setOutputMarkupId(true));

+				roomContainer.add(new Label("totalUsers", r.getNumberOfPartizipants()));

+				item.add(new Button("enter").add(new RoomEnterBehavior(r.getRooms_id())));

+				roomContainer.add(new AjaxLink<Void>("refresh") {

+					private static final long serialVersionUID = 1L;

+

+					@Override

+					public void onClick(AjaxRequestTarget target) {

+						roomId = r.getRooms_id();

+						target.add(curUsers.setDefaultModelObject(Application.getBean(ISessionManager.class).getClientListByRoom(r.getRooms_id()).size()));

+						updateRoomDetails(target);

+					}

+				});

+			}

+		});

+		

+		// Users in this Room

+		add(details.setOutputMarkupId(true).setVisible(rooms.size() > 0));

+		details.add(new Label("roomId", roomID));

+		details.add(new Label("roomName", roomName));

+		details.add(new Label("roomComment", roomComment));

+		clients = new ListView<Client>("clients", clientsInRoom){

+			private static final long serialVersionUID = 1L;

+

+			@Override

+			protected void populateItem(final ListItem<Client> item) {

+				Client client = item.getModelObject();

+				final Long userId = client.getUser_id();

+				item.add(new Image("clientImage", new ByteArrayResource("image/jpeg") {

+					private static final long serialVersionUID = 1L;

+

+					@Override

+					protected ResourceResponse newResourceResponse(Attributes attributes) {

+						ResourceResponse rr = super.newResourceResponse(attributes);

+						rr.disableCaching();

+						return rr;

+					}

+					

+					@Override

+					protected byte[] getData(Attributes attributes) {

+						String uri = null;

+						if (userId != null) {

+							uri = Application.getBean(UserDao.class).get(userId > 0 ? userId : -userId).getPictureuri();

+						}

+						File img = OmFileHelper.getUserProfilePicture(userId, uri);

+						InputStream is = null;

+						try {

+							is = new FileInputStream(img);

+							return IOUtils.toByteArray(is);

+						} catch (Exception e) {

+						} finally {

+							if (is != null) {

+								try {

+									is.close();

+								} catch (IOException e) {}

+							}

+						}

+						return null;

+					}

+				}));

+				item.add(new Label("clientLogin", client.getUsername()));

+				item.add(new Label("from", client.getConnectedSince()));

+			}

+		};

+		details.add(clientsContainer.add(clients.setOutputMarkupId(true)).setOutputMarkupId(true));

+	}

+

+	void updateRoomDetails(AjaxRequestTarget target) {

+		final List<Client> clientsInRoom = Application.getBean(ISessionManager.class).getClientListByRoom(roomId);

+		clients.setDefaultModelObject(clientsInRoom);

+		Room room = Application.getBean(RoomDao.class).get(roomId);

+		roomID.setObject(room.getRooms_id());

+		roomName.setObject(room.getName());

+		roomComment.setObject(room.getComment());

+		target.add(clientsContainer, details);

+	}

+	

+	@Override

+	protected void onDetach() {

+		roomID.detach();

+		roomName.detach();

+		roomComment.detach();

+		super.onDetach();

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html
new file mode 100644
index 0000000..eea6f53
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.html
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+	<wicket:panel>

+		<div wicket:id="title" class="rooms title"></div>

+		<div wicket:id="desc" class="rooms desc info-text"></div>

+		<div wicket:id="rooms"></div>

+	</wicket:panel>

+</html>

diff --git a/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.java b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.java
new file mode 100644
index 0000000..45daa4e
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsSelectorPanel.java
@@ -0,0 +1,56 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.rooms;

+

+import org.apache.openmeetings.db.dao.room.RoomDao;

+import org.apache.openmeetings.web.app.Application;

+import org.apache.openmeetings.web.common.UserPanel;

+import org.apache.openmeetings.web.util.OmUrlFragment.MenuParams;

+import org.apache.wicket.markup.html.basic.Label;

+

+public class RoomsSelectorPanel extends UserPanel {

+	private static final long serialVersionUID = -3246259803623925341L;

+

+	public RoomsSelectorPanel(String id, MenuParams param) {

+		super(id);

+

+		long title, desc;

+		RoomDao roomDao = Application.getBean(RoomDao.class);

+		switch (param) {

+			case myTabButton:

+				title = 781L;

+				desc = 782L;

+				add(new RoomsPanel("rooms", getMyRooms()));

+				break;

+			case privateTabButton:

+				title = 779L;

+				desc = 780L;

+				add(new RoomsTabbedPanel("rooms")); 

+				break;

+			case publicTabButton:

+			default:

+				title = 777L;

+				desc = 778L;

+				add(new RoomsPanel("rooms", roomDao.getPublicRooms()));

+				break;

+		}

+		add(new Label("title", Application.getString(title)));

+		add(new Label("desc", Application.getString(desc)));

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.html b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.html
new file mode 100644
index 0000000..b8aa48b
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.html
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+    	  

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+  

+-->

+<html xmlns:wicket="http://wicket.apache.org">

+	<wicket:panel>

+		<div id="orgTabs">

+			<ul>

+				<li wicket:id="orgTabs"><a wicket:id="link"><wicket:container wicket:id="name"></wicket:container></a></li>

+			</ul>

+			<wicket:container wicket:id="orgRooms"><div wicket:id="rooms"></div></wicket:container>

+		</div>

+	</wicket:panel>

+</html>

diff --git a/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.java b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.java
new file mode 100644
index 0000000..7a501c9
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/user/rooms/RoomsTabbedPanel.java
@@ -0,0 +1,70 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.user.rooms;

+

+import static org.apache.openmeetings.web.app.Application.getBean;

+import static org.apache.openmeetings.web.app.WebSession.getUserId;

+

+import org.apache.openmeetings.db.dao.room.RoomDao;

+import org.apache.openmeetings.db.dao.user.UserDao;

+import org.apache.openmeetings.db.entity.user.Organisation;

+import org.apache.openmeetings.db.entity.user.Organisation_Users;

+import org.apache.openmeetings.db.entity.user.User;

+import org.apache.openmeetings.web.common.UserPanel;

+import org.apache.wicket.AttributeModifier;

+import org.apache.wicket.markup.html.WebMarkupContainer;

+import org.apache.wicket.markup.html.basic.Label;

+import org.apache.wicket.markup.html.list.ListItem;

+import org.apache.wicket.markup.html.list.ListView;

+import org.apache.wicket.model.Model;

+

+import com.googlecode.wicket.jquery.core.JQueryBehavior;

+

+public class RoomsTabbedPanel extends UserPanel {

+	private static final long serialVersionUID = 3642004664480074881L;

+

+	public RoomsTabbedPanel(String id) {

+		super(id);

+		

+		User u = getBean(UserDao.class).get(getUserId());

+		add(new ListView<Organisation_Users>("orgTabs", u.getOrganisation_users()) {

+			private static final long serialVersionUID = -145637079945252731L;

+

+			@Override

+			protected void populateItem(ListItem<Organisation_Users> item) {

+				Organisation org = item.getModelObject().getOrganisation();

+				item.add(new WebMarkupContainer("link")

+					.add(new Label("name", Model.of(org.getName())))

+					.add(new AttributeModifier("href", "#org" + org.getOrganisation_id())));

+			}

+		});

+		add(new ListView<Organisation_Users>("orgRooms", u.getOrganisation_users()) {

+			private static final long serialVersionUID = 9039932126334250798L;

+

+			@Override

+			protected void populateItem(ListItem<Organisation_Users> item) {

+				Organisation org = item.getModelObject().getOrganisation();

+				item.add(new RoomsPanel("rooms"

+					, getBean(RoomDao.class).getOrganisationRooms(org.getOrganisation_id()))

+					.setMarkupId("org" + org.getOrganisation_id())).setRenderBodyOnly(true);

+			}

+		});

+		add(new JQueryBehavior("#orgTabs", "tabs"));

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/util/AjaxDownload.java b/src/web/java/org/apache/openmeetings/web/util/AjaxDownload.java
new file mode 100644
index 0000000..2000987
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/AjaxDownload.java
@@ -0,0 +1,99 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.util;

+

+import org.apache.wicket.ajax.AjaxRequestTarget;

+import org.apache.wicket.behavior.AbstractAjaxBehavior;

+import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;

+import org.apache.wicket.request.resource.ContentDisposition;

+import org.apache.wicket.util.resource.IResourceStream;

+

+/**

+ * see: <a href="https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow">

+ * https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow</href>

+ * 

+ */

+public class AjaxDownload extends AbstractAjaxBehavior {

+	private static final long serialVersionUID = 1L;

+

+	private boolean addAntiCache;

+

+	private String fileName;

+	private IResourceStream resourceStream;

+

+	public AjaxDownload() {

+		this(true);

+	}

+

+	public AjaxDownload(boolean addAntiCache) {

+		super();

+		this.addAntiCache = addAntiCache;

+	}

+

+	/**

+	 * Call this method to initiate the download.

+	 */

+	public void initiate(AjaxRequestTarget target) {

+		String url = getCallbackUrl().toString();

+

+		if (addAntiCache) {

+			url = url + (url.contains("?") ? "&" : "?");

+			url = url + "antiCache=" + System.currentTimeMillis();

+		}

+

+		// the timeout is needed to let Wicket release the channel

+		target.appendJavaScript("setTimeout(\"window.location.href='" + url + "'\", 100);");

+	}

+

+	public void onRequest() {

+		ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(getResourceStream(), getFileName());

+		handler.setContentDisposition(getContentDisposition());

+		getComponent().getRequestCycle().scheduleRequestHandlerAfterCurrent(handler);

+	}

+

+	protected ContentDisposition getContentDisposition() {

+		return ContentDisposition.ATTACHMENT;

+	}

+	/**

+	 * Override this method for a file name which will let the browser prompt

+	 * with a save/open dialog.

+	 * 

+	 * @see ResourceStreamRequestTarget#getFileName()

+	 */

+	protected String getFileName() {

+		return this.fileName;

+	}

+

+	public void setFileName(String fileName) {

+		this.fileName = fileName;

+	}

+

+	/**

+	 * Hook method providing the actual resource stream.

+	 */

+	protected IResourceStream getResourceStream() {

+		return resourceStream;

+

+	}

+

+	public void setResourceStream(IResourceStream resourceStream) {

+		this.resourceStream = resourceStream;

+	}

+

+}

diff --git a/src/web/java/org/apache/openmeetings/web/util/AviRecordingResourceReference.java b/src/web/java/org/apache/openmeetings/web/util/AviRecordingResourceReference.java
new file mode 100644
index 0000000..f354341
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/AviRecordingResourceReference.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.util.OmFileHelper.getRecording;
+
+import java.io.File;
+
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+
+public class AviRecordingResourceReference extends RecordingResourceReference {
+	private static final long serialVersionUID = 6181482949621024822L;
+
+	public AviRecordingResourceReference() {
+		super(AviRecordingResourceReference.class);
+	}
+	
+	@Override
+	public String getContentType() {
+		return "video/avi";
+	}
+	
+	@Override
+	String getFileName(FlvRecording r) {
+		return r.getAlternateDownload();
+	}
+	
+	@Override
+	File getFile(FlvRecording r) {
+		return getRecording(r.getAlternateDownload());
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/BootstrapFileUploadBehavior.java b/src/web/java/org/apache/openmeetings/web/util/BootstrapFileUploadBehavior.java
new file mode 100644
index 0000000..0d85df4
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/BootstrapFileUploadBehavior.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import org.apache.wicket.Component;
+import org.apache.wicket.behavior.Behavior;
+import org.apache.wicket.markup.head.CssHeaderItem;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.request.resource.CssResourceReference;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
+
+public class BootstrapFileUploadBehavior extends Behavior {
+	private static final long serialVersionUID = 1L;
+	private final static JavaScriptResourceReference BOOTSTRAP_FILEUPLOAD_JS_REFERENCE
+			= new JavaScriptResourceReference(BootstrapFileUploadBehavior.class, "bootstrap-fileupload.js");
+	private final static CssResourceReference BOOTSTRAP_FILEUPLOAD_CSS_REFERENCE
+			= new CssResourceReference(BootstrapFileUploadBehavior.class, "bootstrap-fileupload.css");
+	public final static BootstrapFileUploadBehavior INSTANCE = new BootstrapFileUploadBehavior(); 
+	
+	private BootstrapFileUploadBehavior() {
+	}
+	
+	@Override
+	public void renderHead(Component component, IHeaderResponse response) {
+		super.renderHead(component, response);
+        response.render(JavaScriptHeaderItem.forReference(BOOTSTRAP_FILEUPLOAD_JS_REFERENCE));
+        response.render(CssHeaderItem.forReference(BOOTSTRAP_FILEUPLOAD_CSS_REFERENCE));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/CalendarWebHelper.java b/src/web/java/org/apache/openmeetings/web/util/CalendarWebHelper.java
new file mode 100644
index 0000000..2c8cd87
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/CalendarWebHelper.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.web.app.WebSession.getUserTimeZone;
+
+import java.util.Date;
+
+import org.apache.openmeetings.util.CalendarHelper;
+import org.threeten.bp.LocalDate;
+import org.threeten.bp.LocalDateTime;
+import org.threeten.bp.ZoneId;
+
+public class CalendarWebHelper extends CalendarHelper {
+	public static ZoneId getZoneId() {
+		return getZoneId(getUserTimeZone().getID());
+	}
+	
+	public static Date getDate(LocalDateTime d) {
+		return getDate(d, getUserTimeZone().getID());
+	}
+	
+	public static Date getDate(LocalDate d) {
+		return getDate(d, getUserTimeZone().getID());
+	}
+	
+	public static LocalDateTime getDateTime(Date d) {
+		return getDateTime(d, getUserTimeZone().getID());
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/CallbackFunctionHelper.java b/src/web/java/org/apache/openmeetings/web/util/CallbackFunctionHelper.java
new file mode 100644
index 0000000..6abc52a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/CallbackFunctionHelper.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
+import org.apache.wicket.ajax.attributes.CallbackParameter;
+
+public class CallbackFunctionHelper {
+	
+	public static StringBuilder getNamedFunction(String name, AbstractDefaultAjaxBehavior b, CallbackParameter... extraParameters) {
+		StringBuilder sb = new StringBuilder();
+		sb.append("function ").append(name).append("(");
+		boolean first = true;
+		for (CallbackParameter curExtraParameter : extraParameters)
+		{
+			if (curExtraParameter.getFunctionParameterName() != null)
+			{
+				if (!first)
+					sb.append(',');
+				else
+					first = false;
+				sb.append(curExtraParameter.getFunctionParameterName());
+			}
+		}
+		sb.append(") {\n");
+		sb.append(b.getCallbackFunctionBody(extraParameters));
+		sb.append("}\n");
+		return sb;
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/ContactsHelper.java b/src/web/java/org/apache/openmeetings/web/util/ContactsHelper.java
new file mode 100644
index 0000000..1bf3c80
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/ContactsHelper.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.apache.openmeetings.web.util.OmUrlFragment.PROFILE_MESSAGES;
+
+import java.util.Date;
+
+import org.apache.openmeetings.db.dao.user.PrivateMessagesDao;
+import org.apache.openmeetings.db.dao.user.UserContactsDao;
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.UserContact;
+import org.apache.openmeetings.mail.MailHandler;
+import org.apache.openmeetings.util.CalendarPatterns;
+import org.apache.openmeetings.util.crypt.ManageCryptStyle;
+import org.apache.openmeetings.web.app.Application;
+import org.apache.openmeetings.web.mail.template.RequestContactConfirmTemplate;
+import org.apache.openmeetings.web.mail.template.RequestContactTemplate;
+
+public class ContactsHelper {
+	public static long addUserToContactList(long userIdToAdd) {
+		boolean isContact = getBean(UserContactsDao.class).isContact(userIdToAdd, getUserId());
+
+		if (isContact) {
+			return -45L;
+		}
+		String hash = ManageCryptStyle.getInstanceOfCrypt()
+			.createPassPhrase(CalendarPatterns.getDateWithTimeByMiliSeconds(new Date()));
+
+		Long userContactId = getBean(UserContactsDao.class).addUserContact(userIdToAdd, getUserId(), true, hash);
+
+		User user = getBean(UserDao.class).get(getUserId());
+		User userToAdd = getBean(UserDao.class).get(userIdToAdd);
+
+		String subj = user.getFirstname() + " " + user.getLastname() + " " + Application.getString(1193);
+		String message = RequestContactTemplate.getEmail(userToAdd, user);
+
+		getBean(PrivateMessagesDao.class).addPrivateMessage(
+			subj, message, 0L, user, userToAdd, userToAdd, false, null, true, userContactId);
+
+		if (userToAdd.getAdresses() != null) {
+			getBean(MailHandler.class).send(userToAdd.getAdresses().getEmail(), subj, message);
+		}
+
+		return userContactId;
+	}
+
+	public static Long acceptUserContact(long userContactId) {
+		UserContactsDao dao = getBean(UserContactsDao.class);
+		UserContact contact = dao.get(userContactId);
+
+		if (contact == null) {
+			return -46L;
+		}
+
+		if (!contact.isPending()) {
+			return -47L;
+		}
+
+		dao.updateContactStatus(userContactId, false);
+
+		contact = dao.get(userContactId);
+		User user = contact.getOwner();
+
+		dao.addUserContact(user.getUser_id(), getUserId(), false, "");
+
+		if (user.getAdresses() != null) {
+			String message = RequestContactConfirmTemplate.getEmail(contact);
+
+			String subj = contact.getContact().getFirstname() + " " + contact.getContact().getLastname() + " " + Application.getString(1198);
+
+			getBean(PrivateMessagesDao.class).addPrivateMessage(
+					subj, message,
+					0L, contact.getContact(), user, user, false, null, false, 0L);
+
+			getBean(MailHandler.class).send(user.getAdresses().getEmail(), subj, message);
+		}
+		return userContactId;
+	}
+	
+	public static String getLink() {
+		return PROFILE_MESSAGES.getLink();		
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/FlvRecordingResourceReference.java b/src/web/java/org/apache/openmeetings/web/util/FlvRecordingResourceReference.java
new file mode 100644
index 0000000..13accb5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/FlvRecordingResourceReference.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.util.OmFileHelper.getRecording;
+
+import java.io.File;
+
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+
+public class FlvRecordingResourceReference extends RecordingResourceReference {
+	private static final long serialVersionUID = 6181482949621024822L;
+
+	public FlvRecordingResourceReference() {
+		super(FlvRecordingResourceReference.class);
+	}
+	
+	@Override
+	public String getContentType() {
+		return "video/flv";
+	}
+	
+	@Override
+	String getFileName(FlvRecording r) {
+		return r.getFileHash();
+	}
+	
+	@Override
+	File getFile(FlvRecording r) {
+		return getRecording(r.getFileHash());
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/FormatHelper.java b/src/web/java/org/apache/openmeetings/web/util/FormatHelper.java
new file mode 100644
index 0000000..2ba8c09
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/FormatHelper.java
@@ -0,0 +1,81 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements.  See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership.  The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License") +  you may not use this file except in compliance

+ * with the License.  You may obtain a copy of the License at

+ *

+ *   http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied.  See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.openmeetings.web.util;

+

+import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4;

+

+import java.util.regex.Pattern;

+

+import org.apache.openmeetings.db.entity.user.User;

+

+public class FormatHelper {

+	/**

+	 * taken from BidiUtils

+	 * 

+	 * A regular expression for matching right-to-left language codes. See

+	 * {@link #isRtlLanguage} for the design.

+	 */

+	private static final Pattern RtlLocalesRe = Pattern.compile("^(ar|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Arab|Hebr|Thaa|Nkoo|Tfng))"

+					+ "(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)");

+

+	/**

+	 * Check if a BCP 47 / III language code indicates an RTL language, i.e.

+	 * either: - a language code explicitly specifying one of the right-to-left

+	 * scripts, e.g. "az-Arab", or

+	 * <p>

+	 * - a language code specifying one of the languages normally written in a

+	 * right-to-left script, e.g. "fa" (Farsi), except ones explicitly

+	 * specifying Latin or Cyrillic script (which are the usual LTR

+	 * alternatives).

+	 * <p>

+	 * The list of right-to-left scripts appears in the 100-199 range in

+	 * http://www.unicode.org/iso15924/iso15924-num.html, of which Arabic and

+	 * Hebrew are by far the most widely used. We also recognize Thaana, N'Ko,

+	 * and Tifinagh, which also have significant modern usage. The rest (Syriac,

+	 * Samaritan, Mandaic, etc.) seem to have extremely limited or no modern

+	 * usage and are not recognized. The languages usually written in a

+	 * right-to-left script are taken as those with Suppress-Script:

+	 * Hebr|Arab|Thaa|Nkoo|Tfng in

+	 * http://www.iana.org/assignments/language-subtag-registry, as well as

+	 * Sindhi (sd) and Uyghur (ug). The presence of other subtags of the

+	 * language code, e.g. regions like EG (Egypt), is ignored.

+	 */

+	public static boolean isRtlLanguage(String languageString) {

+		return languageString != null && RtlLocalesRe.matcher(languageString).find();

+	}

+

+	public static String formatUser(User u) {

+		return formatUser(u, false);

+	}

+

+	// TODO check RIGHTS here (email might need to be hidden)

+	public static String formatUser(User u, boolean isHTMLEscape) {

+		String user = "";

+		if (u != null) {

+			String email = u.getAdresses() == null ? "" : u.getAdresses().getEmail();

+			if (u.getFirstname() == null && u.getLastname() == null) {

+				user = email;

+			} else {

+				user = String.format("\"%s %s\" <%s>", u.getFirstname(), u.getLastname(), email);

+			}

+			user = isHTMLEscape ? escapeHtml4(user) : user;

+		}

+		return user;

+	}

+}

diff --git a/src/web/java/org/apache/openmeetings/web/util/JpgRecordingResourceReference.java b/src/web/java/org/apache/openmeetings/web/util/JpgRecordingResourceReference.java
new file mode 100644
index 0000000..8a92f2c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/JpgRecordingResourceReference.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.util.OmFileHelper.getRecording;
+
+import java.io.File;
+
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+
+public class JpgRecordingResourceReference extends RecordingResourceReference {
+	private static final long serialVersionUID = 6181482949621024822L;
+
+	public JpgRecordingResourceReference() {
+		super(JpgRecordingResourceReference.class);
+	}
+	
+	@Override
+	public String getContentType() {
+		return "image/jpeg";
+	}
+	
+	@Override
+	String getFileName(FlvRecording r) {
+		return r.getPreviewImage();
+	}
+	
+	@Override
+	File getFile(FlvRecording r) {
+		return getRecording(r.getPreviewImage());
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/Mp4RecordingResourceReference.java b/src/web/java/org/apache/openmeetings/web/util/Mp4RecordingResourceReference.java
new file mode 100644
index 0000000..41df9e0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/Mp4RecordingResourceReference.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.util.OmFileHelper.MP4_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.getMp4Recording;
+
+import java.io.File;
+
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+
+public class Mp4RecordingResourceReference extends RecordingResourceReference {
+	private static final long serialVersionUID = 6181482949621024822L;
+
+	public Mp4RecordingResourceReference() {
+		super(Mp4RecordingResourceReference.class);
+	}
+	
+	@Override
+	public String getContentType() {
+		return "video/mp4";
+	}
+	
+	@Override
+	String getFileName(FlvRecording r) {
+		return r.getFileHash() + MP4_EXTENSION;
+	}
+	
+	@Override
+	File getFile(FlvRecording r) {
+		return getMp4Recording(r.getFileHash());
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/OggRecordingResourceReference.java b/src/web/java/org/apache/openmeetings/web/util/OggRecordingResourceReference.java
new file mode 100644
index 0000000..758757c
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/OggRecordingResourceReference.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.util.OmFileHelper.OGG_EXTENSION;
+import static org.apache.openmeetings.util.OmFileHelper.getOggRecording;
+
+import java.io.File;
+
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+
+public class OggRecordingResourceReference extends RecordingResourceReference {
+	private static final long serialVersionUID = 6181482949621024822L;
+
+	public OggRecordingResourceReference() {
+		super(OggRecordingResourceReference.class);
+	}
+	
+	@Override
+	public String getContentType() {
+		return "video/ogg";
+	}
+	
+	@Override
+	String getFileName(FlvRecording r) {
+		return r.getFileHash() + OGG_EXTENSION;
+	}
+	
+	@Override
+	File getFile(FlvRecording r) {
+		return getOggRecording(r.getFileHash());
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/OmUrlFragment.java b/src/web/java/org/apache/openmeetings/web/util/OmUrlFragment.java
new file mode 100644
index 0000000..8cac629
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/OmUrlFragment.java
@@ -0,0 +1,296 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANDING_ZONE;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.user.profile.SettingsPanel.EDIT_PROFILE_TAB_ID;
+import static org.apache.openmeetings.web.user.profile.SettingsPanel.MESSAGES_TAB_ID;
+
+import java.io.Serializable;
+
+import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
+import org.apache.openmeetings.web.admin.backup.BackupPanel;
+import org.apache.openmeetings.web.admin.configurations.ConfigsPanel;
+import org.apache.openmeetings.web.admin.connection.ConnectionsPanel;
+import org.apache.openmeetings.web.admin.groups.GroupsPanel;
+import org.apache.openmeetings.web.admin.labels.LangPanel;
+import org.apache.openmeetings.web.admin.ldaps.LdapsPanel;
+import org.apache.openmeetings.web.admin.oauth.OAuthPanel;
+import org.apache.openmeetings.web.admin.rooms.RoomsPanel;
+import org.apache.openmeetings.web.admin.servers.ServersPanel;
+import org.apache.openmeetings.web.admin.users.UsersPanel;
+import org.apache.openmeetings.web.common.BasePanel;
+import org.apache.openmeetings.web.room.RoomPanel;
+import org.apache.openmeetings.web.user.calendar.CalendarPanel;
+import org.apache.openmeetings.web.user.dashboard.OmDashboardPanel;
+import org.apache.openmeetings.web.user.profile.SettingsPanel;
+import org.apache.openmeetings.web.user.record.RecordingsPanel;
+import org.apache.openmeetings.web.user.rooms.RoomsSelectorPanel;
+
+public class OmUrlFragment implements Serializable {
+	private static final long serialVersionUID = 7382435810352033914L;
+	private AreaKeys area = AreaKeys.user;
+	private String type = "";
+	public static final String CHILD_ID = "child";
+	public static final String TYPE_CALENDAR = "calendar";
+	public static final String TYPE_DASHBOARD = "dashboard";
+	public static final String TYPE_MESSAGES = "messages";
+	public static final String TYPE_EDIT = "edit";
+	public static final String TYPE_RECORDINGS = "record";
+	public static final String TYPE_MY = "my";
+	public static final String TYPE_GROUP = "group";
+	public static final String TYPE_PUBLIC = "public";
+	public static final String TYPE_USER = "user";
+	public static final String TYPE_CONNECTION = "connection";
+	public static final String TYPE_ROOM = "room";
+	public static final String TYPE_CONFIG = "config";
+	public static final String TYPE_LANG = "lang";
+	public static final String TYPE_LDAP = "ldap";
+	public static final String TYPE_BACKUP = "backup";
+	public static final String TYPE_SERVER = "server";
+	public static final String TYPE_OAUTH2 = "oauth2";
+	public static final OmUrlFragment DASHBOARD = new OmUrlFragment(AreaKeys.user, TYPE_DASHBOARD);
+	public static final OmUrlFragment PROFILE_EDIT = new OmUrlFragment(AreaKeys.profile, TYPE_EDIT);
+	public static final OmUrlFragment PROFILE_MESSAGES = new OmUrlFragment(AreaKeys.profile, TYPE_MESSAGES);
+	public static final OmUrlFragment CALENDAR = new OmUrlFragment(AreaKeys.user, TYPE_CALENDAR);
+	public static final OmUrlFragment ROOMS_PUBLIC = new OmUrlFragment(AreaKeys.rooms, TYPE_PUBLIC);
+	
+	public enum AreaKeys {
+		user
+		, admin
+		, profile
+		, room
+		, rooms
+	}
+	
+	public enum MenuActions {
+		dashboardModuleStartScreen
+		, dashboardModuleCalendar
+		, recordModule
+		, conferenceModuleRoomList
+		, eventModuleRoomList
+		, moderatorModuleUser
+		, moderatorModuleRoom
+		, adminModuleUser
+		, adminModuleConnections
+		, adminModuleOrg
+		, adminModuleRoom
+		, adminModuleConfiguration
+		, adminModuleLanguages
+		, adminModuleLDAP
+		, adminModuleBackup
+		, adminModuleServers
+		, adminModuleOAuth
+	}
+	
+	public enum MenuParams {
+		publicTabButton
+		, privateTabButton
+		, myTabButton
+	}
+	
+	public static OmUrlFragment get() {
+		String[] arr = getBean(ConfigurationDao.class).getConfValue(CONFIG_DEFAULT_LANDING_ZONE, String.class, "").split("/");
+		if (arr != null && arr.length == 2) {
+			try {
+				return new OmUrlFragment(AreaKeys.valueOf(arr[0]), arr[1]);
+			} catch (Exception e) {
+				// no-op
+			}
+		}
+		return DASHBOARD;
+	}
+	
+	public OmUrlFragment(AreaKeys area, String type) {
+		this.setArea(area);
+		this.setType(type);
+	}
+	
+	public OmUrlFragment(MenuActions action) {
+		this(action, MenuParams.myTabButton);
+	}
+	
+	public OmUrlFragment(MenuActions action, MenuParams params) {
+		switch(action) {
+			case dashboardModuleStartScreen:
+				setArea(AreaKeys.user);
+				setType(TYPE_DASHBOARD);
+				break;
+			case dashboardModuleCalendar:
+				setArea(AreaKeys.user);
+				setType(TYPE_CALENDAR);
+				break;
+			case recordModule:
+				setArea(AreaKeys.user);
+				setType(TYPE_RECORDINGS);
+				break;
+			case conferenceModuleRoomList:
+				setArea(AreaKeys.rooms);
+				switch (params) {
+					case myTabButton:
+						setType(TYPE_MY);
+						break;
+					case privateTabButton:
+						setType(TYPE_GROUP);
+						break;
+					case publicTabButton:
+						setType(TYPE_PUBLIC);
+						break;
+				}
+				break;
+			case eventModuleRoomList:
+				break;
+			case moderatorModuleUser:
+				break;
+			case moderatorModuleRoom:
+				break;
+			case adminModuleUser:
+				setArea(AreaKeys.admin);
+				setType(TYPE_USER);
+				break;
+			case adminModuleConnections:
+				setArea(AreaKeys.admin);
+				setType(TYPE_CONNECTION);
+				break;
+			case adminModuleOrg:
+				setArea(AreaKeys.admin);
+				setType(TYPE_GROUP);
+				break;
+			case adminModuleRoom:
+				setArea(AreaKeys.admin);
+				setType(TYPE_ROOM);
+				break;
+			case adminModuleConfiguration:
+				setArea(AreaKeys.admin);
+				setType(TYPE_CONFIG);
+				break;
+			case adminModuleLanguages:
+				setArea(AreaKeys.admin);
+				setType(TYPE_LANG);
+				break;
+			case adminModuleLDAP:
+				setArea(AreaKeys.admin);
+				setType(TYPE_LDAP);
+				break;
+			case adminModuleBackup:
+				setArea(AreaKeys.admin);
+				setType(TYPE_BACKUP);
+				break;
+			case adminModuleServers:
+				setArea(AreaKeys.admin);
+				setType(TYPE_SERVER);
+				break;
+			case adminModuleOAuth:
+				setArea(AreaKeys.admin);
+				setType(TYPE_OAUTH2);
+		}
+	}
+
+	public AreaKeys getArea() {
+		return area;
+	}
+
+	public void setArea(AreaKeys area) {
+		this.area = area;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+	
+	public static BasePanel getPanel(AreaKeys area, String type) {
+		BasePanel basePanel = null;
+		switch(area) {
+			case admin:
+				if (TYPE_USER.equals(type)) {
+					basePanel = new UsersPanel(CHILD_ID);
+				} else if (TYPE_CONNECTION.equals(type)) {
+					basePanel = new ConnectionsPanel(CHILD_ID);
+				} else if (TYPE_GROUP.equals(type)) {
+					basePanel = new GroupsPanel(CHILD_ID);
+				} else if (TYPE_ROOM.equals(type)) {
+					basePanel = new RoomsPanel(CHILD_ID);
+				} else if (TYPE_CONFIG.equals(type)) {
+					basePanel = new ConfigsPanel(CHILD_ID);
+				} else if (TYPE_LANG.equals(type)) {
+					basePanel = new LangPanel(CHILD_ID);
+				} else if (TYPE_LDAP.equals(type)) {
+					basePanel = new LdapsPanel(CHILD_ID);
+				} else if (TYPE_BACKUP.equals(type)) {
+					basePanel = new BackupPanel(CHILD_ID);
+				} else if (TYPE_SERVER.equals(type)) {
+					basePanel = new ServersPanel(CHILD_ID);
+				} else if (TYPE_OAUTH2.equals(type)) {
+					basePanel = new OAuthPanel(CHILD_ID);
+				}
+				break;
+			case profile:
+				if (TYPE_MESSAGES.equals(type)) {
+					basePanel = new SettingsPanel(CHILD_ID, MESSAGES_TAB_ID);
+				} else if (TYPE_EDIT.equals(type)) {
+					basePanel = new SettingsPanel(CHILD_ID, EDIT_PROFILE_TAB_ID);
+				}
+				break;
+			case room:
+				try {
+					Long roomId = Long.parseLong(type);
+					if (roomId != null) {
+						basePanel = new RoomPanel(CHILD_ID, roomId);
+					}
+				} catch(NumberFormatException ne) {
+					//skipit, bad roomid passed
+				}
+				break;
+			case rooms:
+				MenuParams params = MenuParams.publicTabButton;
+				if (TYPE_GROUP.equals(type)) {
+					params = MenuParams.privateTabButton;
+				} else if (TYPE_MY.equals(type)) {
+					params = MenuParams.myTabButton;
+				}
+				basePanel = new RoomsSelectorPanel(CHILD_ID, params);
+				break;
+			case user:
+				if (TYPE_CALENDAR.equals(type)) {
+					basePanel = new CalendarPanel(CHILD_ID);
+				} else if (TYPE_RECORDINGS.equals(type)) {
+					basePanel = new RecordingsPanel(CHILD_ID);
+				} else {
+					basePanel = new OmDashboardPanel(CHILD_ID);
+				}
+				break;
+			default:
+				break;
+		}
+		return basePanel;
+	}
+	
+	public String getLink() {
+		return getLink(getBean(ConfigurationDao.class).getBaseUrl());
+	}
+
+	public String getLink(String baseUrl) {
+		return baseUrl + "#" + getArea().name() + "/" + getType();
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/RecordingResourceReference.java b/src/web/java/org/apache/openmeetings/web/util/RecordingResourceReference.java
new file mode 100644
index 0000000..5ed9730
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/RecordingResourceReference.java
@@ -0,0 +1,233 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getExternalType;
+import static org.apache.openmeetings.web.app.WebSession.getRecordingId;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.red5.logging.Red5LoggerFactory.getLogger;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.io.input.BoundedInputStream;
+import org.apache.openmeetings.db.dao.record.FlvRecordingDao;
+import org.apache.openmeetings.db.dao.user.OrganisationUserDao;
+import org.apache.openmeetings.db.entity.record.FlvRecording;
+import org.apache.openmeetings.web.app.WebSession;
+import org.apache.wicket.protocol.http.servlet.ResponseIOException;
+import org.apache.wicket.request.Response;
+import org.apache.wicket.request.http.WebResponse;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.request.resource.AbstractResource;
+import org.apache.wicket.request.resource.ContentDisposition;
+import org.apache.wicket.request.resource.IResource;
+import org.apache.wicket.request.resource.IResource.Attributes;
+import org.apache.wicket.request.resource.ResourceReference;
+import org.apache.wicket.util.io.Streams;
+import org.apache.wicket.util.lang.Bytes;
+import org.apache.wicket.util.resource.FileResourceStream;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
+import org.apache.wicket.util.string.StringValue;
+import org.apache.wicket.util.time.Time;
+import org.slf4j.Logger;
+
+public abstract class RecordingResourceReference extends ResourceReference {
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = getLogger(RecordingResourceReference.class, webAppRootKey);
+
+	public RecordingResourceReference(Class<? extends RecordingResourceReference> clazz) {
+		super(clazz, "recordings");
+	}
+
+	@Override
+	public IResource getResource() {
+		return new AbstractResource() {
+			private static final long serialVersionUID = 1L;
+			private final static String ACCEPT_RANGES_HEADER = "Accept-Ranges";
+			private final static String RANGE_HEADER = "Range";
+			private final static String CONTENT_RANGE_HEADER = "Content-Range";
+			private final static String RANGES_BYTES = "bytes";
+			private File file;
+			private boolean isRange = false;
+			private long start = 0;
+			private long end = 0;
+			
+			private long getChunkLength() {
+				return isRange ? end - start + 1 : (file == null ? -1 : file.length());
+			}
+			
+			private IResourceStream getResourceStream() {
+				return file == null ? null : new FileResourceStream(file) {
+					private static final long serialVersionUID = 2546785247219805747L;
+					private transient BoundedInputStream bi;
+
+					@Override
+					public InputStream getInputStream() throws ResourceStreamNotFoundException {
+						if (bi == null) {
+							//bi = new BoundedInputStream(super.getInputStream(), end + 1);
+							bi = new BoundedInputStream(super.getInputStream(), isRange ? end + 1 : (file == null ? -1 : file.length()));
+							try {
+								bi.skip(start);
+							} catch (IOException e) {
+								throw new ResourceStreamNotFoundException(e);
+							}
+						}
+						return bi;
+					}
+					
+					@Override
+					public Bytes length() {
+						return Bytes.bytes(getChunkLength());
+					}
+					
+					@Override
+					public void close() throws IOException {
+						if (bi != null) {
+							bi.close(); //also will close original stream
+							bi = null;
+						}
+					}
+					
+					@Override
+					public String getContentType() {
+						return RecordingResourceReference.this.getContentType();
+					}
+				};
+			}
+
+			@Override
+			protected void setResponseHeaders(ResourceResponse data, Attributes attributes) {
+				Response response = attributes.getResponse();
+				if (response instanceof WebResponse) {
+					WebResponse webResponse = (WebResponse)response;
+					webResponse.setStatus(isRange ? HttpServletResponse.SC_PARTIAL_CONTENT : HttpServletResponse.SC_OK);
+				}
+				super.setResponseHeaders(data, attributes);
+			}
+
+			@Override
+			protected ResourceResponse newResourceResponse(Attributes attributes) {
+				ResourceResponse rr = new ResourceResponse();
+				FlvRecording r = getRecording(attributes);
+				if (r != null) {
+					isRange = false;
+					file = getFile(r);
+					rr.setFileName(getFileName(r));
+					rr.setContentType(RecordingResourceReference.this.getContentType());
+					rr.setContentDisposition(ContentDisposition.INLINE);
+					rr.setLastModified(Time.millis(file.lastModified()));
+					rr.getHeaders().addHeader(ACCEPT_RANGES_HEADER, RANGES_BYTES);
+					String range = ((HttpServletRequest)attributes.getRequest().getContainerRequest()).getHeader(RANGE_HEADER);
+					if (range != null && range.startsWith(RANGES_BYTES)) {
+						String[] bounds = range.substring(RANGES_BYTES.length() + 1).split("-");
+						if (bounds != null && bounds.length > 0) {
+							long length = file.length();
+							isRange = true;
+							start = Long.parseLong(bounds[0]);
+							end = bounds.length > 1 ? Long.parseLong(bounds[1]) : length - 1;
+							//Content-Range: bytes 229376-232468/232469
+							rr.getHeaders().addHeader(CONTENT_RANGE_HEADER, String.format("%s %d-%d/%d", RANGES_BYTES, start, end, length));
+						}
+					}
+					rr.setContentLength(getChunkLength());
+					rr.setWriteCallback(new WriteCallback() {
+						@Override
+						public void writeData(Attributes attributes) throws IOException {
+							IResourceStream rStream = getResourceStream();
+							try {
+								final Response response = attributes.getResponse();
+								Streams.copy(rStream.getInputStream(), response.getOutputStream());
+							} catch (ResourceStreamNotFoundException e1) {
+							} catch (ResponseIOException e) {
+								// in case of range operations we expecting such exceptions
+								if (!isRange) {
+									log.error("Error while playing the stream", e);
+								}
+							} finally {
+								rStream.close();
+							}
+						}
+					});
+				} else {
+					rr.setError(HttpServletResponse.SC_NOT_FOUND);
+				}
+				return rr;
+			}
+		};
+	}
+	
+	abstract String getContentType();
+	abstract String getFileName(FlvRecording r);
+	abstract File getFile(FlvRecording r);
+	
+	private Long getLong(StringValue id) {
+		Long result = null;
+		try {
+			result = id.toLongObject();
+		} catch(Exception e) {
+			//no-op
+		}
+		return result;
+	}
+	
+	private FlvRecording getRecording(Long id) {
+		FlvRecording r = getBean(FlvRecordingDao.class).get(id);
+		// TODO should we process public?
+		// || r.getOwnerId() == 0 || r.getParentFileExplorerItemId() == null || r.getParentFileExplorerItemId() == 0
+		if (r == null) {
+			return r;
+		}
+		if (r.getOwnerId() == null || getUserId() == r.getOwnerId()) {
+			return r;
+		}
+		if (r.getOrganization_id() == null || getBean(OrganisationUserDao.class).isUserInOrganization(r.getOrganization_id(), getUserId())) {
+			return r;
+		}
+		//TODO external group check was added for plugin recording download
+		String extType = getExternalType();
+		if (extType != null && extType.equals(r.getCreator().getExternalUserType())) {
+			return r;
+		}
+		return null;
+	}
+	
+	private FlvRecording getRecording(Attributes attributes) {
+		PageParameters params = attributes.getParameters();
+		StringValue idStr = params.get("id");
+		Long id = getLong(idStr);
+		WebSession ws = WebSession.get();
+		if (id != null && ws.isSignedIn()) {
+			return getRecording(id);
+		} else {
+			ws.invalidate();
+			if (ws.signIn(idStr.toString())) {
+				return getRecording(getRecordingId());
+			}
+		}
+		return null;
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/RoomTypeDropDown.java b/src/web/java/org/apache/openmeetings/web/util/RoomTypeDropDown.java
new file mode 100644
index 0000000..312602a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/RoomTypeDropDown.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getLanguage;
+
+import java.util.List;
+
+import org.apache.openmeetings.db.dao.room.RoomTypeDao;
+import org.apache.openmeetings.db.entity.room.RoomType;
+import org.apache.wicket.markup.html.form.ChoiceRenderer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+
+public class RoomTypeDropDown extends DropDownChoice<RoomType> {
+	private static final long serialVersionUID = 1L;
+	
+	public static List<RoomType> getRoomTypes() {
+		return getBean(RoomTypeDao.class).getAll(getLanguage());
+	}
+	
+	public RoomTypeDropDown(String id) {
+		super(id);
+		setChoices(getRoomTypes());
+		setChoiceRenderer(new ChoiceRenderer<RoomType>() {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			public Object getDisplayValue(RoomType object) {
+				return getString("" + object.getFieldvalues_id());
+			}
+
+			@Override
+			public String getIdValue(RoomType object, int index) {
+				return "" + object.getRoomtypes_id();
+			}
+		});
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/UserChoiceProvider.java b/src/web/java/org/apache/openmeetings/web/util/UserChoiceProvider.java
new file mode 100644
index 0000000..742a27f
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/UserChoiceProvider.java
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.entity.user.User.Type;
+import org.apache.wicket.ajax.json.JSONException;
+import org.apache.wicket.ajax.json.JSONWriter;
+import org.apache.wicket.extensions.validation.validator.RfcCompliantEmailAddressValidator;
+import org.apache.wicket.validation.Validatable;
+import org.wicketstuff.select2.ChoiceProvider;
+import org.wicketstuff.select2.Response;
+
+public class UserChoiceProvider implements ChoiceProvider<User> {
+	private static final long serialVersionUID = 1L;
+	private final static int PAGE_SIZE = 10;
+	private Map<String, User> newContacts = new Hashtable<String, User>();
+	
+	public static User getUser(String value) {
+		User u = null;
+		//FIXME refactor this
+		String email = null;
+		String fName = null;
+		String lName = null;
+		int idx = value.indexOf('<');
+		if (idx > -1) {
+			int idx1 = value.indexOf('>', idx);
+			if (idx1 > -1) {
+				email = value.substring(idx + 1, idx1);
+				
+				String name = value.substring(0, idx).replace("\"", "");
+				int idx2 = name.indexOf(' ');
+				if (idx2 > -1) {
+					fName = name.substring(0, idx2);
+					lName = name.substring(idx2 + 1);
+				} else {
+					fName = "";
+					lName = name;
+				}
+				 
+			}
+		} else {
+			email = value;
+		}
+		Validatable<String> valEmail = new Validatable<String>(email);
+		RfcCompliantEmailAddressValidator.getInstance().validate(valEmail);
+		if (valEmail.isValid()) {
+			u = getBean(UserDao.class).getContact(email, fName, lName, getUserId());
+		}
+		return u;
+	}
+
+	protected Object getId(User u) {
+		String id = "" + u.getUser_id();
+		if (u.getUser_id() == null) {
+			newContacts.put(u.getLogin(), u);
+			id = u.getLogin();
+		}
+		return id;
+	}
+
+	@Override
+	public void query(String term, int page, Response<User> response) {
+		User c = getUser(term);
+		if (c != null) {
+			response.add(c);
+		}
+		UserDao dao = getBean(UserDao.class);
+		response.addAll(dao.get(term, page * PAGE_SIZE, PAGE_SIZE, null, true, getUserId()));
+
+		response.setHasMore(page < dao.count(term, getUserId()) / PAGE_SIZE);
+	}
+
+	@Override
+	public Collection<User> toChoices(Collection<String> ids) {
+		Collection<User> c = new ArrayList<User>();
+		for (String id : ids) {
+			if (newContacts.containsKey(id)) {
+				c.add(newContacts.get(id));
+			} else {
+				c.add(getBean(UserDao.class).get(Long.valueOf(id)));
+			}
+		}
+		return c;
+	}
+
+    public void toJson(User choice, JSONWriter writer) throws JSONException {
+    	writer
+    		.key("id").value(getId(choice))
+    		.key("text").value(FormatHelper.formatUser(choice, true))
+    		.key("contact").value(choice.getType() == Type.contact);
+    };
+
+	@Override
+	public void detach() {
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/UserDashboard.java b/src/web/java/org/apache/openmeetings/web/util/UserDashboard.java
new file mode 100644
index 0000000..e9c43f0
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/UserDashboard.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.web.user.dashboard.MyRoomsWidget.WIDGET_ID_MY_ROOMS;
+import static org.apache.openmeetings.web.user.dashboard.RssWidget.WIDGET_ID_RSS;
+import ro.fortsoft.wicket.dashboard.DefaultDashboard;
+import ro.fortsoft.wicket.dashboard.Widget;
+
+public class UserDashboard extends DefaultDashboard {
+	private static final long serialVersionUID = 1L;
+	private boolean widgetRssDeleted = false;
+	private boolean widgetMyRoomsDeleted = false;
+	
+	public UserDashboard(String id, String title) {
+		super(id, title);
+	}
+
+	public boolean isWidgetRssDeleted() {
+		return widgetRssDeleted;
+	}
+
+	public void setWidgetRssDeleted(boolean widgetRssDeleted) {
+		this.widgetRssDeleted = widgetRssDeleted;
+	}
+
+	public boolean isWidgetMyRoomsDeleted() {
+		return widgetMyRoomsDeleted;
+	}
+
+	public void setWidgetMyRoomsDeleted(boolean widgetMyRoomsDeleted) {
+		this.widgetMyRoomsDeleted = widgetMyRoomsDeleted;
+	}
+	
+	@Override
+	public void deleteWidget(String widgetId) {
+		switch (widgetId) {
+			case WIDGET_ID_RSS:
+				widgetRssDeleted = true;
+				break;
+			case WIDGET_ID_MY_ROOMS:
+				widgetMyRoomsDeleted = true;
+				break;
+			default:
+				break;
+		}
+		super.deleteWidget(widgetId);
+	}
+	
+	@Override
+	public void addWidget(Widget widget) {
+		switch (widget.getId()) {
+			case WIDGET_ID_RSS:
+				widgetRssDeleted = false;
+				break;
+			case WIDGET_ID_MY_ROOMS:
+				widgetMyRoomsDeleted = false;
+				break;
+			default:
+				break;
+		}
+		super.addWidget(widget);
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/UserDashboardPersister.java b/src/web/java/org/apache/openmeetings/web/util/UserDashboardPersister.java
new file mode 100644
index 0000000..25a02ef
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/UserDashboardPersister.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import static org.apache.openmeetings.util.OmFileHelper.getUserDashboard;
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static org.red5.logging.Red5LoggerFactory.getLogger;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.util.Collections;
+
+import org.slf4j.Logger;
+
+import ro.fortsoft.wicket.dashboard.Dashboard;
+import ro.fortsoft.wicket.dashboard.DashboardPersister;
+import ro.fortsoft.wicket.dashboard.WidgetComparator;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+
+public class UserDashboardPersister implements DashboardPersister {
+	private static final Logger log = getLogger(UserDashboardPersister.class, webAppRootKey);
+	
+	public Dashboard load() {
+		return new XStreamDashboardPersister().load();
+	}
+
+	public void save(Dashboard dashboard) {
+		new XStreamDashboardPersister().save(dashboard);
+	}
+
+	public class XStreamDashboardPersister implements DashboardPersister {
+		private File file;
+		private XStream xstream;
+		
+		public XStreamDashboardPersister() {
+			this.file = getUserDashboard(getUserId());
+			
+	        xstream = new XStream(new DomDriver("UTF-8"));
+	        xstream.setMode(XStream.NO_REFERENCES);
+	        xstream.alias("dashboard", UserDashboard.class);
+		}
+		
+		@Override
+		public Dashboard load() {
+			if (!file.exists() || !file.isFile()) {
+				return null;
+			}
+			
+			try {
+				return (Dashboard) xstream.fromXML(new FileInputStream(file));
+			} catch (Exception e) {
+				log.error("Error while loading dashboard", e);
+				return null;
+			}
+		}
+
+		@Override
+		public void save(Dashboard dashboard) {
+			// sort widgets
+			Collections.sort(dashboard.getWidgets(), new WidgetComparator());
+			
+			try {
+				xstream.toXML(dashboard, new FileOutputStream(file));
+			} catch (Exception e) {
+				log.error("Error while saving dashboard", e);
+			}
+		}
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/UserMultiChoice.java b/src/web/java/org/apache/openmeetings/web/util/UserMultiChoice.java
new file mode 100644
index 0000000..a234148
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/UserMultiChoice.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.util;
+
+import java.util.Collection;
+
+import org.apache.openmeetings.db.entity.user.User;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.PriorityHeaderItem;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.wicketstuff.select2.Select2MultiChoice;
+
+public class UserMultiChoice extends Select2MultiChoice<User> {
+	private static final long serialVersionUID = 1L;
+
+	public UserMultiChoice(String id, IModel<Collection<User>> model) {
+		super(id, model, new UserChoiceProvider());
+		getSettings().setFormatResult("formatOmUser");
+		getSettings().setFormatSelection("formatOmUser");
+		getSettings().setEscapeMarkup("escapeOmUserMarkup");
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(getClass(), "user-multi-choice.js"), "user-multi-choice")));
+	}
+}
diff --git a/src/web/java/org/apache/openmeetings/web/util/bootstrap-fileupload.css b/src/web/java/org/apache/openmeetings/web/util/bootstrap-fileupload.css
new file mode 100644
index 0000000..d6e603a
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/bootstrap-fileupload.css
@@ -0,0 +1,124 @@
+/*!
+ * Bootstrap v2.3.1
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+.btn-file {
+	position: relative;
+	overflow: hidden;
+	vertical-align: middle;
+}
+
+.btn-file>input {
+	position: absolute;
+	top: 0;
+	right: 0;
+	margin: 0;
+	font-size: 23px;
+	cursor: pointer;
+	opacity: 0;
+	filter: alpha(opacity = 0);
+	transform: translate(-300px, 0) scale(4);
+	direction: ltr;
+}
+
+.fileupload {
+	margin-bottom: 9px;
+}
+
+.fileupload .uneditable-input {
+	display: inline-block;
+	margin-bottom: 0;
+	vertical-align: middle;
+	cursor: text;
+}
+
+.fileupload .thumbnail {
+	display: inline-block;
+	margin-bottom: 5px;
+	overflow: hidden;
+	text-align: center;
+	vertical-align: middle;
+}
+
+.fileupload .thumbnail>img {
+	display: inline-block;
+	max-height: 100%;
+	vertical-align: middle;
+}
+
+.fileupload .btn {
+	vertical-align: middle;
+}
+
+.fileupload-exists .fileupload-new,.fileupload-new .fileupload-exists {
+	display: none;
+}
+
+.fileupload-inline .fileupload-controls {
+	display: inline;
+}
+
+.fileupload-new .input-append .btn-file {
+	-webkit-border-radius: 0 3px 3px 0;
+	-moz-border-radius: 0 3px 3px 0;
+	border-radius: 0 3px 3px 0;
+}
+
+.thumbnail-borderless .thumbnail {
+	padding: 0;
+	border: none;
+	-webkit-border-radius: 0;
+	-moz-border-radius: 0;
+	border-radius: 0;
+	-webkit-box-shadow: none;
+	-moz-box-shadow: none;
+	box-shadow: none;
+}
+
+.fileupload-new.thumbnail-borderless .thumbnail {
+	border: 1px solid #ddd;
+}
+
+.control-group.warning .fileupload .uneditable-input {
+	color: #a47e3c;
+	border-color: #a47e3c;
+}
+
+.control-group.warning .fileupload .fileupload-preview {
+	color: #a47e3c;
+}
+
+.control-group.warning .fileupload .thumbnail {
+	border-color: #a47e3c;
+}
+
+.control-group.error .fileupload .uneditable-input {
+	color: #b94a48;
+	border-color: #b94a48;
+}
+
+.control-group.error .fileupload .fileupload-preview {
+	color: #b94a48;
+}
+
+.control-group.error .fileupload .thumbnail {
+	border-color: #b94a48;
+}
+
+.control-group.success .fileupload .uneditable-input {
+	color: #468847;
+	border-color: #468847;
+}
+
+.control-group.success .fileupload .fileupload-preview {
+	color: #468847;
+}
+
+.control-group.success .fileupload .thumbnail {
+	border-color: #468847;
+}
\ No newline at end of file
diff --git a/src/web/java/org/apache/openmeetings/web/util/bootstrap-fileupload.js b/src/web/java/org/apache/openmeetings/web/util/bootstrap-fileupload.js
new file mode 100644
index 0000000..97a6da5
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/bootstrap-fileupload.js
@@ -0,0 +1,169 @@
+/* ===========================================================
+ * bootstrap-fileupload.js j2
+ * http://jasny.github.com/bootstrap/javascript.html#fileupload
+ * ===========================================================
+ * Copyright 2012 Jasny BV, Netherlands.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License")
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+!function ($) {
+
+  "use strict"; // jshint ;_
+
+ /* FILEUPLOAD PUBLIC CLASS DEFINITION
+  * ================================= */
+
+  var Fileupload = function (element, options) {
+    this.$element = $(element)
+    this.type = this.$element.data('uploadtype') || (this.$element.find('.thumbnail').length > 0 ? "image" : "file")
+      
+    this.$input = this.$element.find(':file')
+    if (this.$input.length === 0) return
+
+    this.name = this.$input.attr('name') || options.name
+
+    this.$hidden = this.$element.find('input[type=hidden][name="'+this.name+'"]')
+    if (this.$hidden.length === 0) {
+      this.$hidden = $('<input type="hidden" />')
+      this.$element.prepend(this.$hidden)
+    }
+
+    this.$preview = this.$element.find('.fileupload-preview')
+    var height = this.$preview.css('height')
+    if (this.$preview.css('display') != 'inline' && height != '0px' && height != 'none') this.$preview.css('line-height', height)
+
+    this.original = {
+      'exists': this.$element.hasClass('fileupload-exists'),
+      'preview': this.$preview.html(),
+      'hiddenVal': this.$hidden.val()
+    }
+    
+    this.$remove = this.$element.find('[data-dismiss="fileupload"]')
+
+    this.$element.find('[data-trigger="fileupload"]').on('click.fileupload', $.proxy(this.trigger, this))
+
+    this.listen()
+  }
+  
+  Fileupload.prototype = {
+    
+    listen: function() {
+      this.$input.on('change.fileupload', $.proxy(this.change, this))
+      $(this.$input[0].form).on('reset.fileupload', $.proxy(this.reset, this))
+      if (this.$remove) this.$remove.on('click.fileupload', $.proxy(this.clear, this))
+    },
+    
+    change: function(e, invoked) {
+      if (invoked === 'clear') return
+      
+      var file = e.target.files !== undefined ? e.target.files[0] : (e.target.value ? { name: e.target.value.replace(/^.+\\/, '') } : null)
+      
+      if (!file) {
+        this.clear()
+        return
+      }
+      
+      this.$hidden.val('')
+      this.$hidden.attr('name', '')
+      this.$input.attr('name', this.name)
+
+      if (this.type === "image" && this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match('image.*') : file.name.match(/\.(gif|png|jpe?g)$/i)) && typeof FileReader !== "undefined") {
+        var reader = new FileReader()
+        var preview = this.$preview
+        var element = this.$element
+
+        reader.onload = function(e) {
+          preview.html('<img src="' + e.target.result + '" ' + (preview.css('max-height') != 'none' ? 'style="max-height: ' + preview.css('max-height') + ';"' : '') + ' />')
+          element.addClass('fileupload-exists').removeClass('fileupload-new')
+        }
+
+        reader.readAsDataURL(file)
+      } else {
+        this.$preview.text(file.name)
+        this.$element.addClass('fileupload-exists').removeClass('fileupload-new')
+      }
+    },
+
+    clear: function(e) {
+      this.$hidden.val('')
+      this.$hidden.attr('name', this.name)
+      this.$input.attr('name', '')
+
+      //ie8+ doesn't support changing the value of input with type=file so clone instead
+      if (navigator.userAgent.match(/msie/i)){ 
+          var inputClone = this.$input.clone(true);
+          this.$input.after(inputClone);
+          this.$input.remove();
+          this.$input = inputClone;
+      }else{
+          this.$input.val('')
+      }
+
+      this.$preview.html('')
+      this.$element.addClass('fileupload-new').removeClass('fileupload-exists')
+
+      if (e) {
+        this.$input.trigger('change', [ 'clear' ])
+        e.preventDefault()
+      }
+    },
+    
+    reset: function(e) {
+      this.clear()
+      
+      this.$hidden.val(this.original.hiddenVal)
+      this.$preview.html(this.original.preview)
+      
+      if (this.original.exists) this.$element.addClass('fileupload-exists').removeClass('fileupload-new')
+       else this.$element.addClass('fileupload-new').removeClass('fileupload-exists')
+    },
+    
+    trigger: function(e) {
+      this.$input.trigger('click')
+      e.preventDefault()
+    }
+  }
+
+  
+ /* FILEUPLOAD PLUGIN DEFINITION
+  * =========================== */
+
+  $.fn.fileupload = function (options) {
+    return this.each(function () {
+      var $this = $(this)
+      , data = $this.data('fileupload')
+      if (!data) $this.data('fileupload', (data = new Fileupload(this, options)))
+      if (typeof options == 'string') data[options]()
+    })
+  }
+
+  $.fn.fileupload.Constructor = Fileupload
+
+
+ /* FILEUPLOAD DATA-API
+  * ================== */
+
+  $(document).on('click.fileupload.data-api', '[data-provides="fileupload"]', function (e) {
+    var $this = $(this)
+    if ($this.data('fileupload')) return
+    $this.fileupload($this.data())
+      
+    var $target = $(e.target).closest('[data-dismiss="fileupload"],[data-trigger="fileupload"]');
+    if ($target.length > 0) {
+      $target.trigger('click.fileupload')
+      e.preventDefault()
+    }
+  })
+
+}(window.jQuery);
diff --git a/src/web/java/org/apache/openmeetings/web/util/user-multi-choice.js b/src/web/java/org/apache/openmeetings/web/util/user-multi-choice.js
new file mode 100644
index 0000000..de43cb3
--- /dev/null
+++ b/src/web/java/org/apache/openmeetings/web/util/user-multi-choice.js
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+function formatOmUser(user) {
+	return "<span class='user " + (user.contact ? "external" : "internal") + "' >" + user.text + "</span>";
+}
+
+function escapeOmUserMarkup(m) {
+	return m;
+}
\ No newline at end of file
diff --git a/xdocs/ApacheDerbyConfig.xml b/xdocs/ApacheDerbyConfig.xml
new file mode 100644
index 0000000..1facbbe
--- /dev/null
+++ b/xdocs/ApacheDerbyConfig.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Apache Derby Configuration</title>

+		<author email="sebawagner@apache.org">

+			Apache OpenMeetings Documentation Team

+		</author>

+	</properties>

+

+	<body>

+		<section name="Apache Derby Configuration">

+

+			<p>

+				OpenMeetings default configuration is to use Apache Derby.

+			</p>

+

+			<p>

+				It is recommended for production environments and high

+				availibility to change to an usual relational database like MySQL,

+				Postgres or DB2.

+			</p>

+			<p>

+				For more information about Apache Derby see

+				<a href="http://db.apache.org/derby/">http://db.apache.org/derby/</a>

+			</p>

+

+			<p>

+				There is a sample configuration for Apache Derby that ships with

+				every release in:

+				<br />

+				/webapps/openmeetings/WEB-INF/classes/META-INF/derby_persistence.xml

+			</p>

+

+			<p>

+				If you encounter issues, you can drop the db and then run the web

+				based installer again

+			</p>

+

+		</section>

+

+	</body>

+

+</document>

diff --git a/xdocs/ApiClassesTemplate.vm b/xdocs/ApiClassesTemplate.vm
new file mode 100644
index 0000000..1ea3714
--- /dev/null
+++ b/xdocs/ApiClassesTemplate.vm
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+          

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+-->

+

+    <!-- ====================================================================== -->

+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE TEMPLATE INSTEAD! -->

+    <!-- Main Page Section -->

+    <!-- ====================================================================== -->

+    

+     <html>

+        <head>

+		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>

+		<meta name="author" content="OpenMeetings Team">

+		<meta name="email" content="sebawagner@apache.org">

+		<title>OpenMeetings API Classes</title>

+		<link rel="stylesheet" type="text/css" href="openmeetings_docs.css">

+        </head>

+	<body>

+		#set( $foo = ".html" )

+	

+       <div class="navigation">

+	   #foreach ( $class in $classes )

+            <div>

+            <a href="$class.get("name")$foo" target="_PARENT"><b>$class.get("name")</b></a><br/>

+            <div class="navigation_comment"><i >$class.get("comment")</i></div>

+            </div>

+        #end

+        </div>

+	

+	

+	</body>

+	</html>

diff --git a/xdocs/ApiMethodsTemplate.vm b/xdocs/ApiMethodsTemplate.vm
new file mode 100644
index 0000000..57da677
--- /dev/null
+++ b/xdocs/ApiMethodsTemplate.vm
@@ -0,0 +1,153 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

+<!--

+  Licensed to the Apache Software Foundation (ASF) under one

+  or more contributor license agreements.  See the NOTICE file

+  distributed with this work for additional information

+  regarding copyright ownership.  The ASF licenses this file

+  to you under the Apache License, Version 2.0 (the

+  "License"); you may not use this file except in compliance

+  with the License.  You may obtain a copy of the License at

+  

+      http://www.apache.org/licenses/LICENSE-2.0

+          

+  Unless required by applicable law or agreed to in writing,

+  software distributed under the License is distributed on an

+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+  KIND, either express or implied.  See the License for the

+  specific language governing permissions and limitations

+  under the License.

+-->

+

+    <!-- ====================================================================== -->

+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE TEMPLATE INSTEAD! -->

+    <!-- Main Page Section -->

+    <!-- ====================================================================== -->

+    

+     <html>

+        <head>

+		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>

+		<meta name="author" content="OpenMeetings Team">

+		<meta name="email" content="sebawagner@apache.org">

+		<title>OpenMeetings API Methods</title>

+		<link rel="stylesheet" type="text/css" href="openmeetings_docs.css">

+        </head>

+	<body>

+	

+		<h3>Available WebServices:</h3>

+	

+		<iframe src="WebserviceIndex.html" width="100%" height="210" name="WebserviceIndex.html"

+			scrolling="no" marginheight="0" marginwidth="0" frameborder="0">

+		  <p>Your Browser does not support frames ...</p>

+		</iframe>

+		

+		<hr />

+	

+	   <h3>WebService: $webServiceName</h3>

+	   <p>$classComment<p>

+	   <p>WSDL sample Url: <a href="http://localhost:5080/openmeetings/services/$webServiceName?wsdl">http://localhost:5080/openmeetings/services/$webServiceName?wsdl</a><p>

+	

+	<!-- Links to Methods -->

+	   <h3>Index of Methods available in $webServiceName</h3>

+	   

+       <div class="navigation">

+	   #foreach ( $method in $methods )

+            #if ($method.isPublic()) 

+                <div>

+                <a href="#$method.name()"><b>$method.name()</b></a><br/>

+                <div class="navigation_comment"><i >$method.commentText()</i></div>

+                </div>

+           #end

+        #end

+        </div>

+	   

+	    <h3>Methods Details in $webServiceName</h3>

+	

+		#foreach ( $method in $methods )

+		    #if ($method.isPublic()) 

+		      <div class="method">

+		        <div class="method_header">

+		        <div style="margin-left:10px">

+    			<a name="$method.name()" ><b>$method.name()</b></a>

+    			</div>

+    			</div>

+    			

+    			Method: <i>$method.name() (

+    			#set ($index = 0) 

+    			#foreach ( $parameter in $method.parameters() )

+    			   #if ($index > 0) 

+    			     , 

+    			   #end

+    			   $parameter.type().simpleTypeName() $parameter.name()

+    			   #set ($index = $index+1) 

+    			#end

+    			)

+    			</i><br/>

+    			<p>

+    			  $method.commentText()

+    			</p>

+    			<p>

+                  Return Type: $method.returnType()

+                </p>

+    			<p>Params:</p>

+    			#if ( $method.paramTags().size() != $method.parameters().size() ) 

+    				<b>Warning:</b><i> Params in this method do not seem to be correctly documentated</i>

+    				<br/><br/>

+    			#end

+    			

+    			#if ($method.paramTags().size() > 0) 

+	    			<table rules="all" border="1">

+	    			   <thead>

+	    			   <tr>

+	    			     <th width="200" align="left">Type</th>

+	    			     <th width="200" align="left">Fieldname</th>

+	    			     <th width="400" align="left">Description</th>

+	    			   </tr>

+	    			   </thead>

+	    			   <tbody>

+	    			   #set ($index = 0) 

+	    			   #foreach ( $parameter in $method.paramTags() )

+	    			   <tr>

+	                     <td valign="top">

+	                     	#if ($method.parameters().size() <= $index) 

+	                     		$index Doclet Param Mismatch: fix JavaDocs in this Method!

+	                     	#else

+	                     		$method.parameters().get($index).type().simpleTypeName()

+	                     	#end 

+	                     </td>

+	                     <td valign="top">$parameter.parameterName()</td>

+	                     <td valign="top">$parameter.parameterComment()</td>

+	                   </tr>

+	                   

+	                   #set ($index = $index+1) 

+	                   #end

+	                   </tbody>

+	    			</table>

+    			#else

+    				<i>No Params</i>

+    			#end

+    			<br/>

+    			REST Sample Call/URL:<br/>

+    			#set ($link = "http://localhost:5080/openmeetings/services/"+$webServiceName+"/"+$method.name()) 

+    			#set ($displayLink = $link)

+    			#set ($index = 0)

+    			#foreach ( $parameter in $method.parameters() )

+    				#if ($index == 0)

+    					#set ($link = $link+"?")

+    					#set ($displayLink = $link)

+    				#else

+    					#set ($link = $link+"&") 

+    					#set ($displayLink = $displayLink + "&amp;")

+    				#end

+    				#set ($link = $link + $parameter.name()+"=VALUE") 

+    				#set ($displayLink = $displayLink + $parameter.name()+"=VALUE") 

+    				#set ($index = $index+1)

+				#end

+				<a href="$link">$displayLink</a>

+    		  </div>

+    	   #end

+		#end

+	

+	

+	</body>

+</html>

+

diff --git a/xdocs/BitrixPlugin.xml b/xdocs/BitrixPlugin.xml
new file mode 100644
index 0000000..87dcfc2
--- /dev/null
+++ b/xdocs/BitrixPlugin.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+	<properties>

+		<title>Bitrix Plugin</title>

+		<author email="solomax@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+	<body>

+		<section name="OpenMeetings Plugin for Bitrix">

+			<p>

+				Current Development Snapshots for testing can be created from the sources:

+				<a href="https://svn.codespot.com/a/apache-extras.org/openmeetings-bitrix-plugin/trunk">here</a>

+				.

+			</p>			

+		</section>

+		<section name="Features">

+			<p>The plugin contains the following features: </p>

+			<ul>

+				<li>Enter videoconference rooms from Bitrix (http://www.1c-bitrix.ru/): </li>

+			</ul>

+		</section>

+		<section name="Configuration">			

+			<div>

+				<b>OpenMeetings Bitrix Plugin Installation</b><br/>

+				<ol>

+					<li>Build plugin from sources</li>

+					<li>Unpack it into bitrix/modules</li>

+					<li>Install via Admin</li>

+					<li>Add OPenmeetings component to any page.</li>

+				</ol>              

+			</div>

+		</section>

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/BuildInstructions.xml b/xdocs/BuildInstructions.xml
new file mode 100644
index 0000000..6f92f12
--- /dev/null
+++ b/xdocs/BuildInstructions.xml
@@ -0,0 +1,338 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Build instructions</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Nightly Builds">

+

+			<p>

+				You can find Nightly Builds of the software at:

+				<a href="https://builds.apache.org/view/M-R/view/OpenMeetings/"

+					rel="nofollow" target="_BLANK">

+					https://builds.apache.org/view/M-R/view/OpenMeetings/

+				</a>

+			</p>

+

+		</section>

+

+		<section name="How to Build a Distribution">

+

+			<div>

+				<p>To build a binary release of OpenMeetings you need: </p>

+				<ul>

+					<li>Sun JDK6</li>

+					<li>Apache ANT (minimum) 1.8.3</li>

+					<li>

+						SVN Command line client (Subversion 1.7 required!)

+						<a href="http://subversion.apache.org/packages.html" target="_BLANK"

+							rel="nofollow">http://subversion.apache.org/packages.html</a>

+					</li>

+				</ul>

+			</div>

+

+			<p>Get the source: </p>

+			<div class="xmlcode">

+				svn checkout

+				https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/

+			</div>

+			<p>Run the command: </p>

+			<div class="xmlcode">

+				ant

+			</div>

+			<p>There is no need to compile the client additionally! The ant task

+				does it all! You will find a directory dist that contains

+				OpenMeetings and a red5-server.

+			</p>

+			<p>To compile the client you can also use ant: </p>

+			<div class="xmlcode">

+				ant

+				<span style="margin-left: 200px;"># compiles a complete package into the folder dist

+				</span>

+				<br />

+				ant compile.laszlo.main

+				<span style="margin-left: 70px;"># compiles the client into main.as3.swf10.swf and

+					main.swf8.swf</span>

+				<br />

+				ant compile.laszlo.main.debug

+				<span style="margin-left: 30px;"># compiles the debug-client into

+					maindebug.as3.swf10.swf and maindebug.swf8.swf

+				</span>

+				<br />

+				ant -Ddb=&lt;name of DB&gt;

+				<span style="margin-left: 50px;"># will copy &lt;name of DB&gt;_persistense.xml to

+					persistense.xml

+				</span>

+				<br />

+				<span style="margin-left: 230px;">#(for ex. ant -Ddb=mysql will set mysql as default

+					DB)

+				</span>

+			</div>

+			<p>To compile just the openmeetings JAR file: </p>

+			<div class="xmlcode">

+				ant jar.only

+			</div>

+			<p>

+				To run Junit tests using ANT see

+				<a href="JUnitTesting.html">JUnitTesting</a>

+			</p>

+		</section>

+

+		<section name="Run, Develop, Test">

+

+			<p>

+				To develop or build OpenMeetings you checkout the source as Eclipse

+				project. You need the Subclipse or Subversive Plugin for Eclipse. If

+				you just need to change 3 lines of code then your probably better

+				switch to

+				<a href="#How_to_build_a_distribution" rel="nofollow">How to build a

+					distribution

+				</a>

+				.

+			</p>

+

+			<subsection name="Step1 - Get required Software">

+

+				<p>To develop OpenMeetings you need at least: </p>

+				<ul>

+					<li>Eclipse in a up to date copy and Sun JDK6 </li>

+					<li>Apache ANT (minimum) 1.8.3</li>

+					<li>

+						Subclipse 1.8 (Subversion 1.7 required!)

+						<a href="http://subclipse.tigris.org/" target="_BLANK" rel="nofollow">http://subclipse.tigris.org/

+						</a>

+					</li>

+					<li>

+						SVN Command line client (Subversion 1.7 required!)

+						<a href="http://subversion.apache.org/packages.html" target="_BLANK"

+							rel="nofollow">http://subversion.apache.org/packages.html</a>

+					</li>

+					<li>Spring IDE for Eclipse (installable via Help &gt; Eclipse

+						Marketplace)

+					</li>

+					<li>

+						Apache IvyDE&#8482; For Eclipse (installable via Help &gt; Install

+						New Software)

+						URL: http://www.apache.org/dist/ant/ivyde/updatesite

+						detailed steps can be found here:

+						<a href="http://ant.apache.org/ivy/ivyde/download.cgi" target="_BLANK"

+							rel="nofollow">http://ant.apache.org/ivy/ivyde/download.cgi</a>

+					</li>

+					<li>MySQL (or Postgres, or other Databases supported by openJPA)

+						are optionally but handy to have them

+					</li>

+				</ul>

+

+			</subsection>

+

+			<subsection name="Step2 - Download the Source">

+

+				<p>Advanced Users: Check out the Code from the Repository as a

+					Java

+					project into Eclipse.

+				</p>

+				<p>

+					URL:

+					<a

+						href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/">

+						https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/

+					</a>

+				</p>

+				<p>To download the required JARs for building and developing

+					OpenMeetings you need to run the ANT comand:

+				</p>

+				<div class="xmlcode">

+					ant -Ddb=&lt;your_DB&gt; prepare-eclipse

+				</div>

+				<p>After the ANT command you need to press F5 and rebuild the

+					project from inside Eclipse

+				</p>

+				<p>Step-By-Step: </p>

+				<p>1) Start Eclipse </p>

+				<p>

+					2) Change Perspective to SVN Repository Exploring:

+					<br />

+					<br />

+					<a class="fancybox-buttons" href="images/checkout_1.png">

+						<img src="images/checkout_1.png" alt="" width="400" height="289" />

+					</a>

+

+				</p>

+				<p>

+					3) Select SVN Repository Exploring and click ok.

+					<br />

+					<br />

+					<a class="fancybox-buttons" href="images/checkout_2.png">

+						<img src="images/checkout_2.png" alt="" width="304" height="417" />

+					</a>

+				</p>

+				<p>

+					4) A new Dialog in Eclipse opens

+					<strong>SVN Repositories</strong>

+					<br />

+					<br />

+					<a class="fancybox-buttons" href="images/checkout_3.png">

+						<img src="images/checkout_3.png" alt="" width="460" height="102" />

+					</a>

+				</p>

+				<p>

+					5) Click on the icon with the plus in the top right corner in the

+					SVN Repository Dialog

+					<br />

+					<br />

+					<a class="fancybox-buttons" href="images/checkout_4.png">

+						<img src="images/checkout_4.png" alt="" width="57" height="38" />

+					</a>

+				</p>

+				<p>

+					6) Add the URL

+					<a

+						href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/"

+						rel="nofollow">https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/

+					</a>

+					and click Finish

+					<br />

+					<br />

+					<a class="fancybox-buttons" href="images/checkout_5.png">

+						<img src="images/checkout_5.png" alt="" width="455" height="272" />

+					</a>

+				</p>

+				<p>

+					7) After download is complete you see a new Source Repository in

+					the Repository Explorer. Right click on it and choose

+					<strong>checkout</strong>

+					<br />

+					<br />

+					<a class="fancybox-buttons" href="images/checkout_6.png">

+						<img src="images/checkout_6.png" alt="" width="340" height="135" />

+					</a>

+				</p>

+				<p>

+					8) In the Dialog the opens now just click next

+					<br />

+					<br />

+					<a class="fancybox-buttons" href="images/checkout_7.png">

+						<img src="images/checkout_7.png" alt="" width="390" height="338" />

+					</a>

+				</p>

+				<p>

+					9) In the next Dialog just click Finish, Eclipse will then download

+					the sources

+					<br />

+					<br />

+					<a class="fancybox-buttons" href="images/checkout_8.png">

+						<img src="images/checkout_8.png" alt="" width="390" height="338" />

+					</a>

+				</p>

+				<p>

+					10) After the download is complete you will see a new Project in

+					the Package Explorer Dialog of Eclipse

+					<br />

+					<br />

+					<a class="fancybox-buttons" href="images/checkout_9.png">

+						<img src="images/checkout_9.png" alt="" width="310" height="297" />

+					</a>

+				</p>

+				<div>

+					11) Please run

+					<div class="xmlcode">

+						ant prepare-eclipse

+					</div>

+					to download all necessary jar files, and perform source

+					<tt>Refresh</tt>

+					to resolve all compilation issues.

+				</div>

+			</subsection>

+

+			<subsection name="Step3 - Deploy and Run">

+

+				<p>

+					see the first chapter about the ANT tasks to compile the code. You

+					will find a directory called

+					<strong>dist</strong>

+					which contains a regular openmeetings including red5. You can then

+					use the usual process like described at

+					<a href="installation.html">installation</a>

+					to run the code then.

+				</p>

+			</subsection>

+

+		</section>

+

+		<section name="Links">

+

+			<ul>

+				<li>

+					Getting Started with OpenLaszlo, checkout

+					<a

+						href="http://www.openlaszlo.org/lps4.2/laszlo-explorer/index.jsp?lzr=swf8"

+						target="_BLANK" rel="nofollow">Laszlo-in-10-Minutes</a>

+					and the

+					<a href="http://www.openlaszlo.org/lps4.2/docs/" target="_BLANK"

+						rel="nofollow">Application

+						Developer's Guide

+					</a>

+					or try the

+					<a href="http://www.openlaszlo.org/getstarted" target="_BLANK"

+						rel="nofollow">ScreenCast</a>

+				</li>

+				<li>

+					<a href="http://openmeetings.apache.org/svn.html">

+						browse SVN source

+					</a>

+				</li>

+			</ul>

+

+		</section>

+

+		<section name="Tipps and Gotchas">

+

+			<p>When you want to develop only client side there are handy ANT

+				tasks so that you only rebuild the SWFs, same for the Java side.

+			</p>

+			<p>

+				It

+				also takes much less time if you do use MySQL as database then

+				rebuilding the software and waiting for Apache Derby to set up the

+				database everytime you did rebuild.

+			</p>

+			<p>

+				<b>Working behind a proxy:</b>

+				If you are sitting behind a proxy you should add some proxy settings

+				before starting the build process.

+				<br />

+				For Apache Ivy see:

+				<a href="http://ant.apache.org/ivy/faq.html" target="_BLANK" rel="nofollow">http://ant.apache.org/ivy/faq.html

+				</a>

+				<br />

+				For SVN Command Line Client (From CollabNet 1.7) see:

+				<a

+					href="https://ctf6latest.collab.net/internal-help/index.jsp?topic=/teamforge610/faq/client_proxy_settings.html"

+					target="_BLANK" rel="nofollow">https://ctf6latest.collab.net/internal-help/index.jsp?topic=/teamforge610/faq/client_proxy_settings.html

+				</a>

+			</p>

+

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/CalendarAndTimezone.xml b/xdocs/CalendarAndTimezone.xml
new file mode 100644
index 0000000..4846e2f
--- /dev/null
+++ b/xdocs/CalendarAndTimezone.xml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Changing the Calendar and Timezone default</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Changing the Calendar and Timezone default">

+

+			<p>

+				In general the timezone is configured in the user profile of each

+				user, so changing the server timezone has no effect how to the users

+				calendar for example.

+				<br />

+				<br />

+				However there are some circumstances where there is no user profile

+				available.

+			</p>

+		</section>

+

+		<section

+			name="Changing servers default timzeone for Emails and Invitations (display)">

+			<p>

+				Goto Administration &gt; Configuration and change the config-key:

+				<tt>default.timezone</tt>

+			</p>

+			<p>Valid timezone have to meet standards! </p>

+		</section>

+

+		<section

+			name="Changing first day in week for calendar from Sunday to Monday">

+

+			<p>in the public/config.xml change the key: </p>

+			<div class="xmlcode">

+				&lt;!--

+				<br />

+				First day in the Week used by the Calendar

+				<br />

+				0 means Sunday

+				<br />

+				1 means Monday

+				<br />

+				this is the way how the Celendar inits a week

+				<br />

+				--&gt;

+				<br />

+				&lt;firstdayinweek&gt;0&lt;/firstdayinweek&gt;

+				<br />

+			</div>

+		</section>

+

+		<section

+			name="Changing the default number of max participants of a conference room created via calendar">

+

+			<p>Goto

+				Administration &gt; Configuration and change the config-key:

+				<tt>calendar.conference.rooms.default.size</tt>

+			</p>

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/Clustering.xml b/xdocs/Clustering.xml
new file mode 100644
index 0000000..5f7edcf
--- /dev/null
+++ b/xdocs/Clustering.xml
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+	<properties>

+		<title>Clustering</title>

+		<author email="solomax@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+		<section name="Description">

+			<p>

+				OpenMeetings 2.1 or later is required to use clustering. One database is used for all OpenMeetings 

+				servers, so all database tables are shared across OM instances. Certain folders should be shared 

+				between all servers to allow access to the files/recording.</p>

+		</section>

+		<section name="Configuration">

+			<ul>

+				<li>

+					Multiple OM servers should be set up as described in

+					<a href="installation.html" target="_BLANK">

+						<b>Installation</b>

+					</a>

+				</li>

+				<li>All servers should be configured to have same Time zone (To avoid

+					Schedulers to drop user sessions as outdated)

+				</li>

+				<li>All servers should be configured to use the same DB</li>

+				<li>Servers should be added in Administration -&gt; Servers section</li>

+			</ul>

+		</section>

+		<section name="Database">

+			All servers should be configured to use the same database. It can be on the server or on the one node 

+			of the cluster. 

+			<ul>

+				<li>Add users who can connect to the database remotely</li>

+				<li>Update <tt>/opt/red5/webapps/openmeetings/WEB-INF/classes/META-INF/persistence.xml</tt>

+					set correct server address, login and password. Also add the following section:

+					<div class="xmlcode">&lt;property name="openjpa.RemoteCommitProvider" value="tcp(Addresses=10.1.1.1;10.1.1.2)" /&gt;</div>

+					Instead of the 10.1.1.1 and 10.1.1.2 set semicolon separated IPs of all nodes of the cluster.

+				</li>

+			</ul>

+		</section>

+		<section name="File systems">

+			If files and recordings using the same physical folders the files and recordings will be available for 

+			each node. You can do this using Samba or NFS, for example. For using NFS do the following:

+			<ul>

+				<li>Install NFS to the data server. In the file <tt>/etc/exports</tt> add the following lines:

+					<div class="xmlcode">

+						/opt/red5/webapps/openmeetings/upload 10.1.1.2(rw,sync,no_subtree_check,no_root_squash)<br/>

+						/opt/red5/webapps/openmeetings/streams 10.1.1.2(rw,sync,no_subtree_check,no_root_squash)

+					</div>

+					Here 10.1.1.2 - is node ip for NFS remote access. Add these lines for all nodes except node with 

+					folders.

+				</li>

+				<li>

+					Install NFS common tools to other nodes. In the file <tt>/etc/fstab</tt> do the following:

+					<div class="xmlcode">

+						10.1.1.1:/opt/red5/webapps/openmeetings/upload/<br/>

+						/opt/red5/webapps/openmeetings/upload nfs timeo=50,hard,intr<br/>

+						10.1.1.1:/opt/red5/webapps/openmeetings/streams/<br/>

+						/opt/red5/webapps/openmeetings/streams nfs timeo=50,hard,intr

+					</div>

+					Here 10.1.1.1 – data server ip. And run the command:

+					<div class="xmlcode">

+						mount -a

+					</div>

+				</li>

+			</ul> 

+		</section>

+		<section name="OM nodes configuration">

+			In the file <tt>/opt/red5/webapps/openmeetings/WEB-INF/openmeetings-applicationContext.xml</tt>:

+			<ul>

+				<li>

+					For each node uncomment line:

+					<div class="xmlcode">

+						&lt;!-- Need to be uncommented and set to the real ID if in cluster mode--&gt;<br/>

+						&lt;property name="serverId" value="1" /&gt;

+					</div>

+					and input the unique value for each node.

+				</li>

+				<li> 

+					Replace <tt>&lt;ref bean="openmeetings.HashMapStore" /&gt;  &lt;!-- Memory based session cache by default --&gt;</tt><br/>

+					with <tt>&lt;ref bean="openmeetings.DatabaseStore" /&gt;</tt> 

+					(Currently commented out with following comment: <tt>"The following section should be used in clustering mode"</tt>)

+				</li>

+			</ul>

+		</section>

+		<section name="Configuring cluster in Administration">

+			Run red5 on each node. Login to the system as admin.

+			<ul>

+				<li>Go to the <tt>Administration -&gt; Users</tt> and create Webservice user (only access via SOAP).</li>

+				<li>

+					Go to the <tt>Administration -&gt; Servers</tt> and add all cluster nodes with the following settings:

+					<div class="xmlcode">

+						Server Name = node name;<br/>

+						Active = check the checkbox. If the checkbox is checked it means node is active and you can use this node;<br/>

+						Server Address = node ip;<br/>

+						HTTP Port = 5080 - port for http part of Openmeetings;<br/>

+						User (SOAP Access) = login of Webservice user from the previous step;<br/>

+						Password = password of Webservise user;<br/>

+						Webapp path = openmeetings - path where OM installed on this node, it would be better if this path will be the same for all nodes;<br/>

+						Protocol = http.

+					</div>

+				</li> 

+			</ul>

+			<img src="images/cluster1.png" alt="" width="650" height="461" />

+		</section>

+		<section name="Ensure everything works as expected">

+			<ul>

+				<li>Set up the cluster and loggin with two users, go to the same room (also check before room 

+				entering that the status page with the room list shows the correct number of participants before 

+				entering the room). You should login to the same server initially, the server will redirect you 

+				for the conference room to the appropriate server automatically. Both users should be in the same room.

+				</li>

+				<li>Do the same with only two users but go to _different_ rooms. The calculation should send 

+				both users to different servers, cause based on the calculation two different rooms on a cluster 

+				with two nodes should go exactly one room for each node. You can now loggin really to node1 

+				and node2 of your cluster while those users are loggedin and go to <tt>Administration &gt; Connections</tt>

+				and check in the column "servers" where they are located. They should be on different server.

+				</li>

+			</ul>

+			<img src="images/cluster2.png" alt="" width="650" height="369" />

+		</section>

+	</body>

+</document>
\ No newline at end of file
diff --git a/xdocs/CommandLineAdmin.xml b/xdocs/CommandLineAdmin.xml
new file mode 100644
index 0000000..f6a46e1
--- /dev/null
+++ b/xdocs/CommandLineAdmin.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+	<properties>

+		<title>Command line admin</title>

+		<author email="solomax@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+	<body>

+		<section name="Usage">

+			<p>To avoid intensive traffic utilization and save your time you can

+				use command line admin to achieve following tasks:</p>

+			<ul>

+				<li>Install using defaults</li>

+				<li>Install from backup</li>

+				<li>Backup</li>

+				<li>Cleanup</li>

+			</ul>

+			<p>Some example commands:</p>

+			<p>MySQL (requires to place the MySQL JDBC driver into webapps/openmeetings/WEB-INF/lib before running the command):</p>

+			<div>

+				<div class="xmlcode">

+./admin.sh -i -v -tz Europe/Berlin -email your.email@gmail.com -group webbase -user admin --smtp-server localhost --db-type mysql --db-name openmeetings_db --email-auth-user noreply@webbase-design.de --password 123qweasd --system-email-address noreply@webbase-design.de --db-user root --db-host localhost --email-auth-pass 123qweasd<br/>

+				</div>

+			</div>

+			<p>Derby (Not recommended for production environment):</p>

+			<div>

+				<div class="xmlcode">

+./admin.sh -i -v -tz Europe/Berlin -email seba.wagner@gmail.com -group webbase -user admin --smtp-server localhost --email-auth-user noreply@webbase-design.de --password 123qweasd --system-email-address noreply@webbase-design.de --email-auth-pass 123qweasd<br/>

+				</div>

+			</div>

+		</section>

+		<section name="Command reference">	

+			<div>

+				<div class="xmlcode">

+ -v,--verbose                        verbose error messages<br/>

+--------------------------------------------------------------------------------------------------<br/>

+ -h,--help                           prints this message<br/>

+--------------------------------------------------------------------------------------------------<br/>

+ -b,--backup                         Backups OM<br/>

+<span style="margin-left: 50px;">-file &lt;arg&gt;                       (optional) file used for backup/restore/install</span><br/>

+<span style="margin-left: 100px;">--exclude-files                (optional) should backup exclude files [default: include]</span><br/>

+--------------------------------------------------------------------------------------------------<br/>

+ -r,--restore                        Restores OM<br/>

+<span style="margin-left: 50px;">-file &lt;arg&gt;                       file used for backup/restore/install</span><br/>

+--------------------------------------------------------------------------------------------------<br/>

+ -l,--languages                      Reimport All language files into DB<br/>

+<span style="margin-left: 50px;">-lang,--language &lt;arg&gt;            (optional) Single language to be imported (id or name)</span><br/>

+--------------------------------------------------------------------------------------------------<br/>

+ -i,--install                        Fill DB table, and make OM usable<br/>

+<span style="margin-left: 50px;">-user &lt;arg&gt;                       Login name of the default user, minimum 4 characters (mutually exclusive with 'file')</span><br/>

+<span style="margin-left: 50px;">-group &lt;arg&gt;                      The name of the default user group (mutually exclusive with 'file')</span><br/>

+<span style="margin-left: 50px;">-email &lt;arg&gt;                      Email of the default user (mutually exclusive with 'file')</span><br/>

+<span style="margin-left: 50px;">-tz &lt;arg&gt;                         Default server time zone, and time zone for the selected user (mutually exclusive with 'file') file used for backup/restore/install</span><br/>

+<span style="margin-left: 100px;">--email-auth-pass &lt;arg&gt;        (optional) Email auth password (anonymous connection will be used if not set)</span><br/>

+<span style="margin-left: 100px;">--db-host &lt;arg&gt;                (optional) DNS name or IP address of database</span><br/>

+<span style="margin-left: 100px;">--drop                         (optional) Drop database before installation</span><br/>

+<span style="margin-left: 100px;">--db-user &lt;arg&gt;                (optional) User with write access to the DB specified</span><br/>

+<span style="margin-left: 100px;">--system-email-address &lt;arg&gt;   (optional) System e-mail address [default: noreply@openmeetings.apache.org]</span><br/>

+<span style="margin-left: 100px;">--password &lt;arg&gt;               (optional) Password of the default user, minimum 4 characters (will be prompted if not set)</span><br/>

+<span style="margin-left: 100px;">--email-use-tls                (optional) Is secure e-mail connection [default: no]</span><br/>

+<span style="margin-left: 100px;">--email-auth-user &lt;arg&gt;        (optional) Email auth username (anonymous connection will be used if not set)</span><br/>

+<span style="margin-left: 100px;">--db-port &lt;arg&gt;                (optional) Database port</span><br/>

+<span style="margin-left: 100px;">--smtp-port &lt;arg&gt;              (optional) SMTP server for outgoing e-mails [default: 25]</span><br/>

+<span style="margin-left: 100px;">--db-name &lt;arg&gt;                (optional) The name of Openmeetings database</span><br/>

+<span style="margin-left: 100px;">--disable-frontend-register    (optional) Do not allow front end register [allowed by default]</span><br/>

+<span style="margin-left: 100px;">--db-type &lt;arg&gt;                (optional) The type of the DB to be used</span><br/>

+<span style="margin-left: 100px;">--skip-default-rooms           (optional) Do not create default rooms [created by default]</span><br/>

+<span style="margin-left: 100px;">--force                        (optional) Install without checking the existence of old data in the database.</span><br/>

+<span style="margin-left: 100px;">--smtp-server &lt;arg&gt;            (optional) SMTP server for outgoing e-mails [default: localhost]</span><br/>

+<span style="margin-left: 100px;">--db-pass &lt;arg&gt;                (optional) Password of the user with write access to the DB specified</span><br/>

+--------------------------------------------------------------------------------------------------<br/>

+ -f,--files                          File operations - statictics/cleanup<br/>

+<span style="margin-left: 100px;">--cleanup                      (optional) Should intermediate files be clean up</span><br/>

+--------------------------------------------------------------------------------------------------<br/>

+				</div>

+			</div>

+		</section>

+	</body>

+</document>

diff --git a/xdocs/ConferenceRoomLayoutOptions.xml b/xdocs/ConferenceRoomLayoutOptions.xml
new file mode 100644
index 0000000..8a7aae5
--- /dev/null
+++ b/xdocs/ConferenceRoomLayoutOptions.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+    <properties>

+        <title>Layout options for a conference room in OpenMeetings</title>

+        <author email="sebawagner@apache.org">

+            OpenMeetings Team

+        </author>

+    </properties>

+

+    <body>

+

+        <section name="Layout options for conference rooms">

+

+            <p>Each room has a number of attributes to generate different layouts.

+            You can change those values individually for each room in Administration &gt; Rooms

+            </p>

+            <p></p>

+            <table>

+                <tr>

+                    <th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> key </th>

+                    <th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> default </th>

+                    <th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> meaning </th>

+                    <th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> availabe since OpenMeetings version </th>

+                </tr>

+                <tr>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideTopBar </td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the top bar with the menus and exit button </td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>

+                </tr>

+                <tr>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideChat </td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the chat tab and use space for whiteboard </td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>

+                </tr>

+                <tr>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideActivitiesAndActions </td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the activities window with the notofications aber user activities</td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>

+                </tr>

+                <tr>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideFilesExplorer </td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the file explorer</td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>

+                </tr>

+                <tr>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideActionsMenu </td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the menu with the actions</td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>

+                </tr>

+                <tr>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideScreenSharing </td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the button to start screensharing/recording</td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>

+                </tr>

+                <tr>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> hideWhiteboard </td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Hide the whiteboard, if this option is true, the videos will be in the area of the whiteboard</td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>

+                </tr>

+                <tr>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> showMicrophoneStatus </td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> false </td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Show the current status of the microphone (off/on) on the bottom of each video view</td>

+                    <td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.x </td>

+                </tr>

+            </table>

+

+        </section>

+        

+    </body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/ConfluencePlugin.xml b/xdocs/ConfluencePlugin.xml
new file mode 100644
index 0000000..44608d0
--- /dev/null
+++ b/xdocs/ConfluencePlugin.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Confluence Plugin</title>

+		<author email="eschwert@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Confluence Plugin for OpenMeetings">

+			<p>				

+				Current Development Snapshots for testing can be downloaded from:

+				<a href="https://svn.apache.org/repos/asf/openmeetings/branches/confluence-plugin/target/openmeetingsconfluence-1.0-SNAPSHOT.jar">here</a>

+				.

+			</p>			

+		</section>

+		

+		<section name="Features">

+			<p>The plugin contains the following features: </p>

+			<ul>

+				<li>Create videoconference rooms through Confluence: </li>

+				<li>

+					<ol>

+						<li>Integrated with Confluence content </li>										

+						<li>Configurable room type </li>

+					</ol>

+				</li>

+			</ul>

+		</section>	

+		

+		<section name="Demo video">			

+			<p>The demo video of Confluence plugin show you the plugin in action </p>              

+		      <object style="height: 390px; width: 640px">

+			      <param name="movie" value="http://www.youtube.com/v/YFKlXggtld0?version=3&amp;feature=player_detailpage"/>

+			      <param name="allowFullScreen" value="true"/>

+			      <param name="allowScriptAccess" value="always"/>

+			      <embed src="http://www.youtube.com/v/YFKlXggtld0?version=3&amp;feature=player_detailpage" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360"/>

+		      </object> 

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/CustomCryptMechanism.xml b/xdocs/CustomCryptMechanism.xml
new file mode 100644
index 0000000..d4967b3
--- /dev/null
+++ b/xdocs/CustomCryptMechanism.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+	<properties>

+		<title>Howto create a Custom Crypt styles</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+	<body>

+		<section name="Configuration of Custom Crypt-Style">

+			<p>

+				You can use custom Crypt-Types, but you should decide during

+				installation which Type of encryption you want to use. By default

+				two type are available:

+			</p>

+

+			<ul>

+				<li>org.xmlcrm.utils.crypt.MD5Implementation - this uses common MD5

+					Crypt like PHP does, this is the default one (results in something

+					like: fe01ce2a7fbac8fafaed7c982a04e229)</li>

+				<li>org.xmlcrm.utils.crypt.MD5CryptImplementation - does use

+					BSD-Style of encryption using a salt (results in something like:

+					$1$GMsj7F2I$5S3r9CeukXGXNwf6b4sph1)</li>

+			</ul>

+			<p>

+				You can edit the config-key during Installation or later in the

+				Administration Panel. But if you change it using the

+				Administration-Panel previous passwords might be not working anymore

+				as they are encrypted with another algorithm.

+			</p>

+		</section>

+		<section name="Configuration of Custom Crypt-Style">

+			<p>

+				To add your own crypt style you need to write a class which

+				implements the interface: org.xmlcrm.utils.cryptCryptString

+				<br />

+				and extends the Adapter: org.xmlcrm.utils.CryptStringAdapter

+				<br />

+				Example of an Implementation:

+			</p>

+			<div class="xmlcode">

+				package org.xmlcrm.utils.crypt;

+				

+				import java.security.NoSuchAlgorithmException;

+				

+				public class MD5Implementation extends CryptStringAdapter implements CryptString {

+				

+				        @Override

+				        public String createPassPhrase(String userGivenPass) {

+				                String passPhrase = null;

+				                try {

+				                        passPhrase = MD5.do_checksum(userGivenPass);

+				                } catch (NoSuchAlgorithmException e) {

+				                        e.printStackTrace();

+				                }

+				                return passPhrase;

+				        }

+				

+				        @Override

+				        public Boolean verifyPassword(String passGiven, String passwdFromDb) {

+				                return (passwdFromDb.equals(createPassPhrase(passGiven)));

+				        }

+				        

+				}

+			</div>

+			<p>To add your own Encryption-Class you need to add your class to the

+				OpenMeetings-Webapp (make it available to the webapp-classpath) and

+				use your custom-class-name instead of

+				org.xmlcrm.utils.crypt.MD5Implementation during the Installation or

+				at runtime by editing the config-key crypt_ClassName</p>

+		</section>

+		<section name="Configuration of Custom Crypt-Style">

+			<p>credits goto Mika for sharing his Implementation of the

+				MD5Crypt-Style</p>

+		</section>

+	</body>

+</document>

diff --git a/xdocs/CustomRoomTypeHowTo.xml b/xdocs/CustomRoomTypeHowTo.xml
new file mode 100644
index 0000000..d86ba12
--- /dev/null
+++ b/xdocs/CustomRoomTypeHowTo.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Howto create a custom room type in OpenMeetings</title>

+		<author email="sebawagner@apache.org">

+            OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Why creating a custom room type in OpenMeetings">

+

+			<p>If you want to create your own styled room the best thing to do in 

+            order to be "update-save" is to create your own custom room type. There is an empty configuration 

+				by default shipped with every release of OpenMeetings, the room type "custom" (ID = 5).<br/>

+				<br/>

+            You can use that and extend it, or you can add more room types to fit your use case.

+			</p>

+			<p></p>

+		</section>

+		

+		<section name="Create your own room type class (User Interface)">

+			

+			<p>Lets start by creating your custom room type class.

+				<br/>

+					You could for example duplicate an existing room class, from <br/>

+					<tt>src/modules/conference/flexibleConferenceRoom</tt> folder, for example the 

+			flexibleConferenceRoom.lzx: Generate a duplicate, change the name, for example to 

+			myCustomConferenceRoom.lzx and edit the class name inside the file name="flexibleConferenceRoom" to

+			name="myCustomConferenceRoom". Also don't miss to add an entry to library.lzx so that the compiler 

+			will find your new class.

+			</p>

+			

+		</section>

+        

+		<section name="Create nesseccary entries in configuration tables">

+        	

+			<p>You first need to create a number of configuration files </p>

+			<ul>

+				<li>To have your roomtype available everytime you install OpenMeetings you need to add 

+					it to the default rooms: <tt>ImportInitvalues.java Method: loadDefaultRooms()</tt>. Add your entry here. 

+				You can choose any random name for the room. The ID is the important trigger for the room type 

+				to identify later. You need to run the installer so that your new room type is in the database.</li>

+				

+				<li>Add your room type in the default module configuration: 

+					<tt>src/base/moduleConfiguration.lzx</tt>, 

+				here you need to add a default class name for your room type </li>

+				

+				<li>Add your room type in the real configuration: public/config.xml, add a new entry.

+					<br/>

+					You should fix also the file <tt>public/config.xsd</tt> that is the Schema file for the public/config.xml.

+				</li>

+        		

+				<li>Add a parser entry to modify the room type mapping: 

+					<tt>base/mainMethods.lzx method: myinit</tt>. You 

+        		can see some example parsing, you should add your one similar to the existing room types.</li>

+        		

+			</ul>

+			

+		</section>

+		

+		<section name="Link your room type config with your room type class ">

+			

+			<p>Now you need to make sure that everytime the conference room is created 

+			your new class "myCustomConferenceRoom" is used. There are 3 places you need to add your mapping.</p>

+			

+			<ul>

+				<li>In the global mapping: 

+					<tt>base/mainMethods.lzx method name="setRoomValues"</tt> 

+				</li>

+				<li>In file: 

+					<tt>modules/conference/conference/roomListItem.lzx method name="initRoom"</tt> 

+				</li>

+				<li>In file: 

+					<tt>modules/invitation/autoloaderBarOnly.lzx netRemoteCallHib name="setUsernameAndSession"</tt> 

+				</li>

+			</ul>

+			

+			<p>Thats it. You can add/edit/delete your room with the new room type in the Administration > Rooms interface of 

+			OpenMeetings like any other room.</p>

+			<p>If you need to have this room type available as option in the Calendar UI, you need to add it to the combobox manually.</p>

+			

+		</section>

+		

+		

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/Dashboard.xml b/xdocs/Dashboard.xml
new file mode 100644
index 0000000..a0e7c61
--- /dev/null
+++ b/xdocs/Dashboard.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Changing Dashboard</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Changing Dashboard">

+

+			<p>You can configure the tabs that are visible by default at bottom

+				of the dashboard. To edit the settings, login as admin and goto

+				Administration &gt; Configuration </p>

+			<p></p>

+			<table>

+				<tr>

+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Config-key </th>

+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Values </th>

+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Meaning </th>

+				</tr>

+				<tr>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> default.dashboard.tab </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 0,1,2 </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Which tab should be shown by default, counting

+						starts with 0

+					</td>

+				</tr>

+				<tr>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> dashboard.show.myrooms </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 0 or 1 </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> If the MyRooms tab should be visible or not </td>

+				</tr>

+				<tr>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> dashboard.show.chat </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 0 or 1 </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> If the Chat tab should be visible or not </td>

+				</tr>

+				<tr>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> dashboard.show.rssfeed </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 0 or 1 </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> If the RSS-Feed tab should be visible or not </td>

+				</tr>

+				<tr>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> rss_feed1 </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> http-URL </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> ATOM-Feed URL for the dashboard RSS Tab </td>

+				</tr>

+				<tr>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> rss_feed2 </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> http-URL </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> ATOM-Feed URL for the dashboard RSS Tab </td>

+				</tr>

+			</table>

+			<p></p>

+			<p>Changes are immediately online, no need to restart anything. </p>

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/DrupalPlugin.xml b/xdocs/DrupalPlugin.xml
new file mode 100644
index 0000000..db8d737
--- /dev/null
+++ b/xdocs/DrupalPlugin.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Drupal Plugin</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Drupal Plugin for OpenMeetings">

+			<p>

+				Plugin for Drupal currently is not open source. 

+				Please contact <a href="commercial-support.html" target="_BLANK" rel="nofollow">Commercial Support</a> to get it. 

+				<br/>

+				A demo version+video of the Drupal plugin is available at

+				<a href="http://drupal.openmeetings.de/" target="_BLANK" rel="nofollow">drupal.openmeetings.de</a>.

+			</p>

+		</section>

+		

+		<section name="Installation of the Drupal Plugin for Apache OpenMeetings">

+			<p>

+				You simply download the ZIP or TAR package and unzip it to Drupal "mod" directory.

+				<br/>

+				For a detailed description on how to install plugins in Drupal please review their 

+				<a href="http://drupal.org/documentation/install/modules-themes" target="_BLANK" rel="nofollow">handbook</a>.

+				<br />

+				Then you visit the module interface of Drupal, where you will find the new module.

+				You should switch it to "enabled" to get the "Configure" and "Permissions" buttons.

+			</p>

+			<a class="fancybox-buttons" href="images/drupal_module_installation.png">

+				<img src="images/drupal_module_installation.png" alt="" width="600"

+					height="150" />

+			</a>

+			<p>

+				In the configuration you enter the auth data to access your Apache OpenMeetings server:

+			</p>

+			<a class="fancybox-buttons" href="images/drupal_module_configuration.png">

+				<img src="images/drupal_module_configuration.png" alt="" width="600"

+					height="340" />

+			</a>

+		</section>

+		

+		<section name="Adding a new conference room to Drupal">

+			

+			<p>

+				After installation of the plugin you can go to the front page in Drupal and add a new content item 

+				"OpenMeetings Rooms" => "Add New Room". You may find following configuration values for each 

+				conference room:

+			</p>

+			<a class="fancybox-buttons" href="images/drupal_room_configuration.png">

+				<img src="images/drupal_room_configuration.png" alt="" width="600"

+					height="400" />

+			</a>

+		</section>

+		

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/EditTemplates.xml b/xdocs/EditTemplates.xml
new file mode 100644
index 0000000..54919d8
--- /dev/null
+++ b/xdocs/EditTemplates.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Edit Templates</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Changing Labels and text strings">

+			<p>

+				All language string should be localized and stored in the language

+				section. You have a full featured language editor with every

+				installation of OpenMeetings, check out the

+				<a href="LanguageEditor.html">LanguageEditor</a>

+				.

+			</p>

+			<p>

+				To lookup the labelids in the GUI you can simply run OpenMeetings

+				client with the debug enabled. That way every text-string has the

+				labelid in brackets additionally in the textfield. To start the

+				client in debug mode just add the param ?swf=maindebug.swf8.swf to

+				the URL. Example:

+				<a href="http://localhost:5080/openmeetings/?swf=maindebug.swf8.swf"

+					rel="nofollow">http://localhost:5080/openmeetings/?swf=maindebug.swf8.swf</a>

+			</p>

+		</section>

+

+		<section name="Changing layout, adding footers in emails">

+

+			<p>If you would like to change the standard email layout or add for

+				example some footer in every email you have to change the email

+				templates.

+			</p>

+			<p>To do that: Stop the Red5/OpenMeetings-Service Goto:

+				$Red5_HOME/webapps/openmeetings/WEB-INF/lib/openmeetings-templates.jar

+				Unzip: openmeetings-templates.jar (this is a usual ZIP file, you can

+				rename it to openmeetings-templates.zip unzip, edit the files, zip

+				it again and rename it to openmeetings-templates.jar)

+			</p>

+			<p>

+				In openmeetings-templates.jar there are all template files. They

+				have the file extension .vm (VM stands for velocity-template). After

+				you have done your changes you need to (re)start the

+				Red5/OpenMeetings

+				-Service so that changes are online.

+			</p>

+

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/FFMPEGVersionSwitch.xml b/xdocs/FFMPEGVersionSwitch.xml
new file mode 100644
index 0000000..b6d9006
--- /dev/null
+++ b/xdocs/FFMPEGVersionSwitch.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Howto switch between different versions of FFMPEG </title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Default Configuration">

+

+			<p>FFMPEG has a change in its API (possibly since GIT revision

+				88bfe4518)

+			</p>

+			<p>Since Version 1.9.x of OpenMeetings: By default OpenMeetings

+				expects you to have a new version of FFMPEG on your OpenMeetings

+				server installed and it will use the new API style to communicate

+				with FFMPEG.

+			</p>

+

+		</section>

+

+		<section name="Switching to old FFMPEG API">

+		

+			<p>

+				If you want to switch to the old style you can change that using the

+				config key:

+				<tt>use.old.style.ffmpeg.map.option</tt>

+			</p>

+			<p>

+				Set this value to

+				<tt>1</tt>

+				to have the old params in the API call to FFMPEG.

+			</p>

+			<p>References:  </p>

+			<ul>

+				<li>

+					<a

+						href="http://ffmpeg-users.933282.n4.nabble.com/Invalid-stream-specifier-0-Stream-map-0-0-matches-no-streams-Changes-in-FFMPEG-map-option-td4091165.html"

+						rel="nofollow">http://ffmpeg-users.933282.n4.nabble.com/Invalid-stream-specifier-0-Stream-map-0-0-matches-no-streams-Changes-in-FFMPEG-map-option-td4091165.html

+					</a>

+				</li>

+			</ul>

+

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/GeneralConfiguration.xml b/xdocs/GeneralConfiguration.xml
new file mode 100644
index 0000000..2ff48fa
--- /dev/null
+++ b/xdocs/GeneralConfiguration.xml
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>List of general configuration options</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="List of general configuration options">

+			<style><!--

+				.configCell {

+					border: 1px solid rgb(204, 204, 204);

+					padding: 5px;

+				}

+			--></style>

+			<p>In Administration &gt; Configuration there are a number of

+				configuration values.

+			</p>

+			<p></p>

+			<table>

+				<tr>

+					<th class="configCell"> key </th>

+					<th class="configCell"> default </th>

+					<th class="configCell"> meaning </th>

+					<th class="configCell"> availabe since OpenMeetings version </th>

+				</tr>

+				<tr>

+					<td class="configCell"> user.login.minimum.length </td>

+					<td class="configCell"> 4 </td>

+					<td class="configCell"> minimum chars required for the login to create a user </td>

+					<td class="configCell"> 1.9.x </td>

+				</tr>

+				<tr>

+					<td class="configCell"> user.pass.minimum.length </td>

+					<td class="configCell"> 4 </td>

+					<td class="configCell"> minimum chars required for the password to create a

+						user

+					</td>

+					<td class="configCell"> 1.9.x </td>

+				</tr>

+				<tr>

+					<td class="configCell"> number.minutes.reminder.send </td>

+					<td class="configCell"> 15 </td>

+					<td class="configCell"> minutes the one-time reminder in the calender is

+						send, set to 0 to disable reminder

+					</td>

+					<td class="configCell"> 1.9.x </td>

+				</tr>

+				<tr>

+					<td class="configCell"> max_upload_size </td>

+					<td class="configCell"> 1073741824 </td>

+					<td class="configCell"> Maximum size of upload file (bytes) 1073741824 bytes

+						= 1GB

+					</td>

+					<td class="configCell"> 1.8.x </td>

+				</tr>

+				<tr>

+					<td class="configCell"> show.whiteboard.draw.status </td>

+					<td class="configCell"> 0 </td>

+					<td class="configCell"> Display name of the user who draw the current object

+						(User Name auto-disapper after 3 seconds.

+					</td>

+					<td class="configCell"> 1.8.x </td>

+				</tr>

+				<tr>

+					<td class="configCell"> use.old.style.ffmpeg.map.option </td>

+					<td class="configCell"> 0 </td>

+					<td class="configCell"> If the system should "." (old ffmpeg) instead of ":"

+						(new ffmpeg) for the -map option in FFMPEG

+					</td>

+					<td class="configCell"> 1.9.x </td>

+

+				</tr>

+				<tr>

+					<td class="configCell"> inviter.email.as.replyto </td>

+					<td class="configCell"> 1 </td>

+					<td class="configCell"> Set inviter's email address as ReplyTo in email invitations (1 == set, 0 == NOT set)	</td>

+					<td class="configCell"> 2.0.x </td>

+				</tr>

+				<tr>

+					<td class="configCell"> office.path </td>

+					<td class="configCell"> </td>

+					<td class="configCell"> The path to OpenOffice/LibreOffice (optional) please set this to the real path in case jodconverter is unable to find OpenOffice/LibreOffice installation automatically	</td>

+					<td class="configCell"> 2.0.x </td>

+				</tr>

+				<tr>

+					<td class="configCell"> default.landing.zone </td>

+					<td class="configCell"> user/dashboard </td>

+					<td class="configCell"> Area to be shown to the user after login. Possible values are: user/dashboard, user/calendar, user/record, rooms/my, rooms/group, rooms/public, admin/user, admin/connection

+						, admin/group, admin/room, admin/config, admin/lang, admin/ldap, admin/backup, admin/server, admin/oauth2 </td>

+					<td class="configCell"> 2.1.x, <b> values are changed in 3.0.0</b> </td>

+				</tr>

+				<tr>

+					<td class="configCell"> sms.provider </td>

+					<td class="configCell">  </td>

+					<td class="configCell"> SMS service provider (bulksms.http.1) </td>

+					<td class="configCell"> 2.1.x </td>

+				</tr>

+				<tr>

+					<td class="configCell"> sms.Username </td>

+					<td class="configCell">  </td>

+					<td class="configCell"> Login for SMS service provider </td>

+					<td class="configCell"> 2.1.x </td>

+				</tr>

+				<tr>

+					<td class="configCell"> sms.Userpass </td>

+					<td class="configCell">  </td>

+					<td class="configCell"> Password for SMS service provider </td>

+					<td class="configCell"> 2.1.x </td>

+				</tr>

+				<tr>

+					<td class="configCell"> sms.subject </td>

+					<td class="configCell">  </td>

+					<td class="configCell"> Subject of SMS reminder message </td>

+					<td class="configCell"> 2.1.x </td>

+				</tr>

+				<tr>

+					<td class="configCell"> swftools_zoom </td>

+					<td class="configCell"> 100 </td>

+					<td class="configCell"> DPI for conversion of PDF to SWF (should be an integer between 50 and  600 with a default value of 100 DPI) </td>

+					<td class="configCell"> 2.0.x </td>

+				</tr>

+				<tr>

+					<td class="configCell"> swftools_jpegquality </td>

+					<td class="configCell"> 85 </td>

+					<td class="configCell"> Compression quality for conversion of PDF to SWF (should be an integer between 1 and 100, with a default value of 85) </td>

+					<td class="configCell"> 2.0.x </td>

+				</tr>

+				<tr>

+					<td class="configCell"> sendEmailAtRegister </td>

+					<td class="configCell"> 0 </td>

+					<td class="configCell"> User get a EMail with their Account data. Values: 0(No) or 1(Yes) </td>

+					<td class="configCell"> 2.0.x </td>

+				</tr>

+				<tr>

+					<td class="configCell"> sendEmailWithVerficationCode </td>

+					<td class="configCell"> 0 </td>

+					<td class="configCell"> User must activate their account by clicking on the 

+								activation-link in the registering Email. Values: 0(No) or 1(Yes) 

+								It makes no sense to make this(sendEmailWithVerficationCode) 1(Yes) while 

+								sendEmailAtRegister is 0(No) cause you need

+								to send a EMail. </td>

+					<td class="configCell"> 2.0.x </td>

+				</tr>

+				<tr>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> redirect.url.for.external.users </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;">  </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Users entered the room via invitationHash or secureHash will be redirected to this URL on connection lost </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 2.2.x </td>

+				</tr>

+				<tr>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> allow_frontend_register </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> (configurable during install) </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Is user register available on login screen </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 1.8.x </td>

+				</tr>

+				<tr>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> allow.soap.register </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 1 </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Is user register available via SOAP/REST </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 3.0.x </td>

+				</tr>

+			</table>

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/GetVersionInfo.xml b/xdocs/GetVersionInfo.xml
new file mode 100644
index 0000000..e799233
--- /dev/null
+++ b/xdocs/GetVersionInfo.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>How to check which Openmeetings version running</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+		<section name="How to check which Openmeetings version running (3.0.0 - )">

+			<p>Use Top Menu -&gt; About</p>

+		</section>

+		<section name="How to check which Openmeetings version running (2.1.1 - )">

+			<p>The version is printed into openmeetings.log file</p>

+			<p>

+				Run openmeetings<br/>

+				Open OM_HOME/log/openmeetings.log

+			</p>

+			<p>You get something like this: </p>

+			<div class="xmlcode"><pre>

+	##################################################

+	#               Openmeetings is up               #

+	#       2.1.1-RELEASE 1490720 7-June-2013        #

+	#                and ready to use                #

+	##################################################

+			</pre></div>

+		</section>

+		<section name="How to check which Openmeetings version running (1.8.0 - 2.1.0)">

+			<p>If you need to know what version of OpenMeetings you are running,

+				you can check that by the file: openmeetings-*.jar

+			</p>

+			<p>

+				Unzip: /webapps/openmeetings/WEB-INF/lib/openmeetings-*.jar (jars are

+				zips)

+				<br />

+				<br />

+				In the resulting unzipped folder open the file to read:

+				/META-INF/MANIFEST.MF

+			</p>

+			<p>You get something like this: </p>

+			<div class="xmlcode">

+				Manifest-Version: 1.0

+				<br />

+				Ant-Version: Apache Ant 1.8.2

+				<br />

+				Created-By: 1.6.0_26-b03-383-11A511 (Apple Inc.)

+				<br />

+				Built-By: OpenMeetings - http://openmeetings.googlecode.com

+				<br />

+				Built-On: 23-October-2011

+				<br />

+				Svn-Revision: 4368

+				<br />

+			</div>

+			<p>This version info is available since version 1.8.0. If you have an

+				older version as version 1.8.0 then you might simply check the

+				language files and the labelid in there, the numbers of labels are

+				almost always unique in the versions. </p>

+

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/HotKeys.xml b/xdocs/HotKeys.xml
new file mode 100644
index 0000000..db56499
--- /dev/null
+++ b/xdocs/HotKeys.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+	<properties>

+		<title>Hot Keys</title>

+		<author email="solomax@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+	<body>

+		<section name="Keys table">

+			<table>

+				<tr>

+					<th>Key</th>

+					<th>Functionality</th>

+					<th>Configurable</th>

+					<th>Config Key</th>

+				</tr>

+				<tr>

+					<td>F12 (code 123)</td>

+					<td>A hot key code for the 'give exclusive audio' functionality.</td>

+					<td>Yes</td>

+					<td>exclusive.audio.keycode</td>

+				</tr>

+				<tr>

+					<td>F8 (code 119)</td>

+					<td>If 1 or 2 video windows are present in the room they will be

+						"rearranged" to take all the place available</td>

+					<td>No</td>

+					<td>

+					</td>

+				</tr>

+				<tr>

+					<td>F7 (code 118)</td>

+					<td>A hot key code for the 'mute/unmute audio' functionality.</td>

+					<td>Yes</td>

+					<td>mute.keycode</td>

+				</tr>

+			</table>

+		</section>

+	</body>

+</document>
\ No newline at end of file
diff --git a/xdocs/IBMDB2Config.xml b/xdocs/IBMDB2Config.xml
new file mode 100644
index 0000000..934ad7b
--- /dev/null
+++ b/xdocs/IBMDB2Config.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>IBM DB2 Configuration</title>

+		<author email="sebawagner@apache.org">

+			Apache OpenMeetings Documentation Team

+		</author>

+	</properties>

+

+	<body>

+		<section name="IBM DB2 Configuration">

+

+			<subsection name="Before you start">

+				<i>Tested with IBM DB2 Express-C 9.7.x</i>

+				<ul>

+					<li>

+						Get the IBM Data Server Driver for JDBC and SQLJ from IBM website:

+						<a

+							href="https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=swg-idsdjs">https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=swg-idsdjs

+						</a>

+					</li>

+					<li>Copy JDBC driver db2jcc4.jar to

+						webapps/openmeetings/WEB-INF/lib/

+					</li>

+					<li>

+						Create database for OpenMeetings using a pagesize bigger or equal

+						8K, sample query:

+						<br />

+						<div class="xmlcode">

+							CREATE DATABASE openmeet AUTOMATIC STORAGE YES ON 'C:' DBPATH ON 'C:'

+							USING CODESET UTF-8 TERRITORY DE COLLATE USING System PAGESIZE 16

+							K

+						</div>

+					</li>

+					<li>If you encounter issues, you can drop the db  and then run

+						the web based installer again </li>

+				</ul>

+			</subsection>

+

+			<subsection name="Steps todo">

+				<ul>

+					<li>

+						Run red5-service and goto the web-based installer:

+						http://localhost:5080/openmeetings/install

+					</li>

+				</ul>

+			</subsection>

+

+			<subsection name="DB2 Sample Configuration">

+				<p>

+					There is a sample configuration for IBM DB2 that ships with

+					every

+					release in:

+					<br />

+					/webapps/openmeetings/WEB-INF/classes/META-INF/db2_persistence.xml

+				</p>

+			</subsection>

+

+

+		</section>

+

+	</body>

+

+</document>

diff --git a/xdocs/Internationalisation.xml b/xdocs/Internationalisation.xml
new file mode 100644
index 0000000..c4b5f33
--- /dev/null
+++ b/xdocs/Internationalisation.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Upgrade</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Where to find language files">

+

+			<p>You can find all current language files here: </p>

+			<p>

+				<a

+					href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/main/webapp/languages/"

+					rel="nofollow">https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/main/webapp/languages/

+				</a>

+			</p>

+			<p>Just take one file and translate it to your language. </p>

+		</section>

+

+		<section name="Import and export of Language Files">

+

+			<ul>

+				<li>

+					Use the

+					<a href="LanguageEditor.html">LanguageEditor</a>

+					for translation

+				</li>

+				<li>

+					with the

+					<a href="LanguageEditor.html">LanguageEditor</a>

+					you can import and export Language Files

+				</li>

+			</ul>

+		</section>

+

+		<section name="How to add it as installation option">

+			<p>

+				Once you have finished the translation you can add a new node to:

+				<a

+					href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/main/webapp/languages/languages.xml"

+					rel="nofollow">https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/main/webapp/languages/languages.xml

+				</a>

+			</p>

+			<p>the name of the language should match the name of the file. Once

+				this is done the Language file will automatically be imported during

+				installation and will be an option at login.

+			</p>

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/JUnitTesting.xml b/xdocs/JUnitTesting.xml
new file mode 100644
index 0000000..02468c2
--- /dev/null
+++ b/xdocs/JUnitTesting.xml
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>JUnit Testing</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Introduction">

+

+			<p>

+				Automatic tests are the significant part of development process.

+				Below is the instruction of how to run Openmeetings

+				<a href="http://junit.org" rel="nofollow">JUnit</a>

+				tests.

+			</p>

+		</section>

+

+		<section name="Details">

+

+

+			<ol>

+				<li>running tests using command line: </li>

+				<li>

+					<ul>

+						<li>all tests:

+							<div class="xmlcode">

+								ant test

+							</div>

+						</li>

+						<li>subset of tests by mask:

+							<div class="xmlcode">

+								ant -Dtestcases=TestError* test

+							</div>

+						</li>

+					</ul>

+				</li>

+				<li>running tests from Eclipse IDE: </li>

+				<li>

+					<ul>

+						<li>

+							<div class="xmlcode">

+								ant -Ddb=&lt;your_DB&gt; prepare-eclipse

+							</div>

+						</li>

+						<li>Start Eclipse </li>

+						<li>Load workspace with Openmeetings project (or refresh existing

+							project)

+						</li>

+						<li>Select "Debug Configurations..." </li>

+					</ul>

+				</li>

+			</ol>

+			<p>

+				<a class="fancybox-buttons" href="images/DebugConfigurations.png">

+					<img src="images/DebugConfigurations.png" alt="" width="367"

+						height="262" />

+				</a>

+			</p>

+			<ul>

+				<li>Create New Junit configuration, give it a name and select test

+					class

+				</li>

+			</ul>

+			<p>

+				<a class="fancybox-buttons" href="images/NewConfiguration.png">

+					<img src="images/NewConfiguration.png" alt="" width="420"

+						height="206" />

+				</a>

+			</p>

+			<ul>

+				<li>Select Arguments tab </li>

+				<li>Add the following code to the VM section

+					<div class="xmlcode">

+						-javaagent:${workspace_loc:Openmeetings}/build/lib/om/openjpa-bundle-2.2.2.jar

+						-Dom.home=${workspace_loc:Openmeetings}/src/main/webapp

+						-Dbackups.dir=${workspace_loc:Openmeetings}/build/lib/junit/backups

+					</div>

+				</li>

+				<li>To avoid temporary files being created in OM root, modify

+					"Working Directory" as follows

+					<div class="xmlcode">${workspace_loc:Openmeetings}/build/junit</div>

+				</li>

+			</ul>

+			<p>

+				<a class="fancybox-buttons" href="images/Arguments.png">

+					<img src="images/Arguments.png" alt="" width="435" height="410" />

+				</a>

+			</p>

+			<ul>

+				<li>Select Debug </li>

+

+			</ul>

+			<ul>

+				<li>Note: You need a file called "persistence.xml" in src/META-INF

+					if you run the JUnit test from inside Eclipse. Normally "ant

+					prepare-eclipse" should do that for you. </li>

+

+			</ul>

+

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/JVMPerformanceTuning.xml b/xdocs/JVMPerformanceTuning.xml
new file mode 100644
index 0000000..b717e14
--- /dev/null
+++ b/xdocs/JVMPerformanceTuning.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Performance Tuning</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Performance Tuning">

+

+			<p>To use the optimum of performance from your server there is a

+				start-script for red5 available that does some basic settings in the

+				JVM. It is called red5-highperf.sh. It is recommended to use that

+				script for production and high-load scenarios.

+			</p>

+			<div class="xmlcode">

+				#!/bin/bash

+				<br />

+				<br />

+				if [ -z "$RED5_HOME" ]; then export RED5_HOME=.; fi

+				<br />

+				<br />

+				# Previous option set

+				<br />

+				export JAVA_OPTS="-Xrs -Xms512M -Xmx1024M -Xss128K -XX:NewSize=256m

+				-XX:SurvivorRatio=16 -XX:MinHeapFreeRatio=20

+				-XX:+ExplicitGCInvokesConcurrent -Djava.net.preferIPv4Stack=true

+				-Xverify:none"

+				<br />

+				<br />

+				# start Red5

+				<br />

+				echo "Setting Hi Performance Options"

+				<br />

+				exec $RED5_HOME/red5.sh >> $RED5_HOME/log/jvm.stdout 2>&amp;1 &amp;

+				<br />

+			</div>

+

+			<p>You have to exclude the "-XX:+UseConcMarkSweepGC" param from the

+				default red5-highperf.sh to make it functional! However if you are a

+				performance expert you might also play with the values to find

+				perfect matches for your use-case.

+			</p>

+			<p>

+				For a complete overview about possible arguments and their meaning

+				see:

+				<a

+					href="http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#PerformanceTuning"

+					rel="nofollow">http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#PerformanceTuning

+				</a>

+			</p>

+

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/JiraPlugin.xml b/xdocs/JiraPlugin.xml
new file mode 100644
index 0000000..8901bcf
--- /dev/null
+++ b/xdocs/JiraPlugin.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Jira Plugin</title>

+		<author email="eschwert@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Jira Plugin for OpenMeetings">

+			<p>

+				Current Development Snapshots for testing can be downloaded from:

+				<a href="https://svn.apache.org/repos/asf/openmeetings/branches/jira-plugin/target/openmeetings-1.0-SNAPSHOT.jar">here</a>

+				.

+			</p>			

+		</section>

+		

+		<section name="Features">

+			<p>The plugin contains the following features: </p>

+			<ul>

+				<li>Create videoconference rooms through Jira: </li>

+				<li>

+					<ol>

+						<li>Integrated with Jira issues </li>										

+						<li>Configurable room type </li>

+					</ol>

+				</li>

+			</ul>			

+		</section>	

+		

+		<section name="Demo video">			

+			<p>The demo video of Jira plugin show you the plugin in action </p>              

+		      <object style="height: 390px; width: 640px">

+			      <param name="movie" value="http://www.youtube.com/v/xBdYj-OZvlc?version=3&amp;feature=player_detailpage"/>

+			      <param name="allowFullScreen" value="true"/>

+			      <param name="allowScriptAccess" value="always"/>

+			      <embed src="http://www.youtube.com/v/xBdYj-OZvlc?version=3&amp;feature=player_detailpage" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360"/>

+		      </object> 

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/JoomlaPlugin.xml b/xdocs/JoomlaPlugin.xml
new file mode 100644
index 0000000..c84c420
--- /dev/null
+++ b/xdocs/JoomlaPlugin.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+	<properties>

+		<title>Joomla Plugin</title>

+		<author email="solomax@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+	<body>

+		<section name="OpenMeetings Plugin for Joomla">

+			<p>

+				Plugin for Joomla currently is not open source. 

+				Please contact <a href="commercial-support.html" target="_BLANK" rel="nofollow">Commercial Support</a> to get it. 

+			</p>			

+		</section>

+		<section name="Features">

+			<p>The plugin contains the following features: </p>

+			<ul>

+				<li>Create videoconference rooms from Joomla: </li>

+				<li>

+					<ol>

+						<li>Create rooms</li>										

+						<li>Enter the room</li>

+					</ol>

+				</li>

+				<li>Access recordings from Joomla: </li>

+				<li>

+					<ol>

+						<li>Download recordings</li>										

+					</ol>

+				</li>

+			</ul>

+		</section>

+		<section name="Demo video">			

+			<div>

+				<b>OpenMeetings Joomla Plugin Installation</b><br/>              

+				<object style="height: 360px; width: 640px">

+					<param name="movie" value="http://www.youtube.com/v/jt8ejgtHavc?version=3&amp;feature=player_detailpage"/>

+					<param name="allowFullScreen" value="true"/>

+					<param name="allowScriptAccess" value="always"/>

+					<embed src="http://www.youtube.com/v/jt8ejgtHavc?version=3&amp;feature=player_detailpage" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360"/>

+				</object> 

+			</div>

+			<br/>

+			<div>

+				<b>OpenMeetings Integration with Joomla</b><br/>              

+				<object style="height: 360px; width: 640px">

+					<param name="movie" value="http://www.youtube.com/v/H61N0pfLusA?version=3&amp;feature=player_detailpage"/>

+					<param name="allowFullScreen" value="true"/>

+					<param name="allowScriptAccess" value="always"/>

+					<embed src="http://www.youtube.com/v/H61N0pfLusA?version=3&amp;feature=player_detailpage" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360"/>

+				</object> 

+			</div>

+		</section>

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/LanguageEditor.xml b/xdocs/LanguageEditor.xml
new file mode 100644
index 0000000..1f100b4
--- /dev/null
+++ b/xdocs/LanguageEditor.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Language Editor</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Language Editor">

+

+			<p>Features:</p>

+			<ul>

+				<li>edit the labels of any language, changes will take effect as

+					soon as you re-login

+				</li>

+				<li>add new languages (for example to fit your co-operative design

+					and language of your company)

+				</li>

+				<li>export the language-files to an XML File (these language Files

+					can be used for your next installation or as contribution to the

+					project)

+				</li>

+				<li>

+					import of language files (

+					<i>you should restart the server if you face problems, as the

+						database cache might be invalid

+					</i>

+					)

+				</li>

+			</ul>

+			<p>Screen from the Administration Panel: </p>

+			<p>

+				<a class="fancybox-buttons" href="images/langeditor_screen_v2.png">

+					<img src="images/langeditor_screen_v2.png" alt="" width="475"

+						height="324" />

+				</a>

+			</p>

+

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/LdapAndADS.xml b/xdocs/LdapAndADS.xml
new file mode 100644
index 0000000..8c9d88a
--- /dev/null
+++ b/xdocs/LdapAndADS.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Home</title>

+		<author email="sebawagner@apache.org">

+			Sebastian Wagner

+		</author>

+	</properties>

+

+	<body>

+		<section name="Ubuntu Installation">

+			<div>

+				Run the commands

+				<blockquote>

+					<i>

+						sudo apt-get install slapd ldap-utils

+					</i>

+				</blockquote>

+			</div>

+			<div>

+				Modify file <tt>/etc/ldap/ldap.conf</tt> add highlighted attributes:

+				<blockquote>

+					<i>

+						#<br />

+						# LDAP Defaults<br />

+						#<br />

+						# See ldap.conf(5) for details<br />

+						# This file should be world readable but not world writable.<br />

+						<b>BASE    dc=unixmen,dc=com<br />

+						URI     ldap://192.168.1.200</b><br />

+						#SIZELIMIT      12<br />

+						#TIMELIMIT      15<br />

+						#DEREF          never<br />

+						# TLS certificates (needed for GnuTLS)<br />

+						TLS_CACERT      /etc/ssl/certs/ca-certificates.crt<br />

+					</i>

+				</blockquote>

+			</div>

+			<div>

+				Run the Configuration assistant: <tt>sudo dpkg-reconfigure slapd</tt>

+			</div>

+			<div>

+				Test LDAP server: <tt>ldapsearch -x</tt>

+			</div>

+			<div>

+				Add/Edit/Delete users: <tt>sudo apt-get install phpldapadmin</tt>

+			</div>

+			<div>

+				Detailed reference: <a href="http://www.unixmen.com/openldap-installation-and-configuration-in-ubuntu-12-10-server-debian-6/">http://www.unixmen.com/openldap-installation-and-configuration-in-ubuntu-12-10-server-debian-6/</a>

+			</div>

+		</section>

+		<section name="LDAP and Active Directory Integration">

+			<p> In: $RED5_HOME/webapps/openmeetings/conf<br/>

+				you will find sample configurations for LDAP and Active Directory. The

+				nature of those Directory Servers are that they are individual for

+				every organization, so you have to modify of course at least the

+				path to your user-base et cetera.<br/>

+				<br/>

+				To activate any of those configurations you have to login into

+				OpenMeetings, goto Administration > Ldap.

+			</p>

+			<a class="fancybox-buttons" href="images/ldap_screen.png">

+				<img src="images/ldap_screen.png" alt="" width="442" height="282" />

+			</a>

+			<p>

+				Import is that you configure LDAP_SEARCH_PATH so that it points to the node of your directory server that contains the users

+			</p>

+			<p>

+				If you have multiple search paths you can either try to define a search path that points to multiple nodes or define multiple ldap configurations.

+			</p>

+			<p>

+				Successful integration is also reported with Novell eDirectory

+			</p>

+			<p>

+				You can configure multiple domains or different user-paths in the Administration of OpenMeetings. 

+			</p>

+			<p>

+				<b>NOTE: </b>You should specify file name <i>RELATIVE</i> to <tt>$RED5_HOME/webapps/openmeetings/conf</tt>

+			</p>

+		</section>

+

+	</body>

+</document>
\ No newline at end of file
diff --git a/xdocs/MSSQLConfig.xml b/xdocs/MSSQLConfig.xml
new file mode 100644
index 0000000..601d668
--- /dev/null
+++ b/xdocs/MSSQLConfig.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>MSSQL Configuration</title>

+		<author email="solomax@apache.org">

+			Apache OpenMeetings Documentation Team

+		</author>

+	</properties>

+

+	<body>

+		<section name="MSSQL Configuration">

+

+			<subsection name="Before you start">

+				<ul>

+					<li>You need Openmeetings 2.2 or later to use MSSQL integration</li>

+					<li>Make sure that you have set utf8 as collation for the openmeetings database

+						before you start the installation process of OpenMeetings!

+					</li>

+					<li>

+						make sure MSSQL is listening on TCP/IP connections! and username/password 

+						authentication is enabled for it

+						<br />

+						To verify if MSSQL connection is working: OpenMeetings will

+						automatically create all tables in the database and all tables

+						should have utf8 as encoding/collation!

+					</li>

+					<li>If you encounter issues, you can drop the db and then run

+						the web based installer again

+					</li>

+				</ul>

+			</subsection>

+

+			<subsection name="Steps todo">

+				<ul>

+					<li>

+						You need to download the JDBC driver from Microsoft

+						<a href="http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&amp;id=11774" target="_BLANK"

+							rel="nofollow">http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&amp;id=11774</a>

+						Unarchive appropriate file from it (sqljdbc.jar or sqljdbc4.jar) and place it into:

+						<tt>$red5/webapps/openmeetings/WEB-INF/lib/</tt>

+					</li>

+					<li>

+						Run red5-service and goto the web-based installer:

+						http://localhost:5080/openmeetings/install

+					</li>

+				</ul>

+			</subsection>

+

+			<subsection name="MSSQL Sample Configuration">

+				<p>

+					There is a sample configuration for MySQL that ships with

+					every release in:

+					<br />

+					/webapps/openmeetings/WEB-INF/classes/META-INF/mssql_persistence.xml

+				</p>

+			</subsection>

+

+

+		</section>

+

+	</body>

+

+</document>

diff --git a/xdocs/ManualTesting.xml b/xdocs/ManualTesting.xml
new file mode 100644
index 0000000..0ccad05
--- /dev/null
+++ b/xdocs/ManualTesting.xml
@@ -0,0 +1,504 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Manual Testing</title>

+		<author email="iarkh@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Introduction">

+

+			<p>

+				Below is a test plan for the OpenMeetings 2.1 pre-release testing.

+			</p>

+		</section>

+

+		<section name="Details">

+

+			<ol>

+				<li>

+					<b>User GUI tests</b>

+					<ol>

+						<li>

+							Login/logout 

+							<ol>

+								<li>Password recovering </li>

+								<li>Self-registering </li>

+								<li>"Visit Apache OpenMeetings" link </li>

+								<li>Enter wrong login/password </li>

+								<li>Enter correct login/password </li>

+								<li>Exit the system by click the Exit button </li>

+							</ol>

+						</li>

+						<li>

+							Dashboard

+							<ol>

+								<li>Correct user info in the upper left corner </li>

+								<li>Links in the "Help and support" section </li>

+								<li>It should be possible to enter user’s room from the dashboard </li>

+								<li>Room details should be shown correctly in the "Rooms in this section…" part of the screen </li>

+							</ol>					

+						</li>

+						<li>

+							Global chat 

+							<ol>

+								<li>Send/receive message where at least 3 users in the system </li>

+								<li>Adding a contact to the contact list </li>

+								<li>Private message </li>

+								<li>Showing user profile </li>

+								<li>Inviting user to the conference room </li>

+								<li>Copy chat log </li>

+								<li>Delete chat log </li>

+								<li>Changing font style in the massage </li>

+								<li>Adding emotions to the message </li>

+							</ol>

+							Attention! Correct RTL support does not work in the current implementation 

+						</li>

+						<li>

+							Calendar view

+							<ol>

+								<li>Change view (weekly/daily/monthly) and moving between the dates </li>

+								<li>Adding/removing/moving by mouse an event </li>

+							</ol>

+						</li>

+						<li>

+							Calendar invitation window

+							<ol>

+								<li>Creating/updating/deleting an event </li>

+								<li>Inviting 3 internal and 3 external guests </li>

+								<li>Different reminder types: receiving e-mail invitation for internal and external guests </li>

+								<li>Password protected invitation </li>

+								<li>Inviting to the rooms of the different types </li>

+								<li>Choosing time zone for external guest </li>

+								<li>Correct user data in the invitations </li>

+								<li>SMS reminder for internal and external guests </li>

+								<li>E-mail reminder for internal and external guests </li>

+								<li>It should be possible to enter to the event via invitation link room at the particular time slot only </li>

+								<li>Enter the room via invitation window </li>

+							</ol>

+						</li>

+						<li>

+							My Profile: User profile should contain correct user info and allow to edit this 

+						</li>

+						<li>

+							Contacts and Messages

+							<ol>

+								<li>Add/remove a message </li> 

+								<li>Creating a new folder </li>

+								<li>Moving between the folders </li>

+								<li>Marking messages as read/unread </li>

+								<li>Message filters </li>

+								<li>Contact list </li>

+							</ol>

+						</li>

+						<li>

+							User settings

+							<ol>

+								<li>Possibility to change the user info </li>

+								<li>Changing time zone and language (should start to work after user re-login </li>

+								<li>Community settings or different users </li>

+								<li>Display settings</li> 

+							</ol>

+						</li>

+						<li>

+							Search users

+							<ol>

+								<li>Send a private message </li>

+								<li>Adding a contact </li>

+								<li>View contact details via user list </li>

+							</ol>

+						</li>

+						<li>

+							Room lists 

+							<ol>

+								<li>Public rooms, private rooms and my rooms should contain correct room lists </li>

+								<li>User list for the selected room </li>

+								<li>Room details for the selected room </li>

+							</ol>

+						</li>

+						<li>

+							Recordings

+							<ol> 

+								<li>The list should contain available recordings in public and private folders </li>

+								<li>Info panel should contain actual info about the recording </li>

+								<li>Downloading a recording is different formats (AVI/FLV) </li>

+								<li>Play the recording in OpenMeetings </li>

+								<li>Play downloaded recording by Windows player </li>

+								<li>Remove a recording from the folder </li>

+							</ol>

+						</li>

+						<li>

+							Restricted room testing – general issues (should be tested with at least 3 attendees)

+							<ol>

+								<li>Enter the room: different cases for the cam/micro, choosing of the cam resolution, test recording, allow/deny of video </li>

+								<li>User list should be shown correctly </li>

+								<li>Correct user credentials after  the room entering </li>

+								<li>Add moderator permissions to the user </li>

+								<li>Turn micro on/off in the user list </li>

+								<li>Increasing/decreasing sound level and turning micro on/off in the video window </li>

+								<li>Turn micro on/off in the user list to another user – possible by the moderator only </li>

+								<li>Increasing/decreasing sound level and turning micro on/off in the video window - possible by the moderator only </li>

+								<li>Allow/deny drawing on whiteboard – possible by the moderator only </li>

+								<li>Allow/deny screen sharing – possible by the moderator only </li>

+								<li>Allow/deny remote screen control – possible by the moderator only </li>

+								<li>Allow/deny exclusive audio – possible by the moderator only </li>

+								<li>Re-start devise settings via user list </li>

+								<li>Re-start devise settings via video window </li>

+								<li>Kick the user off by the moderator </li>

+								<li>Click F8 key to arrange videos </li>

+								<li>Activity and actions panel should contain correct info </li>

+								<li>Exit the room </li>

+							</ol>

+						</li>

+						<li>

+							Restricted room testing: file uploading + documents

+							<ol>

+								<li>Upload a document with "Load directly to whiteboard" switch turned on </li>

+								<li>Upload a with "Load directly to whiteboard" switch turned on off </li>

+								<li>Upload a document with the localized file name and spaces in the name </li>

+								<li>Uploading a document into different folders: private files should be visible only their owner only </li>

+								<li>Removing a file from the room </li>

+								<li>Home and public drive size should change correctly </li>

+								<li>Adding a new folder </li>

+								<li>Removing a folder </li>

+								<li>Load a document of each supported type and check that it’s shown correctly </li>

+							</ol>

+						</li>

+						<li>

+							Restricted room testing – whiteboard and properties panels (should be tested with at least 3 attendees)

+							<ol>

+								<li>Adding a removing a whiteboard </li>

+								<li>Full-fit switch </li>

+								<li>Clear whiteboard </li>

+								<li>Clear objects of current slide only </li>

+								<li>Save and export </li>

+								<li>Undo </li>

+								<li>Select an object </li>

+								<li>Pointer </li>

+								<li>Text </li>

+								<li>Paint </li>

+								<li>Draw line </li>

+								<li>Draw underline </li>

+								<li>Rectangle </li>

+								<li>Ellipse </li>

+								<li>Arrow </li>

+								<li>Cliparts</li>

+							</ol>						

+						</li>

+						<li>

+							Restricted room testing – chat (should be tested with at least 3 attendees)

+							<ol>

+								<li>Send a message </li>

+								<li>Start a private chat </li>

+								<li>Chat moderation </li>

+								<li>Font style </li>

+								<li>Emotions </li>

+								<li>Show/copy chat log </li>

+								<li>Delete server chat log </li>

+							</ol>

+						</li>

+						<li>

+							Restricted room testing – screen sharing and recordings (should be tested with at least 3 attendees)

+							<ol>

+								<li>"Share record/screen" button in the room </li>

+								<li>Desktop sharer: start/stop sharing </li>

+								<li>Change the shared screen area (X-offset, Y-offset, width, height) </li>

+								<li>Change the screen sharing quality </li>

+								<li>Start/stop recordings – need to check that it works as expected </li>

+							</ol>

+						</li>

+						<li>

+							Restricted room testing – Actions menu

+							<ol>

+								<li>Send invitation: send English and localized message </li>

+								<li>Send invitation with password </li>

+								<li>Send invitations with 3 different time periods </li>

+								<li>Change time zone of the invitation </li>

+								<li>Change language of the invitation </li>

+								<li>Send invitation screen: "Generate URL" button – check the same things as for the invitations sent by email </li>

+								<li>Apply to be moderator </li>

+								<li>Apply to whiteboard access </li>

+								<li>Apply to audio/video access </li>

+								<li>Create a poll </li>

+								<li>Poll results </li>

+								<li>Vote </li>

+								<li>Default whiteboard settings: check all of them </li>

+							</ol>

+						</li>

+						<li>

+							Conference room testing

+							<ol>

+								<li>User list should look in another way in compare with restricted type </li>

+								<li>Generally, all should look OK when enter the room </li>

+							</ol>

+						</li>

+						<li>

+							Interview room testing (should be tested with at least 3 attendees)

+							<ol>

+								<li>User list should look as expected </li>

+								<li>Change a user for video pod </li>

+								<li>Start/stop recordings </li>

+							</ol>

+						</li>						

+					</ol>			

+				</li>

+				<li>

+					<b>Admin GUI tests</b>

+					<ol>

+						<li>

+							Users

+							<ol>

+								<li>Add/edit/remove/search user in the table </li>

+								<li>Move between screens where there are many users in the table </li>

+								<li>Edit text fields </li>

+								<li>Change a time zone, re-login and check the calendar </li>

+								<li>Change a language, re-login and check the GUI language </li>

+								<li>Е-mail: e-mails should pass </li>

+								<li>Phone and SMS switch: if set and turned on, sms messages should pass </li>

+								<li>Change a status – non-active user cannot login </li>

+								<li>Change user role and re-login </li>

+								<li>Change user group  - user has an access only to the rooms belong to his organization </li>

+								<li>Change community settings and check </li>

+							</ol>

+						</li>

+						<li>

+							Connections

+							<ol>

+								<li>Should be tested with at least 3 users in the system </li>

+								<li>Sessionvars table should be shown correctly </li>

+								<li>Kick the user from the system </li>

+							</ol>

+						</li>

+						<li>

+							Organizations 

+							<ol>

+								<li>Add/remove/edit/search an organization </li>

+								<li>Add/remove a user from the user list of selected organization </li>

+							</ol>

+						</li>

+						<li>

+							Conference rooms

+							<ol>

+								<li>Add/remove/edit/search a room </li>

+								<li>User list for the given room should contain actual list </li>

+								<li>Turn the Moderation switch on/off and enter the room </li>

+								<li>Add/remove a user to the default moderator list </li>

+								<li>Check max participants number in the room </li>

+								<li>Change room type and enter the room </li>

+								<li>Turn public switch on/off </li>

+								<li>Turn "Demo switch" on/off, change the demonstration time </li>

+								<li>Turn "Allow user questions" on/off and enter the room </li>

+								<li>Turn "Audio only" switch on/off and enter the room </li>

+								<li>Set "Close URL" to some URL, enter the room and then exit – you should be re-directed correspondingly </li>

+								<li>Check that SIP settings work as expected </li>

+								<li>Check that "Allow recordings" switch  works as expected </li>

+								<li>Check that "Layout options" switch work as expected </li>

+								<li>Check that "Allow font styles" switch works as expected </li>

+							</ol>

+						</li>

+						<li>					

+							Configuration

+							<ol>

+								<li>Allow_frontend_register </li>

+								<li>Mail server settings </li>

+								<li>SMS provider settings </li>

+								<li>Application.name </li>

+								<li>Default_lang_id </li>

+								<li>default time zone </li>

+								<li>SIP settings </li>

+								<li>Reminder minutes </li>

+							</ol>

+						</li>

+						<li>					

+							Language editor 

+							<ol>

+								<li>Add/remove/edit/search a key </li>

+								<li>Import/export of localization files </li>

+							</ol>

+						</li>

+						<li>					

+							LDAP: Add/remove/edit/search a record

+						</li>

+						<li>

+							Backup

+							<ol>

+								<li>System import </li>

+								<li>System backup </li>

+								<li>TBD – need to add tests for command line admin here </li>

+							</ol> 

+						</li>

+						<li>

+							Servers: Add/remove/edit/search a server

+						</li>						

+					</ol>

+				</li>

+				<li>

+					<b>SIP integration tests</b> (should be tested with at least 3 attendees in the room; for restricted and interview rooms)

+					<ol>

+						<li>Call from the room to the external phone number </li>

+						<li>Call from external phone number to the room </li>

+						<li>Call from the software phone to the room </li>

+						<li>Call from the software phone with video to the room </li>

+					</ol>

+				</li>

+				<li>

+					<b>Network testing script</b>

+				</li>

+				<li>

+					<b>Site integration tests</b>

+					<ol>

+						<li>Enter OpenMeetings room from Mooddle site </li>

+						<li>Check that recordings link are shown on the Moodle site </li>

+						<li>Enter OpenMeetings room from Joomla site </li>

+						<li>Check that recordings link are shown on the Joomla site </li>

+						<li>Enter OpenMeetings room from Drupal site </li>

+						<li>Check that recordings link are shown on the Drupal site </li>

+					</ol>

+				</li>

+				<li>

+					<b>Extended test plan for the recordings and screen sharing testing</b>

+					<ol>

+						<li><b>Interview room testing</b>

+							<ol>

+								<li>

+									Just a 5 minutes recording:

+									<ol>

+										<li>Enter a room with user A</li>

+										<li>Enter a room with user B</li>

+										<li>Open videos for both users</li>

+										<li>Start recording with user A</li>

+										<li>Wait for 5 minutes</li>

+										<li>Stop recording by user A</li>

+										<li>Repeat steps 1.1 – 1.6 3 times</li>

+										<li>Exit room</li>

+										<li>Wait some time</li>

+										<li>Check that all the recordings are processed and work as expected</li>

+										<li>there should not be a delay between the video and sound</li>

+									</ol>

+								</li>

+								<li>Just a 30 minutes recording: do steps 1.1.1-1.16 one time; then check the result recording</li>

+								<li>Just an 1 hour recording: do steps 1.1.1-1.16 one time; then check the result recording</li>

+								<li>

+									5-minutes recording: user exits the room before the recording gets stopped

+									<ol>

+										<li>Enter a room with user A</li>

+										<li>Enter a room with user B</li>

+										<li>Open videos for both users</li>

+										<li>Start recording with user A</li>

+										<li>Exit the room by user B</li>

+										<li>Stop recording by user A</li>

+										<li>Repeat steps 1.4.1 – 1.4.6 3 times</li>

+										<li>Exit room</li>

+										<li>Wait some time</li>

+										<li>Check that all the recordings are processed and work as expected</li>

+										<li>There should not be a delay between the video and sound</li>

+									</ol>

+								</li>

+								<li>

+									5-minutes recording: user A starts recording, user B stops

+									<ol>

+										<li>Enter a room with user A</li>

+										<li>Enter a room with user B</li>

+										<li>Open videos for both users</li>

+										<li>Start recording with user A</li>

+										<li>Stop recording by user B</li>

+										<li>Exit room</li>

+										<li>Wait some time</li>

+										<li>Check that all the recordings are processed as expected</li>

+									</ol>

+								</li>

+							</ol>

+						</li>

+						<li>

+							<b>Conference room testing</b>

+							<ol>				

+								<li>

+									Screen sharing

+									<ol>

+										<li>Enter a room with user A</li>

+										<li>Enter a room with user B</li>

+										<li>Enter a room by user C</li>

+										<li>Open videos for all the users</li>

+										<li>Start screen sharing session by user A, choose High quality</li>

+										<li>Check that A's screen looks correctly for users B and C and sound is OK in the room</li>

+										<li>Stop screen sharing by user A after 5 minutes</li>

+										<li>Repeat steps 2.1.1-2.1.7 3 times</li>

+										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose “Very high quality” on the step 2.1.5</li>

+										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose “Medium quality” on the step 2.1.5</li>

+										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose “Low quality” on the step 2.1.5</li>

+										<li>Repeat steps 2.1.1-2.1.7 one more time, but choose some random height and width on the step 2.1.5</li>

+										<li>Repeat steps 2.1.1-2.1.7 one more time, but turn the “Notify on disconnect” switch on the step 2.1.5</li>									

+									</ol>

+								</li>

+								<li>

+									Recordings

+									<ol>

+										<li>Enter a room with user A</li>

+										<li>Enter a room with user B</li>

+										<li>Enter a room by user C</li>

+										<li>Open videos for all the users</li>

+										<li>Start recording session by user A, choose High quality</li>

+										<li>Stop recording session by user A after 5 minutes</li>

+										<li>Repeat steps 2.2.1-2.2.6 3 times</li>

+										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose “Very high quality” on the step 2.2.5</li>

+										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose “Medium quality” on the step 2.2.5</li>

+										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose “Low quality” on the step 2.2.5</li>

+										<li>Repeat steps 2.2.1-2.2.6 one more time, but choose some random height and width on the step 2.2.5</li>

+										<li>Repeat steps 2.2.1-2.2.6 one more time, but turn the “Notify on disconnect” switch on the step 2.2.5</li>

+										<li>Go to the A's recordings list and check that all the recordings are there, processed without errors and work as expected</li>

+									</ol>

+								</li>

+								<li>

+									Recordings + screen sharing: user enters the room after recording is started

+									<ol>

+										<li>Enter conference room by user A</li>

+										<li>Start screen sharing and recordings with default parameters by user A</li>

+										<li>Enter the room by user B, check that screen sharing is OK. Wait 5 minutes</li>

+										<li>Enter the room by user C, check that screen sharing is OK. Wait 5 minutes</li>

+										<li>Exit the room by user B; wait 3 minutes</li>

+										<li>Exit the room by user C; wait 3 minutes</li>

+										<li>Exit the room by user A</li>

+										<li>Repeat steps 2.3.1-2.3.7 3 times</li>

+										<li>Go to the recordings list for user A and check that all the recordings are OK and work as expected</li>

+									</ol>

+								</li>

+								<li>

+									Stress test

+									<ol>

+										<li>Enter the room by the users A, B, C, D and E</li>

+										<li>Open A, B, C, D and E videos</li>

+										<li>Start screen sharing and recordings session with high quality by user A</li>

+										<li>Wait 30 minutes</li>

+										<li>Stop screen sharing</li>

+										<li>Go to A's recordings list and check that created recording is OK</li>

+										<li>Repeat steps 2.3.1-2.3.6 3 times</li>

+									</ol>

+								</li>

+							</ol>

+						</li>

+					</ol>

+				</li>

+

+			</ol>

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/MoodlePlugin.xml b/xdocs/MoodlePlugin.xml
new file mode 100644
index 0000000..d17375e
--- /dev/null
+++ b/xdocs/MoodlePlugin.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Moodle Plugin</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Moodle Plugin for OpenMeetings">

+			<p>

+				You can get the latest Version of the Plugin for Moodle from the

+				<a href="downloads.html">downloads</a>

+				.

+				<br/>

+				You can find the OpenMeetings Plugin also in the

+				<a href="http://moodle.org/plugins/view.php?plugin=mod_openmeetings"

+					target="_BLANK" rel="nofollow">Moodle Plugin database</a>

+				.

+				<br/>

+				A demo version of the Moodle plugin is available at

+				<a href="http://moodle.openmeetings.de" target="_BLANK" rel="nofollow">moodle.openmeetings.de

+				</a>

+				.

+			</p>

+		</section>

+		

+		<section name="Installation of the Moodle Plugin for Apache OpenMeetings">

+			<p>

+				You simply download the ZIP or TAR package and unzip it to Moodle's "mod" directory.<br/>

+				Eventually you need to unzip the package into a folder called "openmeetings".

+				The folder structure is:<br/>

+				$MOODLE_HOME/mod/openmeetings/*.php

+				<br />

+				Then you visit the admin interface of Moodle, for example

+				<a href="http://$your_moodle_host/$MOODLE_WWW_ROOT/admin" target="_BLANK"

+					rel="nofollow">http://$your_moodle_host/$MOODLE_WWW_ROOT/admin</a> 

+					<br/>

+				Moodle will detect that there is a new plugin and will show the plugin installation screen:

+			</p>

+			<a class="fancybox-buttons" href="images/moodle_install_plugin.png">

+				<img src="images/moodle_install_plugin.png" alt="" width="430"

+					height="220" />

+			</a>

+			<p>

+				After you have clicked on "Update database" Moodle will show you the plugin configuration screen:

+			</p>

+			<a class="fancybox-buttons" href="images/moodle_configure_plugin.png">

+				<img src="images/moodle_configure_plugin.png" alt="" width="500"

+					height="300" />

+			</a>

+		</section>

+		

+		<section name="Adding a new conference room to a Moodle course">

+			

+			<p>

+				After installation of the plugin you can go to the course pages in Moodle and turn editing on.

+				Then you choose the activity "OpenMeetings", Moodle will then show you the conference room 

+				configuration with all the options:

+			</p>

+			<a class="fancybox-buttons" href="images/moodle_add_activity_plugin.png">

+				<img src="images/moodle_add_activity_plugin.png" alt="" width="430"

+					height="360" />

+			</a>

+		</section>

+		

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/MySQLConfig.xml b/xdocs/MySQLConfig.xml
new file mode 100644
index 0000000..ab5bdd2
--- /dev/null
+++ b/xdocs/MySQLConfig.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>MySQL Configuration</title>

+		<author email="sebawagner@apache.org">

+			Apache OpenMeetings Documentation Team

+		</author>

+	</properties>

+

+	<body>

+		<section name="MySQL Configuration">

+

+			<subsection name="Before you start">

+				<ul>

+					<li>Make sure that you have set utf8 as

+						default/server-character-set in your MySQL configuration (my.cnf)

+						before you start the installation process of OpenMeetings!

+					</li>

+					<li>

+						make sure MySQL is listening on TCP/IP connections!

+						<br />

+						To verify if MySQL connection is working: OpenMeetings will

+						automatically create all tables in the database and all tables

+						should have utf8 as encoding/collation!

+					</li>

+					<li>If you encounter issues, you can drop the db and then run

+						the web based installer again

+					</li>

+				</ul>

+			</subsection>

+

+			<subsection name="Steps todo">

+				<ul>

+					<li>

+						You need to download the JConnector from mysql

+						<a href="http://www.mysql.com/downloads/connector/j/" target="_BLANK"

+							rel="nofollow">http://www.mysql.com/downloads/connector/j/</a>

+						and place it into:

+						<tt>$red5/webapps/openmeetings/WEB-INF/lib/</tt>

+					</li>

+					<li>

+						Run red5-service and goto the web-based installer:

+						http://localhost:5080/openmeetings/install

+					</li>

+				</ul>

+			</subsection>

+

+			<subsection name="MySQL Sample Configuration">

+				<p>

+					There is a sample configuration for MySQL that ships with

+					every

+					release in:

+					<br />

+					/webapps/openmeetings/WEB-INF/classes/META-INF/mysql_persistence.xml

+				</p>

+			</subsection>

+

+

+		</section>

+

+	</body>

+

+</document>

diff --git a/xdocs/Navigation.xml b/xdocs/Navigation.xml
new file mode 100644
index 0000000..1fa5fa7
--- /dev/null
+++ b/xdocs/Navigation.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Change main navigation</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Changing the main navigation">

+

+			<p>To customize the main menu (for example remove entries or changing

+				the order) you can edit the tables:  </p>

+			<ul>

+				<li>navimain </li>

+				<li>naviglobal </li>

+				<li>navisub (currently not in use) </li>

+			</ul>

+			<p></p>

+			<p>

+				You need to make sure that you

+				<strong>restart red5 after doing changes to the database</strong>

+				, there is a database cache, so changes might not take affect as

+				long as you did not restart.

+			</p>

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/OpenOfficeConverter.xml b/xdocs/OpenOfficeConverter.xml
new file mode 100644
index 0000000..f762870
--- /dev/null
+++ b/xdocs/OpenOfficeConverter.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>OpenOffice converter for OpenMeetings</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="OpenOffice Service for OpenMeetings">

+

+			<p>

+				To import .doc, .docx, .odp, .xls, .xlsx, .ppt, .pptx, ... [ all

+				files that you can open with OpenOffice ]

+				to OpenMeetings and use

+				them in the whiteboard you need OpenOffice or LibreOffice

+				installed

+				the machine that runs OpenMeetings.

+			</p>

+			<p>

+				<i>Since Version 2.0 of OpenMeetings starting of

+					OpenOffice/LibreOffice as service in not required, JODConverter

+					will automatically start and shut down the service!

+				</i>

+			</p>

+			<p>

+				Installation of JODConverter means: You donwload the ZIP binary from

+				their

+				<a href="http://code.google.com/p/jodconverter/" target="_BLANK"

+					rel="nofollow">website</a>

+				and then configure in Apache OpenMeetings Administration >

+				Configuration (or during installation) the config key

+				<tt>jod.path</tt>

+				to point to the "lib" directory of the unpacked JODConverter binary.

+				There is no restart of OpenMeetings required.

+			</p>

+			<p>You should use an OpenOffice version greater 3</p>

+

+		</section>

+

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/OracleConfig.xml b/xdocs/OracleConfig.xml
new file mode 100644
index 0000000..85ae5ba
--- /dev/null
+++ b/xdocs/OracleConfig.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>IBM DB2 Configuration</title>

+		<author email="sebawagner@apache.org">

+			Apache OpenMeetings Documentation Team

+		</author>

+	</properties>

+

+	<body>

+		<section name="IBM DB2 Configuration">

+

+			<subsection name="Before you start">

+				<ul>

+					<li>Download the latest JDBC Driver from Oracle for your database

+						version. Place those JARs into

+						$Red5/webapps/openmeetings/WEB-INF/lib

+					</li>

+					<li>If you encounter issues, you can drop the db and then run

+						the web based installer again

+					</li>

+				</ul>

+			</subsection>

+

+			<subsection name="Steps todo">

+				<ul>

+					<li>

+						Run red5-service and goto the web-based installer:

+						http://localhost:5080/openmeetings/install

+					</li>

+				</ul>

+			</subsection>

+

+			<subsection name="Oracle Sample Configuration">

+				<p>

+					There is a sample configuration for Oracle that ships with

+					every release in:

+					<br />

+					/webapps/openmeetings/WEB-INF/classes/META-INF/oracle_persistence.xml

+				</p>

+			</subsection>

+

+

+		</section>

+

+	</body>

+

+</document>

diff --git a/xdocs/PortSettings.xml b/xdocs/PortSettings.xml
new file mode 100644
index 0000000..07717ae
--- /dev/null
+++ b/xdocs/PortSettings.xml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Port settings</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Default Configuration">

+

+			<ul>

+				<li>Port 5080: HTTP (For example for file upload and download) </li>

+				<li>Port 1935: RTMP (Flash Stream and Remoting/RPC) </li>

+				<li>Port 8088: RTMP over HTTP-Tunneling (rtmpT) </li>

+			</ul>

+			<p>Additionally red5 uses some ports internally. However those ports

+				are not in use by OpenMeetings by default.

+			</p>

+

+		</section>

+

+		<section name="Configure alternative ports">

+

+			<p>You need to change two files: </p>

+			<ul>

+				<li>Server-Side configuration: $RED5_HOME/conf/red5.properties, you

+					need to restart the red5-service so that changes are online.

+				</li>

+				<li>Client-Side configuration:

+					$RED5_HOME/webapps/openmeetings/public/config.xml, you need to clear your

+					browser cache after changing the file.

+				</li>

+				<li>

+					<blockquote>Every server side configuration has a client side

+						representative

+					</blockquote>

+				</li>

+			</ul>

+			<p></p>

+			<table>

+				<tr>

+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Config-Name </th>

+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Default-value </th>

+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Name in red5.properties </th>

+					<th style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> Name in public/config.xml </th>

+				</tr>

+				<tr>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> HTTP </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 5080 </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> http.port </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> red5httpport </td>

+				</tr>

+				<tr>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> RTMP </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> 1935 </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> rtmp.port </td>

+					<td style="border: 1px solid rgb(204, 204, 204); padding: 5px;"> rtmpport </td>

+				</tr>

+			</table>

+

+		</section>

+

+		<section name="Preventing Firewall issues">

+

+			<p>A common way of bypassing the firewall is to change HTTP port to

+				80 and rtmpT to 443.

+			</p>

+			<p>A short description about the connection mechanism: The

+				application first tries connecting to rtmp 3 times, because rtmp is

+				the protocol that is less performance hungry. If that fails the

+				application will fallback to rtmpT.

+			</p>

+			<p>Most firewalls do allow traffic on port 443 and they normally do

+				not analyse the packets, because 443 is normally SSL encrypted, so

+				the firewall should not be able to read the packets at all.

+			</p>

+

+		</section>

+

+		<section name="OpenMeetings over SSL">

+

+			<p>

+				You can run OpenMeetings completely over SSL. See

+				<a href="RTMPSAndHTTPS.html">RTMPSAndHTTPS</a>

+				.

+			</p>

+

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/PostgresConfig.xml b/xdocs/PostgresConfig.xml
new file mode 100644
index 0000000..fdbc16e
--- /dev/null
+++ b/xdocs/PostgresConfig.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>PostgreSQL Configuration</title>

+		<author email="sebawagner@apache.org">

+			Apache OpenMeetings Documentation Team

+		</author>

+	</properties>

+

+	<body>

+		<section name="PostgreSQL Configuration">

+

+			<subsection name="Before you start">

+				<ul>

+					<li>Make sure that you have set utf8 as default/server-character-set 

+					</li>

+					<li>

+						make sure PostgreSQL is listening on TCP/IP connections!

+						<br />

+						To verify if PostgreSQL connection is working: OpenMeetings will

+						automatically create all tables in the database and all tables

+						should have utf8 as encoding/collation!

+					</li>

+					<li>If you encounter issues, you can drop the db and then run

+						the web based installer again

+					</li>

+					<li><span style="font-size: larger; color: blue;">IMPORTANT</span> According to

+						<a href="http://markmail.org/message/opymlab2e6wygb7p">this</a> thread you need to ensure:<br/>

+						<tt>standard_conforming_strings</tt> is set to <tt><b>on</b></tt> and <br/>

+						<tt>escape_string_warning</tt> is set to <tt><b>off</b></tt>

+					</li>

+				</ul>

+			</subsection>

+

+			<subsection name="Steps todo">

+				<ul>

+					<li>

+						Run red5-service and goto the web-based installer:

+						http://localhost:5080/openmeetings/install

+					</li>

+				</ul>

+			</subsection>

+

+			<subsection name="PostgreSQL Sample Configuration">

+				<p>

+					There is a sample configuration for PostgreSQL that ships with

+					every

+					release in:

+					<br />

+					/webapps/openmeetings/WEB-INF/classes/META-INF/postgresql_persistence.xml

+				</p>

+			</subsection>

+

+

+		</section>

+

+	</body>

+

+</document>

diff --git a/xdocs/RTMPSAndHTTPS.xml b/xdocs/RTMPSAndHTTPS.xml
new file mode 100644
index 0000000..9d613f9
--- /dev/null
+++ b/xdocs/RTMPSAndHTTPS.xml
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Using OpenMeetings with RTMPS and HTTPS</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Using OpenMeetings with RTMPS and HTTPS">

+

+			<p>There are 3 ways the client communicates with the server: </p>

+			<ul>

+				<li>The flash-client uses RTMP protocol to transfer Audio/Video and

+					to send and receive the user data (login et cetera) to the server

+					and back

+				</li>

+				<li>The browser uses HTTP protocol to load the SWF and to upload and

+					download the files (documents, pdfs, images) to the server and

+					back.

+				</li>

+				<li>The screensharing client uses RTMP protocol to transfer screen

+					data and remote control to the server and back

+				</li>

+			</ul>

+

+		</section>

+

+		<section name="Prerequisites">

+

+			<ul>

+				<li>You need OpenMeetings 1.9.x for this, OpenMeetings 1.8.x does

+					not

+					have those options.

+				</li>

+				<li>Install OpenMeetings according to the install instructions and

+					check that it runs without problems

+				</li>

+				<li>Rename the existing keystore file red5/conf/keystore to

+					keystore.bak

+				</li>

+			</ul>

+

+		</section>

+

+		<section name="Configuring RTMPS for the Flash Client">

+

+			<ol>

+				<li>

+					Create a new keystore and key, use the same password for both:<br/>

+					(copied from

+					<a

+						href="http://trac.red5.org/wiki/Documentation/Tutorials/Red5DeveloperTips/SSLTLS%29:"

+						rel="nofollow">http://trac.red5.org/wiki/Documentation/Tutorials/Red5DeveloperTips/SSLTLS):</a>

+					<div class="xmlcode">

+						keytool -keysize 2048 -genkey -alias red5 -keyalg RSA -keystore red5/conf/keystore<br/>

+						Enter keystore password:<br/>

+						Re-enter new password:<br/>

+						What is your first and last name?<br/>

+						[Unknown]:  &lt;your hostname, e.g demo.openmeetings.de&gt;<br/>

+						What is the name of your organizational unit?<br/>

+						[Unknown]:  Dev<br/>

+						What is the name of your organization?<br/>

+						[Unknown]:  OpenMeetings<br/>

+						What is the name of your City or Locality?<br/>

+						[Unknown]:  Henderson<br/>

+						What is the name of your State or Province?<br/>

+						[Unknown]:  Nevada<br/>

+						What is the two-letter country code for this unit?<br/>

+						[Unknown]:  US<br/>

+						Is CN=demo.openmeetings.de, OU=Dev, O=OpenMeetings, L=Henderson, ST=Nevada, C=US correct?<br/>

+						[no]:  yes<br/>

+						Enter key password for &lt;red5&gt;<br/>

+					</div>

+				</li>

+		

+				<li>Generate a CSR: keytool -certreq -keyalg RSA -alias red5 -file

+					red5.csr -keystore red5/conf/keystore

+				</li>

+				<li>Submit CSR to your CA of choice and receive a signed certificate

+				</li>

+				<li>Import your chosen CA's root certificate into the keystore (may

+					need to download it from their site - make sure to get the root CA and

+					not the intermediate one): keytool -import -alias root -keystore

+					red5/conf/keystore

+					-trustcacerts -file root.crt (note: you may receive a warning that

+					the certificate already exists in the system wide keystore - import

+					anyway)

+				</li>

+				<li>Import the intermediate certificate(s) you normally receive with

+					the certificate:

+					keytool -import -alias intermed -keystore red5/conf/keystore -trustcacerts

+					-file intermediate.crt

+				</li>

+				<li>Import the certificate you received: keytool -import -alias red5

+					-keystore red5/conf/keystore -trustcacerts -file

+					demo.openmeetings.de.crt

+				</li>

+                <li>

+                Create additional certificate as described above.

+                Add this certificate to the following keystores: <tt>red5/conf/keystore.screen</tt> and <tt>red5/conf/keystore</tt>.

+                </li>

+			</ol>

+

+		</section>

+		

+		<section name="Set up RTMPS">

+		

+		  <ol>

+		      <li>

+		      Uncomment <tt>&lt;!-- RTMPS --&gt;</tt> section in <tt>red5/conf/red5-core.xml</tt>

+		      </li>

+

+				<li>

+					Edit <tt>red5/conf/red5.properties</tt> and set

+					<tt>rtmps.port=5443</tt>

+					and

+					<tt>rtmps.keystorepass=password</tt>

+					(password = password you set on your new

+					keystore)

+				</li>

+			

+				<li>

+					Edit red5/webapps/openmeetings/public/config.xml and set

+					<tt>&lt;rtmpsslport&gt;5443&lt;/rtmpsslport&gt;</tt>

+					,

+					<tt>&lt;useSSL&gt;yes&lt;/useSSL&gt;</tt>

+					and

+					<tt>&lt;proxyType&gt;best&lt;/proxyType&gt;</tt>

+				</li>

+

+				<li>Restart red5 and try to connect - your connection should now be

+					made via RTMPS (close port 1935 to be sure)

+				</li>   

+					  

+		  </ol>

+		

+		</section>

+

+		<section name="SSL for the web interface">

+	

+			<p>If you want to use SSL for the web interface in addition to RTMPS,

+				you need to make some further modifications. This is mainly to secure

+				the server against MITM attacks, additionally some other features

+				like file uploads also use a plain HTTP connection if this is not

+				done. The following instructions assume that you have already set up

+				RTMPS successfully. </p>

+			<ol>

+				<li>

+					Edit <tt>red5/conf/jee-container.xml</tt> file:<br/>

+					Comment <tt>Tomcat without SSL enabled</tt> section<br/>

+					UNComment <tt>Tomcat with SSL enabled</tt> section

+				</li>

+				<li>

+					Edit red5/webapps/openmeetings/public/config.xml and set

+					<tt>&lt;protocol&gt;https&lt;/protocol&gt;</tt>

+				</li>

+				<li>

+					Edit red5/webapps/openmeetings/public/config.xml and set

+					<tt>red5httpport</tt> to <tt>https</tt> port

+				</li>

+				<li>In webapps/openmeetings/WEB-INF/conf/axis2.xml add (below the existing http transportReceiver (around line 225))

+					<div class="xmlcode">&lt;transportReceiver name="https" class="org.apache.axis2.transport.http.AxisServletListener"&gt;<br/>

+    &#160;&#160;&#160;&#160;&lt;parameter name="port"&gt;443&lt;/parameter&gt;<br/>

+&lt;/transportReceiver&gt;</div>

+				</li>

+				<li>Edit red5/conf/red5.properties and set <tt>https.port=443</tt> </li>

+				<li>

+					Restart red5 and try to connect to

+					<a href="https://your.server" rel="nofollow">https://your.server</a>

+					- you should be redirected to the OpenMeetings

+					app and all access should be via HTTPS or RTMPS (close port 5080 to

+					be sure).

+				</li>

+            </ol>

+            

+	   </section>

+

+		<section name="Credits">

+	

+			<p>Credits goto: Nexus and Holger Rabbach for their help and

+				contribution and configuration documention! </p>

+	

+		</section>

+	

+

+	</body>

+

+</document>

+

diff --git a/xdocs/RecommendedHardwareList.xml b/xdocs/RecommendedHardwareList.xml
new file mode 100644
index 0000000..c5187e0
--- /dev/null
+++ b/xdocs/RecommendedHardwareList.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Home</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+		<section name="Cameras">

+			We recommend the following cameras:

+			<ul>

+				<li>Logitech QuickCam Sphere AF</li>

+				<li>Logitech QuickCam E3500</li>

+				<li>Samsung Pleomax PWC-7100</li>

+				<li>Genius Look320S</li>

+				<li>Integrated Lenovo 3000 n100</li>

+				<li>Skypemate WC-103M</li>

+			</ul>

+		</section>

+		<section name="Headsets">

+			The recommended headset model (i.e. headphones with microphone) is:

+			<ul>

+				<li>Logitech Clear Chat Style</li>

+			</ul>

+			Also the following headsets showed good results:

+			<ul>

+				<li>ClearChat PC Wireless (helps to suppress echo)</li>

+				<li>Logitech USB Desktop Microphone - Mikrophon (good sound, but bad echo cancellation)</li>

+			</ul>

+			<b>Note for Mac OS X users:</b> The build-in microphone normally has quite good quality and echo cancellation, so Mac OS X users often do not even require a headset.

+		</section>

+		<section name="Speakerphones">

+			When several people participate from the same location, we recommend using the following speakerphone models:

+			<ul>

+				<li>Phoenix Audio Quattro2 USB Speakerphone MT301 (a single microphone + speakers can be used even with 20-30 people sitting in a room)</li>

+				<li>Phoenix DUET Executive</li>

+				<li>Jabra SPEAK410</li>

+				<li>Plantronics MCD 100M</li>

+				<li>Integrated Lenovo 3000 n100</li>

+				<li>Konftel 300</li>

+			</ul>

+		</section>

+	</body>

+</document>

diff --git a/xdocs/RedminePlugin.xml b/xdocs/RedminePlugin.xml
new file mode 100644
index 0000000..de773ff
--- /dev/null
+++ b/xdocs/RedminePlugin.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+	<properties>

+		<title>Redmine Plugin</title>

+		<author email="solomax@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+	<body>

+		<section name="OpenMeetings Plugin for Redmine">

+			<p>

+				Current Development Snapshots for testing can be created from the sources:

+				<a href="https://svn.codespot.com/a/apache-extras.org/openmeetings-redmine-plugin/trunk">here</a>.<br/>

+				The page at redmine site is <a href="http://www.redmine.org/plugins/redmine-openmeetings">here</a>

+			</p>			

+		</section>

+		<section name="Features">

+			<p>TBD</p>

+		</section>

+	</body>

+</document>

diff --git a/xdocs/ReleaseGuide.xml b/xdocs/ReleaseGuide.xml
new file mode 100644
index 0000000..db4120a
--- /dev/null
+++ b/xdocs/ReleaseGuide.xml
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Release Guide</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="How to Build a Release of OpenMeetings">

+

+			<subsection name="Required tools">

+

+				<div>

+					<p>To build a binary release of OpenMeetings you need: </p>

+					<ul>

+						<li>Sun JDK6</li>

+						<li>Apache ANT (minimum) 1.8.3</li>

+						<li>

+							SVN Command line client (Subversion 1.7 required!)

+							<a href="http://subversion.apache.org/packages.html" target="_BLANK"

+								rel="nofollow">http://subversion.apache.org/packages.html</a>

+						</li>

+						<li>A text editor</li>

+						<li>You need to be online! The build process actively downloads

+							needed libraries and dependencies.

+						</li>

+					</ul>

+				</div>

+

+			</subsection>

+

+			<subsection name="Prepare your Apache ID">

+

+				<div>

+					Every release package must be signed with a PGP/GPG key.

+					<br />

+					So if you want to release a package your Apache Id must be

+					connected with a PGP key!

+					<br />

+					<br />

+					You might follow:

+					<br />

+					<a

+						href="http://www.apache.org/dev/new-committers-guide.html#security-and-pgp"

+						target="_blank">http://www.apache.org/dev/new-committers-guide.html#security-and-pgp

+					</a>

+					<br />

+					<br />

+					In short:

+					<br />

+					Create PGP key pairs (private + public) (and I recommend creating a

+					Revoke Cert)

+					<br />

+					Upload the public key (either bei using the PGP Tool that you use

+					to create the key) or by using the web form to:

+					<a href="http://pgp.mit.edu/" target="_blank" rel="nofollow">http://pgp.mit.edu/

+					</a>

+					<br />

+					Add the fingerprint string (something like "BF13 CF11 F9C9 0CBE

+					4413 09AB 0055 16BF 93A3 0395") to your profile at

+					<a href="http://id.apche-org" target="_blank" rel="nofollow">id.apche-org

+					</a>

+					<br />

+					Wait for 6-8 hours, the server will search for a public key based

+					on your fingerprint, if success it will create a file with your

+					name at:

+					<br />

+					<a href="https://people.apache.org/keys/committer/">https://people.apache.org/keys/committer/</a>

+					<br />

+					<br />

+					If that is "success" then add your key to:

+					<br />

+					<a

+						href="https://svn.apache.org/repos/asf/openmeetings/project/KEYS">https://svn.apache.org/repos/asf/openmeetings/project/KEYS

+					</a>

+					<br />

+					and follow the instructions in the file.

+					<br />

+				</div>

+

+			</subsection>

+

+			<subsection name="Step1 - Prepare files">

+				<p>

+					Check that all files:

+					<br />

+					LICENSE, NOTICE, DISCLAIMER, CHANGELOG, README

+					<br />

+					are up to date and refer to the right version.

+				</p>

+

+				<p>

+					Create a TAG of the SVN tree that you would like to release<br/>

+					Example:

+				</p>

+				

+				<div class="xmlcode">

+					svn copy -r1453158 https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp \<br/>

+						https://svn.apache.org/repos/asf/openmeetings/tags/2.1RC1 \<br/>

+						-m "Release candidate 1"

+				</div>

+				

+

+				<p>Get the source from your TAG: </p>

+				<div class="xmlcode">

+					svn checkout https://svn.apache.org/repos/asf/openmeetings/tags/$BRANCHORTAG/<br />

+					$BRANCHORTAG should be replaced with your new TAG

+				</div>

+

+				<p>Edit the file build.properties change</p>

+				<div class="xmlcode">

+					project.status=SNAPSHOT

+				</div>

+				<p>to</p>

+				<div class="xmlcode">

+					project.status=RELEASE

+				</div>

+				<p>Run the command: </p>

+				<div class="xmlcode">

+					ant dist-release

+				</div>

+				<p>Test building the source on windows and OSx or Linux</p>

+				<p>Test running the binary's</p>

+				<p>Create MD5 checksums</p>

+				<div class="xmlcode">

+					#On OSX you might use this command to make a MD5 checksum and store it to a file<br />

+					md5 -r apache-openmeetings-XXX-src.zip >apache-openmeetings-XXX-src.zip.md5

+				</div>

+				<div class="xmlcode">

+					#To create MD5 hashes On Ubuntu:<br />

+					for f in `ls -1 *.tar.gz *.zip`; do md5sum $f > $f.md5; done<br/>

+					<br/>

+					#To check MD5 hashes On Ubuntu:<br />

+					for f in `ls -1 *.tar.gz *.zip`; do md5sum -c $f.md5; done

+				</div>

+				<p>

+					Create signatures with the your KEY for every file, the KEY must be available at:<br />

+					<a href="http://www.apache.org/dist/incubator/openmeetings/KEYS">

+						http://www.apache.org/dist/incubator/openmeetings/KEYS

+					</a>

+				</p>

+				<div class="xmlcode">

+					#To create signatures On Ubuntu:<br />

+					for f in `ls -1 *.tar.gz *.zip`; do gpg --armor --output $f.asc --detach-sig $f; done<br/>

+					<br/>

+					#To check signatures On Ubuntu:<br />

+					for f in `ls -1 *.tar.gz *.zip`; do gpg --verify $f.asc; done

+				</div>

+				

+				<p>

+					Commit artifacts you have created with KEYS file to the

+					<tt>https://dist.apache.org/repos/dist/dev/openmeetings/</tt>

+					Proposed file structure for "Release Candidate 1" of 2.1 will be:

+				</p>

+				<div class="xmlcode">

+					2.1<br />

+					2.1/rc1<br />

+					2.1/rc1/src<br />

+					2.1/rc1/src/apache-openmeetings-2.1.0-src.zip<br />

+					2.1/rc1/src/apache-openmeetings-2.1.0-src.tar.gz<br />

+					2.1/rc1/src/apache-openmeetings-2.1.0-src.zip.md5<br />

+					2.1/rc1/src/apache-openmeetings-2.1.0-src.zip.asc<br />

+					2.1/rc1/src/apache-openmeetings-2.1.0-src.tar.gz.md5<br />

+					2.1/rc1/src/apache-openmeetings-2.1.0-src.tar.gz.asc<br />

+					2.1/rc1/bin<br />

+					2.1/rc1/bin/apache-openmeetings-2.1.0.zip<br />

+					2.1/rc1/bin/apache-openmeetings-2.1.0.tar.gz<br />

+					2.1/rc1/bin/apache-openmeetings-2.1.0.zip.md5<br />

+					2.1/rc1/bin/apache-openmeetings-2.1.0.zip.asc<br />

+					2.1/rc1/bin/apache-openmeetings-2.1.0.tar.gz.md5<br />

+					2.1/rc1/bin/apache-openmeetings-2.1.0.tar.gz.asc<br />

+					2.1/rc1/CHANGELOG<br />

+					2.1/rc1/KEYS<br />

+				</div>

+			</subsection>

+

+			<subsection name="Step2 - VOTE and RESULT emails">

+				<p>

+					Send a "VOTE" to the developer mailing list including links to release artefacts.<br />

+					A VOTE always contains two parts:<br />

+					Send an email to the developer mailing list with the subject line:<br />

+					[VOTE] Apache OpenMeetings x.xx release<br />

+					An example for such an email:

+					<a href="http://s.apache.org/vote-2.1.0RC1">example Vote email</a>

+					<a href="http://s.apache.org/vote-2.0.0RC4">example Vote email (Incubator)</a>

+					<br />

+					Forward (Not CC) this Vote email to: private@openmeetings.apache.org<br />

+					<br />

+					After the vote is over, send a "RESULT" email to the list with the subject line:<br />

+					[RESULT][VOTE] Apache OpenMeetings x.xx release<br />

+					An example for such an email:

+					<a

+						href="http://mail-archives.apache.org/mod_mbox/incubator-openmeetings-dev/201207.mbox/%3CCACeMiA-ibo6fGCbnLjJX9H5H2kFGDVJRMfxPyMtzWzCWNi%2BpOg%40mail.gmail.com%3E">example Result email</a>

+					<br />

+					Forward (Not CC) this RESULT VOTE email to: private@openmeetings.apache.org<br />

+					<br />

+					Votes on whether a package is ready to be released use majority approval -- i.e., at 

+					least three PMC members must vote affirmatively for release, and there must be more 

+					positive than negative votes. Releases may not be vetoed. Before voting +1 PMC members

+					are required to download the signed source code package, compile it as provided, and 

+					test the resulting executable on their own platform, along with also verifying that 

+					the package meets the requirements of the ASF policy on releases.

+				</p>

+			</subsection>

+

+			<subsection name="Step3 - Distribute and announce">

+				<p>If VOTEs positive: Upload the release </p>

+				<div class="xmlcode">

+					svn mv https://dist.apache.org/repos/dist/dev/openmeetings/2.1/rc3 \<br/>

+						https://dist.apache.org/repos/dist/release/openmeetings/2.1 \<br/>

+						-m "RC3 is released as 2.1"

+				</div>

+				<p>

+					Wait 24 hours (until all Apache mirrors have synced the packages)

+					and send an announcement to the mailing list + blog and any other

+					channel.

+				</p>

+				<p>

+					Email announcements should have the subject line:

+					<br />

+					[ANNOUNCE] Apache OpenMeetings x.xx released

+				</p>

+				<p>

+					Add a section to <a href="downloads.html">downloads</a> website.<br />

+					Make sure that the binary packages are linked using the mirror URL as base path (

+					<b>not</b> http://www.apache.org/dist):<br />

+					Mirror URL: 

+					<a href="http://www.apache.org/dyn/closer.lua/openmeetings/">http://www.apache.org/dyn/closer.lua/openmeetings/</a>

+				</p>

+				<p>

+					Release candidates should be deleted from <tt>https://dist.apache.org/repos/dist/dev/openmeetings/</tt><br/>

+					Old releases should be deleted from <tt>https://dist.apache.org/repos/dist/release/openmeetings/</tt>

+				</p>

+			</subsection>

+

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/RestAPISample.xml b/xdocs/RestAPISample.xml
new file mode 100644
index 0000000..ea79010
--- /dev/null
+++ b/xdocs/RestAPISample.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Home</title>

+		<author email="sebawagner@apache.org">

+			Sebastian Wagner

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Introduction">

+

+			<p> For a detailed instruction which services, methods and params are available see the list in the SoapMethods. ALL methods that are implemented for the SOAP API are also available via REST. 

+			</p>

+

+		</section>

+		

+		<section name="How to invoke Services via REST">

+

+			<p>For example for the method getSession in the UserService, you would use this URL via REST:

+			</p>

+			<p>Sample URL: </p><a href="http://demo.openmeetings.de/openmeetings/services/UserService/getSession">http://demo.openmeetings.de/openmeetings/services/UserService/getSession</a>

+			<p>Result: </p>

+			<div class="xmlcode">

+				&lt;ns:getSessionResponse/&gt;<br/>

+				&lt;ns:return type="org.apache.openmeetings.hibernate.beans.basic.Sessiondata"/&gt;<br/>

+				<div style="margin-left:20px">

+					&lt;ax219:id&#62;156971&lt;/ax219:id/&gt;<br/>

+					&lt;ax219:language_id xsi:nil="true"//&gt;<br/>

+					&lt;ax219:organization_id xsi:nil="true"//&gt;<br/>

+					&lt;ax219:refresh_time&#62;2011-07-03T14:40:44.000Z&lt;/ax219:refresh_time/&gt;<br/>

+					&lt;ax219:sessionXml xsi:nil="true"//&gt;<br/>

+					&lt;ax219:session_id&#62;26584705202d7c1de6cc8e7e28890e3d&lt;/ax219:session_id/&gt;<br/>

+					&lt;ax219:starttermin_time&#62;2011-07-03T14:40:44.000Z&lt;/ax219:starttermin_time/&gt;<br/>

+					&lt;ax219:storePermanent xsi:nil="true"//&gt;<br/>

+					&lt;ax219:user_id xsi:nil="true"//&gt;<br/>

+				</div>

+				&lt;/ns:return/&gt;<br/>

+				&lt;/ns:getSessionResponse/&gt;<br/>

+			</div>

+			<p>To login a user the call to auth would be:</p>

+			<p>Sample URL: </p><a href="http://demo.openmeetings.de/openmeetings/services/UserService/loginUser?SID=26584705202d7c1de6cc8e7e28890e3d&#38;username=hans&#38;userpass=test">http://demo.openmeetings.de/openmeetings/services/UserService/loginUser?SID=26584705202d7c1de6cc8e7e28890e3d&#38;username=han&#38;userpass=test</a>

+			<p>Result: </p>

+			<div class="xmlcode">

+				&lt;ns:loginUserResponse/&gt;<br/>

+				<div style="margin-left:20px">

+				    &lt;ns:return&#62;-11&lt;/ns:return/&gt;<br/>

+				</div>

+				&lt;/ns:loginUserResponse/&gt;<br/>

+			</div>

+			<p>=> It does return -10, which is the error id cause we will not write down a SOAP login to our public server in this wiki. However the correct way to check this error would be to invoke the call to get the localized error message. So we invoke the method to get the error via REST:</p>

+			<p>Sample URL: </p><a href="http://demo.openmeetings.de/openmeetings/services/UserService/getErrorByCode?SID=26584705202d7c1de6cc8e7e28890e3d&#38;errorid=-10&#38;language_id=1">http://demo.openmeetings.de/openmeetings/services/UserService/getErrorByCode?SID=26584705202d7c1de6cc8e7e28890e3d&#38;errorid=-10&#38;language_id=1</a>

+			<p>Result:</p>

+			<div class="xmlcode">

+				&lt;ns:getErrorByCodeResponse/&gt;<br/>

+				&lt;ns:return type="org.apache.openmeetings.db.dto.basic.ErrorResult"/&gt;<br/>

+				<div style="margin-left:20px">

+					&lt;ax218:errmessage&#62;Username not found&lt;/ax218:errmessage/&gt;<br/>

+					&lt;ax218:errorId&#62;-10&lt;/ax218:errorId/&gt;<br/>

+					&lt;ax218:errortype&#62;Error&lt;/ax218:errortype/&gt;<br/>

+				</div>

+				&lt;/ns:return/&gt;<br/>

+				&lt;/ns:getErrorByCodeResponse/&gt;<br/>

+			</div>

+		</section>

+

+

+

+	</body>

+</document>
\ No newline at end of file
diff --git a/xdocs/RestrictedAccess.xml b/xdocs/RestrictedAccess.xml
new file mode 100644
index 0000000..f2f9ead
--- /dev/null
+++ b/xdocs/RestrictedAccess.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>How to restrict access to your Openmeetings server</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+	

+		<section name="Server Side">

+	

+			<p>You can protect your OpenMeetings instance from beeing accessed

+				from 3th party by using the file:

+			</p>

+			<p>$RED5_HOME/webapps/openmeetings/WEB-INF/red5-web.properties </p>

+			<p>Content: </p>

+			<div class="xmlcode">

+				webapp.virtualHosts=*,localhost, 127.0.0.1

+			</div>

+			Sample file:

+			<a

+				href="http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/webapp/WEB-INF/red5-web.properties"

+				rel="nofollow">http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/main/webapp/WEB-INF/red5-web.properties

+			</a>

+		</section>

+

+		<section name="Client Side">

+

+			<p>And you can restrict the access also for the client side: Every

+				Flash Plugin will check a file called "crossdomain.xml" before it

+				tries to access the server using rtmp/RPC. This file is located: </p>

+			<p>$RED5_HOME/webapps/root/crossdomain.xml </p>

+			<p>Content: </p>

+			<div class="xmlcode">

+				&lt;?xml version="1.0"?&gt;<br/>

+				&lt;cross-domain-policy&gt;<br/>

+				        &lt;site-control permitted-cross-domain-policies="all"/&gt;<br/>

+				        &lt;allow-access-from domain="localhost" to-ports="20-65535"/&gt;<br/>

+				        &lt;allow-access-from domain="*.local" to-ports="20-65535"/&gt;<br/>

+				&lt;/cross-domain-policy&gt;<br/>

+			</div>

+			

+            <p>

+				Sample file:

+				<a

+					href="http://code.google.com/p/red5/source/browse/java/server/trunk/webapps/root/crossdomain.xml"

+					rel="nofollow">http://code.google.com/p/red5/source/browse/java/server/trunk/webapps/root/crossdomain.xml

+				</a>

+			</p>

+				<p>

+					If you accessing your application behind an Apache Webservre (using

+					mod_proxy or mod_jk2) be careful to make the crossdomain.xml

+					accessible. Flash will always search for this file in the www-root

+					directory of every URL you connect to. You might use

+					<a href="https://addons.mozilla.org/de/firefox/addon/firebug/" rel="nofollow">FireBug

+					</a>

+					for example to lookup requests.

+				</p>

+

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/SakaiPlugin.xml b/xdocs/SakaiPlugin.xml
new file mode 100644
index 0000000..73439a5
--- /dev/null
+++ b/xdocs/SakaiPlugin.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Sakai Plugin</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Introduction">

+			<p>

+				In 2010,

+				<a rel="nofollow" href="http://www.samoo.es" target="_blank">Samoo company

+				</a>

+				has developed a plugin that integrates Sakai LMS and OpenMeetings

+				.

+			</p>

+			<p>

+				The plugin was developed for some Spanish Universities that use

+				Sakai and belongs to

+				<a rel="nofollow" target="_blank" 

+					href="https://confluence.sakaiproject.org/display/SPANISH/S2G+-+Spanish+Sakai+Group">"Spanish Sakai Universities"</a>

+				group:

+			</p>

+			<ul>

+				<li>

+					<a rel="nofollow" href="http://www.udl.es/" target="_blank">Universitat de Lleida </a>

+				</li>

+				<li>

+					<a rel="nofollow" href="http://www.upv.es/" target="_blank">Universidad Polit&#233;cnica de Valencia </a>

+				</li>

+				<li>

+					<a rel="nofollow" href="http://www.um.es/" target="_blank">Universidad de Murcia</a>

+				</li>

+				<li>

+					<a rel="nofollow" href="http://www.unavarra.es/" target="_blank">Universidad P&#250;blica de Navarra</a>

+				</li>

+				<li>

+					<a rel="nofollow" href="http://www.ucam.edu/" target="_blank">Universidad Cat&#243;lica San Antonio de Murcia

+					</a>

+				</li>

+			</ul>

+		</section>

+

+		<section name="Features">

+			<p>The plugin contains the following features: </p>

+			<ul>

+				<li>Create videoconference rooms through Sakai: </li>

+				<li>

+					<ol>

+						<li>Integrated with calendar </li>

+						<li>Integrated with announcements </li>

+						<li>Sends an email to all site participants </li>

+						<li>Rooms restricted to site groups </li>

+						<li>Configurable room type </li>

+					</ol>

+				</li>

+			</ul>

+			<p />

+			<ul>

+				<li>Future requirements </li>

+				<li>

+					<ol>

+						<li>Publish room recordings to students </li>

+						<li>Room reservation </li>

+					</ol>

+				</li>

+			</ul>

+		</section>

+

+		<section name="Source">

+			<p>

+				You can download and build the source code

+				<a rel="nofollow" target="_blank" 

+					href="https://source.sakaiproject.org/contrib/samoo/adobeconnectpro-openmeetings-integration/trunk/">here</a>

+			</p>

+		</section>

+

+		<section name="Installation and documentation">

+			<p>

+				The documentation resides in the

+				<a rel="nofollow" target="_blank" href="https://confluence.sakaiproject.org/display/OPENMTG/Home">Sakai confluence space</a>

+			</p>

+			<p>

+				Please contact the mailing list for further information. For

+				commercial support you can also contact

+				<a rel="nofollow" href="http://www.samoo.es" target="_blank">Samoo company</a>

+				or other companies from the list of

+				<a href="commercial-support.html">commercial support</a>

+				.

+			</p>

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/SoapRestAPI.xml b/xdocs/SoapRestAPI.xml
new file mode 100644
index 0000000..db9ba39
--- /dev/null
+++ b/xdocs/SoapRestAPI.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Home</title>

+		<author email="sebawagner@apache.org">

+			Sebastian Wagner

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Available WebServices">

+

+			<div>

+				<div>

+					<a href="UserService.html" target="_BLANK">

+						<b>UserService</b>

+					</a>

+					<br />

+					<div style="margin-left:20px">

+						<i>The Service contains methods to login and create hash to

+							directly enter

+							conference rooms, recordings or the application in

+							general

+						</i>

+					</div>

+				</div>

+				<div>

+					<a href="RoomService.html" target="_BLANK">

+						<b>RoomService</b>

+					</a>

+					<br />

+					<div style="margin-left:20px">

+						<i>RoomService contains methods to manipulate rooms and create

+							invitation hash

+						</i>

+					</div>

+				</div>

+				<div>

+					<a href="FileService.html" target="_BLANK">

+						<b>FileService</b>

+					</a>

+					<br />

+					<div style="margin-left:20px">

+						<i>Contains methods to import and upload files into the Files

+							section of the

+							conference room and the personal drive of any user

+						</i>

+					</div>

+				</div>

+				<div>

+					<a href="CalendarService.html" target="_BLANK">

+						<b>CalendarService</b>

+					</a>

+					<br />

+					<div style="margin-left:20px">

+						<i>CalendarService contains methods to create, edit delete

+							calendar meetings

+						</i>

+					</div>

+				</div>

+				<div>

+					<a href="JabberService.html" target="_BLANK">

+						<b>JabberService</b>

+					</a>

+					<br />

+					<div style="margin-left:20px">

+						<i>The Service contains methods necessary for OM to Jabber integration.

+						All methods doesn't require admin privileges to get called.

+						</i>

+					</div>

+				</div>

+				<div>

+					<a href="ServerService.html" target="_BLANK">

+						<b>ServerService</b>

+					</a>

+					<br />

+					<div style="margin-left:20px">

+						<i>The Service contains methods necessary for OM to manage servers 

+						participating in cluster.

+						All methods does require admin privileges to get called.

+						</i>

+					</div>

+				</div>

+			</div>

+

+		</section>

+

+

+	</body>

+</document>
\ No newline at end of file
diff --git a/xdocs/SugarCRMPlugin.xml b/xdocs/SugarCRMPlugin.xml
new file mode 100644
index 0000000..e3f8069
--- /dev/null
+++ b/xdocs/SugarCRMPlugin.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>SugarCRM Plugin</title>

+		<author email="eschwert@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="SugarCRM Plugin for OpenMeetings">

+			<p>

+				You can get the latest Version of the Plugin for SugarCRM from the

+				<a href="downloads.html">downloads</a>

+				.

+			</p>

+			<p>

+				You can find the OpenMeetings Plugin also in the

+				<a href="http://www.sugarforge.org/projects/openmeetings/"

+					target="_BLANK" rel="nofollow">SugarCRM Plugin database</a>

+				.

+			</p>

+			<p>

+				A demo version of the SugarCRM plugin is available at

+				<a href="http://demo.e-schwert.de/sugarcrm/" target="_BLANK" rel="nofollow">demo.e-schwert.de</a>

+				. Username: demo Password: Demouser55 

+			</p>

+		</section>

+		

+		<section name="Features">

+			<p>The plugin contains the following features: </p>

+			<ul>

+				<li>Create videoconference rooms through SugarCRM: </li>

+				<li>

+					<ol>

+						<li>Integrated with calendar </li>

+						<li>Integrated with SugarCRM meetings </li>

+						<li>Sends invetations emails to meeting participants </li>					

+						<li>Configurable room type </li>

+					</ol>

+				</li>

+			</ul>			

+		</section>

+

+		<section name="Installation the SugarCRM Plugin for OpenMeetings">			

+			<p>In SugarCRM's administration web-interface you will find the

+				module loader.

+			</p>

+			<a class="fancybox-buttons" href="images/moodle_plugin_conference.png">

+				<img src="images/SugarCRM_Installation.png" alt="" width="640"

+					height="320" />

+			</a>

+			<ol>

+				<li>Upload the module with module loader in administration area. </li>

+				<li>Configure OpenMeetings settings. </li>

+				<li>Create OpenMeetings rooms. </li>				

+			</ol>

+		</section>

+		

+		<section name="Demo video">			

+			<p>The demo video of SugarCRM plugin show you the plugin in action </p>              

+		      <object style="height: 390px; width: 640px">

+			      <param name="movie" value="http://www.youtube.com/v/xrDbcXqxDq8?version=3&amp;feature=player_detailpage"/>

+			      <param name="allowFullScreen" value="true"/>

+			      <param name="allowScriptAccess" value="always"/>

+			      <embed src="http://www.youtube.com/v/xrDbcXqxDq8?version=3&amp;feature=player_detailpage" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="360"/>

+		      </object> 

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/TimeZoneHandling.xml b/xdocs/TimeZoneHandling.xml
new file mode 100644
index 0000000..e78e560
--- /dev/null
+++ b/xdocs/TimeZoneHandling.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Timezones</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Introduction">

+			<p>

+				List of default Timezones:

+				<a

+					href="http://openmeetings.googlecode.com/svn/trunk/singlewebapp/src/main/webapp/languages/timezones.xml"

+					rel="nofollow">http://openmeetings.googlecode.com/svn/trunk/singlewebapp/src/main/webapp/languages/timezones.xml

+				</a>

+			</p>

+			<p>

+				To add a new Time Zone you have to lookup its represant in Java's

+				Timezone registry. You can then add freely new time zones to the XML

+				file. The XML entries are imported into the database into the table

+				<strong>om_timezone</strong>

+				during the installation of OpenMeetings. (Don't forget to stop the

+				server before you change anything in the database).

+			</p>

+			<p>

+				The Servers default timezone is stored in the configuration table in

+				the attribute

+				<strong>default.timezone</strong>

+				. The name in this value links to an attribute in the table

+				om_timezone in the column

+				<strong>jname</strong>

+				.

+			</p>

+			<p>

+				You can set a Flag

+				<strong>forceTimeZoneCheck</strong>

+				for each user that gives him a Pop-Up notification to change his

+				time zone. The Flag can be changed in the user administration of

+				OpenMeetings. This can be handy if you update from a previous

+				version of OpenMeetings to make sure users see the new feature and

+				update their settings.

+			</p>

+			

+			

+			

+		</section>

+		

+		<section name="How to lookup timezone's">

+		

+		  <div class="xmlcode">

+		  

+                    String[] ids = TimeZone.getAvailableIDs();<br/>

+                    for (String id : ids) {<br/>

+                        

+                        <div style="margin-left:20px">

+                        TimeZone timeZone = TimeZone.getTimeZone(id);<br/>

+                        //TimeZone timeZone = timeRegistry.getTimeZone(id);<br/>

+                        <br/>

+                        Calendar cal = Calendar.getInstance();<br/>

+                                <div style="margin-left:20px">

+                                cal.setTimeZone(timeZone);<br/>

+                                // + cal.get(Calendar.DST_OFFSET)<br/>

+                                int offset = cal.get(Calendar.ZONE_OFFSET);<br/>

+                        <br/>

+                                int offsetInMinutes = offset/1000/60;<br/>

+                                <br/>

+                                System.out.println("name" + id + "name offset "+offsetInMinutes+"offset ");

+                                </div>

+                        </div>

+                    }

+		  

+		  </div>

+		  

+		  

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/Upgrade.xml b/xdocs/Upgrade.xml
new file mode 100644
index 0000000..9e8aa93
--- /dev/null
+++ b/xdocs/Upgrade.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Upgrade</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+		<section name="Upgrading OpenMeetings via the Web-Interface">

+			<ol>

+				<li>

+					<p>There is a System Backup and Import tool. Login as Administrator and Administration &gt; Backup</p>

+					<a class="fancybox-buttons" href="images/backup.png"><img src="images/backup.png" alt="" width="600" /></a>

+					<p>

+						The Text in the Administration &gt; Backup section actually just says

+						it all. The backup contains users, rooms, organizations and

+						appointments (Invitations and Reminders are NOT included in the

+						Backup and Reminders will not be send again!). The Backup contains

+						also all uploaded Files and Documents and will re-import them again.

+		

+						Max Upload Size is 1000 MB.

+					</p>

+				</li>

+				<li>Stop Openmeetings</li>

+				<li>(*) Backup folder with existing installation</li>

+				<li>(*) Perform DB backup using tools available for your database</li>

+				<li>Delete/move folder with existing installation of OM</li>

+				<li>Drop existing OM database</li>

+				<li>Create empty Database with same name and UTF-8 support</li>

+				<li>Unzip new version of OM into the same folder</li>

+				<li>(*) Modify DB settings</li>

+				<li>Start Openmeetings</li>

+				<li>go to http://localhost:5080/openmeetings</li>

+				<li>Install OM using Web installer</li>

+				<li>Login as Administrator and Administration &gt; Backup</li>

+				<li>Perform system import</li>

+			</ol>

+			<p>(*) Optional step</p>

+		</section>

+

+		<section name="Upgrading OpenMeetings from command line">

+			<p>

+				<i>You need OpenMeetings 2.x or later to have the command line interface (CLI) 

+					feature available

+				</i>

+			</p>

+			<p>

+				Alternatively to the Web-Installer you can also export and import via the command line. <br/>

+				<b>You should shutdown the Red5-Service while doing CLI export or import operations</b><br />

+				Cd to your red5-home directory, type "./admin.sh" and hit enter. You will get options available.<br />

+				<br />

+				A typical export would be:<br />

+				<tt>./admin.sh -b -file backup_today.zip</tt><br />

+				<br />

+				A typical import would be:<br />

+				<tt>./admin.sh -r -file backup_yesterday.zip</tt><br />

+				<br />

+				You can also combine the installation with a backup, that way you will create exactly the user table 

+				that existed in the backup.<br />

+				A typical install from backup would be:<br />

+				<tt>./admin.sh -i -file backup_yesterday.zip</tt><br/>

+				please see <a href="CommandLineAdmin.html" target="_BLANK" rel="nofollow">Command Line Admin</a> for more options

+			</p>

+			<p><b>Detailed steps</b></p>

+			<ol>

+				<li>Stop Openmeetings</li>

+				<li>(*) Backup folder with existing installation</li>

+				<li>(*) Perform DB backup using tools available for your database</li>

+				<li><tt>./admin.sh -v -b -file ../backup_today.zip</tt></li>

+				<li>Delete/move folder with existing installation of OM</li>

+				<li>Unzip new version of OM into the same folder</li>

+				<li><tt>./admin.sh -v -i -file ../backup_today.zip --drop --skip-default-room</tt> (Optionally you can specify

+					additional parameters like DB host/user/pass/instance etc.)</li>

+				<li>Start Openmeetings</li>

+				<li>go to http://localhost:5080/openmeetings</li>

+			</ol>

+			<p>(*) Optional step</p>

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/WebappNamePath.xml b/xdocs/WebappNamePath.xml
new file mode 100644
index 0000000..7d5f64b
--- /dev/null
+++ b/xdocs/WebappNamePath.xml
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Webapp Name / Path</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Customize Openmeetings logo">

+			<p>If you want to set up your logo in Openmeetings header you can do the following:</p>

+			<ol>

+				<li>create your logo image as PNG 40px height</li>

+				<li>replace <tt>/opt/red5/webapps/openmeetings/public/themes/basic-theme/general/logo.png</tt> with your logo file</li>

+				<li>(Advanced optional) you can modify <tt>/opt/red5/webapps/openmeetings/public/config.xml</tt> and modify <tt>appdisplay</tt> section: set position and display for the logo and/or name</li>

+				<li>(Advanced optional) you can modify <tt>/opt/red5/webapps/openmeetings/public/theme.xml</tt> (around line 57) and change image name/path</li>

+			</ol>

+		</section>

+		<section name="Renaming /openmeetings context">

+			<p>

+				If you want to have

+				<tt>http://yourcorp.com:5080/yourmeetings</tt>

+				instead of

+				<tt>http://yourcorp.com:5080/openmeetings</tt>

+				you need to do the following

+			</p>

+			<ol>

+				<li>stop openmmetings if it is running </li>

+				<li>

+					go to openmeetings install dir (for ex.

+					<tt>/opt/red5</tt>

+					)

+				</li>

+				<li>

+					rename

+					<tt>/opt/red5/webapps/openmeetings</tt>

+					to

+					<tt>/opt/red5/webapps/yourmeetings</tt>

+					(for ex.

+					<tt>mv /opt/red5/webapps/openmeetings

+						/opt/red5/webapps/yourmeetings

+					</tt>

+					)

+				</li>

+				<li>

+					open

+					<tt>/opt/red5/webapps/yourmeetings/public/config.xml</tt>

+					using your favorite text editor (for ex.

+					<tt>vim /opt/red5/webapps/yourmeetings/public/config.xml</tt>

+					)

+				</li>

+				<li>

+					find and modify

+					<tt>&lt;webAppRootKey&gt;openmeetings&lt;/webAppRootKey&gt;</tt>

+					to be

+					<tt>&lt;webAppRootKey&gt;</tt>

+					<strong>yourmeetings</strong>

+					<tt>&lt;/webAppRootKey&gt;</tt>

+				</li>

+				<li>

+					find and modify

+					<tt>&lt;httpRootKey&gt;/openmeetings/&lt;/httpRootKey&gt;</tt>

+					to be

+					<tt>&lt;httpRootKey&gt;</tt>

+					<strong>/yourmeetings/</strong>

+					<tt>&lt;/httpRootKey&gt;</tt>

+				</li>

+			</ol>

+			That's it

+		</section>

+

+		<section name="Changing hard-coded application name in string labels">

+			<p>

+				To have

+				<i>Your Application Name</i>

+				instead of

+				<i>Openmeetings</i>

+				in

+				<strong>all</strong>

+				text labels you need to do the following

+			</p>

+			<ol>

+				<li>

+					ensure

+					<strong>

+						<tt>$APP_NAME</tt>

+					</strong>

+					placeholder is used in

+					<i>all</i>

+					strings you have added and/or modified (all strings bundled into

+					Openmeetings already have this placeholder)

+				</li>

+				<li>login to Openmeetings as user with administrator privileges </li>

+				<li>

+					go to

+					<tt>Administration -&gt; Configuration</tt>

+				</li>

+				<li>

+					find and edit configuration with name

+					<strong>

+						<tt>application.name</tt>

+					</strong>

+				</li>

+				<li>

+					Set its value to be

+					<i>

+						<tt>Your Application Name</tt>

+					</i>

+				</li>

+				<li>

+					<tt>Save</tt>

+				</li>

+				<li>reload page or relogin </li>

+			</ol>

+			<p>

+			All string will display

+			<i>

+				<tt>Your Application Name</tt>

+			</i>

+			in place of

+			<i>

+				<tt>Openmeetings</tt>

+			</i>

+			</p>

+			<p>

+				Please

+				<i>NOTE</i>

+				there are 3 additional properties in the public/config.xml file which

+				should be modified for

+				<strong>TOTAL</strong>

+				Openmeetings clean up:

+			</p>

+			<div class="xmlcode">

+				&lt;currentappname&gt;OpenMeetings&lt;/currentappname&gt;

+				<br />

+				&lt;currentappnameurl&gt;http://openmeetings.apache.org&lt;/currentappnameurl&gt;

+				<br />

+				&lt;currentappnamebugurl&gt;https://issues.apache.org/jira/browse/OPENMEETINGS&lt;/currentappnamebugurl&gt;

+				<br />

+			</div>

+

+		</section>

+

+		<section name="Running multiple Openmeetings instances on the same server">

+			<p>

+				If you want to run multiple Openmeetings instances on the same server i.e. to have<br/>  

+				<tt>http://yourcorp.com:5080/openmeetings1</tt><br/> 

+				<tt>http://yourcorp.com:5080/openmeetings2</tt><br/> etc.<br/> you need to do the following:

+			</p>

+			<ol>

+				<li>edit <tt>webapps/openmeetings1/WEB-INF/red5-web.properties</tt> for <strong>every</strong> Openmeetings 

+				instance and add the following line <tt>webapp.contextPath=/openmeetings1</tt>  to it (context of 

+				<strong>every</strong> instance <strong>should</strong> match the folder name in webapps dir)

+				</li>

+				<li>in case of java memory problems modify <tt>red5.sh</tt> add following line:<br/>

+					<div class="xmlcode">

+					export JAVA_OPTS="-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:MaxPermSize=128M"

+					</div>

+					or <tt>red5.bat</tt>:<br/>

+					<div class="xmlcode">

+					set JAVA_OPTS=-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:MaxPermSize=128M

+					</div>

+				</li>

+			</ol>

+		</section>

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/WebcamResolutions.xml b/xdocs/WebcamResolutions.xml
new file mode 100644
index 0000000..697d1e4
--- /dev/null
+++ b/xdocs/WebcamResolutions.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>How to configure Camera default resolutions </title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="How to configure Camera default resolutions">

+

+			<p>When you choose the webcam you have different resolutions

+				available the user can choose from. </p>

+			<p>You can add/remove resolutions and also change the default

+				selection. In the public/config.xml there is a section: </p>

+			<div class="xmlcode">

+				&lt;availableCameraResolutions&gt;<br/>

+				<div style="margin-left:20px">

+				    &lt;resolution type="4:3 (~6 KByte/sec)" width="40" height="30" isDefault="false" /&gt;<br/>

+				    &lt;resolution type="4:3 (~12 KByte/sec)" width="80" height="60" isDefault="false" /&gt;<br/>

+				    &lt;resolution type="4:3 (~20 KByte/sec)" width="120" height="90" isDefault="true" /&gt;<br/>

+				    &lt;resolution type="QQVGA 4:3 (~36 KByte/sec)" width="160" height="120" isDefault="false" /&gt;<br/>

+				    &lt;resolution type="4:3 (~40 KByte/sec)" width="240" height="180" isDefault="false" /&gt;<br/>

+				    &lt;resolution type="HVGA 4:3 (~56 KByte/sec)" width="320" height="240" isDefault="false" /&gt;<br/>

+				    &lt;resolution type="4:3  (~60 KByte/sec)" width="480" height="360" isDefault="false" /&gt;<br/>

+				    &lt;resolution type="4:3 (~68 KByte/sec)" width="640" height="480" isDefault="false" /&gt;<br/>

+				    &lt;resolution type="XGA 4:3" width="1024" height="768" isDefault="false" /&gt;<br/>

+				    &lt;resolution type="16:9" width="256" height="150" isDefault="false" /&gt;<br/>

+				    &lt;resolution type="WQVGA 9:5" width="432" height="240" isDefault="false" /&gt;<br/>

+				    &lt;resolution type="pseudo 16:9" width="480" height="234" isDefault="false" /&gt;<br/>

+				    &lt;resolution type="16:9" width="512" height="300" isDefault="false" /&gt;<br/>

+				    &lt;resolution type="nHD 16:9" width="640" height="360" isDefault="false" /&gt;<br/>

+				    &lt;resolution type="16:9" width="1024" height="600" isDefault="false" /&gt;<br/>

+				    </div>

+				&lt;/availableCameraResolutions&gt;			 

+			</div>	

+		      

+		    <p>Tip: You might edit the public/config.xml with an XML aware editor that correctly 

+		    handles the XSD defintion to avoid misconfiguration. The openmeetings-config.xsd 

+		    is in the same folder like the public/config.xml. </p>

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/WebsiteGuide.xml b/xdocs/WebsiteGuide.xml
new file mode 100644
index 0000000..3aafba4
--- /dev/null
+++ b/xdocs/WebsiteGuide.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Release Guide</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="How to update Apache OpenMeetings website">

+

+			<subsection name="Required tools">

+				<div>

+					<ul>

+						<li>Sun JDK6</li>

+						<li>Apache ANT (1.8 or later)</li>

+					</ul>

+				</div>

+			</subsection>

+			

+			<subsection name="Introduction">

+				<div>

+					<p>

+						The Apache OpenMeetings HTML websites are generated from XML files. 

+						You edit the XML files, run the ANT command "ant anakia" that generates the HTML files 

+						and then you checkin to SVN both: XML and HTML files.

+					</p>

+					<p>

+						The website itself uses JQuery to generate the menu, the pop images and the image slider at the landing page.

+					</p>

+				</div>

+			</subsection>

+

+			<subsection name="Editing the website">

+				<div>

+					<p>

+						OpenMeetings website (

+						<a href="http://openmeetings.apache.org/">http://openmeetings.apache.org/</a>

+						) is a copy from the SVN repository.

+						<br />

+						The file in the SVN to be synced are at:

+						<br />

+						<a

+							href="http://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/docs/">http://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/docs/

+						</a>

+						<br/>and<br/>

+						<a

+							href="http://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/xdocs/">http://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/xdocs/

+						</a>

+					</p>

+					

+					<div>

+						To update the website you checkout trunk:

+						<br />

+						<a

+							href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/">https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/

+						</a> <br/>

+						edit the files in the folder <tt>xdocs</tt><br/>

+						then you run the command:

+						<div class="xmlcode">

+							ant anakia

+						</div>

+						control the output locally in the folder <tt>docs</tt><br/>

+						And then checkin into the SVN <i>both</i> the edited xml and generated html files.

+					</div>

+					

+					<p>

+						The public website is automatically synced with the SVN repository.<br/>

+						Changes to the SVN should be immediately synced to the production website.<br/>

+						If not you might login to people.apache.org,<br/>

+						cd to <tt>/www/openmeetings.apache.org/content/</tt><br/>

+						and run the linux command "touch" on the files that need to be synced

+					</p>

+				</div>

+			</subsection>

+			

+			<subsection name="Adding a new menu entry">

+				<div>

+					To add a new menu entry in the left side panel you need to modify the file: 

+					<br/>

+					<tt>xdocs/stylesheets/project.xml</tt>

+				</div>

+			</subsection>

+			

+			<subsection name="Writing a new macro">

+				<div>

+					<p>

+						You can write macros in a template language to parse from the XML files certain aspects.

+					</p>

+					<p>

+						To add a new macro see the file:<br/>

+						<tt>xdocs/stylesheets/site.vsl</tt>

+					</p>

+				</div>

+				

+			</subsection>

+

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/commercial-support.xml b/xdocs/commercial-support.xml
new file mode 100644
index 0000000..ec125be
--- /dev/null
+++ b/xdocs/commercial-support.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Commercial Support</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Commercial Support for OpenMeetings">

+

+			<p>There are few companies offering complex services for OpenMeetings, including code support,

+			development, integration and bug fixing

+			</p>

+			<ul>

+				<li>

+					<a href="http://www.webbase-design.de/" target="_BLANK">webbase-design.de

+					</a>

+					owned by Sebastian Wagner

+				</li>

+				<li>

+					<a href="http://www.dataved.ru" target="_BLANK">dataved.ru

+					</a>

+					run by Alexei Fedotov, Maxim Solodovnik, Timur Tleukenov, Irina Arkhipets, Denis Kandrov, Vasily Degtyarev

+				</li>

+				<li>

+                    <a href="http://www.samoo.es" target="_BLANK" rel="nofollow">samoo.es</a>

+                    provides support for the Sakai Plugin

+                </li>

+			</ul>

+			<p>

+                            Please write to <a href="mailto:support-om@dataved.ru">support-om@dataved.ru</a> to get WebBase-Design or Dataved support

+			</p>

+			<p>

+			    There are more companies offering installation, customization, hosting, conferencing and support services. You can add 

+				yourself to the <a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Commercial+Support">wiki page</a>.

+			</p>

+			

+			<p>

+				Want to get listed here? Become a <a href="http://www.apache.org/dev/committers.html">committer</a>.

+			</p>

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/css/1b.png b/xdocs/css/1b.png
new file mode 100644
index 0000000..0d70d76
--- /dev/null
+++ b/xdocs/css/1b.png
Binary files differ
diff --git a/xdocs/css/2b.png b/xdocs/css/2b.png
new file mode 100644
index 0000000..a93e132
--- /dev/null
+++ b/xdocs/css/2b.png
Binary files differ
diff --git a/xdocs/css/3b.png b/xdocs/css/3b.png
new file mode 100644
index 0000000..f9d8b7a
--- /dev/null
+++ b/xdocs/css/3b.png
Binary files differ
diff --git a/xdocs/css/4b.png b/xdocs/css/4b.png
new file mode 100644
index 0000000..c6e41f4
--- /dev/null
+++ b/xdocs/css/4b.png
Binary files differ
diff --git a/xdocs/css/coin-slider-styles.css b/xdocs/css/coin-slider-styles.css
new file mode 100644
index 0000000..31e7d67
--- /dev/null
+++ b/xdocs/css/coin-slider-styles.css
@@ -0,0 +1,17 @@
+/*
+	Coin Slider jQuery plugin CSS styles
+	http://workshop.rs/projects/coin-slider
+*/
+
+
+.coin-slider { overflow: hidden; zoom: 1; position: relative; }
+.coin-slider a{ text-decoration: none; outline: none; border: none; }
+
+.cs-buttons { font-size: 0px; padding: 10px; float: left; }
+.cs-buttons a { margin-left: 5px; height: 10px; width: 10px; float: left; border: 1px solid #B8C4CF; color: #B8C4CF; text-indent: -1000px; }
+.cs-active { background-color: #B8C4CF; color: #FFFFFF; }
+
+.cs-title { width: 545px; padding: 10px; background-color: #000000; color: #FFFFFF; }
+
+.cs-prev, 
+.cs-next { background-color: #000000; color: #FFFFFF; padding: 0px 10px; }
diff --git a/xdocs/css/colorbox.css b/xdocs/css/colorbox.css
new file mode 100644
index 0000000..894da5d
--- /dev/null
+++ b/xdocs/css/colorbox.css
@@ -0,0 +1,70 @@
+/*
+    Colorbox Core Style:
+    The following CSS is consistent between example themes and should not be altered.
+*/
+#colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
+#cboxWrapper {max-width:none;}
+#cboxOverlay{position:fixed; width:100%; height:100%;}
+#cboxMiddleLeft, #cboxBottomLeft{clear:left;}
+#cboxContent{position:relative;}
+#cboxLoadedContent{overflow:auto; -webkit-overflow-scrolling: touch;}
+#cboxTitle{margin:0;}
+#cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
+#cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
+.cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none; -ms-interpolation-mode:bicubic;}
+.cboxIframe{width:100%; height:100%; display:block; border:0; padding:0; margin:0;}
+#colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box; -moz-box-sizing:content-box; -webkit-box-sizing:content-box;}
+
+/* 
+    User Style:
+    Change the following styles to modify the appearance of Colorbox.  They are
+    ordered & tabbed in a way that represents the nesting of the generated HTML.
+*/
+#cboxOverlay{background:url(images/overlay.png) repeat 0 0;}
+#colorbox{outline:0;}
+    #cboxTopLeft{width:21px; height:21px; background:url(images/controls.png) no-repeat -101px 0;}
+    #cboxTopRight{width:21px; height:21px; background:url(images/controls.png) no-repeat -130px 0;}
+    #cboxBottomLeft{width:21px; height:21px; background:url(images/controls.png) no-repeat -101px -29px;}
+    #cboxBottomRight{width:21px; height:21px; background:url(images/controls.png) no-repeat -130px -29px;}
+    #cboxMiddleLeft{width:21px; background:url(images/controls.png) left top repeat-y;}
+    #cboxMiddleRight{width:21px; background:url(images/controls.png) right top repeat-y;}
+    #cboxTopCenter{height:21px; background:url(images/border.png) 0 0 repeat-x;}
+    #cboxBottomCenter{height:21px; background:url(images/border.png) 0 -29px repeat-x;}
+    #cboxContent{background:#fff; overflow:hidden;}
+        .cboxIframe{background:#fff;}
+        #cboxError{padding:50px; border:1px solid #ccc;}
+        #cboxLoadedContent{margin-bottom:28px;}
+        #cboxTitle{position:absolute; bottom:4px; left:0; text-align:center; width:100%; color:#949494;}
+        #cboxCurrent{position:absolute; bottom:4px; left:58px; color:#949494;}
+        #cboxLoadingOverlay{background:url(images/loading_background.png) no-repeat center center;}
+        #cboxLoadingGraphic{background:url(images/loading.gif) no-repeat center center;}
+
+        /* these elements are buttons, and may need to have additional styles reset to avoid unwanted base styles */
+        #cboxPrevious, #cboxNext, #cboxSlideshow, #cboxClose {border:0; padding:0; margin:0; overflow:visible; width:auto; background:none; }
+        
+        /* avoid outlines on :active (mouseclick), but preserve outlines on :focus (tabbed navigating) */
+        #cboxPrevious:active, #cboxNext:active, #cboxSlideshow:active, #cboxClose:active {outline:0;}
+
+        #cboxSlideshow{position:absolute; bottom:4px; right:30px; color:#0092ef;}
+        #cboxPrevious{position:absolute; bottom:0; left:0; background:url(images/controls.png) no-repeat -75px 0; width:25px; height:25px; text-indent:-9999px;}
+        #cboxPrevious:hover{background-position:-75px -25px;}
+        #cboxNext{position:absolute; bottom:0; left:27px; background:url(images/controls.png) no-repeat -50px 0; width:25px; height:25px; text-indent:-9999px;}
+        #cboxNext:hover{background-position:-50px -25px;}
+        #cboxClose{position:absolute; bottom:0; right:0; background:url(images/controls.png) no-repeat -25px 0; width:25px; height:25px; text-indent:-9999px;}
+        #cboxClose:hover{background-position:-25px -25px;}
+
+/*
+  The following fixes a problem where IE7 and IE8 replace a PNG's alpha transparency with a black fill
+  when an alpha filter (opacity change) is set on the element or ancestor element.  This style is not applied to or needed in IE9.
+  See: http://jacklmoore.com/notes/ie-transparency-problems/
+*/
+.cboxIE #cboxTopLeft,
+.cboxIE #cboxTopCenter,
+.cboxIE #cboxTopRight,
+.cboxIE #cboxBottomLeft,
+.cboxIE #cboxBottomCenter,
+.cboxIE #cboxBottomRight,
+.cboxIE #cboxMiddleLeft,
+.cboxIE #cboxMiddleRight {
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF);
+}
diff --git a/xdocs/css/images/animated-overlay.gif b/xdocs/css/images/animated-overlay.gif
new file mode 100644
index 0000000..d441f75
--- /dev/null
+++ b/xdocs/css/images/animated-overlay.gif
Binary files differ
diff --git a/xdocs/css/images/border.png b/xdocs/css/images/border.png
new file mode 100644
index 0000000..f463a10
--- /dev/null
+++ b/xdocs/css/images/border.png
Binary files differ
diff --git a/xdocs/css/images/controls.png b/xdocs/css/images/controls.png
new file mode 100644
index 0000000..dcfd6fb
--- /dev/null
+++ b/xdocs/css/images/controls.png
Binary files differ
diff --git a/xdocs/css/images/loading.gif b/xdocs/css/images/loading.gif
new file mode 100644
index 0000000..b4695d8
--- /dev/null
+++ b/xdocs/css/images/loading.gif
Binary files differ
diff --git a/xdocs/css/images/loading_background.png b/xdocs/css/images/loading_background.png
new file mode 100644
index 0000000..6ae83e6
--- /dev/null
+++ b/xdocs/css/images/loading_background.png
Binary files differ
diff --git a/xdocs/css/images/overlay.png b/xdocs/css/images/overlay.png
new file mode 100644
index 0000000..53ea98f
--- /dev/null
+++ b/xdocs/css/images/overlay.png
Binary files differ
diff --git a/xdocs/css/images/ui-bg_flat_0_000088_40x100.png b/xdocs/css/images/ui-bg_flat_0_000088_40x100.png
new file mode 100644
index 0000000..b0919c2
--- /dev/null
+++ b/xdocs/css/images/ui-bg_flat_0_000088_40x100.png
Binary files differ
diff --git a/xdocs/css/images/ui-bg_flat_0_e6b900_40x100.png b/xdocs/css/images/ui-bg_flat_0_e6b900_40x100.png
new file mode 100644
index 0000000..facb4c0
--- /dev/null
+++ b/xdocs/css/images/ui-bg_flat_0_e6b900_40x100.png
Binary files differ
diff --git a/xdocs/css/images/ui-bg_flat_100_eeeeee_40x100.png b/xdocs/css/images/ui-bg_flat_100_eeeeee_40x100.png
new file mode 100644
index 0000000..b976c9b
--- /dev/null
+++ b/xdocs/css/images/ui-bg_flat_100_eeeeee_40x100.png
Binary files differ
diff --git a/xdocs/css/images/ui-bg_flat_20_000088_40x100.png b/xdocs/css/images/ui-bg_flat_20_000088_40x100.png
new file mode 100644
index 0000000..56c2330
--- /dev/null
+++ b/xdocs/css/images/ui-bg_flat_20_000088_40x100.png
Binary files differ
diff --git a/xdocs/css/images/ui-bg_flat_22_1484e6_40x100.png b/xdocs/css/images/ui-bg_flat_22_1484e6_40x100.png
new file mode 100644
index 0000000..7f3bc6b
--- /dev/null
+++ b/xdocs/css/images/ui-bg_flat_22_1484e6_40x100.png
Binary files differ
diff --git a/xdocs/css/images/ui-bg_flat_25_c5ddfc_40x100.png b/xdocs/css/images/ui-bg_flat_25_c5ddfc_40x100.png
new file mode 100644
index 0000000..724aae8
--- /dev/null
+++ b/xdocs/css/images/ui-bg_flat_25_c5ddfc_40x100.png
Binary files differ
diff --git a/xdocs/css/images/ui-bg_flat_26_2293f7_40x100.png b/xdocs/css/images/ui-bg_flat_26_2293f7_40x100.png
new file mode 100644
index 0000000..5ef1530
--- /dev/null
+++ b/xdocs/css/images/ui-bg_flat_26_2293f7_40x100.png
Binary files differ
diff --git a/xdocs/css/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png b/xdocs/css/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png
new file mode 100644
index 0000000..9d2c4ad
--- /dev/null
+++ b/xdocs/css/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png
Binary files differ
diff --git a/xdocs/css/images/ui-icons_0a82eb_256x240.png b/xdocs/css/images/ui-icons_0a82eb_256x240.png
new file mode 100644
index 0000000..3001a8f
--- /dev/null
+++ b/xdocs/css/images/ui-icons_0a82eb_256x240.png
Binary files differ
diff --git a/xdocs/css/images/ui-icons_0b54d5_256x240.png b/xdocs/css/images/ui-icons_0b54d5_256x240.png
new file mode 100644
index 0000000..926aa07
--- /dev/null
+++ b/xdocs/css/images/ui-icons_0b54d5_256x240.png
Binary files differ
diff --git a/xdocs/css/images/ui-icons_5fa5e3_256x240.png b/xdocs/css/images/ui-icons_5fa5e3_256x240.png
new file mode 100644
index 0000000..81bd20c
--- /dev/null
+++ b/xdocs/css/images/ui-icons_5fa5e3_256x240.png
Binary files differ
diff --git a/xdocs/css/images/ui-icons_ffffff_256x240.png b/xdocs/css/images/ui-icons_ffffff_256x240.png
new file mode 100644
index 0000000..4f624bb
--- /dev/null
+++ b/xdocs/css/images/ui-icons_ffffff_256x240.png
Binary files differ
diff --git a/xdocs/css/jquery-ui-1.10.4.custom.css b/xdocs/css/jquery-ui-1.10.4.custom.css
new file mode 100644
index 0000000..92a96fb
--- /dev/null
+++ b/xdocs/css/jquery-ui-1.10.4.custom.css
@@ -0,0 +1,513 @@
+/*! jQuery UI - v1.10.4 - 2014-03-25
+* http://jqueryui.com
+* Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.theme.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=segoe%20ui%2C%20Arial%2C%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=3px&bgColorHeader=%23f9f9f9&bgTextureHeader=highlight_soft&bgImgOpacityHeader=100&borderColorHeader=%23cccccc&fcHeader=%23000088&iconColorHeader=%235fa5e3&bgColorContent=%23eeeeee&bgTextureContent=flat&bgImgOpacityContent=100&borderColorContent=%23aaaaaa&fcContent=%23222222&iconColorContent=%230a82eb&bgColorDefault=%231484e6&bgTextureDefault=flat&bgImgOpacityDefault=22&borderColorDefault=%23ffffff&fcDefault=%23ffffff&iconColorDefault=%23ffffff&bgColorHover=%232293f7&bgTextureHover=flat&bgImgOpacityHover=26&borderColorHover=%232293f7&fcHover=%23ffffff&iconColorHover=%23ffffff&bgColorActive=%23000088&bgTextureActive=flat&bgImgOpacityActive=20&borderColorActive=%23000088&fcActive=%23ffffff&iconColorActive=%23ffffff&bgColorHighlight=%23c5ddfc&bgTextureHighlight=flat&bgImgOpacityHighlight=25&borderColorHighlight=%23ffffff&fcHighlight=%23333333&iconColorHighlight=%230b54d5&bgColorError=%23000088&bgTextureError=flat&bgImgOpacityError=20&borderColorError=%23000088&fcError=%23ffffff&iconColorError=%23ffffff&bgColorOverlay=%23e6b900&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=%23000088&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=20&thicknessShadow=0px&offsetTopShadow=6px&offsetLeftShadow=6px&cornerRadiusShadow=3px
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+	display: none;
+}
+.ui-helper-hidden-accessible {
+	border: 0;
+	clip: rect(0 0 0 0);
+	height: 1px;
+	margin: -1px;
+	overflow: hidden;
+	padding: 0;
+	position: absolute;
+	width: 1px;
+}
+.ui-helper-reset {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	outline: 0;
+	line-height: 1.3;
+	text-decoration: none;
+	font-size: 100%;
+	list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+	content: "";
+	display: table;
+	border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+	clear: both;
+}
+.ui-helper-clearfix {
+	min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+	width: 100%;
+	height: 100%;
+	top: 0;
+	left: 0;
+	position: absolute;
+	opacity: 0;
+	filter:Alpha(Opacity=0);
+}
+
+.ui-front {
+	z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+	cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	display: block;
+	text-indent: -99999px;
+	overflow: hidden;
+	background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+}
+.ui-accordion .ui-accordion-header {
+	display: block;
+	cursor: pointer;
+	position: relative;
+	margin-top: 2px;
+	padding: .5em .5em .5em .7em;
+	min-height: 0; /* support: IE7 */
+}
+.ui-accordion .ui-accordion-icons {
+	padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-noicons {
+	padding-left: .7em;
+}
+.ui-accordion .ui-accordion-icons .ui-accordion-icons {
+	padding-left: 2.2em;
+}
+.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
+	position: absolute;
+	left: .5em;
+	top: 50%;
+	margin-top: -8px;
+}
+.ui-accordion .ui-accordion-content {
+	padding: 1em 2.2em;
+	border-top: 0;
+	overflow: auto;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+	font-family: segoe ui, Arial, sans-serif;
+	font-size: 1.1em;
+}
+.ui-widget .ui-widget {
+	font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+	font-family: segoe ui, Arial, sans-serif;
+	font-size: 1em;
+}
+.ui-widget-content {
+	border: 1px solid #aaaaaa;
+	background: #eeeeee url(images/ui-bg_flat_100_eeeeee_40x100.png) 50% 50% repeat-x;
+	color: #222222;
+}
+.ui-widget-content a {
+	color: #222222;
+}
+.ui-widget-header {
+	border: 1px solid #cccccc;
+	background: #f9f9f9 url(images/ui-bg_highlight-soft_100_f9f9f9_1x100.png) 50% 50% repeat-x;
+	color: #000088;
+	font-weight: bold;
+}
+.ui-widget-header a {
+	color: #000088;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+	border: 1px solid #ffffff;
+	background: #1484e6 url(images/ui-bg_flat_22_1484e6_40x100.png) 50% 50% repeat-x;
+	font-weight: bold;
+	color: #ffffff;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+	color: #ffffff;
+	text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+	border: 1px solid #2293f7;
+	background: #2293f7 url(images/ui-bg_flat_26_2293f7_40x100.png) 50% 50% repeat-x;
+	font-weight: bold;
+	color: #ffffff;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited {
+	color: #ffffff;
+	text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+	border: 1px solid #000088;
+	background: #000088 url(images/ui-bg_flat_20_000088_40x100.png) 50% 50% repeat-x;
+	font-weight: bold;
+	color: #ffffff;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+	color: #ffffff;
+	text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+	border: 1px solid #ffffff;
+	background: #c5ddfc url(images/ui-bg_flat_25_c5ddfc_40x100.png) 50% 50% repeat-x;
+	color: #333333;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+	color: #333333;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+	border: 1px solid #000088;
+	background: #000088 url(images/ui-bg_flat_20_000088_40x100.png) 50% 50% repeat-x;
+	color: #ffffff;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+	color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+	color: #ffffff;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+	font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+	opacity: .7;
+	filter:Alpha(Opacity=70);
+	font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+	opacity: .35;
+	filter:Alpha(Opacity=35);
+	background-image: none;
+}
+.ui-state-disabled .ui-icon {
+	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	width: 16px;
+	height: 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+	background-image: url(images/ui-icons_0a82eb_256x240.png);
+}
+.ui-widget-header .ui-icon {
+	background-image: url(images/ui-icons_5fa5e3_256x240.png);
+}
+.ui-state-default .ui-icon {
+	background-image: url(images/ui-icons_ffffff_256x240.png);
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+	background-image: url(images/ui-icons_ffffff_256x240.png);
+}
+.ui-state-active .ui-icon {
+	background-image: url(images/ui-icons_ffffff_256x240.png);
+}
+.ui-state-highlight .ui-icon {
+	background-image: url(images/ui-icons_0b54d5_256x240.png);
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+	background-image: url(images/ui-icons_ffffff_256x240.png);
+}
+
+/* positioning */
+.ui-icon-blank { background-position: 16px 16px; }
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+	border-top-left-radius: 3px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+	border-top-right-radius: 3px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+	border-bottom-left-radius: 3px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+	border-bottom-right-radius: 3px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+	background: #e6b900 url(images/ui-bg_flat_0_e6b900_40x100.png) 50% 50% repeat-x;
+	opacity: .3;
+	filter: Alpha(Opacity=30);
+}
+.ui-widget-shadow {
+	margin: 6px 0 0 6px;
+	padding: 0px;
+	background: #000088 url(images/ui-bg_flat_0_000088_40x100.png) 50% 50% repeat-x;
+	opacity: .2;
+	filter: Alpha(Opacity=20);
+	border-radius: 3px;
+}
diff --git a/xdocs/css/openmeetings.css b/xdocs/css/openmeetings.css
new file mode 100644
index 0000000..ea209b8
--- /dev/null
+++ b/xdocs/css/openmeetings.css
@@ -0,0 +1,87 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+body {
+	color: #000000;
+	margin: 0;
+	background: #fafafa;
+	font: 10pt Verdana, Arial, Helvetica, sans-serif;
+	  
+}
+.active {
+	font-style: italic;
+}
+
+.mainbody {
+	margin-left: 40px;
+	margin-right: 40px;
+	-moz-box-shadow: 4px 0px 5px #666666;
+	-webkit-box-shadow: 4px 0px 5px #666666;
+	box-shadow: 4px 0px 5px #666666;
+}
+.superbody {
+	background: #FFFFFF;
+	-moz-box-shadow: -4px 0px 5px #666666;
+	-webkit-box-shadow: -4px 0px 5px #666666;
+	box-shadow: -4px 0px 5px #666666;
+}
+
+/* Box CSS  */
+div {
+	margin: 0;
+}
+
+
+.ro {
+	background: url(2b.png) top right no-repeat;
+}
+
+.lo {
+	background: url(1b.png) top left no-repeat;
+}
+
+.ru {
+	background: url(3b.png) bottom right no-repeat;
+}
+
+.lu {
+	background: url(4b.png) bottom left no-repeat;
+}
+
+ul {
+	margin-top: 0em;
+	padding-left: 1.5em;
+}
+
+.inhalt {
+	margin: 0;
+	padding: 0.5em 2.0em 1.5em 1.0em;
+}
+
+.inhalt p {
+	margin: 0;
+	padding: 0;
+}
+.xmlcode {
+	margin-left: 20px;
+	background-color: #eeeeee;
+	color: #0000ff;
+	margin-top: 10px;
+	margin-bottom: 10px;
+}
+#accordion.ui-accordion .ui-accordion-header a {
+	padding-left: 20px;
+}
diff --git a/xdocs/demo.xml b/xdocs/demo.xml
new file mode 100644
index 0000000..2a7f9ad
--- /dev/null
+++ b/xdocs/demo.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Mailing Lists</title>
+		<author email="sebawagner@apache.org">
+			Sebastian Wagner
+		</author>
+	</properties>
+
+	<body>
+		<section name="Apache OpenMeetings Demo Servers">
+
+			<p>
+				There are currently some technical issues with demo servers.
+			</p>
+			<p>
+				This is a list of servers that you can use for testing OpenMeetings.
+			</p>
+			<p>
+				<a href="http://demo.dataved.ru/openmeetings" target="_BLANK" rel="nofollow">http://demo.dataved.ru/openmeetings</a>
+			</p>
+
+		</section>
+	</body>
+</document>
+
diff --git a/xdocs/dependencies.xml b/xdocs/dependencies.xml
new file mode 100644
index 0000000..dec7df6
--- /dev/null
+++ b/xdocs/dependencies.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Copyright 2006 The Apache Software Foundation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+  
+       http://www.apache.org/licenses/LICENSE-2.0
+  
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+ <properties>
+<title>Project Dependencies</title>
+<author email="sebawagner@apache.org">
+ OpenMeetings Documentation Team</author>
+</properties>
+
+<body>
+<section name="The Apache Podling Project">
+
+<div>
+<p> 
+The common external dependencies of OpenMeetings include the tools used to build 
+and test it:
+</p>
+
+<ul>
+<li>Subversion</li>
+<li>Ant</li>
+<li>JUnit</li>
+</ul>
+
+<p>OpenMeetings will actively download resources from the online repositories while building.</p>
+
+</div>
+</section>
+
+</body>
+</document>
+   
diff --git a/xdocs/documentation.xml b/xdocs/documentation.xml
new file mode 100644
index 0000000..b27f399
--- /dev/null
+++ b/xdocs/documentation.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+
+    Copyright 2006 The Apache Software Foundation
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+<properties>
+<title>Documentation</title>
+<author email="sebawagner@apache.org">
+ Podling Documentation Team</author>
+</properties>
+
+<body>
+<section name="OpenMeetings Documentation">
+
+<p>
+Wiki is to be linked here, coming soon ...
+
+<!-- ***************** TBD **************************  -->
+<!-- ***************** TBD **************************  -->
+<!-- ***************** TBD **************************  -->
+
+</p>
+
+</section>
+
+</body>
+
+</document>
+
diff --git a/xdocs/downloads.xml b/xdocs/downloads.xml
new file mode 100644
index 0000000..faf49dc
--- /dev/null
+++ b/xdocs/downloads.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Downloads</title>
+		<author email="sebawagner@apache.org">
+			Podling Documentation Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Downloads">
+			<div>
+				All downloads can be verified using the Apache OpenMeetings code
+				signing <a href="https://www.apache.org/dist/openmeetings/3.0.0/KEYS">KEYS</a>.
+			</div>
+			<p>
+				All are available for download as source and binary.
+			</p>
+			
+			<subsection name="Latest Official Release">
+				<p>
+					Apache Openmeetings 3.0.0
+				</p>
+				<ul>
+					<li>
+						Binaries:
+						<ul>
+							<li>
+								<a href="http://www.apache.org/dyn/closer.lua/openmeetings/3.0.0/bin/apache-openmeetings-3.0.0.zip">apache-openmeetings-3.0.0.zip</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/bin/apache-openmeetings-3.0.0.zip.asc">[SIG]</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/bin/apache-openmeetings-3.0.0.zip.md5">[MD5]</a>
+							</li>
+							<li>
+								<a href="http://www.apache.org/dyn/closer.lua/openmeetings/3.0.0/bin/apache-openmeetings-3.0.0.tar.gz">apache-openmeetings-3.0.0.tar.gz</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/bin/apache-openmeetings-3.0.0.tar.gz.asc">[SIG]</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/bin/apache-openmeetings-3.0.0.tar.gz.md5">[MD5]</a>
+							</li>
+						</ul>
+					</li>
+					<li>
+						Sources:
+						<ul>
+							<li>
+								<a href="http://www.apache.org/dyn/closer.lua/openmeetings/3.0.0/src/apache-openmeetings-3.0.0-src.zip">apache-openmeetings-3.0.0-src.zip</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/src/apache-openmeetings-3.0.0-src.zip.asc">[SIG]</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/src/apache-openmeetings-3.0.0-src.zip.md5">[MD5]</a>
+							</li>
+							<li>
+								<a href="http://www.apache.org/dyn/closer.lua/openmeetings/3.0.0/src/apache-openmeetings-3.0.0-src.tar.gz">apache-openmeetings-3.0.0-src.tar.gz</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/src/apache-openmeetings-3.0.0-src.tar.gz.asc">[SIG]</a>
+								<a href="http://www.apache.org/dist/openmeetings/3.0.0/src/apache-openmeetings-3.0.0-src.tar.gz.md5">[MD5]</a>
+							</li>
+						</ul>
+					</li>
+				</ul>
+				
+			</subsection>
+
+			<subsection name="Previous Official Releases">
+				<p>
+					Apache Openmeetings releases available here:
+					<a href="http://archive.apache.org/dist/openmeetings/">http://archive.apache.org/dist/openmeetings/</a>
+				</p>
+				<p>
+					Apache Openmeetings Incubating 2.0 is available here:
+					<a href="http://archive.apache.org/dist/incubator/openmeetings/2.0-incubating/">http://archive.apache.org/dist/incubator/openmeetings/2.0-incubating</a>
+				</p>
+			</subsection>
+
+			<subsection name="Plugins / Non ASF downloads">
+			
+				<p>
+					If you are looking for more plugins for 3th party applications (Moodle, Drupal, Joomla, ...) check out <a href="http://code.google.com/a/apache-extras.org/hosting/search?q=openmeetings" target="_BLANK" rel="nofollow">apache-extras.org</a>.
+				</p>
+			
+				<p>
+					OpenMeetings releases that are not part of the ASF can be downloaded from the
+					old
+					<a href="http://code.google.com/p/openmeetings/downloads/list"
+						target="_BLANK">GoogleCode website</a>
+				</p>
+			</subsection>
+
+		</section>
+	</body>
+</document>
+
diff --git a/xdocs/get-involved.xml b/xdocs/get-involved.xml
new file mode 100644
index 0000000..7c2b823
--- /dev/null
+++ b/xdocs/get-involved.xml
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Get Involved</title>
+		<author email="dev@openmeetings.apache.org">
+			OpenMeetings Documentation Team
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="How do I contribute, give feedback, fix bugs and so on?">
+
+			<p>
+				The Apache OpenMeetings project really needs and appreciates any
+				contributions,
+				including documentation help, source code and
+				feedback. Suggested
+				changes should come in the form of source code
+				and/or very detailed
+				and constructive feedback.
+			</p>
+
+			<ul>
+				<li>
+					Discussion occurs on the
+					<a href="mail-lists.html">OpenMeetings mailing lists</a>
+				</li>
+				<li>
+					Information on access to the project source code is
+					available
+					<a href="svn.html">here</a>
+					.
+				</li>
+				<li>
+					Bugs and other issues can be posted on the project
+					<a href="https://issues.apache.org/jira/browse/OPENMEETINGS">JIRA</a>
+					(
+					<a href="https://issues.apache.org/jira/secure/Signup!default.jspa">sign up</a>
+					).
+				</li>
+				<li>
+					Additional documentation and discussion can be contributed to the
+					project
+					<a href="https://cwiki.apache.org/OPENMEETINGS">Wiki</a>
+					(
+					<a href="https://cwiki.apache.org/confluence/signup.action">sign up</a>
+					).
+				</li>
+			</ul>
+
+		</section>
+
+		<section name="Which taks could I potentially work on?">
+
+			<p>
+				No matter if you want to share your experiences, improve
+				documentation, localization, code Java, ActionScript or PHP, there
+				are dozens of areas where you can find task to work on and share
+				with others.
+				<br />
+				<br />
+				We tried to collect a list of ideas in our wiki:
+				<br />
+				<a
+					href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/New+committers+and+developers+task+idea+list"
+					target="_BLANK">https://cwiki.apache.org/confluence/display/OPENMEETINGS/New+committers+and+developers+task+idea+list
+				</a>
+			</p>
+
+		</section>
+
+		<section name="How do I become a committer?">
+			<p>If you're interested in committing to the project: </p>
+			<ul>
+				<li>
+					<p>
+						You'll need to fill out some legal paperwork and go through
+						a
+						process to get an apache foundation committer account: See
+						<a class="external" rel="nofollow"
+							href="http://apache.org/dev/new-committers-guide.html">
+							New Committers Guide
+						</a>
+						,
+						<a class="external" rel="nofollow"
+							href="http://apache.org/dev/contributors.html"> Contributors</a>
+						, and
+						<a class="external" rel="nofollow" href="http://apache.org/dev/committers.html"> Committers</a>
+						for more details.
+					</p>
+
+				</li>
+				<li>
+					<p>
+						After you've received an email from
+						<a href="mailto:root@apache.org">root@apache.org</a>
+						with your committer account information, change your initial
+						password:
+						Login by 'ssh -l &lt;username&gt; people.apache.org';
+						run
+						'passwd';
+						run 'svnpasswd'. See
+						<a class="external" rel="nofollow"
+							href="http://apache.org/dev/version-control.html">Committer Subversion Access
+						</a>
+						.
+					</p>
+				</li>
+				<li>
+					<p>
+						Check out the OpenMeetings sources and test your svn account:
+						<a href="http://svn.apache.org/viewvc/openmeetings/">
+							SubversionRepository
+						</a>
+						.
+					</p>
+
+				</li>
+
+			</ul>
+
+		</section>
+
+	</body>
+</document>
diff --git a/xdocs/images/Arguments.png b/xdocs/images/Arguments.png
new file mode 100644
index 0000000..7427236
--- /dev/null
+++ b/xdocs/images/Arguments.png
Binary files differ
diff --git a/xdocs/images/DebugConfigurations.png b/xdocs/images/DebugConfigurations.png
new file mode 100644
index 0000000..c572dda
--- /dev/null
+++ b/xdocs/images/DebugConfigurations.png
Binary files differ
diff --git a/xdocs/images/Features_Screen_Conference_Room_Thumb.png b/xdocs/images/Features_Screen_Conference_Room_Thumb.png
new file mode 100644
index 0000000..19dece9
--- /dev/null
+++ b/xdocs/images/Features_Screen_Conference_Room_Thumb.png
Binary files differ
diff --git a/xdocs/images/NewConfiguration.png b/xdocs/images/NewConfiguration.png
new file mode 100644
index 0000000..45f3d62
--- /dev/null
+++ b/xdocs/images/NewConfiguration.png
Binary files differ
diff --git a/xdocs/images/SugarCRM_Installation.png b/xdocs/images/SugarCRM_Installation.png
new file mode 100644
index 0000000..b652b7b
--- /dev/null
+++ b/xdocs/images/SugarCRM_Installation.png
Binary files differ
diff --git a/xdocs/images/apache_feather.gif b/xdocs/images/apache_feather.gif
new file mode 100644
index 0000000..1a0c3e6
--- /dev/null
+++ b/xdocs/images/apache_feather.gif
Binary files differ
diff --git a/xdocs/images/audio_and_video.png b/xdocs/images/audio_and_video.png
new file mode 100644
index 0000000..f35bb10
--- /dev/null
+++ b/xdocs/images/audio_and_video.png
Binary files differ
diff --git a/xdocs/images/backup.png b/xdocs/images/backup.png
new file mode 100644
index 0000000..f174339
--- /dev/null
+++ b/xdocs/images/backup.png
Binary files differ
diff --git a/xdocs/images/calendar.png b/xdocs/images/calendar.png
new file mode 100644
index 0000000..25f7978
--- /dev/null
+++ b/xdocs/images/calendar.png
Binary files differ
diff --git a/xdocs/images/chat.png b/xdocs/images/chat.png
new file mode 100644
index 0000000..ce9c040
--- /dev/null
+++ b/xdocs/images/chat.png
Binary files differ
diff --git a/xdocs/images/checkout_1.png b/xdocs/images/checkout_1.png
new file mode 100644
index 0000000..950891a
--- /dev/null
+++ b/xdocs/images/checkout_1.png
Binary files differ
diff --git a/xdocs/images/checkout_2.png b/xdocs/images/checkout_2.png
new file mode 100644
index 0000000..f31050b
--- /dev/null
+++ b/xdocs/images/checkout_2.png
Binary files differ
diff --git a/xdocs/images/checkout_3.png b/xdocs/images/checkout_3.png
new file mode 100644
index 0000000..94d21ce
--- /dev/null
+++ b/xdocs/images/checkout_3.png
Binary files differ
diff --git a/xdocs/images/checkout_4.png b/xdocs/images/checkout_4.png
new file mode 100644
index 0000000..7fcf576
--- /dev/null
+++ b/xdocs/images/checkout_4.png
Binary files differ
diff --git a/xdocs/images/checkout_5.png b/xdocs/images/checkout_5.png
new file mode 100644
index 0000000..e102426
--- /dev/null
+++ b/xdocs/images/checkout_5.png
Binary files differ
diff --git a/xdocs/images/checkout_6.png b/xdocs/images/checkout_6.png
new file mode 100644
index 0000000..8dd9189
--- /dev/null
+++ b/xdocs/images/checkout_6.png
Binary files differ
diff --git a/xdocs/images/checkout_7.png b/xdocs/images/checkout_7.png
new file mode 100644
index 0000000..4168d93
--- /dev/null
+++ b/xdocs/images/checkout_7.png
Binary files differ
diff --git a/xdocs/images/checkout_8.png b/xdocs/images/checkout_8.png
new file mode 100644
index 0000000..0494bb5
--- /dev/null
+++ b/xdocs/images/checkout_8.png
Binary files differ
diff --git a/xdocs/images/checkout_9.png b/xdocs/images/checkout_9.png
new file mode 100644
index 0000000..b083d00
--- /dev/null
+++ b/xdocs/images/checkout_9.png
Binary files differ
diff --git a/xdocs/images/choose_divice.png b/xdocs/images/choose_divice.png
new file mode 100644
index 0000000..1e38713
--- /dev/null
+++ b/xdocs/images/choose_divice.png
Binary files differ
diff --git a/xdocs/images/cluster1.png b/xdocs/images/cluster1.png
new file mode 100644
index 0000000..672ffc4
--- /dev/null
+++ b/xdocs/images/cluster1.png
Binary files differ
diff --git a/xdocs/images/cluster2.png b/xdocs/images/cluster2.png
new file mode 100644
index 0000000..6d47e1d
--- /dev/null
+++ b/xdocs/images/cluster2.png
Binary files differ
diff --git a/xdocs/images/cut_administration_configuration.png b/xdocs/images/cut_administration_configuration.png
new file mode 100644
index 0000000..c54ac9c
--- /dev/null
+++ b/xdocs/images/cut_administration_configuration.png
Binary files differ
diff --git a/xdocs/images/cut_conference_room.png b/xdocs/images/cut_conference_room.png
new file mode 100644
index 0000000..1a50a25
--- /dev/null
+++ b/xdocs/images/cut_conference_room.png
Binary files differ
diff --git a/xdocs/images/cut_file_explorer.png b/xdocs/images/cut_file_explorer.png
new file mode 100644
index 0000000..4e5d0c7
--- /dev/null
+++ b/xdocs/images/cut_file_explorer.png
Binary files differ
diff --git a/xdocs/images/cut_integrated_calendar.png b/xdocs/images/cut_integrated_calendar.png
new file mode 100644
index 0000000..3188354
--- /dev/null
+++ b/xdocs/images/cut_integrated_calendar.png
Binary files differ
diff --git a/xdocs/images/cut_integration_api.png b/xdocs/images/cut_integration_api.png
new file mode 100644
index 0000000..7cf6264
--- /dev/null
+++ b/xdocs/images/cut_integration_api.png
Binary files differ
diff --git a/xdocs/images/cut_private_messages.png b/xdocs/images/cut_private_messages.png
new file mode 100644
index 0000000..c080851
--- /dev/null
+++ b/xdocs/images/cut_private_messages.png
Binary files differ
diff --git a/xdocs/images/cut_recordings_playback.png b/xdocs/images/cut_recordings_playback.png
new file mode 100644
index 0000000..906d798
--- /dev/null
+++ b/xdocs/images/cut_recordings_playback.png
Binary files differ
diff --git a/xdocs/images/dashboard.png b/xdocs/images/dashboard.png
new file mode 100644
index 0000000..66152bd
--- /dev/null
+++ b/xdocs/images/dashboard.png
Binary files differ
diff --git a/xdocs/images/desktopsharing.png b/xdocs/images/desktopsharing.png
new file mode 100644
index 0000000..94e8add
--- /dev/null
+++ b/xdocs/images/desktopsharing.png
Binary files differ
diff --git a/xdocs/images/file_smal.png b/xdocs/images/file_smal.png
new file mode 100644
index 0000000..69dcc46
--- /dev/null
+++ b/xdocs/images/file_smal.png
Binary files differ
diff --git a/xdocs/images/installation_instructions.png b/xdocs/images/installation_instructions.png
new file mode 100644
index 0000000..64ab05a
--- /dev/null
+++ b/xdocs/images/installation_instructions.png
Binary files differ
diff --git a/xdocs/images/langeditor_screen_v2.png b/xdocs/images/langeditor_screen_v2.png
new file mode 100644
index 0000000..fbaf47d
--- /dev/null
+++ b/xdocs/images/langeditor_screen_v2.png
Binary files differ
diff --git a/xdocs/images/ldap_screen.png b/xdocs/images/ldap_screen.png
new file mode 100644
index 0000000..e28bbc3
--- /dev/null
+++ b/xdocs/images/ldap_screen.png
Binary files differ
diff --git a/xdocs/images/logo-2.jpg b/xdocs/images/logo-2.jpg
new file mode 100644
index 0000000..13c2512
--- /dev/null
+++ b/xdocs/images/logo-2.jpg
Binary files differ
diff --git a/xdocs/images/micro_small.png b/xdocs/images/micro_small.png
new file mode 100644
index 0000000..215c831
--- /dev/null
+++ b/xdocs/images/micro_small.png
Binary files differ
diff --git a/xdocs/images/monitor_add.png b/xdocs/images/monitor_add.png
new file mode 100644
index 0000000..a818066
--- /dev/null
+++ b/xdocs/images/monitor_add.png
Binary files differ
diff --git a/xdocs/images/mouse_add.png b/xdocs/images/mouse_add.png
new file mode 100644
index 0000000..65bcab5
--- /dev/null
+++ b/xdocs/images/mouse_add.png
Binary files differ
diff --git a/xdocs/images/pencil_add.png b/xdocs/images/pencil_add.png
new file mode 100644
index 0000000..902bbe6
--- /dev/null
+++ b/xdocs/images/pencil_add.png
Binary files differ
diff --git a/xdocs/images/poll.png b/xdocs/images/poll.png
new file mode 100644
index 0000000..5b51c9b
--- /dev/null
+++ b/xdocs/images/poll.png
Binary files differ
diff --git a/xdocs/images/pollresult.png b/xdocs/images/pollresult.png
new file mode 100644
index 0000000..88c38df
--- /dev/null
+++ b/xdocs/images/pollresult.png
Binary files differ
diff --git a/xdocs/images/privat_messages.png b/xdocs/images/privat_messages.png
new file mode 100644
index 0000000..cc6e245
--- /dev/null
+++ b/xdocs/images/privat_messages.png
Binary files differ
diff --git a/xdocs/images/recordings_timeleine.png b/xdocs/images/recordings_timeleine.png
new file mode 100644
index 0000000..407719e
--- /dev/null
+++ b/xdocs/images/recordings_timeleine.png
Binary files differ
diff --git a/xdocs/images/right_management.png b/xdocs/images/right_management.png
new file mode 100644
index 0000000..da287a6
--- /dev/null
+++ b/xdocs/images/right_management.png
Binary files differ
diff --git a/xdocs/images/system_backup.png b/xdocs/images/system_backup.png
new file mode 100644
index 0000000..ffc2964
--- /dev/null
+++ b/xdocs/images/system_backup.png
Binary files differ
diff --git a/xdocs/images/user_add.png b/xdocs/images/user_add.png
new file mode 100644
index 0000000..deae99b
--- /dev/null
+++ b/xdocs/images/user_add.png
Binary files differ
diff --git a/xdocs/images/vote.png b/xdocs/images/vote.png
new file mode 100644
index 0000000..c16ff86
--- /dev/null
+++ b/xdocs/images/vote.png
Binary files differ
diff --git a/xdocs/images/whiteboard.png b/xdocs/images/whiteboard.png
new file mode 100644
index 0000000..8e5392f
--- /dev/null
+++ b/xdocs/images/whiteboard.png
Binary files differ
diff --git a/xdocs/index.xml b/xdocs/index.xml
new file mode 100644
index 0000000..110c6bb
--- /dev/null
+++ b/xdocs/index.xml
@@ -0,0 +1,462 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Home</title>
+		<author email="sebawagner@apache.org">
+			Sebastian Wagner
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="Apache OpenMeetings - Features and overview">
+
+			<div id="coin-slider">
+				<a href="#">
+					<img src="images/cut_conference_room.png" alt="Conference Room" />
+					<span>
+						<b>Audio/Video Conferencing</b>
+						<br />
+						OpenMeetings enables you to make Audio/Video conferencing.
+					</span>
+				</a>
+
+				<a href="#">
+					<img src="images/cut_integrated_calendar.png" alt="Calendar" />
+					<span>
+						<b>Calendar</b>
+						<br />
+						You can create meetings with the integrated calendar, conference rooms and invitations are automatically send to everybody
+					</span>
+				</a>
+
+				<a href="#">
+					<img src="images/cut_file_explorer.png" alt="File Explorer" />
+					<span>
+						<b>File Explorer</b>
+						<br />
+						Each room has its own File-Explorer. Each user has his own private drive and additionally there is a public drive to share files with other participants
+					</span>
+				</a>
+
+				<a href="#">
+					<img src="images/cut_integration_api.png" alt="Integration API" />
+					<span>
+						<b>Integration API</b>
+						<br />
+						There is a SOAP/REST API to integrate into your website or intranet, as well
+						as LDAP/ADS connectors and VoIP/Asterisk integration modules
+					</span>
+				</a>
+
+				<a href="#">
+					<img src="images/cut_private_messages.png" alt="Private messages" />
+					<span>
+						<b>Private messages and contacts</b>
+						<br />
+						From the private message center you can send invitations by email
+						and attach meeting invitations to every email
+					</span>
+				</a>
+
+				<a href="#">
+					<img src="images/cut_administration_configuration.png" alt="Administration" />
+					<span>
+						<b>Administration and Configuration</b>
+						<br />
+						You can configure users, rooms, usergroups, config settings or
+						edit labels with a Web-Frontend integrated in the application
+					</span>
+				</a>
+
+				<a href="#">
+					<img src="images/cut_recordings_playback.png" alt="Share and Record" />
+					<span>
+						<b>Screen sharing and Recording</b>
+						<br />
+						You can do screen sharing as well as recording of whole sessions
+						including audio/video. Recordings can be downloaded as AVI/FLV or
+						watched online in the integrated player.
+					</span>
+				</a>
+
+			</div>
+
+
+			<p> Openmeetings provides video conferencing, instant messaging,
+				white board, collaborative document editing and other groupware
+				tools using API functions of the Red5 Streaming Server for Remoting
+				and Streaming.
+			</p>
+
+			<p>
+				OpenMeetings is a project of the Apache, the old project
+				website at
+				<a href="http://code.google.com/p/openmeetings/" target="_BLANK">GoogleCode
+				</a>
+				will receive no updates anymore. The website at Apache is the only
+				place that receives updates.
+			</p>
+
+		</section>
+
+		<section name="News">
+
+			<p>
+			    <strong>
+                    Version 2.2.0 released! See <a href="downloads.html">Downloads page</a>. 
+                    (2013-12-12)
+                </strong>
+                <br />
+			    <strong>
+                    Version 2.1.1 released! See <a href="https://blogs.apache.org/openmeetings/entry/apache_openmeetings_2_1_11" target="_BLANK">Project Blog</a> or <a href="downloads.html">Downloads page</a>. 
+                    (2013-07-06)
+                </strong>
+                <br />
+			    <strong>
+					OpenMeetings 2.1.0 is released! Please check <a href="downloads.html">Downloads page</a>. 
+					(2013-04-01)
+				</strong>
+				<br />
+			    <strong>
+					OpenMeetings new URL, update your filters!
+					<a href="http://openmeetings.apache.org">openmeetings.apache.org</a> is the new home. 
+					(2013-01-28)
+				</strong>
+				<br />
+			    <strong>
+					OpenMeetings on the road to graduate from the Incubator
+					<a href="https://blogs.apache.org/openmeetings/entry/openmeetings_on_the_road_to" target="_BLANK" rel="nofollow">at our blog</a>
+					(2012-12-07)
+				</strong>
+				<br />
+				<strong>
+					Some slides from our Fast Feather Track at the ApacheCon Europe 2012 
+					<a href="https://blogs.apache.org/openmeetings/entry/openmeetings_apachecon_presentation_slide" target="_BLANK" rel="nofollow">at our blog</a>
+					(2012-11-18)
+				</strong>
+				<br />
+				<strong>
+					Update: Builds are available at
+					<a href="https://builds.apache.org/view/M-R/view/OpenMeetings/" target="_BLANK" rel="nofollow">builds.apache.org</a>
+					(2012-08-03)
+				</strong>
+				<br />
+				<strong>
+					<a href="https://blogs.apache.org/openmeetings/entry/apache_openmeetings_2_0_incubating" target="_BLANK" rel="nofollow">Version 2.0 released</a>
+					(2012-07-26)
+				</strong>
+				<br />
+				<strong>New committer: Timur Tleukenov (2012-03-06)</strong>
+				<br />
+				<strong>
+					<a href="http://demo.openmeetings.de" target="_BLANK" rel="nofollow">Demo
+						server</a>
+					updated to r1236172 (2012-01-26)
+				</strong>
+				<br />
+				<strong>New committer: German Grekhov (2011-12-26)</strong>
+				<br />
+				<strong>OpenMeetings has been accepted into the Apache Incubator
+					(2011-11-12).
+				</strong>
+			</p>
+
+		</section>
+
+		<section name="Community">
+			<div>
+				<strong>Who we are</strong>
+				<blockquote>
+					<a href="team-list.html">List of committers</a>
+					.
+				</blockquote>
+			</div>
+			<div>
+				<strong>Users!</strong>
+				<blockquote>
+					We'd love to have you involved. Check out the
+					<a href="get-involved.html">Get involved</a>
+					.
+				</blockquote>
+			</div>
+		</section>
+
+		<section name="Feature details">
+
+			<feature title="Audio and Video Conferencing">
+
+				<image fullhref="images/Features_Screen_Conference_Room_Thumb.png"
+					href="images/Features_Screen_Conference_Room_Thumb.png" title="OpenMeetings Conference Room"
+					width="250" height="175" />
+				<text>
+				<div>
+					There are four options to use OpenMeetings audio/video functions,
+					which you can select during a conference session.
+					<ul>
+						<li>audio + video</li>
+						<li>audio only</li>
+						<li>video only</li>
+						<li>picture only</li>
+					</ul>
+					Additional you can change video-/audio-quality, choose multiple
+					camera resolutions (4:3, 16:9 or 3:2)
+					and choose your input devices.
+				</div>
+				</text>
+			</feature>
+
+			<feature title="Meeting recording and Screen sharing">
+
+				<image href="images/desktopsharing.png" fullhref="images/desktopsharing.png"
+					title="Screensharing-/recording" width="140" height="150" />
+				<image href="images/recordings_timeleine.png" fullhref="images/recordings_timeleine.png"
+					title="Device" width="200" height="115" />
+					
+				<text>
+				<div>
+					<ul>
+						<li>Recorded sessions contain everything including sound recorded
+							from all audio streams in exactly the way you've seen it in the
+							conference.
+						</li>
+					</ul>
+					<ul>
+						<li>Recorded sessions can be downloaded as AVI/FLV files.</li>
+					</ul>
+					<ul>
+						<li>Possibility to select a screen area for sharing.</li>
+					</ul>
+					<ul>
+						<li>Different quality steps for Screensharing.</li>
+					</ul>
+					<ul>
+						<li>Watch and organize recordings in an integrated Drag and Drop
+							File-Explorer
+						</li>
+					</ul>
+				</div>
+				</text>
+			</feature>
+
+			<feature title="File Explorer">
+
+				<image href="images/file_smal.png" title="File Explorer"
+					fullhref="images/file_smal.png" width="135" height="200" />
+				<text>
+				<div>
+					Advanced File-Explorer in every conference room, Drag and Drop
+					interface for managing uploaded files, including the possibility to
+					create a document tree with folders.
+					<br />
+					<br />
+					Private and Public Drive in
+					File-Explorer. The File-Explorer has two
+					different views, one is the
+					<b>Private Drive</b>
+					and the other the
+					<b>Public Drive</b>
+					. The Private Drive
+					always contains the same files.
+					Those files are
+					visible only to the
+					user currently loggedin. The
+					Public Drive is not
+					bound to the user,
+					but to the conference room
+					instead. All users in
+					the conference room
+					have access to the Public
+					Drive.
+				</div>
+				</text>
+			</feature>
+
+			<feature title="Moderating System">
+
+				<image href="images/right_management.png" title="Right management"
+					fullhref="images/right_management.png" width="135" height="216" />
+				<text>
+				<div>
+					During a conference, the moderator can adjust the user permission
+					to every user individually .
+					<ul>
+						<li>
+							<img class="alignnone" title="Allow modaration" src="images/user_add.png"
+								alt="" />
+							Allow/Deny moderation
+						</li>
+						<li>
+							<img class="alignnone" title="Whiteboard Access" src="images/pencil_add.png"
+								alt="" />
+							Allow/Deny to draw on white board
+						</li>
+						<li>
+							<img class="alignnone" title="Screenshare" src="images/monitor_add.png"
+								alt="" />
+							Allow/Deny screen-sharing/record screen
+						</li>
+						<li>
+							<img class="alignnone" title="Remote control" src="images/mouse_add.png"
+								alt="" />
+							Allow/Deny Remote Control Screen
+						</li>
+						<li>
+							<img class="alignnone" title="Remote control" src="images/micro_small.png"
+								alt="" />
+							Give exclusive audio to others or self
+						</li>
+						<li>
+							<img class="alignnone" title="Video Audio" src="images/audio_and_video.png"
+								alt="" />
+							(Re-) Start Audio, Video or Device settings
+						</li>
+					</ul>
+				</div>
+				</text>
+			</feature>
+
+
+			<feature title="Multi-Whiteboard and Chat">
+
+				<image href="images/whiteboard.png" fullhref="images/whiteboard.png"
+					title="Whiteboard" width="240" height="165" />
+				<image href="images/chat.png" fullhref="images/chat.png"
+					title="Chat in Conference Room" width="240" height="68" />
+				<text>
+				<div>
+					Multi-Whiteboard, you can add new whiteboard instances, each
+					white
+					board can have the full range of tools and documents inside.
+					<br />
+					<br />
+					Save white boards. You can save each whiteboard instance as a file.
+					The file is located in the File-Explorer and can be drag n' drop'ed
+					to the white board again and organized like any other document,
+					image or folder.
+					<br />
+					<br />
+					White board with drawing, writing, Drag n' Drop, Resizing, Images
+					(Drag n'
+					Drop from File-Explorer), Symbol(s)/Cliparts .
+					<br />
+					<br />
+					Full-fit does rescale the document on the screen to be 100% visible
+					on all
+					screens no matter what kind of screen resolution different
+					users
+					have.
+					<br />
+					<br />
+					You can import from a wide range of document formats (PDF, DOC,
+					ODT, PPT, et cetera...)
+				</div>
+				</text>
+			</feature>
+
+			<feature title="User and room management">
+
+				<image href="images/dashboard.png" fullhref="images/dashboard.png"
+					title="Dashboard with MyRooms" width="250" height="130" />
+				<text>
+				<div>
+					You can manage users and multiple organizations in a single
+					OpenMeetings instance. You can also create users that only have
+					access via the SOAP-API.
+					<br />
+					<br />
+					MyRooms section. Each user has by default 2 personal rooms that
+					are
+					always accessible exclusively for that user. There are buttons
+					to
+					enter those rooms from the Dashboard.
+					<br />
+					<br />
+					You can assign conference room to all users, or you can assign them
+					only to specific user-groups.
+				</div>
+				</text>
+			</feature>
+
+			<feature title="Private message center">
+				<image href="images/privat_messages.png" fullhref="images/privat_messages.png"
+					title="Private Messages and Contact Search" width="230" height="125" />
+				<text>
+				<div>
+					Send users messages and organize them in folders. You can book
+					conference rooms by sending private messages. The booked event
+					automatically is in your and the participants calendar, changes to
+					that event will be populated to all users booked to the event.
+					<br />
+					<br />
+					User contacts, you can search users and add them to your contacts.
+					You
+					can even give them the right to see your calendar.
+				</div>
+				</text>
+			</feature>
+
+			<feature title="Plan meetings with integrated calendar">
+				<image href="images/calendar.png" fullhref="images/calendar.png"
+					title="Calendar" width="200" height="115" />
+				<text>
+				<div>
+					<ul>
+						<li>Plan your conferencing and invite attendees from OpenMeetings
+							or External.
+						</li>
+						<li>The invited attendees will recieve an E-mail with details to
+							the meetings and a link with a secure hash to the conference
+							room.
+						</li>
+						<li>Share your calendar with your contacts.</li>
+					</ul>
+				</div>
+				</text>
+			</feature>
+
+			<feature title="Polls and Votes">
+				<image href="images/poll.png" fullhref="images/poll.png"
+					title="Create a poll" width="250" height="250" />
+				<text>
+				<div>
+					You can create a poll with yes/no or 1-10 questions, let the
+					user
+					vote and see the voting results.
+					<br />
+					<br />
+					Polls can be stored and results viewed as pie-chart
+				</div>
+				</text>
+			</feature>
+
+			<feature title="Backup">
+				<image href="images/backup.png" fullhref="images/backup.png" title="Backup" width="250" />
+				<text>
+				<div>
+					You can backup all user-generated data including files
+					uploaded by the users in a single ZIP file and import that ZIP into
+					a new installation of OpenMeetings again.
+				</div>
+				</text>
+			</feature>
+
+
+		</section>
+
+	</body>
+</document>
diff --git a/xdocs/installation.xml b/xdocs/installation.xml
new file mode 100644
index 0000000..03548db
--- /dev/null
+++ b/xdocs/installation.xml
@@ -0,0 +1,326 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Home</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="OpenMeetings Installation">

+

+			<p>

+				To update from past versions or migrate see <a href="Upgrade.html">Upgrade</a>.<br/>

+				If you are looking for commercial help have a look at

+				<a href="commercial-support.html" target="_BLANK" rel="nofollow">commercial support</a>.

+			</p>

+			<div>

+				<a href="downloads.html" rel="nofollow">

+					<img src="images/installation_instructions.png" alt="Installation in 3 simple steps" />

+				</a>

+				<p>

+					<i>Note: OpenMeetings requires SUN/Oracle JRE 6, not openJDK!</i><br />

+					<i>

+						Since Version 2.0 you can also install OpenMeetings from command line. Just cd to the unpacked 

+						archive and type ./admin.sh or admin.bat, please see

+						<a href="CommandLineAdmin.html" target="_BLANK" rel="nofollow">Command Line Admin</a>

+						for more options

+					</i>

+				</p>

+			</div>

+			<ol>

+				<li>

+					<b>Recommendation for production environment</b>

+					<div style="margin-top: 10px; margin-bottom:10px">

+						By default OpenMeetings uses the integrated Apache Derby database.

+						For production environment you should consider using

+						<a href="MySQLConfig.html">MySQL</a>

+						,

+						<a href="PostgresConfig.html">Postgres</a>

+						, or for example

+						<a href="IBMDB2Config.html">IBM DB2</a>

+						, or

+						<a href="OracleConfig.html">Oracle</a>

+						, or

+						<a href="MSSQLConfig.html">MSSQL</a>

+					</div>

+				</li>

+				<li>

+					<b>Enabling Image Upload and import to whiteboard</b>

+					<div style="margin-top: 10px; margin-bottom:10px">

+						Install

+						<b>ImageMagick</b>

+						on the server, you can get more information on

+						<a href="http://www.imagemagick.org" rel="nofollow" target="_BLANK">http://www.imagemagick.org

+						</a>

+						regarding installation. The instructions

+						for installation can be

+						found there

+						<a href="http://www.imagemagick.org/script/binary-releases.php"

+							target="_BLANK" rel="nofollow">http://www.imagemagick.org/script/binary-releases.php

+						</a>

+						,

+						however on

+						most Linux systems you can get it via your favorite

+						package

+						managers (apt-get it)

+					</div>

+				</li>

+				<li>

+					<b>Enabling import of PDFs into whiteboard</b>

+					<div style="margin-top: 10px; margin-bottom:10px">

+						<ul>

+							<li>

+								Install

+								<b>GhostScript</b>

+								on the server, you can get more

+								information on

+								<a href="http://www.ghostscript.com/download/gsdnld.html" target="_BLANK"

+									rel="nofollow">

+									http://www.ghostscript.com/download/gsdnld.html

+								</a>

+								regarding

+								installation. The instructions for installation can be

+								found

+								there, however on most Linux systems you can get it via

+								your

+								favorite package managers (apt-get it).

+							</li>

+							<li>

+								Install

+								<b>SWFTools</b>

+								on the server, you can get more information

+								on

+								<a href="http://www.swftools.org/" target="_BLANK" rel="nofollow">http://www.swftools.org/

+								</a>

+								regarding installation. Some of the

+								Linux distributions already

+								have it in there package manager (see

+								<a href="http://packages.debian.org/unstable/utils/swftools"

+									target="_BLANK" rel="nofollow">http://packages.debian.org/unstable/utils/swftools

+								</a>

+								), the

+								recommended version of SWFTools is 0.9 as prior version

+								have a

+								bug that does lead to wrong object dimensions at

+								whiteboard

+							</li>

+						</ul>

+					</div>

+				</li>

+				<li>

+					<b>Enabling import of .doc, .docx, .ppt, .pptx, ... all Office

+						Documents into whitebaord

+					</b>

+					<div style="margin-top: 10px; margin-bottom:10px">

+						<ul>

+							<li>

+								<a href="http://code.google.com/p/jodconverter/" target="_BLANK"

+									rel="nofollow">JODConverter</a>

+								installed (needed since v2.x)

+							</li>

+							<li>OpenOffice or Libre Office Installed</li>

+						</ul>

+						Since Version 2.x of OpenMeetings it is no more required to start

+						OpenOffice (or Libreoffice) service, see

+						<a href="OpenOfficeConverter.html">OpenOfficeConverter</a>

+						for details

+					</div>

+				</li>

+				<li>

+					<b>Enabling Recording and import of .avi, .flv, .mov and .mp4 into

+						whiteboard

+					</b>

+					<div style="margin-top: 10px; margin-bottom:10px">

+						<ul>

+							<li>

+								Install

+								<b>FFMpeg (with -enabled libmp3lame and libx264 options)</b>

+								. You should get FFMPEG in an up to date copy! OpenMeetings is

+								tested with FFMPEG Version 10.3 and latest build from GIT

+								For Windows you can download a Build for example from

+								<a href="http://ffmpeg.zeranoe.com/builds/" target="_BLANK"

+									rel="nofollow">http://ffmpeg.zeranoe.com/builds/ </a>

+								Linux or OSx Users should be able to use one of the various

+								Installation Instructions on the Web. You need to enable

+								libmp3lame and libx264!

+							</li>

+							<li>

+								Install

+								<b>SoX</b>

+								<a href="http://sox.sourceforge.net/" target="_BLANK" rel="nofollow">http://sox.sourceforge.net/

+								</a>

+								. You should install SoX in a up

+								to date copy! SoX 12.xx will NOT

+								work!

+							</li>

+						</ul>

+					</div>

+				</li>

+			</ol>

+

+		</section>

+

+		<section name="Ports, NAT Settings, Customize">

+

+			<p>

+				See

+				<a href="PortSettings.html">PortSettings</a>

+			</p>

+		</section>

+

+		<section name="VMWare">

+			<ul>

+				<li>

+					See

+					<a href="http://nightly.openmeetings.de/openmeetings/builds/vmware/"

+						rel="nofollow">http://nightly.openmeetings.de/openmeetings/builds/vmware/</a>

+				</li>

+				<li>

+					VMWare 1.6.1

+					<a

+						href="http://openstudio.no-ip.info/2011/01/openmeetings-1-6-rc1-vmware-appliance-using-ubuntu-server-10-04-lts/"

+						rel="nofollow">blog-entry</a>

+				</li>

+			</ul>

+		</section>

+

+		<section name="Hardware Requirements">

+			<ul>

+				<li>

+					Minimalistic requirement (without Document Converters, Recorder and

+					Upload feature) 1GHz CPU 1 GB RAM (

+					<i>server-side</i>

+					)

+				</li>

+				<li>

+					Recommended requirement 2x/4x 2GHz ++ CPU (32 or 64Bit) 4GB RAM. If

+					you have a 64Bit Operating System check if there is a OpenOffice

+					64Bit Version

+					<a href="http://download.openoffice.org/other.html#de" rel="nofollow">available

+						for your OS

+					</a>

+					(

+					<i>server-side</i>

+					)

+				</li>

+				<li>

+					Headset/Microphone recommendation: Logitech ClearChat PC Wireless,

+					for example from

+					<a

+						href="http://www.amazon.de/Logitech-ClearChat-kabelloser-Kopfh%C3%B6rer-Transmitter/dp/B00166WSN4"

+						rel="nofollow">Amazon</a>

+					or

+					<a

+						href="http://shop.ebay.com/i.html?_nkw=Logitech+ClearChat.+Wireless&amp;_sacat=0&amp;_trksid=p3286.m270.l1313&amp;LH_BIN=1&amp;LH_IncludeSIF=1&amp;_odkw=Logitech+ClearChat+PC&amp;_osacat=0"

+						rel="nofollow">EBay Auctions</a>

+					(

+					<i>cient-side</i>

+					).

+					<a href="RecommendedHardwareList.html">See all recommendations</a>

+					for cameras, headsets and speakerphones.

+				</li>

+			</ul>

+

+		</section>

+

+		<section name="Debian, Links, Changelog, VoIP">

+

+			<ul>

+				<li>

+					for VoIP and SIP Integration see also

+					<a href="voip-sip-integration.html">VoIPAndSIP</a>

+				</li>

+				<li>

+					<a href="http://meetingslive.sourceforge.net/" rel="nofollow">http://meetingslive.sourceforge.net/

+					</a>

+				</li>

+				<li>

+					<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools">Installation of OM 2.0 for Ubuntu 12.04 x64, Ubuntu 12.10 x64, Debian, Windows XP, 7, 2003, 2008</a>

+				</li>

+				<li>

+					<a

+						href="http://liberamemoria.blogspot.com/2009/02/instalando-openmeetings-07-rc-2-en.html"

+						rel="nofollow">Espanol Version for Debian Installation</a>

+				</li>

+				<li>

+					<a

+						href="http://aitinet.com/blog/wp-content/uploads/2009/08/TUTORIAL-PARA-INSTALACAO-DO-RED5-E-OPENMEETINGS-NO-LINUX-DEBIAN-LENNY-51.pdf"

+						rel="nofollow">Portuguese Version for Debian Installation of 0.9 RC1</a>

+				</li>

+				<li>

+					<a

+						href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools"

+						rel="nofollow">Automatic script installation for Ubuntu/Debian (beta)</a>

+				</li>

+				<li>

+					French version of Installation Instructions:

+					<a

+						href="http://flash.54n.free.fr/?/Root/Debian/OpenMeetings-Installation"

+						rel="nofollow">http://flash.54n.free.fr/?/Root/Debian/OpenMeetings-Installation

+					</a>

+				</li>

+			</ul>

+		</section>

+

+		<section name="Tips and Tricks">

+			<ul>

+				<li>

+					Use the Debug-Application: Enter in your browser

+					<a

+						href="http://$RED-HOST:$RED5-PORT/openmeetings/?swf=maindebug.as3.swf11.swf"

+						rel="nofollow">http://$RED-HOST:$RED5-PORT/openmeetings/?swf=maindebug.as3.swf11.swf

+					</a>

+					for example

+					<a href="http://localhost:5080/openmeetings/?swf=maindebug.as3.swf11.swf"

+						rel="nofollow">http://localhost:5080/openmeetings/?swf=maindebug.as3.swf11.swf

+					</a>

+				</li>

+				<li>If you have Problems with conversion-jobs check your Red5-Log

+					output. There will be error Messages which help you. You must

+					install OpenOffice, ImageMagick, GhostScript and SWFTools to run

+					all conversion-Jobs correctly.

+				</li>

+				<li>if you have problems in converting Files check the Batch-Scripts

+					in $OPENMEETINGS_HOME/jod

+				</li>

+				<li>

+					If you want to use red5 as a service (without red5.bat), you need

+					to move red5\wrapper\wrapper.exe to red5\wrapper.exe. Then change

+					some path in conf\wrapper.conf (like ..\lib\foo.jar to

+					lib\foo.jar). And finally change the register key in

+					HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Red5\ImagePath

+					to point to the new wrapper.

+				</li>

+				<li>

+					you can query a Mysql Database to get the schema_collection by

+					using this query:

+					<div class="xmlcode">

+						SELECT Table_name, TABLE_COLLATION FROM

+						information_schema.tables WHERE table_schema = 'openmeetings'

+						ORDER BY table_name DESC

+					</div>

+				</li>

+			</ul>

+		</section>

+

+	</body>

+

+</document>

+

diff --git a/xdocs/js/coin-slider.min.js b/xdocs/js/coin-slider.min.js
new file mode 100644
index 0000000..b96708f
--- /dev/null
+++ b/xdocs/js/coin-slider.min.js
@@ -0,0 +1,51 @@
+/**
+ * Coin Slider - Unique jQuery Image Slider
+ * @version: 1.0 - (2010/04/04)
+ * @requires jQuery v1.2.2 or later 
+ * @author Ivan Lazarevic
+ * Examples and documentation at: http://workshop.rs/projects/coin-slider/
+ 
+ * Licensed under MIT licence:
+ *   http://www.opensource.org/licenses/mit-license.php
+**/
+
+(function($){var params=new Array;var order=new Array;var images=new Array;var links=new Array;var linksTarget=new Array;var titles=new Array;var interval=new Array;var imagePos=new Array;var appInterval=new Array;var squarePos=new Array;var reverse=new Array;$.fn.coinslider=$.fn.CoinSlider=function(options){init=function(el){order[el.id]=new Array();images[el.id]=new Array();links[el.id]=new Array();linksTarget[el.id]=new Array();titles[el.id]=new Array();imagePos[el.id]=0;squarePos[el.id]=0;reverse[el.id]=1;params[el.id]=$.extend({},$.fn.coinslider.defaults,options);$.each($('#'+el.id+' img'),function(i,item){images[el.id][i]=$(item).attr('src');links[el.id][i]=$(item).parent().is('a')?$(item).parent().attr('href'):'';linksTarget[el.id][i]=$(item).parent().is('a')?$(item).parent().attr('target'):'';titles[el.id][i]=$(item).next().is('span')?$(item).next().html():'';$(item).hide();$(item).next().hide();});$(el).css({'background-image':'url('+images[el.id][0]+')','width':params[el.id].width,'height':params[el.id].height,'position':'relative','background-position':'top left'}).wrap("<div class='coin-slider' id='coin-slider-"+el.id+"' />");$('#'+el.id).append("<div class='cs-title' id='cs-title-"+el.id+"' style='position: absolute; bottom:0; left: 0; z-index: 1000;'></div>");$.setFields(el);if(params[el.id].navigation)
+$.setNavigation(el);$.transition(el,0);$.transitionCall(el);}
+$.setFields=function(el){tWidth=sWidth=parseInt(params[el.id].width/params[el.id].spw);tHeight=sHeight=parseInt(params[el.id].height/params[el.id].sph);counter=sLeft=sTop=0;tgapx=gapx=params[el.id].width-params[el.id].spw*sWidth;tgapy=gapy=params[el.id].height-params[el.id].sph*sHeight;for(i=1;i<=params[el.id].sph;i++){gapx=tgapx;if(gapy>0){gapy--;sHeight=tHeight+1;}else{sHeight=tHeight;}
+for(j=1;j<=params[el.id].spw;j++){if(gapx>0){gapx--;sWidth=tWidth+1;}else{sWidth=tWidth;}
+order[el.id][counter]=i+''+j;counter++;if(params[el.id].links)
+$('#'+el.id).append("<a href='"+links[el.id][0]+"' class='cs-"+el.id+"' id='cs-"+el.id+i+j+"' style='width:"+sWidth+"px; height:"+sHeight+"px; float: left; position: absolute;'></a>");else
+$('#'+el.id).append("<div class='cs-"+el.id+"' id='cs-"+el.id+i+j+"' style='width:"+sWidth+"px; height:"+sHeight+"px; float: left; position: absolute;'></div>");$("#cs-"+el.id+i+j).css({'background-position':-sLeft+'px '+(-sTop+'px'),'left':sLeft,'top':sTop});sLeft+=sWidth;}
+sTop+=sHeight;sLeft=0;}
+$('.cs-'+el.id).mouseover(function(){$('#cs-navigation-'+el.id).show();});$('.cs-'+el.id).mouseout(function(){$('#cs-navigation-'+el.id).hide();});$('#cs-title-'+el.id).mouseover(function(){$('#cs-navigation-'+el.id).show();});$('#cs-title-'+el.id).mouseout(function(){$('#cs-navigation-'+el.id).hide();});if(params[el.id].hoverPause){$('.cs-'+el.id).mouseover(function(){params[el.id].pause=true;});$('.cs-'+el.id).mouseout(function(){params[el.id].pause=false;});$('#cs-title-'+el.id).mouseover(function(){params[el.id].pause=true;});$('#cs-title-'+el.id).mouseout(function(){params[el.id].pause=false;});}};$.transitionCall=function(el){clearInterval(interval[el.id]);delay=params[el.id].delay+params[el.id].spw*params[el.id].sph*params[el.id].sDelay;interval[el.id]=setInterval(function(){$.transition(el)},delay);}
+$.transition=function(el,direction){if(params[el.id].pause==true)return;$.effect(el);squarePos[el.id]=0;appInterval[el.id]=setInterval(function(){$.appereance(el,order[el.id][squarePos[el.id]])},params[el.id].sDelay);$(el).css({'background-image':'url('+images[el.id][imagePos[el.id]]+')'});if(typeof(direction)=="undefined")
+imagePos[el.id]++;else
+if(direction=='prev')
+imagePos[el.id]--;else
+imagePos[el.id]=direction;if(imagePos[el.id]==images[el.id].length){imagePos[el.id]=0;}
+if(imagePos[el.id]==-1){imagePos[el.id]=images[el.id].length-1;}
+$('.cs-button-'+el.id).removeClass('cs-active');$('#cs-button-'+el.id+"-"+(imagePos[el.id]+1)).addClass('cs-active');if(titles[el.id][imagePos[el.id]]){$('#cs-title-'+el.id).css({'opacity':0}).animate({'opacity':params[el.id].opacity},params[el.id].titleSpeed);$('#cs-title-'+el.id).html(titles[el.id][imagePos[el.id]]);}else{$('#cs-title-'+el.id).css('opacity',0);}};$.appereance=function(el,sid){$('.cs-'+el.id).attr('href',links[el.id][imagePos[el.id]]).attr('target',linksTarget[el.id][imagePos[el.id]]);if(squarePos[el.id]==params[el.id].spw*params[el.id].sph){clearInterval(appInterval[el.id]);return;}
+$('#cs-'+el.id+sid).css({opacity:0,'background-image':'url('+images[el.id][imagePos[el.id]]+')'});$('#cs-'+el.id+sid).animate({opacity:1},300);squarePos[el.id]++;};$.setNavigation=function(el){$(el).append("<div id='cs-navigation-"+el.id+"'></div>");$('#cs-navigation-'+el.id).hide();$('#cs-navigation-'+el.id).append("<a href='#' id='cs-prev-"+el.id+"' class='cs-prev'>prev</a>");$('#cs-navigation-'+el.id).append("<a href='#' id='cs-next-"+el.id+"' class='cs-next'>next</a>");$('#cs-prev-'+el.id).css({'position':'absolute','top':params[el.id].height/2-15,'left':0,'z-index':1001,'line-height':'30px','opacity':params[el.id].opacity}).click(function(e){e.preventDefault();$.transition(el,'prev');$.transitionCall(el);}).mouseover(function(){$('#cs-navigation-'+el.id).show()});$('#cs-next-'+el.id).css({'position':'absolute','top':params[el.id].height/2-15,'right':0,'z-index':1001,'line-height':'30px','opacity':params[el.id].opacity}).click(function(e){e.preventDefault();$.transition(el);$.transitionCall(el);}).mouseover(function(){$('#cs-navigation-'+el.id).show()});$("<div id='cs-buttons-"+el.id+"' class='cs-buttons'></div>").appendTo($('#coin-slider-'+el.id));for(k=1;k<images[el.id].length+1;k++){$('#cs-buttons-'+el.id).append("<a href='#' class='cs-button-"+el.id+"' id='cs-button-"+el.id+"-"+k+"'>"+k+"</a>");}
+$.each($('.cs-button-'+el.id),function(i,item){$(item).click(function(e){$('.cs-button-'+el.id).removeClass('cs-active');$(this).addClass('cs-active');e.preventDefault();$.transition(el,i);$.transitionCall(el);})});$('#cs-navigation-'+el.id+' a').mouseout(function(){$('#cs-navigation-'+el.id).hide();params[el.id].pause=false;});$("#cs-buttons-"+el.id).css({'left':'50%','margin-left':-images[el.id].length*15/2-5,'position':'relative'});}
+$.effect=function(el){effA=['random','swirl','rain','straight'];if(params[el.id].effect=='')
+eff=effA[Math.floor(Math.random()*(effA.length))];else
+eff=params[el.id].effect;order[el.id]=new Array();if(eff=='random'){counter=0;for(i=1;i<=params[el.id].sph;i++){for(j=1;j<=params[el.id].spw;j++){order[el.id][counter]=i+''+j;counter++;}}
+$.random(order[el.id]);}
+if(eff=='rain'){$.rain(el);}
+if(eff=='swirl')
+$.swirl(el);if(eff=='straight')
+$.straight(el);reverse[el.id]*=-1;if(reverse[el.id]>0){order[el.id].reverse();}}
+$.random=function(arr){var i=arr.length;if(i==0)return false;while(--i){var j=Math.floor(Math.random()*(i+1));var tempi=arr[i];var tempj=arr[j];arr[i]=tempj;arr[j]=tempi;}}
+$.swirl=function(el){var n=params[el.id].sph;var m=params[el.id].spw;var x=1;var y=1;var going=0;var num=0;var c=0;var dowhile=true;while(dowhile){num=(going==0||going==2)?m:n;for(i=1;i<=num;i++){order[el.id][c]=x+''+y;c++;if(i!=num){switch(going){case 0:y++;break;case 1:x++;break;case 2:y--;break;case 3:x--;break;}}}
+going=(going+1)%4;switch(going){case 0:m--;y++;break;case 1:n--;x++;break;case 2:m--;y--;break;case 3:n--;x--;break;}
+check=$.max(n,m)-$.min(n,m);if(m<=check&&n<=check)
+dowhile=false;}}
+$.rain=function(el){var n=params[el.id].sph;var m=params[el.id].spw;var c=0;var to=to2=from=1;var dowhile=true;while(dowhile){for(i=from;i<=to;i++){order[el.id][c]=i+''+parseInt(to2-i+1);c++;}
+to2++;if(to<n&&to2<m&&n<m){to++;}
+if(to<n&&n>=m){to++;}
+if(to2>m){from++;}
+if(from>to)dowhile=false;}}
+$.straight=function(el){counter=0;for(i=1;i<=params[el.id].sph;i++){for(j=1;j<=params[el.id].spw;j++){order[el.id][counter]=i+''+j;counter++;}}}
+$.min=function(n,m){if(n>m)return m;else return n;}
+$.max=function(n,m){if(n<m)return m;else return n;}
+this.each(function(){init(this);});};$.fn.coinslider.defaults={width:565,height:290,spw:7,sph:5,delay:3000,sDelay:30,opacity:0.7,titleSpeed:500,effect:'',navigation:true,links:true,hoverPause:true};})(jQuery);
\ No newline at end of file
diff --git a/xdocs/js/jquery-1.11.0.min.js b/xdocs/js/jquery-1.11.0.min.js
new file mode 100644
index 0000000..73f33fb
--- /dev/null
+++ b/xdocs/js/jquery-1.11.0.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="<select t=''><option selected=''></option></select>",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=jb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=kb(b);function nb(){}nb.prototype=d.filters=d.pseudos,d.setFilters=new nb;function ob(a,b){var c,e,f,g,h,i,j,k=x[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=Q.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?db.error(a):x(a,i).slice(0)}function pb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f
+}}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=["Top","Right","Bottom","Left"],V=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},W=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML="  <link/><table></table><a href='/a'>a</a>",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.isWindow(d)){for(i=k.delegateType||p,_.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((n.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=$.test(e)?this.mouseHooks:Z.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||z),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||z,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==db()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===db()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=z.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===L&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&(a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault())?bb:cb):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:cb,isPropagationStopped:cb,isImmediatePropagationStopped:cb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=bb,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=bb,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submitBubbles||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?b.form:void 0;c&&!n._data(c,"submitBubbles")&&(n.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),n._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.changeBubbles||(n.event.special.change={setup:function(){return Y.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),n.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),n.event.simulate("change",this,a,!0)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;Y.test(b.nodeName)&&!n._data(b,"changeBubbles")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a,!0)}),n._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!Y.test(this.nodeName)}}),l.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=cb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return n().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=cb),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});function eb(a){var b=fb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var fb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gb=/ jQuery\d+="(?:null|\d+)"/g,hb=new RegExp("<(?:"+fb+")[\\s/>]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/<tbody/i,mb=/<|&#?\w+;/,nb=/<(?:script|style|link)/i,ob=/checked\s*(?:[^=]|=\s*.checked.)/i,pb=/^$|\/(?:java|ecma)script/i,qb=/^true\/(.*)/,rb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,sb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1></$2>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?"<table>"!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Db[0].contentWindow||Db[0].contentDocument).document,b.write(),b.close(),c=Fb(a,b),Db.detach()),Eb[a]=c),c}!function(){var a,b,c=z.createElement("div"),d="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";c.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],a.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(a.style.opacity),l.cssFloat=!!a.style.cssFloat,c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===c.style.backgroundClip,a=c=null,l.shrinkWrapBlocks=function(){var a,c,e,f;if(null==b){if(a=z.getElementsByTagName("body")[0],!a)return;f="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",c=z.createElement("div"),e=z.createElement("div"),a.appendChild(c).appendChild(e),b=!1,typeof e.style.zoom!==L&&(e.style.cssText=d+";width:1px;padding:1px;zoom:1",e.innerHTML="<div></div>",e.firstChild.style.width="5px",b=3!==e.offsetWidth),a.removeChild(c),a=c=e=null}return b}}();var Hb=/^margin/,Ib=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Jb,Kb,Lb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Jb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),Ib.test(g)&&Hb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):z.documentElement.currentStyle&&(Jb=function(a){return a.currentStyle},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ib.test(g)&&!Lb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Mb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h=z.createElement("div"),i="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",j="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";h.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",b=h.getElementsByTagName("a")[0],b.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(b.style.opacity),l.cssFloat=!!b.style.cssFloat,h.style.backgroundClip="content-box",h.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===h.style.backgroundClip,b=h=null,n.extend(l,{reliableHiddenOffsets:function(){if(null!=c)return c;var a,b,d,e=z.createElement("div"),f=z.getElementsByTagName("body")[0];if(f)return e.setAttribute("className","t"),e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=z.createElement("div"),a.style.cssText=i,f.appendChild(a).appendChild(e),e.innerHTML="<table><tr><td></td><td>t</td></tr></table>",b=e.getElementsByTagName("td"),b[0].style.cssText="padding:0;margin:0;border:0;display:none",d=0===b[0].offsetHeight,b[0].style.display="",b[1].style.display="none",c=d&&0===b[0].offsetHeight,f.removeChild(a),e=f=null,c},boxSizing:function(){return null==d&&k(),d},boxSizingReliable:function(){return null==e&&k(),e},pixelPosition:function(){return null==f&&k(),f},reliableMarginRight:function(){var b,c,d,e;if(null==g&&a.getComputedStyle){if(b=z.getElementsByTagName("body")[0],!b)return;c=z.createElement("div"),d=z.createElement("div"),c.style.cssText=i,b.appendChild(c).appendChild(d),e=d.appendChild(z.createElement("div")),e.style.cssText=d.style.cssText=j,e.style.marginRight=e.style.width="0",d.style.width="1px",g=!parseFloat((a.getComputedStyle(e,null)||{}).marginRight),b.removeChild(c)}return g}});function k(){var b,c,h=z.getElementsByTagName("body")[0];h&&(b=z.createElement("div"),c=z.createElement("div"),b.style.cssText=i,h.appendChild(b).appendChild(c),c.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%",n.swap(h,null!=h.style.zoom?{zoom:1}:{},function(){d=4===c.offsetWidth}),e=!0,f=!1,g=!0,a.getComputedStyle&&(f="1%"!==(a.getComputedStyle(c,null)||{}).top,e="4px"===(a.getComputedStyle(c,null)||{width:"4px"}).width),h.removeChild(b),c=h=null)}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Nb=/alpha\([^)]*\)/i,Ob=/opacity\s*=\s*([^)]*)/,Pb=/^(none|table(?!-c[ea]).+)/,Qb=new RegExp("^("+T+")(.*)$","i"),Rb=new RegExp("^([+-])=("+T+")","i"),Sb={position:"absolute",visibility:"hidden",display:"block"},Tb={letterSpacing:0,fontWeight:400},Ub=["Webkit","O","Moz","ms"];function Vb(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ub.length;while(e--)if(b=Ub[e]+c,b in a)return b;return d}function Wb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&V(d)&&(f[g]=n._data(d,"olddisplay",Gb(d.nodeName)))):f[g]||(e=V(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Xb(a,b,c){var d=Qb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Yb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+U[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+U[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+U[f]+"Width",!0,e))):(g+=n.css(a,"padding"+U[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+U[f]+"Width",!0,e)));return g}function Zb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Jb(a),g=l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Kb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ib.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Yb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Kb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=Vb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Rb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]="",i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Vb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Kb(a,b,d)),"normal"===f&&b in Tb&&(f=Tb[b]),""===c||c?(e=parseFloat(f),c===!0||n.isNumeric(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?0===a.offsetWidth&&Pb.test(n.css(a,"display"))?n.swap(a,Sb,function(){return Zb(a,b,d)}):Zb(a,b,d):void 0},set:function(a,c,d){var e=d&&Jb(a);return Xb(a,c,d?Yb(a,b,d,l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Ob.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Nb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Nb.test(f)?f.replace(Nb,e):f+" "+e)}}),n.cssHooks.marginRight=Mb(l.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},Kb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+U[d]+b]=f[d]||f[d-2]||f[0];return e}},Hb.test(a)||(n.cssHooks[a+b].set=Xb)}),n.fn.extend({css:function(a,b){return W(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Jb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)
+},a,b,arguments.length>1)},show:function(){return Wb(this,!0)},hide:function(){return Wb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){V(this)?n(this).show():n(this).hide()})}});function $b(a,b,c,d,e){return new $b.prototype.init(a,b,c,d,e)}n.Tween=$b,$b.prototype={constructor:$b,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=$b.propHooks[this.prop];return a&&a.get?a.get(this):$b.propHooks._default.get(this)},run:function(a){var b,c=$b.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):$b.propHooks._default.set(this),this}},$b.prototype.init.prototype=$b.prototype,$b.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},$b.propHooks.scrollTop=$b.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=$b.prototype.init,n.fx.step={};var _b,ac,bc=/^(?:toggle|show|hide)$/,cc=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),dc=/queueHooks$/,ec=[jc],fc={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=cc.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&cc.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function gc(){return setTimeout(function(){_b=void 0}),_b=n.now()}function hc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=U[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function ic(a,b,c){for(var d,e=(fc[b]||[]).concat(fc["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function jc(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&V(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k=Gb(a.nodeName),"none"===j&&(j=k),"inline"===j&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==k?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],bc.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}if(!n.isEmptyObject(o)){r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=ic(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function kc(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function lc(a,b,c){var d,e,f=0,g=ec.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=_b||gc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:_b||gc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(kc(k,j.opts.specialEasing);g>f;f++)if(d=ec[f].call(j,a,k,j.opts))return d;return n.map(k,ic,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(lc,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],fc[c]=fc[c]||[],fc[c].unshift(b)},prefilter:function(a,b){b?ec.unshift(a):ec.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(V).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=lc(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&dc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(hc(b,!0),a,d,e)}}),n.each({slideDown:hc("show"),slideUp:hc("hide"),slideToggle:hc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(_b=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),_b=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ac||(ac=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(ac),ac=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e=z.createElement("div");e.setAttribute("className","t"),e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=e.getElementsByTagName("a")[0],c=z.createElement("select"),d=c.appendChild(z.createElement("option")),b=e.getElementsByTagName("input")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==e.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=d.selected,l.enctype=!!z.createElement("form").enctype,c.disabled=!0,l.optDisabled=!d.disabled,b=z.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value,a=b=c=d=e=null}();var mc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(mc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.text(a)}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(l.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var nc,oc,pc=n.expr.attrHandle,qc=/^(?:checked|selected)$/i,rc=l.getSetAttribute,sc=l.input;n.fn.extend({attr:function(a,b){return W(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===L?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?oc:nc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(F);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?sc&&rc||!qc.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(rc?c:d)},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),oc={set:function(a,b,c){return b===!1?n.removeAttr(a,c):sc&&rc||!qc.test(c)?a.setAttribute(!rc&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=pc[b]||n.find.attr;pc[b]=sc&&rc||!qc.test(b)?function(a,b,d){var e,f;return d||(f=pc[b],pc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,pc[b]=f),e}:function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),sc&&rc||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):nc&&nc.set(a,b,c)}}),rc||(nc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},pc.id=pc.name=pc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:nc.set},n.attrHooks.contenteditable={set:function(a,b,c){nc.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var tc=/^(?:input|select|textarea|button|object)$/i,uc=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return W(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):tc.test(a.nodeName)||uc.test(a.nodeName)&&a.href?0:-1}}}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var vc=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(F)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===L||"boolean"===c)&&(this.className&&n._data(this,"__className__",this.className),this.className=this.className||a===!1?"":n._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(vc," ").indexOf(b)>=0)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var wc=n.now(),xc=/\?/,yc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(yc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var zc,Ac,Bc=/#.*$/,Cc=/([?&])_=[^&]*/,Dc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Ec=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Fc=/^(?:GET|HEAD)$/,Gc=/^\/\//,Hc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ic={},Jc={},Kc="*/".concat("*");try{Ac=location.href}catch(Lc){Ac=z.createElement("a"),Ac.href="",Ac=Ac.href}zc=Hc.exec(Ac.toLowerCase())||[];function Mc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(F)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nc(a,b,c,d){var e={},f=a===Jc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Oc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Pc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Qc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ac,type:"GET",isLocal:Ec.test(zc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Oc(Oc(a,n.ajaxSettings),b):Oc(n.ajaxSettings,a)},ajaxPrefilter:Mc(Ic),ajaxTransport:Mc(Jc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Dc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||Ac)+"").replace(Bc,"").replace(Gc,zc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(F)||[""],null==k.crossDomain&&(c=Hc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===zc[1]&&c[2]===zc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(zc[3]||("http:"===zc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),Nc(Ic,k,b,v),2===t)return v;h=k.global,h&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Fc.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(xc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Cc.test(e)?e.replace(Cc,"$1_="+wc++):e+(xc.test(e)?"&":"?")+"_="+wc++)),k.ifModified&&(n.lastModified[e]&&v.setRequestHeader("If-Modified-Since",n.lastModified[e]),n.etag[e]&&v.setRequestHeader("If-None-Match",n.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Kc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Nc(Jc,k,b,v)){v.readyState=1,h&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Pc(k,v,c)),u=Qc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(n.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!l.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||n.css(a,"display"))},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var Rc=/%20/g,Sc=/\[\]$/,Tc=/\r?\n/g,Uc=/^(?:submit|button|image|reset|file)$/i,Vc=/^(?:input|select|textarea|keygen)/i;function Wc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||Sc.test(a)?d(a,e):Wc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Wc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Wc(c,a[c],b,e);return d.join("&").replace(Rc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Vc.test(this.nodeName)&&!Uc.test(a)&&(this.checked||!X.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(Tc,"\r\n")}}):{name:b.name,value:c.replace(Tc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&$c()||_c()}:$c;var Xc=0,Yc={},Zc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Yc)Yc[a](void 0,!0)}),l.cors=!!Zc&&"withCredentials"in Zc,Zc=l.ajax=!!Zc,Zc&&n.ajaxTransport(function(a){if(!a.crossDomain||l.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Xc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Yc[g],b=void 0,f.onreadystatechange=n.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Yc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function $c(){try{return new a.XMLHttpRequest}catch(b){}}function _c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=z.head||n("head")[0]||z.documentElement;return{send:function(d,e){b=z.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ad=[],bd=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ad.pop()||n.expando+"_"+wc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(bd.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&bd.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(bd,"$1"+e):b.jsonp!==!1&&(b.url+=(xc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ad.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||z;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var cd=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&cd)return cd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=a.slice(h,a.length),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&n.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var dd=a.document.documentElement;function ed(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?(typeof e.getBoundingClientRect!==L&&(d=e.getBoundingClientRect()),c=ed(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||dd;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||dd})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return W(this,function(a,d,e){var f=ed(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Mb(l.pixelPosition,function(a,c){return c?(c=Kb(a,b),Ib.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return W(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var fd=a.jQuery,gd=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=gd),b&&a.jQuery===n&&(a.jQuery=fd),n},typeof b===L&&(a.jQuery=a.$=n),n});
diff --git a/xdocs/js/jquery-ui-1.10.4.custom.min.js b/xdocs/js/jquery-ui-1.10.4.custom.min.js
new file mode 100644
index 0000000..fe3e05c
--- /dev/null
+++ b/xdocs/js/jquery-ui-1.10.4.custom.min.js
@@ -0,0 +1,6 @@
+/*! jQuery UI - v1.10.4 - 2014-03-25
+* http://jqueryui.com
+* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.accordion.js
+* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
+
+(function(e,t){function i(t,i){var s,a,o,r=t.nodeName.toLowerCase();return"area"===r?(s=t.parentNode,a=s.name,t.href&&a&&"map"===s.nodeName.toLowerCase()?(o=e("img[usemap=#"+a+"]")[0],!!o&&n(o)):!1):(/input|select|textarea|button|object/.test(r)?!t.disabled:"a"===r?t.href||i:i)&&n(t)}function n(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var s=0,a=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.4",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,n){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),n&&n.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var n,s,a=e(this[0]);a.length&&a[0]!==document;){if(n=a.css("position"),("absolute"===n||"relative"===n||"fixed"===n)&&(s=parseInt(a.css("zIndex"),10),!isNaN(s)&&0!==s))return s;a=a.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++s)})},removeUniqueId:function(){return this.each(function(){a.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,n){return!!e.data(t,n[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var n=e.attr(t,"tabindex"),s=isNaN(n);return(s||n>=0)&&i(t,!s)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(i,n){function s(t,i,n,s){return e.each(a,function(){i-=parseFloat(e.css(t,"padding"+this))||0,n&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),s&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var a="Width"===n?["Left","Right"]:["Top","Bottom"],o=n.toLowerCase(),r={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+n]=function(i){return i===t?r["inner"+n].call(this):this.each(function(){e(this).css(o,s(this,i)+"px")})},e.fn["outer"+n]=function(t,i){return"number"!=typeof t?r["outer"+n].call(this,t):this.each(function(){e(this).css(o,s(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,n){var s,a=e.ui[t].prototype;for(s in n)a.plugins[s]=a.plugins[s]||[],a.plugins[s].push([i,n[s]])},call:function(e,t,i){var n,s=e.plugins[t];if(s&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(n=0;s.length>n;n++)e.options[s[n][0]]&&s[n][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var n=i&&"left"===i?"scrollLeft":"scrollTop",s=!1;return t[n]>0?!0:(t[n]=1,s=t[n]>0,t[n]=0,s)}})})(jQuery);(function(t,e){var i=0,s=Array.prototype.slice,n=t.cleanData;t.cleanData=function(e){for(var i,s=0;null!=(i=e[s]);s++)try{t(i).triggerHandler("remove")}catch(o){}n(e)},t.widget=function(i,s,n){var o,a,r,h,l={},c=i.split(".")[0];i=i.split(".")[1],o=c+"-"+i,n||(n=s,s=t.Widget),t.expr[":"][o.toLowerCase()]=function(e){return!!t.data(e,o)},t[c]=t[c]||{},a=t[c][i],r=t[c][i]=function(t,i){return this._createWidget?(arguments.length&&this._createWidget(t,i),e):new r(t,i)},t.extend(r,a,{version:n.version,_proto:t.extend({},n),_childConstructors:[]}),h=new s,h.options=t.widget.extend({},h.options),t.each(n,function(i,n){return t.isFunction(n)?(l[i]=function(){var t=function(){return s.prototype[i].apply(this,arguments)},e=function(t){return s.prototype[i].apply(this,t)};return function(){var i,s=this._super,o=this._superApply;return this._super=t,this._superApply=e,i=n.apply(this,arguments),this._super=s,this._superApply=o,i}}(),e):(l[i]=n,e)}),r.prototype=t.widget.extend(h,{widgetEventPrefix:a?h.widgetEventPrefix||i:i},l,{constructor:r,namespace:c,widgetName:i,widgetFullName:o}),a?(t.each(a._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,r,i._proto)}),delete a._childConstructors):s._childConstructors.push(r),t.widget.bridge(i,r)},t.widget.extend=function(i){for(var n,o,a=s.call(arguments,1),r=0,h=a.length;h>r;r++)for(n in a[r])o=a[r][n],a[r].hasOwnProperty(n)&&o!==e&&(i[n]=t.isPlainObject(o)?t.isPlainObject(i[n])?t.widget.extend({},i[n],o):t.widget.extend({},o):o);return i},t.widget.bridge=function(i,n){var o=n.prototype.widgetFullName||i;t.fn[i]=function(a){var r="string"==typeof a,h=s.call(arguments,1),l=this;return a=!r&&h.length?t.widget.extend.apply(null,[a].concat(h)):a,r?this.each(function(){var s,n=t.data(this,o);return n?t.isFunction(n[a])&&"_"!==a.charAt(0)?(s=n[a].apply(n,h),s!==n&&s!==e?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):e):t.error("no such method '"+a+"' for "+i+" widget instance"):t.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+a+"'")}):this.each(function(){var e=t.data(this,o);e?e.option(a||{})._init():t.data(this,o,new n(a,this))}),l}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this.bindings=t(),this.hoverable=t(),this.focusable=t(),s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:t.noop,_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(t.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:t.noop,widget:function(){return this.element},option:function(i,s){var n,o,a,r=i;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof i)if(r={},n=i.split("."),i=n.shift(),n.length){for(o=r[i]=t.widget.extend({},this.options[i]),a=0;n.length-1>a;a++)o[n[a]]=o[n[a]]||{},o=o[n[a]];if(i=n.pop(),1===arguments.length)return o[i]===e?null:o[i];o[i]=s}else{if(1===arguments.length)return this.options[i]===e?null:this.options[i];r[i]=s}return this._setOptions(r),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return this.options[t]=e,"disabled"===t&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!e).attr("aria-disabled",e),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var o,a=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=o=t(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,o=this.widget()),t.each(n,function(n,r){function h(){return i||a.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof r?a[r]:r).apply(a,arguments):e}"string"!=typeof r&&(h.guid=r.guid=r.guid||h.guid||t.guid++);var l=n.match(/^(\w+)\s*(.*)$/),c=l[1]+a.eventNamespace,u=l[2];u?o.delegate(u,c,h):s.bind(c,h)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(e).undelegate(e)},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){t(e.currentTarget).addClass("ui-state-hover")},mouseleave:function(e){t(e.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){t(e.currentTarget).addClass("ui-state-focus")},focusout:function(e){t(e.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}})})(jQuery);(function(e){var t=0,i={},a={};i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="hide",a.height=a.paddingTop=a.paddingBottom=a.borderTopWidth=a.borderBottomWidth="show",e.widget("ui.accordion",{version:"1.10.4",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e(),content:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("<span>").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),e=this.headers.next().css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),undefined):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t),undefined)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,a=this.headers.length,s=this.headers.index(t.target),n=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:n=this.headers[(s+1)%a];break;case i.LEFT:case i.UP:n=this.headers[(s-1+a)%a];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:n=this.headers[0];break;case i.END:n=this.headers[a-1]}n&&(e(t.target).attr("tabIndex",-1),e(n).attr("tabIndex",0),n.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var i,a=this.options,s=a.heightStyle,n=this.element.parent(),r=this.accordionId="ui-accordion-"+(this.element.attr("id")||++t);this.active=this._findActive(a.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(t){var i=e(this),a=i.attr("id"),s=i.next(),n=s.attr("id");a||(a=r+"-header-"+t,i.attr("id",a)),n||(n=r+"-panel-"+t,s.attr("id",n)),i.attr("aria-controls",n),s.attr("aria-labelledby",a)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(a.event),"fill"===s?(i=n.height(),this.element.siblings(":visible").each(function(){var t=e(this),a=t.css("position");"absolute"!==a&&"fixed"!==a&&(i-=t.outerHeight(!0))}),this.headers.each(function(){i-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(i=0,this.headers.next().each(function(){i=Math.max(i,e(this).css("height","").height())}).height(i))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,a=this.active,s=e(t.currentTarget),n=s[0]===a[0],r=n&&i.collapsible,o=r?e():s.next(),h=a.next(),d={oldHeader:a,oldPanel:h,newHeader:r?e():s,newPanel:o};t.preventDefault(),n&&!i.collapsible||this._trigger("beforeActivate",t,d)===!1||(i.active=r?!1:this.headers.index(s),this.active=n?e():s,this._toggle(d),a.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&a.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),n||(s.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),s.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,a=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=a,this.options.animate?this._animate(i,a,t):(a.hide(),i.show(),this._toggleComplete(t)),a.attr({"aria-hidden":"true"}),a.prev().attr("aria-selected","false"),i.length&&a.length?a.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true",tabIndex:0,"aria-expanded":"true"})},_animate:function(e,t,s){var n,r,o,h=this,d=0,c=e.length&&(!t.length||e.index()<t.index()),l=this.options.animate||{},u=c&&l.down||l,v=function(){h._toggleComplete(s)};return"number"==typeof u&&(o=u),"string"==typeof u&&(r=u),r=r||u.easing||l.easing,o=o||u.duration||l.duration,t.length?e.length?(n=e.show().outerHeight(),t.animate(i,{duration:o,easing:r,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(a,{duration:o,easing:r,complete:v,step:function(e,i){i.now=Math.round(e),"height"!==i.prop?d+=i.now:"content"!==h.options.heightStyle&&(i.now=Math.round(n-t.outerHeight()-d),d=0)}}),undefined):t.animate(i,o,r,v):e.animate(a,o,r,v)},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger("activate",null,e)}})})(jQuery);
\ No newline at end of file
diff --git a/xdocs/js/jquery.colorbox.js b/xdocs/js/jquery.colorbox.js
new file mode 100644
index 0000000..255a3aa
--- /dev/null
+++ b/xdocs/js/jquery.colorbox.js
@@ -0,0 +1,1085 @@
+/*!
+	Colorbox v1.5.5 - 2014-03-13
+	jQuery lightbox and modal window plugin
+	(c) 2014 Jack Moore - http://www.jacklmoore.com/colorbox
+	license: http://www.opensource.org/licenses/mit-license.php
+*/
+(function ($, document, window) {
+	var
+	// Default settings object.
+	// See http://jacklmoore.com/colorbox for details.
+	defaults = {
+		// data sources
+		html: false,
+		photo: false,
+		iframe: false,
+		inline: false,
+
+		// behavior and appearance
+		transition: "elastic",
+		speed: 300,
+		fadeOut: 300,
+		width: false,
+		initialWidth: "600",
+		innerWidth: false,
+		maxWidth: false,
+		height: false,
+		initialHeight: "450",
+		innerHeight: false,
+		maxHeight: false,
+		scalePhotos: true,
+		scrolling: true,
+		opacity: 0.9,
+		preloading: true,
+		className: false,
+		overlayClose: true,
+		escKey: true,
+		arrowKey: true,
+		top: false,
+		bottom: false,
+		left: false,
+		right: false,
+		fixed: false,
+		data: undefined,
+		closeButton: true,
+		fastIframe: true,
+		open: false,
+		reposition: true,
+		loop: true,
+		slideshow: false,
+		slideshowAuto: true,
+		slideshowSpeed: 2500,
+		slideshowStart: "start slideshow",
+		slideshowStop: "stop slideshow",
+		photoRegex: /\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\?).*)?$/i,
+
+		// alternate image paths for high-res displays
+		retinaImage: false,
+		retinaUrl: false,
+		retinaSuffix: '@2x.$1',
+
+		// internationalization
+		current: "image {current} of {total}",
+		previous: "previous",
+		next: "next",
+		close: "close",
+		xhrError: "This content failed to load.",
+		imgError: "This image failed to load.",
+
+		// accessbility
+		returnFocus: true,
+		trapFocus: true,
+
+		// callbacks
+		onOpen: false,
+		onLoad: false,
+		onComplete: false,
+		onCleanup: false,
+		onClosed: false,
+
+		rel: function() {
+			return this.rel;
+		},
+		href: function() {
+			// Using .attr() so that the href can also be used to provide a selector for inline content
+			return $(this).attr('href');
+		},
+		title: function() {
+			return this.title;
+		}
+	},
+
+
+	// Abstracting the HTML and event identifiers for easy rebranding
+	colorbox = 'colorbox',
+	prefix = 'cbox',
+	boxElement = prefix + 'Element',
+	
+	// Events
+	event_open = prefix + '_open',
+	event_load = prefix + '_load',
+	event_complete = prefix + '_complete',
+	event_cleanup = prefix + '_cleanup',
+	event_closed = prefix + '_closed',
+	event_purge = prefix + '_purge',
+
+	// Cached jQuery Object Variables
+	$overlay,
+	$box,
+	$wrap,
+	$content,
+	$topBorder,
+	$leftBorder,
+	$rightBorder,
+	$bottomBorder,
+	$related,
+	$window,
+	$loaded,
+	$loadingBay,
+	$loadingOverlay,
+	$title,
+	$current,
+	$slideshow,
+	$next,
+	$prev,
+	$close,
+	$groupControls,
+	$events = $('<a/>'), // $({}) would be prefered, but there is an issue with jQuery 1.4.2
+	
+	// Variables for cached values or use across multiple functions
+	settings,
+	interfaceHeight,
+	interfaceWidth,
+	loadedHeight,
+	loadedWidth,
+	index,
+	photo,
+	open,
+	active,
+	closing,
+	loadingTimer,
+	publicMethod,
+	div = "div",
+	requests = 0,
+	previousCSS = {},
+	init;
+
+	// ****************
+	// HELPER FUNCTIONS
+	// ****************
+	
+	// Convenience function for creating new jQuery objects
+	function $tag(tag, id, css) {
+		var element = document.createElement(tag);
+
+		if (id) {
+			element.id = prefix + id;
+		}
+
+		if (css) {
+			element.style.cssText = css;
+		}
+
+		return $(element);
+	}
+	
+	// Get the window height using innerHeight when available to avoid an issue with iOS
+	// http://bugs.jquery.com/ticket/6724
+	function winheight() {
+		return window.innerHeight ? window.innerHeight : $(window).height();
+	}
+
+	function Settings(element, options) {
+		if (options !== Object(options)) {
+			options = {};
+		}
+
+		this.cache = {};
+		this.el = element;
+
+		this.value = function(key) {
+			var dataAttr;
+
+			if (this.cache[key] === undefined) {
+				dataAttr = $(this.el).attr('data-cbox-'+key);
+
+				if (dataAttr !== undefined) {
+					this.cache[key] = dataAttr;
+				} else if (options[key] !== undefined) {
+					this.cache[key] = options[key];
+				} else if (defaults[key] !== undefined) {
+					this.cache[key] = defaults[key];
+				}
+			}
+
+			return this.cache[key];
+		};
+
+		this.get = function(key) {
+			var value = this.value(key);
+			return $.isFunction(value) ? value.call(this.el, this) : value;
+		};
+	}
+
+	// Determine the next and previous members in a group.
+	function getIndex(increment) {
+		var
+		max = $related.length,
+		newIndex = (index + increment) % max;
+		
+		return (newIndex < 0) ? max + newIndex : newIndex;
+	}
+
+	// Convert '%' and 'px' values to integers
+	function setSize(size, dimension) {
+		return Math.round((/%/.test(size) ? ((dimension === 'x' ? $window.width() : winheight()) / 100) : 1) * parseInt(size, 10));
+	}
+	
+	// Checks an href to see if it is a photo.
+	// There is a force photo option (photo: true) for hrefs that cannot be matched by the regex.
+	function isImage(settings, url) {
+		return settings.get('photo') || settings.get('photoRegex').test(url);
+	}
+
+	function retinaUrl(settings, url) {
+		return settings.get('retinaUrl') && window.devicePixelRatio > 1 ? url.replace(settings.get('photoRegex'), settings.get('retinaSuffix')) : url;
+	}
+
+	function trapFocus(e) {
+		if ('contains' in $box[0] && !$box[0].contains(e.target) && e.target !== $overlay[0]) {
+			e.stopPropagation();
+			$box.focus();
+		}
+	}
+
+	function setClass(str) {
+		if (setClass.str !== str) {
+			$box.add($overlay).removeClass(setClass.str).addClass(str);
+			setClass.str = str;
+		}
+	}
+
+	function getRelated() {
+		index = 0;
+		
+		if (rel && rel !== 'nofollow') {
+			$related = $('.' + boxElement).filter(function () {
+				var options = $.data(this, colorbox);
+				var settings = new Settings(this, options);
+				return (settings.get('rel') === rel);
+			});
+			index = $related.index(settings.el);
+			
+			// Check direct calls to Colorbox.
+			if (index === -1) {
+				$related = $related.add(settings.el);
+				index = $related.length - 1;
+			}
+		} else {
+			$related = $(settings.el);
+		}
+	}
+
+	function trigger(event) {
+		// for external use
+		$(document).trigger(event);
+		// for internal use
+		$events.triggerHandler(event);
+	}
+
+	var slideshow = (function(){
+		var active,
+			className = prefix + "Slideshow_",
+			click = "click." + prefix,
+			timeOut;
+
+		function clear () {
+			clearTimeout(timeOut);
+		}
+
+		function set() {
+			if (settings.get('loop') || $related[index + 1]) {
+				clear();
+				timeOut = setTimeout(publicMethod.next, settings.get('slideshowSpeed'));
+			}
+		}
+
+		function start() {
+			$slideshow
+				.html(settings.get('slideshowStop'))
+				.unbind(click)
+				.one(click, stop);
+
+			$events
+				.bind(event_complete, set)
+				.bind(event_load, clear);
+
+			$box.removeClass(className + "off").addClass(className + "on");
+		}
+
+		function stop() {
+			clear();
+			
+			$events
+				.unbind(event_complete, set)
+				.unbind(event_load, clear);
+
+			$slideshow
+				.html(settings.get('slideshowStart'))
+				.unbind(click)
+				.one(click, function () {
+					publicMethod.next();
+					start();
+				});
+
+			$box.removeClass(className + "on").addClass(className + "off");
+		}
+
+		function reset() {
+			active = false;
+			$slideshow.hide();
+			clear();
+			$events
+				.unbind(event_complete, set)
+				.unbind(event_load, clear);
+			$box.removeClass(className + "off " + className + "on");
+		}
+
+		return function(){
+			if (active) {
+				if (!settings.get('slideshow')) {
+					$events.unbind(event_cleanup, reset);
+					reset();
+				}
+			} else {
+				if (settings.get('slideshow') && $related[1]) {
+					active = true;
+					$events.one(event_cleanup, reset);
+					if (settings.get('slideshowAuto')) {
+						start();
+					} else {
+						stop();
+					}
+					$slideshow.show();
+				}
+			}
+		};
+
+	}());
+
+
+	function launch(element) {
+		var options;
+
+		if (!closing) {
+
+			options = $(element).data('colorbox');
+
+			settings = new Settings(element, options);
+
+			rel = settings.get('rel');
+			
+			getRelated();
+
+			if (!open) {
+				open = active = true; // Prevents the page-change action from queuing up if the visitor holds down the left or right keys.
+
+				setClass(settings.get('className'));
+				
+				// Show colorbox so the sizes can be calculated in older versions of jQuery
+				$box.css({visibility:'hidden', display:'block', opacity:''});
+				
+				$loaded = $tag(div, 'LoadedContent', 'width:0; height:0; overflow:hidden; visibility:hidden');
+				$content.css({width:'', height:''}).append($loaded);
+
+				// Cache values needed for size calculations
+				interfaceHeight = $topBorder.height() + $bottomBorder.height() + $content.outerHeight(true) - $content.height();
+				interfaceWidth = $leftBorder.width() + $rightBorder.width() + $content.outerWidth(true) - $content.width();
+				loadedHeight = $loaded.outerHeight(true);
+				loadedWidth = $loaded.outerWidth(true);
+
+				// Opens inital empty Colorbox prior to content being loaded.
+				settings.w = setSize(settings.get('initialWidth'), 'x');
+				settings.h = setSize(settings.get('initialHeight'), 'y');
+				$loaded.css({width:'', height:settings.h});
+				publicMethod.position();
+
+				trigger(event_open);
+				settings.get('onOpen');
+
+				$groupControls.add($title).hide();
+
+				$box.focus();
+				
+				if (settings.get('trapFocus')) {
+					// Confine focus to the modal
+					// Uses event capturing that is not supported in IE8-
+					if (document.addEventListener) {
+
+						document.addEventListener('focus', trapFocus, true);
+						
+						$events.one(event_closed, function () {
+							document.removeEventListener('focus', trapFocus, true);
+						});
+					}
+				}
+
+				// Return focus on closing
+				if (settings.get('returnFocus')) {
+					$events.one(event_closed, function () {
+						$(settings.el).focus();
+					});
+				}
+			}
+
+			$overlay.css({
+				opacity: parseFloat(settings.get('opacity')) || '',
+				cursor: settings.get('overlayClose') ? 'pointer' : '',
+				visibility: 'visible'
+			}).show();
+			
+			if (settings.get('closeButton')) {
+				$close.html(settings.get('close')).appendTo($content);
+			} else {
+				$close.appendTo('<div/>'); // replace with .detach() when dropping jQuery < 1.4
+			}
+
+			load();
+		}
+	}
+
+	// Colorbox's markup needs to be added to the DOM prior to being called
+	// so that the browser will go ahead and load the CSS background images.
+	function appendHTML() {
+		if (!$box && document.body) {
+			init = false;
+			$window = $(window);
+			$box = $tag(div).attr({
+				id: colorbox,
+				'class': $.support.opacity === false ? prefix + 'IE' : '', // class for optional IE8 & lower targeted CSS.
+				role: 'dialog',
+				tabindex: '-1'
+			}).hide();
+			$overlay = $tag(div, "Overlay").hide();
+			$loadingOverlay = $([$tag(div, "LoadingOverlay")[0],$tag(div, "LoadingGraphic")[0]]);
+			$wrap = $tag(div, "Wrapper");
+			$content = $tag(div, "Content").append(
+				$title = $tag(div, "Title"),
+				$current = $tag(div, "Current"),
+				$prev = $('<button type="button"/>').attr({id:prefix+'Previous'}),
+				$next = $('<button type="button"/>').attr({id:prefix+'Next'}),
+				$slideshow = $tag('button', "Slideshow"),
+				$loadingOverlay
+			);
+
+			$close = $('<button type="button"/>').attr({id:prefix+'Close'});
+			
+			$wrap.append( // The 3x3 Grid that makes up Colorbox
+				$tag(div).append(
+					$tag(div, "TopLeft"),
+					$topBorder = $tag(div, "TopCenter"),
+					$tag(div, "TopRight")
+				),
+				$tag(div, false, 'clear:left').append(
+					$leftBorder = $tag(div, "MiddleLeft"),
+					$content,
+					$rightBorder = $tag(div, "MiddleRight")
+				),
+				$tag(div, false, 'clear:left').append(
+					$tag(div, "BottomLeft"),
+					$bottomBorder = $tag(div, "BottomCenter"),
+					$tag(div, "BottomRight")
+				)
+			).find('div div').css({'float': 'left'});
+			
+			$loadingBay = $tag(div, false, 'position:absolute; width:9999px; visibility:hidden; display:none; max-width:none;');
+			
+			$groupControls = $next.add($prev).add($current).add($slideshow);
+
+			$(document.body).append($overlay, $box.append($wrap, $loadingBay));
+		}
+	}
+
+	// Add Colorbox's event bindings
+	function addBindings() {
+		function clickHandler(e) {
+			// ignore non-left-mouse-clicks and clicks modified with ctrl / command, shift, or alt.
+			// See: http://jacklmoore.com/notes/click-events/
+			if (!(e.which > 1 || e.shiftKey || e.altKey || e.metaKey || e.ctrlKey)) {
+				e.preventDefault();
+				launch(this);
+			}
+		}
+
+		if ($box) {
+			if (!init) {
+				init = true;
+
+				// Anonymous functions here keep the public method from being cached, thereby allowing them to be redefined on the fly.
+				$next.click(function () {
+					publicMethod.next();
+				});
+				$prev.click(function () {
+					publicMethod.prev();
+				});
+				$close.click(function () {
+					publicMethod.close();
+				});
+				$overlay.click(function () {
+					if (settings.get('overlayClose')) {
+						publicMethod.close();
+					}
+				});
+				
+				// Key Bindings
+				$(document).bind('keydown.' + prefix, function (e) {
+					var key = e.keyCode;
+					if (open && settings.get('escKey') && key === 27) {
+						e.preventDefault();
+						publicMethod.close();
+					}
+					if (open && settings.get('arrowKey') && $related[1] && !e.altKey) {
+						if (key === 37) {
+							e.preventDefault();
+							$prev.click();
+						} else if (key === 39) {
+							e.preventDefault();
+							$next.click();
+						}
+					}
+				});
+
+				if ($.isFunction($.fn.on)) {
+					// For jQuery 1.7+
+					$(document).on('click.'+prefix, '.'+boxElement, clickHandler);
+				} else {
+					// For jQuery 1.3.x -> 1.6.x
+					// This code is never reached in jQuery 1.9, so do not contact me about 'live' being removed.
+					// This is not here for jQuery 1.9, it's here for legacy users.
+					$('.'+boxElement).live('click.'+prefix, clickHandler);
+				}
+			}
+			return true;
+		}
+		return false;
+	}
+
+	// Don't do anything if Colorbox already exists.
+	if ($.colorbox) {
+		return;
+	}
+
+	// Append the HTML when the DOM loads
+	$(appendHTML);
+
+
+	// ****************
+	// PUBLIC FUNCTIONS
+	// Usage format: $.colorbox.close();
+	// Usage from within an iframe: parent.jQuery.colorbox.close();
+	// ****************
+	
+	publicMethod = $.fn[colorbox] = $[colorbox] = function (options, callback) {
+		var settings;
+		var $obj = this;
+
+		options = options || {};
+
+		if ($.isFunction($obj)) { // assume a call to $.colorbox
+			$obj = $('<a/>');
+			options.open = true;
+		} else if (!$obj[0]) { // colorbox being applied to empty collection
+			return $obj;
+		}
+
+
+		if (!$obj[0]) { // colorbox being applied to empty collection
+			return $obj;
+		}
+		
+		appendHTML();
+
+		if (addBindings()) {
+
+			if (callback) {
+				options.onComplete = callback;
+			}
+
+			$obj.each(function () {
+				var old = $.data(this, colorbox) || {};
+				$.data(this, colorbox, $.extend(old, options));
+			}).addClass(boxElement);
+
+			settings = new Settings($obj[0], options);
+			
+			if (settings.get('open')) {
+				launch($obj[0]);
+			}
+		}
+		
+		return $obj;
+	};
+
+	publicMethod.position = function (speed, loadedCallback) {
+		var
+		css,
+		top = 0,
+		left = 0,
+		offset = $box.offset(),
+		scrollTop,
+		scrollLeft;
+		
+		$window.unbind('resize.' + prefix);
+
+		// remove the modal so that it doesn't influence the document width/height
+		$box.css({top: -9e4, left: -9e4});
+
+		scrollTop = $window.scrollTop();
+		scrollLeft = $window.scrollLeft();
+
+		if (settings.get('fixed')) {
+			offset.top -= scrollTop;
+			offset.left -= scrollLeft;
+			$box.css({position: 'fixed'});
+		} else {
+			top = scrollTop;
+			left = scrollLeft;
+			$box.css({position: 'absolute'});
+		}
+
+		// keeps the top and left positions within the browser's viewport.
+		if (settings.get('right') !== false) {
+			left += Math.max($window.width() - settings.w - loadedWidth - interfaceWidth - setSize(settings.get('right'), 'x'), 0);
+		} else if (settings.get('left') !== false) {
+			left += setSize(settings.get('left'), 'x');
+		} else {
+			left += Math.round(Math.max($window.width() - settings.w - loadedWidth - interfaceWidth, 0) / 2);
+		}
+		
+		if (settings.get('bottom') !== false) {
+			top += Math.max(winheight() - settings.h - loadedHeight - interfaceHeight - setSize(settings.get('bottom'), 'y'), 0);
+		} else if (settings.get('top') !== false) {
+			top += setSize(settings.get('top'), 'y');
+		} else {
+			top += Math.round(Math.max(winheight() - settings.h - loadedHeight - interfaceHeight, 0) / 2);
+		}
+
+		$box.css({top: offset.top, left: offset.left, visibility:'visible'});
+		
+		// this gives the wrapper plenty of breathing room so it's floated contents can move around smoothly,
+		// but it has to be shrank down around the size of div#colorbox when it's done.  If not,
+		// it can invoke an obscure IE bug when using iframes.
+		$wrap[0].style.width = $wrap[0].style.height = "9999px";
+		
+		function modalDimensions() {
+			$topBorder[0].style.width = $bottomBorder[0].style.width = $content[0].style.width = (parseInt($box[0].style.width,10) - interfaceWidth)+'px';
+			$content[0].style.height = $leftBorder[0].style.height = $rightBorder[0].style.height = (parseInt($box[0].style.height,10) - interfaceHeight)+'px';
+		}
+
+		css = {width: settings.w + loadedWidth + interfaceWidth, height: settings.h + loadedHeight + interfaceHeight, top: top, left: left};
+
+		// setting the speed to 0 if the content hasn't changed size or position
+		if (speed) {
+			var tempSpeed = 0;
+			$.each(css, function(i){
+				if (css[i] !== previousCSS[i]) {
+					tempSpeed = speed;
+					return;
+				}
+			});
+			speed = tempSpeed;
+		}
+
+		previousCSS = css;
+
+		if (!speed) {
+			$box.css(css);
+		}
+
+		$box.dequeue().animate(css, {
+			duration: speed || 0,
+			complete: function () {
+				modalDimensions();
+				
+				active = false;
+				
+				// shrink the wrapper down to exactly the size of colorbox to avoid a bug in IE's iframe implementation.
+				$wrap[0].style.width = (settings.w + loadedWidth + interfaceWidth) + "px";
+				$wrap[0].style.height = (settings.h + loadedHeight + interfaceHeight) + "px";
+				
+				if (settings.get('reposition')) {
+					setTimeout(function () {  // small delay before binding onresize due to an IE8 bug.
+						$window.bind('resize.' + prefix, publicMethod.position);
+					}, 1);
+				}
+
+				if (loadedCallback) {
+					loadedCallback();
+				}
+			},
+			step: modalDimensions
+		});
+	};
+
+	publicMethod.resize = function (options) {
+		var scrolltop;
+		
+		if (open) {
+			options = options || {};
+			
+			if (options.width) {
+				settings.w = setSize(options.width, 'x') - loadedWidth - interfaceWidth;
+			}
+
+			if (options.innerWidth) {
+				settings.w = setSize(options.innerWidth, 'x');
+			}
+
+			$loaded.css({width: settings.w});
+			
+			if (options.height) {
+				settings.h = setSize(options.height, 'y') - loadedHeight - interfaceHeight;
+			}
+
+			if (options.innerHeight) {
+				settings.h = setSize(options.innerHeight, 'y');
+			}
+
+			if (!options.innerHeight && !options.height) {
+				scrolltop = $loaded.scrollTop();
+				$loaded.css({height: "auto"});
+				settings.h = $loaded.height();
+			}
+
+			$loaded.css({height: settings.h});
+
+			if(scrolltop) {
+				$loaded.scrollTop(scrolltop);
+			}
+			
+			publicMethod.position(settings.get('transition') === "none" ? 0 : settings.get('speed'));
+		}
+	};
+
+	publicMethod.prep = function (object) {
+		if (!open) {
+			return;
+		}
+		
+		var callback, speed = settings.get('transition') === "none" ? 0 : settings.get('speed');
+
+		$loaded.remove();
+
+		$loaded = $tag(div, 'LoadedContent').append(object);
+		
+		function getWidth() {
+			settings.w = settings.w || $loaded.width();
+			settings.w = settings.mw && settings.mw < settings.w ? settings.mw : settings.w;
+			return settings.w;
+		}
+		function getHeight() {
+			settings.h = settings.h || $loaded.height();
+			settings.h = settings.mh && settings.mh < settings.h ? settings.mh : settings.h;
+			return settings.h;
+		}
+		
+		$loaded.hide()
+		.appendTo($loadingBay.show())// content has to be appended to the DOM for accurate size calculations.
+		.css({width: getWidth(), overflow: settings.get('scrolling') ? 'auto' : 'hidden'})
+		.css({height: getHeight()})// sets the height independently from the width in case the new width influences the value of height.
+		.prependTo($content);
+		
+		$loadingBay.hide();
+		
+		// floating the IMG removes the bottom line-height and fixed a problem where IE miscalculates the width of the parent element as 100% of the document width.
+		
+		$(photo).css({'float': 'none'});
+
+		setClass(settings.get('className'));
+
+		callback = function () {
+			var total = $related.length,
+				iframe,
+				complete;
+			
+			if (!open) {
+				return;
+			}
+			
+			function removeFilter() { // Needed for IE8 in versions of jQuery prior to 1.7.2
+				if ($.support.opacity === false) {
+					$box[0].style.removeAttribute('filter');
+				}
+			}
+			
+			complete = function () {
+				clearTimeout(loadingTimer);
+				$loadingOverlay.hide();
+				trigger(event_complete);
+				settings.get('onComplete');
+			};
+
+			
+			$title.html(settings.get('title')).show();
+			$loaded.show();
+			
+			if (total > 1) { // handle grouping
+				if (typeof settings.get('current') === "string") {
+					$current.html(settings.get('current').replace('{current}', index + 1).replace('{total}', total)).show();
+				}
+				
+				$next[(settings.get('loop') || index < total - 1) ? "show" : "hide"]().html(settings.get('next'));
+				$prev[(settings.get('loop') || index) ? "show" : "hide"]().html(settings.get('previous'));
+				
+				slideshow();
+				
+				// Preloads images within a rel group
+				if (settings.get('preloading')) {
+					$.each([getIndex(-1), getIndex(1)], function(){
+						var img,
+							i = $related[this],
+							settings = new Settings(i, $.data(i, colorbox)),
+							src = settings.get('href');
+
+						if (src && isImage(settings, src)) {
+							src = retinaUrl(settings, src);
+							img = document.createElement('img');
+							img.src = src;
+						}
+					});
+				}
+			} else {
+				$groupControls.hide();
+			}
+			
+			if (settings.get('iframe')) {
+				iframe = document.createElement('iframe');
+				
+				if ('frameBorder' in iframe) {
+					iframe.frameBorder = 0;
+				}
+				
+				if ('allowTransparency' in iframe) {
+					iframe.allowTransparency = "true";
+				}
+
+				if (!settings.get('scrolling')) {
+					iframe.scrolling = "no";
+				}
+				
+				$(iframe)
+					.attr({
+						src: settings.get('href'),
+						name: (new Date()).getTime(), // give the iframe a unique name to prevent caching
+						'class': prefix + 'Iframe',
+						allowFullScreen : true // allow HTML5 video to go fullscreen
+					})
+					.one('load', complete)
+					.appendTo($loaded);
+				
+				$events.one(event_purge, function () {
+					iframe.src = "//about:blank";
+				});
+
+				if (settings.get('fastIframe')) {
+					$(iframe).trigger('load');
+				}
+			} else {
+				complete();
+			}
+			
+			if (settings.get('transition') === 'fade') {
+				$box.fadeTo(speed, 1, removeFilter);
+			} else {
+				removeFilter();
+			}
+		};
+		
+		if (settings.get('transition') === 'fade') {
+			$box.fadeTo(speed, 0, function () {
+				publicMethod.position(0, callback);
+			});
+		} else {
+			publicMethod.position(speed, callback);
+		}
+	};
+
+	function load () {
+		var href, setResize, prep = publicMethod.prep, $inline, request = ++requests;
+		
+		active = true;
+		
+		photo = false;
+		
+		trigger(event_purge);
+		trigger(event_load);
+		settings.get('onLoad');
+		
+		settings.h = settings.get('height') ?
+				setSize(settings.get('height'), 'y') - loadedHeight - interfaceHeight :
+				settings.get('innerHeight') && setSize(settings.get('innerHeight'), 'y');
+		
+		settings.w = settings.get('width') ?
+				setSize(settings.get('width'), 'x') - loadedWidth - interfaceWidth :
+				settings.get('innerWidth') && setSize(settings.get('innerWidth'), 'x');
+		
+		// Sets the minimum dimensions for use in image scaling
+		settings.mw = settings.w;
+		settings.mh = settings.h;
+		
+		// Re-evaluate the minimum width and height based on maxWidth and maxHeight values.
+		// If the width or height exceed the maxWidth or maxHeight, use the maximum values instead.
+		if (settings.get('maxWidth')) {
+			settings.mw = setSize(settings.get('maxWidth'), 'x') - loadedWidth - interfaceWidth;
+			settings.mw = settings.w && settings.w < settings.mw ? settings.w : settings.mw;
+		}
+		if (settings.get('maxHeight')) {
+			settings.mh = setSize(settings.get('maxHeight'), 'y') - loadedHeight - interfaceHeight;
+			settings.mh = settings.h && settings.h < settings.mh ? settings.h : settings.mh;
+		}
+		
+		href = settings.get('href');
+		
+		loadingTimer = setTimeout(function () {
+			$loadingOverlay.show();
+		}, 100);
+		
+		if (settings.get('inline')) {
+			// Inserts an empty placeholder where inline content is being pulled from.
+			// An event is bound to put inline content back when Colorbox closes or loads new content.
+			$inline = $tag(div).hide().insertBefore($(href)[0]);
+
+			$events.one(event_purge, function () {
+				$inline.replaceWith($loaded.children());
+			});
+
+			prep($(href));
+		} else if (settings.get('iframe')) {
+			// IFrame element won't be added to the DOM until it is ready to be displayed,
+			// to avoid problems with DOM-ready JS that might be trying to run in that iframe.
+			prep(" ");
+		} else if (settings.get('html')) {
+			prep(settings.get('html'));
+		} else if (isImage(settings, href)) {
+
+			href = retinaUrl(settings, href);
+
+			photo = document.createElement('img');
+
+			$(photo)
+			.addClass(prefix + 'Photo')
+			.bind('error',function () {
+				prep($tag(div, 'Error').html(settings.get('imgError')));
+			})
+			.one('load', function () {
+				var percent;
+
+				if (request !== requests) {
+					return;
+				}
+
+				$.each(['alt', 'longdesc', 'aria-describedby'], function(i,val){
+					var attr = $(settings.el).attr(val) || $(settings.el).attr('data-'+val);
+					if (attr) {
+						photo.setAttribute(val, attr);
+					}
+				});
+
+				if (settings.get('retinaImage') && window.devicePixelRatio > 1) {
+					photo.height = photo.height / window.devicePixelRatio;
+					photo.width = photo.width / window.devicePixelRatio;
+				}
+
+				if (settings.get('scalePhotos')) {
+					setResize = function () {
+						photo.height -= photo.height * percent;
+						photo.width -= photo.width * percent;
+					};
+					if (settings.mw && photo.width > settings.mw) {
+						percent = (photo.width - settings.mw) / photo.width;
+						setResize();
+					}
+					if (settings.mh && photo.height > settings.mh) {
+						percent = (photo.height - settings.mh) / photo.height;
+						setResize();
+					}
+				}
+				
+				if (settings.h) {
+					photo.style.marginTop = Math.max(settings.mh - photo.height, 0) / 2 + 'px';
+				}
+				
+				if ($related[1] && (settings.get('loop') || $related[index + 1])) {
+					photo.style.cursor = 'pointer';
+					photo.onclick = function () {
+						publicMethod.next();
+					};
+				}
+
+				photo.style.width = photo.width + 'px';
+				photo.style.height = photo.height + 'px';
+
+				setTimeout(function () { // A pause because Chrome will sometimes report a 0 by 0 size otherwise.
+					prep(photo);
+				}, 1);
+			});
+			
+			setTimeout(function () { // A pause because Opera 10.6+ will sometimes not run the onload function otherwise.
+				photo.src = href;
+			}, 1);
+		} else if (href) {
+			$loadingBay.load(href, settings.get('data'), function (data, status) {
+				if (request === requests) {
+					prep(status === 'error' ? $tag(div, 'Error').html(settings.get('xhrError')) : $(this).contents());
+				}
+			});
+		}
+	}
+		
+	// Navigates to the next page/image in a set.
+	publicMethod.next = function () {
+		if (!active && $related[1] && (settings.get('loop') || $related[index + 1])) {
+			index = getIndex(1);
+			launch($related[index]);
+		}
+	};
+	
+	publicMethod.prev = function () {
+		if (!active && $related[1] && (settings.get('loop') || index)) {
+			index = getIndex(-1);
+			launch($related[index]);
+		}
+	};
+
+	// Note: to use this within an iframe use the following format: parent.jQuery.colorbox.close();
+	publicMethod.close = function () {
+		if (open && !closing) {
+			
+			closing = true;
+			open = false;
+			trigger(event_cleanup);
+			settings.get('onCleanup');
+			$window.unbind('.' + prefix);
+			$overlay.fadeTo(settings.get('fadeOut') || 0, 0);
+			
+			$box.stop().fadeTo(settings.get('fadeOut') || 0, 0, function () {
+				$box.hide();
+				$overlay.hide();
+				trigger(event_purge);
+				$loaded.remove();
+				
+				setTimeout(function () {
+					closing = false;
+					trigger(event_closed);
+					settings.get('onClosed');
+				}, 1);
+			});
+		}
+	};
+
+	// Removes changes Colorbox made to the document, but does not remove the plugin.
+	publicMethod.remove = function () {
+		if (!$box) { return; }
+
+		$box.stop();
+		$.colorbox.close();
+		$box.stop().remove();
+		$overlay.remove();
+		closing = false;
+		$box = null;
+		$('.' + boxElement)
+			.removeData(colorbox)
+			.removeClass(boxElement);
+
+		$(document).unbind('click.'+prefix);
+	};
+
+	// A method for fetching the current element Colorbox is referencing.
+	// returns a jQuery object.
+	publicMethod.element = function () {
+		return $(settings.el);
+	};
+
+	publicMethod.settings = defaults;
+
+}(jQuery, document, window));
diff --git a/xdocs/license.xml b/xdocs/license.xml
new file mode 100644
index 0000000..7634d20
--- /dev/null
+++ b/xdocs/license.xml
@@ -0,0 +1,225 @@
+<?xml version="1.0"?>
+
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+<properties>
+<title>License</title>
+<author email="sebawagner@apache.org">
+ Podling Documentation Team</author>
+</properties>
+
+<body>
+<section name="Apache License v2.0">
+
+<source test=""><![CDATA[
+
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+ ]]></source>
+
+</section>
+</body>
+</document>
+
diff --git a/xdocs/mail-lists.xml b/xdocs/mail-lists.xml
new file mode 100644
index 0000000..ee90fb3
--- /dev/null
+++ b/xdocs/mail-lists.xml
@@ -0,0 +1,199 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Mailing Lists</title>
+		<author email="sebawagner@apache.org">
+			Sebastian Wagner
+		</author>
+	</properties>
+
+	<body>
+		<section name="Apache OpenMeetings Mailing Lists">
+
+			<p>
+				There are currently 4 publicly available mailing lists for OpenMeetings.
+			</p>
+			<p>
+				The commits list is for notification of commits to the OpenMeetings
+				repository.
+			</p>
+			<p>
+				The dev list is for internal discussion among the OpenMeetings
+				developers. It is
+				open to the public if you are interested in seeing how the sausage is
+				made.
+			</p>
+			<p>
+				<b>Note: </b>If your email bounces with status messages like "Delivery Status Notification" it is 
+				likely that you have send your mail as HTML mail. Apache does not like sending HTML emails, see:
+				<br/> 
+				<a href="http://www.apache.org/dev/contrib-email-tips.html#do-not-send-html-mail" target="_BLANK" rel="nofollow">http://www.apache.org/dev/contrib-email-tips.html#do-not-send-html-mail</a>
+			</p>
+			
+			<p>
+				You can search the entire mailing list very easy by using markmail.com, by using the term 
+				"openmeetings" plus your search. Try yourself: <br/>
+				<a href="http://markmail.org/search/?q=openmeetings" target="_BLANK" rel="nofollow">http://markmail.org/search/?q=openmeetings</a>
+			</p>
+
+			<table>
+				<tr>
+					<td>
+						<p>
+							<strong>User List</strong>
+							:
+							<a href="mailto:user@openmeetings.apache.org">
+								user@openmeetings.apache.org
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a class="external" rel="nofollow"
+								href="mailto:user-subscribe@openmeetings.apache.org">
+								Subscribe
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a class="external" rel="nofollow"
+								href="mailto:user-unsubscribe@openmeetings.apache.org">
+								Unsubscribe
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a
+								href="http://mail-archives.apache.org/mod_mbox/openmeetings-user/">
+								Archive
+							</a>
+						</p>
+					</td>
+				</tr>
+				<tr>
+					<td>
+						<p>
+							<strong>Spanish User List</strong>
+							:
+							<a href="mailto:user-espanol@openmeetings.apache.org">
+								user-espanol@openmeetings.apache.org
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a class="external" rel="nofollow"
+								href="mailto:user-espanol-subscribe@openmeetings.apache.org">
+								Subscribe
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a class="external" rel="nofollow"
+								href="mailto:user-espanol-unsubscribe@openmeetings.apache.org">
+								Unsubscribe
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a
+								href="http://mail-archives.apache.org/mod_mbox/openmeetings-user-espanol/">
+								Archive
+							</a>
+						</p>
+					</td>
+				</tr>
+				<tr>
+					<td>
+						<p>
+							<strong>Commits List</strong>
+							:
+							<a href="mailto:commits@openmeetings.apache.org">
+								commits@openmeetings.apache.org
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a class="external" rel="nofollow"
+								href="mailto:commits-subscribe@openmeetings.apache.org">
+								Subscribe
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a class="external" rel="nofollow"
+								href="mailto:commits-unsubscribe@openmeetings.apache.org">
+								Unsubscribe
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a
+								href="http://mail-archives.apache.org/mod_mbox/openmeetings-commits/">
+								Archive
+							</a>
+						</p>
+					</td>
+				</tr>
+				<tr>
+					<td>
+						<p>
+							<strong>Developer List</strong>
+							:
+							<a href="mailto:dev@openmeetings.apache.org">
+								dev@openmeetings.apache.org
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a class="external" rel="nofollow"
+								href="mailto:dev-subscribe@openmeetings.apache.org">
+								Subscribe
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a class="external" rel="nofollow"
+								href="mailto:dev-unsubscribe@openmeetings.apache.org">
+								Unsubscribe
+							</a>
+						</p>
+					</td>
+					<td>
+						<p>
+							<a
+								href="http://mail-archives.apache.org/mod_mbox/openmeetings-dev">
+								Archive
+							</a>
+						</p>
+					</td>
+				</tr>
+			</table>
+
+		</section>
+	</body>
+</document>
+
diff --git a/xdocs/oauth2.xml b/xdocs/oauth2.xml
new file mode 100644
index 0000000..61aba04
--- /dev/null
+++ b/xdocs/oauth2.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+	<properties>
+		<title>OAuth2 integration</title>
+		<author email="a_horuzhenko@apache.org">OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="OAuth2 integration">
+			<p>You need Apache Openmeetings <strong>version 3.0</strong> to apply this guide!</p>
+			<p>You can manage various OAuth2 servers by opening "Administration => OAuth2". There are already created servers like Facebook or Google. You can use them as example or in production. To add your own servers you need to get their documentation to set necessary attributes.</p>
+		</section>
+		<section name="Attributes">
+			<ul>
+				<li><i>Name</i> - displayed in the login dialog text</li>
+				<li><i>client_id</i> and <i>client_secret</i> - credentials which you got from your oauth2 server.</li>
+				<li><i>Redirect uri</i> - put this value into application settings in the oauth2 server.</li>
+				<li><i>Request key URL</i> - an URL which will be used to request access key.</li>
+				<li><i>Request token URL</i> - an URL which will be used to request access token.</li>
+				<li><i>Request token attributes</i> - attributes for access token request.</li>
+				<li><i>Request info URL</i> - an URL which will be used to request authentication attributes.</li>
+				<li><i>Login param name</i> - login key name to get value from info response.</li>
+				<li><i>Email param name</i> - email key name to get value from info response.</li>
+				<li><i>Firstname param name</i> - firstname key name to get value from info response.</li>
+				<li><i>Lastname param name</i> - lastname key name to get value from info response.</li>
+			</ul>
+			<p>Request attributes (request key url, request token url, request token attributes, request info url) may contain next variables as a part:</p>
+			<ul>
+				<li>{$client_id}</li>
+				<li>{$client_secret}</li>
+				<li>{$redirect_uri}</li>
+				<li>{$code}</li>
+				<li>{$access_token}</li>
+			</ul>
+		</section>
+	</body>
+</document>
diff --git a/xdocs/red5sip-integration_2.0.xml b/xdocs/red5sip-integration_2.0.xml
new file mode 100644
index 0000000..9b88d8d
--- /dev/null
+++ b/xdocs/red5sip-integration_2.0.xml
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>SIP-Transport Integration</title>

+		<author email="timur@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="SIP-Transport Integration">

+			<p>

+				You need minimum version 2.0 of Apache OpenMeetings to apply this guide!

+			</p>

+			<p>

+				Here is instruction how-to set up red5sip transport integration with OpenMeetings on Ubuntu 10.04.

+			</p>

+		</section>

+

+        <section name="Setup Asterisk">

+			<div>

+                Run the commands

+                <blockquote>

+                    <i>

+                    sudo apt-get update<br/>

+                    sudo apt-get install asterisk asterisk-mysql

+                    </i>

+                </blockquote>

+            </div>

+            <div>

+                Ubuntu 10.04 has broken asterisk-mysql version. For other distribution next commands not needed:

+                <blockquote>

+                    <i>

+                        aptitude purge asterisk-mysql

+                        <br/>

+                        cd /tmp

+                        <br/>

+                        apt-get build-dep asterisk-mysql

+                        <br/>

+                        apt-get -b source asterisk-mysql

+                        <br/>

+                        dpkg -i asterisk-mysql_1.6.2.0-1_i386.deb

+                    </i>

+

+                </blockquote>

+            </div>

+            <div>

+                Enable asterisk mysql realtime module:<br/><br/>

+                Add string

+                <blockquote>

+                    <i>load => res_config_mysql.so</i>

+                </blockquote>

+                to the /etc/asterisk/modules.conf into the "modules" section.

+            </div>

+            <div>

+                Configure mysql realtime module:<br/><br/>

+

+                Create file /etc/asterisk/res_mysql.conf and add lines:

+                <blockquote>

+                    <i>[general]

+                        <br/>

+                        dbhost=127.0.0.1

+                        <br/>

+                        dbname=openmeetings

+                        <br/>

+                        dbuser=root

+                        <br/>

+                        dbpass=

+                        <br/>

+                        dbport=3306

+                    </i>

+

+                </blockquote>

+            </div>

+            <div>

+                Add next lines into the /etc/asterisk/extconfig.conf:

+                <blockquote>

+                    <i>[settings]

+                        <br/>

+                        sipusers => mysql,general,sipusers

+                        <br/>

+                        sippeers => mysql,general,sipusers

+                        <br/>

+                        extensions => mysql,general,extensions

+                        <br/>

+                        meetme => mysql,general,meetme

+                    </i>

+

+                </blockquote>

+            </div>

+            <div>

+                Add next lines into the /etc/asterisk/extensions.conf:

+                <blockquote>

+                    <i>[rooms]

+                        <br/>

+                        switch => Realtime/@

+                    </i>

+

+                </blockquote>

+            </div>

+

+            <div>

+                Restart asterisk:

+                <blockquote>

+                    <i>service asterisk restart</i>

+                </blockquote>

+                Insert, for example, SIP user with name 'test':

+                <blockquote>

+                    <i>

+                        INSERT INTO sipusers (allow, context, disallow, host, name, secret) VALUES ('ulaw' , 'rooms', NULL, 'dynamic' , 'test', '12345');

+                    </i>

+                </blockquote>

+            </div>

+		</section>

+

+        <section name="Setup red5sip transport">

+            <div>

+                Download red5sip from<blockquote>http://red5phone.googlecode.com/svn/branches/red5sip</blockquote>

+            </div>

+            <p>

+                Build with Apache Ant

+            </p>

+            <div>

+                Install jsvc:

+                <blockquote>

+                    <i>apt-get install jsvc</i>

+                </blockquote>

+            </div>

+            <div>

+                Insert proper values to the /opt/red5sip/settings.properties

+

+                <blockquote>

+                    <i>red5.host - red5 server address (127.0.0.1)

+                        <br/>

+                        sip.obproxy - asterisk adderss (127.0.0.1)

+                        <br/>

+                        sip.phone - sip phone number (test)

+                        <br/>

+                        sip.authid - sip auth id (test)

+                        <br/>

+                        sip.secret - sip password (12345)

+                        <br/>

+                        sip.realm - sip realm, "asterisk" by default

+                        <br/>

+                        sip.proxy -

+                        <br/>

+                        rooms - ids of openmeetings rooms, can be, for example, 2,3,5,6

+                    </i>

+

+                </blockquote>

+            </div>

+            <div>

+                Add red5sip to autostart:

+                <blockquote>

+                    <i>ln -s /opt/red5sip/red5sip.sh /etc/init.d/red5sip

+                        <br/>

+                        chmod a+x /etc/init.d/red5sip

+                        <br/>

+                        update-rc.d /etc/init.d/red5sip defaults

+                    </i>

+

+                </blockquote>

+            </div>

+            <div>

+                Start openmeetings

+                <blockquote>

+                    <i>service red5 start</i>

+                </blockquote>

+            </div>

+            <div>

+                Start red5sip

+                <blockquote>

+                    <i>service red5sip start</i>

+                </blockquote>

+            </div>

+        </section>

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/red5sip-integration_2.1.xml b/xdocs/red5sip-integration_2.1.xml
new file mode 100644
index 0000000..cbf9b16
--- /dev/null
+++ b/xdocs/red5sip-integration_2.1.xml
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+	<properties>
+		<title>SIP-Transport Integration</title>
+		<author email="solomax@apache.org">OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="SIP-Transport Integration">
+			<p>You need Apache OpenMeetings <strong>version 2.1</strong> to apply this guide!</p>
+			<p>You need Asterisk <strong>version 11</strong> to apply this guide!</p>
+			<p>Here is instruction how-to set up red5sip transport integration with OpenMeetings on Ubuntu 12.10.</p>
+		</section>
+		<section name="Prerequisites">
+			<div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo apt-get update &amp;&amp; sudo apt-get upgrade<br />
+						sudo apt-get install build-essential linux-headers-`uname -r` libxml2-dev libncurses5-dev libsqlite3-dev sqlite3 openssl libssl-dev<br />
+					</i>
+				</blockquote>
+			</div>
+		</section>
+		<section name="ODBC Setup">
+			<div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo apt-get update<br />
+						sudo apt-get install unixODBC unixODBC-dev libmyodbc
+					</i>
+				</blockquote>
+			</div>
+			<div>
+				Set up Asterisk connector:<br /><br />
+				Modify file <tt>/etc/odbc.ini</tt> as follows: (replace USER, PASSWORD and Socket with values relative to your system)
+				<blockquote>
+					<i>
+						[asterisk-connector]<br />
+						Description = MySQL connection to 'openmeetings' database<br />
+						Driver = MySQL<br />
+						Database = openmeetings<br />
+						Server = localhost<br />
+						USER = root<br />
+						PASSWORD =<br />
+						Port = 3306<br />
+						Socket = /var/run/mysqld/mysqld.sock<br />
+					</i>
+				</blockquote><br /><br />
+				Modify file <tt>/etc/odbcinst.ini</tt> as follows: (replace the path to the *.so files below with the real paths on your system)
+				<blockquote>
+					(The path below is for x32 server, x64 version is most probably located at <tt>/usr/lib/x86_64-linux-gnu/odbc</tt>)<br/>
+					<i>
+						[MySQL]<br />
+						Description = ODBC for MySQL<br />
+						Driver = /usr/lib/i386-linux-gnu/odbc/libmyodbc.so<br />
+						Setup = /usr/lib/i386-linux-gnu/odbc/libodbcmyS.so<br />
+						FileUsage = 1<br />
+					</i>
+				</blockquote><br /><br />
+				Run the following command to ensure everything works as expected:
+				<blockquote>
+					<i>echo "select 1" | isql -v asterisk-connector</i>
+				</blockquote>
+			</div>
+		</section>
+		<section name="Building and setting up Asterisk">
+			<div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo mkdir /usr/src/asterisk &amp;&amp; cd /usr/src/asterisk<br />
+						sudo wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-11.2.1.tar.gz<br />
+						sudo tar -xvzf asterisk-11.2.1.tar.gz<br />
+						cd ./asterisk-11.2.1<br />
+						sudo make clean<br />
+						sudo ./configure<br />
+						sudo make<br />
+						sudo make install<br />
+						sudo make samples<br />
+						sudo make config<br />
+						sudo service asterisk start<br />
+					</i>
+				</blockquote>
+			</div>
+		</section>
+		<section name="Configure Asterisk">
+			<div>
+				Enable asterisk ODBC module:<br /><br />
+				Modify "[modules]" section of <tt>/etc/asterisk/modules.conf</tt> as follows:<br />
+				<strong>Add/uncomment the following lines</strong>
+				<blockquote>
+					<i>
+						preload => res_odbc.so<br />
+						preload => res_config_odbc.so<br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Create/update "[asterisk]" section in <tt>/etc/asterisk/res_odbc.conf</tt>:
+				<blockquote>
+					<i>
+						[asterisk]<br />
+						enabled => yes<br />
+						dsn => asterisk-connector<br />
+						pre-connect => yes
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Modify <tt>/etc/asterisk/sip.conf</tt><br />
+				<strong>Add/uncomment the following line</strong>:<br />
+				<blockquote>
+					<i>
+						videosupport=yes<br />
+						rtcachefriends=yes<br />
+					</i>
+				</blockquote>
+				<strong>Increase maxexpiry value to 43200</strong>:<br />
+				<blockquote>
+					<i>
+						maxexpiry=43200<br />
+				        </i>
+				</blockquote>
+				<strong>Add user for the "SIP Transport"</strong>:<br />
+				<blockquote>
+					<i>
+						[red5sip_user]<br />
+						type=friend<br />
+						secret=12345<br />
+						disallow=all<br />
+						allow=ulaw<br />
+						allow=h264<br />
+						host=dynamic<br />
+						nat=force_rport,comedia<br />
+						context=rooms-red5sip<br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Add next lines into the <tt>/etc/asterisk/extconfig.conf</tt>:
+				<blockquote>
+					<i>
+						[settings]<br />
+						sippeers => odbc,asterisk,sipusers<br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Modify <tt>/etc/asterisk/extensions.conf</tt><br />
+				<strong>Add the following section</strong>:<br />
+				<blockquote>
+					<i>
+						[rooms]<br />
+						exten => _400X!,1,GotoIf($[${DB_EXISTS(openmeetings/rooms/${EXTEN})}]?ok:notavail)<br />
+						exten => _400X!,n(ok),SET(PIN=${DB(openmeetings/rooms/${EXTEN})})<br />
+						exten => _400X!,n,Set(CONFBRIDGE(user,template)=sip_user)<br />
+						exten => _400X!,n,Set(CONFBRIDGE(user,pin)=${PIN})<br />
+						exten => _400X!,n(ok),Confbridge(${EXTEN},default_bridge,)<br />
+						exten => _400X!,n,Hangup<br />
+						exten => _400X!,n(notavail),Answer()<br />
+						exten => _400X!,n,Playback(invalid)<br />
+						exten => _400X!,n,Hangup<br />
+						<br />
+						[rooms-originate]<br />
+						exten => _400X!,1,Confbridge(${EXTEN},default_bridge,sip_user)<br />
+						exten => _400X!,n,Hangup<br />
+						<br />
+						[rooms-out]<br />
+						; *****************************************************<br />
+						; Extensions for outgoing calls from Openmeetings room.<br />
+						; *****************************************************<br />
+						<br />
+						[rooms-red5sip]<br />
+						exten => _400X!,1,GotoIf($[${DB_EXISTS(openmeetings/rooms/${EXTEN})}]?ok:notavil)<br />
+						exten => _400X!,n(ok),Confbridge(${EXTEN},default_bridge,red5sip_user)<br />
+						exten => _400X!,n(notavail),Hangup <br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Modify <tt>/etc/asterisk/confbridge.conf</tt><br />
+				<strong>Add/Modify the following secions</strong>:<br />
+				<blockquote>
+					<i>
+						[general]<br />
+						<br />
+						[red5sip_user]<br />
+						type=user<br />
+						marked=yes<br />
+						dsp_drop_silence=yes<br />
+						denoise=true<br />
+						<br />
+						[sip_user]<br />
+						type=user<br />
+						end_marked=yes<br />
+						wait_marked=yes<br />
+						music_on_hold_when_empty=yes<br />
+						dsp_drop_silence=yes<br />
+						denoise=true<br />
+						<br />
+						[default_bridge]<br />
+						type=bridge<br />
+						video_mode=follow_talker<br /> 
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				To enable Asterisk Manager API modify <tt>/etc/asterisk/manager.conf</tt><br />
+				<strong>Add/Modify the following sections</strong>:<br />
+				<blockquote>
+					<i>
+						[general]<br />
+						enabled = yes<br />
+						webenabled = no<br />
+						port = 5038<br />
+						bindaddr = 127.0.0.1<br />
+						<br />
+						[openmeetings]<br />
+						secret = 12345<br />
+						deny=0.0.0.0/0.0.0.0<br />
+						permit=127.0.0.1/255.255.255.0<br />
+						read = all<br />
+						write = all<br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Update Openmeetings with creadentials for Asterisk manager. 
+				Modify <tt>/opt/red5/webapps/openmeetings/WEB-INF/openmeetings-applicationContext.xml</tt><br />
+				find <strong>&lt;bean id="sipDao" class="org.apache.openmeetings.data.conference.dao.SipDao"&gt;</strong>
+				uncomment its parameters and set it to your custom values.
+				<p style="font-size: larger; color: blue;">
+					IMPORTANT: this step should be done <strong>BEFORE</strong> system install/restore
+					otherwise all SIP related room information will be lost
+				</p>   
+			</div><br />
+			<div>
+				Restart asterisk:
+				<blockquote>
+					<i>service asterisk restart</i>
+				</blockquote>
+			</div><br />
+		</section>
+
+		<section name="Setup red5sip transport">
+			<div>
+				Download red5sip from
+				<blockquote>http://red5phone.googlecode.com/svn/branches/red5sip_2.1</blockquote>
+			</div>
+			<div>
+				Build with Apache Ant
+				<blockquote>
+					<i>ant</i>
+				</blockquote>
+			</div>
+			<div>
+				Insert proper values to the <tt>/opt/red5sip/settings.properties</tt>
+
+				<blockquote>
+					<i>
+						red5.host=127.0.0.1 # red5 server address<br />
+						om.context=openmeetings # Openmeetings context<br /> 
+						red5.codec=asao<br />
+						red5.codec.rate=22 # should correlate with mic settings in public/config.xml<br />
+						sip.obproxy=127.0.0.1 # asterisk adderss<br />
+						sip.phone=red5sip_user # sip phone number<br />
+						sip.authid=red5sip_user # sip auth id<br />
+						sip.secret=12345 # sip password<br />
+						sip.realm=asterisk # sip realm<br />
+						sip.proxy=127.0.0.1 # address of sip proxy <br />
+						rooms.forceStart=no # TBD <br />
+						rooms=1 # TBD (not in use) <br />
+					</i>
+				</blockquote>
+			</div>
+			<div>
+				Add red5sip to autostart:
+				<blockquote>
+					<i>
+						sudo cp /opt/red5sip/red5sip /etc/init.d/<br />
+						sudo chmod a+x /etc/init.d/red5sip<br />
+						sudo update-rc.d red5sip defaults
+					</i>
+				</blockquote>
+			</div>
+			<div>
+				Start openmeetings
+				<blockquote>
+					<i>service red5 start</i>
+				</blockquote>
+			</div>
+			<div>
+				Start red5sip
+				<blockquote>
+					<i>service red5sip start</i>
+				</blockquote>
+			</div>
+		</section>
+	</body>
+</document>
diff --git a/xdocs/red5sip-integration_3.0.xml b/xdocs/red5sip-integration_3.0.xml
new file mode 100644
index 0000000..3f33535
--- /dev/null
+++ b/xdocs/red5sip-integration_3.0.xml
@@ -0,0 +1,317 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+	<properties>
+		<title>SIP-Transport Integration</title>
+		<author email="solomax@apache.org">OpenMeetings Team</author>
+	</properties>
+	<body>
+		<section name="SIP-Transport Integration">
+			<p>You need Apache OpenMeetings <strong>version 3.0</strong> to apply this guide!</p>
+			<p>You need Asterisk <strong>version 11</strong> to apply this guide!</p>
+			<p>Here is instruction how-to set up red5sip transport integration with OpenMeetings on Ubuntu 12.10.</p>
+		</section>
+		<section name="Prerequisites">
+			<div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo apt-get update &amp;&amp; sudo apt-get upgrade<br />
+						sudo apt-get install build-essential linux-headers-`uname -r` libxml2-dev libncurses5-dev libsqlite3-dev sqlite3 openssl libssl-dev<br />
+					</i>
+				</blockquote>
+			</div>
+		</section>
+		<section name="ODBC Setup">
+			<div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo apt-get update<br />
+						sudo apt-get install unixODBC unixODBC-dev libmyodbc
+					</i>
+				</blockquote>
+			</div>
+			<div>
+				Set up Asterisk connector:<br /><br />
+				Modify file <tt>/etc/odbc.ini</tt> as follows: (replace USER, PASSWORD and Socket with values relative to your system)
+				<blockquote>
+					<i>
+						[asterisk-connector]<br />
+						Description = MySQL connection to 'openmeetings' database<br />
+						Driver = MySQL<br />
+						Database = openmeetings<br />
+						Server = localhost<br />
+						USER = root<br />
+						PASSWORD =<br />
+						Port = 3306<br />
+						Socket = /var/run/mysqld/mysqld.sock<br />
+					</i>
+				</blockquote><br /><br />
+				Modify file <tt>/etc/odbcinst.ini</tt> as follows: (replace the path to the *.so files below with the real paths on your system)
+				<blockquote>
+					(The path below is for x32 server, x64 version is most probably located at <tt>/usr/lib/x86_64-linux-gnu/odbc</tt>)<br/>
+					<i>
+						[MySQL]<br />
+						Description = ODBC for MySQL<br />
+						Driver = /usr/lib/i386-linux-gnu/odbc/libmyodbc.so<br />
+						Setup = /usr/lib/i386-linux-gnu/odbc/libodbcmyS.so<br />
+						FileUsage = 1<br />
+					</i>
+				</blockquote><br /><br />
+				Run the following command to ensure everything works as expected:
+				<blockquote>
+					<i>echo "select 1" | isql -v asterisk-connector</i>
+				</blockquote>
+			</div>
+		</section>
+		<section name="Building and setting up Asterisk">
+			<div>
+				Run the commands
+				<blockquote>
+					<i>
+						sudo mkdir /usr/src/asterisk &amp;&amp; cd /usr/src/asterisk<br />
+						sudo wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-11.2.1.tar.gz<br />
+						sudo tar -xvzf asterisk-11.2.1.tar.gz<br />
+						cd ./asterisk-11.2.1<br />
+						sudo make clean<br />
+						sudo ./configure<br />
+						sudo make<br />
+						sudo make install<br />
+						sudo make samples<br />
+						sudo make config<br />
+						sudo service asterisk start<br />
+					</i>
+				</blockquote>
+			</div>
+		</section>
+		<section name="Configure Asterisk">
+			<div>
+				Enable asterisk ODBC module:<br /><br />
+				Modify "[modules]" section of <tt>/etc/asterisk/modules.conf</tt> as follows:<br />
+				<strong>Add/uncomment the following lines</strong>
+				<blockquote>
+					<i>
+						preload => res_odbc.so<br />
+						preload => res_config_odbc.so<br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Create/update "[asterisk]" section in <tt>/etc/asterisk/res_odbc.conf</tt>:
+				<blockquote>
+					<i>
+						[asterisk]<br />
+						enabled => yes<br />
+						dsn => asterisk-connector<br />
+						pre-connect => yes
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Modify <tt>/etc/asterisk/sip.conf</tt><br />
+				<strong>Add/uncomment the following line</strong>:<br />
+				<blockquote>
+					<i>
+						videosupport=yes<br />
+						rtcachefriends=yes<br />
+					</i>
+				</blockquote>
+				<strong>Increase maxexpiry value to 43200</strong>:<br />
+				<blockquote>
+					<i>
+						maxexpiry=43200<br />
+				        </i>
+				</blockquote>
+				<strong>Add user for the "SIP Transport"</strong>:<br />
+				<blockquote>
+					<i>
+						[red5sip_user]<br />
+						type=friend<br />
+						secret=12345<br />
+						disallow=all<br />
+						allow=ulaw<br />
+						allow=h264<br />
+						host=dynamic<br />
+						nat=force_rport,comedia<br />
+						context=rooms-red5sip<br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Add next lines into the <tt>/etc/asterisk/extconfig.conf</tt>:
+				<blockquote>
+					<i>
+						[settings]<br />
+						sippeers => odbc,asterisk,sipusers<br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Modify <tt>/etc/asterisk/extensions.conf</tt><br />
+				<strong>Add the following section</strong>:<br />
+				<blockquote>
+					<i>
+						[rooms]<br />
+						exten => _400X!,1,GotoIf($[${DB_EXISTS(openmeetings/rooms/${EXTEN})}]?ok:notavail)<br />
+						exten => _400X!,n(ok),SET(PIN=${DB(openmeetings/rooms/${EXTEN})})<br />
+						exten => _400X!,n,Set(CONFBRIDGE(user,template)=sip_user)<br />
+						exten => _400X!,n,Set(CONFBRIDGE(user,pin)=${PIN})<br />
+						exten => _400X!,n(ok),Confbridge(${EXTEN},default_bridge,)<br />
+						exten => _400X!,n,Hangup<br />
+						exten => _400X!,n(notavail),Answer()<br />
+						exten => _400X!,n,Playback(invalid)<br />
+						exten => _400X!,n,Hangup<br />
+						<br />
+						[rooms-originate]<br />
+						exten => _400X!,1,Confbridge(${EXTEN},default_bridge,sip_user)<br />
+						exten => _400X!,n,Hangup<br />
+						<br />
+						[rooms-out]<br />
+						; *****************************************************<br />
+						; Extensions for outgoing calls from Openmeetings room.<br />
+						; *****************************************************<br />
+						<br />
+						[rooms-red5sip]<br />
+						exten => _400X!,1,GotoIf($[${DB_EXISTS(openmeetings/rooms/${EXTEN})}]?ok:notavil)<br />
+						exten => _400X!,n(ok),Confbridge(${EXTEN},default_bridge,red5sip_user)<br />
+						exten => _400X!,n(notavail),Hangup <br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Modify <tt>/etc/asterisk/confbridge.conf</tt><br />
+				<strong>Add/Modify the following secions</strong>:<br />
+				<blockquote>
+					<i>
+						[general]<br />
+						<br />
+						[red5sip_user]<br />
+						type=user<br />
+						marked=yes<br />
+						dsp_drop_silence=yes<br />
+						denoise=true<br />
+						<br />
+						[sip_user]<br />
+						type=user<br />
+						end_marked=yes<br />
+						wait_marked=yes<br />
+						music_on_hold_when_empty=yes<br />
+						dsp_drop_silence=yes<br />
+						denoise=true<br />
+						<br />
+						[default_bridge]<br />
+						type=bridge<br />
+						video_mode=follow_talker<br /> 
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				To enable Asterisk Manager API modify <tt>/etc/asterisk/manager.conf</tt><br />
+				<strong>Add/Modify the following sections</strong>:<br />
+				<blockquote>
+					<i>
+						[general]<br />
+						enabled = yes<br />
+						webenabled = no<br />
+						port = 5038<br />
+						bindaddr = 127.0.0.1<br />
+						<br />
+						[openmeetings]<br />
+						secret = 12345<br />
+						deny=0.0.0.0/0.0.0.0<br />
+						permit=127.0.0.1/255.255.255.0<br />
+						read = all<br />
+						write = all<br />
+					</i>
+				</blockquote>
+			</div><br />
+			<div>
+				Update Openmeetings with creadentials for Asterisk manager. 
+				Modify <tt>/opt/red5/webapps/openmeetings/WEB-INF/classes/openmeetings-applicationContext.xml</tt><br />
+				find <strong>&lt;bean id="sipDao" class="org.apache.openmeetings.db.dao.room.SipDao"&gt;</strong>
+				uncomment its parameters and set it to your custom values.
+				<p style="font-size: larger; color: blue;">
+					IMPORTANT: this step should be done <strong>BEFORE</strong> system install/restore
+					otherwise all SIP related room information will be lost
+				</p>   
+			</div><br />
+			<div>
+				Restart asterisk:
+				<blockquote>
+					<i>service asterisk restart</i>
+				</blockquote>
+			</div><br />
+		</section>
+
+		<section name="Setup red5sip transport">
+			<div>
+				Download red5sip from
+				<blockquote>git clone https://github.com/solomax/red5phone.git</blockquote>
+			</div>
+			<div>
+				Switch to the correct branch: <blockquote>git checkout red5sip_3.0</blockquote>
+			</div>
+			<div>
+				Build with Apache Ant
+				<blockquote>
+					<i>ant</i>
+				</blockquote>
+			</div>
+			<div>
+				Insert proper values to the <tt>/opt/red5sip/settings.properties</tt>
+
+				<blockquote>
+					<i>
+						red5.host=127.0.0.1 # red5 server address<br />
+						om.context=openmeetings # Openmeetings context<br /> 
+						red5.codec=asao<br />
+						red5.codec.rate=22 # should correlate with mic settings in public/config.xml<br />
+						sip.obproxy=127.0.0.1 # asterisk adderss<br />
+						sip.phone=red5sip_user # sip phone number<br />
+						sip.authid=red5sip_user # sip auth id<br />
+						sip.secret=12345 # sip password<br />
+						sip.realm=asterisk # sip realm<br />
+						sip.proxy=127.0.0.1 # address of sip proxy <br />
+						rooms.forceStart=no # TBD <br />
+						rooms=1 # TBD (not in use) <br />
+					</i>
+				</blockquote>
+			</div>
+			<div>
+				Add red5sip to autostart:
+				<blockquote>
+					<i>
+						sudo cp /opt/red5sip/red5sip /etc/init.d/<br />
+						sudo chmod a+x /etc/init.d/red5sip<br />
+						sudo update-rc.d red5sip defaults
+					</i>
+				</blockquote>
+			</div>
+			<div>
+				Start openmeetings
+				<blockquote>
+					<i>service red5 start</i>
+				</blockquote>
+			</div>
+			<div>
+				Start red5sip
+				<blockquote>
+					<i>service red5sip start</i>
+				</blockquote>
+			</div>
+		</section>
+	</body>
+</document>
diff --git a/xdocs/stylesheets/errortable.xsl b/xdocs/stylesheets/errortable.xsl
new file mode 100644
index 0000000..40a0906
--- /dev/null
+++ b/xdocs/stylesheets/errortable.xsl
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

+	<xsl:output method="xml"/>

+	

+	<xsl:template match="ROOT">

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+<xsl:comment>

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ </xsl:comment>

+	<properties>

+		<title>Openmeetings Errors table</title>

+		<author email="solomax@apache.org">Apache OpenMeetings Documentation Robot</author>

+	</properties>

+	<body>

+		<section name="Openmeetings Errors table">

+		<table>

+			<tr>

+				<th>Code</th>

+				<th>Type</th>

+				<th>Description</th>

+			</tr>

+			<xsl:apply-templates/>

+		</table>

+		</section>

+	</body>

+</document>

+	</xsl:template>

+	

+	<xsl:template match="row">

+			<tr>

+				<td>-<xsl:value-of select="field[@name='errorvalues_id']"/></td>

+				<td>

+					<xsl:variable name="typeId" select="field[@name='errortype_id']"/>

+					<xsl:variable name="x">

+						<xsl:choose>

+							<xsl:when test="$typeId='1'">322</xsl:when>

+							<xsl:otherwise>323</xsl:otherwise>

+						</xsl:choose>

+					</xsl:variable>

+					<xsl:value-of select="document('../../src/web/java/org/apache/openmeetings/web/app/Application.properties.xml')/properties/entry[@key=$x]/text()" />

+				</td>

+				<td>

+					<xsl:variable name="descId" select="field[@name='fieldvalues_id']"/>

+					<xsl:value-of select="document('../../src/web/java/org/apache/openmeetings/web/app/Application.properties.xml')/properties/entry[@key=$descId]/text()" />

+				</td>

+			</tr>

+	</xsl:template>

+</xsl:stylesheet>
\ No newline at end of file
diff --git a/xdocs/stylesheets/project.xml b/xdocs/stylesheets/project.xml
new file mode 100644
index 0000000..05f27d4
--- /dev/null
+++ b/xdocs/stylesheets/project.xml
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

+    xsi:noNamespaceSchemaLocation="project.xsd"

+	name="Apache OpenMeetings Project"

+    href="http://openmeetings.apache.org/">

+

+    <title>Apache OpenMeetings</title>

+    <!--  -->

+    <logo href="/images/logo-2.jpg">Apache OpenMeetings</logo>

+	

+    <body>

+

+    <menu name="General">

+        <item name="Home"                   href="/index.html"/>

+        <item name="License"                href="/license.html"/>

+        <item name="ASF"                    href="http://www.apache.org/"/>

+        <item name="Downloads"              href="/downloads.html"/>

+        <item name="Commercial Support"     href="/commercial-support.html"/>

+    </menu>

+    

+    <menu name="Installation and Upgrade">

+    	<item name="Installation"           href="/installation.html"/>

+    	<item name="Upgrade"           		href="/Upgrade.html"/>

+    	<item name="Tutorials"				href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/Tutorials+for+installing+OpenMeetings+and+Tools" />

+    	<item name="Command Line Admin"		href="/CommandLineAdmin.html" />

+    </menu>

+

+    <menu name="Community">

+        <item name="Get Involved"           href="/get-involved.html"/>

+        <item name="Committers"             href="/team-list.html"/>

+        <item name="Mailing Lists"          href="/mail-lists.html"/>

+    	<item name="Wiki"                   href="http://cwiki.apache.org/confluence/display/OPENMEETINGS/" />

+    </menu>

+

+    <menu name="Development">

+        <item name="Source Code"            href="/svn.html"/>

+        <item name="Bugs / Issues (JIRA)"   href="http://issues.apache.org/jira/browse/OPENMEETINGS"/>

+        <item name="Dependencies"           href="/dependencies.html"/>

+        <item name="Build Instructions"     href="/BuildInstructions.html"/>

+        <item name="JUnit Testing"          href="/JUnitTesting.html"/>

+        <item name="Manual Testing"         href="/ManualTesting.html"/>

+        <item name="Release Guide"          href="/ReleaseGuide.html"/>

+        <item name="Website Guide"          href="/WebsiteGuide.html"/>

+    </menu>

+    

+    <menu name="Integration">

+        <item name="SOAP/REST API"          href="/SoapRestAPI.html" />

+        <item name="REST API Sample"        href="/RestAPISample.html" />

+        <item name="Ldap and ADS"           href="/LdapAndADS.html" />

+	<item name="OAuth2"		    href="/oauth2.html" />

+        <item name="VoIP and SIP"           href="/voip-sip-integration.html" />

+        <item name="Errors table"           href="/ErrorsTable.html" />

+    </menu>

+    

+    <menu name="Plugins">

+        <item name="Moodle Plugin"          href="/MoodlePlugin.html" />

+        <item name="Sakai Plugin"          	href="/SakaiPlugin.html" />

+        <item name="Jira Plugin"          	href="/JiraPlugin.html" />

+        <item name="Joomla Plugin"          href="/JoomlaPlugin.html" />

+        <item name="Drupal Plugin"          href="/DrupalPlugin.html" />

+		<item name="Bitrix Plugin"			href="/BitrixPlugin.html" />

+        <item name="Confluence Plugin"      href="/ConfluencePlugin.html" />

+        <item name="SugarCRM Plugin"        href="/SugarCRMPlugin.html" />

+        <item name="Redmine Plugin"         href="/RedminePlugin.html" />

+    </menu>

+    

+    <menu name="Configuration">

+    	<item name="DB Sample Configurations" >

+    		<subitem name="Apache Derby" href="/ApacheDerbyConfig.html" />

+    		<subitem name="IBM DB2" href="/IBMDB2Config.html" />

+    		<subitem name="Oracle" href="/OracleConfig.html" />

+    		<subitem name="MySQL" href="/MySQLConfig.html" />

+    		<subitem name="Postgres" href="/PostgresConfig.html" />

+    		<subitem name="MSSQL" href="/MSSQLConfig.html" />
+    	</item>

+    	<item name="Localization and languages" >

+    		<subitem name="Internationalisation" href="/Internationalisation.html" />

+    		<subitem name="LanguageEditor" href="/LanguageEditor.html" />

+    		<subitem name="TimeZoneHandling" href="/TimeZoneHandling.html" />

+    		<subitem name="EditTemplates" href="/EditTemplates.html" />

+    	</item>

+    	<item name="NAT Port Settings" >

+    		<subitem name="Port settings" href="/PortSettings.html" />

+    	</item>

+    	<item name="Performance" >

+    		<subitem name="JVM performance tuning" href="/JVMPerformanceTuning.html" />

+    	</item>

+    	<item name="User Interface">

+    		<subitem name="Themes" href="/themes-and-branding.html" />

+    		<subitem name="Dashboard" href="/Dashboard.html" />

+    		<subitem name="Webcam resolutions" href="/WebcamResolutions.html" />

+    		<subitem name="Room layout options" href="/ConferenceRoomLayoutOptions.html" />

+    		<subitem name="Hot Keys" href="/HotKeys.html" />

+    	</item>

+    	<item name="Customization" >

+    		<subitem name="Webapp name/path" href="/WebappNamePath.html" />

+    		<subitem name="Navigation" href="/Navigation.html" />

+    		<subitem name="Calendar and timezone" href="/CalendarAndTimezone.html" />

+    		<subitem name="Custom room type" href="/CustomRoomTypeHowTo.html" />

+    		<subitem name="Custom ctypt mechanism" href="/CustomCryptMechanism.html" />

+    		<subitem name="General Configuration" href="/GeneralConfiguration.html" />

+    	</item>

+    	<item name="Security" >

+    		<subitem name="Restricted Access" href="/RestrictedAccess.html" />

+    		<subitem name="RTMPS and HTTPS" href="/RTMPSAndHTTPS.html" />

+    	</item>

+    	<item name="Converters" >

+    		<subitem name="OpenOffice Converter" href="/OpenOfficeConverter.html" />

+            <subitem name="FFMPEG Version Switch" href="/FFMPEGVersionSwitch.html" />

+        </item>

+    	<item name="Clustering" >

+    		<subitem name="Clustering" href="/Clustering.html" />

+    	</item>

+    	<item name="Misc" >

+    		<subitem name="Get version info" href="/GetVersionInfo.html" />

+    	</item>

+    </menu>

+    

+    <!-- 

+    <menu name="Integration">

+        <item name="SOAP/REST API"          href="/integration_api.html"/>

+        <item name="LDAP and ADS"           href="/integration_ldap.html"/>

+        <item name="VoIP and SIP"           href="/integration_voip.html"/>

+        <item name="Moodle Plugin"          href="/moodle_plugin.html"/>

+        <item name="SugarCRM Plugin"        href="/sugarcrm_plugin.html"/>

+    </menu>

+     -->

+     

+    

+

+    </body>

+</project>

diff --git a/xdocs/stylesheets/project.xsd b/xdocs/stylesheets/project.xsd
new file mode 100644
index 0000000..138bfa7
--- /dev/null
+++ b/xdocs/stylesheets/project.xsd
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

+  <xs:element name="project">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element ref="title"/>

+        <xs:element ref="logo"/>

+        <xs:element ref="body"/>

+      </xs:sequence>

+      <xs:attribute name="href" use="required" type="xs:anyURI"/>

+      <xs:attribute name="name" use="required"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="title" type="xs:string"/>

+  <xs:element name="logo">

+    <xs:complexType mixed="true">

+      <xs:attribute name="href" use="required"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="body">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="menu"/>

+      </xs:sequence>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="menu">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element maxOccurs="unbounded" ref="item"/>

+      </xs:sequence>

+      <xs:attribute name="name" use="required"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="item">

+    <xs:complexType>

+      <xs:sequence>

+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="subitem"/>

+      </xs:sequence>

+      <xs:attribute name="href" type="xs:anyURI"/>

+      <xs:attribute name="name" use="required"/>

+    </xs:complexType>

+  </xs:element>

+  <xs:element name="subitem">

+    <xs:complexType>

+      <xs:attribute name="href" use="required"/>

+      <xs:attribute name="name" use="required"/>

+    </xs:complexType>

+  </xs:element>

+</xs:schema>

diff --git a/xdocs/stylesheets/site.vsl b/xdocs/stylesheets/site.vsl
new file mode 100644
index 0000000..4449ba9
--- /dev/null
+++ b/xdocs/stylesheets/site.vsl
@@ -0,0 +1,426 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+          
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+
+
+<!-- Content Stylesheet for Site -->
+
+    ## Defined variables
+    #set ($menutablebg = "#FFFFFF")
+    #set ($menutablefg = "#000000")
+    #set ($bodybg = "#ffffff")
+    #set ($bodyfg = "#000000")
+    #set ($bodylink = "#123465")
+    #set ($pagebannerbg = "#669AE6")
+    #set ($pagebannerfg = "#000000")
+    #set ($bannerbg = "#EEEEEE")
+    #set ($bannerfg = "#000000")
+    #set ($subbannerbg = "#EFEFEF")
+    #set ($subbannerfg = "#000000")
+    #set ($tablethbg = "#039acc")
+    #set ($tabletdbg = "#a0ddf0")
+    #set ($colorhrline = "#999999")
+    
+<!-- start the processing -->
+#document()
+<!-- end the processing -->
+
+## This is where the macro's live
+
+#macro ( feature $feature)
+	<h3>$feature.getAttributeValue("title")</h3>
+	<table border="0">
+		<tbody>
+			<tr>
+				<td style="text-align: center;" width="300">
+					#foreach ( $items in $feature.getChildren() )
+						#if ($items.getName().equals("image"))
+							<p>
+							<a class="group1 fancybox-buttons" href="$items.getAttributeValue("fullhref")">
+								<img src="$items.getAttributeValue("href")" alt="" width="$items.getAttributeValue("width")"
+									#if ($items.getAttributeValue("height")) height="$items.getAttributeValue("height")" #end />
+							</a>
+						#end
+					#end
+				</td>
+				<td>
+					#foreach ( $items in $feature.getChildren() )
+						#if ($items.getName().equals("text"))
+							$items.getChildren()
+						#end
+					#end
+				</td>
+			</tr>
+	    </tbody>
+	</table>
+#end
+
+#macro ( table $table)
+<table>
+    #foreach ( $items in $table.getChildren() )
+        #if ($items.getName().equals("tr"))
+            #tr ($items)
+        #end
+    #end
+</table>
+#end
+
+#macro ( tr $tr)
+<tr>
+    #foreach ( $items in $tr.getChildren() )
+        #if ($items.getName().equals("td"))
+            #td ($items)
+        #elseif ($items.getName().equals("th"))
+            #th ($items)
+        #end
+    #end
+</tr>
+#end
+
+#macro ( td $value)
+#if ($value.getAttributeValue("colspan"))
+#set ($colspan = $value.getAttributeValue("colspan"))
+#end
+#if ($value.getAttributeValue("rowspan"))
+#set ($rowspan = $value.getAttributeValue("rowspan"))
+#end
+#if ($value.getAttributeValue("class"))
+#set ($class = $value.getAttributeValue("class"))
+#end
+<td bgcolor="$tabletdbg" class="$class" colspan="$!colspan" rowspan="$!rowspan" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+    #if ($value.getText().length() != 0 || $value.hasChildren())
+    $value.getContent()
+    #else
+    &nbsp;
+    #end
+</td>
+#end
+
+#macro ( th $value)
+#if ($value.getAttributeValue("colspan"))
+#set ($colspan = $value.getAttributeValue("colspan"))
+#end
+#if ($value.getAttributeValue("rowspan"))
+#set ($rowspan = $value.getAttributeValue("rowspan"))
+#end
+#if ($value.getAttributeValue("class"))
+#set ($class = $value.getAttributeValue("class"))
+#end
+<th bgcolor="$tablethbg" class="$class" colspan="$!colspan" rowspan="$!rowspan" valign="top" align="left" style="color: black; font-size: small; font-family: arial, helvetica, sanserif;">
+    #if ($value.getText().length() != 0 || $value.hasChildren())
+    $value.getContent()
+    #else
+    &nbsp;
+    #end
+</th>
+#end
+
+#macro ( projectanchor $name $value )
+#if ($value.startsWith("http://") || $value.startsWith("https://"))
+    <a href="$value">$name</a>
+#elseif ($value.startsWith("/site"))
+    <a href="http://jakarta.apache.org$value">$name</a>
+#else
+    <a href="$relativePath$value">$name</a>
+#end
+#end
+
+#macro ( metaauthor $author $email )
+            <meta name="author" content="$author">
+            <meta name="email" content="$email">
+#end
+
+#macro ( image $value )
+#if ($value.getAttributeValue("width"))
+#set ($width=$value.getAttributeValue("width"))
+#end
+#if ($value.getAttributeValue("height"))
+#set ($height=$value.getAttributeValue("height"))
+#end
+#if ($value.getAttributeValue("align"))
+#set ($align=$value.getAttributeValue("align"))
+#else
+#set ($align="middle")
+#end
+<img src="$relativePath/$value.getAttributeValue("src")" width="$!width" height="$!height" align="$!align">
+#end
+
+#macro ( source $value)
+    <div align="left">
+    <table style="border: solid 1px #023264; padding: 5px;">
+    <tr>
+      <td bgcolor="#ffffff"><pre>$escape.getText($value.getText())</pre></td>
+    </tr>
+    </table>
+    </div>
+#end
+
+#macro ( subsection $subsection)
+    <table border="0" cellspacing="0" cellpadding="0" width="100%">
+      <tr><td bgcolor="$subbannerbg">
+        <font color="$subbannerfg" face="arial,helvetica,sanserif">
+          <a name="$subsection.getAttributeValue("name")"><strong>$subsection.getAttributeValue("name")</strong></a>
+        </font>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+        #foreach ( $items in $subsection.getChildren() )
+            #if ($items.getName().equals("img"))
+                #image ($items)
+            #elseif ($items.getName().equals("source"))
+                #source ($items)
+            #elseif ($items.getName().equals("table"))
+                #table ($items)
+            #else
+                $items
+            #end
+        #end
+        </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+#end
+
+#macro ( section $section)
+    <table border="0" cellspacing="0" cellpadding="0" cellspacing="0" width="100%">
+      <tr><td ><!-- bgcolor="$bannerbg" -->
+        <font color="$bannerfg" face="verdana,arial,helvetica,sanserif">
+          <a name="$section.getAttributeValue("name")"><strong>$section.getAttributeValue("name")</strong></a>
+        </font>
+        <hr style="width:100%; color:$colorhrline; background-color:$colorhrline; height:1px; border:0px;"/>
+      </td></tr>
+      <tr><td>
+        <blockquote>
+        #foreach ( $items in $section.getChildren() )
+            #if ($items.getName().equals("img"))
+                #image ($items)
+            #elseif ($items.getName().equals("source"))
+                #source ($items)
+            #elseif ($items.getName().equals("table"))
+                #table ($items)
+            #elseif ($items.getName().equals("feature"))
+                #feature ($items)
+            #elseif ($items.getName().equals("subsection"))
+                #subsection ($items)
+            #else
+                $items
+            #end
+        #end
+        </blockquote>
+      </td></tr>
+      <tr><td><br/></td></tr>
+    </table>
+#end
+
+#macro ( makeProject )
+
+    <!-- ============================================================ -->
+    <div id="accordion" style="width: 100%">
+    
+    #set ($menus = $project.getChild("body").getChildren("menu"))
+    #foreach ( $menu in $menus )
+    	<h3><a href="#$menu.getAttributeValue("name").replaceAll(" ","")">$menu.getAttributeValue("name")</a></h3>
+    	<div>
+	        #foreach ( $item in $menu.getChildren() )
+	            #set ($name = $item.getAttributeValue("name"))
+	            #if ( $item.getAttributeValue("href").length() > 0 )
+	            	#projectanchor($name $item.getAttributeValue("href"))<br/>
+	        	#else
+	            	<b>$name</b><br/>
+	            		#foreach ( $subitem in $item.getChildren() )
+	            			#set ($name = $subitem.getAttributeValue("name"))
+	            			#projectanchor($name $subitem.getAttributeValue("href"))<br/>
+	            		#end
+	        	#end
+	        #end
+    	</div>
+    #end
+    
+    </div>
+     
+    <br/>
+    
+#end
+
+#macro (getProjectImage)
+#if ($project.getChild("logo"))
+#set ( $logoString = $project.getChild("logo").getAttributeValue("href") )
+<td align="left">
+#if ( $logoString.startsWith("/") )
+<a href="$project.getAttributeValue("href")"><img src="$relativePath$logoString" alt="$project.getChild("logo").getText()" border="0"/></a>
+#else
+<a href="$project.getAttributeValue("href")"><img src="$relativePath/$logoString" alt="$project.getChild("logo").getText()" border="0"/></a>
+#end
+</td>
+#end
+#end
+
+#macro (getBannerTitle)
+#if ( $root.getChild("properties").getChild("bannertitle") )
+    #set ( $pageBanner = $root.getChild("properties").getChild("bannertitle") )
+#else
+    #set ( $pageBanner = $root.getChild("properties").getChild("title").getText() )
+#end
+<td width="80%" align="right" valign="top" >
+	<a href="demo.html">Demo</a>
+	<span>|</span> 
+	<a href="downloads.html" target="_PARENT">Download</a>
+	<span>|</span> 
+	<a href="installation.html" target="_PARENT">Installation</a>
+	<span>|</span> 
+	<a href="https://cwiki.apache.org/confluence/display/OPENMEETINGS" target="_BLANK">Wiki</a>
+	<span>&nbsp;</span>
+</td>
+#end
+
+#macro (printMeta $metaElement)
+<meta #set ($attribs = $metaElement.getAttributes())
+#foreach ($a in $attribs) $a.getName()="$a.getValue()" #end />
+#end
+
+#macro (document)
+    <!-- ====================================================================== -->
+    <!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
+    <!-- Main Page Section -->
+    <!-- ====================================================================== -->
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+
+            #set ($authors = $root.getChild("properties").getChildren("author"))
+            #foreach ( $au in $authors )
+                #metaauthor ( $au.getText() $au.getAttributeValue("email") )
+            #end
+
+           #set ($metas = $root.getChildren("meta"))
+
+            ##    Parse meta directives such as
+            ##    <meta name="keyword" content="jakarta, java"/>
+            #foreach ($meta in $metas) #printMeta($meta) #end
+
+            ##    Support for <base> tags.
+            #if ($root.getChild("properties").getChild("base"))
+              #set ($url = $root.getChild("properties").getChild("base").getAttributeValue("href"))
+              <base href="$url"/>
+            #end
+
+            <title>$project.getChild("title").getText() - $root.getChild("properties").getChild("title").getText()</title>
+            <link rel="stylesheet" type="text/css" href="css/openmeetings.css">
+            <link rel="stylesheet" type="text/css" href="css/jquery-ui-1.10.4.custom.css">
+            <link rel="stylesheet" type="text/css" href="css/coin-slider-styles.css">
+            <link rel="stylesheet" type="text/css" href="css/colorbox.css" />
+            
+			<!-- Add jQuery library -->
+			<script type="text/javascript" src="js/jquery-1.11.0.min.js"></script>
+		
+			<!-- Add coinslider plugins -->
+			<script type="text/javascript" src="js/coin-slider.min.js"></script>
+			
+			<!-- Add colorbox plugin -->
+			<script type="text/javascript" src="js/jquery.colorbox.js"></script>
+		
+			<script src="js/jquery-ui-1.10.4.custom.min.js"></script>
+			
+			<script type="text/javascript">
+				$(function() {
+					$("#accordion").accordion({
+						heightStyle: 'content',
+						icons: false
+					});
+					var idx = location.href.lastIndexOf('/');
+					if (idx > -1) {
+						var url = '.' + location.href.substring(idx);
+						var a = $('#accordion a[href="' + url + '"]');
+						a.addClass('active');
+						var id = a.parent()[0].id;
+						var idx1 = id.lastIndexOf('-');
+						if (idx1 > -1) {
+							$("#accordion").accordion("option", "active", parseInt(id.substring(idx1 + 1)));
+						} 
+					}
+					$('.fancybox-buttons').colorbox({rel:'fancybox-buttons',width:"75%", height:"75%"});
+					$('#coin-slider').coinslider({ width: 640,height: 500, delay: 4000  });					
+				});
+			</script>
+			
+			<style type="text/css">
+				.fancybox-custom .fancybox-outer {
+					box-shadow: 0 0 50px #222;
+				}
+			</style>
+        </head>
+
+        <body bgcolor="$bodybg" text="$bodyfg" link="$bodylink" vlink="$bodylink" alink="#000000">  
+        	<div class="mainbody" style="min-width: 960px; width: 94%;">
+        	<div class="superbody" style="width: 100%;">
+            <table border="0" width="100%" cellspacing="0">
+                <!-- TOP IMAGE -->
+                <tr>
+                    #getProjectImage()
+                    #getBannerTitle()
+                </tr>
+            </table>
+            <table border="0" width="100%" cellspacing="4">
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+
+                <tr>
+                    <!-- LEFT SIDE NAVIGATION -->
+                    <td width="20%" valign="top" nowrap="nowrap">
+
+                    <!-- special ACon Logo - leave here for next time
+                    <a href="http://apachecon.com/2005/US/">
+                        <img src="http://apache.org/images/ac2005us_blue_125x125.jpg" height="125"
+                             width="125" border="0" alt="ApacheCon US 2005" />
+                    </a>  -->
+
+                   <!-- regular menu -->
+
+                    #makeProject()
+                    </td>
+                    <td width="80%" align="left" valign="top">
+                    #set ($allSections = $root.getChild("body").getChildren("section"))
+                    #foreach ( $section in $allSections )
+                        #section ($section)
+                    #end
+                    </td>
+                </tr>
+
+                <!-- FOOTER -->
+                <tr><td colspan="2">
+                    <hr noshade="noshade" size="1"/>
+                </td></tr>
+                <tr><td colspan="2">
+                    <div align="center"><font color="$bodylink" size="-1"><em>
+                    Copyright &#169; 2003-2014, The Apache Software Foundation
+                    </em></font></div>
+                </td></tr>
+            </table>
+            </div>
+            </div>
+        </body>
+    </html>
+#end
+
+
+
+
+
diff --git a/xdocs/svn.xml b/xdocs/svn.xml
new file mode 100644
index 0000000..ea53b2d
--- /dev/null
+++ b/xdocs/svn.xml
@@ -0,0 +1,345 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Source Code</title>
+		<author email="sebawagner@apache.org">
+			Sebastian Wagner
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="OpenMeetings Source Code">
+
+			<p>
+				OpenMeetings uses
+				<a class="external" rel="nofollow" href="http://subversion.tigris.org">
+					Subversion
+				</a>
+				to manage its source code.
+				If you're new to Subversion, you can check out the
+				<a href="http://svnbook.red-bean.com/">online book</a>
+				about Subversion.
+				Note that we are currently using Subversion 1.1.x (there are separate
+				versions of the book covering 1.0 and 1.1).
+			</p>
+			<p>
+				To receive notice of commits to the repository subscribe to
+				<a href="mailto:commits@openmeetings.apache.org">
+					commits@openmeetings.apache.org
+				</a>
+				by sending email to
+				<a href="mailto:commits-subscribe@openmeetings.apache.org">
+					commits-subscribe@openmeetings.apache.org
+				</a>
+				.
+			</p>
+
+		</section>
+
+		<section name="Web Access to Subversion">
+
+			<p>
+				If you just want to browse the source code, you can use the
+				<a class="external" rel="nofollow"
+					href="http://svn.apache.org/viewcvs/openmeetings">
+					ViewCVS web interface
+				</a>
+				to Subversion. This is current at all times.
+			</p>
+
+		</section>
+
+		<section name="Checking Out Code Using Subversion">
+
+			<p>Anyone can check code out of Subversion. You only need to specify
+				a
+				username and password to update the Subversion repository, and only
+				OpenMeetings committers can do that.
+				If you are a committer, are working from behind a firewall, or are
+				connected to the internet through a proxy server, please see the
+				sections
+				below for more information.
+			</p>
+
+			<subsection name="Anonymous check out from Subversion">
+				<p>Use a command like:</p>
+				<pre>% svn checkout
+					http://svn.apache.org/repos/asf/openmeetings </pre>
+				<p>Once you have OpenMeetings checked out you can update the source
+					by executing the following command from within the openmeetings
+					directory.
+				</p>
+				<pre>
+					% svn update
+				</pre>
+			</subsection>
+			<subsection name="Access from behind a firewall">
+
+				<p>For those users who are stuck behind a corporate firewall which
+					is
+					blocking http access to the Subversion repository, you can try to access it
+					via HTTPS:
+				</p>
+				<pre>
+					% svn checkout
+					https://svn.apache.org/repos/asf/openmeetings
+				</pre>
+
+			</subsection>
+			<subsection name="Access through a proxy">
+
+				<p>The Subversion client can go through a proxy, if you configure it
+					to do so. First, edit your "servers" configuration file to indicate
+					which
+					proxy to use. The files location depends on your operating system.
+					On Linux or Unix it is located in the directory "~/.subversion".
+					On Windows it is in "%APPDATA%\Subversion". (Try "echo %APPDATA%",
+					note this is a hidden directory.)
+				</p>
+				<p>There are comments in the file explaining what to do. If you
+					don't have
+					that file, get the latest Subversion client and run any command; this
+					will
+					cause the configuration directory and template files to be created.
+				</p>
+				<p>Example : Edit the 'servers' file and add something like :
+				</p>
+				<pre>
+					[global]
+					http-proxy-host = your.proxy.name
+					http-proxy-port = 3128
+				</pre>
+
+			</subsection>
+
+			<subsection name="Committer access">
+
+				<p>Everyone can access the Apache Podling Subversion repository via
+					HTTPS,
+					but OpenMeetings Committers must checkout the Subversion repository
+					via HTTPS.
+				</p>
+				<pre>
+					% svn checkout
+					https://svn.apache.org/repos/asf/openmeetings
+				</pre>
+			</subsection>
+		</section>
+
+		<section name="Submitting Code Changes">
+			<subsection name="Submitting a patch">
+
+				<p>If you make changes to OpenMeetings, and would like to contribute
+					it to the project, you should open a JIRA issue and discuss the
+					merits
+					of the proposal with the developer community. If there is agreement,
+					create a patch and attach it to the JIRA issue.
+				</p>
+				<p>
+					To create a patch, execute the svn diff command. This creates a patch
+					that
+					can easily be uploaded to a JIRA issue. A good name for the patch
+					includes
+					the JIRA issue name, e.g. OPENMEETINGS-104.patch. If there are several
+					patches
+					for the same JIRA issue, you might include your initials, e.g.
+					OPENMEETINGS-104.clr.patch
+				</p>
+				<pre>
+					% svn diff &gt; OPENMEETINGS-104.clr.patch
+				</pre>
+			</subsection>
+
+			<subsection name="Committing changes to subversion">
+				<p>
+					To commit changes to the subversion repository, you must be an
+					OpenMeetings committer. See
+					<a href="get-involved.html">get involved</a>
+					for information on how to become a committer and how to set up your
+					password once you become a committer.
+				</p>
+
+				<p>
+					Once your password is set, you can use a command like this to commit:
+				</p>
+				<pre>
+					$&gt; svn commit --username your-username
+					Authentication realm: &lt;https://svn.apache.org:443&gt; ASF Committers
+					Password for 'your-username': your-password
+				</pre>
+				<p>You can also pass your password on the command line directly, but
+					this is a security problem on multiuser unix computers (the command
+					line
+					arguments are available via the ps command). Here is the command if you
+					are Windows or a single user unix computer:
+				</p>
+				<pre>
+					$&gt; svn commit --username your-username --password your-password
+				</pre>
+				<p>Remember to replace 'your-username' and 'your-password' with
+					your actual username and password on svn.apache.org.
+				</p>
+
+			</subsection>
+		</section>
+
+		<section name="Building Podling from Source">
+			<p>
+				<!-- ***************** TBD ************************** -->
+				<!-- ***************** TBD ************************** -->
+				<!-- ***************** TBD ************************** -->
+				<!-- ***************** TBD ************************** -->
+				<!-- ***************** TBD ************************** -->
+				<!-- ***************** TBD ************************** -->
+				<!-- ***************** TBD ************************** -->
+			</p>
+
+		</section>
+
+		<section name="Using Subversion on Windows with cygwin">
+
+			<p>
+				If you use Subversion on Windows under cygwin, you may find that the
+				Subversion client automatically assigns the executable property to
+				non-executable files. In that case, you would see this at the bottom
+				of
+				an
+				<em>svn diff</em>
+				of the file:
+			</p>
+			<pre>
+				Property changes on: test/sql/derby/datastoreidentity/schema1.sql
+				___________________________________________________________________
+				Name: svn:executable
+				+ *
+			</pre>
+			<p>This section explains the source of the problem and suggests some
+				actions to avoid it.
+			</p>
+
+			<subsection name="Background">
+
+				<p>Subversion carries executable information in the built-in
+					property
+					called svn:executable. This property, unlike others, may be present
+					or absent, but it has no value. You can add it or delete it, but you
+					cannot change its value.
+				</p>
+				<p>In theory, Subversion ignores Windows file permissions and by
+					default
+					does not set svn:executable. However, cygwin svn acts like Unix svn and
+					determines the svn:executable property based on file permissions.
+				</p>
+				<p>
+					If you create a file from the cygwin command line, by default it is
+					executable only if the filename ends with .bat, .com or .exe, or if
+					its
+					content starts with #!. [This is what the doc says, but you may see -x
+					for all files.] If you create a file using a Windows tool, by default
+					its Windows permissions are executable by all. Cygwin interprets
+					the
+					Unix-style permissions this way as well. If the file is executable by all,
+					cygwin svn sets the svn:executable property on the file when you
+					invoke
+					<em>svn add</em>
+					.
+				</p>
+			</subsection>
+			<subsection
+				name="Removing existing executable properties from the repository">
+
+				<p>You can use svn propdel to remove the svn:executable property
+					from your
+					working copy.
+				</p>
+				<pre>
+					svn propdel -R svn:executable .
+				</pre>
+				<p>will recursively remove the svn:executable property from all of
+					the
+					files below the current directory. You can use this and commit the
+					files to clean the repository if necessary.
+				</p>
+
+			</subsection>
+			<subsection
+				name="Preventing Subversion from adding unwanted executable 
+properties">
+
+				<p>
+					Windows/cygwin users who don't want to have to think about using
+					<em>svn
+						propdel
+					</em>
+					or
+					<em>chmod</em>
+					on each added file can use a non-cygwin
+					version of svn. The Subversion 1.2.3 Win32 binaries, downloadable from the
+					link at the bottom of
+					<a rel="nofollow" href="http://subversion.tigris.org/project_packages.html">
+						http://subversion.tigris.org/project_packages.html
+					</a>
+					, appear to work
+					well. After installation add the svn.exe location to your Windows PATH
+					variable. If you are switching from cygwin svn to Win32 svn
+				</p>
+				<ol type="1">
+					<li>
+						<p>Remove the subversion component from your cygwin installation
+							because when svn is invoked from a cygwin window, the cygwin
+							version is
+							found even if your cygwin/bin directory is later on the path. (In the
+							Select Packages window of the setup wizard, navigate to the
+							subversion
+							package in the Devel. category. Click on the status icon until Uninstall
+							is displayed. Click next and continue through the wizard until
+							installation
+							is complete.)
+						</p>
+					</li>
+					<li>
+						<p>Copy the servers file and the auth folder from the sygwin
+							~/.subversion
+							directory to C:\Documents and
+							Settings\&lt;user&gt;\Application Data\Subversion used by Win32
+							subversion.
+						</p>
+					</li>
+				</ol>
+				<p>Note that windows svn uses backslash as the path separator when
+					displaying file names. You cannot just copy and paste this file
+					name
+					to another svn command when running from within a cygwin shell.
+					You need to enclose the file name into double quotes.
+				</p>
+				<p>Alternatively, Windows users can set file permissions in Windows
+					Explorer. (Right-click on the top-level folder &amp; select
+					Properties.
+					Select the Security tab. Click Advanced. Remove all instances of
+					Read &amp; Execute from the Permission Entries. Click "Reset
+					permissions
+					on all child objects and enable propogations of inheritable
+					permissions".
+					Click Apply. OK. OK.) You will have to do this again when you do a clean
+					checkout to a new directory.
+				</p>
+
+			</subsection>
+		</section>
+	</body>
+</document>
diff --git a/xdocs/team-list-ru.xml b/xdocs/team-list-ru.xml
new file mode 100644
index 0000000..0a1d366
--- /dev/null
+++ b/xdocs/team-list-ru.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Команда проекта</title>
+		<author email="sebawagner@apache.org">
+			Sebastian Wagner
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="OpenMeetings Committers">
+
+			<p>
+				Люди, отмеченные на этой странице, имеют доступ к репозиторию исходного кода Apache Openmeetings. 
+				Данная страница предназначена для того, чтобы служить основой квалификационного отбора
+				по проектам, требующим модификации исходного кода Openmeetings.
+			</p>
+
+			
+			<table>
+				<tr>
+					<th>Имя</th>
+				</tr>
+				<tr>
+					<td>Себастьян Вагнер</td>
+				</tr>
+				<tr>
+					<td>Алексей Федотов</td>
+				</tr>
+				<tr>
+					<td>Евгений Ровинский</td>
+				</tr>
+				<tr>
+					<td>Максим Солодовник</td>
+				</tr>
+				<tr>
+					<td>Oliver Becherer</td>
+				</tr>
+				<tr>
+					<td>Eugen Schwert</td>
+				</tr>
+				<tr>
+					<td>Sascha Xander</td>
+				</tr>
+				<tr>
+					<td>Johnny Strom</td>
+				</tr>
+				<tr>
+					<td>Герман Грехов</td>
+				</tr>
+				<tr>
+					<td>Тимур Тлеукенов</td>
+				</tr>
+				<tr>
+					<td>Alvaro Bustos</td>
+				</tr>
+				<tr>
+					<td>George Kirkham</td>
+				</tr>
+				<tr>
+					<td>Stephen Cottham</td>
+				</tr>
+				<tr>
+					<td>Ирина Архипец</td>
+				</tr>
+				<tr>
+					<td>Василий Дегтярев</td>
+				</tr>
+				<tr>
+					<td>Денис Кандров</td>
+				</tr>
+				<tr>
+					<td>Юлия Альгаер</td>
+				</tr>
+				<tr>
+					<td>Артём Хоруженко</td>
+				</tr>
+			</table>
+			
+		</section>
+
+	</body>
+</document>
diff --git a/xdocs/team-list.xml b/xdocs/team-list.xml
new file mode 100644
index 0000000..64f4b88
--- /dev/null
+++ b/xdocs/team-list.xml
@@ -0,0 +1,159 @@
+<?xml version="1.0"?>
+<!--
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+ -->
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">
+
+	<properties>
+		<title>Project Team</title>
+		<author email="sebawagner@apache.org">
+			Sebastian Wagner
+		</author>
+	</properties>
+
+	<body>
+
+		<section name="OpenMeetings Committers">
+
+			<p>
+				The people listed below have made significant contributions to
+				Podling
+				by
+				working long and hard to make quality software for the rest
+				of the world to
+				use.
+			</p>
+
+			<p>
+				If you would like to contribute to Podling, please see the
+				<a
+					href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/New+committers+and+developers+task+idea+list"
+					target="_BLANK">https://cwiki.apache.org/confluence/display/OPENMEETINGS/New+committers+and+developers+task+idea+list
+				</a>
+				to find areas where you can contribute.
+				If there is nothing in there
+				that suits your interest, but you still
+				have
+				ideas, please feel free
+				to suggest them on the mailing list.
+			</p>
+			<p>
+				If you would like to become a committer, please see
+				<a href="get-involved.html">Get Involved</a>
+				.
+			</p>
+
+			<table>
+				<tr>
+					<th>Name</th>
+					<th>Organization</th>
+					<th>Contact/Website</th>
+				</tr>
+				<tr>
+					<td>Sebastian Wagner</td>
+					<td>Independent</td>
+					<td>
+						<a href="https://twitter.com/#!/dead_lock" target="_BLANK" rel="nofollow">https://twitter.com/#!/dead_lock
+						</a>
+					</td>
+				</tr>
+				<tr>
+					<td>Alexei Fedotov</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Evgeny Rovinsky</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Maxim Solodovnik</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Oliver Becherer</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Eugen Schwert</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Sascha Xander</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Johnny Strom</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Timur Tleukenov</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+                                <tr>
+					<td>Alvaro Bustos</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>George Kirkham</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Stephen Cottham</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Irina Arkhipets</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Vasiliy Degtyarev</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Denis Kandrov</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Yulia Algaer</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+				<tr>
+					<td>Artyom Horuzhenko</td>
+					<td>Independent</td>
+					<td></td>
+				</tr>
+								
+			</table>
+			
+			<p>
+			<a href="team-list-ru.html">Here</a> is the Russian version of this page.
+			</p>
+		</section>
+
+	</body>
+</document>
diff --git a/xdocs/themes-and-branding.xml b/xdocs/themes-and-branding.xml
new file mode 100644
index 0000000..2d71ea6
--- /dev/null
+++ b/xdocs/themes-and-branding.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>Theme and color</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="Available with Apache OpenMeetings 2.0">

+

+			<p>

+				Themes are only available starting with Openmeetings 2.x.

+				<br />

+				There are also more general client side configuration like port

+				configuration. Those configs are stored in the public/config.xml

+			</p>

+

+		</section>

+

+		<section name="Editing the theme">

+

+			<p>You can find the default theme in the SVN: </p>

+			<p>

+				<a

+					href="https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/main/webapp/openmeetings/public/theme.xml"

+					target="_BLANK" rel="nofollow">https://svn.apache.org/repos/asf/openmeetings/trunk/singlewebapp/src/main/webapp/openmeetings/public/theme.xml

+				</a>

+			</p>

+			<p>

+				Or if you already installed OpenMeetings on your machine at:

+				<br />

+				<tt>/webapps/openmeetings/public/theme.xml</tt>

+				<br />

+				The file contains border, background and font color definitions as

+				well as paths to icons that are loaded at runtime.

+				<br />

+				You can change the theme at runtime and just reload the browser

+				(eventually clear the browser cache) to see updates based on

+				modification in your theme.

+			</p>

+

+

+		</section>

+

+	</body>

+

+</document>

diff --git a/xdocs/voip-sip-integration.xml b/xdocs/voip-sip-integration.xml
new file mode 100644
index 0000000..977d8d4
--- /dev/null
+++ b/xdocs/voip-sip-integration.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<!--

+   Licensed under the Apache License, Version 2.0 (the "License");

+   you may not use this file except in compliance with the License.

+   You may obtain a copy of the License at

+

+       http://www.apache.org/licenses/LICENSE-2.0

+

+   Unless required by applicable law or agreed to in writing, software

+   distributed under the License is distributed on an "AS IS" BASIS,

+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+   See the License for the specific language governing permissions and

+   limitations under the License.

+ -->

+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

+

+	<properties>

+		<title>VoIP and SIP Integration</title>

+		<author email="sebawagner@apache.org">

+			OpenMeetings Team

+		</author>

+	</properties>

+

+	<body>

+

+		<section name="VoIP and SIP Integration">

+

+			<p>

+				There are multiple ways to integrate with VoIP and or SIP.

+				OpenMeetings does not provide out of the box a ready to run VoIP

+				integration / integration to cell phone or usual land lane.

+				The

+				nature of such integrations is that it depends heavily on the

+				infrastructure that you are using and where you would like to

+				integrate OpenMeetings into.

+				<br />

+				<br />

+				It also depends on a number of factors of which OpenMeetings is

+				impossible to set up for you, for example setting up your VoIP

+				server or provide you with a range of telephone numbers reserved for

+				conference calls in your national phone network.

+				Such an integration

+				project is likely to become a consulting job for a

+				telecommunications consultant.

+				<br />

+				<br />

+				To get help on the integration you can contact the

+				<a href="mail-lists.html">mailing lists</a>

+				or for example somebody from the list of

+				<a href="commercial-support.html">commercial support</a>

+				.

+                <br/><br/>

+                <a href="red5sip-integration_2.0.html">

+                Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 2.0

+                </a>.<br/>

+                <a href="red5sip-integration_2.1.html">

+                Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 2.1

+                </a>.<br/>

+                <a href="red5sip-integration_3.0.html">

+                Instruction how-to set up OpenMeetings SIP-Transport integration for Openmeetings 3.0

+                </a>.<br/>

+			</p>

+		</section>

+

+	</body>

+

+</document>
\ No newline at end of file
diff --git a/xdocs/website.xsd b/xdocs/website.xsd
new file mode 100644
index 0000000..311d016
--- /dev/null
+++ b/xdocs/website.xsd
@@ -0,0 +1,331 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+  <xs:element name="document">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="properties"/>
+        <xs:element ref="body"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="properties">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="title"/>
+        <xs:element ref="author"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="title" type="xs:string"/>
+  <xs:element name="author">
+    <xs:complexType mixed="true">
+      <xs:attribute name="email" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="body">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="section"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="section">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="a"/>
+        <xs:element ref="b"/>
+        <xs:element ref="br"/>
+        <xs:element ref="div"/>
+        <xs:element ref="img"/>
+        <xs:element ref="object"/>
+        <xs:element ref="ol"/>
+        <xs:element ref="p"/>
+        <xs:element ref="pre"/>
+        <xs:element ref="tt"/>
+        <xs:element ref="ul"/>
+        <xs:element ref="feature"/>
+        <xs:element ref="source"/>
+        <xs:element ref="style"/>
+        <xs:element ref="subsection"/>
+        <xs:element ref="table"/>
+      </xs:choice>
+      <xs:attribute name="name" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="feature">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="image"/>
+        <xs:element ref="text"/>
+      </xs:sequence>
+      <xs:attribute name="title" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="image">
+    <xs:complexType>
+      <xs:attribute name="fullhref" use="required"/>
+      <xs:attribute name="height" type="xs:integer"/>
+      <xs:attribute name="href" use="required"/>
+      <xs:attribute name="title" use="required"/>
+      <xs:attribute name="width" type="xs:integer"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="text">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element ref="div"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="source">
+    <xs:complexType mixed="true">
+      <xs:attribute name="test" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="style">
+  </xs:element>
+  <xs:element name="subsection">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:choice>
+          <xs:element ref="i"/>
+          <xs:choice minOccurs="0" maxOccurs="unbounded">
+            <xs:element ref="div"/>
+            <xs:element ref="ol"/>
+            <xs:element ref="p"/>
+            <xs:element ref="pre"/>
+          </xs:choice>
+        </xs:choice>
+        <xs:element minOccurs="0" ref="ul"/>
+      </xs:sequence>
+      <xs:attribute name="name" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="table">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="tr"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="tr">
+    <xs:complexType>
+      <xs:choice>
+        <xs:element maxOccurs="unbounded" ref="th"/>
+        <xs:element maxOccurs="unbounded" ref="td"/>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="th">
+    <xs:complexType mixed="true">
+      <xs:attribute name="style"/>
+      <xs:attribute name="class"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="td">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="a"/>
+        <xs:element ref="p"/>
+        <xs:element ref="b"/>
+      </xs:choice>
+      <xs:attribute name="style"/>
+      <xs:attribute name="class"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="ul">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="li"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="b">
+    <xs:complexType mixed="true">
+      <xs:sequence>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="br"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="i">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="a"/>
+        <xs:element ref="b"/>
+        <xs:element ref="br"/>
+        <xs:element ref="tt"/>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="p">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="a"/>
+        <xs:element ref="b"/>
+        <xs:element ref="br"/>
+        <xs:element ref="div"/>
+        <xs:element ref="i"/>
+        <xs:element ref="strong"/>
+        <xs:element ref="tt"/>
+        <xs:element ref="em"/>
+      </xs:choice>
+      <xs:attribute name="style"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="em" type="xs:string"/>
+  <xs:element name="pre" type="xs:string"/>
+  <xs:element name="ol">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="li"/>
+      </xs:sequence>
+      <xs:attribute name="type" type="xs:integer"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="div">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="a"/>
+        <xs:element ref="b"/>
+        <xs:element ref="blockquote"/>
+        <xs:element ref="br"/>
+        <xs:element ref="div"/>
+        <xs:element ref="i"/>
+        <xs:element ref="object"/>
+        <xs:element ref="ol"/>
+        <xs:element ref="p"/>
+        <xs:element ref="pre"/>
+        <xs:element ref="span"/>
+        <xs:element ref="strong"/>
+        <xs:element ref="tt"/>
+        <xs:element ref="ul"/>
+      </xs:choice>
+      <xs:attribute name="class" type="xs:NCName"/>
+      <xs:attribute name="id" type="xs:NCName"/>
+      <xs:attribute name="style" type="xs:anyURI"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="a">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="b"/>
+        <xs:element ref="img"/>
+        <xs:element ref="span"/>
+      </xs:choice>
+      <xs:attribute name="class" type="xs:NCName"/>
+      <xs:attribute name="href" use="required" type="xs:anyURI"/>
+      <xs:attribute name="rel" type="xs:NCName"/>
+      <xs:attribute name="target" type="xs:NCName"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="img">
+    <xs:complexType>
+      <xs:attribute name="alt" use="required"/>
+      <xs:attribute name="class" type="xs:NCName"/>
+      <xs:attribute name="height" type="xs:integer"/>
+      <xs:attribute name="src" use="required"/>
+      <xs:attribute name="title"/>
+      <xs:attribute name="width" type="xs:integer"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="object">
+    <xs:complexType>
+      <xs:sequence>
+        <xs:element maxOccurs="unbounded" ref="param"/>
+        <xs:element ref="embed"/>
+      </xs:sequence>
+      <xs:attribute name="style" use="required"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="param">
+    <xs:complexType>
+      <xs:attribute name="name" use="required" type="xs:NCName"/>
+      <xs:attribute name="value" use="required" type="xs:anyURI"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="embed">
+    <xs:complexType>
+      <xs:attribute name="allowScriptAccess" use="required" type="xs:NCName"/>
+      <xs:attribute name="allowfullscreen" use="required" type="xs:boolean"/>
+      <xs:attribute name="height" use="required" type="xs:integer"/>
+      <xs:attribute name="src" use="required" type="xs:anyURI"/>
+      <xs:attribute name="type" use="required"/>
+      <xs:attribute name="width" use="required" type="xs:integer"/>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="br">
+    <xs:complexType/>
+  </xs:element>
+  <xs:element name="tt">
+    <xs:complexType mixed="true">
+      <xs:sequence>
+        <xs:element minOccurs="0" maxOccurs="unbounded" ref="b"/>
+      </xs:sequence>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="li">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="a"/>
+        <xs:element ref="b"/>
+        <xs:element ref="blockquote"/>
+        <xs:element ref="br"/>
+        <xs:element ref="div"/>
+        <xs:element ref="i"/>
+        <xs:element ref="img"/>
+        <xs:element ref="ol"/>
+        <xs:element ref="p"/>
+        <xs:element ref="span"/>
+        <xs:element ref="strong"/>
+        <xs:element ref="tt"/>
+        <xs:element ref="ul"/>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="strong">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="a"/>
+        <xs:element ref="tt"/>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="blockquote">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="a"/>
+        <xs:element ref="br"/>
+        <xs:element ref="i"/>
+        <xs:element ref="tt"/>
+      </xs:choice>
+    </xs:complexType>
+  </xs:element>
+  <xs:element name="span">
+    <xs:complexType mixed="true">
+      <xs:choice minOccurs="0" maxOccurs="unbounded">
+        <xs:element ref="b"/>
+        <xs:element ref="br"/>
+      </xs:choice>
+      <xs:attribute name="style"/>
+    </xs:complexType>
+  </xs:element>
+</xs:schema>